o
    2g                     @  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mZ ddlmZmZmZmZmZ ddlmZm Z  dd	l!m"Z"m#Z#m$Z$m%Z% dd
l&m'Z'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- dddZ.dddZ/eee%ege0f Z1ee0ee0e1f f Z2d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$Z3d%e4d&< d'efd(efd(efd)efd*Z5d%e4d+< d,d-efiZ6d%e4d.< i d/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@dAefdBdAefdCdDefdEdDefdFdGefdHdGefdIdJefdKdJefi dLdMefdNdMefdOdPefdQdPefdRdSefdTdSefdUdVefdWdVefdXdYefdZdYefd[d\efd]d\efd^d_efd`d_efdadbefdcdbefdddeefdfefdgefdhefdiefdjefdkefdlefdmefdnefdoefdpefdqefdqefdrefdsZ7d%e4dt< due.fdve.fdwe.fdxZ8d%e4dy< dzd{e5fd|d}e6fd~de7fdde8fgZ9dhZ:dddZ;dddZ<dddZ=dddZ>dddZ?dddZ@dddZAdddZBdddZCdddZDdddZEdddZFdddZGdddZHdddZIdddZJdddZKdddÄZLdddǄZMdddʄZNddd΄ZOdddЄZPddd҄ZQdddԄZRddd؄ZSdddڄZTddd݄ZUdddZVdddZWdS )z8Code generation for native classes and related wrappers.    )annotations)CallableMappingTuple)EmitterHeaderDeclarationReturnHandler)native_function_header)
generate_bin_op_wrappergenerate_bool_wrappergenerate_contains_wrappergenerate_dunder_wrappergenerate_get_wrappergenerate_hash_wrappergenerate_ipow_wrappergenerate_len_wrappergenerate_richcompare_wrappergenerate_set_del_item_wrapper)BITMAP_BITSBITMAP_TYPENATIVE_PREFIXPREFIX
REG_PREFIX)ClassIRVTableEntries)FUNC_CLASSMETHODFUNC_STATICMETHODFuncDeclFuncIR)RTupleRTypeobject_rprimitive)NameGenerator)is_same_typeclr   fnr   emitterr   returnstrc                 C     t  ||j S N)r   cnamenamesr$   r%   r&    r.   O/home/garg/my-data/venv/lib/python3.10/site-packages/mypyc/codegen/emitclass.pynative_slot      r0   c                 C  r)   r*   )r   r+   r,   r-   r.   r.   r/   wrapper_slot!   r1   r2   tp_initc                 C     t | ||S r*   )generate_init_for_classcter.   r.   r/   <lambda>-       r:   tp_callc                 C  r4   r*   )generate_call_wrapperr6   r.   r.   r/   r:   .   r;   tp_strtp_reprtp_iternexttp_itertp_hashtp_descr_get)__init____call____str____repr____next____iter____hash____get__	SlotTable	SLOT_DEFSmp_subscriptmp_ass_subscript	mp_length)__getitem____setitem____delitem____len__AS_MAPPING_SLOT_DEFS__contains__sq_containsAS_SEQUENCE_SLOT_DEFS__bool__nb_bool__int__nb_int	__float__nb_float__neg__nb_negative__pos__nb_positive__abs__nb_absolute
__invert__	nb_invert__add__nb_add__radd____sub__nb_subtract__rsub____mul__nb_multiply__rmul____mod__nb_remainder__rmod____truediv__nb_true_divide__rtruediv____floordiv__nb_floor_divide__rfloordiv__
__divmod__	nb_divmod__rdivmod__
__lshift__	nb_lshift__rlshift__
__rshift__	nb_rshift__rrshift____and__nb_and__rand____or__nb_or__ror____xor__nb_xor__rxor__
__matmul__nb_matrix_multiply__rmatmul____iadd__nb_inplace_addnb_inplace_subtractnb_inplace_multiplynb_inplace_remaindernb_inplace_true_dividenb_inplace_floor_dividenb_inplace_lshiftnb_inplace_rshiftnb_inplace_andnb_inplace_ornb_inplace_xornb_inplace_matrix_multiplynb_powernb_inplace_power)__isub____imul____imod____itruediv____ifloordiv____ilshift____irshift____iand____ior____ixor____imatmul____pow____rpow____ipow__AS_NUMBER_SLOT_DEFSam_awaitam_aiteram_anext)	__await__	__aiter__	__anext__AS_ASYNC_SLOT_DEFS
as_mappingPyMappingMethodsas_sequencePySequenceMethods	as_numberPyNumberMethodsas_asyncPyAsyncMethodsrJ   c                 C  s   |  rdS t| ||S )NPyVectorcall_Call)use_vectorcallr2   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' > '_').
    __rr   rS   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/   r:      r;   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pV| j pV| j}| js^||d< |rxd| d|d< d| d|d< d| d|d< |r~||d< ||d< dL fdd}|  | d}| d}|	t
| t  tD ]\}}}t
| | }|rt| ||| }d| |d| < qt|  }|r||d< |  j}| jrd| j d }n| jrd!}nd| d }| jr't|  s'| d"} d#| d$d%| d&d'| d&d(d) ||d*< | d+|d,<  jd-k r&||d.< ||d/< n||d,< |r d0| d1 | jd2us?J  t| j d3  |  | d}t| ||	||  |  t| |
  |  t| |  |  t| ||  |  | jrt| |d4 |	d4  d5d6}|  nd2}t| ||	 d7d6}	|  |rt|   |  t| |  |  | jrt| |  t| |  |  g d8}|r| d9 | !d:r " rd;#|  j|d<< | d= |$d>sd?|d@< t|  r | dA dB%||dC<  dD &|  dE  dF |' D ]\} }! dG|  dH|! dI q d)  dJj# &| dK    |rat(| |||	|     t)| | j|||	     |rkt*|   d2S d2S )MzRGenerate 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_setuprD   &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_GCrE   zoffsetof({}, vectorcall)tp_vectorcall_offset_Py_TPFLAGS_HAVE_VECTORCALLtp_vectorcallr   r<   Py_TPFLAGS_MANAGED_DICT | tp_flagszstatic PyTypeObject z_template_ = {zPyVarObject_HEAD_INIT(NULL, 0). = ,z3static PyTypeObject *{t}_template = &{t}_template_;)r8   )r'   r   )+r   name_prefixr,   r   r   needs_getsetersis_generatedhas_dict
get_methodupdater   rM   SIDE_TABLESgenerate_side_table_for_classr   struct_namehas_managed_dict
emit_linescapi_versionr   r   r	   generate_new_for_classgenerate_traverse_for_classgenerate_clear_for_classgenerate_dealloc_for_classallow_interpreted_subclassesgenerate_vtablesgenerate_getseter_declarationsgenerate_getseters_tablegenerate_new_for_traitgenerate_methods_tableappend
has_methodr   formatgetjoinr   r   generate_setup_for_classgenerate_constructor_for_classgenerate_getseters)"r$   r   r&   r   r  
setup_namenew_namemembers_namegetseters_namevtable_nametraverse_name
clear_namedealloc_namemethods_namevtable_setup_namer   r   r  r   defaults_fninit_fn
table_nametype	slot_defsslotstable_struct_namerichcompare_namer  	base_sizeweak_offsetshadow_vtable_nameflagsfieldvaluer.   r   r/   generate_class   s   
























rJ  	attributer,   r"   c                 C     | | j| j d| S )N_get_private_namemodule_namer   r$   rK  r,   r.   r.   r/   getter_namet     rR  c                 C  rL  )N_set_rN  rQ  r.   r.   r/   setter_namex  rS  rU  c           	      C  sZ  t  }g }|g d7 }| dr| r|d g }t| jD ]j}|js|jrY|t	|jd |vrYt
dt	|jtD ]}||}||vrX|t d| d || q=|j D ]+\}}||f|vr||| || d |||f t|tr|| q^q |d| |j d |d	 t|d
d|jj| |j< d S )N)ztypedef struct {PyObject_HEADzCPyVTableItem *vtable;rE   zvectorcallfunc vectorcall;r   r    r   z}  T)is_type)setr+  r   r*  reversedbase_mror   bitmap_attrsbitmap_fieldlenranger   r   
attributesr   ctype_spacedr   add
isinstancer   declare_tuple_structr  r,   r   r   r   )	r$   r&   
seen_attrslinesr]  baseir   rtyper.   r.   r/   r   |  s8   


 


r   rh  r;  r6  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  rX  r,  r  r,   rl  rh  r&   r  r.   r/   trait_vtable_name  s   

z+generate_vtables.<locals>.trait_vtable_namec                   s   d  j| jS )Nz{}_{}_offset_tablerm  rn  )rh  r&   r.   r/   trait_offset_table_name  s   z1generate_vtables.<locals>.trait_offset_table_namezstatic CPyVTableItem {}[{}];r   r   zstatic CPyVTableItem [z];zstatic size_t {}[{}];zstatic boolz(void){z
_shadow();z	return 1;}z + N)rl  r   r'   r(   )r   r,  maxr_  vtable_entriestrait_vtablesr   ra  r   r$  generate_vtablegenerate_offset_tabler*  )rh  r;  r6  r&   r  rp  rq  rl  vtable	subtablesr   offset_namer.   ro  r/   r%    s@   




r%  rq  rl  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   ra  r  r,   r   r,  )rq  r&   rl  r$   r   r.   r.   r/   ry    s   
(


ry  entriesr   r{  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 r}  z/* Array of trait vtables */z8(CPyVTableItem){}, (CPyVTableItem){}, (CPyVTableItem){},z/* Start of real vtable */z(CPyVTableItem){}{}{},NULLr   r  r  )
r   r,  r   shadow_methodmethodget_group_prefixdeclr   r+   r,   )
r  r6  r&   r{  r  rl  r   offset_tableentryr  r.   r.   r/   rx    s.   


	

rx  	func_namer<  FuncIR | NonerF  
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 tdt| jtD ]}||}| d| d qr| 	dr|
 r| d|j}| dt | d t| jD ]$}	|	j D ]\}
}||}|dkr| d||
 d| d qq|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)rs  z *self;zself = (z *)type->tp_alloc(type, 0);if (self == NULL)    return NULL;if (type != ) {zself->vtable = r   } else {rt  r   self->z = 0;rE   zself->vectorcall = r  r  Nz#if ({}{}((PyObject *)self) == 0) {{Py_DECREF(self);return NULL;zreturn (PyObject *)self;)r   r  r,   r   r`  r_  r]  r   r^  r+  r   method_declr+   r   r[  r\  ra  r   c_undefined_valuer   r  r,  r   )r$   r  r<  r6  rF  r&   ri  rH  r   rh  r   rj  rI  r.   r.   r/   r/  %  sL   
	





	
	r/  r   r=  r2  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.rs  PyObject *self = (z);r  r  r~  selfc                 S  s   g | ]}t |j qS r.   )r   r   ).0argr.   r.   r/   
<listcomp>l  s    z2generate_constructor_for_class.<locals>.<listcomp>Nzchar res = {}{}{}({});zif (res == 2) {r  r  rt  r   z
int res = z
->tp_init(zif (res < 0) {return self;)r   r	   r   r.  sigargsr,  r  r  r   r+   r,   r_  )r$   r%   r=  r2  r6  r&   r  r.   r.   r/   r0  ^  s6   	












r0  c                 C  sv   |  |j d}|d || d |d | js!| jr/|dt||j n|d |d |S )zGenerate an init function suitable for use as tp_init.

    tp_init needs to be a function that returns an int, and our
    __init__ methods return a PyObject. Translate NULL to -1,
    everything else to 0.
    _init
static intz0(PyObject *self, PyObject *args, PyObject *kwds)rs  z/return {}{}(self, args, kwds) != NULL ? 0 : -1;	return 0;rt  )r  r,   r   r$  r   r,  r   r+   )r$   r=  r&   r  r.   r.   r/   r5     s   



r5   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)rs  r  r  zUPyErr_SetString(PyExc_TypeError, "interpreted classes cannot inherit from compiled");r  rt  return z(type);r  r  r  zPyObject *ret = z(self, args, kwds);zif (ret == NULL)r  )	r   r$  r   r   is_serializabler  r   r+   r,   )r$   r  r6  r2  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  rs  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");rt  r  )r   r   )r$   r  r&   r.   r.   r/   r(    s   





r(  c                 C  s   | d | | d| |j d | d t| jD ]}|j D ]\}}|d|| | q%qt	| |rB| d n| j
r_| |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)rs  r  z8PyObject_VisitManagedDict((PyObject *)self, visit, arg);&*((PyObject **)((char *)self + sizeof()));*((PyObject **)((char *)self + sizeof(PyObject *) + sizeof(r  rt  N)r   r  r,   r[  r\  ra  r   emit_gc_visitr   r  r  r!   r$   r  r&   rh  r   rj  r  r.   r.   r/   r!    s,   




r!  c                 C  s   | d | | d| |j d | d t| jD ]}|j D ]\}}|d|| | q%qt	| |rB| d n| j
r_| |j}|d| dt |d	| dt | d
 | d d S )Nr  r   *self)rs  r  z,PyObject_ClearManagedDict((PyObject *)self);r  r  r  r  rt  )r   r  r,   r[  r\  ra  r   emit_gc_clearr   r  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  rs  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)rt  )r   r  r,   )r$   r  r  r&   r.   r.   r/   r#    s   




r#  r   c                 C  s   | d| d | j D ]J}|jjs|jjrq| d|j d | dt ||j	 d ddg}|jj
tkrB|d	 n|jj
tkrM|d
 | dd| q| dsi| dsi|dd | d | d d S )Nzstatic PyMethodDef r   {"",z (PyCFunction)r  METH_FASTCALLMETH_KEYWORDSMETH_STATIC
METH_CLASSz {}, NULL}},r  __setstate____getstate__z@{"__setstate__", (PyCFunction)CPyPickle_SetState, METH_O, NULL},zE{"__getstate__", (PyCFunction)CPyPickle_GetState, METH_NOARGS, NULL},{NULL}  /* Sentinel */r   )r   methodsvaluesr  is_prop_setteris_prop_getterr   r   r+   r,   kindr   r*  r   r,  r.  r+  r  )r$   r   r&   r%   rG  r.   r.   r/   r)    s&   

r)  r?  rA  c                 C  sf   |  |j d| }|d| d| d | D ]\}}|d| d| d q|d |S )	N_zstatic rW  z = {r  r  r  r   )r  r,   r   r   )r$   r   r?  rA  r&   rH  rI  r.   r.   r/   r  0  s   
r  c              	   C  s   | j s7| jD ]0}|d |dt| ||j| |j |d |dt| ||j| |j q| j	 D ];\}\}}|j
jrGq<|d |dt| ||j| |j |rw|d |dt| ||j| |j q<d S )Nr  z{}({} *self, void *closure);r  z-{}({} *self, PyObject *value, void *closure);)r   ra  r   r,  rR  r,   r  rU  
propertiesr   r  implicit)r$   r&   r   propgettersetterr.   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 ]=\}\}}|j	j
rCq8| d| d | dt| ||j d |rp| d	t| ||j d | d
 q8| d q8| jr~| d | d | d d S )Nzstatic PyGetSetDef r   r  r  z (getter){}, (setter){},z NULL, NULL},z	 (getter)r  z	 (setter)zNULL, NULL},zNULL, NULL, NULL},z?{"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},r  r   )r   r   ra  r,  rR  r,   rU  r  r   r  r  r  )r$   r   r&   r   r  r  r  r.   r.   r/   r'  a  s.   


r'  c           	      C  s   | j s2t| j D ]'\}\}}t| ||| |d t| ||| |t| jd k r1|d q
| j D ]2\}\}}|j	j
rBq7|jj}|d t| |||| |ri|jjd j}|d t| |||| q7d S )NrX  r   )r   	enumeratera  r   generate_getterr   generate_setterr_  r  r  r  r  ret_typegenerate_readonly_getterr  r?  generate_property_setter)	r$   r&   ri  r   rj  r  r  r  arg_typer.   r.   r/   r1    s(   



r1  rj  r    c              	   C  s   | |}|d |dt| ||j| |j |d d| }| |o.|j }|s]|j||d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)rs  r  z==r  T)unlikely%PyErr_SetString(PyExc_AttributeError,z    "attribute z of z undefined");r  rt  retvaldeclare_destzreturn retval;)r   r   r,  rR  r,   r  is_always_definedis_refcountedemit_undefined_attr_checkreprr   emit_inc_refemit_box)r$   r   rj  r&   
attr_field	attr_expralways_definedr.   r.   r/   r    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
rzd| }|sj|||dd||  |d| | |sz|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 |jr|s|dd|| | |r|d |d| d|| d |jr|d|| | |d |d
 d S )Nr  ,{}({} *self, PyObject *value, void *closure)rs  zif (value == NULL) {r  z    "z object attribute z cannot be deleted");z
return -1;rt  r  z!=r  zif (value != NULL) {rI  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,  rU  r,   r  is_deletabler  r   r  r  r  emit_dec_ref
is_unboxed
emit_unboxr   r#   r!   	emit_castr  r  error_overlapemit_attr_bitmap_setr  emit_attr_bitmap_clear)r$   r   rj  r&   r  	deletabler  r  r.   r.   r/   r    sX   














r  func_irc              	   C  s   | d | dt| ||j| |j | d |jrF| d||t||j |	d|d |j
dd|dd	 | d
 n| dt ||j d | d d S )Nr  r  rs  z#{}retval = {}{}((PyObject *) self);r  r  retboxTr  zreturn retbox;r  z((PyObject *) self);rt  )r   r,  rR  r,   r  r  rb  r   r+   emit_error_checkr  )r$   r   rj  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  rs  rI  r  r  Tr  z((PyObject *) self, tmp);z((PyObject *) self, value);r  rt  )
r   r,  rU  r,   r  r  r  r   r   r+   )r$   r   r  r  r&   r.   r.   r/   r    s"   


r  c                 C  s   |j dko| jo| jdkS )z6Should the class get the Py_TPFLAGS_MANAGED_DICT flag?r   PyBaseExceptionObject)r  r  r   )r$   r&   r.   r.   r/   r    s
   
r  N)r$   r   r%   r   r&   r   r'   r(   )r   r(   r'   r(   )r$   r   r   rL   r&   r   r'   r   )
r$   r   r   r   r   r   r&   r   r'   r   )r$   r   r   r(   r&   r   r'   r   )r$   r   rK  r(   r,   r"   r'   r(   )r$   r   r&   r   r'   r   )rh  r   r;  r(   r6  r(   r&   r   r  rk  r'   r(   )
rq  r(   r&   r   rl  r   r$   r   r'   r   )r  r   r6  r(   r&   r   r{  r  r  rk  r'   r   )r$   r   r  r(   r<  r  r6  r(   rF  r  r&   r   r'   r   )r$   r   r%   r   r=  r  r2  r(   r6  r(   r&   r   r'   r   )r$   r   r=  r   r&   r   r'   r(   )r$   r   r  r(   r6  r(   r2  r(   r=  r  r&   r   r'   r   )r$   r   r  r(   r&   r   r'   r   )
r$   r   r  r(   r  r(   r&   r   r'   r   )r$   r   r   r(   r&   r   r'   r   )r$   r   r   r(   r?  r(   rA  r   r&   r   r'   r  )
r$   r   r   r(   rj  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'   rk  )X__doc__
__future__r   typingr   r   r   mypyc.codegen.emitr   r   r   mypyc.codegen.emitfuncr	   mypyc.codegen.emitwrapperr
   r   r   r   r   r   r   r   r   r   mypyc.commonr   r   r   r   r   mypyc.ir.class_irr   r   mypyc.ir.func_irr   r   r   r   mypyc.ir.rtypesr   r    r!   mypyc.namegenr"   mypyc.sametyper#   r0   r2   r(   SlotGeneratorrL   rM   __annotations__rU   rX   r   r   r  r   r=   r   r   r   rJ  rR  rU  r   r%  ry  rx  r/  r0  r5   r   r(  r!  r"  r#  r)  r  r&  r'  r1  r  r  r  r  r  r.   r.   r.   r/   <module>   s6   0




 !"#%&9	

	



 
0


 
V

#
9
*

%






&



9
