
    X-Phҫ                       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	m
Z
 ddl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% ddl&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- ddZ.eee%ege/f         Z0ee/e1e/e0f         f         Z2dd fdd fde.fde.fde.fde.fdefd efd!Z3d"e4d#<   d$efd%efd%efd&efd'Z5d"e4d(<   d)d*efiZ6d"e4d+<   i d,d-ef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d@dAefdBdAefdCdDefdEdDefdFdGefdHdGefi dIdJefdKdJefdLdMefdNdMefdOdPefdQdPefdRdSefdTdSefdUdVefdWdVefdXdYefdZdYefd[d\efd]d\efd^d_efd`d_efdadbefdcefddefdeefdfefdgefdhefdiefdjefdkefdlefdmefdnefdnefdoefdpZ7d"e4dq<   dre.fdse.fdte.fduZ8d"e4dv<   dwdxe5fdydze6fd{d|e7fd}d~e8fgZ9dhZ:ddZ;ddZ<ddZ=ddZ>ddZ?ddZ@ddZAddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKddZLddZMddZNddZOddZPddZQddZRddZSddZTddZUddÄZVddńZWddƄZXdS )z8Code generation for native classes and related wrappers.    )annotations)Mapping)Callable)EmitterHeaderDeclarationReturnHandler)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)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      W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypyc/codegen/emitclass.pynative_slotr/      s!    6RXXgm44666    tp_initc                $    t          | ||          S r*   )generate_init_for_classctes      r.   <lambda>r8   *   s    ,CAq!,L,L r0   tp_callc                $    t          | ||          S r*   )generate_call_wrapperr4   s      r.   r8   r8   +   s    ,A!Q,J,J r0   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PyAsyncMethodsrH   c                    dS )NPyVectorcall_Call r-   s      r.   r;   r;      s    r0   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}   rQ   x)
startswith)r   s    r.   slot_keyr      s;    
 	 4<#7#7DM<Q<QTzKr0   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    r.   r8   z generate_slots.<locals>.<lambda>   s    xPQRSPT~~ r0   )key   r   )sorteditemsget_method_and_classALWAYS_FILL)	r$   r   r&   fields	generatednameslot	generator
method_clss	            r.   generate_slotsr      s    F "I#)%++--=U=U#V#V#V 
' 
'tY,,T22
 	':a=B..$+2E2Ey  (t !yZ]G<<#t"&	$Mr0   	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          r.   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
 
r0   modulec                4   | j         }|                     j                  }| d}| 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<   dN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        d0k     r
||d1<   ||d2<   n||d/<   |rS                    d3| d4           | j        J                     t/          | j                  d5z               |             | 
                    d          }t1          | ||
||            |             t3          | |            |             t5          | |            |             t7          | ||t9          |                      |             |rt;          ||            |             | j        r%t?          | |d6z   |
d6z   d78          }  |             nd} t?          | ||
d98          }
 |             |r5tA          |             |             tC          | |	            |             | j        rtE          | |           tG          | |            |             g d:}!|r|!$                    d;           | %                    d<          r_d=&                    |                     j                            |d><   |!$                    d?           |'                    d@          sdA|dB<   t%          |           r|!$                    dC           dD(                    |!          |dE<                       dF)                    |            dG                               dH           |*                                D ]!\  }"}#                    dI|" dJ|# dK           "                    d,                               dL&                    )                    |           M                                                      |rUtW          | |||
|                                             tY          | | j        |||
                                            |rt[          |            dS dS )OzRGenerate C code for a class.

    This is the main entry point to the module.
    _setup_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).0r7   s     r.   	<genexpr>z!generate_class.<locals>.<genexpr>   s0      RRAaf	>Q>Qqx>Q>Q>Q>QRRr0   Ntp_finalize	tp_getset
tp_methodsr'   r   c                 0                                       d S r*   )	emit_line)r&   s   r.   r   z!generate_class.<locals>.emit_line   s    r0   __mypyc_defaults_setuprB   &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_weaklistoffsetstatic PyObject *z(PyTypeObject *type);r   _shadowT)shadowF)Py_TPFLAGS_DEFAULTPy_TPFLAGS_HEAPTYPEPy_TPFLAGS_BASETYPEPy_TPFLAGS_HAVE_GCrC   zoffsetof({}, vectorcall)tp_vectorcall_offset_Py_TPFLAGS_HAVE_VECTORCALLtp_vectorcallr   r9   Py_TPFLAGS_MANAGED_DICT | tp_flagszstatic PyTypeObject z_template_ = {zPyVarObject_HEAD_INIT(NULL, 0). = ,z3static PyTypeObject *{t}_template = &{t}_template_;)r6   )r'   r   ).r   name_prefixr,   r   r   needs_getsetersis_generatedhas_dictnextvtable_entries
get_methodupdater   rK   SIDE_TABLESgenerate_side_table_for_classr   struct_name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generate_finalize_for_classallow_interpreted_subclassesgenerate_vtablesgenerate_getseter_declarationsgenerate_getseters_tablegenerate_new_for_traitgenerate_methods_tableappend
has_methodformatgetjoinr   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   r   
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$     `                                 r.   generate_classr[     s*   
 7D..//K'''J###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&'!*~  	OjOOOPPPw"""0'BBSHIII	--
++r8[*gwWWW	#Bw???	 Z999	"2|ZjAQAQSZ[[[	 	'
M7KKKIKKK* 	&-=%	1;3JG\`. . . IKKKK!%&r+<k7[`aaa	 &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: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 	
 	
     
K6H'	
 	
 	
 	&r27GZV]^^^ (2w'''''( (r0   	attributer,   r"   c                L    |                     | j        | j         d|           S )N_get_private_namemodule_namer   r$   r\  r,   s      r.   getter_namerc  s  *    bn.J.Jy.J.JKKKr0   c                L    |                     | j        | j         d|           S )N_set_r_  rb  s      r.   setter_namerg  w  rd  r0   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;rC   zvectorcallfunc vectorcall;r   r    r   z}  T)is_type)setr:  r9  reversedbase_mror   bitmap_attrsbitmap_fieldlenranger   r   
attributesr   ctype_spacedr   add
isinstancer   declare_tuple_structr)  r,   r   r   r   )	r$   r&   
seen_attrslinesrp  baseir   rtypes	            r.   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 !>!>???r0   r{  rK  rF  r  r1  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  rk  r;  r  r,   )r  r{  r&   r  s    r.   trait_vtable_namez+generate_vtables.<locals>.trait_vtable_name  sM    %,,W]++gm,,'IIR
 
 	
r0   c                    d                                         j                  |                     j                            S )Nz{}_{}_offset_tabler  )r  r{  r&   s    r.   trait_offset_table_namez1generate_vtables.<locals>.trait_offset_table_name  s@    #**W]++U->->w}-M-M
 
 	
r0   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   r;  maxrr  r$  trait_vtablesr   rt  r   r3  generate_vtablegenerate_offset_tabler9  )r{  rK  rF  r&   r  r  r  r  vtable	subtablesr   offset_names   `  ``       r.   r4  r4    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Tr0   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   rt  r)  r,   r   r;  )r  r&   r  r$   r   s        r.   r  r    s     H 7HHHIII  _ _]bnnW]&C&C]]w||TXGYGY]]]^^^^ #d9@@F]@^^    r0   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   r;  r   shadow_methodr   get_group_prefixdeclr   r+   r,   )
r  rF  r&   r  r  r  r   offset_tableentryr   s
             r.   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ar0   	func_namerM  FuncIR | NonerW  
str | Nonec           	     H   |                     d           |                     | d           |                     d           |                     |                     |j                   d           |                     d|                     |j                   d           |                     d           |                     d           |r|                     d	|                    |            d
           |                     d| d           |                     d           |                     d| d           |                     d           n|                     d| d           t	          dt          | j                  t                    D ]0}|                    |          }|                     d| d           1| 	                    d          rM| 
                    d                              |j                  }|                     dt           | d           t          | j                  D ]k}	|	j                                        D ]O\  }
}|                    |          }|dk    r/|                     d|                    |
           d| d           Pl|I|                    d                    t*          |                    |j                            ddd           |                     d           |                     d           dS )zAGenerate a native function that allocates an instance of a class.r  z(PyTypeObject *type)r  z *self;zself = (z *)type->tp_alloc(type, 0);if (self == NULL)    return NULL;if (type != ) {zself->vtable = r   } else {r  r   self->z = 0;rC   zself->vectorcall = r  r  Nz#if ({}{}((PyObject *)self) == 0) {{Py_DECREF(self);return NULL;zreturn (PyObject *)self;)r   r)  r,   r   rs  rr  rp  r   rq  r:  method_declr+   r   rn  ro  rt  r   c_undefined_valuer   r+  r;  r   )r$   r  rM  rF  rW  r&   r|  rY  r   r{  r   r}  rZ  s                r.   r>  r>  $  s`    )***888999c66???@@@[!>!>[[[\\\)***())) <K)A)A")E)EKKKLLLA,>AAABBB*%%%:K:::;;;#:K:::;;;1c"/**K88 1 1$$Q''/5///0000	}}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 188{00??  	
 	
 	
 0111cr0   r   rN  rA  c           	        |                     t          ||                      |                     d           |                     d| d|                    |            d           |                     d           |                     d           d                    dgd	 |j        j        D             z             }||                     d                    |                    |j                  t          |
                    |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  PyObject *self = (z);r  r  r  selfc                ,    g | ]}t           |j        z   S r   )r   r   )r   args     r.   
<listcomp>z2generate_constructor_for_class.<locals>.<listcomp>l  s     N N N3ch!6 N N Nr0   Nzchar res = {}{}{}({});zif (res == 2) {r  r  r  r   z
int res = z
->tp_init(zif (res < 0) {return self;)r   r	   r   r=  sigargsr;  r  r  r   r+   r,   rr  )r$   r%   rN  rA  rF  r&   r  s          r.   r?  r?  ^  sG    /G<<>???cW*WWw7O7OPR7S7SWWWXXX)***()))99fX N N"&+ N N NNOOD$++((66gm,,	 	
 	
 	
 	+,,,,---.)))# 
RV[		A		Ww'?'?'C'CWWtWWWXXX*+++,---.)))#n%%%cr0   c                   |                      |j                   d}|                    d           |                    | d           |                    d           | j        s| j        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  z/return {}{}(self, args, kwds) != NULL ? 0 : -1;	return 0;r  )r  r,   r   r3  r   r;  r   r+   )r$   rN  r&   r  s       r.   r3   r3     s     >>'-00777Il###TTTUUUc	& '"/ '=DDgm44 	
 	
 	
 	
 	+&&&cr0   c                8   |                     d           |                     | d           |                     d           | j        sk|                     d|                    |            d           |                     d           |                     d           |                     d           |r"| j        s| j        s|                                 r|                     d	| d
           n|                     d| d
           |                    dd           |                     dt           |                    |j                   d           |                    dd           |                     d           |                     d           d S )Nr  4(PyTypeObject *type, PyObject *args, PyObject *kwds)r  r  r  zUPyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled");r  r  return z(type);r  r  r  zPyObject *ret = z(self, args, kwds);zif (ret == NULL)r  )	r   r3  r   r   is_serializabler+  r   r+   r,   )r$   r  rF  rA  rN  r&   s         r.   r-  r-    s    )***XXXYYYc* K)A)A")E)EKKKLLLc	
 	
 	
 	.)))# *b5 * *BL^L^L`L` *7J7778888
 	AjAAABBB.0BCCCXvXw}}W]'C'CXXX	
 	
 	
 	-/ABBB.)))cr0   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      r.   r7  r7    s   )***XXXYYYcGW%=%=b%A%AGGGHHH	F   j!!!_```cn%%%cr0   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)  r,   rn  ro  rt  r   emit_gc_visitr   r*  r"  r!   r$   r  r&   r{  r   r}  r)  s          r.   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r0   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)  r,   rn  ro  rt  r   emit_gc_clearr   r*  r"  r!   r  s          r.   r/  r/    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r0   dealloc_func_nameclear_func_namehas_tp_finalizec                L   |                     d           |                     | d|                     |j                   d           |                     d           |r?|                     d           |                     d           |                     d           |                     d           |                     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)  r,   )r$   r  r  r  r&   s        r.   r0  r0    s=    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F2CFFFGGG111222ABBB.///cr0   rL  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   r;  r  r  r   r+   r,   )rL  r  r&   s      r.   r2  r2    s    m$$$+===>>>c;<<<?@@@$$Z_55W]++	
 	
   7888LMMMc   :;;;/000,---c>???cr0   r   c                N   |                     d| d           | j                                        D ]}|j        j        s|j        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
           |                     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 {}, NULL}},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_getterr   r   r+   r,   kindr   r9  r   r;  r=  r:  r+  )r$   r   r&   r%   rX  s        r.   r8  r8  ?  s   9D999:::j!! D D7! 	RW%; 	++++,,,M6M288GM3J3JMMMNNN /27<,,,LL''''W\---LL&&&.//

50A0ABBCCCC ==(( 
~1N1N 
NS	
 	
 	

 .///dr0   rP  rR  c                   |                      |j                   d| }|                    d| d| d           |                                D ]!\  }}|                    d| d| d           "|                    d           |S )	N_zstatic rj  z = {r  r  r  r  )r  r,   r   r   )r$   r   rP  rR  r&   rY  rZ  s          r.   r(  r(  Y  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Kr0   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   rt  r   r;  rc  r,   r)  rg  
propertiesr   r  implicit)r$   r&   r   propgettersetters         r.   r5  r5  d  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    r0   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   rt  r;  rc  r,   rg  r  r   r  r  r"  )r$   r   r&   r   r  r  r  s          r.   r6  r6    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r0   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 )Nrk  r   )r   	enumeratert  r   generate_getterr   generate_setterrr  r  r  r  r  ret_typegenerate_readonly_getterr  rP  generate_property_setter)	r$   r&   r|  r   r}  r  r  r  arg_types	            r.   r@  r@    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r0   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   r;  rc  r,   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          r.   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r0   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) {rZ  tmp-1Terrorr  zPyObject *tmp = value;r  z	if (!tmp)z    return -1;z = tmp;z} elsez
    self->r  r   r  )r   r   r;  rg  r,   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           r.   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r0   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;r  z((PyObject *) self);r  )r   r;  rc  r,   r)  r  ru  r   r+   emit_error_checkr  )r$   r   r}  r  r&   s        r.   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r0   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  rZ  r  r  Tr  z((PyObject *) self, tmp);z((PyObject *) self, value);r  r  )
r   r;  rg  r,   r)  r  r  r   r   r+   )r$   r   r  r  r&   s        r.   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r0   c                <    |j         dk    o| j        o
| j        dk    S )z6Should the class get the Py_TPFLAGS_MANAGED_DICT flag?r
  PyBaseExceptionObject)r,  r"  r   )r$   r&   s     r.   r*  r*  D  s.     	' 	7K	7O66r0   N)r$   r   r%   r   r&   r   r'   r(   )r   r(   r'   r(   )r$   r   r   rJ   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   rK  r(   rF  r(   r&   r   r  r1  r'   r(   )
r  r(   r&   r   r  r   r$   r   r'   r   )r  r   rF  r(   r&   r   r  r  r  r1  r'   r   )r$   r   r  r(   rM  r  rF  r(   rW  r  r&   r   r'   r   )r$   r   r%   r   rN  r  rA  r(   rF  r(   r&   r   r'   r   )r$   r   rN  r   r&   r   r'   r(   )r$   r   r  r(   rF  r(   rA  r(   rN  r  r&   r   r'   r   )r$   r   r  r(   r&   r   r'   r   )r$   r   r  r(   r  r(   r  r1  r&   r   r'   r   )rL  r   r  r(   r&   r   r'   r   )r$   r   r   r(   r&   r   r'   r   )r$   r   r   r(   rP  r(   rR  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'   r1  )Y__doc__
__future__r   collections.abcr   typingr   mypyc.codegen.emitr   r   r   mypyc.codegen.emitfuncr	   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   mypyc.ir.rtypesr   r    r!   mypyc.namegenr"   mypyc.sametyper#   r/   r(   SlotGeneratortuplerJ   rK   __annotations__rS   rV   r   r   r'  r   r;   r   r   r   r[  rc  rg  r   r4  r  r  r>  r?  r3   r-  r7  r.  r/  r0  r2  r8  r(  r5  r6  r@  r  r  r  r  r*  r   r0   r.   <module>r%     s   > > > " " " " " " # # # # # #       H H H H H H H H H H 9 9 9 9 9 9                        U T T T T T T T T T T T T T 4 4 4 4 4 4 4 4 R R R R R R R R R R R R < < < < < < < < < < ' ' ' ' ' ' ' ' ' ' ' '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         &
 
 
 
*s( s( s( s(lL L L LL L L L   @SU SU SU SUl     b  b  b  bF7 7 7 7t' ' ' 'T   2" " " "J       4   .   .   B   4   # # # #L   >J J J J*   86 6 6 6r   4   .	 	 	 	 	 	r0   