
    X-PhvW                       d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZ ddlmZmZ  G d	 d
e          Zee         Z G d d          Z G d d          Zd dZd!dZd"dZd#dZd$dZdS )%z'Intermediate representation of classes.    )annotations)
NamedTuple)PROPSET_PREFIXJsonDict)FuncDeclFuncIRFuncSignature)	DeserMapsValue)	RInstanceRTypedeserialize_type)NameGeneratorexported_namec                  8    e Zd ZU ded<   ded<   ded<   ded<   d	S )
VTableMethodz	'ClassIR'clsstrnamer   methodFuncIR | Noneshadow_methodN)__name__
__module____qualname____annotations__     Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/ir/class_ir.pyr   r   H   s9         NNNIIINNN      r   r   c                     e Zd ZdZ	 	 	 	 	 d;d<dZd=dZed=d            Zd>dZd?dZ	d@dZ
dAdZdBdZdCdZdDdZdDdZdDd ZdDd!ZdDd"ZdEd%ZdEd&Zdd'dFd*Zdd'dGd,ZdDd-ZdHd.ZdId0ZdJd2ZdHd3ZdKd5ZedLd9            Zd:S )MClassIRzpIntermediate representation of a class.

    This also describes the runtime structure of native instances.
    FTr   r   module_nameis_traitboolis_generatedis_abstractis_ext_classis_final_classreturnNonec                   || _         || _        || _        || _        || _        || _        || _        d| _        d| _        d| _	        d| _
        d| _        d| _        d | _        t          |d |t          g t!          |                               | _        i | _        g | _        i | _        i | _        i | _        i | _        i | _        d | _        g | _        i | _        d | _        g | _        | g| _        | g| _        g | _         tC                      | _"        tC                      | _#        tC                      | _$        d| _%        g | _&        d | _'        d S NF)(r   r"   r#   r%   r&   r'   r(   is_augmentedinherits_pythonhas_dictallow_interpreted_subclassesneeds_getseters_serializablebuiltin_baser   r	   r   ctor
attributes	deletablemethod_declsmethodsglue_methods
propertiesproperty_typesvtablevtable_entriestrait_vtablesbasetraitsmrobase_mrochildrensetattrs_with_defaults_always_initialized_attrs_sometimes_initialized_attrsinit_self_leakbitmap_attrsenv_user_function)selfr   r"   r#   r%   r&   r'   r(   s           r   __init__zClassIR.__init__X   sq    	& (&(, "$,1)  % # )-T4mB	RV6X6XYY	,.$& 24*, @B DF 13-1-/;= %)	%' $(&(,v /1 .1UU  4755& 7:ee) $ (* 15r   c                .    d                     |           S )NzClassIR(name={self.name}, module_name={self.module_name}, is_trait={self.is_trait}, is_generated={self.is_generated}, is_abstract={self.is_abstract}, is_ext_class={self.is_ext_class}, is_final_class={self.is_final_class})rK   )formatrN   s    r   __repr__zClassIR.__repr__   s    
 D!!	
r   c                $    | j          d| j         S )N.)r"   r   rN   s    r   fullnamezClassIR.fullname   s    "00TY000r   ClassIR | Nonec                t    t          | j                  dk    r| j        d         j        s| j        d         S dS )z7Return the actual concrete base class, if there is one.   N)lenrA   r#   rN   s    r   	real_basezClassIR.real_base   s4    tx==1TXa[%98A;tr   intc                x    | j         
J d            || j         v sJ | j        d|            | j         |         S )Nzvtable not computed yet has no attribute )r<   r   rK   r   s     r   vtable_entryzClassIR.vtable_entry   sQ    {&&(A&&&t{"""ty$N$Nd$N$N"""{4  r   tuple[RType, ClassIR]c                    | j         D ]6}||j        v r|j        |         |fc S ||j        v r|j        |         |fc S 7t          | j        d|          Nr[   )rA   r5   r;   KeyErrorr   rK   r   irs      r   attr_detailszClassIR.attr_details   s    ( 	3 	3Br}$$}T*B....r((((.2222 )$)AAAABBBr   r   c                8    |                      |          d         S )Nr   )rd   r\   s     r   	attr_typezClassIR.attr_type   s      &&q))r   r   c                x    | j         D ]}||j        v r|j        |         c S t          | j        d|          r`   )rA   r7   ra   r   rb   s      r   method_declzClassIR.method_decl   sV    ( 	- 	-Br&&t,,,, '$)AAAABBBr   r	   c                6    |                      |          j        S N)rh   sigr\   s     r   
method_sigzClassIR.method_sig   s    %%))r   c                V    	 |                      |           n# t          $ r Y dS w xY wdS NFT)rh   ra   r\   s     r   
has_methodzClassIR.has_method   sE    	T"""" 	 	 	55	t    
&&c                   |                                  }|| j        S |                               r8|                               }|D ]}|                              |k    r dS dS t	          fd|D                        S )NFTc              3  B   K   | ]}|                               V  d S rj   )ro   ).0subcr   s     r   	<genexpr>z*ClassIR.is_method_final.<locals>.<genexpr>  s/      BBT4??400BBBBBBr   )
subclassesr(   ro   rh   any)rK   r   subsrh   rt   s    `   r   is_method_finalzClassIR.is_method_final  s      <&&??4   	C**400K ! !##D))[88 55 94BBBBTBBBBBBBr   c                V    	 |                      |           n# t          $ r Y dS w xY wdS rn   )rf   ra   r\   s     r   has_attrzClassIR.has_attr  sC    	NN4     	 	 	55	trp   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]}|j         v V  d S rj   )r6   rs   rc   r   s     r   ru   z'ClassIR.is_deletable.<locals>.<genexpr>  s*      ;;B42<';;;;;;r   rw   rA   r\   s    `r   is_deletablezClassIR.is_deletable  s(    ;;;;$(;;;;;;r   c                B    |                      |          rdS || j        v S r,   )r   rF   r\   s     r   is_always_definedzClassIR.is_always_defined  s+    T"" 	5t555r   namesr   c                B    |                     | j        | j                  S rj   )private_namer"   r   rK   r   s     r   name_prefixzClassIR.name_prefix   s    !!$"2DI>>>r   c                0    t          | j                   dS )NObject)r   rS   r   s     r   struct_namezClassIR.struct_name#  s    ..6666r   prefer_methodr   tuple[FuncIR, ClassIR] | Nonec               t    | j         D ]/}||j        v r$|j        |         }|s|j        j        r d S ||fc S 0d S rj   )rA   r8   declimplicit)rK   r   r   rc   func_irs        r   get_method_and_classzClassIR.get_method_and_class&  sg     ( 	# 	#Brz!!*T*$  )>    44{""" " tr   r   c               H    |                      ||          }|r|d         nd S )Nr   r   )r   )rK   r   r   ress       r   
get_methodzClassIR.get_method5  s-    ''M'JJ&s1vv$&r   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]}|j         v V  d S rj   )r7   r~   s     r   ru   z*ClassIR.has_method_decl.<locals>.<genexpr>:  s*      >>r42?*>>>>>>r   r   r\   s    `r   has_method_declzClassIR.has_method_decl9  s(    >>>>TX>>>>>>r   c                (    | j         g k    o| j         S rj   )rC   r0   rN   s    r   has_no_subclasseszClassIR.has_no_subclasses<  s    }"L4+L'LLr   set[ClassIR] | Nonec                    | j         | j        rdS t          | j                   }| j         D ]7}|j         r.|                                }| dS |                    |           8|S )zReturn all subclasses of this class, both direct and indirect.

        Return None if it is impossible to identify all subclasses, for example
        because we are performing separate compilation.
        N)rC   r0   rD   rv   update)rK   resultchild
child_subss       r   rv   zClassIR.subclasses?  sy     = D$E 4T]##] 	* 	*E~ *"--//
%44j)))r   list[ClassIR] | Nonec                n    |                                  }|dS d |D             }t          |d           S )zReturn all concrete (i.e. non-trait and non-abstract) subclasses.

        Include both direct and indirect subclasses. Place classes with no children first.
        Nc                .    h | ]}|j         	|j        |S r   )r#   r&   )rs   cs     r   	<setcomp>z.ClassIR.concrete_subclasses.<locals>.<setcomp>X  s&    III!AJI!-IAIIIr   c                <    t          | j        pg           | j        fS rj   )rW   rC   r   )r   s    r   <lambda>z-ClassIR.concrete_subclasses.<locals>.<lambda>\  s    s1:3C/D/Daf.M r   )key)rv   sorted)rK   rx   concretes      r   concrete_subclasseszClassIR.concrete_subclassesP  sI    
   <4IItIII h$M$MNNNNr   c                >    t          d | j        D                       S )Nc              3  $   K   | ]}|j         V  d S rj   )r2   )rs   cis     r   ru   z*ClassIR.is_serializable.<locals>.<genexpr>_  s%      772#777777r   r   rN   s    r   is_serializablezClassIR.is_serializable^  s!    77dh777777r   r   c                    i d j         d j        d j        d j        d j        d j        d j        d j        d	 j        d
 j	        d j
        d j        d j        d j        d j                                        dd  j                                        D             d fd j                                        D             i dd  j                                        D             dd  j                                        D             dd  j                                        D             dt-           j                  d j        dt3           j                  dd  j                                        D             d j        r j        j        nd d d!  j        D             d"d#  j        D             d$d%  j         D             d& j!        d'  j!        D             nd d( j"        d)tG           j$                  d*tG           j%                  d+tG           j&                  d, j'        d- j(        r j(        j)        nd iS ).Nr   r"   r#   r'   r&   r%   r-   r(   r.   r/   r0   r1   r2   r3   r4   r5   c                @    g | ]\  }}||                                 fS r   	serializers   kts      r   
<listcomp>z%ClassIR.serialize.<locals>.<listcomp>s  s)    RRR$!QAq{{}}-RRRr   r7   c                b    g | ]+\  }}||j         v r|j        n|                                f,S r   )r8   idr   )rs   r   drK   s      r   r   z%ClassIR.serialize.<locals>.<listcomp>v  sL       Aq A--ADD1;;==A  r   r8   c                &    g | ]\  }}||j         fS r   )r   )rs   r   ms      r   r   z%ClassIR.serialize.<locals>.<listcomp>{  s"    CCCdaAD	CCCr   r9   c                :    g | ]\  \  }}}|j         |f|j        fS r   )rS   r   )rs   cirr   r   s       r   r   z%ClassIR.serialize.<locals>.<listcomp>|  s;       .9hsA#,"AD)  r   r;   c                @    g | ]\  }}||                                 fS r   r   r   s      r   r   z%ClassIR.serialize.<locals>.<listcomp>  s)    ZZZda1;;==1ZZZr   r:   r<   r=   r>   c                @    g | ]\  }}|j         t          |          fS r   )rS   serialize_vtable)rs   r   vs      r   r   z%ClassIR.serialize.<locals>.<listcomp>  s9       8>Q/223  r   r?   r@   c                    g | ]	}|j         
S r   rS   rs   r   s     r   r   z%ClassIR.serialize.<locals>.<listcomp>  s    ;;;s|;;;r   rA   c                    g | ]	}|j         
S r   r   r   s     r   r   z%ClassIR.serialize.<locals>.<listcomp>  s    555SCL555r   rB   c                    g | ]	}|j         
S r   r   r   s     r   r   z%ClassIR.serialize.<locals>.<listcomp>  s    ???#???r   rC   c                    g | ]	}|j         
S r   r   r   s     r   r   z%ClassIR.serialize.<locals>.<listcomp>  s    777#777r   r6   rE   rF   rG   rH   rJ   )*r   r"   r#   r'   r&   r%   r-   r(   r.   r/   r0   r1   r2   r3   r4   r   r5   itemsr7   r8   r9   r;   listr:   r<   r   r=   r>   r?   rS   r@   rA   rB   rC   r6   r   rE   rF   rG   rH   rJ   r   rN   s   `r   r   zClassIR.serializea  s   4
DI4
4+4
 4
 D-	4

 4+4
 D-4
 D-4
 d14
 t34
 4
 +D,M4
 t34
 T/4
 D-4
 DI''))4
" RR$/:O:O:Q:QRRR#4
(      -3355  )4
 4
2 CCdl.@.@.B.BCCC34
4   =A=N=T=T=V=V  54
> ZZd>Q>W>W>Y>YZZZ?4
@ $t//A4
B dkC4
D .t/BCCE4
F   BFBTBZBZB\B\  G4
N $)=DI&&O4
P ;;t{;;;Q4
R 55DH555S4
T ?????U4
V ;?=;T777777Z^Y4
\ ]4
^ "6$*B#C#C_4
` (0N)O)Oa4
b +F43T,U,Uc4
d d1e4
 4
f  d>T!^!7!:!:Z^g4
 4
 4	
r   datactxr
   c                   |d         dz   |d         z   }|j         v sJ d|z              j         |         |d         _        |d         _        |d         _        |d         _        |d	         _        |d
         _        |d         _        |d         _        |d         _	        |d         _
        |d         _        |d         _        t          j        |d                   _        fd|d         D             _        fd|d         D             _        fd|d         D             _        fd|d         D             _        fd|d         D             _        fd|d         D             _        |d         _        t/          |d                   _        fd |d!         D             _        |d"         }|rj         |         nd _        fd#|d$         D             _        fd%|d&         D             _        fd'|d(         D             _        |d)         ofd*|d)         D             _        |d+         _        tA          |d,                   _!        tA          |d-                   _"        tA          |d.                   _#        |d/         _$        |d0         rj%        |d0                  nd _&        S )1Nr"   rR   r   zClass %s not in deser class mapr#   r%   r&   r'   r-   r(   r.   r/   r0   r1   r2   r3   r4   c                8    i | ]\  }}|t          |          S r   r   rs   r   r   r   s      r   
<dictcomp>z'ClassIR.deserialize.<locals>.<dictcomp>  s*    TTTA,Q44TTTr   r5   c                    i | ]B\  }}|t          |t                    rj        |         j        nt	          j        |          CS r   )
isinstancer   	functionsr   r   deserializers   r   r   r   s      r   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s\     
 
 
1 
1c(:(:\s}Q$$@TUVX[@\@\
 
 
r   r7   c                2    i | ]\  }}|j         |         S r   )r   r   s      r   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s&    FFFdaaq)FFFr   r8   c                R    i | ]#\  \  }}}j         |         |fj        |         $S r   )classesr   )rs   r   r   r   r   s       r   r   z'ClassIR.deserialize.<locals>.<dictcomp>  sB     
 
 
6?fq!aS[^Qq!1
 
 
r   r9   c                8    i | ]\  }}|t          |          S r   r   r   s      r   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s*    \\\TQQ 0C 8 8\\\r   r;   c                p    i | ]2}|j         |         j                             t          |z             f3S r   )r8   getr   )rs   r   rc   s     r   r   z'ClassIR.deserialize.<locals>.<dictcomp>  sF     
 
 
GHA
1rz~~nq.@AAB
 
 
r   r:   r<   r=   c                N    i | ]!\  }}j         |         t          |          "S r   )r   deserialize_vtabler   s      r   r   z'ClassIR.deserialize.<locals>.<dictcomp>  s=     
 
 
;?1aCKN.q#66
 
 
r   r>   r?   c                *    g | ]}j         |         S r   r   rs   sr   s     r   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    <<<S[^<<<r   r@   c                *    g | ]}j         |         S r   r   r   s     r   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    666Q#+a.666r   rA   c                *    g | ]}j         |         S r   r   r   s     r   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    @@@!s{1~@@@r   rB   rC   c                *    g | ]}j         |         S r   r   r   s     r   r   z'ClassIR.deserialize.<locals>.<listcomp>  s    +U+U+UqCKN+U+U+Ur   r6   rE   rF   rG   rH   rJ   )'r   r#   r%   r&   r'   r-   r(   r.   r/   r0   r1   r2   r3   r   r   r4   r5   r7   r8   r9   r;   r:   r<   r   r=   r>   r?   r@   rA   rB   rC   r6   rD   rE   rF   rG   rH   r   rJ   )r   r   r   rS   r?   rc   s     `  @r   r   zClassIR.deserialize  s|   &,tF|;3;&&&(IH(T&&&[":&~.m,~.~. !12!"34:&*./M*N'!"340~.&tF|S99TTTTlASTTT
 
 
 
^,
 
 
 GFFFd9oFFF

 
 
 
CGCW
 
 
 ]\\\TJZE[\\\
 
 
 
LPQ]L^
 
 
 N	.t4D/EsKK
 
 
 
CGCX
 
 
 F|'+5#+d##<<<<T(^<<<	6666$u+666@@@@tJ/?@@@:&U+U+U+U+UDDT+U+U+UK(!$T*?%@!A!A'*40K+L'M'M$*-d3Q.R*S*S' !128<=P8Q[CM$2344W[ 	 	r   N)FFFTF)r   r   r"   r   r#   r$   r%   r$   r&   r$   r'   r$   r(   r$   r)   r*   )r)   r   )r)   rT   )r   r   r)   rY   )r   r   r)   r^   )r   r   r)   r   )r   r   r)   r   )r   r   r)   r	   )r   r   r)   r$   )r   r   r)   r   )r   r   r   r$   r)   r   )r   r   r   r$   r)   r   )r)   r$   )r)   r   )r)   r   )r)   r   )r   r   r   r
   r)   r!   )r   r   r   __doc__rL   rP   propertyrS   rX   r]   rd   rf   rh   rl   ro   ry   r{   r   r   r   r   r   r   r   r   rv   r   r   r   classmethodr   r   r   r   r!   r!   R   sz         "!!$u5 u5 u5 u5 u5n
 
 
 
 1 1 1 X1   ! ! ! !
C C C C* * * *C C C C* * * *   C C C C   < < < <6 6 6 6
? ? ? ?7 7 7 7 38      >C ' ' ' ' ' '? ? ? ?M M M M   "O O O O8 8 8 85
 5
 5
 5
n 5 5 5 [5 5 5r   r!   c                      e Zd ZdZdd	Zd
S )NonExtClassInfozInformation needed to construct a non-extension class (Python class).

    Includes the class dictionary, a tuple of base classes,
    the class annotations dictionary, and the metaclass.
    dictr   basesanns	metaclassr)   r*   c                >    || _         || _        || _        || _        d S rj   )r   r   r   r   )rK   r   r   r   r   s        r   rL   zNonExtClassInfo.__init__  s"    	
	"r   N)
r   r   r   r   r   r   r   r   r)   r*   )r   r   r   r   rL   r   r   r   r   r     s2         # # # # # #r   r   entryr)   r   c                ~    d| j         j        | j        | j        j        j        | j        r| j        j        j        nd dS )Nr   ).classr   r   r   r   )r   rS   r   r   r   r   r   )r   s    r   serialize_vtable_entryr     sF     y!
,#&8=8KU,144QU  r   r<   VTableEntrieslist[JsonDict]c                    d | D             S )Nc                ,    g | ]}t          |          S r   )r   )rs   r   s     r   r   z$serialize_vtable.<locals>.<listcomp>  s!    666!"1%%666r   r   )r<   s    r   r   r     s    66v6666r   r   r   r
   c                    | d         dk    rUt          |j        | d                  | d         |j        | d                  | d         r|j        | d                  nd           S J d| d         z              )	Nr   r   r   r   r   r   FzBogus vtable .class: %s)r   r   r   r   r   s     r   deserialize_vtable_entryr     s~    H~''KU$LM$x.)484ISCM$/00t	
 
 	
 =+d8n<<<<r   c                     fd| D             S )Nc                0    g | ]}t          |          S r   )r   )rs   xr   s     r   r   z&deserialize_vtable.<locals>.<listcomp>  s$    ;;;$Q,,;;;r   r   r   s    `r   r   r     s    ;;;;d;;;;r   class_irr   c                |    |                                  }|dS | j        s| j        s|                    |            |S )zFReturn all concrete classes among the class itself and its subclasses.N)r   r&   r#   append)r   r   s     r   all_concrete_classesr    sJ    ++--Ht  "H$5 "!!!Or   N)r   r   r)   r   )r<   r   r)   r   )r   r   r   r
   r)   r   )r   r   r   r
   r)   r   )r   r!   r)   r   ) r   
__future__r   typingr   mypyc.commonr   r   mypyc.ir.func_irr   r   r	   mypyc.ir.opsr
   r   mypyc.ir.rtypesr   r   r   mypyc.namegenr   r   r   r   r   r!   r   r   r   r   r   r  r   r   r   <module>r	     s   - - " " " " " "       1 1 1 1 1 1 1 1 < < < < < < < < < < ) ) ) ) ) ) ) ) > > > > > > > > > > 6 6 6 6 6 6 6 6z! ! ! ! !: ! ! ! \"| | | | | | | |~# # # # # # # #   7 7 7 7= = = =< < < <     r   