
    6 fS                       d Z ddlmZ ddl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 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)List
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__     G/var/www/equiseq/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
d@dZdAdZdBdZdCdZdCdZdCdZdCd ZdCd!ZdDd$ZdDd%Zdd&dEd)Zdd&dFd+ZdCd,ZdGd-ZdHd/ZdId1ZdGd2ZdJd4ZedKd8            Zd9S )L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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 | _        tA                      | _!        tA                      | _"        tA                      | _#        d| _$        g | _%        d S NF)&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)selfr   r#   r$   r&   r'   r(   s          r    __init__zClassIR.__init__X   s_    	& (&( "$,1)  % # )-T4mB	RV6X6XYY	,.$& 24*, @B DF 13-1-/;= %)	%' $(&(,v /1 .1UU  4755& 7:ee) $ (*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})rJ   )formatrM   s    r    __repr__zClassIR.__repr__   s     D!!	
r   c                $    | j          d| j         S )N.)r#   r   rM   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$   rM   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   rJ   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|          NrZ   )rA   r5   r;   KeyErrorr   rJ   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   )rc   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   r`   r   ra   s      r    method_declzClassIR.method_decl   sV    ( 	- 	-Br&&t,,,, '$)AAAABBBr   r
   c                6    |                      |          j        S N)rg   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)rg   r`   r[   s     r    
has_methodzClassIR.has_method   sE    	T"""" 	 	 	55	t    
&&c                   |                                  }|dS |                               r8|                               }|D ]}|                              |k    r dS dS t          fd|D                        S )NFTc              3  B   K   | ]}|                               V  d S ri   )rn   ).0subcr   s     r    	<genexpr>z*ClassIR.is_method_final.<locals>.<genexpr>  s/      BBT4??400BBBBBBr   )
subclassesrn   rg   any)rJ   r   subsrg   rs   s    `   r    is_method_finalzClassIR.is_method_final   s      <5??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 rm   )re   r`   r[   s     r    has_attrzClassIR.has_attr  sC    	NN4     	 	 	55	tro   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]}|j         v V  d S ri   )r6   rr   rb   r   s     r    rt   z'ClassIR.is_deletable.<locals>.<genexpr>  s*      ;;B42<';;;;;;r   rv   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 ri   )private_namer#   r   rJ   r   s     r    name_prefixzClassIR.name_prefix  s    !!$"2DI>>>r   c                0    t          | j                   dS )NObject)r   rR   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 ri   )rA   r8   declimplicit)rJ   r   r   rb   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   )rJ   r   r   ress       r    
get_methodzClassIR.get_method+  s-    ''M'JJ&s1vv$&r   c                D    t          fd| j        D                       S )Nc              3  *   K   | ]}|j         v V  d S ri   )r7   r}   s     r    rt   z*ClassIR.has_method_decl.<locals>.<genexpr>0  s*      >>r42?*>>>>>>r   r~   r[   s    `r    has_method_declzClassIR.has_method_decl/  s(    >>>>TX>>>>>>r   c                (    | j         g k    o| j         S ri   )rC   r0   rM   s    r    has_no_subclasseszClassIR.has_no_subclasses2  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   ru   update)rJ   resultchild
child_subss       r    ru   zClassIR.subclasses5  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'   )rr   cs     r    	<setcomp>z.ClassIR.concrete_subclasses.<locals>.<setcomp>N  s&    III!AJI!-IAIIIr   c                <    t          | j        pg           | j        fS ri   )rV   rC   r   )r   s    r    <lambda>z-ClassIR.concrete_subclasses.<locals>.<lambda>R  s    s1:3C/D/Daf.M r   )key)ru   sorted)rJ   rw   concretes      r    concrete_subclasseszClassIR.concrete_subclassesF  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 ri   )r2   )rr   cis     r    rt   z*ClassIR.is_serializable.<locals>.<genexpr>U  s%      772#777777r   r~   rM   s    r    is_serializablezClassIR.is_serializableT  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d  j                                        D             d fd j                                        D             dd  j                                        D             i dd  j                                        D             dd  j                                        D             dt+           j                  d j        dt1           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(tE           j#                  d)tE           j$                  d*tE           j%                  d+ j&        S ),Nr   r#   r$   r(   r'   r&   r-   r.   r/   r0   r1   r2   r3   r4   r5   c                @    g | ]\  }}||                                 fS r   	serializerr   kts      r    
<listcomp>z%ClassIR.serialize.<locals>.<listcomp>h  s)    RRR$!QAq{{}}-RRRr   r7   c                b    g | ]+\  }}||j         v r|j        n|                                f,S r   )r8   idr   )rr   r   drJ   s      r    r   z%ClassIR.serialize.<locals>.<listcomp>k  sL       Aq A--ADD1;;==A  r   r8   c                &    g | ]\  }}||j         fS r   )r   )rr   r   ms      r    r   z%ClassIR.serialize.<locals>.<listcomp>p  s"    CCCdaAD	CCCr   r9   c                :    g | ]\  \  }}}|j         |f|j        fS r   )rR   r   )rr   cirr   r   s       r    r   z%ClassIR.serialize.<locals>.<listcomp>q  s;       .9hsA#,"AD)  r   r;   c                @    g | ]\  }}||                                 fS r   r   r   s      r    r   z%ClassIR.serialize.<locals>.<listcomp>v  s)    ZZZda1;;==1ZZZr   r:   r<   r=   r>   c                @    g | ]\  }}|j         t          |          fS r   )rR   serialize_vtable)rr   r   vs      r    r   z%ClassIR.serialize.<locals>.<listcomp>z  s9       8>Q/223  r   r?   r@   c                    g | ]	}|j         
S r   rR   rr   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>      ???#???r   rC   c                    g | ]	}|j         
S r   r   r   s     r    r   z%ClassIR.serialize.<locals>.<listcomp>  r   r   r6   rE   rF   rG   rH   )'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?   rR   r@   rA   rB   rC   r6   r   rE   rF   rG   rH   rM   s   `r    r   zClassIR.serializeW  sl   2
DI2
4+2
 2
 D-	2

 4+2
 D-2
 D-2
 t32
 2
 +D,M2
 t32
 T/2
 D-2
 DI''))2
  RR$/:O:O:Q:QRRR!2
&      -3355  '2
0 CCdl.@.@.B.BCCC12
 2
2   =A=N=T=T=V=V  32
< ZZd>Q>W>W>Y>YZZZ=2
> $t//?2
@ dkA2
B .t/BCCC2
D   BFBTBZBZB\B\  E2
L $)=DI&&M2
N ;;t{;;;O2
P 55DH555Q2
R ?????S2
T }( @?????Y2
Z [2
\ "6$*B#C#C]2
^ (0N)O)O_2
` +F43T,U,Ua2
b d1c2
 2
 2	
r   datactxr   c                h   |d         dz   |d         z   }|j         v sJ d|z              j         |         |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*         _        t?          |d+                   _         t?          |d,                   _!        t?          |d-                   _"        |d.         _#        S )/Nr#   rQ   r   zClass %s not in deser class mapr$   r&   r'   r(   r-   r.   r/   r0   r1   r2   r3   r4   c                8    i | ]\  }}|t          |          S r   r   rr   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rr   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   )rr   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   )rr   r   rb   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   rr   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   )$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   r   r   rR   r?   rb   s     `  @r    r   zClassIR.deserialize  sC   &,tF|;3;&&&(IH(T&&&[":&~.m,~.~.!"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	r   N)FFFT)r   r   r#   r   r$   r%   r&   r%   r'   r%   r(   r%   r)   r*   )r)   r   )r)   rS   )r   r   r)   rX   )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__rK   rO   propertyrR   rW   r\   rc   re   rg   rk   rn   rx   rz   r   r   r   r   r   r   r   r   ru   r   r   r   classmethodr   r   r   r    r"   r"   R   sw         "!!k* k* k* k* k*Z
 
 
 
 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3
 3
 3
 3
j 1 1 1 [1 1 1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 ri   )r   r   r   r   )rJ   r   r   r   r   s        r    rK   zNonExtClassInfo.__init__  s"    	
	"r   N)
r   r   r   r   r   r   r   r   r)   r*   )r   r   r   r   rK   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   rR   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   )rr   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<<<5r   c                     fd| D             S )Nc                0    g | ]}t          |          S r   )r   )rr   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   r   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    <module>r	     s   - - " " " " " " # # # # # # # # 1 1 1 1 1 1 1 1 < < < < < < < < < < ) ) ) ) ) ) ) ) > > > > > > > > > > 6 6 6 6 6 6 6 6z! ! ! ! !: ! ! ! \"l l l l l l l l^# # # # # # # #   7 7 7 7= = = =< < < <     r   