
    hiy                       U d Z ddlmZ ddlmZ ddlmZ ddlmZm	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mZmZmZmZmZmZmZ dd
lmZm Z m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4 ddZ5ee%e+ege6f         Z7ee6e8e6e7f         f         Z9dd fdd fde5fde5fde5fd e5fd!efd"efd#Z:d$e;d%<   d&efd'efd'efd(efd)Z<d$e;d*<   d+d,efiZ=d$e;d-<   i d.d/efd0d1efd2d3efd4d5efd6d7efd8d9efd:d;efd<d=efd>d=efd?d@efdAd@efdBdCefdDdCefdEdFefdGdFefdHdIefdJdIefi dKdLefdMdLefdNdOefdPdOefdQdRefdSdRefdTdUefdVdUefdWdXefdYdXefdZd[efd\d[efd]d^efd_d^efd`daefdbdaefdcddefdeefdfefdgefdhefdiefdjefdkefdlefdmefdnefdoefdpefdpefdqefdrZ>d$e;ds<   dte5fdue5fdve5fdwZ?d$e;dx<   dydze<fd{d|e=fd}d~e>fdde?fgZ@dhZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddZVddZWddZXddZYddZZddZ[ddńZ\ddƄZ]ddǄZ^ddȄZ_dd˄Z`dd̄Zadd΄ZbddЄZcddфZddd҄ZedS )z8Code generation for native classes and related wrappers.    )annotations)Mapping)Callable)ARG_STAR	ARG_STAR2)c_string_initializer)EmitterHeaderDeclarationReturnHandler)native_function_doc_initializernative_function_header)
generate_bin_op_wrappergenerate_bool_wrappergenerate_contains_wrappergenerate_dunder_wrappergenerate_get_wrappergenerate_hash_wrappergenerate_ipow_wrappergenerate_len_wrappergenerate_richcompare_wrappergenerate_set_del_item_wrapper)BITMAP_BITSBITMAP_TYPENATIVE_PREFIXPREFIX
REG_PREFIX)ClassIRVTableEntries)FUNC_CLASSMETHODFUNC_STATICMETHODFuncDeclFuncIRget_text_signature)RTupleRTypeobject_rprimitive)NameGenerator)is_same_typeclr   fnr"   emitterr	   returnstrc                H    t            |                    |j                   S N)r   cnamenamesr)   r*   r+   s      g/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypyc/codegen/emitclass.pynative_slotr4   &   s!    6RXXgm44666    tp_initc                $    t          | ||          S r/   )generate_init_for_classctes      r3   <lambda>r=   2   s    ,CAq!,L,L r5   tp_callc                $    t          | ||          S r/   )generate_call_wrapperr9   s      r3   r=   r=   3   s    ,A!Q,J,J r5   tp_strtp_reprtp_iternexttp_itertp_hashtp_descr_get)__init____call____str____repr____next____iter____hash____get__	SlotTable	SLOT_DEFSmp_subscriptmp_ass_subscript	mp_length)__getitem____setitem____delitem____len__AS_MAPPING_SLOT_DEFS__contains__sq_containsAS_SEQUENCE_SLOT_DEFS__bool__nb_bool__int__nb_int	__float__nb_float__neg__nb_negative__pos__nb_positive__abs__nb_absolute
__invert__	nb_invert__add__nb_add__radd____sub__nb_subtract__rsub____mul__nb_multiply__rmul____mod__nb_remainder__rmod____truediv__nb_true_divide__rtruediv____floordiv__nb_floor_divide__rfloordiv__
__divmod__	nb_divmod__rdivmod__
__lshift__	nb_lshift__rlshift__
__rshift__	nb_rshift__rrshift____and__nb_and__rand____or__nb_or__ror____xor__nb_xor__rxor__
__matmul__nb_matrix_multiply__rmatmul____iadd__nb_inplace_addnb_inplace_subtractnb_inplace_multiplynb_inplace_remaindernb_inplace_true_dividenb_inplace_floor_dividenb_inplace_lshiftnb_inplace_rshiftnb_inplace_andnb_inplace_ornb_inplace_xornb_inplace_matrix_multiplynb_powernb_inplace_power)__isub____imul____imod____itruediv____ifloordiv____ilshift____irshift____iand____ior____ixor____imatmul____pow____rpow____ipow__AS_NUMBER_SLOT_DEFSam_awaitam_aiteram_anext)	__await__	__aiter__	__anext__AS_ASYNC_SLOT_DEFS
as_mappingPyMappingMethodsas_sequencePySequenceMethods	as_numberPyNumberMethodsas_asyncPyAsyncMethodsrM   c                    dS )NPyVectorcall_Call r2   s      r3   r@   r@      s    r5   attrc                R    |                      d          r| dk    s| dk    rd| z   S | S )zuMap dunder method name to sort key.

    Sort reverse operator methods and __delitem__ after others ('x' > '_').
    __rr   rV   x)
startswith)r   s    r3   slot_keyr      s;    
 	 4<#7#7DM<Q<QTzKr5   tabledict[str, str]c                   i }i }t          |                                d           D ]a\  }\  }}|                     |          }|rB|d         | k    s	|t          v r-||v r||         ||<   D || |d         |          }|||<   |||<   b|S )Nc                ,    t          | d                   S )Nr   )r   )r   s    r3   r=   z generate_slots.<locals>.<lambda>   s    xPQRSPT~~ r5   )key   r   )sorteditemsget_method_and_classALWAYS_FILL)	r)   r   r+   fields	generatednameslot	generator
method_clss	            r3   generate_slotsr      s    F "I#)%++--=U=U#V#V#V 
' 
'tY,,T22
 	':a=B..$+2E2Ey  (t !yZ]G<<#t"&	$Mr5   	c_emitterexternal_emitterNonec                   |j         }|                    |           }t          d|                    |            dd          |j        |<   | j        sd S t          | |           | j         o| j         }|rIt          t          | j	        |           dd          |j        |
                    | j	                  <   d S d S )NzPyTypeObject *;Tneeds_export)contexttype_struct_namer
   declarationsis_ext_classgenerate_object_structis_traitbuiltin_baser   ctornative_function_name)r)   r   r   r+   r   r   generate_fulls          r3   generate_class_type_declr      s     G##B''D!2811"55888t" " "G
 ? 2/000O;BO(;M 
FW%bgw77:::G
 G
 G
W99"'BBCCC
 
r5   c                    | j         sJ | j        s| j        g k    sJ |j        }|                     |j                  dz   }|                     |j                  }t          d| d| dd          |j        |<   dS )zGenerate a definition of a single-object per-class free "list".

    This speeds up object allocation and freeing when there are many short-lived
    objects.

    TODO: Generalize to support a free list with up to N objects.
    _free_instancezCPyThreadLocal z *r   Tr   N)	reuse_freed_instanceis_final_classchildrenr   name_prefixr1   struct_namer
   r   )r)   r   r   r+   r   r   r   s          r3   generate_class_reuser      s     """" 1r 1 1 1 1G>>)/**-==D..11K!20+00000t" " "Gr5   modulec                   | j         }|                     j                  }                    | j                  }| d}| d}| d}| d}	| d}
| d}| d}| d}| d	}| d
}dd| di}| j         o| j         }| j        p| j         p| j	        }| j        s||d<   |rd| d|d<   d| d|d<   d| d|d<   t          d | j        D             d          }|rd| |d<   |r|	|d<   ||d<   dMfd} |             |                     d          }|                     d          }|                    t          | t                               t           D ]7\  }}}t          | |          }|rt#          | |||          }d| |d| <   8t%          |           }|r||d <   |                     j                  }| j        rd!| j         d"}n| j        rd#}nd!| d"}| j	        r]t)          |           sM| d$}                    d%| d&d'| d(d)| d(d*d+           ||d,<   | d-|d.<   j        d/k     r
||d0<   ||d1<   n||d.<   |rQ| j        J                     t1          | j                  d2z              | j        J                     t1          | j                  d2z               |             |                     d          }t5          | ||
||            |             t7          | |            |             t9          | |            |             t;          | ||t=          |                      |             | j        r%tA          | |d3z   |
d3z   d45          }  |             nd} tA          | ||
d65          }
 |             |rtC          ||            |             |r5tE          |             |             tG          | |	            |             | j        rtI          | |           tK          | |            |             g d7}!|r|!&                    d8           | '                    d9          r_d:(                    |                     j                            |d;<   |!&                    d<           |)                    d=          sd>|d?<   t)          |           r|!&                    d@           dA*                    |!          |dB<   dCtW          |            d"|dD<                       dE,                    |            dF                               dG           |-                                D ]!\  }"}#                    dH|" dI|# dJ           "                    d+                               dK(                    ,                    |           L                                                      |rTt]          | ||
|                                             t_          | | j        |||
                                            |rta          |            dS dS )NzRGenerate C code for a class.

    This is the main entry point to the module.
    _new	_finalize_members
_getseters_vtable	_traverse_clear_dealloc_methods_trait_vtable_setuptp_name"tp_newz(destructor)
tp_deallocz(traverseproc)tp_traversez	(inquiry)tp_clearc              3  :   K   | ]}|j         d k    |j        V  dS )__del__N)r   method).0r<   s     r3   	<genexpr>z!generate_class.<locals>.<genexpr>   s0      RRAaf	>Q>Qqx>Q>Q>Q>QRRr5   Ntp_finalize	tp_getset
tp_methodsr,   r   c                 0                                       d S r/   	emit_liner+   s   r3   r  z!generate_class.<locals>.emit_line  s    r5   __mypyc_defaults_setuprG   &tp_tp_richcomparezsizeof()zsizeof(PyObject)z + sizeof(PyObject *)zPyMemberDef [] = {z{"__dict__", T_OBJECT_EX, z, 0, NULL},z{"__weakref__", T_OBJECT_EX, z{0}};
tp_membersz + 2*sizeof(PyObject *)tp_basicsize      tp_dictoffsettp_weaklistoffsetr   _shadowT)shadowF)Py_TPFLAGS_DEFAULTPy_TPFLAGS_HEAPTYPEPy_TPFLAGS_BASETYPEPy_TPFLAGS_HAVE_GCrH   zoffsetof({}, vectorcall)tp_vectorcall_offset_Py_TPFLAGS_HAVE_VECTORCALLtp_vectorcallr   r>   Py_TPFLAGS_MANAGED_DICT | tp_flagsz
PyDoc_STR(tp_doczstatic PyTypeObject z_template_ = {zPyVarObject_HEAD_INIT(NULL, 0). = ,z3static PyTypeObject *{t}_template = &{t}_template_;)r;   r,   r   )1r   r   r1   r   setupr   r   needs_getsetersis_generatedhas_dictnextvtable_entries
get_methodupdater   rP   SIDE_TABLESgenerate_side_table_for_classr   r   has_managed_dict
emit_linescapi_versionr  r   r   generate_new_for_classgenerate_traverse_for_classgenerate_clear_for_classgenerate_dealloc_for_classboolallow_interpreted_subclassesgenerate_vtablesgenerate_finalize_for_classgenerate_getseter_declarationsgenerate_getseters_tablegenerate_new_for_traitgenerate_methods_tableappend
has_methodformatgetjoinnative_class_doc_initializerr   r   generate_setup_for_classgenerate_constructor_for_classgenerate_getseters)$r)   r   r+   r   r   
setup_namenew_namefinalize_namemembers_namegetseters_namevtable_nametraverse_name
clear_namedealloc_namemethods_namevtable_setup_namer   r   r0  
del_methodr  defaults_fninit_fn
table_nametype	slot_defsslotstable_struct_namerichcompare_namer   	base_sizeweak_offsetshadow_vtable_nameflagsfieldvalues$     `                                 r3   generate_classrk     sW   
 7D..//K--bh77J###H"---M!+++L#///N )))K"---M'''J!+++L!+++L&;;;'T5FO;BO(;M(N,?N2;O? $#x =CkCCC| G G G G}<<<<zRR):RRRTXYYJ ? >} > >} -,{'F<      IKKK -- 899K mmJ''G MM.Y88999 (3 A A#
D)r9g66 	A =b*dTY[b c c)@->)@)@F%%%&3B@@ 4#3  ..//K	 -0bo000			 -&		,k,,,	 
{ ++B88 + #9990<000A)AAAF[FFF	
 	
 	
  ,|$-!F!F!F~'))&/F?#*5F&'!*~ x###07CCcIJJJw"""0'BBSHIII	--
++r8[*gwWWW	#Bw???	 Z999	"2|ZjAQAQSZ[[[	* 	&-=%	1;3JG\`. . . IKKKK!%&r+<k7[`aaa	 #JwGGG	 &r7333	 ^W===		{ 6r8W5552|W555IKKKPPPE +)***	}}Z   4)C)J)JNN7=))*
 *
%& 	2333zz/** 	4 !4F9G$$ 0.///E**F:G$@$D$DGGGF8ZW-E-Eb-I-IZZZ[[[6777 2 2u0e000001111d=DD&&r** 	E 	
 	
     [+?QSZ[[[&r27GZV]^^^ (2w'''''( (r5   	attributer1   r'   c                L    |                     | j        | j         d|           S )N_get_private_namemodule_namer   r)   rl  r1   s      r3   getter_namers    *    bn.J.Jy.J.JKKKr5   c                L    |                     | j        | j         d|           S )N_set_ro  rr  s      r3   setter_namerw    rt  r5   c                j   t                      }g }|g dz  }|                     d          r|                    d           g }t          | j                  D ]]}|j        sR|j        r|                    t          |j                  dz
            |vryt          dt          |j                  t                    D ]P}|                    |          }||vr5|                    t           d| d           |                    |           Q|j                                        D ]\  }}||f|vr|                    |                    |           |                    |           d           |                    ||f           t#          |t$                    r|                    |           _|                    d|                     |j                   d           |                    d	           t-          |d
          |j        j        |                     |j                  <   d S )N)ztypedef struct {PyObject_HEADzCPyVTableItem *vtable;rH   zvectorcallfunc vectorcall;r   r    r   z}  T)is_type)setrI  rH  reversedbase_mror   bitmap_attrsbitmap_fieldlenranger   r   
attributesr   ctype_spacedr   add
isinstancer$   declare_tuple_structr   r1   r
   r   r   )	r)   r+   
seen_attrslinesr  baseir   rtypes	            r3   r   r     s@   ),JE	LLLLE	}}Z   31222L%% < <} 	<  6''D,=(>(>(BCC<WW"1c$*;&<&<kJJ 6 6&33A66|33!LLK)A)A$)A)A)ABBB(//555#4466 < <e%=
22LLG$8$8$?$?!VdASAS!V!V!VWWWNND%=111!%00 <44U;;;	LL7r~~gm44777888	LLBStC C CGO !>!>???r5   r  r[  rV  r  r@  c                    d fd}d fd}                     d                    |t          dt           j                  d	t           j                  z  z                                   j                                        D ]\  }}                     d
 ||           dt          dt          |                     d                                d                     ||          t          dt          |j                                                                      d                                t           | d                                d            j	        r!s                     t           | d           g }	 j                                        D ]X\  }} ||          }
 ||          }t          ||
g            t          ||            |	                    ||
|f           Yt           j        ||	                                d                                d           |	s|n| dt          |	          d	z   S )a  Emit the vtables and vtable setup functions for a class.

    This includes both the primary vtable and any trait implementation vtables.
    The trait vtables go before the main vtable, and have the following layout:
        {
            CPyType_T1,         // pointer to type object
            C_T1_trait_vtable,  // pointer to array of method pointers
            C_T1_offset_table,  // pointer to array of attribute offsets
            CPyType_T2,
            C_T2_trait_vtable,
            C_T2_offset_table,
            ...
        }
    The method implementations are calculated at the end of IR pass, attribute
    offsets are {offsetof(native__C, _x1), offsetof(native__C, _y1), ...}.

    To account for both dynamic loading and dynamic class creation,
    vtables are populated dynamically at class creation time, so we
    emit empty array definitions to store the vtables and a function to
    populate them.

    If shadow is True, generate "shadow vtables" that point to the
    shadow glue methods (which should dispatch via the Python C-API).

    Returns the expression to use to refer to the vtable, which might be
    different than the name, if there are trait vtables.
    traitr   r,   r-   c                    d                                         j                  |                     j                  rdnd          S )Nz{}_{}_trait_vtable{}r  r{  rJ  r   r1   )r  r  r+   r  s    r3   trait_vtable_namez+generate_vtables.<locals>.trait_vtable_name  sM    %,,W]++gm,,'IIR
 
 	
r5   c                    d                                         j                  |                     j                            S )Nz{}_{}_offset_tabler  )r  r  r+   s    r3   trait_offset_table_namez1generate_vtables.<locals>.trait_offset_table_name  s@    #**W]++U->->w}-M-M
 
 	
r5   zstatic CPyVTableItem {}[{}];r   r  zstatic CPyVTableItem [z];zstatic size_t {}[{}];zstatic boolz(void){z
_shadow();z	return 1;}z + )r  r   r,   r-   )r  rJ  maxr  r4  trait_vtablesr   r  r   rA  generate_vtablegenerate_offset_tablerH  )r  r[  rV  r+   r  r  r  r  vtable	subtablesr   offset_names   `  ``       r3   rB  rB    s   >
 
 
 
 
 
 
 

 
 
 
 
 
 
 &--QD$7 8 81s4CU?V?V;V VWW	
 	
   +1133 

 

vV$5$5e$<$<VVs1c&kk?R?RVVV	
 	
 	
 	#**''..As5;K7L7L0M0M 	
 	
 	
 	
 m$$$A(9AAABBBc( K K]I,=IIIJJJI+1133 5 5v  ''--e44gr6:::k7E4@@@%{34444D'gy&QQQk"""c'T;;-T-TIQR@R-T-TTr5   r  r  c           	        |                     d|  d           |j        D ]I}|                     d|                    |j                   d|                    |           d           J|j        s|                     d           |                     d           |                     d                    | 	                     d
S )z0Generate attribute offset row of a trait vtable.zsize_t _scratch[] = {z	offsetof(, z),0r  /memcpy({name}, {name}_scratch, sizeof({name}));r   N)r  r  r   r1   r   rJ  )r  r+   r  r)   r   s        r3   r  r    s     H 7HHHIII  _ _]bnnW]&C&C]]w||TXGYGY]]]^^^^ #d9@@F]@^^    r5   entriesr   r  list[tuple[ClassIR, str, str]]c           
        |                     d| d           |rp|                     d           |D ]C\  }}}|                     d                    |                    |          ||                     D|                     d           | D ]}}|r|j        r|j        n|j        }	|                     d                    |                    |j        j                  t          |	                    |j	                                       ~| s|                     d           |                     d           |                     d	                    |
                     d S )NzCPyVTableItem r  z/* Array of trait vtables */z8(CPyVTableItem){}, (CPyVTableItem){}, (CPyVTableItem){},z/* Start of real vtable */z(CPyVTableItem){}{}{},NULLr  r  r  )
r  rJ  r   shadow_methodr  get_group_prefixdeclr   r0   r1   )
r  rV  r+   r  r  r  r   offset_tableentryr  s
             r3   r  r    s    C{CCCDDD 88999*3 	 	&E5,JQQ,,U33UL    
 	6777 
 
(.X53FX$$EL$++(():;;W]++ 	
 	
 	
 	
  "&!!!dGNNT_N``aaaaar5   r]  FuncIR | Nonerg  
str | Nonec           	     ^   |                     t          | j        |                     |                     d           t          | j        j        j        d         j        z   }|                     d| d           |                     |j                  }|                     | d           | 	                    |j                  }| j
        r|                     d| d           |                     d| d	           |                     | d
           |                     d           |                     d           |t          |d|           |                     d           |                     d           |                     d|                     |j                   d           |                     d           |                     d           |r|                     d|                    |            d           |                     d| d           |                     d           |                     d| d           |                     d           n|                     d| d           t          | |           |                     d          rM|                     d                              |j                  }|                     dt"           | d           t%          | j                  D ]k}	|	j                                        D ]O\  }
}|                    |          }|dk    r/|                     d|                    |
           d| d           Pl|t          |d|           |                     d           |                     d           dS )zAGenerate a native function that allocates an instance of a class.r  r   z$PyTypeObject *type = (PyTypeObject*)r   z *self;if (z_free_instance != NULL) {zself = z_free_instance;z_free_instance = NULL;zPy_SET_REFCNT(self, 1);zPyObject_GC_Track(self);Nselfzreturn (PyObject *)self;r  zself = (z *)type->tp_alloc(type, 0);if (self == NULL)    return NULL;if (type != ) {zself->vtable = } else {rH   zself->vectorcall = r  self->r,  )r  r   r/  r   sigargsr   r   r1   r   r   emit_attr_defaults_func_callr   emit_clear_bitmapsrI  method_declr0   r   r~  r  r  r   c_undefined_valuer   )r)   r]  rV  rg  r+   type_arg_namer   prefixr   r  r   r  rj  s                r3   rN  rN  A  s    ,RXw??@@@c!21!5!::MM]MMMNNN..//K---...^^GM**F	 
CCCCDDD;F;;;<<<V;;;<<<34444555"(fgFFF4555#[!>!>[[[\\\)***())) <K)A)A")E)EKKKLLLA,>AAABBB*%%%:K:::;;;#:K:::;;;r7###	}}Z   A~~j))//>>?????@@@%% M M?0022 	M 	MKD%--e44E !!"KGLL,>,>"K"K5"K"K"KLLL	M $[&'BBB0111cr5   c                    t          dt          | j                  t                    D ]0}|                    |          }|                    d| d           1dS )zMEmit C code to clear bitmaps that track if attributes have an assigned value.r   r  z = 0;N)r  r  r  r   r  r  )r)   r+   r  ri  s       r3   r  r    sg    1c"/**K88 1 1$$Q''/5///00001 1r5   	self_namec                    |                     d                    t          |                     |j                  |          ddd           dS )z{Emit C code to initialize attribute defaults by calling defaults_fn.

    The code returns NULL on a raised exception.
    z!if ({}{}((PyObject *){}) == 0) {{Py_DECREF(self);return NULL;r  N)r:  rJ  r   r0   r1   )r]  r  r+   s      r3   r  r    s[    
 +22;,,W];;Y	
 	
 	    r5   rQ  type_argnative_prefixnew_argsc                
   dfd}|                      d          }|s(                    d| d| d            |             d S |r"                    |j                  t          z   nt
          }|}	|dk    r|	d	|z   z  }	                    d| |                    j                   d|	 d            |                                 d
                    |            d                               d           d S )Nr,   r   c                 \                          d                                 d           d S )Nr  r  r  r  s   r3   emit_null_checkz6emit_setup_or_dunder_new_call.<locals>.emit_null_check  s3    -...,-----r5   __new__zPyObject *self = ();r{  r  zif (Py_TYPE(self) != r  z    return self;r.  )	r5  r  r  r  r   r   r0   r1   r   )
r)   rQ  r  r  r  r+   r  new_fnr  all_argss
        `    r3   emit_setup_or_dunder_new_callr    sM   . . . . . . ]]9%%F GjGG8GGGHHHFS_W%%fk22]BBY_FH2~~D8O#\&\&,,w}2M2M\\PX\\\]]]O Mg.F.Fr.J.JMMMNNN()))))r5   r!   r^  c           	     d   |                     t          ||                      |                     d           d |j        j        D             }d|                    |           z   }d                    |          }|                     d          o\t          |j        j                  dk    o?|j        j        d         j        t          k    o|j        j        d         j        t          k    }	t          | |||	 ||           d                    d	g|z             }
||	rt          nt          }|	rdnd}|                     d                    |                    |j                  ||                    |j                  |
|                     |                     d           |                     d           |                     d           |                     d           nt          |j        j                  dk    r|                     d|                    |            d|
 d           |                     d           |                     d           |                     d           |                     d           |                     d           |                     d           d
S )zQGenerate a native function that allocates and initializes an instance of a class.r  c                ,    g | ]}t           |j        z   S r   )r   r   )r  args     r3   
<listcomp>z2generate_constructor_for_class.<locals>.<listcomp>  s    <<<zCH$<<<r5   z(PyObject *)r  r     r   r   r  Nz!= NULL ? 0 : -1r{  zchar res = {}{}{}({}){};zif (res == 2) {r  r  r  z
int res = z
->tp_init(r  zif (res < 0) {return self;)r  r   r  r  r   rL  rI  r  kindr   r   r  r   r   rJ  r  r  r0   r1   )r)   r*   r^  rQ  rV  r+   fn_argsr  r  use_wrapperr  r  casts                r3   rO  rO    s    /G<<>???c<<<<<G 8 8 < <<Hyy!!H 	i   	-!	-FKN8+	- FKN9,	  ""j(OXW^___99fX'((D&9M%08!!b&--((66gm,, 	
 	
 	
 	+,,,,---.)))# 
RV[		A		Ww'?'?'C'CWWtWWWXXX*+++,---.)))#n%%%cr5   c                   |                      |j                   d}|                    d           |                    | d           |                    d           | j        s| j        s|                     d          rG|                    d                    t          |                    |j                                       n|                    d           |                    d           |S )	zGenerate an init function suitable for use as tp_init.

    tp_init needs to be a function that returns an int, and our
    __init__ methods return a PyObject. Translate NULL to -1,
    everything else to 0.
    _init
static intz0(PyObject *self, PyObject *args, PyObject *kwds)r  r  z/return {}{}(self, args, kwds) != NULL ? 0 : -1;	return 0;r  )	r   r1   r  rA  r   rI  rJ  r   r0   )r)   r^  r+   	func_names       r3   r8   r8     s     >>'-00777Il###TTTUUUc	& '"/ 'R]]9=U=U '=DDgm44 	
 	
 	
 	
 	+&&&cr5   r  c                ,   |                     d           |                     | d           |                     d           | j        sk|                     d|                    |            d           |                     d           |                     d           |                     d           d	}d
}t          | ||d||           |r7| j        s0| j        s)|                                 s|                     d          r|                     d           nc|                     dt           |                    |j	                   d           |
                    dd           |                     d           |                     d           d S )Nstatic PyObject *4(PyTypeObject *type, PyObject *args, PyObject *kwds)r  r  r  zUPyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled");r  r  z(PyObject*)typez
args, kwdsFr  r  zPyObject *ret = z(self, args, kwds);zif (ret == NULL)r  )r  rA  r   r  r   is_serializablerI  r   r0   r1   r:  )r)   r  rV  rQ  r^  r+   r  r  s           r3   r<  r<    s    )***XXXYYYc* K)A)A")E)EKKKLLLc	
 	
 	
 	.)))# HH!"j(E8WUUU*** ?* 	*
 ==##* 	.))))
 	XvXw}}W]'C'CXXX	
 	
 	
 	-/ABBB.)))cr5   c                   |                     d           |                     | d           |                     d           |                     d|                    |            d           |                     d           |                     d           |                     d           |                     d	           |                     d
           |                     d	           d S )Nr  r  r  r  r  z\PyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled traits");r  zGPyErr_SetString(PyExc_TypeError, "traits may not be directly created");r  r  )r  r   )r)   r  r+   s      r3   rF  rF  0  s   )***XXXYYYcGW%=%=b%A%AGGGHHH	F   j!!!_```cn%%%cr5   c                   |                     d           |                     | d|                     |j                   d           |                     d           t          | j                  D ]M}|j                                        D ]1\  }}|                    d|                    |           |           2Nt          | |          r|                     d           n_| j
        rX|                     |j                  }|                    d| dt                     |                    d	| dt                     |                     d
           |                     d           dS )z>Emit function that performs cycle GC traversal of an instance.r  r  z# *self, visitproc visit, void *arg)r  r  z8PyObject_VisitManagedDict((PyObject *)self, visit, arg);&*((PyObject **)((char *)self + sizeof()));*((PyObject **)((char *)self + sizeof(PyObject *) + sizeof(r  r  N)r  r   r1   r~  r  r  r   emit_gc_visitr   r9  r2  r&   r)   r  r+   r  r   r  r   s          r3   r=  r=  @  s   l###YYr~~gm44YYY   c%% H H?0022 	H 	HKD%!!"?7<<+=+="?"?GGGG	HG$$ 
TUUUU	 	
nnW]33E[EEEGX	
 	
 	
 	Z+ZZZ	
 	
 	
 k"""cr5   c                   |                     d           |                     | d|                     |j                   d           |                     d           t          | j                  D ]M}|j                                        D ]1\  }}|                    d|                    |           |           2Nt          | |          r|                     d           n_| j
        rX|                     |j                  }|                    d| dt                     |                    d	| dt                     |                     d
           |                     d           d S )Nr  r   *self)r  r  z,PyObject_ClearManagedDict((PyObject *)self);r  r  r  r  r  )r  r   r1   r~  r  r  r   emit_gc_clearr   r9  r2  r&   r  s          r3   r>  r>  Z  s   l###KKR^^GM%B%BKKKLLLc%% H H?0022 	H 	HKD%!!"?7<<+=+="?"?GGGG	HG$$ 
HIIII	 	
nnW]33E[EEEGX	
 	
 	
 	Z+ZZZ	
 	
 	
 k"""cr5   dealloc_func_nameclear_func_namehas_tp_finalizec                z   |                     d           |                     | d|                     |j                   d           |                     d           |r?|                     d           |                     d           |                     d           |                     d           | j        rt	          | |           |                     d	| d
           |                     | d           |                     d           |                     d           |                     d           d S )Nstatic voidr  r  r  z1if (!PyObject_GC_IsFinalized((PyObject *)self)) {z-Py_TYPE(self)->tp_finalize((PyObject *)self);r  zPyObject_GC_UnTrack(self);zCPy_TRASHCAN_BEGIN(self, r  z(self);z)Py_TYPE(self)->tp_free((PyObject *)self);zCPy_TRASHCAN_END(self))r  r   r1   r   emit_reuse_dealloc)r)   r  r  r  r+   s        r3   r?  r?  q  sX    m$$$*SSR^^GM-J-JSSSTTTc MNNNIJJJ#2333	 (2w'''F2CFFFGGG111222ABBB.///cr5   c                   |                      |j                  }|                    d| d           |                    | d           t          | |           t	          | j                  D ]M}|j                                        D ]1\  }}|                    d|	                    |           |           2N|                    d           |                    d           dS )zEmit code to deallocate object by putting it to per-type free list.

    The free "list" currently can have up to one object.
    r  z_free_instance == NULL) {z_free_instance = self;r  zreturn;r  N)
r   r1   r  r  r~  r  r  r   emit_reuse_clearr   )r)   r+   r  r  r   r  s         r3   r  r    s   
 ^^GM**F?V???@@@777888 r7###%% K K?0022 	K 	KKD%$$%Bgll4.@.@%B%BEJJJJ	K i   cr5   r\  finalize_func_namec           	        |                     d           |                     | d           |                     d           |                     d           |                     d           |                     d                    |                    | j                  t          |                     |j                                       |                     d           |                     d           |                     d	           |                     d
           |                     d           |                     d           |                     d           |                     d           |                     d           d S )Nr  z(PyObject *self)r  z#PyObject *type, *value, *traceback;z'PyErr_Fetch(&type, &value, &traceback);z{}{}{}(self);zif (PyErr_Occurred() != NULL) {z4PyObject *del_str = PyUnicode_FromString("__del__");zYPyObject *del_method = (del_str == NULL) ? NULL : _PyType_Lookup(Py_TYPE(self), del_str);z"PyErr_WriteUnraisable(del_method);zPy_XDECREF(del_method);zPy_XDECREF(del_str);r  z&PyErr_Restore(type, value, traceback);)r  rJ  r  r  r   r0   r1   )r\  r  r+   s      r3   rC  rC    s    m$$$+===>>>c;<<<?@@@$$Z_55W]++	
 	
   7888LMMMc   :;;;/000,---c>???cr5   r   c                |   |                     d| d           | j                                        D ]}|j        j        s|j        j        s|j        r#|                     d|j         d           |                     dt           |	                    |j
                   d           ddg}|j        j        t          k    r|                    d	           n*|j        j        t          k    r|                    d
           t          |          }|                     d                    d                    |          |                     |                     d          s+|                     d          s|                    dd           |                     d           |                     d           d S )Nzstatic PyMethodDef r  {"",z (PyCFunction)r-  METH_FASTCALLMETH_KEYWORDSMETH_STATIC
METH_CLASSz {}, PyDoc_STR({})}},r(  __setstate____getstate__z@{"__setstate__", (PyCFunction)CPyPickle_SetState, METH_O, NULL},zE{"__getstate__", (PyCFunction)CPyPickle_GetState, METH_NOARGS, NULL},{NULL}  /* Sentinel */r  )r  methodsvaluesr  is_prop_setteris_prop_getterinternalr   r   r0   r1   r  r    rH  r   r   rJ  rL  rI  r:  )r)   r   r+   r*   rh  docs         r3   rG  rG    s   9D999:::j!! R R7! 	RW%; 	r{ 	++++,,,M6M288GM3J3JMMMNNN /27<,,,LL''''W\---LL&&&-b11188E9J9JCPPQQQQ ==(( 
~1N1N 
NS	
 	
 	

 .///dr5   r`  rb  c                   |                      |j                   d| }|                    d| d| d           |                                D ]!\  }}|                    d| d| d           "|                    d           |S )	N_zstatic rz  z = {r+  r,  r-  r  )r   r1   r  r   )r)   r   r`  rb  r+   ri  rj  s          r3   r8  r8    s     nnW]++44d44D222t222333 2 2u0e000001111dKr5   c           
        | j         s| j        D ]}|                    d           |                    d                    t	          | ||j                  |                     |j                                       |                    d           |                    d                    t          | ||j                  |                     |j                                       | j        	                                D ]\  }\  }}|j
        j        r|                    d           |                    d                    t	          | ||j                  |                     |j                                       |rj|                    d           |                    d                    t          | ||j                  |                     |j                                       d S )Nr  z{}({} *self, void *closure);r  z-{}({} *self, PyObject *value, void *closure);)r   r  r  rJ  rs  r1   r   rw  
propertiesr   r  implicit)r)   r+   r   propgettersetters         r3   rD  rD    s   ; M 	 	D1222.55D'-88"..:W:W   
 l+++?FFD'-88"..:W:W     #%-"5"5"7"7  vv; 	 	-...*11Bgm44bnnW]6S6S 	
 	
 	
  	l+++?FFD'-88"..:W:W    r5   c                   |                     d| d           | j        s| j        D ]}|                     d| d           |                     d                    t	          | ||j                  t          | ||j                                       |                     d           | j                                        D ]\  }\  }}|j	        j
        r|                     d| d           |                     dt	          | ||j                   d           |rC|                     d	t          | ||j                   d           |                     d
           |                     d           | j        r|                     d           |                     d           |                     d           d S )Nzstatic PyGetSetDef r  r  r  z (getter){}, (setter){},z NULL, NULL},z	 (getter)r-  z	 (setter)zNULL, NULL},zNULL, NULL, NULL},z?{"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},r  r  )r  r   r  rJ  rs  r1   rw  r  r   r  r  r2  )r)   r   r+   r   r  r  r  s          r3   rE  rE    s   9D999:::; /M 	/ 	/DnDnnn---*11D'-88+b$PWP]:^:^   
 o...."$-"5"5"7"7 4 4vv; 	....)))Mk"dGM&J&JMMMNNN 	4Q+b$*N*NQQQRRRn----23333	{ ][\\\.///dr5   c                   | j         st          | j                                                  D ]q\  }\  }}t	          | |||           |                    d           t          | |||           |t          | j                  dz
  k     r|                    d           r| j                                        D ]\  }\  }}|j	        j
        r|j        j        }|                    d           t          | ||||           |r?|j        j        d         j        }|                    d           t!          | ||||           d S )Nr{  r   )r   	enumerater  r   generate_getterr  generate_setterr  r  r  r  r  ret_typegenerate_readonly_getterr  r`  generate_property_setter)	r)   r+   r  r   r  r  r  r  arg_types	            r3   rP  rP  +  sc   ; & )"-*=*=*?*? @ @ 	& 	&A}eBeW555b!!!BeW5553r}%%)))!!"%%%"$-"5"5"7"7 
J 
Jvv; 	
#" T5&'BBB 	Jzq).Hb!!!$RxIII
J 
Jr5   r  r%   c           	     `   |                     |          }|                    d           |                    d                    t          | ||j                  |                     |j                                       |                    d           d| }|                     |          o|j         }|s|                    ||dd|| d           |                    d	           |                    d
t          |           dt          | j
                   d           |                    d           |                    d           |                    d| |           |                    d| d|d           |                    d           |                    d           d S )Nr  {}({} *self, void *closure)r  r  z==r  T)unlikely%PyErr_SetString(PyExc_AttributeError,z    "attribute z of z undefined");r  r  retvaldeclare_destzreturn retval;)r   r  rJ  rs  r1   r   is_always_definedis_refcountedemit_undefined_attr_checkreprr   emit_inc_refemit_box)r)   r   r  r+   
attr_field	attr_expralways_defineds          r3   r  r  @  s   d##J)***%,,D'-00"..2O2O	
 	
  
 c%%%I
 ))$//K8K4KN ))%D&$PR]a)bbbABBBXDJJXXDMMXXXYYY.)))#.*..666*j**He$OOO&'''cr5   c           	     d   |                     |          }|                    d           |                    d                    t          | ||j                  |                     |j                                       |                    d           |                     |          }|s|                    d           |                    d           |                    dt          | j                   dt          |           d           |                    d	           |                    d
           | 	                    |          o|j
         }|j
        rQd| }|s|                    ||dd||            |                    d| |           |s|                    d
           |r|                    d           |j        r(|                    dd|t          d          d           nZt!          |t"                    r|                    d           n/|                    dd|d           |                    dd           |                    d|           |                    d| d           |j        r|s|                    dd|| |           |rc|                    d           |                    d| d|                    |           d           |j        r|                    d|| |           |                    d           |                    d
           d S )Nr  ,{}({} *self, PyObject *value, void *closure)r  zif (value == NULL) {r  z    "z object attribute z cannot be deleted");z
return -1;r  r  z!=r  zif (value != NULL) {rj  tmp-1Terrorr   zPyObject *tmp = value;r  z	if (!tmp)z    return -1;z = tmp;z} elsez
    self->r,  r   r  )r   r  rJ  rw  r1   r   is_deletabler$  r   r!  r"  r#  emit_dec_ref
is_unboxed
emit_unboxr   r(   r&   	emit_castr:  r%  error_overlapemit_attr_bitmap_setr  emit_attr_bitmap_clear)r)   r   r  r+   r'  	deletabler)  r(  s           r3   r  r  \  s   d##Jl###6==D'-00"..2O2O	
 	
  
 c%%I 0111ABBBVDMMVVT$ZZVVV	
 	
 	
 	,'''#
 ))$//K8K4KN #)Z))	 	X--eYfdTVWWW2j22E::: 	#c""" 20111 :7E5d8K8KZ^____	e.	/	/ :23333'5%dCCC;(8999&&&2z222333 E> E$$UFE2tDDD D(###YzYYg6O6OPU6V6VYYYZZZ 	D**65"dCCCk"""cr5   func_irc           	        |                     d           |                     d                    t          | ||j                  |                     |j                                       |                     d           |j        r|                     d                    |                    |          t          |                    |j                                       |	                    d|d           |
                    dd|d	           |                     d
           n8|                     dt           |                    |j                   d           |                     d           d S )Nr  r  r  z#{}retval = {}{}((PyObject *) self);r  r  retboxTr  zreturn retbox;zreturn z((PyObject *) self);r  )r  rJ  rs  r1   r   r2  r  r   r0   emit_error_checkr&  )r)   r   r  r9  r+   s        r3   r  r    sx    )***%,,D'-00"..2O2O	
 	
  
 c 
188$$U++]GMM'-<X<X 	
 	
 	

 	  5.AAA8UFFF*++++WmWW]]7=%A%AWWW	
 	
 	
 cr5   r  c           	        |                     d           |                     d                    t          | ||j                  |                     |j                                       |                     d           |j        r_|                    dd|t          d          d           |                     t           |	                    |j                   d	           n7|                     t           |	                    |j                   d
           |                     d           |                     d           d S )Nr  r+  r  rj  r,  r-  Tr.  z((PyObject *) self, tmp);z((PyObject *) self, value);r  r  )
r  rJ  rw  r1   r   r2  r3  r   r   r0   )r)   r   r  r9  r+   s        r3   r  r    sR    l###6==D'-00"..2O2O	
 	
  
 c 
7E8=;N;N]abbbUgmmGM::UUU	
 	
 	
 	
 	WgmmGM::WWW	
 	
 	
 k"""cr5   c                <    |j         dk    o| j        o
| j        dk    S )z6Should the class get the Py_TPFLAGS_MANAGED_DICT flag?r  PyBaseExceptionObject)r;  r2  r   )r)   r+   s     r3   r9  r9    s.     	' 	7K	7O66r5   c                    |                      d          }|2t          |d          }|dS |                    d| j        d          }n
| j         d}| d}t	          |                    dd	
                    S )NrG   T)boundr  r   z()z
--

asciibackslashreplace)errors)r5  r#   replacer   r   encode)r)   r^  text_sig	docstrings       r3   rM  rM    s    mmJ''G%gT:::6##J;;g>>>%%%I	 0 0AS 0 T TUUUr5   N)r)   r   r*   r"   r+   r	   r,   r-   )r   r-   r,   r-   )r)   r   r   rO   r+   r	   r,   r   )
r)   r   r   r	   r   r	   r+   r	   r,   r   )r)   r   r   r-   r+   r	   r,   r   )r)   r   rl  r-   r1   r'   r,   r-   )r)   r   r+   r	   r,   r   )r  r   r[  r-   rV  r-   r+   r	   r  r@  r,   r-   )
r  r-   r+   r	   r  r   r)   r   r,   r   )r  r   rV  r-   r+   r	   r  r  r  r@  r,   r   )r)   r   r]  r  rV  r-   rg  r  r+   r	   r,   r   )r]  r"   r  r-   r+   r	   r,   r   )r)   r   rQ  r-   r  r-   r  r@  r  r-   r+   r	   r,   r   )r)   r   r*   r!   r^  r  rQ  r-   rV  r-   r+   r	   r,   r   )r)   r   r^  r"   r+   r	   r,   r-   )r)   r   r  r-   rV  r-   rQ  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-   rb  r   r+   r	   r,   r  )
r)   r   r   r-   r  r%   r+   r	   r,   r   )r)   r   r   r-   r  r%   r9  r"   r+   r	   r,   r   )r)   r   r   r-   r  r%   r9  r"   r+   r	   r,   r   )r)   r   r+   r	   r,   r@  )r)   r   r,   r-   )f__doc__
__future__r   collections.abcr   typingr   
mypy.nodesr   r   mypyc.codegen.cstringr   mypyc.codegen.emitr	   r
   r   mypyc.codegen.emitfuncr   r   mypyc.codegen.emitwrapperr   r   r   r   r   r   r   r   r   r   mypyc.commonr   r   r   r   r   mypyc.ir.class_irr   r   mypyc.ir.func_irr   r    r!   r"   r#   mypyc.ir.rtypesr$   r%   r&   mypyc.namegenr'   mypyc.sametyper(   r4   r-   SlotGeneratortuplerO   rP   __annotations__rX   r[   r   r   r7  r   r@   r   r   r   r   rk  rs  rw  r   rB  r  r  rN  r  r  r  rO  r8   r<  rF  r=  r>  r?  r  rC  rG  r8  rD  rE  rP  r  r  r  r  r9  rM  r   r5   r3   <module>r[     s	   > > > " " " " " " # # # # # #       * * * * * * * * 6 6 6 6 6 6 H H H H H H H H H H Z Z Z Z Z Z Z Z                        U T T T T T T T T T T T T T 4 4 4 4 4 4 4 4              = < < < < < < < < < ' ' ' ' ' ' ' ' ' ' ' '7 7 7 7 '673S89CsM1223	 LLMJJK+&K(,K(12 45	 		 	 	 	 	 #$;<&(EF&(EF12	# #      %3]D]4^#_  _ _ _ _6"126" 126" *56	6"
 676" 676" 676" ; 786" 126" 236" 676"  786" 676"  786"   78!6"" !89#6"$ $&=>%6"& %'>?'6" 6"( &(?@)6"* ')@A+6", ; 78-6". K!89/6"0 ; 7816"2 K!8936"4 ; 7856"6 K!8976"8 1296": 23;6"< w/0=6"> 01?6"@ 12A6"B 23C6"D ')@AE6"F (*ABG6"J !#:;K6" 6"L '(?@&(?@')@A-/FG/1HI')@A')@A!#:;!89!#:;02IJ 3445#%:;k6" 6" 6"  6 6 6 6r k*k*k*! !      %';<')>?#%89!#56	 l         &
 
 
 
*   .q( q( q( q(hL L L LL L L L   @SU SU SU SUl     b  b  b  bF= = = =@1 1 1 1   * * * *:4 4 4 4n   2) ) ) )X       4   .   2   *   B   6   # # # #L   >J J J J*   86 6 6 6r   4   .	 	 	 	
V 
V 
V 
V 
V 
Vr5   