Ë
    pPêjèô  ã                  óæ  — U d Z ddlmZ ddlmZmZ ddlmZmZ ddl	m
Z
 ddlmZ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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(m)Z) dd
l*m+Z+m,Z, ddl-m.Z.m/Z/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; d§d„Z<d§d„Z=ee+e1ege>f   Z?ee>e@e>e?f   f   ZAdd„ fdd„ fde<fde<fde<fde<fdefdefde=fde=fdœ
ZBdeCd<   d efd!efd!efd"efd#œZDdeCd$<   d%d&efiZEdeCd'<   i d(d)ef“d*d+ef“d,d-ef“d.d/ef“d0d1ef“d2d3ef“d4d5ef“d6d7ef“d8d7e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“i dEdFef“dGdFef“dHdIef“dJdIef“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_efd`efdaefdbefdcefddefdeefdfefdgefdhefdiefdjefdjefdkefdlœ¥ZFdeCdm<   dndoe<fdpdqe<fdrdse<fe"dtefiZGdeCdu<   dvdweDfdxdyeEfdzd{eFfd|d}eGfgZHd~hZId§d„ZJd¨d€„ZKd©d�„ZL	 	 	 	 	 	 	 	 	 	 dªd‚„ZM	 	 	 	 	 	 	 	 	 	 dªdƒ„ZNd«d„„ZOd¬d…„ZPd¬d†„ZQd­d‡„ZR	 	 	 	 	 	 	 	 	 	 	 	 d®dˆ„ZS	 	 	 	 	 	 	 	 	 	 d¯d‰„ZT	 	 	 	 	 	 	 	 	 	 	 	 d°dŠ„ZU	 	 	 	 	 	 	 	 	 	 	 	 d±d‹„ZVd­dŒ„ZWd²d�„ZX	 	 	 	 	 	 	 	 	 	 	 	 	 	 d³dŽ„ZY	 	 	 	 	 	 	 	 	 	 	 	 	 	 d´d�„ZZdµd�„Z[	 	 	 	 	 	 	 	 	 	 	 	 	 	 d¶d‘„Z\d·d’„Z]d·d“„Z^	 	 d¸	 	 	 	 	 	 	 	 	 	 	 d¹d•„Z_	 dº	 	 	 	 	 	 	 	 	 d»d–„Z`d¼d—„Za	 	 	 	 	 	 	 	 	 	 	 	 d½d˜„Zbd­d™„Zc	 	 	 	 	 	 	 	 d¾dš„Zd	 	 	 	 	 	 	 	 	 	 d¿d›„Ze	 	 	 	 	 	 	 	 	 	 	 	 dÀdœ„Zfd­d�„ZgdÁdž„Zhd­dŸ„ZidÂd „ZjdÂd¡„Zk	 	 	 	 	 	 	 	 	 	 	 	 dÃd¢„Zl	 	 	 	 	 	 	 	 	 	 	 	 dÄd£„ZmdÅd¤„ZndÆd¥„Zo	 	 	 	 	 	 	 	 	 	 dÇd¦„Zpy”)Èz8Code generation for native classes and related wrappers.é    )Úannotations)ÚCallableÚMapping)ÚARG_STARÚ	ARG_STAR2)Úc_string_initializer)ÚEmitterÚHeaderDeclarationÚReturnHandlerÚnative_function_doc_initializer)Únative_function_header)Úgenerate_am_send_wrapperÚ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ÚCPYFUNCTION_NAMEÚGENERATOR_HELPER_NAMEÚIS_FREE_THREADEDÚMYPYC_DEFAULTS_SETUPÚNATIVE_PREFIXÚPREFIXÚ
REG_PREFIXÚRUNNING_FIELDÚshort_id_from_name)ÚClassIRÚVTableEntries)ÚFUNC_CLASSMETHODÚFUNC_STATICMETHODÚFuncDeclÚFuncIRÚget_text_signature)ÚRTupleÚRTypeÚis_simple_refcounted_pointerÚobject_rprimitive)ÚNameGenerator)Úis_same_typec                óH   — t         › |j                  |j                  «      › �S ©N)r   ÚcnameÚnames©ÚclÚfnÚemitters      ú\/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypyc/codegen/emitclass.pyÚnative_slotr:   7   s   € Üˆ_˜RŸX™X g§m¡mÓ4Ð5Ð6Ð6ó    c                óŒ   — | j                  |j                  dz   «      }|sJ ‚t        › |j                  |j                  «      › �S )NÚ	__wrapper)Ú
get_methodÚnamer   r3   r4   )r6   r7   r8   Ú
wrapper_fns       r9   Údunder_attr_slotrA   ;   s@   € Ø—‘˜rŸw™w¨Ñ4Ó5€JÙÐˆ:Üˆ_˜Z×-Ñ-¨g¯m©mÓ<Ð=Ð>Ð>r;   Útp_initc                ó   — t        | ||«      S r2   )Úgenerate_init_for_class©ÚcÚtÚes      r9   ú<lambda>rI   I   s   € Ô,CÀAÀqÈ!Ó,L€ r;   Útp_callc                ó   — t        | ||«      S r2   )Úgenerate_call_wrapperrE   s      r9   rI   rI   J   s   € Ô,AÀ!ÀQÈÓ,J€ r;   Útp_strÚtp_reprÚtp_iternextÚtp_iterÚtp_hashÚtp_descr_getÚtp_getattroÚtp_setattro)
Ú__init__Ú__call__Ú__str__Ú__repr__Ú__next__Ú__iter__Ú__hash__Ú__get__Ú__getattr__Ú__setattr__Ú	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Ú	__await__Úam_awaitÚ	__aiter__Úam_aiterÚ	__anext__Úam_anextÚam_sendÚAS_ASYNC_SLOT_DEFSÚ
as_mappingÚPyMappingMethodsÚas_sequenceÚPySequenceMethodsÚ	as_numberÚPyNumberMethodsÚas_asyncÚPyAsyncMethodsr[   c                 ó   — y)NÚPyVectorcall_Call© r5   s      r9   rL   rL   «   s   € Ør;   c                óF   — | j                  d«      r| dk7  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’   rf   Úx)Ú
startswith)Úattrs    r9   Úslot_keyr×   ¯   s-   € ð
 	�‰˜Ô 4¨<Ò#7¸DÀMÒ<QØ�T‰zÐØ€Kr;   c                óî   — i }i }t        |j                  «       d„ ¬«      D ]Q  \  }\  }}| j                  |«      }|sŒ|d   | k(  s	|t        v sŒ.||v r	||   ||<   Œ; || |d   |«      }|||<   |||<   ŒS |S )Nc                ó   — t        | d   «      S )Nr   )r×   )rÔ   s    r9   rI   z generate_slots.<locals>.<lambda>½   s   € ÄxÐPQÐRSÑPTÃ~€ r;   )Úkeyé   r   )ÚsortedÚitemsÚget_method_and_classÚALWAYS_FILL)	r6   Útabler8   ÚfieldsÚ	generatedr?   ÚslotÚ	generatorÚ
method_clss	            r9   Úgenerate_slotsræ   ¹   sš   € Ø€FØ "€Iä#)¨%¯+©+«-Ñ=UÔ#Vò 
'ÑˆÑˆt�YØ×,Ñ,¨TÓ2ˆ
Ú˜: a™=¨BÒ.°$¼+Ò2EØ�yÑ à(¨™��t’ñ !  Z°¡]°GÓ<�Ø#��t‘Ø"&�	˜$’ð
'ð €Mr;   c                óœ  — |j                   }|j                  | «      }t        d|j                  | «      › d�d¬«      |j                  |<   | j                  sy t        | |«       | j                   xr | j                   }|rKt        t        | j                  |«      › d�d¬«      |j                  |j                  | j                  «      <   y y )NzPyTypeObject *ú;T)Úneeds_export)ÚcontextÚtype_struct_namer
   ÚdeclarationsÚis_ext_classÚgenerate_object_structÚis_traitÚbuiltin_baser   ÚctorÚnative_function_name)r6   Ú	c_emitterÚexternal_emitterr8   rê   r?   Úgenerate_fulls          r9   Úgenerate_class_type_declrö   Ì   sÁ   € ð ×Ñ€GØ×#Ñ# BÓ'€DÜ!2Ø
˜×1Ñ1°"Ó5Ð6°aÐ8Àtô"€G×Ñ˜Ñð
 �?Š?Øä˜2Ð/Ô0ØŸ™�OÒ;¨B¯O©OÐ(;€MÙÜFWÜ% b§g¡g¨wÓ7Ð8¸Ð:ÈôG
ˆ×Ñ˜W×9Ñ9¸"¿'¹'ÓBÒCð r;   c                óè   — | j                   sJ ‚|j                  }| j                  |j                  «      dz   }| j	                  |j                  «      }t        d|› d|› d�«      |j                  |<   y)zæGenerate a definition of a single-object per-class free "list".

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

    TODO: Generalize to support a free list with up to N objects.
    Ú_free_instancezCPyThreadLocal z *rè   N)Úreuse_freed_instancerê   Úname_prefixr4   Ústruct_namer
   rì   )r6   ró   rô   r8   rê   r?   rû   s          r9   Úgenerate_class_reuserü   á   sr   € ð ×"Ò"Ð"Ð"Ø×Ñ€GØ�>‰>˜)Ÿ/™/Ó*Ð-=Ñ=€DØ—.‘. §¡Ó1€Kô
 "3°_À[ÀMÐQSÐTXÐSYÐYZÐ3[Ó!\€G×Ñ˜Òr;   c                ó¬  ‡— | j                   }| j                  ‰j                  «      }‰j                  | j                  «      }|› d�}|› d�}|› d�}|› d�}	|› d�}
|› d�}‰j                  | j
                  «      }|› d�}‰j                  | j                  «      }|› d�}|› d�}|› d	�}|› d
�}|› d�}dd|› d�i}| j                   xr | j                   }| j                  }| j                  s||d<   t        | ‰«      }| j                  duxr" | j                  xr | xr ‰j                  dk  }|xs |xs |}|r&d|› d�|d<   | j                  sd|› d�|d<   d|› �|d<   t        d„ | j                  D «       d«      }|rd|› �|d<   |r|	|d<   ||d<   dQˆfd„} |«        | j!                  t"        «      }| j!                  d«      }|j%                  t'        | t(        ‰«      «       t*        D ]0  \  }}} t'        | | ‰«      }!|!sŒt-        | |||!‰«      }"d|"› �|d|› �<   Œ2 t/        | ‰«      }#|#r|#|d<   | j1                  ‰j                  «      }$| j                  rd | j                  › d!�}%n| j                  rd"}%nd |$› d!�}%| j                  rYt        | ‰«      sM|%› d#�}&‰j3                  d$|› d%�d&|%› d'�d(|&› d'�d)d*«       ||d+<   |%› d,�|d-<   ‰j                  dk  r|%|d.<   |&|d/<   n|%|d-<   |rì| j                  st5        | |‰«        |«        d}'| j                  rt7        | |‰«        |«        |}'t9        | | j
                  ‰|'¬0«        |«        | j                  r"t7        | |‰| j:                  ¬1«        |«        |}'t9        | | j                  ‰|'| j:                  ¬2«        |«        | j                  r|n|}(t=        | ||(t?        |«      ‰«        |«        |ró| j                  €J ‚‰jA                  tC        | j                  ‰«      d3z   «       | jD                  €J ‚‰jA                  tC        | jD                  ‰«      d3z   «        |«        | j!                  d«      }tG        | ||
||‰«        |«        | jH                  rtK        | |d4z   |
d4z   ‰d5¬6«      }) |«        nd})tK        | ||
‰d7¬6«      }
 |«        tM        | ||‰«        |«        |rtO        ||‰«        |«        |r'tQ        | ‰«        |«        tS        | |	‰«        |«        | j                  rtU        | |‰«       tW        | ||r|nd‰«        |«        g d8¢}*|r| j                  s|*jY                  d9«       | j[                  d:«      rTd;j]                  | j1                  ‰j                  «      «      |d<<   |*jY                  d=«       |j_                  d>«      sd?|d@<   |r|*jY                  dA«       dBja                  |*«      |dC<   dDtc        | «      › d!�|dE<   ‰jA                  dF‰je                  | «      › dG�«       ‰jA                  dH«       |jg                  «       D ]  \  }+},‰jA                  dI|+› dJ|,› dK�«       Œ ‰jA                  d*«       ‰jA                  dLj]                  ‰je                  | «      ¬M«      «       | jh                  r4‰jk                  | j                   dNz   |«      }-‰jA                  dO|-› dP�«       ‰jA                  «        |rItm        | ||
)‰«       ‰jA                  «        to        | | jD                  |||
‰«       ‰jA                  «        |rtq        | ‰«       yy)RzRGenerate C code for a class.

    This is the main entry point to the module.
    Ú_newÚ	_finalizeÚ_membersÚ
_getsetersÚ_vtableÚ	_traverseÚ_subtypeÚ_deallocÚ_methodsÚ_trait_vtable_setupÚ_coroutine_setupÚtp_nameú"Útp_newN©é   é   z(destructor)Ú
tp_deallocz(traverseproc)Útp_traversez	(inquiry)Útp_clearc              3  óT   K  — | ]   }|j                   d k(  sŒ|j                  –— Œ" y­w)Ú__del__N)r?   Úmethod)Ú.0rH   s     r9   ú	<genexpr>z!generate_class.<locals>.<genexpr>&  s   è ø€ ÒR A¸a¿f¹fÈ	Ó>Q�q—x•xÑRùs   ‚(—(Útp_finalizeÚ	tp_getsetÚ
tp_methodsc                 ó&   •— ‰ j                  «        y r2   ©Ú	emit_line©r8   s   €r9   r  z!generate_class.<locals>.emit_line-  s   ø€ Ø×ÑÕr;   rU   ú&Útp_Útp_richcompareú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)Úsubtype_clear_name)Ú
skip_attrs)r)  r*  rè   Ú_shadowT)ÚshadowF)ÚPy_TPFLAGS_DEFAULTÚPy_TPFLAGS_HEAPTYPEÚPy_TPFLAGS_BASETYPEÚPy_TPFLAGS_HAVE_GCrV   zoffsetof({}, vectorcall)Útp_vectorcall_offsetÚ_Py_TPFLAGS_HAVE_VECTORCALLÚtp_vectorcallrÐ   rJ   ÚPy_TPFLAGS_MANAGED_DICTú | Útp_flagsz
PyDoc_STR(Útp_doczstatic PyTypeObject z_template_ = {zPyVarObject_HEAD_INIT(NULL, 0)ú.ú = ú,z3static PyTypeObject *{t}_template = &{t}_template_;)rG   Ú_cpyfunctionústatic PyObject *z = NULL;©ÚreturnÚNone)9r?   rú   r4   rò   ÚsetupÚclearÚclear_on_completionrï   rð   Úneeds_getseters_tableÚhas_managed_dictÚhas_dictÚcapi_versionÚ
is_acyclicÚnextÚvtable_entriesr>   r   Úupdateræ   r`   ÚSIDE_TABLESÚgenerate_side_table_for_classr   rû   Ú
emit_linesÚgenerate_traverse_for_classÚ generate_subtype_clear_for_classÚgenerate_clear_for_classÚ!attrs_to_keep_alive_on_completionÚgenerate_dealloc_for_classÚboolr  r   rñ   Úgenerate_new_for_classÚallow_interpreted_subclassesÚgenerate_vtablesÚgenerate_coroutine_setupÚgenerate_finalize_for_classÚgenerate_getseter_declarationsÚgenerate_getseters_tableÚgenerate_new_for_traitÚgenerate_methods_tableÚappendÚ
has_methodÚformatÚgetÚjoinÚnative_class_doc_initializerrë   rÝ   Úcoroutine_nameÚstatic_nameÚgenerate_setup_for_classÚgenerate_constructor_for_classÚgenerate_getseters).r6   Úmoduler8   r?   rú   Ú
setup_nameÚnew_nameÚfinalize_nameÚmembers_nameÚgetseters_nameÚvtable_nameÚtraverse_nameÚ
clear_nameÚclear_subtype_nameÚclear_on_completion_nameÚ clear_on_completion_subtype_nameÚdealloc_nameÚmethods_nameÚvtable_setup_nameÚcoroutine_setup_namerá   rõ   Úneeds_getsetersÚmanaged_dictÚneeds_builtin_dict_cleanupÚgenerate_dealloc_slotsÚ
del_methodr  Údefaults_fnÚinit_fnÚ
table_nameÚtypeÚ	slot_defsÚslotsÚtable_struct_nameÚrichcompare_namerû   Ú	base_sizeÚweak_offsetr)  Údealloc_clear_nameÚshadow_vtable_nameÚflagsÚfieldÚvalueÚcpyfunctions.     `                                           r9   Úgenerate_classr�  ö   sí  ø€ ð
 �7‰7€DØ—.‘. §¡Ó/€Kà×-Ñ-¨b¯h©hÓ7€JØ�˜dÐ#€HØ"�m 9Ð-€MØ!�] (Ð+€LØ#�} JÐ/€NØ �M Ð)€KØ"�m 9Ð-€MØ×-Ñ-¨b¯h©hÓ7€JØ&˜< xÐ0ÐØ&×;Ñ;¸B×<RÑ<RÓSÐØ*BÐ)CÀ8Ð'LÐ$Ø!�] (Ð+€LØ!�] (Ð+€LØ&˜-Ð':Ð;ÐØ)˜]Ð*:Ð;Ðà'¨1¨T¨F°!¨Ð5€FàŸ™�OÒ;¨B¯O©OÐ(;€MØ×.Ñ.€Oà�?Š?Ø#ˆˆxÑä# B¨Ó0€Lð 	�‰˜tÐ#ò 	+Ø�K‰Kò	+àÐò	+ð × Ñ  7Ñ*ð	 ð +ÒX¨lÒXÐ>XÐÙØ!-¨k¨]¸(ÐCˆˆ|ÑØ�}Š}Ø&4°[°MÀÐ$KˆF�=Ñ!Ø#,¨Z¨LÐ!9ˆF�:ÑäÑR¨×):Ñ):ÔRÐTXÓY€JÙØ".¨}¨oÐ >ˆˆ}ÑÙØ,ˆˆ{ÑØ'€Fˆ<Ñõñ „Kð —-‘-Ô 4Ó5€Kð �m‰m˜JÓ'€Gð ‡M�M”. ¤Y°Ó8Ô9ô (3ò AÑ#ˆ
�D˜)Ü˜r 9¨gÓ6ˆÚÜ =¸bÀ*ÈdÐTYÐ[bÓ cÐØ+,Ð->Ð,?Ð)@ˆF�S˜˜Ð%Ò&ð	Aô 4°B¸Ó@ÐÙØ#3ˆÐÑ ð —.‘. §¡Ó/€KØ	‡‚Ø˜bŸo™oÐ.¨aÐ0‰	Ø	�ŠØ&‰	à˜k˜]¨!Ð,ˆ	ð 
‡{‚{Ô+¨B°Ô8ð #˜Ð#8Ð9ˆØ×ÑØ˜<˜.¨Ð0Ø)¨)¨°LÐAØ,¨[¨M¸ÐFØØô	
ð  ,ˆˆ|ÑØ$- ;Ð.EÐ!Fˆˆ~ÑØ×Ñ 'Ò)Ø&/ˆF�?Ñ#Ø*5ˆFÐ&Ò'à!*ˆˆ~ÑáØ�}Š}Ü'¨¨M¸7ÔCÙŒKØ!ÐØ�?Š?ô -¨RÐ1CÀWÔMÙŒKØ!3ÐÜ   R§X¡X¨wÐK]Õ^ÙŒØ�?Š?Ü,ØØ0ØØ×?Ñ?õ	ñ ŒKØ!AÐÜ ØØ×"Ñ"ØØ1Ø×;Ñ;õ	
ñ 	ŒØ35·?²?Ñ/È
ÐÜ" 2 |Ð5GÌÈjÓIYÐ[bÔcÙŒÙØ�x‰xÐ#Ð#Ð#Ø×ÑÔ0°·±¸7ÓCÀcÑIÔJØ�w‰wÐ"Ð"Ð"Ø×ÑÔ0°·±¸'ÓBÀSÑHÔIáŒØ—-‘- 
Ó+ˆÜ˜r 8¨[¸*ÀgÈwÔWÙŒà×*Ò*Ü-=ØÐ%¨	Ñ1°;ÀÑ3JÈGÐ\`ô.Ðñ �Kà!%ÐÜ& rÐ+<¸kÈ7Ð[`ÔaˆÙŒÜ  Ð%9¸6À7ÔKÙŒÙÜ# J°¸wÔGÙŒÙÜ& r¨7Ô3ÙŒÜ   ^°WÔ=ÙŒà	‡{‚{Ü˜r 8¨WÔ5ä˜2˜|¹=©ZÈdÐT[Ô\Ù„KâP€EÙ b§m¢mà�‰Ð)Ô*Ø	‡}�}�ZÔ Ø)C×)JÑ)JØ�N‰N˜7Ÿ=™=Ó)ó*
ˆÐ%Ñ&ð 	�‰Ð2Ô3Ø�z‰z˜/Ô*ð !4ˆF�9ÑÙØ�‰Ð.Ô/ØŸ™ EÓ*€Fˆ:Ñà#Ô$@ÀÓ$DÐ#EÀQÐG€Fˆ8Ñà×ÑÐ,¨W×-EÑ-EÀbÓ-IÐ,JÈ/ÐZÔ[Ø×ÑÐ6Ô7ØŸ™›ò 2‰ˆˆuØ×Ñ˜A˜e˜W C¨ w¨aÐ0Õ1ð2à×Ñ�dÔØ×ÑØ=×DÑDØ×&Ñ& rÓ*ð 	Eó 	
ôð 
×ÒØ×)Ñ)¨"¯'©'°NÑ*BÀFÓKˆØ×ÑÐ-¨k¨]¸(ÐCÔDà×ÑÔÙÜ   [°+Ð?QÐSZÔ[Ø×ÑÔÜ& r¨2¯7©7°G¸ZÈÐV]Ô^Ø×ÑÔÙÜ˜2˜wÕ'ð r;   c                óX   — |j                  | j                  | j                  › d|› �«      S )NÚ_get_©Úprivate_nameÚmodule_namer?   ©r6   Ú	attributer4   s      r9   Úgetter_namer•  ß  ó(   € Ø×Ñ˜bŸn™n°·±°	¸¸y¸kÐ.JÓKÐKr;   c                óX   — |j                  | j                  | j                  › d|› �«      S )NÚ_set_r�  r“  s      r9   Úsetter_namer™  ã  r–  r;   c                óÈ  ‡ — t        «       }g }|g d¢z  }‰ j                  d«      r|j                  d«       t        ˆ fd„‰ j                  D «       «      sJ ‰ j
                  › d�«       ‚‰ j                  r|j                  dt        › d�«       g }t        ‰ j                  «      D �]>  }|j                  rŒ|j                  r”|j                  t        |j                  «      dz
  «      |vrkt        d	t        |j                  «      t        «      D ]D  }|j                  |«      }||vsŒ|j                  t        › d
|› d�«       |j                  |«       ŒF |j                   j#                  «       D ]q  \  }}||vsŒ|j                  |j%                  |«      › |j'                  |«      › d�«       |j)                  |«       t+        |t,        «      sŒa|j/                  |«       Œs �ŒA |j                  d‰ j1                  |j2                  «      › d�«       |j                  d«       t5        |d¬«      |j6                  j8                  ‰ j1                  |j2                  «      <   y )N)ztypedef struct {ÚPyObject_HEADzCPyVTableItem *vtable;rV   zvectorcallfunc vectorcall;c              3  óP   •K  — | ]  }|j                   ‰j                   k(  –— Œ y ­wr2   )Úhas_running_flag)r  Úbaser6   s     €r9   r  z)generate_object_struct.<locals>.<genexpr>î  s'   øè ø€ ò Ø9=ˆ×Ñ ×!4Ñ!4Õ4ñùs   ƒ#&z3 disagrees with a base class about the running flagz	uint32_t rè   rÛ   r   ú z} Ú T)Úis_type)Úsetr^  r]  ÚallÚbase_mror?   r�  r"   Úreversedrï   Úbitmap_attrsÚbitmap_fieldÚlenÚranger   r   Ú
attributesrÝ   Úctype_spacedrÖ   ÚaddÚ
isinstancer+   Údeclare_tuple_structrû   r4   r
   rê   rì   )	r6   r8   Ú
seen_attrsÚlinesr¦  rž  ÚirÖ   Úrtypes	   `        r9   rî   rî   ç  s  ø€ Ü›5€JØ€EØ	ÒLÑL€EØ	‡}�}�ZÔ Ø�‰Ð1Ô2äó ØACÇÁôô ð Gà
�'‰'ˆÐEÐFóGð ð 
×Òà�‰�y¤ ¨qÐ1Ô2Ø€LÜ˜Ÿ™Ó%ó <ˆØ�}‹}Ø× Ò à×'Ñ'¬¨D×,=Ñ,=Ó(>ÀÑ(BÓCÈ<ÑWÜ" 1¤c¨$×*;Ñ*;Ó&<¼kÓJò 6˜Ø&×3Ñ3°AÓ6˜Ø |Ò3Ø!ŸL™L¬K¨=¸¸$¸¸qÐ)AÔBØ(×/Ñ/°Õ5ð	6ð
  $Ÿ™×4Ñ4Ó6ò <‘��eð ˜zÒ)Ø—L‘L G×$8Ñ$8¸Ó$?Ð#@ÀÇÁÈdÓASÐ@TÐTUÐ!VÔWØ—N‘N 4Ô(ä! %¬Õ0Ø×4Ñ4°UÕ;ò<ð<ð( 
‡L�L�3�r—~‘~ g§m¡mÓ4Ð5°QÐ7Ô8Ø	‡L�L�ÔÜBSØ�tôC€G‡O�O× Ñ  §¡°·±Ó!>Ò?r;   c                ó8  ‡ ‡‡— dˆ ˆˆfd„}dˆ ˆfd„}‰j                  dj                  |t        dt        ‰ j                  «      dt        ‰ j
                  «      z  z   «      «      «       ‰ j
                  j                  «       D ]z  \  }}‰j                  d ||«      › dt        dt        |«      «      › d�«       ‰j                  d	j                   ||«      t        dt        |j                  «      «      «      «       Œ| ‰j                  d
«       ‰j                  t        › |› d�«       ‰j                  d«       ‰ j                  r‰s‰j                  t        › |› d�«       g }	‰ j
                  j                  «       D ]F  \  }} ||«      }
 ||«      }t        ||
‰g ‰«       t        |‰|‰ «       |	j                  ||
|f«       ŒH t        ‰ j                  |‰|	‰«       ‰j                  d«       ‰j                  d«       |	s|S |› 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.
    c                óž   •— dj                  ‰j                  ‰j                  «      | j                  ‰j                  «      ‰rd«      S d«      S )Nz{}_{}_trait_vtable{}r+  r   ©r_  rú   r4   )Útraitrž  r8   r,  s    €€€r9   Útrait_vtable_namez+generate_vtables.<locals>.trait_vtable_name/  sN   ø€ Ø%×,Ñ,Ø×Ñ˜WŸ]™]Ó+Ø×Ñ˜gŸm™mÓ,ÙˆIó
ð 	
ð &(ó
ð 	
r;   c                óŒ   •— dj                  ‰j                  ‰j                  «      | j                  ‰j                  «      «      S )Nz{}_{}_offset_tablerµ  )r¶  rž  r8   s    €€r9   Útrait_offset_table_namez1generate_vtables.<locals>.trait_offset_table_name6  s9   ø€ Ø#×*Ñ*Ø×Ñ˜WŸ]™]Ó+¨U×->Ñ->¸w¿}¹}Ó-Mó
ð 	
r;   zstatic CPyVTableItem {}[{}];rÛ   r  zstatic CPyVTableItem ú[z];zstatic size_t {}[{}];ústatic boolz(void)ú{z
_shadow();ú	return 1;ú}z + )r¶  r$   r>  Ústr)r  r_  Úmaxr¨  rI  Útrait_vtablesrÝ   rª  r   rU  Úgenerate_vtableÚgenerate_offset_tabler]  )rž  rv  rn  r8   r,  r·  r¹  r¶  ÚvtableÚ	subtablesr?   Úoffset_names   `  ``       r9   rV  rV    s  ú€ ÷>
ö
ð ×ÑØ&×-Ñ-Øœ˜Q¤ D×$7Ñ$7Ó 8¸1¼sÀ4×CUÑCUÓ?VÑ;VÑ VÓWó	
ôð ×+Ñ+×1Ñ1Ó3ò 

‰ˆˆvà×ÑØ#Ñ$5°eÓ$<Ð#=¸Q¼sÀ1ÄcÈ&ÃkÓ?RÐ>SÐSUÐVô	
ð 	×ÑØ#×*Ñ*Ù'¨Ó.´°A´s¸5×;KÑ;KÓ7LÓ0Móõ	
ð

ð ×Ñ�mÔ$Ø×Ñœ˜Ð(9Ð':¸&ÐAÔBØ×Ñ�cÔà×(Ò(±Ø×Ñœ]˜OÐ,=Ð+>¸jÐIÔJà€IØ×+Ñ+×1Ñ1Ó3ò 5‰ˆˆvÙ  Ó'ˆÙ-¨eÓ4ˆÜ˜  g¨r°6Ô:Ü˜k¨7°E¸4Ô@Ø×Ñ˜%  {Ð3Õ4ð5ô �D×'Ñ'¨°g¸yÈ&ÔQà×Ñ�kÔ"Ø×Ñ�cÔá'ˆ;ÐT°¨}¸CÄÀIÃÐQRÑ@RÐ?SÐ-TÐTr;   c           	     ón  — |j                  d| › d�«       |j                  D ]B  }|j                  d|j                  |j                  «      › d|j	                  |«      › d�«       ŒD |j                  s|j                  d«       |j                  d«       |j                  dj                  | ¬	«      «       y
)z0Generate attribute offset row of a trait vtable.zsize_t ú_scratch[] = {z	offsetof(ú, z),Ú0r$  ú/memcpy({name}, {name}_scratch, sizeof({name}));©r?   N)r  rª  rû   r4   rÖ   r_  )r¹  r8   r¶  r6   rÖ   s        r9   rÃ  rÃ  f  s°   € ð ×Ñ˜Ð 7Ð8¸ÐHÔIØ× Ñ ò _ˆØ×Ñ˜I b§n¡n°W·]±]Ó&CÐ%DÀBÀwÇ|Á|ÐTXÓGYÐFZÐZ\Ð]Õ^ð_à×Òà×Ñ˜#ÔØ×Ñ�dÔØ×ÑØ9×@Ñ@ÐF]Ð@Ó^õr;   c           
     ó‚  — |j                  d|› d�«       |r^|j                  d«       |D ]7  \  }}}|j                  dj                  |j                  |«      ||«      «       Œ9 |j                  d«       | D ]€  }|r|j                  r|j                  n|j                  }	|j                  dj                  |j                  |	j                  «      t        |	j                  |j                  «      «      «       Œ‚ | s|j                  d«       |j                  d«       |j                  d	j                  |¬
«      «       y )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   r3   r4   )
Úentriesrn  r8   rÅ  r,  r¶  rà   Úoffset_tableÚentryr  s
             r9   rÂ  rÂ  v  s-  € ð ×Ñ˜ { m°?ÐCÔDÙØ×ÑÐ8Ô9Ø*3ò 	Ñ&ˆE�5˜,Ø×ÑØJ×QÑQØ×,Ñ,¨UÓ3°U¸Lóõð	ð 	×ÑÐ6Ô7àò 
ˆÙ(.°5×3FÒ3F�×$Ò$ÈEÏLÉLˆØ×ÑØ$×+Ñ+Ø×(Ñ(¨¯©Ó5´}ÀfÇlÁlÐSZ×S`ÑS`ÓFaóõ	
ð
ñ Ø×Ñ˜&Ô!Ø×Ñ�dÔØ×ÑÐG×NÑNÐT_ÐNÓ`Õar;   c                ó¬  — |j                  t        | j                  |«      «       |j                  d«       t        | j                  j                  j
                  d   j                  z   }|j                  d|› d�«       | j                  |j                  «      }|j                  |› d�«       | j                  |j                  «      }| j                  r�|j                  d|› d�«       |j                  d|› d	�«       |j                  |› d
�«       |j                  d«       | j                  s|j                  d«       |�t        |d|«       |j                  d«       |j                  d«       |j                  d| j                  |j                  «      › d�«       |j                  d«       |j                  d«       |rq|j                  d|j                  | «      › d�«       |j                  d|› d�«       |j                  d«       |j                  d|› d�«       |j                  d«       n|j                  d|› d�«       t        | |«       | j                  d«      rE| j!                  d«      j#                  |j                  «      }|j                  dt$        › |› d�«       t'        | j(                  «      D ]_  }	|	j*                  j-                  «       D ]@  \  }
}|j/                  |«      }|dk7  sŒ|j1                  d|j3                  |
«      › �|«       ŒB Œa |�t        |d|«       |j                  d«       |j                  d«       y)zAGenerate a native function that allocates an instance of a class.r¼  r   z$PyTypeObject *type = (PyTypeObject*)rè   z *self;úif (z_free_instance != NULL) {zself = z_free_instance;z_free_instance = NULL;zPy_SET_REFCNT(self, 1);zPyObject_GC_Track(self);NÚselfzreturn (PyObject *)self;r¾  zself = (z *)type->tp_alloc(type, 0);úif (self == NULL)ú    return NULL;úif (type != ú) {zself->vtable = ú} else {rV   zself->vectorcall = rÎ  úself->)r  r   r@  r!   ÚsigÚargsr?   rû   r4   rú   rù   rG  Úemit_attr_defaults_func_callrë   Úemit_clear_bitmapsr^  Úmethod_declr3   r    r¥  r¤  rª  rÝ   Úc_undefined_valueÚset_undefined_valuerÖ   )r6   r}  rn  rˆ  r8   Útype_arg_namerû   Úprefixr?   rž  rÖ   r²  r‹  s                r9   re  re  —  s  € ð ×ÑÔ,¨R¯X©X°wÓ?Ô@Ø×Ñ�cÔÜ §¡§¡×!2Ñ!2°1Ñ!5×!:Ñ!:Ñ:€MØ×ÑÐ<¸]¸OÈ1ÐMÔNØ—.‘. §¡Ó/€KØ×Ñ˜˜ WÐ-Ô.à�^‰^˜GŸM™MÓ*€FØ	×Òà×Ñ˜D  Ð(BÐCÔDØ×Ñ˜G F 8¨?Ð;Ô<Ø×Ñ˜V˜HÐ$:Ð;Ô<Ø×ÑÐ3Ô4Ø�}Š}Ø×ÑÐ8Ô9ØÐ"Ü(¨°f¸gÔFØ×ÑÐ4Ô5Ø×Ñ˜#Ôà×Ñ˜ §¡°·±Ó!>Ð ?Ð?ZÐ[Ô\Ø×ÑÐ)Ô*Ø×ÑÐ(Ô)áØ×Ñ˜L¨×)AÑ)AÀ"Ó)EÐ(FÀdÐKÔLØ×Ñ˜OÐ,>Ð+?¸qÐAÔBØ×Ñ˜*Ô%Ø×Ñ˜O¨K¨=¸Ð:Ô;Ø×Ñ˜#Õà×Ñ˜O¨K¨=¸Ð:Ô;ä�r˜7Ô#à	‡}�}�ZÔ Ø�~‰~˜jÓ)×/Ñ/°·±Ó>ˆØ×ÑÐ/´¨x¸°v¸QÐ?Ô@ä˜Ÿ™Ó%ò RˆØŸ?™?×0Ñ0Ó2ò 	R‰KˆD�%Ø×-Ñ-¨eÓ4ˆEð ˜‹Ø×+Ñ+¨f°W·\±\À$Ó5GÐ4HÐ,IÈ5ÕQñ	RðRð ÐÜ$ [°&¸'ÔBà×ÑÐ0Ô1Ø×Ñ�cÕr;   c                ó¢   — t        dt        | j                  «      t        «      D ](  }|j	                  |«      }|j                  d|› d�«       Œ* y)zMEmit C code to clear bitmaps that track if attributes have an assigned value.r   rÝ  z = 0;N)r©  r¨  r¦  r   r§  r  )r6   r8   r±  rŠ  s       r9   rá  rá  Ø  sJ   € ä�1”c˜"Ÿ/™/Ó*¬KÓ8ò 1ˆØ×$Ñ$ QÓ'ˆØ×Ñ˜F 5 '¨Ð/Õ0ñ1r;   c                ó~   — |j                  dj                  |j                  | j                  «      |«      ddd«       y)z{Emit C code to initialize attribute defaults by calling defaults_fn.

    The code returns NULL on a raised exception.
    zif ({}((PyObject *){}) == 0) {{úPy_DECREF(self);úreturn NULL;r¾  N)rM  r_  Únative_function_callrÑ  )r}  Ú	self_namer8   s      r9   rà  rà  ß  sA   € ð
 ×ÑØ)×0Ñ0Ø×(Ñ(¨×)9Ñ)9Ó:¸Ió	
ð 	ØØõr;   c                ó®  ‡— dˆfd„}| j                  d«      }|s ‰j                  d|› d|› d�«        |«        y |r‰j                  |j                  «      n‰j	                  |j                  «      }|}	|dk7  r|	d|z   z  }	‰j                  d|› d|	› d�«        |«        ‰j                  d‰j                  | «      › d	�«       ‰j                  d
«       y )Nc                 óJ   •— ‰ j                  d«       ‰ j                  d«       y )NrØ  rÙ  r  r  s   €r9   Úemit_null_checkz6emit_setup_or_dunder_new_call.<locals>.emit_null_checkö  s!   ø€ Ø×ÑÐ-Ô.Ø×ÑÐ,Õ-r;   Ú__new__zPyObject *self = ú(ú);r   rÉ  zif (Py_TYPE(self) != r"  z    return self;r=  )r>   r  rë  rÑ  Úwrapper_function_callrë   )
r6   ri  Útype_argÚnative_prefixÚnew_argsr8   rï  Únew_fnÚcallÚall_argss
        `    r9   Úemit_setup_or_dunder_new_callrú  î  sç   ø€ õ.ð �]‰]˜9Ó%€FÙØ×ÑÐ-¨j¨\¸¸8¸*ÀBÐGÔHÙÔØñ ð 	×$Ñ$ V§[¡[Ô1à×*Ñ*¨6¯;©;Ó7ð 	ð
 €HØ�2‚~Ø�D˜8‘OÑ#ˆØ×ÑÐ)¨$¨¨q°°
¸"Ð=Ô>ÙÔð ×ÑÐ-¨g×.FÑ.FÀrÓ.JÐ-KÈ1ÐMÔNØ×ÑÐ(Õ)r;   c           	     ó  — |j                  t        ||«      › «       |j                  d«       |j                  j                  D �cg c]  }t        |j
                  z   ‘Œ }}d|j                  | «      z   }dj                  |«      }	| j                  d«      xrz t        |j                  j                  «      dk(  xrV |j                  j                  d   j                  t        k(  xr* |j                  j                  d   j                  t        k(  }
t        | |||
 |	|«       dj                  dg|z   «      }|�ž|
r|j                  |j                  «      n|j!                  |j                  «      }|
rd
nd}|j                  d|› d|› d|› d�«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       n�t        |j                  j                  «      dkD  rk|j                  d|j                  | «      › d|› d�«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       y	c c}w )zQGenerate a native function that allocates and initializes an instance of a class.r¼  z(PyObject *)rÉ  rð  é   r   rÛ   r×  Nz!= NULL ? 0 : -1r   zchar res = rñ  r"  rè   zif (res == 2) {ré  rê  r¾  z
int res = z
->tp_init(rò  úif (res < 0) {úreturn self;)r  r   rÞ  rß  r!   r?   rë   ra  r^  r¨  Úkindr   r   rú  ró  rÑ  rë  )r6   r7   r~  ri  rn  r8   ÚargÚfn_argsrô  rö  Úuse_wrapperrß  rø  Úcasts                 r9   rf  rf    sG  € ð ×ÑÔ/°°GÓ<Ð=Ô?Ø×Ñ�cÔà02·±·±Ö<¨Œz˜CŸH™HÓ$Ð<€GÐ<Ø × 8Ñ 8¸Ó <Ñ<€HØ�y‰y˜Ó!€Hð 	�‰�iÓ ò 	-Ü�—‘—‘Ó Ñ!ò	-à�F‰F�K‰K˜‰N×Ñ¤8Ñ+ò	-ð �F‰F�K‰K˜‰N×Ñ¤9Ñ,ð	 ô " " j°(À¸OÈXÐW^Ô_à�9‰9�f�X Ñ'Ó(€DØÐñ ð ×)Ñ)¨'¯,©,Ô7à×-Ñ-¨g¯l©lÓ;ð 	ñ
 &1Ñ!°bˆØ×Ñ˜K¨ v¨Q¨t¨f°A°d°V¸1Ð=Ô>Ø×ÑÐ+Ô,Ø×ÑÐ,Ô-Ø×Ñ˜.Ô)Ø×Ñ˜#Õô 
ˆR�V‰V�[‰[Ó	˜AÒ	Ø×Ñ˜J w×'?Ñ'?ÀÓ'CÐ&DÀJÈtÈfÐTVÐWÔXà×ÑÐ*Ô+Ø×ÑÐ,Ô-Ø×Ñ˜.Ô)Ø×Ñ˜#Ôà×Ñ�nÔ%Ø×Ñ�cÕùòI =s   ÁJ
c                ó¢  — | j                  |j                  «      › d�}|j                  d«       |j                  |› d�«       |j                  d«       | j                  s| j                  s| j                  d«      r/|j                  d|j                  |j                  «      › d�«       n|j                  d«       |j                  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)r¼  rð  úreturn z$(self, args, kwds) != NULL ? 0 : -1;ú	return 0;r¾  )rú   r4   r  rU  rð   r^  ró  rÑ  )r6   r~  r8   Ú	func_names       r9   rD   rD   B  s»   € ð —>‘> '§-¡-Ó0Ð1°Ð7€Ià×Ñ�lÔ#Ø×Ñ˜˜Ð#SÐTÔUØ×Ñ�cÔØ	×&Ò&¨"¯/ª/¸R¿]¹]È9Ô=UØ×ÑØ�g×3Ñ3°G·L±LÓAÐBØ2ð3õ	
ð
 	×Ñ˜+Ô&Ø×Ñ�cÔàÐr;   c                óâ  — |j                  d«       |j                  |› d�«       |j                  d«       | j                  sW|j                  d|j                  | «      › d�«       |j                  d«       |j                  d«       |j                  d«       d	}d
}t        | ||d||«       |r9| j                  s-| j                  s!| j                  «       s| j                  d«      r|j                  d«       nd|j                  d|j                  |j                  «      › d�«       |j                  dddd«       |j                  d«       |j                  d«       |j                  d«       y )Nr<  ú4(PyTypeObject *type, PyObject *args, PyObject *kwds)r¼  rÚ  rÛ  zUPyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled");rê  r¾  z(PyObject*)typez
args, kwdsFrð  rþ  zPyObject *ret = z(self, args, kwds);zif (ret == NULL) {z    Py_DECREF(self);rÙ  zPy_DECREF(ret);)
r  rU  rë   rú  rð   Úis_serializabler^  ró  rÑ  rM  )r6   r	  rn  ri  r~  r8   rô  rö  s           r9   rT  rT  Z  s[  € ð ×ÑÐ)Ô*Ø×Ñ˜˜Ð#WÐXÔYØ×Ñ�cÔà×*Ò*Ø×Ñ˜L¨×)AÑ)AÀ"Ó)EÐ(FÀdÐKÔLØ×ÑØcô	
ð 	×Ñ˜.Ô)Ø×Ñ˜#Ôà €HØ€HÜ! " j°(¸EÀ8ÈWÔUáØ×*Ò*Ø�?Š?Ø×ÑÔØ�=‰=˜Ô#ð 	×Ñ˜.Õ)ð
 	×ÑØ˜w×<Ñ<¸W¿\¹\ÓJÐKÐK^Ð_ô	
ð 	×ÑÐ/Ð1GÐI[Ð]`ÔaØ×ÑÐ+Ô,Ø×Ñ˜.Ô)Ø×Ñ�cÕr;   c                ó„  — |j                  d«       |j                  |› d�«       |j                  d«       |j                  d|j                  | «      › d�«       |j                  d«       |j                  d«       |j                  d«       |j                  d	«       |j                  d
«       |j                  d	«       y )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ë   )r6   r	  r8   s      r9   r[  r[  ‡  sµ   € Ø×ÑÐ)Ô*Ø×Ñ˜˜Ð#WÐXÔYØ×Ñ�cÔØ×Ñ˜ W×%=Ñ%=¸bÓ%AÐ$BÀ$ÐGÔHØ×Ñð	Fôð ×Ñ�jÔ!Ø×ÑÐ_Ô`Ø×Ñ�cÔØ×Ñ�nÔ%Ø×Ñ�cÕr;   c                óv  — |j                  d«       |j                  |› d| j                  |j                  «      › d�«       |j                  d«       t        | j                  «      D ]H  }|j
                  j                  «       D ])  \  }}|j                  d|j                  |«      › �|«       Œ+ ŒJ d}|j                  d«       | j                  r&|j                  | d|d	¬
«       |j                  d«       t        | |«      r'|j                  d|› d�«       |j                  d«       nm| j                  rad| j                  xs | j                  |j                  «      › d�}|j                  d|› d�t        «       |j                  d|› d�t        «       |j                  d«       |j                  d«       y)z>Emit function that performs cycle GC traversal of an instance.r  rñ  z# *self, visitproc visit, void *arg)r¼  rÝ  z(PyObject *)self, visit, argzint rv = 0;r  zrv = ©ræ  zif (rv != 0) return rv;zrv = PyObject_VisitManagedDict(rò  r!  r"  ú*((PyObject **)((char *)self + ú))ú4*((PyObject **)((char *)self + sizeof(PyObject *) + z
return rv;r¾  N)r  rû   r4   r¥  r¤  rª  rÝ   Úemit_gc_visitrÖ   rð   Úemit_base_tp_function_callrD  rE  r.   )r6   r	  r8   rž  rÖ   r²  Ú	base_argsr…  s           r9   rN  rN  —  s   € à×Ñ�lÔ#Ø×ÑØˆ+�Q�r—~‘~ g§m¡mÓ4Ð5Ð5XÐYôð ×Ñ�cÔÜ˜Ÿ™Ó%ò HˆØŸ?™?×0Ñ0Ó2ò 	H‰KˆD�%Ø×!Ñ! F¨7¯<©<¸Ó+=Ð*>Ð"?ÀÕGñ	HðHð /€IØ×Ñ�mÔ$Ø	‡‚Ø×*Ñ*¨2¨}¸iÐPWÐ*ÔXØ×ÑÐ3Ô4Ü˜˜GÔ$Ø×ÑÐ;¸I¸;ÀbÐIÔJØ×ÑÐ3Õ4Ø	�Šà˜bŸo™oÒN°·±ÀÇÁÓ1NÐOÈqÐQˆ	Ø×ÑÐ ?À	¸{È"ÐMÔO`ÔaØ×ÑØBÀ9À+ÈRÐPÔRcô	
ð ×Ñ�lÔ#Ø×Ñ�cÕr;   Nc                óT  — |€
t        «       }|j                  dt        ||«      z   «       |j                  d«       |�<|j                  d|› d�«       |j                  d«       |j                  | ddd¬	«       nt	        | ||«       |j                  d
«       |j                  d«       y )Nústatic r¼  zint32_t res = z(cpy_r_self);zif (res != 0) return res;r  z(PyObject *)cpy_r_selfr  r  r  r¾  )r¢  r  r   r  Úgenerate_subtype_clear_body)r6   Ú	func_declr8   r)  r*  s        r9   rP  rP  ´  s¯   € ð ÐÜ“Uˆ
Ø×Ñ�iÔ"8¸ÀGÓ"LÑLÔMØ×Ñ�cÔØÐ%Ø×Ñ˜NÐ+=Ð*>¸mÐLÔMØ×ÑÐ5Ô6Ø×*Ñ*Ø�
Ð4¸Yð 	+õ 	
ô 	$ B¨°Ô<Ø×Ñ˜+Ô&Ø×Ñ�cÕr;   c                óÆ   — |€
t        «       }|j                  d|› d�«       |j                  d«       t        | ||«       |j                  d«       |j                  d«       y )Nzstatic int32_t z(PyObject *cpy_r_self)r¼  r  r¾  )r¢  r  r  )r6   r	  r8   r*  s       r9   rO  rO  Ë  s_   € ð ÐÜ“Uˆ
Ø×Ñ˜¨	 {Ð2HÐIÔJØ×Ñ�cÔÜ  G¨ZÔ8Ø×Ñ�kÔ"Ø×Ñ�cÕr;   c                ó„  — |j                  | j                  |j                  «      › d| j                  |j                  «      › d�«       t        | j                  «      D ]M  }|j
                  j                  «       D ].  \  }}||v rŒ|j                  d|j                  |«      › �|«       Œ0 ŒO d}t        | |«      r|j                  d|› d�«       y | j                  rbd| j                  xs | j                  |j                  «      › d�}|j                  d	|› d
�t        «       |j                  d|› d
�t        «       y y )Nz
 *self = (z *)cpy_r_self;rÝ  ú(PyObject *)selfzPyObject_ClearManagedDict(rò  r!  r"  r  r  r  )r  rû   r4   r¥  r¤  rª  rÝ   Úemit_gc_clearrÖ   rD  rE  rð   r.   )r6   r8   r*  rž  rÖ   r²  r  r…  s           r9   r  r  ×  s>  € Ø×ÑØ�>‰>˜'Ÿ-™-Ó(Ð
)ð *Ø�N‰N˜7Ÿ=™=Ó)Ð*¨.ð	:ôô ˜Ÿ™Ó%ò HˆØŸ?™?×0Ñ0Ó2ò 	H‰KˆD�%Ø�zÑ!ØØ×!Ñ! F¨7¯<©<¸Ó+=Ð*>Ð"?ÀÕGñ	HðHð
 #€IÜ˜˜GÔ$Ø×ÑÐ6°y°kÀÐDÕEØ	�Šà˜bŸo™oÒN°·±ÀÇÁÓ1NÐOÈqÐQˆ	Ø×ÑÐ ?À	¸{È"ÐMÔO`ÔaØ×ÑØBÀ9À+ÈRÐPÔRcõ	
ð	 
r;   c                óÒ  — |j                  d«       |j                  |› d| j                  |j                  «      › d�«       |j                  d«       |s| j                  rá|s|j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d	«       |j                  d
«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |s|j                  d«       | j                  s|j                  d«       | j                  rx|j                  |› d�«       |j                  | «      › d�}d}|j                  d|› d|› d�«       |j                  | d|«       |j                  d«       |j                  d«       y | j                  rt        | |«       |j                  d|› d�«       |j                  |› d�«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       y )Nústatic voidrñ  z *self)r¼  z!if (Py_TYPE(self)->tp_finalize) {z#PyObject *type, *value, *traceback;z'PyErr_Fetch(&type, &value, &traceback);z>int res = PyObject_CallFinalizerFromDealloc((PyObject *)self);zif (PyErr_Occurred() != NULL) {z(PyErr_WriteUnraisable((PyObject *)self);z	res = -1;r¾  z&PyErr_Restore(type, value, traceback);rý  z
goto done;zPyObject_GC_UnTrack(self);z((PyObject *)self);z	->tp_baser  zif (PyType_IS_GC(z)) PyObject_GC_Track(rò  r  zdone: ;zCPy_TRASHCAN_BEGIN(self, r"  z)Py_TYPE(self)->tp_free((PyObject *)self);zCPy_TRASHCAN_END(self))	r  rû   r4   rð   rG  rë   r  rù   Úemit_reuse_dealloc)r6   Údealloc_func_nameÚclear_func_nameÚhas_tp_finalizer8   rž  Úbase_args          r9   rR  rR  í  s>  € ð ×Ñ�mÔ$Ø×ÑÐ*Ð+¨1¨R¯^©^¸G¿M¹MÓ-JÐ,KÈ7ÐSÔTØ×Ñ�cÔñ
 ˜"Ÿ/š/ÙØ×ÑÐAÔBØ×ÑÐ?Ô@Ø×ÑÐCÔDØ×ÑÐZÔ[ð
 	×ÑÐ;Ô<à×ÑÐDÔEØ×Ñ˜+Ô&Ø×Ñ˜#ÔØ×ÑÐBÔCØ×ÑÐ*Ô+Ø×Ñ˜,Ô'Ø×Ñ˜#ÔÙØ×Ñ˜cÔ"Ø�=Š=Ø×ÑÐ6Ô7Ø	‡‚Ø×Ñ˜_Ð-Ð-@ÐAÔBð ×*Ñ*¨2Ó.Ð/¨yÐ9ˆØ%ˆØ×ÑÐ-¨d¨VÐ3HÈÈ
ÐRTÐUÔVØ×*Ñ*¨2¨|¸XÔFØ×Ñ˜)Ô$Ø×Ñ˜#ÔØØ	×ÒÜ˜2˜wÔ'à×ÑÐ1Ð2CÐ1DÀAÐFÔGØ×Ñ˜Ð)Ð)<Ð=Ô>Ø×ÑÐAÔBØ×ÑÐ.Ô/Ø×Ñ�iÔ Ø×Ñ�cÕr;   c                ó¨  — | j                  |j                  «      }|j                  d|› d�«       |j                  |› d�«       t        | |«       t	        | j
                  «      D ]H  }|j                  j                  «       D ])  \  }}|j                  d|j                  |«      › �|«       Œ+ ŒJ |j                  d«       |j                  d«       y)z‚Emit code to deallocate object by putting it to per-type free list.

    The free "list" currently can have up to one object.
    rÖ  z_free_instance == NULL) {z_free_instance = self;rÝ  zreturn;r¾  N)
rú   r4   r  rá  r¥  r¤  rª  rÝ   Úemit_reuse_clearrÖ   )r6   r8   ræ  rž  rÖ   r²  s         r9   r   r   )  sË   € ð
 �^‰^˜GŸM™MÓ*€FØ×Ñ˜˜V˜HÐ$>Ð?Ô@Ø×Ñ˜˜Ð 6Ð7Ô8ô �r˜7Ô#ä˜Ÿ™Ó%ò KˆØŸ?™?×0Ñ0Ó2ò 	K‰KˆD�%Ø×$Ñ$ v¨g¯l©l¸4Ó.@Ð-AÐ%BÀEÕJñ	KðKð ×Ñ�iÔ Ø×Ñ�cÕr;   c           	     óB  — |j                  d«       |j                  |› d�«       |j                  d«       |j                  dj                  |j                  | j                  «      t        | j                  |j                  «      «      «       |j                  d«       y )Nr  z(PyObject *self)r¼  z{}{}{}(self);r¾  )r  r_  rÐ  rÑ  r   r3   r4   )r|  Úfinalize_func_namer8   s      r9   rX  rX  >  s‹   € ð ×Ñ�mÔ$Ø×ÑÐ+Ð,Ð,<Ð=Ô>Ø×Ñ�cÔØ×ÑØ×ÑØ×$Ñ$ Z§_¡_Ó5ÜØ×Ñ˜WŸ]™]Ó+ó	
ôð ×Ñ�cÕr;   c                óš  — |j                  d|› d�«       |r|j                  d|› d�«       | j                  j                  «       D �]+  }|j                  j                  s"|j                  j
                  s|j                  rŒ=|j                  d|j                  › d�«       |j                  dt        › |j                  |j                  «      › d�«       d	d
g}|j                  j                  t        k(  r|j                  d«       n.|j                  j                  t        k(  r|j                  d«       t        |«      }|j                  dj!                  dj#                  |«      |«      «       �Œ. | j%                  d«      s#| j%                  d«      s|j'                  dd«       |j                  d«       |j                  d«       y )Nzstatic PyMethodDef r#  z({"__internal_mypyc_setup", (PyCFunction)z, METH_O, NULL},ú{"ú",z (PyCFunction)r:  ÚMETH_FASTCALLÚMETH_KEYWORDSÚMETH_STATICÚ
METH_CLASSz {}, PyDoc_STR({})}},r5  Ú__setstate__Ú__getstate__z@{"__setstate__", (PyCFunction)CPyPickle_SetState, METH_O, NULL},zE{"__getstate__", (PyCFunction)CPyPickle_GetState, METH_NOARGS, NULL},ú{NULL}  /* Sentinel */r$  )r  ÚmethodsÚvaluesrÑ  Úis_prop_setterÚis_prop_getterÚinternalr?   r    r3   r4   rÿ  r'   r]  r&   r   r_  ra  r^  rM  )r6   r?   ri  r8   r7   r‰  Údocs          r9   r\  r\  N  s�  € ð ×ÑÐ+¨D¨6°Ð9Ô:Ùð 	×ÑØ7¸
°|ÐCTÐUô	
ð �j‰j×ÑÓ!ó RˆØ�7‰7×!Ò! R§W¡W×%;Ò%;¸r¿{º{ØØ×Ñ˜C §¡˜y¨Ð+Ô,Ø×Ñ˜N¬6¨(°2·8±8¸G¿M¹MÓ3JÐ2KÈ1ÐMÔNØ  /Ð2ˆØ�7‰7�<‰<Ô,Ò,Ø�L‰L˜Õ'Ø�W‰W�\‰\Ô-Ò-Ø�L‰L˜Ô&ä-¨bÓ1ˆØ×ÑÐ1×8Ñ8¸¿¹ÀEÓ9JÈCÓPÖQðRð �=‰=˜Ô(°·±¸~Ô1NØ×ÑØNØSô	
ð
 ×ÑÐ.Ô/Ø×Ñ�dÕr;   c                óø   — | j                  |j                  «      › d|› �}|j                  d|› d|› d�«       |j                  «       D ]  \  }}|j                  d|› d|› d�«       Œ |j                  d«       |S )	NÚ_r  rŸ  z = {r8  r9  r:  r$  )rú   r4   r  rÝ   )r6   r?   r€  r‚  r8   rŠ  r‹  s          r9   rL  rL  r  sˆ   € ð �n‰n˜WŸ]™]Ó+Ð,¨A¨d¨VÐ4€DØ×Ñ˜ ˜v Q t f¨EÐ2Ô3ØŸ™›ò 2‰ˆˆuØ×Ñ˜A˜e˜W C¨ w¨aÐ0Õ1ð2à×Ñ�dÔØ€Kr;   c           
     óÚ  — | j                   sà| j                  D ]Ñ  }|j                  d«       |j                  dj                  t	        | ||j
                  «      | j                  |j
                  «      «      «       || j                  vsŒr|j                  d«       |j                  dj                  t        | ||j
                  «      | j                  |j
                  «      «      «       ŒÓ | j                  j                  «       D ]â  \  }\  }}|j                  j                  rŒ |j                  d«       |j                  dj                  t	        | ||j
                  «      | j                  |j
                  «      «      «       |sŒƒ|j                  d«       |j                  dj                  t        | ||j
                  «      | j                  |j
                  «      «      «       Œä y )Nr<  z{}({} *self, void *closure);r  z-{}({} *self, PyObject *value, void *closure);)rï   rª  r  r_  r•  r4   rû   Úfinal_attributesr™  Ú
propertiesrÝ   rÑ  Úimplicit)r6   r8   rÖ   ÚpropÚgetterÚsetters         r9   rY  rY  }  s‘  € Ø�;Š;Ø—M‘Mò 	ˆDØ×ÑÐ1Ô2Ø×ÑØ.×5Ñ5Ü  D¨'¯-©-Ó8¸"¿.¹.ÈÏÉÓ:Wóôð ˜2×.Ñ.Ò.Ø×!Ñ! ,Ô/Ø×!Ñ!ØC×JÑJÜ# B¨¨g¯m©mÓ<¸b¿n¹nÈWÏ]É]Ó>[óõð	ð  #%§-¡-×"5Ñ"5Ó"7ò ÑˆÑˆv�vØ�;‰;×ÒØð 	×ÑÐ-Ô.Ø×ÑØ*×1Ñ1Ü˜B  g§m¡mÓ4°b·n±nÀWÇ]Á]Ó6Sóô	
ò Ø×Ñ˜lÔ+Ø×ÑØ?×FÑFÜ  D¨'¯-©-Ó8¸"¿.¹.ÈÏÉÓ:Wóõñr;   c                óÎ  — |j                  d|› d�«       | j                  s»| j                  D ]¬  }|j                  d|› d�«       || j                  v r+|j                  dt	        | ||j
                  «      › d�«       nK|j                  dj                  t	        | ||j
                  «      t        | ||j
                  «      «      «       |j                  d«       Œ® | j                  j                  «       D ]­  \  }\  }}|j                  j                  rŒ |j                  d|› d�«       |j                  dt	        | ||j
                  «      › d	�«       |r<|j                  d
t        | ||j
                  «      › d	�«       |j                  d«       Œ�|j                  d«       Œ¯ | j                  r|j                  d«       |j                  d«       |j                  d«       y )Nzstatic PyGetSetDef r#  r*  r+  z	 (getter)z, NULL,z (getter){}, (setter){},z NULL, NULL},r:  z	 (setter)zNULL, NULL},zNULL, NULL, NULL},z?{"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},r2  r$  )r  rï   rª  r<  r•  r4   r_  r™  r=  rÝ   rÑ  r>  rE  )r6   r?   r8   rÖ   r?  r@  rA  s          r9   rZ  rZ  ¥  s¹  € Ø×ÑÐ+¨D¨6°Ð9Ô:Ø�;Š;Ø—M‘Mò 	/ˆDØ×Ñ  D 6¨˜nÔ-Ø�r×*Ñ*Ñ*à×!Ñ! I¬k¸"¸dÀGÇMÁMÓ.RÐ-SÐSZÐ"[Õ\à×!Ñ!Ø.×5Ñ5Ü# B¨¨g¯m©mÓ<¼kÈ"ÈdÐT[×TaÑTaÓ>bóôð
 ×Ñ˜oÕ.ð	/ð #%§-¡-×"5Ñ"5Ó"7ò 4ÑˆÑˆv�vØ�;‰;×ÒØà×Ñ˜C ˜v R˜.Ô)Ø×Ñ˜I¤k°"°d¸G¿M¹MÓ&JÐ%KÈ1ÐMÔNáØ×Ñ 	¬+°b¸$ÀÇÁÓ*NÐ)OÈqÐQÔRØ×Ñ˜nÕ-à×ÑÐ2Õ3ð4ð 
‡{‚{Ø×ÑÐ[Ô\à×ÑÐ.Ô/Ø×Ñ�dÕr;   c                ó¸  — | j                   s–t        | j                  j                  «       «      D ]p  \  }\  }}t	        | |||«       || j
                  vr|j                  d«       t        | |||«       |t        | j                  «      dz
  k  sŒ`|j                  d«       Œr | j                  j                  «       D ]›  \  }\  }}|j                  j                  rŒ |j                  j                  }|j                  d«       t        | ||||«       |sŒY|j                  j                  d   j                   }|j                  d«       t#        | ||||«       Œ� y )Nr   rÛ   )rï   Ú	enumeraterª  rÝ   Úgenerate_getterr<  r  Úgenerate_setterr¨  r=  rÑ  r>  rÞ  Úret_typeÚgenerate_readonly_getterrß  r€  Úgenerate_property_setter)	r6   r8   r±  rÖ   r²  r?  r@  rA  Úarg_types	            r9   rg  rg  È  s/  € Ø�;Š;Ü )¨"¯-©-×*=Ñ*=Ó*?Ó @ò 	&ÑˆA‰}��eÜ˜B  e¨WÔ5à˜2×.Ñ.Ñ.Ø×!Ñ! "Ô%Ü  D¨%°Ô9Ø”3�r—}‘}Ó%¨Ñ)Ó)Ø×!Ñ! "Õ%ð	&ð #%§-¡-×"5Ñ"5Ó"7ò 
JÑˆÑˆv�vØ�;‰;×ÒØà—
‘
×#Ñ#ˆØ×Ñ˜"ÔÜ   T¨5°&¸'ÔBÚØ—z‘z—‘ qÑ)×.Ñ.ˆHØ×Ñ˜bÔ!Ü$ R¨¨x¸ÀÕIñ
Jr;   c           	     óª  — |j                  |«      }|j                  d«       |j                  dj                  t        | ||j                  «      | j                  |j                  «      «      «       |j                  d«       d|› �}t        rÖt        |«      rË|| j                  v rd|› d�}nd|› d�}|j                  d|› d	�«       |j                  d
«       |j                  d«       |j                  dt        |«      › dt        | j                  «      › d�«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       y | j                  |«      xr |j                   }|s|j                  ||dd|| d¬«       |j                  d«       |j                  dt        |«      › dt        | j                  «      › d�«       |j                  d«       |j                  d«       |j                  d|› �|«       |j                  d|› �d|d¬«       |j                  d«       |j                  d«       y )Nr<  ú{}({} *self, void *closure)r¼  rÝ  z"CPy_GetAttrRefFinal((PyObject **)&r"  z/CPy_GetAttrRef((PyObject *)self, (PyObject **)&zPyObject *retval = rè   zif (unlikely(retval == NULL)) {ú%PyErr_SetString(PyExc_AttributeError,z    "attribute z of z undefined");rê  r¾  zreturn retval;z==r×  T)ÚunlikelyÚretval©Údeclare_dest)rÖ   r  r_  r•  r4   rû   r   r-   r<  Úreprr?   Úis_always_definedÚis_refcountedÚemit_undefined_attr_checkÚemit_inc_refÚemit_box)r6   rÖ   r²  r8   Ú
attr_fieldÚ	attr_exprÚgetattr_refÚalways_defineds           r9   rE  rE  ß  s1  € Ø—‘˜dÓ#€JØ×ÑÐ)Ô*Ø×ÑØ%×,Ñ,Ü˜˜D '§-¡-Ó0°"·.±.ÀÇÁÓ2Oó	
ôð
 ×Ñ�cÔØ˜˜Ð%€IåÔ8¸Ô?ð �2×&Ñ&Ñ&Ø>¸y¸kÈÐK‰KàKÈIÈ;ÐVWÐXˆKØ×ÑÐ/°¨}¸AÐ>Ô?Ø×ÑÐ;Ô<Ø×ÑÐAÔBØ×Ñ˜O¬D°«J¨<°t¼DÀÇÁ»M¸?È-ÐXÔYØ×Ñ˜.Ô)Ø×Ñ˜#ÔØ×ÑÐ*Ô+Ø×Ñ˜#ÔØð
 ×)Ñ)¨$Ó/ÒK¸×8KÑ8KÐ4K€NáØ×)Ñ)¨%°¸DÀ&È$ÐPRÐ]aÐ)ÔbØ×ÑÐAÔBØ×Ñ˜O¬D°«J¨<°t¼DÀÇÁ»M¸?È-ÐXÔYØ×Ñ˜.Ô)Ø×Ñ˜#ÔØ×Ñ˜6 * Ð.°Ô6Ø×Ñ�v˜j˜\Ð*¨H°eÈ$ÐÔOØ×ÑÐ&Ô'Ø×Ñ�cÕr;   c           	     ó  ‡ ‡‡‡‡‡— ‰j                  ‰«      Š‰j                  d«       ‰j                  dj                  t        ‰ ‰‰j                  «      ‰ j                  ‰j                  «      «      «       ‰j                  d«       ‰ j                  ‰«      }|sx‰j                  d«       ‰j                  d«       ‰j                  dt        ‰ j                  «      › dt        ‰«      › d�«       ‰j                  d	«       ‰j                  d
«       t        rêt        ‰«      rß|r‰j                  d«       t        ‰t        «      r‰j                  d«       n'‰j                  dd‰d¬«       ‰j                  dd«       ‰j                  d‰«       ‰j                  d‰› d�«       |r7‰j                  d«       ‰j                  d‰› d�«       ‰j                  d
«       ‰j                  d«       ‰j                  d
«       y ‰ j!                  ‰«      xr ‰j"                   Šdˆˆˆˆ ˆˆfd„}|r‰j                  d«       ‰j$                  r!‰j'                  dd‰t)        d«      dd¬«       nIt        ‰t        «      r‰j                  d«       n'‰j                  dd‰d¬«       ‰j                  dd«       ‰j                  d‰«        |«        ‰j                  d‰› d�«       ‰j*                  r‰s‰j-                  dd‰‰ ‰«       |r^‰j                  d«        |«        ‰j/                  d‰› �‰«       ‰j*                  r‰j1                  d‰‰ ‰«       ‰j                  d
«       ‰j                  d«       ‰j                  d
«       y )Nr  ú,{}({} *self, PyObject *value, void *closure)r¼  zif (value == NULL) {rM  z    "z object attribute z cannot be deleted");ú
return -1;r¾  zif (value != NULL) {zPyObject *tmp = value;r‹  ÚtmpTrP  z	if (!tmp)z    return -1;z5CPy_SetAttrRef((PyObject *)self, (PyObject **)&self->z, tmp);rÜ  z, NULL);r  c                 ó¦   •— ‰j                   rDd‰› �} ‰s‰j                  ‰| dd‰‰«       ‰j                  | ‰«       ‰s‰j                  d«       y y y )NrÝ  z!=r×  r¾  )rT  rU  Úemit_dec_refr  )rY  r[  rÖ   rX  r6   r8   r²  s    €€€€€€r9   Úemit_decref_old_valuez.generate_setter.<locals>.emit_decref_old_valueL  s`   ø€ Ø×ÒØ   Ð-ˆIÙ!Ø×1Ñ1°%¸ÀDÈ&ÐRVÐXZÔ[Ø× Ñ  ¨EÔ2Ù!Ø×!Ñ! #Õ&ð "ð r;   ú-1)ÚerrorrQ  ÚborrowrÝ  z = tmp;r×  r=  )rÖ   r  r_  r™  r4   rû   Úis_deletablerR  r?   r   r-   r0   r.   Ú	emit_castrM  rV  rS  rT  Ú
is_unboxedÚ
emit_unboxr   Úerror_overlapÚemit_attr_bitmap_seträ  Úemit_attr_bitmap_clear)r6   rÖ   r²  r8   Ú	deletablerb  r[  rX  s   ````  @@r9   rF  rF    sE  ý€ Ø—‘˜dÓ#€JØ×Ñ�lÔ#Ø×ÑØ6×=Ñ=Ü˜˜D '§-¡-Ó0°"·.±.ÀÇÁÓ2Oó	
ôð
 ×Ñ�cÔà—‘ Ó%€IÙØ×ÑÐ0Ô1Ø×ÑÐAÔBØ×ÑØ”D˜Ÿ™“M�?Ð"4´T¸$³Z°LÐ@UÐVô	
ð 	×Ñ˜,Ô'Ø×Ñ˜#ÔåÔ8¸Ô?ñ Ø×ÑÐ4Ô5Ü˜Ô0Ô1Ø×ÑÐ6Õ7à×Ñ˜g u¨eÀ$ÐÔGØ×Ñ˜{Ð,<Ô=Ø×Ñ˜U EÔ*Ø×ÑØCÀJÀ<ÈwÐWô	
ñ Ø×Ñ˜jÔ)Ø×ÑØGÈ
À|ÐS[Ð\ôð ×Ñ˜cÔ"Ø×Ñ˜+Ô&Ø×Ñ˜#ÔØð
 ×)Ñ)¨$Ó/ÒK¸×8KÑ8KÐ4K€N÷'ò 'ñ Ø×ÑÐ0Ô1à×Òð 	×ÑØ�U˜E¬°tÓ)<È4ÐX\ð 	õ 	
ô 
�eÔ.Ô	/Ø×ÑÐ2Õ3à×Ñ˜' 5¨%¸dÐÔCØ×Ñ˜;Ð(8Ô9ð ×Ñ˜ Ô&ÙÔØ×Ñ˜˜z˜l¨'Ð2Ô3Ø×Ò¡>Ø×$Ñ$ U¨F°E¸2¸tÔDáØ×Ñ˜*Ô%ÙÔØ×#Ñ# f¨Z¨LÐ$9¸5ÔAØ×ÒØ×*Ñ*¨6°5¸"¸dÔCØ×Ñ˜#ÔØ×Ñ�kÔ"Ø×Ñ�cÕr;   c           	     ó˜  — |j                  d«       |j                  dj                  t        | ||j                  «      | j	                  |j                  «      «      «       |j                  d«       |j
                  rˆ|j                  dj                  |j                  |«      t        |j                  |j                  «      «      «       |j                  d|d«       |j                  dd|d¬	«       |j                  d
«       n4|j                  dt        › |j                  |j                  «      › d�«       |j                  d«       y )Nr<  rL  r¼  z#{}retval = {}{}((PyObject *) self);rO  rê  ÚretboxTrP  zreturn retbox;r  z((PyObject *) self);r¾  )r  r_  r•  r4   rû   rh  r«  r   r3   Úemit_error_checkrW  )r6   rÖ   r²  Úfunc_irr8   s        r9   rH  rH  z  s  € ð ×ÑÐ)Ô*Ø×ÑØ%×,Ñ,Ü˜˜D '§-¡-Ó0°"·.±.ÀÇÁÓ2Oó	
ôð
 ×Ñ�cÔØ×ÒØ×ÑØ1×8Ñ8Ø×$Ñ$ UÓ+¬]¸G¿M¹MÈ'Ï-É-Ó<Xóô	
ð
 	× Ñ  ¨5°.ÔAØ×Ñ˜ 8¨UÀÐÔFØ×ÑÐ*Õ+à×ÑØ”m�_ W§]¡]°7·=±=Ó%AÐ$BÐBVÐWô	
ð ×Ñ�cÕr;   c           	     óú  — |j                  d«       |j                  dj                  t        | ||j                  «      | j	                  |j                  «      «      «       |j                  d«       |j
                  }|j                  |j                  |«      › d|j                  |«      › d�«       |j                  rT|j                  dd|t        d«      d	¬
«       |j                  dt        › |j                  |j                  «      › d�«       n4|j                  dt        › |j                  |j                  «      › d�«       |j                  d|d«       |j                  d«       |j                  d«       y )Nr  r]  r¼  z
 retval = rè   r‹  r_  rc  T)rd  rQ  z	retval = z((PyObject *) self, tmp);z((PyObject *) self, value);rO  r^  r  r¾  )r  r_  r™  r4   rû   rG  Úctyperã  rh  ri  r   r   r3   rp  )r6   rÖ   rJ  rq  r8   rG  s         r9   rI  rI  ”  sO  € ð ×Ñ�lÔ#Ø×ÑØ6×=Ñ=Ü˜˜D '§-¡-Ó0°"·.±.ÀÇÁÓ2Oó	
ôð
 ×Ñ�cÔØ×Ñ€HØ×Ñ˜Ÿ™ xÓ0Ð1°¸G×<UÑ<UÐV^Ó<_Ð;`Ð`aÐbÔcØ×ÒØ×Ñ˜7 E¨8¼=ÈÓ;NÐ]aÐÔbØ×ÑØœ� w§}¡}°W·]±]Ó'CÐ&DÐD]Ð^õ	
ð 	×ÑØœ� w§}¡}°W·]±]Ó'CÐ&DÐD_Ð`ô	
ð ×Ñ˜X x°Ô>Ø×Ñ�kÔ"Ø×Ñ�cÕr;   c                ó^   — |j                   dk\  xr | j                  xr | j                  dk7  S )z6Should the class get the Py_TPFLAGS_MANAGED_DICT flag?r  ÚPyBaseExceptionObject)rF  rE  rð   )r6   r8   s     r9   rD  rD  ®  s5   € ð 	×Ñ Ñ'ò 	7Ø�K‰Kò	7à�O‰OÐ6Ñ6ðr;   c                óä   — | j                  d«      }|�.t        |d¬«      }|€y|j                  d| j                  d«      }n| j                  › d�}|› d�}t	        |j                  dd	¬
«      «      S )NrU   T)ÚboundrÎ  rÛ   z()z
--

ÚasciiÚbackslashreplace)Úerrors)r>   r*   Úreplacer?   r   Úencode)r6   r~  Útext_sigÚ	docstrings       r9   rb  rb  º  sz   € Ø�m‰m˜JÓ'€GØÐÜ% g°TÔ:ˆØÐØØ×#Ñ# J°·±¸Ó;‰à—g‘g�Y˜b�>ˆØ�*˜HÐ%€IÜ 	× 0Ñ 0°ÐASÐ 0Ó TÓUÐUr;   c           	     óî  ‡‡— ‰j                  d«       ‰j                  t        › |› d�«       ‰j                  d«       dŠdˆˆfd„}dˆfd„}| j                  rê || j                  d   | j                  «      }| j	                  ‰j
                  «      }‰j                  t        «      }t        r"‰j                  d|› d	|› d
|› d�«        |«       S d|› d	|› �}	‰j                  d|	› d�«       ‰j                  |	› d|› d�«       ‰j                  d«       ‰j                  d|› d�«       ‰j                  d«        |«       S t        d„ | j                  j                  «       D «       «      s |«       S ‰j                  d«       | j                  j                  «       D ]Í  }
|
j                  j                  sŒt        |
j                  |
j                  j                  |
j                   «      } ||
|«      }d|› �}‰j                  d|› d|
j                  › d�«       ‰j                  d|› d�«       ‰j                  ‰«       ‰j                  d|› d
|› d�«       ‰j                  ‰«       ŒÏ  |«       S ) Nr»  z(PyObject *type)r¼  z    return 2;c                óL   •— ‰j                   xs d}‰j                  | ||‰«      S )Nr   )ÚfilepathÚemit_cpyfunction_instance)r7   Úfn_namer�  r8   Ú
error_stmts      €€r9   Úemit_instancez/generate_coroutine_setup.<locals>.emit_instanceÐ  s*   ø€ Ø×#Ñ#Ò) rˆØ×0Ñ0°°W¸hÈ
ÓSÐSr;   c                 óJ   •— ‰ j                  d«       ‰ j                  d«       y )Nr½  r¾  r  r  s   €r9   Úsuccessz)generate_coroutine_setup.<locals>.successÔ  s   ø€ Ø×Ñ˜+Ô&Ø×Ñ˜#Õr;   rV   z,CPy_InitAttrRefIfNull(type, (PyObject **)&((z
 *)type)->rÉ  rò  z((rÖ  z == NULL) {r9  rè   rÜ  z
Py_DECREF(r¾  c              3  óH   K  — | ]  }|j                   j                  –— Œ y ­wr2   )rÑ  Úis_coroutine)r  r7   s     r9   r  z+generate_coroutine_setup.<locals>.<genexpr>í  s   è ø€ ÒB¨ˆr�w‰w×#Õ#ÑBùs   ‚ "z(PyTypeObject *tp = (PyTypeObject *)type;Úname_z
PyObject *z = PyUnicode_FromString("z");zif (unlikely(!r  z if (PyDict_SetItem(tp->tp_dict, z) < 0))r7   r)   rƒ  r¿  r>  r¿  r=  )r  r   rc  r3  rû   r4   rÖ   r   r   Úanyr4  rÑ  r‰  r#   r?   Ú	shortnameÚline)r6   rw  r’  r8   r…  r‡  Úwrapper_namerû   rÖ   rŠ  r7   r?   Úname_objr„  s      `         @r9   rW  rW  Ç  sc  ù€ ð ×Ñ�mÔ$Ø×Ñœ˜Ð(<Ð'=Ð=MÐNÔOØ×Ñ�cÔà €JöTõð 
×Òá$ R§Z¡Z°
Ñ%;¸R×=NÑ=NÓOˆØ—n‘n W§]¡]Ó3ˆØ�|‰|Ô,Ó-ˆÝØ×ÑØ>¸{¸mÈ:ÐVZÐU[Ð[]Ø�. ð$ôñ ‹yÐð ˜˜ Z°¨vÐ6ˆEØ×Ñ  U G¨<Ð8Ô9Ø×Ñ   s¨<¨.¸Ð:Ô;Ø×Ñ˜jÔ)Ø×Ñ 
¨<¨.¸Ð;Ô<Ø×Ñ˜cÔ"Ù‹yÐäÑB¨b¯j©j×.?Ñ.?Ó.AÔBÔBÙ‹yÐà×ÑÐ@ÔAà�j‰j×ÑÓ!ò &ˆØ�w‰w×#Ò#Øä! "§'¡'¨2¯7©7×+<Ñ+<¸b¿g¹gÓFˆÙ$ R¨Ó.ˆØ˜<˜.Ð)ˆØ×Ñ˜J x jÐ0IÈ"Ï'É'ÈÐRUÐVÔWØ×Ñ˜N¨8¨*°BÐ7Ô8Ø×Ñ˜*Ô%Ø×ÑÐ<¸X¸JÀbÈÈÐV\Ð]Ô^Ø×Ñ˜*Õ%ð&ñ ‹9Ðr;   )r6   r$   r7   r)   r8   r	   r>  r¿  )rÖ   r¿  r>  r¿  )r6   r$   rà   r_   r8   r	   r>  údict[str, str])
r6   r$   ró   r	   rô   r	   r8   r	   r>  r?  )r6   r$   rh  r¿  r8   r	   r>  r?  )r6   r$   r”  r¿  r4   r/   r>  r¿  )r6   r$   r8   r	   r>  r?  )rž  r$   rv  r¿  rn  r¿  r8   r	   r,  rS  r>  r¿  )
r¹  r¿  r8   r	   r¶  r$   r6   r$   r>  r?  )rÒ  r%   rn  r¿  r8   r	   rÅ  zlist[tuple[ClassIR, str, str]]r,  rS  r>  r?  )r6   r$   r}  úFuncIR | Nonern  r¿  rˆ  ú
str | Noner8   r	   r>  r?  )r}  r)   rì  r¿  r8   r	   r>  r?  )r6   r$   ri  r¿  rô  r¿  rõ  rS  rö  r¿  r8   r	   r>  r?  )r6   r$   r7   r(   r~  r‘  ri  r¿  rn  r¿  r8   r	   r>  r?  )r6   r$   r~  r)   r8   r	   r>  r¿  )r6   r$   r	  r¿  rn  r¿  ri  r¿  r~  r‘  r8   r	   r>  r?  )r6   r$   r	  r¿  r8   r	   r>  r?  )NN)r6   r$   r  r(   r8   r	   r)  r’  r*  úset[str] | Noner>  r?  r2   )
r6   r$   r	  r¿  r8   r	   r*  r“  r>  r?  )r6   r$   r8   r	   r*  zset[str]r>  r?  )r6   r$   r!  r¿  r"  r¿  r#  rS  r8   r	   r>  r?  )r|  r)   r(  r¿  r8   r	   r>  r?  )
r6   r$   r?   r¿  ri  r’  r8   r	   r>  r?  )r6   r$   r?   r¿  r€  r¿  r‚  r�  r8   r	   r>  r’  )r6   r$   r?   r¿  r8   r	   r>  r?  )
r6   r$   rÖ   r¿  r²  r,   r8   r	   r>  r?  )r6   r$   rÖ   r¿  r²  r,   rq  r)   r8   r	   r>  r?  )r6   r$   rÖ   r¿  rJ  r,   rq  r)   r8   r	   r>  r?  )r6   r$   r8   r	   r>  rS  )r6   r$   r>  r¿  )
r6   r$   rw  r¿  r’  r¿  r8   r	   r>  r?  )qÚ__doc__Ú
__future__r   Úcollections.abcr   r   Ú
mypy.nodesr   r   Úmypyc.codegen.cstringr   Úmypyc.codegen.emitr	   r
   r   r   Úmypyc.codegen.emitfuncr   Úmypyc.codegen.emitwrapperr   r   r   r   r   r   r   r   r   r   r   Úmypyc.commonr   r   r   r   r   r   r   r    r!   r"   r#   Úmypyc.ir.class_irr$   r%   Úmypyc.ir.func_irr&   r'   r(   r)   r*   Úmypyc.ir.rtypesr+   r,   r-   r.   Úmypyc.namegenr/   Úmypyc.sametyper0   r:   rA   r¿  ÚSlotGeneratorÚtupler_   r`   Ú__annotations__rh   rk   r¾   rÆ   rK  rß   rL   r×   ræ   rö   rü   r�  r•  r™  rî   rV  rÃ  rÂ  re  rá  rà  rú  rf  rD   rT  r[  rN  rP  rO  r  rR  r   rX  r\  rL  rY  rZ  rg  rE  rF  rH  rI  rD  rb  rW  rÑ   r;   r9   ú<module>r¥     sY	  ðÚ >å "ç -ç *Ý 6÷ó õ :÷÷ ÷ ñ ÷÷ ÷ ñ ÷ 5÷õ ÷ [Ó ZÝ 'Ý 'ó7ó?ð ˜' 6¨7Ð3°SÐ8Ñ9€Ø�C˜˜s MÐ1Ñ2Ð2Ñ3€	ð ÑLÐMØÑJÐKØ˜+Ð&Ø˜KÐ(Ø Ð,Ø˜KÐ(ØÐ1Ð2ØÐ 4Ð5Ø!Ð#3Ð4Ø!Ð#3Ð4ñ€	ˆ9ó ð #Ð$;Ð<Ø&Ð(EÐFØ&Ð(EÐFØÐ1Ð2ñ	#Ð �ió ð %3°]ÐD]Ð4^Ð#_Ð �yÓ _ð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"ð* Ð'Ð)@ÐAð+6"ð, �;Ð 7Ð8ð-6"ð. �KÐ!8Ð9ð/6"ð0 �;Ð 7Ð8ð16"ð2 �KÐ!8Ð9ð36"ð4 �;Ð 7Ð8ð56"ð6 �KÐ!8Ð9ð76"ð8 �Ð1Ð2ð96"ð: �Ð2Ð3ð;6"ð< ˆwÐ/Ð0ð=6"ð> �Ð0Ð1ð?6"ð@ �Ð1Ð2ðA6"ðB �Ð2Ð3ðC6"ðD Ð'Ð)@ÐAðE6"ðF Ð(Ð*AÐBðG6"ðJ Ð!Ð#:Ð;ñK6"ðL 'Ð(?Ð@Ø&Ð(?Ð@Ø'Ð)@ÐAØ-Ð/FÐGØ/Ð1HÐIØ'Ð)@ÐAØ'Ð)@ÐAØ!Ð#:Ð;ØÐ!8Ð9Ø!Ð#:Ð;Ø0Ð2IÐJð Ð3Ð4ØÐ4Ð5Ø#Ð%:Ð;òk6"Ð �Yó 6ðr �*˜kÐ*Ø�*˜kÐ*Ø�*˜kÐ*ð ˜IÐ'?Ð@ð!Ð �Ió ð Ð%Ð';Ð<ØÐ'Ð)>Ð?ØÐ#Ð%8Ð9ØÐ!Ð#5Ð6ð	€ð ˆl€óóóð&
Øð
Ø#ð
Ø7>ð
ØIPð
à	ó
ð*]Øð]Ø#ð]Ø7>ð]ØIPð]à	ó]ó*f(óRLóLó&ðRSUØ
ðSUØ&)ðSUØ8;ðSUØFMðSUØW[ðSUàóSUðlØ ðØ+2ðØ;BðØHOðà	óð bØðbàðbð ðbð .ð	bð
 ðbð 
óbðB>Øð>àð>ð ð>ð #ð	>ð
 ð>ð 
ó>óB1óð*Øð*àð*ð ð*ð ð	*ð
 ð*ð ð*ð 
ó*ðB0Øð0àð0ð ð0ð ð	0ð
 ð0ð ð0ð 
ó0ófð0*Øð*àð*ð ð*ð ð	*ð
 ð*ð ð*ð 
ó*óZó ðB &*Ø"&ðØðàðð ðð #ð	ð
  ðð 
óð0 RVð	Øð	Øð	Ø*1ð	Ø?Nð	à	ó	ó
ð,9Øð9àð9ð ð9ð ð	9ð
 ð9ð 
ó9óxð*ØðØ,/ðØ:Aðà	óð !Øð!Øð!Ø(2ð!Ø=Dð!à	ó!ðHØðØðØ"%ðØ.<ðØGNðàóó%óP óFJó.4ónaðHØðØðØ#(ðØ39ðØDKðà	óð4ØðØðØ&+ðØ6<ðØGNðà	óó4	ó
Vð8Øð8Ø'*ð8Ø9<ð8ØGNð8à	ô8r;   