
    5 f                       U d Z ddlmZ ddl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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.ddZ/eee%ege0f         Z1ee0ee0e1f         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ZWdS )z8Code generation for native classes and related wrappers.    )annotations)CallableMappingTuple)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      M/var/www/equiseq/venv/lib/python3.11/site-packages/mypyc/codegen/emitclass.pynative_slotr0      s!    6RXXgm44666    c                H    t            |                    |j                   S r+   )r   r,   r-   r.   s      r/   wrapper_slotr3   !   s!    /bhhw}--///r1   tp_initc                $    t          | ||          S r+   )generate_init_for_classctes      r/   <lambda>r;   -   s    ,CAq!,L,L r1   tp_callc                $    t          | ||          S r+   )generate_call_wrapperr7   s      r/   r;   r;   .   s    ,A!Q,J,J r1   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PyAsyncMethodsrK   c                P    |                                 rdS t          | ||          S )NPyVectorcall_Call)use_vectorcallr3   r.   s      r/   r>   r>      s0     -"" BG,,,r1   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   rT   x)
startswith)r   s    r/   slot_keyr      s;    
 	 4<#7#7DM<Q<QTzKr1   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/   r;   z generate_slots.<locals>.<lambda>   s    xPQRSPT~~ r1   )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"&	$Mr1   	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
 
r1   modulec                   | j         }|                     j                  }| d}| d}| d}| d}| d}	| d}
| d}| d}| d	}| d
}i }d| d|d<   | j         o| j         }| j        p| j         p| j        }| j        s||d<   |rd| d|d<   d| d|d<   d| d|d<   |r||d<   ||d<   dK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
||d-<   ||d.<   n||d+<   |r(                    d/| d0           | j        J                     t+          | j                  d2z               |             |                     d          }t-          | ||	||            |             t/          | |
            |             t1          | |            |             t3          | ||            |             | j        r%t7          | |d3z   |	d3z   d45          } |             nd1}t7          | ||	d65          }	 |             |r5t9          |             |             t;          | |            |             | j        rt=          | |           t?          | |            |             g d7}|r|                     d8           | !                    d9          rs"                                r_d:#                    |                     j                            |d;<   |                     d<           |$                    d=          sd>|d?<   t!          |           r|                     d@           dA%                    |          |dB<                       dC&                    |            dD                               dE           |'                                D ]!\  } }!                    dF|  dG|! dH           "                    d(                               dI#                    &                    |           J                                                      |rUtQ          | |||	|                                            tS          | | j        |||	                                            |rtU          |            d1S d1S )LzRGenerate C code for a class.

    This is the main entry point to the module.
    _setup_new_members
_getseters_vtable	_traverse_clear_dealloc_methods_trait_vtable_setup"tp_nametp_newz(destructor)
tp_deallocz(traverseproc)tp_traversez	(inquiry)tp_clear	tp_getset
tp_methodsr(   r   c                 0                                       d S r+   )	emit_line)r'   s   r/   r   z!generate_class.<locals>.emit_line   s    r1   __mypyc_defaults_setuprE   &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);Nr   _shadowT)shadowF)Py_TPFLAGS_DEFAULTPy_TPFLAGS_HEAPTYPEPy_TPFLAGS_BASETYPEPy_TPFLAGS_HAVE_GCrF   zoffsetof({}, vectorcall)tp_vectorcall_offset_Py_TPFLAGS_HAVE_VECTORCALLtp_vectorcallr   r<   Py_TPFLAGS_MANAGED_DICT | tp_flagszstatic PyTypeObject z_template_ = {zPyVarObject_HEAD_INIT(NULL, 0). = ,z3static PyTypeObject *{t}_template = &{t}_template_;)r9   )r(   r   )+r   name_prefixr-   r   r   needs_getsetersis_generatedhas_dict
get_methodupdater   rN   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allow_interpreted_subclassesgenerate_vtablesgenerate_getseter_declarationsgenerate_getseters_tablegenerate_new_for_traitgenerate_methods_tableappend
has_methodr   formatgetjoinr   r   generate_setup_for_classgenerate_constructor_for_classgenerate_getseters)"r%   r   r'   r   r  
setup_namenew_namemembers_namegetseters_namevtable_nametraverse_name
clear_namedealloc_namemethods_namevtable_setup_namer   r   r  r   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_classrQ     s   
 7D..//K'''J###H!+++L#///N )))K"---M'''J!+++L!+++L&;;;F#DF9O;BO(;M(N,?N2;O? $#x =CkCCC| G G G G}<<<<z -,{'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III	* 	&-=%	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   4W%;%;%=%= 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'''''( (r1   	attributer-   r#   c                L    |                     | j        | j         d|           S )N_get_private_namemodule_namer   r%   rR  r-   s      r/   getter_namerY  t  *    bn.J.Jy.J.JKKKr1   c                L    |                     | j        | j         d|           S )N_set_rU  rX  s      r/   setter_namer]  x  rZ  r1   c                   t                      }g }|g dz  }|                     d          r)|                                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;rF   zvectorcallfunc vectorcall;r   r    r   z}  T)is_type)setr2  r   r1  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linesrf  baseir   rtypes	            r/   r   r   |  sS   ),JE	LLLLE	}}Z   3W%;%;%=%= 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 !>!>???r1   rq  rB  r=  r  boolc                    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  ra  r3  r  r-   )rv  rq  r'   r  s    r/   trait_vtable_namez+generate_vtables.<locals>.trait_vtable_name  sM    %,,W]++gm,,'IIR
 
 	
r1   c                    d                                         j                  |                     j                            S )Nz{}_{}_offset_tablerx  )rv  rq  r'   s    r/   trait_offset_table_namez1generate_vtables.<locals>.trait_offset_table_name  s@    #**W]++U->->w}-M-M
 
 	
r1   zstatic CPyVTableItem {}[{}];r   r  zstatic CPyVTableItem [z];zstatic size_t {}[{}];zstatic boolz(void){z
_shadow();z	return 1;}z + )rv  r   r(   r)   )r   r3  maxrh  vtable_entriestrait_vtablesr   rj  r   r+  generate_vtablegenerate_offset_tabler1  )rq  rB  r=  r'   r  ry  r{  rv  vtable	subtablesr   offset_names   `  ``       r/   r,  r,    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Tr1   r{  rv  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   rj  r#  r-   r   r3  )r{  r'   rv  r%   r   s        r/   r  r    s     H 7HHHIII  _ _]bnnW]&C&C]]w||TXGYGY]]]^^^^ #d9@@F]@^^    r1   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   r3  r   shadow_methodmethodget_group_prefixdeclr   r,   r-   )
r  r=  r'   r  r  rv  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ar1   	func_namerC  FuncIR | NonerM  
str | Nonec           	     p   |                     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          ra|
                                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;rF   zself->vectorcall = r  r  Nz#if ({}{}((PyObject *)self) == 0) {{Py_DECREF(self);return NULL;zreturn (PyObject *)self;)r   r#  r-   r   ri  rh  rf  r   rg  r2  r   method_declr,   r   rd  re  rj  r   c_undefined_valuer   r%  r3  r   )r%   r  rC  r=  rM  r'   rr  rO  r   rq  r   rs  rP  s                r/   r6  r6  %  st    )***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W%;%;%=%= 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r1   r   rD  r9  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   ).0args     r/   
<listcomp>z2generate_constructor_for_class.<locals>.<listcomp>l  s     N N N3ch!6 N N Nr1   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   r5  sigargsr3  r  r  r   r,   r-   rh  )r%   r&   rD  r9  r=  r'   r  s          r/   r7  r7  ^  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r1   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   r+  r   r3  r   r,   )r%   rD  r'   r  s       r/   r6   r6     s     >>'-00777Il###TTTUUUc	& '"/ '=DDgm44 	
 	
 	
 	
 	+&&&cr1   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   r+  r   r   is_serializabler%  r   r,   r-   )r%   r  r=  r9  rD  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r1   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/   r/  r/    s   )***XXXYYYcGW%=%=b%A%AGGGHHH	F   j!!!_```cn%%%cr1   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  z9_PyObject_VisitManagedDict((PyObject *)self, visit, arg);&*((PyObject **)((char *)self + sizeof()));*((PyObject **)((char *)self + sizeof(PyObject *) + sizeof(r  r~  N)r   r#  r-   rd  re  rj  r   emit_gc_visitr   r$  r  r"   r%   r  r'   rq  r   rs  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$$ 
UVVVV	 	
nnW]33E[EEEGX	
 	
 	
 	Z+ZZZ	
 	
 	
 k"""cr1   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-   rd  re  rj  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$$ 
IJJJJ	 	
nnW]33E[EEEGX	
 	
 	
 	Z+ZZZ	
 	
 	
 k"""cr1   dealloc_func_nameclear_func_namec                   |                     d           |                     | d|                     |j                   d           |                     d           |                     d           |                     d| d           |                     | d           |                     d	           |                     d
           |                     d           d S )Nzstatic voidr  r  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/   r*  r*    s     m$$$*SSR^^GM-J-JSSSTTTc2333F2CFFFGGG111222ABBB.///cr1   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   r1  r   r3  r5  r2  r%  )r%   r   r'   r&   rN  s        r/   r0  r0    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r1   rF  rH  c                   |                      |j                   d| }|                    d| d| d           |                                D ]!\  }}|                    d| d| d           "|                    d           |S )	N_zstatic r`  z = {r  r  r  r  )r  r-   r   r   )r%   r   rF  rH  r'   rO  rP  s          r/   r"  r"  0  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Kr1   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   rj  r   r3  rY  r-   r#  r]  
propertiesr   r  implicit)r%   r'   r   propgettersetters         r/   r-  r-  ;  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    r1   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   rj  r3  rY  r-   r]  r  r   r  r  r  )r%   r   r'   r   r  r  r  s          r/   r.  r.  a  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r1   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 )Nra  r   )r   	enumeraterj  r   generate_getterr   generate_setterrh  r  r  r  r  ret_typegenerate_readonly_getterr  rF  generate_property_setter)	r%   r'   rr  r   rs  r  r  r  arg_types	            r/   r8  r8    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r1   rs  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   r3  rY  r-   r#  is_always_definedis_refcountedemit_undefined_attr_checkreprr   emit_inc_refemit_box)r%   r   rs  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r1   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) {rP  tmp-1Terrorr  zPyObject *tmp = value;r  z	if (!tmp)z    return -1;z = tmp;z} elsez
    self->r  r   r  )r   r   r3  r]  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   rs  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r1   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   r3  rY  r-   r#  r  rk  r   r,   emit_error_checkr  )r%   r   rs  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r1   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}  rP  r  r  Tr  z((PyObject *) self, tmp);z((PyObject *) self, value);r  r~  )
r   r3  r]  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r1   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$    s.     	' 	7K	7O66r1   N)r%   r   r&   r   r'   r   r(   r)   )r   r)   r(   r)   )r%   r   r   rM   r'   r   r(   r   )
r%   r   r   r   r   r   r'   r   r(   r   )r%   r   r   r)   r'   r   r(   r   )r%   r   rR  r)   r-   r#   r(   r)   )r%   r   r'   r   r(   r   )rq  r   rB  r)   r=  r)   r'   r   r  rt  r(   r)   )
r{  r)   r'   r   rv  r   r%   r   r(   r   )r  r   r=  r)   r'   r   r  r  r  rt  r(   r   )r%   r   r  r)   rC  r  r=  r)   rM  r  r'   r   r(   r   )r%   r   r&   r   rD  r  r9  r)   r=  r)   r'   r   r(   r   )r%   r   rD  r   r'   r   r(   r)   )r%   r   r  r)   r=  r)   r9  r)   rD  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)   rF  r)   rH  r   r'   r   r(   r  )
r%   r   r   r)   rs  r!   r'   r   r(   r   )r%   r   r   r)   rs  r!   r  r   r'   r   r(   r   )r%   r   r   r)   r  r!   r  r   r'   r   r(   r   )r%   r   r'   r   r(   rt  )X__doc__
__future__r   typingr   r   r   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$   r0   r3   r)   SlotGeneratorrM   rN   __annotations__rV   rY   r   r   r!  r   r>   r   r   r   rQ  rY  r]  r   r,  r  r  r6  r7  r6   r'  r/  r(  r)  r*  r0  r"  r-  r.  r8  r  r  r  r  r$  r  r1   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0 0 0 0 '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- - - -      &
 
 
 
*l( l( l( l(^L L L LL L L L   @SU SU SU SUl     b  b  b  bF6 6 6 6r' ' ' 'T   2" " " "J       4   .      4   # # # #L   >J J J J*   86 6 6 6r   4   .	 	 	 	 	 	r1   