
    f                         d Z ddlZddlmZ ddlmZ ddlmZ ddlm	Z	mZm
Z
 dZddlmZmZ i Zd	 Zej"                  fd
ZddZd ZddZddZd Zd ZddZddZy)zxImplemantation assertion facilities.

Revision information:
$Id: Implements.py 40218 2005-11-18 14:39:19Z andreasjung $
    N)	ClassType)verifyClass)	Interface)	TupleTyper   
StringType   )
ClassTypes
isInstancec                     t        |       }|t        v rt        | d      r$| j                  S t        | d      r| j                  S t
        j                  |d       S )N__class_implements____implements__)typer	   hasattrr   r   _typeImplementsget)objectts     l/var/dept/share/cheung/public_html/OutSchool/python/env/lib/python3.12/site-packages/Interface/Implements.pygetImplementsr   "   sS    VAJ612...	)	*$$$q$''    c                 h    t        |       t        v rt        | d      r| j                  S y  || d       S )Nr   )r   r	   r   r   )klasstigets     r   getImplementsOfInstancesr   -   s5    E{j 5*+'''UD!!r   c                    t        | dd      }|t        k(  st        | t              r ||       S | t        k(  r+t        |dd      }|t	        |      }|rt        ||||      S y|t        k(  st        |       t        u r| |||       }|t        ||||      S y|t        k(  st        |       t        u r| D ]  }t        ||||      }|s|c S  y|Ft        |       |k7  r8t        j                  dt        |       j                  d|j                        t        j                  dt        |       j                  z        )z
    Visits the interfaces described by an __implements__ attribute,
    invoking the visitor for each interface object.
    If the visitor returns anything true, the loop stops.
    This does not, and should not, visit superinterfaces.
    	__class__NzF__implements__ should be an interface or tuple,
                not a z pretending to be a zD__implements__ should be an interface or tuple,
            not a %sr   )getattrInterfaceClassr
   CLASS_INTERFACESr   visitImplementsr   r   r   
ExceptionsBadImplements__name__)
implementsr   visitorgetInterfaceimplements_classr   irs           r   r    r    7   sj    z;=>)*n-z""	'	'T2(/A&q&'<HH0 / 
Z	'4
+;z+I#VZ0A}&q&'<HH$ # 
Y	&$z*:i*G 	A67LAA		   '
//** 
#,,.>.G.GI 
 &&z*3345 	5r   c                     |t         | <   y)z_Assign a set of interfaces to a Python type such as int, str, tuple,
       list and dict.
    N)r   )r   
interfacess     r   assertTypeImplementsr,   e   s     %ODr   c                 X    g }t        |       }|s|S t        || |j                  |       |S N)r   r    append)r   r&   r)   r$   s       r   objectImplementsr0   k   s0    
Av&JJ,?Hr   c                 X    g }t        |       }|s|S t        || |j                  |       |S r.   )r   r    r/   )r   r&   r)   r$   s       r   instancesOfObjectImplementsr2   s   s0    
A)%0JJqxx>Hr   c                 `     ||        | j                         }|r|D ]  }t        ||        y y r.   )getBases_flatten)r(   r/   basesbs       r   r5   r5   |   s5    
1IJJLE 	 AQ	  r   c                 ^    t        |       t        u r| D ]  }t        ||        y  ||        y r.   )r   r   
_detuplize)	interfacer/   subinterfaces      r   r9   r9      s1    I)#% 	.Lf-	. 	yr   c                    g }| D ]  }t        ||j                          g }|D ]  }t        ||j                          |r?i }t        |      dz
  }|dk\  r*||   }|j	                  |      r||= nd||<   |dz
  }|dk\  r*|S )Nr   r   )r9   r/   r5   lenhas_key)r+   remove_duplicatesdetupledInterfacesr:   resr(   seenindexs           r   flattenInterfacesrD      s     9	907789
C  CJJ  C1qjE
A||AJQAIE qj Jr   c                 d    |rt        || d       t        | dd       }||| _        y ||f| _        y )Nr   )	tentativer   )r   r   r   )r   r:   checkolds       r   r$   r$      s9    Iu2'.C
{("I~r   r.   )r   )__doc__r!   typesr   Verifyr   _InterfaceClassr   r   r   r   r   _objectr	   r
   r   r   r   r   r    r,   r0   r2   r5   r9   rD   r$    r   r   <module>rO      sl       7 2 2   *( +:*=*= "+\% *.r   