§
    ÇtºfN  ã                   ó@   — d Z ddlmZ g d¢ZddlZd„ Zd„ Zd	d„Zd„ ZdS )
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                 ó  — | j         }| j        }||u }d|v }d|v }|o|}|o|d         |d         k    }|r%t          j                             |d         ¦  «        pd}|o|j        |u }|sd}	n|r|sd}	n|r|sd}	n|sd}	nd}	|	|||fS )	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
             úT/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/zope/interface/advice.pyr   r   )   sç   € ð Œ~€HØ”€Ià 	Ð)€MØ Ð(€IØ˜IÐ%€GàÐ$˜W€HØÐK˜I jÔ1°X¸lÔ5KÒK€HàÐ?�œŸš¨°:Ô)>Ñ?Ô?ÐGÀ4€FàÐ? 6¤?°iÐ#?Ðàð àˆˆØ	ð 
˜yð 
ØˆˆØ	ð ˜-ð ØˆˆØð Øˆˆð
 ˆØ�˜ 9Ð,Ð,ó    c                 óL   — t          | t          ¦  «        ot          | d¦  «        S )z(True if 'ob' is a class advisor functionÚpreviousMetaclass)Ú
isinstancer   Úhasattr)Úobs    r   r   r   N   s"   € å�b�,Ñ'Ô'ÐL­G°BÐ8KÑ,LÔ,LÐLr   c                 óò   — d„ | D ¦   «         }|�|                      |¦  «         t          |¦  «        dk    r|d         S t          |¦  «        }t          |¦  «        dk    rt          d| ¦  «        ‚|d         S )zEDetermine metaclass from 1+ bases and optional explicit __metaclass__c           	      óJ   — g | ] }t          |d t          |¦  «        ¦  «        ‘Œ!S )Ú	__class__)ÚgetattrÚtype)Ú.0Úbs     r   ú
<listcomp>z&determineMetaclass.<locals>.<listcomp>V   s*   € Ð<Ð<Ð<°�G�A�{¥D¨¡G¤GÑ,Ô,Ð<Ð<Ð<r   Né   r   zIncompatible metatypes)ÚappendÚlenr   Ú	TypeError)ÚbasesÚexplicit_mcÚmetaÚ
candidatess       r   r   r   S   s„   € ð =Ð<°eÐ<Ñ<Ô<€DàÐð 	�Š�KÑ Ô Ð å
ˆ4�y„y�A‚~€~à�AŒwˆå˜dÑ#Ô#€Jå
ˆ:�„˜ÒÐåÐ0°%Ñ8Ô8Ð8ð �aŒ=Ðr   c                 ó¦   — g }| D ]K}| D ]}t          ||¦  «        r||ur n/Œ||v r|                     |¦  «         |                     |¦  «         ŒL|S )z?Reduce a list of base classes to its ordered minimum equivalent)Ú
issubclassÚremover,   )Úclassesr2   ÚmÚns       r   r   r   k   s   € à€Jàð !ð !ˆØð 	!ð 	!ˆAÝ˜!˜QÑÔð  A¨Q J JØ�øð �JˆˆØ×!Ò! !Ñ$Ô$Ð$Ø×Ò˜aÑ Ô Ð øàÐr   )N)	Ú__doc__Útypesr   Ú__all__r   r   r   r   r   © r   r   ú<module>r=      sŽ   ððð ð Ð Ð Ð Ð Ð ðð ð €ð €
€
€
ð"-ð "-ð "-ðJMð Mð Mð
ð ð ð ð0ð ð ð ð r   