o
    ÕtBhƒ™  ã                	   @  s’  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 ddl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+ dÝdd„Z,dÝdd„Z-eee#ege.f Z/ee.ee.e/f f Z0ddd„ fddd„ fde,fde,fd e,fd!e,fd"efd#efd$œZ1d%e2d&< d'efd(efd(efd)efd*œZ3d%e2d+< d,d-efiZ4d%e2d.< i d/d0ef“d1d2ef“d3d4ef“d5d6ef“d7d8ef“d9d:ef“d;d:ef“d<d=ef“d>d=ef“d?d@ef“dAd@ef“dBdCef“dDdCef“dEdFef“dGdFef“dHdIef“dJdIef“i dKdLef“dMdLef“dNdOef“dPdOef“dQdRef“dSdRef“dTdUef“dVdUef“dWdXef“dYdXef“dZd[ef“d\d[ef“d]d^ef“d_d`ef“dadbef“dcddef“dedfef“¥dgefdhefdiefdjefdkefdlefdmefdnœ¥Z5d%e2do< dpe,fdqe,fdre,fdsœZ6d%e2dt< dudve3fdwdxe4fdydze5fd{d|e6fgZ7d}hZ8dÝd~d„Z9dÞdd‚„Z:dßd…d†„Z;dàdŠd‹„Z<dáddŽ„Z=dâd’d“„Z>dâd”d•„Z?dãd–d—„Z@däddž„ZAdåd¡d¢„ZBdæd§d¨„ZCdçd®d¯„ZDdèd³d´„ZEdédµd¶„ZFdêd·d¸„ZGdëd¹dº„ZHdëd»d¼„ZIdëd½d¾„ZJdìdÁdÂ„ZKdídÄdÅ„ZLdîdÈdÉ„ZMdãdÊdË„ZNdídÌdÍ„ZOdãdÎdÏ„ZPdïdÒdÓ„ZQdïdÔdÕ„ZRdðd×dØ„ZSdñdÚdÛ„ZTdÜS )ò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_len_wrapperÚgenerate_richcompare_wrapperÚgenerate_set_del_item_wrapper)ÚNATIVE_PREFIXÚPREFIXÚ
REG_PREFIXÚuse_fastcall)ÚClassIRÚVTableEntries)ÚFUNC_CLASSMETHODÚFUNC_STATICMETHODÚFuncDeclÚFuncIR)ÚRTupleÚRTypeÚobject_rprimitive)ÚNameGenerator)Úis_same_typeÚclr   Úfnr   Úemitterr   ÚreturnÚstrc                 C  ó   t › | |j¡› S ©N)r   ÚcnameÚnames©r"   r#   r$   © r,   ún/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypyc/codegen/emitclass.pyÚnative_slot   ó   r.   c                 C  r'   r(   )r   r)   r*   r+   r,   r,   r-   Úwrapper_slot    r/   r0   Útp_initc                 C  ó   t | ||ƒS r(   )Úgenerate_init_for_class©ÚcÚtÚer,   r,   r-   Ú<lambda>,   ó    r8   Útp_callc                 C  r2   r(   )Úgenerate_call_wrapperr4   r,   r,   r-   r8   -   r9   Ú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Ú__neg__Únb_negativeÚ
__invert__Ú	nb_invertÚ__int__Únb_intÚ	__float__Únb_floatÚ__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__Ú
__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Ú__isub__Únb_inplace_subtractÚ__imul__Únb_inplace_multiplyÚ__imod__Únb_inplace_remainderÚ__itruediv__Ú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)Ú__ifloordiv__Ú__ilshift__Ú__irshift__Ú__iand__Ú__ior__Ú__ixor__Ú__imatmul__Ú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                 C  s   |  ¡ rdS t| ||ƒS )NÚPyVectorcall_Call)Úuse_vectorcallr0   r+   r,   r,   r-   r;   }   s   r;   Úattrc                 C  s&   |   d¡r	| dks| dkrd|  S | S )zuMap dunder method name to sort key.

    Sort reverse operator methods and __delitem__ after others ('x' > '_').
    Ú__rrv   rQ   Úx)Ú
startswith)r¯   r,   r,   r-   Úslot_key†   s   r³   Útableúdict[str, str]c           	      C  s†   i }i }t | ¡ dd„ dD ]2\}\}}|  |¡}|r@|d | ks%|tv r@||v r0|| ||< q|| |d |ƒ}|||< |||< q|S )Nc                 S  s   t | d ƒS )Nr   )r³   )r±   r,   r,   r-   r8   ”   r9   z generate_slots.<locals>.<lambda>)Úkeyé   r   )ÚsortedÚitemsÚget_method_and_classÚALWAYS_FILL)	r"   r´   r$   ÚfieldsÚ	generatedÚnameÚslotÚ	generatorÚ
method_clsr,   r,   r-   Úgenerate_slots   s    
€rÂ   Ú	c_emitterÚexternal_emitterÚNonec                 C  sˆ   |j }| | ¡}td| | ¡› ddd|j|< | jsd S t| |ƒ | j o)| j }|rBtt| j	|ƒ› d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_fullr,   r,   r-   Úgenerate_class_type_decl£   s   
ÿ
ÿÿrÒ   Úmodulec           "        s¦  | j }|  ˆ j¡}|› d}|› d}|› d}|› d}|› d}	|› d}
|› d}|› d}|› d	}|› d
}i }d|› d|d< | j oL| j }| jpS| j }| js[||d< |rud|› d|d< d|› d|d< d|› d|d< |r{||d< ||d< dJ‡ fdd„}|ƒ  |  d¡}|  d¡}| t	| t
ˆ ƒ¡ tD ]\}}}t	| |ˆ ƒ}|r½t| |||ˆ ƒ}d|› |d|› < qžt| ˆ ƒ}|rÉ||d< |  ˆ j¡}| jrÚd| j› d }n| jràd!}nd|› d }| jr|› d"}ˆ  d#|› d$d%|› d&d'|› d&d(d)¡ ||d*< |› d+|d,< ||d-< ||d.< n||d,< |rŽˆ  d/|› d0¡ | jd1us0J ‚ˆ  t| jˆ ƒd2 ¡ |ƒ  |  d¡}t| ||	||ˆ ƒ |ƒ  t| |
ˆ ƒ |ƒ  t| |ˆ ƒ |ƒ  t| ||ˆ ƒ |ƒ  | jr€t| |d3 |	d3 ˆ d4d5}|ƒ  nd1}t| ||	ˆ d6d5}	|ƒ  |r¢t| ˆ ƒ |ƒ  t| |ˆ ƒ |ƒ  | jr¬t| |ˆ ƒ t| |ˆ ƒ |ƒ  g d7¢}|rÁ| d8¡ |  d9¡ræˆ   ¡ ræd: !|  ˆ j¡¡|d;< | d<¡ | "d=¡sæd>|d?< d@ #|¡|dA< ˆ  dBˆ  $| ¡› dC¡ ˆ  dD¡ | %¡ D ]\} }!ˆ  dE| › dF|!› dG¡ qˆ  d)¡ ˆ  dHj!ˆ  $| ¡dI¡ ˆ  ¡  |rGt&| |||	|ˆ ƒ ˆ  ¡  t'| | j|||	ˆ ƒ ˆ  ¡  |rQt(| ˆ ƒ d1S d1S )KzRGenerate 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                     s   ˆ   ¡  d S r(   )Ú	emit_liner,   ©r$   r,   r-   ræ   Ü   s   z!generate_class.<locals>.emit_lineÚ__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);NrÆ   Ú_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­   r:   ú | Ú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Ú
get_methodÚupdaterÂ   rK   ÚSIDE_TABLESÚgenerate_side_table_for_classr   Ústruct_nameÚhas_dictÚ
emit_linesræ   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Úvaluer,   rç   r-   Úgenerate_class¸   sô   











€




û

ÿ


ÿ


ÿÿÿÿr6  Ú	attributer*   r    c                 C  ó   |  | j| j› d|› ¡S )NÚ_get_©Úprivate_nameÚmodule_namer¾   ©r"   r7  r*   r,   r,   r-   Úgetter_named  ó   r>  c                 C  r8  )NÚ_set_r:  r=  r,   r,   r-   Úsetter_nameh  r?  rA  c                 C  sî   t ƒ }g }|g d¢7 }|  d¡r| ¡ r| d¡ t| jƒD ]6}|jsT|j ¡ D ]+\}}||f|vrS| | 	|¡› | 
|¡› d¡ | ||f¡ t|tƒrS| |¡ q(q| d|  |j¡› d¡ | d¡ t|dd|jj|  |j¡< d S )	N)ztypedef struct {ÚPyObject_HEADzCPyVTableItem *vtable;rC   zvectorcallfunc vectorcall;rÆ   z} Ú T)Úis_type)Úsetr  r®   r  ÚreversedÚbase_mrorÍ   Ú
attributesr¹   Úctype_spacedr¯   ÚaddÚ
isinstancer   Údeclare_tuple_structr	  r*   r   rÈ   rÊ   )r"   r$   Ú
seen_attrsÚlinesÚbaser¯   Úrtyper,   r,   r-   rÌ   l  s&   
 

€
ÿrÌ   rO  r'  r"  rõ   Úboolc                   sŠ  d‡ ‡‡fdd„}d‡ ‡fdd„}ˆ  d	 |td
tˆ jƒdtˆ jƒ  ƒ¡¡ ˆ j ¡ D ](\}}ˆ  d||ƒ› dtd
t|ƒƒ› d¡ ˆ  d ||ƒtd
t|jƒƒ¡¡ q,ˆ  d¡ ˆ  t› |› d¡ ˆ  d¡ ˆ j	rxˆsxˆ  t› |› d¡ g }	ˆ j ¡ D ]#\}}||ƒ}
||ƒ}t
||
ˆg ˆƒ t|ˆ|ˆ ƒ |	 ||
|f¡ qt
ˆ j|ˆ|	ˆƒ ˆ  d¡ ˆ  d¡ |	sº|S |› dt|	ƒd › 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                   s(   d  ˆ  ˆj¡|  ˆj¡ˆrd¡S d¡S )Nz{}_{}_trait_vtable{}rô   rC  ©r  r  r*   ©rR  ©rO  r$   rõ   r,   r-   Útrait_vtable_name¢  s   

ýýz+generate_vtables.<locals>.trait_vtable_namec                   s   d  ˆ  ˆj¡|  ˆj¡¡S )Nz{}_{}_offset_tablerS  rT  )rO  r$   r,   r-   Útrait_offset_table_name©  s   ÿz1generate_vtables.<locals>.trait_offset_table_namezstatic CPyVTableItem {}[{}];r·   é   zstatic CPyVTableItem ú[z];zstatic size_t {}[{}];zstatic boolz(void)Ú{z
_shadow();z	return 1;Ú}z + N)rR  r   r%   r&   )ræ   r  ÚmaxÚlenÚvtable_entriesÚtrait_vtablesr¹   rH  r   r  Úgenerate_vtableÚgenerate_offset_tabler  )rO  r'  r"  r$   rõ   rV  rW  rR  ÚvtableÚ	subtablesr¾   Úoffset_namer,   rU  r-   r  ƒ  s@   ÿÿÿÿÿ




r  rW  rR  c              	   C  st   |  d| › d¡ |jD ]}|  d| |j¡› d| |¡› d¡ q|js*|  d¡ |  d¡ |  dj| 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æ   rH  r	  r*   r¯   r  )rW  r$   rR  r"   r¯   r,   r,   r-   ra  Ù  s   
(


ÿra  Úentriesr   rc  úlist[tuple[ClassIR, str, str]]c           
   
   C  sÈ   |  d|› d¡ |r*|  d¡ |D ]\}}}|  d | |¡||¡¡ q|  d¡ | D ] }|r6|jr6|jn|j}	|  d | |jj¡t|	 |j	¡¡¡ q,| sT|  d¡ |  d¡ |  d	j|d
¡ d S )NzCPyVTableItem re  z/* Array of trait vtables */z8(CPyVTableItem){}, (CPyVTableItem){}, (CPyVTableItem){},z/* Start of real vtable */z(CPyVTableItem){}{}{},ÚNULLrî   rh  ri  )
ræ   r  rÉ   Úshadow_methodÚmethodÚget_group_prefixÚdeclr   r)   r*   )
rj  r"  r$   rc  rõ   rR  r´   Úoffset_tableÚentryrn  r,   r,   r-   r`  é  s.   
ÿÿ

ýÿ	

r`  Ú	func_namer(  úFuncIR | Noner2  ú
str | Nonec           
   
   C  s”  |  d¡ |  |› d¡ |  d¡ |  |  |j¡› d¡ |  d|  |j¡› d¡ |  d¡ |  d¡ |r`|  d	| | ¡› d
¡ |  d|› d¡ |  d¡ |  d|› d¡ |  d¡ n	|  d|› d¡ |  d¡r†| ¡ r†|  d¡ |j¡}|  dt› |› d¡ t	| j
ƒD ]}|j ¡ D ]\}}	|  d| |¡› d| |	¡› d¡ q’q‹|dur¾| 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)rZ  z *self;zself = (z *)type->tp_alloc(type, 0);úif (self == NULL)ú    return NULL;úif (type != ú) {zself->vtable = rÆ   ú} else {r[  rC   zself->vectorcall = úself->r   Nz#if ({}{}((PyObject *)self) == 0) {{úPy_DECREF(self);úreturn NULL;zreturn (PyObject *)self;)ræ   r	  r*   rÉ   r  r®   Úmethod_declr)   r   rF  rG  rH  r¹   r¯   Úc_undefined_valuer  r  r   )
r"   rs  r(  r"  r2  r$   r¾   rO  r¯   rP  r,   r,   r-   r    s@   
	



&ÿÿú
	r  r   r)  r  c              	   C  s2  |  t||ƒ› ¡ |  d¡ |  d|› d| | ¡› d¡ |  d¡ |  d¡ d dgd	d
„ |jjD ƒ ¡}|durb|  d | |j¡t	| 
|j¡|¡¡ |  d¡ |  d¡ |  d¡ |  d¡ n+t|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.rZ  úPyObject *self = ú(z);rv  rw  rf  Úselfc                 S  s   g | ]}t |j ‘qS r,   )r   r¾   )Ú.0Úargr,   r,   r-   Ú
<listcomp>K  s    z2generate_constructor_for_class.<locals>.<listcomp>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  ro  rp  r   r)   r*   r]  )r"   r#   r)  r  r"  r$   rˆ  r,   r,   r-   r  =  s6   	




üÿ







r  c                 C  sv   |   |j¡› d}| d¡ | |› d¡ | d¡ | js!| jr/| d t| |j¡¡¡ n| d¡ | d¡ |S )zÔGenerate 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)rZ  z/return {}{}(self, args, kwds) != NULL ? 0 : -1;ú	return 0;r[  )r  r*   ræ   r  rÎ   r  r   r)   )r"   r)  r$   rs  r,   r,   r-   r3   g  s   

ÿÿ

r3   c                 C  sì   |  d¡ |  |› d¡ |  d¡ | js0|  d| | ¡› d¡ |  d¡ |  d¡ |  d¡ |r<| js<| js<|  ¡ rF|  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)rZ  rx  ry  zUPyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled");r}  r[  úreturn z(type);r€  rv  rw  zPyObject *ret = z(self, args, kwds);zif (ret == NULL)r†  )	ræ   r  rÉ   rÎ   Úis_serializabler  r   r)   r*   )r"   rs  r"  r  r)  r$   r,   r,   r-   r  €  s(   

ÿ

ÿ
r  c                 C  s|   |  d¡ |  |› d¡ |  d¡ |  d| | ¡› d¡ |  d¡ |  d¡ |  d¡ |  d	¡ |  d
¡ |  d	¡ d S )Nró   rŒ  rZ  rx  ry  z\PyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled traits");rz  zGPyErr_SetString(PyExc_TypeError, "traits may not be directly created");r[  r}  )ræ   rÉ   )r"   rs  r$   r,   r,   r-   r  ¥  s   

ÿ



r  c                 C  sÀ   |  d¡ |  |› d|  |j¡› d¡ |  d¡ t| jƒD ]}|j ¡ D ]\}}| d| |¡› |¡ q%q| j	rT|  |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)rZ  r{  ú&*((PyObject **)((char *)self + sizeof(ú)))ú;*((PyObject **)((char *)self + sizeof(PyObject *) + sizeof(r‹  r[  N)ræ   r	  r*   rF  rG  rH  r¹   Úemit_gc_visitr¯   r
  r   ©r"   rs  r$   rO  r¯   rP  r	  r,   r,   r-   r  µ  s(   
ÿ
ÿÿ
þ
r  c                 C  sÀ   |  d¡ |  |› d|  |j¡› d¡ |  d¡ t| jƒD ]}|j ¡ D ]\}}| d| |¡› |¡ q%q| j	rT|  |j¡}| d|› dt
¡ | d|› dt
¡ |  d	¡ |  d
¡ d S )NrŠ  r  ú *self)rZ  r{  r  r  r‘  r‹  r[  )ræ   r	  r*   rF  rG  rH  r¹   Úemit_gc_clearr¯   r
  r   r“  r,   r,   r-   r  Í  s$   

ÿÿ
þ
r  Údealloc_func_nameÚclear_func_namec                 C  s€   |  d¡ |  |› d|  |j¡› d¡ |  d¡ |  d¡ |  d|› d¡ |  |› d¡ |  d	¡ |  d
¡ |  d¡ d S )Nzstatic voidr  r”  rZ  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$   r,   r,   r-   r  â  s   




r  r¾   c                 C  s  |  d|› d¡ | j ¡ D ]W}|jjs|jjrq|  d|j› d¡ |  dt› | |j	¡› d¡ t
|jƒr;dg}ndg}| d	¡ |jjtkrO| d
¡ n|jjtkrZ| d¡ |  d d |¡¡¡ q|  d¡sv|  d¡sv| dd¡ |  d¡ |  d¡ d S )Nzstatic PyMethodDef rí   ú{"ú",z (PyCFunction)r  ÚMETH_FASTCALLÚMETH_VARARGSÚ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Úvaluesrp  Úis_prop_setterÚis_prop_getterr¾   r   r)   r*   r   Úcapi_versionr  Úkindr   r   r  r  r  r  )r"   r¾   r$   r#   r3  r,   r,   r-   r  ñ  s,   


þ
r  r+  r-  c                 C  sf   |   |j¡› d|› }| d|› d|› d¡ | ¡ D ]\}}| d|› d|› d¡ q| d¡ |S )	NÚ_zstatic ú z = {rÿ   r   r  rî   )r  r*   ræ   r¹   )r"   r¾   r+  r-  r$   r4  r5  r,   r,   r-   r    s   
r  c              	   C  sè   | j s7| jD ]0}| d¡ | d t| ||jƒ|  |j¡¡¡ | d¡ | d t| ||jƒ|  |j¡¡¡ q| jD ]7}| d¡ | d t| ||jƒ|  |j¡¡¡ | j| d rq| d¡ | d t| ||jƒ|  |j¡¡¡ q:d S )Nró   z{}({} *self, void *closure);rŠ  z-{}({} *self, PyObject *value, void *closure);r·   )	rÍ   rH  ræ   r  r>  r*   r	  rA  Ú
properties)r"   r$   r¯   Úpropr,   r,   r-   r    s<   

ÿÿ
ÿÿ

ÿÿ
ÿÿ€ôr  c              
   C  sü   |  d|› d¡ | js3| jD ]#}|  d|› d¡ |  d t| ||jƒt| ||jƒ¡¡ |  d¡ q| jD ];}|  d|› d¡ |  dt| ||jƒ› d¡ | j| d	 }|rl|  d
t| ||jƒ› d¡ |  d¡ q6|  d¡ q6|  d¡ |  d¡ d S )Nzstatic PyGetSetDef rí   r˜  r™  z (getter){}, (setter){},z NULL, NULL},z	 (getter)r  r·   z	 (setter)zNULL, NULL},zNULL, NULL, NULL},r¡  rî   )ræ   rÍ   rH  r  r>  r*   rA  rª  )r"   r¾   r$   r¯   r«  Úsetterr,   r,   r-   r  =  s(   
ÿÿ

r  c           	      C  sÎ   | j s2t| j ¡ ƒD ]'\}\}}t| |||ƒ | d¡ t| |||ƒ |t| jƒd k r1| d¡ q
| j ¡ D ]-\}\}}|j	j
}| d¡ t| ||||ƒ |rd|j	jd j}| d¡ t| ||||ƒ q7d S )NrC  r·   )rÍ   Ú	enumeraterH  r¹   Úgenerate_getterræ   Úgenerate_setterr]  rª  r‡  Úret_typeÚgenerate_readonly_getterrˆ  r+  Úgenerate_property_setter)	r"   r$   Úir¯   rP  r«  Úgetterr¬  Úarg_typer,   r,   r-   r  W  s$   

€

€ùr  rP  r   c                 C  sö   |  |¡}| d¡ | d t| ||jƒ|  |j¡¡¡ | d¡ d|› }|  |¡o.|j }|sZ|j||ddd | d¡ | d	t	|ƒ› d
t	| j
ƒ› d¡ | d¡ | d¡ | d|› |¡ |jd|› d|dd | d¡ | d¡ d S )Nró   ú{}({} *self, void *closure)rZ  r{  z==T)Úunlikelyú%PyErr_SetString(PyExc_AttributeError,z    "attribute z of z undefined");r}  r[  Úretval©Údeclare_destzreturn retval;)r¯   ræ   r  r>  r*   r	  Úis_always_definedÚis_refcountedÚemit_undefined_attr_checkÚreprr¾   Úemit_inc_refÚemit_box)r"   r¯   rP  r$   Ú
attr_fieldÚ	attr_exprÚalways_definedr,   r,   r-   r®  i  s(   

ÿÿ


"


r®  c                 C  s²  |  |¡}| d¡ | d t| ||jƒ|  |j¡¡¡ | d¡ |  |¡}|sM| d¡ | d¡ | dt| jƒ› dt|ƒ› d¡ | d	¡ | d
¡ |  	|¡oU|j
 }|j
rwd|› }|sg| ||d¡ | d|› |¡ |sw| d
¡ |r~| d¡ |jrŽ|jdd|tdƒdd nt|tƒr™| d¡ n|jdd|dd | dd¡ | d|¡ | d|› d¡ |rÍ| d¡ | d|› d| |¡› d¡ | d¡ | d
¡ d S )NrŠ  ú,{}({} *self, PyObject *value, void *closure)rZ  zif (value == NULL) {r¸  z    "z object attribute z cannot be deleted");z
return -1;r[  r{  z!=zif (value != NULL) {r5  Ú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  rA  r*   r	  Úis_deletabler¿  r¾   r¼  r½  r¾  Úemit_dec_refÚ
is_unboxedÚ
emit_unboxr   r!   r   Ú	emit_castr  rÀ  r  )r"   r¯   rP  r$   rÂ  Ú	deletablerÄ  rÃ  r,   r,   r-   r¯  …  sP   

ÿÿ



ÿ







r¯  Úfunc_irc              	   C  sª   |  d¡ |  d t| ||jƒ|  |j¡¡¡ |  d¡ |jr?|  d | |¡t| |j¡¡¡ |j	dd|dd |  d	¡ n|  d
t› | |j¡› d¡ |  d¡ d S )Nró   r¶  rZ  z#{}retval = {}{}((PyObject *) self);r¹  ÚretboxTrº  zreturn retbox;r  z((PyObject *) self);r[  )
ræ   r  r>  r*   r	  rÌ  rI  r   r)   rÁ  )r"   r¯   rP  rÐ  r$   r,   r,   r-   r±  ¹  s&   
ÿÿ
ÿÿÿr±  rµ  c                 C  s¨   |  d¡ |  d t| ||jƒ|  |j¡¡¡ |  d¡ |jr:|jdd|tdƒdd |  t› | 	|j¡› d	¡ n|  t› | 	|j¡› d
¡ |  d¡ |  d¡ d S )NrŠ  rÅ  rZ  r5  rÆ  rÇ  TrÈ  z((PyObject *) self, tmp);z((PyObject *) self, value);r‹  r[  )
ræ   r  rA  r*   r	  rÌ  rÍ  r   r   r)   )r"   r¯   rµ  rÐ  r$   r,   r,   r-   r²  Ò  s"   
ÿÿ
ÿÿ
r²  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   r7  r&   r*   r    r%   r&   )r"   r   r$   r   r%   rÅ   )rO  r   r'  r&   r"  r&   r$   r   rõ   rQ  r%   r&   )
rW  r&   r$   r   rR  r   r"   r   r%   rÅ   )rj  r   r"  r&   r$   r   rc  rk  rõ   rQ  r%   rÅ   )r"   r   rs  r&   r(  rt  r"  r&   r2  ru  r$   r   r%   rÅ   )r"   r   r#   r   r)  rt  r  r&   r"  r&   r$   r   r%   rÅ   )r"   r   r)  r   r$   r   r%   r&   )r"   r   rs  r&   r"  r&   r  r&   r)  rt  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"   r   r¾   r&   r+  r&   r-  rµ   r$   r   r%   ru  )
r"   r   r¯   r&   rP  r   r$   r   r%   rÅ   )r"   r   r¯   r&   rP  r   rÐ  r   r$   r   r%   rÅ   )r"   r   r¯   r&   rµ  r   rÐ  r   r$   r   r%   rÅ   )UÚ__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   Úmypyc.commonr   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.   r0   r&   ÚSlotGeneratorrJ   rK   Ú__annotations__rS   rV   r   r¤   r  r»   r;   r³   rÂ   rÒ   r6  r>  rA  rÌ   r  ra  r`  r  r  r3   r  r  r  r  r  r  r  r  r  r  r®  r¯  r±  r²  r,   r,   r,   r-   Ú<module>   s&   ,



øüÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#×-ýü	

	



 
-



V

#
1
*

%






#



4