o
    tBhO                     @  s   d Z ddl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 ddlmZmZmZ ddlmZmZ ed	d
defdefdee fgZee ZG dd dZG dd dZd(ddZd)ddZd*dd Zd+d!d"Z d,d%d&Z!d'S )-z'Intermediate representation of classes.    )annotations)List
NamedTupleOptional)PROPSET_PREFIXJsonDict)FuncDeclFuncIRFuncSignature)	DeserMapsValue)	RInstanceRTypedeserialize_type)NameGeneratorexported_nameVTableMethod)clsClassIRnamemethodshadow_methodc                   @  s  e Zd ZdZ				dMdNddZdOddZedOddZdPddZdQddZ	dRddZ
dSddZdTd!d"ZdUd$d%ZdVd&d'ZdVd(d)ZdVd*d+ZdVd,d-ZdVd.d/ZdWd2d3ZdWd4d5ZdXd7d8ZdYd:d;ZdZd=d>Zd[d@dAZd\dBdCZd]dEdFZed^dJdKZdLS )_r   zpIntermediate representation of a class.

    This also describes the runtime structure of native instances.
    FTr   strmodule_nameis_traitboolis_generatedis_abstractis_ext_classreturnNonec                 C  s   || _ || _|| _|| _|| _|| _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 | _t  | _!t  | _"t  | _#d| _$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)selfr   r   r   r   r   r    r?   h/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/ir/class_ir.py__init__W   sB   	
zClassIR.__init__c                 C  s   dj | 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})r>   )formatrB   r?   r?   r@   __repr__   s   zClassIR.__repr__c                 C  s   | j  d| j S )N.)r   r   rB   r?   r?   r@   fullname   s   zClassIR.fullnameClassIR | Nonec                 C  s(   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)lenr6   r   rB   r?   r?   r@   	real_base   s   
zClassIR.real_baseintc                 C  s:   | j d us	J d|| j v sJ | jd|| j | S )Nzvtable not computed yet has no attribute )r1   r   r>   r   r?   r?   r@   vtable_entry   s   
zClassIR.vtable_entrytuple[RType, ClassIR]c                 C  sX   | j D ]}||jv r|j| |f  S ||jv r!|j| |f  S qt| jd|NrL   )r6   r*   r0   KeyErrorr   r>   r   irr?   r?   r@   attr_details   s   


zClassIR.attr_detailsr   c                 C  s   |  |d S Nr   )rT   rM   r?   r?   r@   	attr_type      zClassIR.attr_typer   c                 C  s8   | j D ]}||jv r|j|   S qt| jd|rP   )r6   r,   rQ   r   rR   r?   r?   r@   method_decl   s
   

zClassIR.method_declr
   c                 C  s   |  |jS N)rX   sigrM   r?   r?   r@   
method_sig   s   zClassIR.method_sigc                 C  &   z|  | W dS  ty   Y dS w NFT)rX   rQ   rM   r?   r?   r@   
has_method      zClassIR.has_methodc                   sb   |   }|d u r
dS |  r%|  }|D ]}| |kr" dS qdS t fdd|D  S )NFTc                 3  s    | ]}|  V  qd S rY   )r^   ).0subcr   r?   r@   	<genexpr>   s    z*ClassIR.is_method_final.<locals>.<genexpr>)
subclassesr^   rX   any)r>   r   subsrX   ra   r?   rb   r@   is_method_final   s   

zClassIR.is_method_finalc                 C  r\   r]   )rV   rQ   rM   r?   r?   r@   has_attr   r_   zClassIR.has_attrc                 C  s    | j D ]
}||jv r dS qdS )NTF)r6   r+   rR   r?   r?   r@   is_deletable  s
   

zClassIR.is_deletablec                 C  s   |  |rdS || jv S r!   )ri   r;   rM   r?   r?   r@   is_always_defined
  s   

zClassIR.is_always_definednamesr   c                 C  s   | | j| jS rY   )private_namer   r   r>   rk   r?   r?   r@   name_prefix     zClassIR.name_prefixc                 C  s   t | j dS )NObject)r   rF   rm   r?   r?   r@   struct_name  ro   zClassIR.struct_nametuple[FuncIR, ClassIR] | Nonec                 C  s,   | j D ]}||jv r|j| |f  S qd S rY   )r6   r-   rR   r?   r?   r@   get_method_and_class  s
   

zClassIR.get_method_and_classFuncIR | Nonec                 C  s   |  |}|r|d S d S rU   )rs   )r>   r   resr?   r?   r@   
get_method  s   
zClassIR.get_methodset[ClassIR] | Nonec                 C  sT   | j du s| jr
dS t| j }| j D ]}|j r'| }|du r" dS || q|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)r8   r%   r9   rd   update)r>   resultchild
child_subsr?   r?   r@   rd      s   


zClassIR.subclasseslist[ClassIR] | Nonec                 C  s2   |   }|du r
dS dd |D }t|dd 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                 S  s   h | ]
}|j s|js|qS r?   )r   r   )r`   cr?   r?   r@   	<setcomp>9      z.ClassIR.concrete_subclasses.<locals>.<setcomp>c                 S  s   t | jpg | jfS rY   )rI   r8   r   )r}   r?   r?   r@   <lambda>=      z-ClassIR.concrete_subclasses.<locals>.<lambda>)key)rd   sorted)r>   rf   concreter?   r?   r@   concrete_subclasses1  s
   zClassIR.concrete_subclassesc                 C  s   t dd | jD S )Nc                 s  s    | ]}|j V  qd S rY   )r'   )r`   cir?   r?   r@   rc   @  s    z*ClassIR.is_serializable.<locals>.<genexpr>)re   r6   rB   r?   r?   r@   is_serializable?  s   zClassIR.is_serializabler   c                   s  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d  j D d fdd j D ddd  j D i ddd  j D ddd  j D dt jd jdt jddd  j D d jr jjnd d d!d  jD d"d#d  jD d$d%d  jD d& j d urd'd  j D nd d( j!d)t" j#d*t" j$d+t" j%d, j&S )-Nr   r   r   r   r   r   r"   r#   r$   r%   r&   r'   r(   r)   r*   c                 S     g | ]
\}}||  fqS r?   	serializer`   ktr?   r?   r@   
<listcomp>S  r   z%ClassIR.serialize.<locals>.<listcomp>r,   c                   s,   g | ]\}}|| j v r|jn| fqS r?   )r-   idr   )r`   r   drB   r?   r@   r   V  s    r-   c                 S  s   g | ]	\}}||j fqS r?   )r   )r`   r   mr?   r?   r@   r   [  s    r.   c                 S  s$   g | ]\\}}}|j |f|jfqS r?   )rF   r   )r`   cirr   r   r?   r?   r@   r   \  s    r0   c                 S  r   r?   r   r   r?   r?   r@   r   a  r   r/   r1   r2   r3   c                 S  s   g | ]\}}|j t|fqS r?   )rF   serialize_vtable)r`   r   vr?   r?   r@   r   e  s    r4   r5   c                 S     g | ]}|j qS r?   rF   r`   r   r?   r?   r@   r   j      r6   c                 S  r   r?   r   r   r?   r?   r@   r   k  r   r7   c                 S  r   r?   r   r   r?   r?   r@   r   l  r   r8   c                 S  r   r?   r   r   r?   r?   r@   r   m  r   r+   r:   r;   r<   r=   )'r   r   r   r   r   r   r"   r#   r$   r%   r&   r'   r(   r)   r   r*   itemsr,   r-   r.   r0   listr/   r1   r   r2   r3   r4   rF   r5   r6   r7   r8   r+   r   r:   r;   r<   r=   rB   r?   rB   r@   r   B  s   	


 
!"&'()*
-
.
/
01zClassIR.serializedatactxr   c                   s<  |d d |d  }| j v sJ d|  j | |d _|d _|d _|d _|d	 _|d
 _|d _|d _|d _	|d _
|d _t|d  _ fdd|d D _ fdd|d D _ fdd|d D _ fdd|d D _ fdd|d D _fdd|d D _|d _t|d  _ fd d|d! D _|d" }|rƈ j | nd _ fd#d$|d% D _ fd&d$|d' D _ fd(d$|d) D _|d* o fd+d$|d* D _|d, _t|d- _ t|d. _!t|d/ _"|d0 _#S )1Nr   rE   r   zClass %s not in deser class mapr   r   r   r   r"   r#   r$   r%   r&   r'   r(   r)   c                      i | ]
\}}|t | qS r?   r   r   r   r?   r@   
<dictcomp>  r   z'ClassIR.deserialize.<locals>.<dictcomp>r*   c                   s4   i | ]\}}|t |tr j| jnt| qS r?   )
isinstancer   	functionsdeclr   deserializer`   r   r   r   r?   r@   r     s    "r,   c                   s   i | ]
\}}| j | qS r?   )r   r   r   r?   r@   r     r   r-   c                   s*   i | ]\\}}} j | |f j| qS r?   )classesr   )r`   r}   r   r   r   r?   r@   r     s    r.   c                   r   r?   r   r   r   r?   r@   r     r   r0   c                   s(   i | ]}| j |  j t| fqS r?   )r-   getr   )r`   r   )rS   r?   r@   r     s    r/   r1   r2   c                   s"   i | ]\}} j | t| qS r?   )r   deserialize_vtabler   r   r?   r@   r     s    r3   r4   c                      g | ]} j | qS r?   r   r`   sr   r?   r@   r         z'ClassIR.deserialize.<locals>.<listcomp>r5   c                   r   r?   r   r   r   r?   r@   r     r   r6   c                   r   r?   r   r   r   r?   r@   r     r   r7   r8   c                   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.   r0   r/   r1   r   r2   r3   r4   r5   r6   r7   r8   r+   r9   r:   r;   r<   r=   )r   r   r   rF   r4   r?   )r   rS   r@   r   w  sX   
















 

zClassIR.deserializeN)FFFT)r   r   r   r   r   r   r   r   r   r   r   r   r   r    )r   r   )r   rG   )r   r   r   rK   )r   r   r   rO   )r   r   r   r   )r   r   r   r   )r   r   r   r
   )r   r   r   r   )rk   r   r   r   )r   r   r   rr   )r   r   r   rt   )r   rw   )r   r|   )r   r   )r   r   )r   r   r   r   r   r   )__name__
__module____qualname____doc__rA   rD   propertyrF   rJ   rN   rT   rV   rX   r[   r^   rg   rh   ri   rj   rn   rq   rs   rv   rd   r   r   r   classmethodr   r?   r?   r?   r@   r   Q   s>    	
d	


















5r   c                   @  s   e Zd ZdZd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                 C  s   || _ || _|| _|| _d S rY   )r   r   r   r   )r>   r   r   r   r   r?   r?   r@   rA     s   
zNonExtClassInfo.__init__N)
r   r   r   r   r   r   r   r   r   r    )r   r   r   r   rA   r?   r?   r?   r@   r     s    r   entryr   r   c                 C  s0   d| j j| j| jjj| jr| jjjdS d dS )Nr   ).classr   r   r   r   )r   rF   r   r   r   r   r   )r   r?   r?   r@   serialize_vtable_entry  s   r   r1   VTableEntrieslist[JsonDict]c                 C  s   dd | D S )Nc                 S  s   g | ]}t |qS r?   )r   )r`   r   r?   r?   r@   r     r   z$serialize_vtable.<locals>.<listcomp>r?   )r1   r?   r?   r@   r     rW   r   r   r   r   c                 C  sZ   | d dkr%t |j| d  | d |j| d  | d r"|j| d  S d S J d| d  )	Nr   r   r   r   r   r   FzBogus vtable .class: %s)r   r   r   r   r   r?   r?   r@   deserialize_vtable_entry  s   r   c                   s    fdd| D S )Nc                   s   g | ]}t | qS r?   )r   )r`   xr   r?   r@   r     r   z&deserialize_vtable.<locals>.<listcomp>r?   r   r?   r   r@   r     s   r   class_irr|   c                 C  s.   |   }|du r
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   r?   r?   r@   all_concrete_classes  s   
r   N)r   r   r   r   )r1   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r|   )"r   
__future__r   typingr   r   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?   r?   r@   <module>   s,    =  ]




