
    ~(phN                     @    S r SSKJr  / SQrSSKrS rS rS	S jrS rg)
aj  Class advice.

This module was adapted from 'protocols.advice', part of the Python
Enterprise Application Kit (PEAK).  Please notify the PEAK authors
(pje@telecommunity.com and tsarna@sarna.org) if bugs are found or
Zope-specific changes are required, so that the PEAK version of this module
can be kept in sync.

PEAK is a Python application framework that interoperates with (but does
not require) Zope 3 and Twisted.  It provides tools for manipulating UML
models, object-relational persistence, aspect-oriented programming, and more.
Visit the PEAK home page at http://peak.telecommunity.com for more information.
    )FunctionType)determineMetaclassgetFrameInfoisClassAdvisorminimalBasesNc                    U R                   nU R                  nXL nSU;   nSU;   nU=(       a    UnU=(       a    US   US   :H  nU=(       a"    [        R                  R	                  US   5      =(       d    SnU=(       a    UR
                  UL nU(       d  Sn	O.U(       a
  U(       d  Sn	OU(       a
  U(       d  Sn	OU(       d  Sn	OSn	XX4$ )	z|Return (kind,module,locals,globals) for a frame

'kind' is one of "exec", "module", "class", "function call", or "unknown".

__module____name__Nexecmoduleclasszfunction callunknown)f_locals	f_globalssysmodulesget__dict__)
framer   r   sameNamespace	hasModulehasNamesameNamer   namespaceIsModulekinds
             H/var/www/html/venv/lib/python3.13/site-packages/zope/interface/advice.pyr   r   )   s     ~~HI)M(II%G$WHKIj1Xl5KKH?:)>?G4F?6??i#?	y	-
 ,,    c                 H    [        U [        5      =(       a    [        U S5      $ )z(True if 'ob' is a class advisor functionpreviousMetaclass)
isinstancer   hasattr)obs    r   r   r   N   s    b,'LGB8K,LLr   c           
          U  Vs/ s H  n[        US[        U5      5      PM     nnUb  UR                  U5        [        U5      S:X  a  US   $ [	        U5      n[        U5      S:  a  [        SU 5      eUS   $ s  snf )zEDetermine metaclass from 1+ bases and optional explicit __metaclass__	__class__   r   zIncompatible metatypes)getattrtypeappendlenr   	TypeError)basesexplicit_mcbmeta
candidatess        r   r   r   S   s     7<<eGA{DG,eD< 	K 
4yA~Awd#J
:0%88 a=% =s    A:c                     / nU  HL  nU  H  n[        X25      (       d  M  X#Ld  M    M#     X!;   a  UR                  U5        UR                  U5        MN     U$ )z?Reduce a list of base classes to its ordered minimum equivalent)
issubclassremover(   )classesr/   mns       r   r   r   k   sX    JA!AJ 
 !!!$a   r   )N)	__doc__typesr   __all__r   r   r   r   r    r   r   <module>r:      s1     "-JM
0r   