
    Ng                    .   d dl mZ d dlZd dlZd dlZ	 d dlZn# e$ r d dlZY nw xY w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 dd	lmZ dd
lmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ h dZd Z d9dZ! G d de"          Z# G d de"          Z$ G d de$          Z% G d de"          Z& G d de&          Z' G d de&          Z(dZ) G d de&          Z* G d d e&          Z+ G d! d"e&          Z, G d# d$e+          Z- G d% d&e-          Z. G d' d(e&          Z/ G d) d*e&          Z0 G d+ d,e0          Z1 G d- d.e0          Z2 G d/ d0e&          Z3 G d1 d2e&          Z4 G d3 d4e&          Z5 G d5 d6e&          Z6 G d7 d8e&          Z7dS ):    )absolute_importN   )try_finally_contextmanager   )warningerrorInternalErrorperformance_hint)EncodedString)OptionsNaming)
PyrexTypes)py_object_typeunspecified_type)pyfunction_signaturepymethod_signaturerichcmp_special_methodsget_slot_tableget_property_accessor_signature)Future)Code>$   _Complex, _Imaginarydoifforintautocasecharelseenumgotolongvoid_Boolbreakconstfloatshortunionwhiledoubleexterninlinereturnsignedsizeofstaticstructswitchdefaulttypedefcontinueregisterrestrictunsignedvolatilec                     | d d         dk    r#|                      t          j                  s| dv r	| t          v rt          j        | z   } | S )Nr   __)__weakref____dict__)
startswithr   pyrex_prefixiso_c99_keywords)cnames    R/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/Symtab.pyc_safe_identifierrE   '   sU    	rrd		E$4$4V5H$I$I	',0K'K'K(((#e+L    c                 t   	 |                      d           n# t          $ r |                      d                              dd                              d          } |r|d| } nJ|                     t
          j                  r+|                     t
          j        t
          j        d          } Y nw xY w| S )Nasciipunycode   -   __r   )encodeUnicodeEncodeErrorreplacedecoder@   r   rA   pyunicode_identifier_prefix)rC   mangle_withs     rD   punycodify_namerS   /   s    IW I I IZ((00t<<CCGLL 		I  +{{EE2EEf122 	I MM&"5"("DaI IEI Ls    BB54B5c                       e Zd ZdZd Zd ZdS )	BufferAuxFc                 "    || _         || _        d S N)buflocal_nd_var	rcbuf_var)selfrX   rY   s      rD   __init__zBufferAux.__init__I   s    ."rF   c                     d| j         z  S )Nz<BufferAux %r>)r?   rZ   s    rD   __repr__zBufferAux.__repr__M   s    $-//rF   N)__name__
__module____qualname__writable_neededr[   r^    rF   rD   rU   rU   F   s7        O# # #0 0 0 0 0rF   rU   c                      e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(g Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLddZMd ZNd	 ZOd
 ZPd ZQd ZRd ZSeTd             ZUd ZVd ZWdS )EntryFr    NprivateTc                     || _         || _        || _        || _        || _        g | _        g | _        g | _        g | _        | | _	        d S rW   )
namerC   typeposinitoverloaded_alternativescf_assignmentscf_referencesinner_entriesdefining_entry)rZ   ri   rC   rj   rk   rl   s         rD   r[   zEntry.__init__   sS    	
		')$ "rF   c                 f    dt          |           j        t          |           | j        | j         fz  S )Nz%s(<%x>, name=%s, type=%s))rj   r_   idri   r]   s    rD   r^   zEntry.__repr__  s+    +tDzz/BBtHHdiY]Yb.cccrF   c                 0    t          | j        d           d S )NPrevious declaration is here)r   rk   r]   s    rD   already_declared_herezEntry.already_declared_here  s    dh677777rF   c                 ^    t          |d| j        z             |                                  d S )Nz('%s' does not match previous declaration)r   ri   rv   )rZ   rk   s     rD   
redeclaredzEntry.redeclared	  s2    c=	IJJJ""$$$$$rF   c                     | g| j         z   S rW   )rm   r]   s    rD   all_alternativeszEntry.all_alternatives  s    v444rF   c                     | g| j         z   S rW   )rp   r]   s    rD   all_entrieszEntry.all_entries  s    v***rF   c                     t          | t                    r3t          |t                    r| j        | j        f|j        |j        fk     S t          S rW   )
isinstancere   ri   rC   NotImplemented)leftrights     rD   __lt__zEntry.__lt__  sH    dE"" 	"z%'?'? 	"Itz*ej%+-FFF!!rF   c                 2    t          | j                  dk    S Nr   )lenrn   r]   s    rD   cf_is_reassignedzEntry.cf_is_reassigned  s    4&''!++rF   c                     | j         j        sJ d| _        | j        rJ t          j                            dd          | _        d S )NTOptionalLocalsCppSupport.cpp)rj   is_cpp_classis_cpp_optionalutility_coder   UtilityCodeload_cachedutility_code_definitionr]   s    rD   make_cpp_optionalzEntry.make_cpp_optional  sM    y%%%%#$$$$'+'7'C'CDTVf'g'g$$$rF   c                 &    | j         r	|| j         v ndS NF)pytyping_modifiers)rZ   modifier_names     rD   declared_with_pytyping_modifierz%Entry.declared_with_pytyping_modifier#  s    ;?;R]} 777X]]rF   NN)Xr_   r`   ra   inline_func_in_pxdborrowedrl   
annotationpep563_annotation
visibility
is_builtin
is_cglobalis_pyglobal	is_memberis_pyclass_attris_variableis_cfunction
is_cmethodis_builtin_cmethodis_unbound_cmethodis_final_cmethodis_inline_cmethodis_anonymousis_type	is_cclassr   is_constis_propertyis_cproperty	doc_cnamegetter_cnamesetter_cnameis_self_argis_argis_local
in_closurefrom_closurein_subscopeis_declared_genericis_readonlypyfunc_cname
func_cnamefunc_modifiersfinal_func_cnamedocas_variablexdecref_cleanupin_cinclude	as_moduleis_inheritedpystring_cnameis_identifieris_internedused
is_specialdefined_in_pxdis_implementedapir   is_overridable
buffer_aux
prev_entrymight_overflowfused_cfunctionis_fused_specializedr   needs_propertyin_with_gil_blockfrom_cython_utility_codeerror_on_uninitializedcf_usedouter_entry
is_cgetterr   known_standard_library_importr   enum_int_valuevtable_typer[   r^   rv   rx   rz   r|   r   propertyr   r   r   rc   rF   rD   re   re   Q   sJ       v HDJJJJKIOKLJLGILHKLILLKFHJLKKLJN
CKOKILNMKDJNN
CLNJJNO "N#"GKJO$(!NK
# 
# 
# 
#d d d8 8 8% % %5 5 5+ + +" " " , , X,h h h^ ^ ^ ^ ^rF   re   c                   (    e Zd ZdZdZd Zd Zd ZdS )
InnerEntryzK
    An entry in a closure scope that represents the real outer Entry.
    Tc                 n   t                               | |j        |j        |j        |j                   || _        || _        |}|j        r|j        }|j        || _        |j	        | _	        |j
        | _
        |j        | _        |j        | _        |j        | _        | j	                            |            d S rW   )re   r[   ri   rC   rj   rk   r   scoperq   rp   rn   ro   rm   r   append)rZ   r   r   outermost_entrys       rD   r[   zInnerEntry.__init__-  s    t[-"("'"	( 	( 	( '
 &) 	:-9O ) 	:-,:-<,:'6'N$.>!!$'''''rF   c                 t    |                     d          rt          |          t          | j        |          S )Nr=   )r@   AttributeErrorgetattrrq   rZ   ri   s     rD   __getattr__zInnerEntry.__getattr__A  s7    ??4   	' &&&t*D111rF   c                 4    | j                                         S rW   )rq   r|   r]   s    rD   r|   zInnerEntry.all_entriesG  s    "..000rF   N)r_   r`   ra   __doc__r   r[   r   r|   rc   rF   rD   r   r   '  sR          L( ( ((2 2 21 1 1 1 1rF   r   c                      e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZg ZdZd Zd ZdAdZd	 Zd
 ZdBdZd Zd ZdBdZd Z d Z!d Z"e#dBd            Z$dCdZ%d Z&dDdZ'	 	 dEdZ(	 	 dFdZ)	 	 	 dGdZ*	 	 dHdZ+d Z,d Z-	 dId Z.d! Z/	 	 dJd"Z0dKd#Z1d$ Z2d% Z3dLd&Z4dMd'Z5d( Z6d) Z7d* Z8	 	 dNd+Z9	 	 dOd,Z:dPd-Z;d. Z<d/ Z=d0 Z>d1 Z?d2 Z@d3 ZAd4 ZBd5 ZCd6 ZDd7 ZEd8 ZFd9 ZGd: ZHd; ZId< ZJd= ZKd> ZLd? ZMdQd@ZNdS )RScoper   Frf   NTc                    || _         || _        || _        dt          |          |                    dd          fz  }|                                 }|r*|                    |          | _        |j        |z   | _        nt          |          | _        || _        i | _
        t                      | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        i | _        i | _        i | _        i | _        i | _        g | _        g | _        i | _        | j        D ],}|                     t          |          t@          d            -d S )Nz%d%s_._dot_rk   )!ri   outer_scopeparent_scoper   rO   qualifying_scopequalify_namequalified_namescope_prefixr   entriesset	subscopesconst_entriestype_entriessue_entriesarg_entriesvar_entriespyfunc_entriescfunc_entriesc_class_entriesdefined_c_classesimported_c_classescname_to_entryidentifier_to_entrynum_to_entryobj_to_entrybuffer_entrieslambda_defsid_countersscope_predefined_namesdeclare_varr   )rZ   ri   r   r   mangled_name
qual_scopevar_names          rD   r[   zScope.__init__  sx    	&(#d))T\\#w-G-G!HH**,,
 	-","9"9$"?"?D * 7, FD"/"5"5D ,D !!#"$ #%  3 	P 	PH]844n$OOOO	P 	PrF   c                     | S rW   rc   )rZ   memos     rD   __deepcopy__zScope.__deepcopy__      rF   c                    g }|j                                         D ]+\  }}|r||v r |j        s|r|                    ||f           ,| j                             |           dD ]e}t          | |          }t          d |D                       }	t          ||          D ])}|j        s|r|j        |	vr|                    |           *fd S )N)r   r   r   r   r   r   r   r   c              3   $   K   | ]}|j         V  d S rW   ri   ).0es     rD   	<genexpr>z!Scope.merge_in.<locals>.<genexpr>  s$      551555555rF   )r   itemsr   r   updater   r   ri   )
rZ   othermerge_unused	allowlistr   ri   entryattrself_entriesnamess
             rD   merge_inzScope.merge_in  s    =..00 	2 	2KD% 2	 1 1: 2 2NND%=111G$$$( 	/ 	/D #4..L5555555E -- / /J /, /EJe4K4K ''.../	/ 	/rF   c                 2    d| j         j        d| j        dS )N< >)	__class__r_   r   r]   s    rD   __str__zScope.__str__  s#      N333T5H5H5HIIrF   c                     | j         S rW   r   r]   s    rD   r   zScope.qualifying_scope  s      rF   c                 z    |rt          || j        |          S | j                            || j                  S rW   )rS   r   r   mangleri   rZ   prefixri   s      rD   r+  zScope.mangle  sD     	?"vvt7H7H$$#OPPP$++FDI>>>rF   c                 N    t           j        |d}|                     |          S )NrL   )r   rA   r+  )rZ   ri   r-  s      rD   mangle_internalzScope.mangle_internal  s*     #//6{{6"""rF   c                 H    | j         r| j                             |          S |S rW   )r   mangle_class_private_namer   s     rD   r1  zScope.mangle_class_private_name  s*     	E$>>tDDDrF   c                     |                                  j        }	 ||         dz   }n# t          $ r d}Y nw xY w|||<   |r|s|S d||fz  S d|z  S )Nr   r   z%s%dz%d)global_scoper  KeyError)rZ   ri   counterscounts       rD   next_idzScope.next_id  s    $$&&2	TNQ&EE 	 	 	EEE	 	  T5M))%<s   ' 66c                 4    | j                                         S z6 Return the module-level scope containing this scope. )r   r3  r]   s    rD   r3  zScope.global_scope  s    ,,...rF   c                 4    | j                                         S r9  )r   builtin_scoper]   s    rD   r;  zScope.builtin_scope  s    --///rF   c              #      K   | V  | j         r/t          | j         t          j        d                    D ]}|V  d S d S )Nr   )key)r   sortedoperator
attrgetter)rZ   r   s     rD   iter_local_scopeszScope.iter_local_scopes  sa      


> 	H4G4W4WXXX  	 	 rF   c              #   @   K   | j         }||| _         d V  || _         d S rW   )in_c_type_context)rZ   rC  old_c_type_contexts      rD   new_c_type_contextzScope.new_c_type_context  s4      !3(%6D"!3rF   c	                 l   |j         r%t          | t                    st          |d           | j        s+|r)t          j        d|          rt          |d|z  d           | j        }	|r||	v r|s| j	        s|	|         }
d}|j
        rU|
j        j
        rI|                                 r5|
                                D ]}||j        k    r|dk    r	|j        sd} nd}|rnl| j        r|	|         j        rnW|dk    rt          |d	|z  | j        rd
nd           n3|dk    r-t          |d	|z             |	|                                          t%          ||||          }| j        |_        ||_        |r!|                     |          |_        |s||	|<   |j        r|j        |_        | |_        ||_        |S )Nz5Buffer types only allowed as function local variablesz
^_[_A-Z]+$z'%s' is a reserved name in C.F<init>Tr-   '%s' redeclared r   r   ignorer   )	is_bufferr~   
LocalScoper   r   rematchr   r   is_builtin_scoper   rj   is_cpprz   argsis_cpp_class_scoper   rv   re   create_wrapperr   r   is_memoryviewslicedefault_valuerl   r   r   )rZ   ri   rC   rj   rk   r   shadowr   rS  r   	old_entrycpp_override_allowed	alt_entryr  s                 rD   declarezScope.declare  s3    > 	P*T:">"> 	P#NOOO 	FE 	Fbh|U.K.K 	FC85@"EEE, 	6DGOOFO4;POI $)   0Y^%@ 0T[[]] 0!*!;!;!=!= 0 0Iy~--8++DI+370	 . ,0(# 6( 	6WT]-G 	6x'' /$6T=M8TSTUUUUx''c-455533555dE4s333 ,- 	&#'#4#4T#:#:E 
  & %" 	,+EJ%rF   c                 4    t          | j        d|          S Nr   )r   r   r   s     rD   r   zScope.qualify_name;  s     (;(;(;TTBCCCrF   rg   c	                     |s2| j         s|dk    s|r|}n |                     t          j        |          }|                     ||||||          }	d|	_        ||	_        |	S )Npublic)rS  r   )r   r+  r   enum_prefixrZ  r   
value_node)
rZ   ri   rj   valuerk   rC   r   r   rS  r  s
             rD   declare_constzScope.declare_const>  ss     	> >J($:$:c$:F$6==T5$ZR`aa rF   r   c
           	          |s|}|                      ||||||d          }
d|
_        ||
_        |r| j                            |
           |	st          |dd           |
|_        |
S )NT)r   r   r  )rZ  r   r   r   r   r   r  )rZ   ri   rj   rk   rC   r   r   definingrV  templater  s              rD   declare_typezScope.declare_typeJ  s      	ET5$Z%)  + +	 	,$$U+++  	GD'488@DJ rF   c                    |s2| j         s|dk    s|r|}n |                     t          j        |          }	 | j        r%| j                            | j                  j        }nd }t          j
        ||||dk    |          }n># t          $ r1}	t          ||	j        d                    t          j        }Y d }	~	nd }	~	ww xY w|                     ||||||          }
|
j        |_        |
S )Nrg   r-   r   )r   r   )r   r+  r   type_prefixrR  r   lookupri   rj   r   create_typedef_type
ValueErrorr   rQ  
error_typerf  r   )rZ   ri   	base_typerk   rC   r   r   	namespacerj   r  r  s              rD   declare_typedefzScope.declare_typedef^  s    	> >J)$;$;s$;F$6==
	)& ! ,33DI>>C		 	1$	53=3I2;= =DD  	) 	) 	)#qvay!!!(DDDDDD	) !!$c5/9 " F F#2s   A
B 
B<'B77B<c
           
      F   |s2| j         s|dk    s|r|}n |                     t          j        |          }|                     |          }
|
so|                                 }t          j        ||||||	|          }|                     |||||||d u          }
| j	        
                    |
           |
|_        n|
j        r|
j        j        r|
j        j        |k    st!          |d|z  d           ny|r!|
j        j        rt!          |d|z  d           nV|                     |
||           |                     |
||           |r&||
j        _        | j        
                    |
           | j        r.| j                            | j                  j        |
j        _        |
S )Nr^  )in_cpp)r   r   rd  '%s' redeclared  r   2'%s' already defined  (ignoring second definition))r   r+  r   rh  lookup_hererP  r   CStructOrUnionTyperf  r   r   r  r   rj   is_struct_or_unionkindr   r   check_previous_typedef_flagcheck_previous_visibilityr   rR  r   ri  ri   rn  )rZ   ri   rw  r   typedef_flagrk   rC   r   r   packedr  rq  rj   s                rD   declare_struct_or_unionzScope.declare_struct_or_unionu  s   
  	> >J($:$:c$:F$6==  && 	4[[]]F0dE<! ! !D %%dD#u's , & . .E ##E***DJJM 
4ej&C 
4
4//047;;;; 45:+ 4QTXXZ[\\\\00cJJJ..uj#FFF 4',EJ$%,,U333" 	K#'#3#:#:49#E#E#JEJ rF   rc   r-   c           	        
 |0| j         s|dk    r|}n |                     t          j        |          }t	          |          }|                     |          }|sRt          j        |||||          }	|                     ||	|||d u          }| j	        
                    |           n|j        r|j        j        s)t          d|z             |                                 d S |r!|j        j        rt#          d|z  d           n(|r&||j        _        | j        
                    |           |rM|j        j        r5|j        j        |k    r%t          d           |                                 n||j        _        |s|j        j        r4||j        j        k    r$t          d           |                                 
fd	
|rA 
||           |                    d
d
t          j        |j                  |j                   | j        r.| j                            | j                  j        |j        _        |S )Nrg   )	templates)r   rd  rI  rs  r   -Base type does not match previous declarationz5Template parameters do not match previous declarationc                     |D ]Y}|t           j        u r|j        t          d           ) | |j                   | j        j                            |           Zd S )Nz#Cannot inherit from incomplete type)r   rl  r   r   base_classesrj    declare_inherited_cpp_attributes)r  r  
base_classdeclare_inherited_attributesrk   s      rD   r  z=Scope.declare_cpp_class.<locals>.declare_inherited_attributes  s    * R R
!666#+#DEEEE00
8OPPPJ$EEjQQQQR RrF   this)ri   rC   rj   rk   )r   r+  r   rh  listrt  r   CppClassTyperf  r   r   r   rj   r   r   rv   r   r   r   r  r~  r
  CPtrTyperk   rR  r   ri  ri   rn  )rZ   ri   r   rk   rC   r  r   r~  r  rj   r  s      `      @rD   declare_cpp_classzScope.declare_cpp_class  s    = >J)$;$;F$6==L))  && 	2*eULiI I ID%%dD#u'E4E & G GE##E****M 	4ej&= 	4c-4555++---t 45:+ 4QTXXZ[\\\\ 4',EJ$%,,U333 ;:* ;uz/F,/V/V#NOOO//1111.:EJ+ 2EJ0 2
 444#VWWW//111	R 	R 	R 	R 	R 	R  	n((===6j>QRWR\>]>]chclmmm" 	K#'#3#:#:49#E#E#JEJ rF   c                     ||j         j        k    r.t          |d|j        dd|j         j                 d           d S d S )N'z' previously declared using ')cdefctypedef)rj   rz  r   ri   )rZ   r  rz  rk   s       rD   rx  z!Scope.check_previous_typedef_flag  sa    5:222##


01HIIIK L L L L L 32rF   c                 b    |j         |k    r#t          |d|j        d|j         d           d S d S )Nr  ' previously declared as ')r   r   ri   )rZ   r  r   rk   s       rD   ry  zScope.check_previous_visibility  sQ    z))##


E,,,. / / / / / *)rF   c
                 Z   |r|s8| j         s|dk    s|dk    s|r|}n |                     t          j        |          }| j        r%| j                            | j                  j        }
nd }
|rt          j
        |||
|	          }n&t          j        ||||
|	          }nt          j        }|                     ||||||          }|r:t          j                            dd          |_        |                     |           ||_        g |_        | j                            |           |S )Nr^  r-   )r   )rC   r   r   EnumClassDeclr   )r   r+  r   rh  rR  r   ri  ri   rj   r   CppScopedEnumType	CEnumTypec_anon_enum_typerf  r   r   r   r   use_entry_utility_coderS  enum_valuesr   r   )rZ   ri   rk   rC   scopedrz  r   r   rS  r   rn  rj   r  s                rD   declare_enumzScope.declare_enum  sY    	/ B$ B
h(>(>%11S1 EE KK(:DAAE& ! ,33DI>>C		 	 [!3D%PSTTT!+D%yVYZZZ.D!!$c5#3 " 0 0 	/!%!1!=!=oO_!`!`E''...-&&&rF   c                 8    | j                             ||          S rW   )r   declare_tuple_type)rZ   rk   
componentss      rD   r  zScope.declare_tuple_type  s    223
CCCrF   c
                    |s+|dk    s|r|}n |                      t          j        |          }|                     |||||          }
d|
_        |j        r=|dk    r7| j        d         r|
                                 n|                    |           |r|dk    rd|
_	        d|
_
        |rd|
_        d|
_
        |	r|	|
_        |
S )Nrg   r   r-   
cpp_locals)r+  r   
var_prefixrZ  r   r   
directivesr   check_nullary_constructorr   r   r   r   rZ   ri   rj   rk   rC   r   r   in_pxdis_cdefr   r  s              rD   r
  zScope.declare_var  s      	=Y&&#&F$5t<<T5$Z@@ 	4x!7!7|, 4''))))..s333 	jH,,#$E EJ 	EIEJ 	:'9E$rF   c                 F    |sd S |D ]}||vrt          |d|z             d S )Nz"Modifier '%s' is not allowed here.)r   )rZ   rk   	modifiersallowedmodifiers        rD   _reject_pytyping_modifiersz Scope._reject_pytyping_modifiers  sN     	F! 	L 	LHw&&c?(JKKK	L 	LrF   c                 0    |                      |||          S rW   r
  rZ   ri   rj   rk   s       rD   $declare_assignment_expression_targetz*Scope.declare_assignment_expression_target  s     dC000rF   c                 b    |                      |          }| j                            ||          S rW   )r1  r   declare_builtinrZ   ri   rk   s      rD   r  zScope.declare_builtin"  s.    --d33//c:::rF   c                     |r4|j         j        s(t          |d|z             t          |j        d           |                     |t
          ||          }t          |_        | j        	                    |           |S )Nz'%s' already declaredru   r   )
rj   r   r   rk   r
  r   r   	signaturer   r   )rZ   ri   rk   r   r  s        rD   _declare_pyfunctionzScope._declare_pyfunction&  s~     	=0 	=#.5666%);<<<  ~sz RR.""5)))rF   c                    |                      |          }|s|                     ||||          S |rA|j        j        rt          |_        nF|j        t          ur|                     ||||          S n|                     |t          ||           |                     d t          ||d          }t          |          |_        |                     |          |_	        t          |_        d|_        |S )N)r   r  r  rg   rC   r   T)rt  r  rj   is_unspecifiedr   r
  r   ri   r   r   r   r  r   )rZ   ri   rk   allow_redefiner   r  s         rD   declare_pyfunctionzScope.declare_pyfunction/  s     && 	[++D#*TY+ZZZ 	Oz( _+

>11//cjX]/^^^ 2 T>3:NNN  ~s'+	 ! C C"4((
#0066.!rF   c                 p   |                      t          j        dz   |          }|                      t          j        dz   |          }|                     |          }|                     d |t
          |d          }t          |          |_        ||_        ||_	        ||_
        t          |_        d|_        |S )Nfuncdef_methdef_rg   T)r+  r   lambda_func_prefixr   rZ  r   r   ri   r   pymethdef_cnamer   r   r  r   )rZ   lambda_namerk   r   r  r   r  s          rD   declare_lambda_functionzScope.declare_lambda_functionC  s    [[!:[!H+VV
++f&?+&M{[[**;77T:~sINN";//
- /%.!rF   c                 :    | j                             |           d S rW   )r  r   rZ   def_nodes     rD   add_lambda_defzScope.add_lambda_defR  s    )))))rF   c                 :    | j                             |           d S rW   )r   r   rZ   r  s     rD   register_pyfunctionzScope.register_pyfunctionU  s    ""5)))))rF   c           
         |s+|dk    s|r|}n |                      t          j        |          }d|	v o|o|}|rd}|                     |          }|r|s(||j        k    r|dk    rd}|j        }||_        ||_        |dk    r+||j        k    r t          |d|d|j        d|d	d
           ||j        k    rt          |d|d|rdndd	d
           |j	        
                    |          r&|j	                            |j                  |_	        nR|dk    r|j        dk    r| j        }|                                 rd}n1|r/|s-|                                D ]}|j        r||j        k    r nd}|r6|                     ||||||	          }|                                |_        |}nt          |dd
           ||_	        n|sf|j        r_|                    |j	                  rE|j	        j        r1|j	        j        %|j        rt-          |j        d|j        z  |            ||_	        n9t3          |d           n(|                     ||||||	          }||_        ||_        |rd|_        |r|dk    rd
|_        |rd
|_        |s|s|dk    rt3          |d|z             |rd|_        |	r|	|_        |
r|j        rJ d|d|d            |
|_        |rQt?          ||t@                    }| !                    |          |_"        d
|_#        d
|_$        |j%        |_%        ||_&        ||_'        |j(        rC|j        <|j        r5|d         j)        s(|r&|s$|s"tU          j+        || ||j,        j-                   |S )Nrg   r.   Fr-   Tz
Function 'r  z', now as 'r  r   cpdefr  6Function signature does not match previous declarationzNo exception value declared for '%s' in pxd file.
Users cimporting this function and calling it without the gil will always require an exception check.
Suggest adding an explicit exception value.3Non-extern C function '%s' declared but not definedz+duplicate utility code definition in entry z ()r   )function_namevoid_return).r+  r   func_prefixrt  r   rC   r   r   r   rj   same_aswith_with_gilwith_gilrO  rP  rz   add_cfunctionrm   r   compatible_signature_withnogilexception_valuer
   rk   ri   r   r   r   r   r   r   re   r   r   r   r   r   r   r   r  exception_checkin_utility_coder   write_noexcept_performance_hintreturn_typeis_void)rZ   ri   rj   rk   rC   r   r   r  rd  r  r   overridableinline_in_pxdr  can_overriderY  temp	var_entrys                     rD   declare_cfunctionzScope.declare_cfunctionX  s     	>Y&&#&F$6== I-E&EX 	F  && 9	/ )jE,<<<xAWAW  "-
##( Y&&:9I+I+IDD%***JJJ89:< < <e222DD[<''f<<>?@B B Bz!!$'' 'Y"Z55dmDD

))e.>(.J.J#'#8L{{}} 	0'+ 0| 0 */)?)?)A)A 0 0I#,? &ey6N6N % 7O ,0L# *#11$c5*V_``7<7M7M7O7O4 $%]_`aaa%)

 YE$8 YT=[=[\a\f=g=g Y z' "EJ,F,NSWSg,N(!IJ MRJW !" " " "&EJJ#WXXXX&&tT3z9UUE$E#.E  	,'+E$ 	%jH,,#$E  	EI 	U 	U:+A+A#LtSTTT 	(#'E  	-#,E  	.)ooocgcgcgininin+oooo!-E 	*dE>::I'+'8'8'>'>I$$%I!$%I!#kIO )E
  	UT%9%Adj%AF* &B  &B "( &B 1> &B 6T4;K;SU U U UrF   c           	          t          d |D                       sJ t          j        |t          j        d| j        d           gfi |}	|                     ||	|d |||          }
d|
_        |||
_        |
S )Nc              3      K   | ]}|d v V  	dS ))r  r  r  r  is_const_methodis_static_methodNrc   )r  ks     rD   r  z(Scope.declare_cgetter.<locals>.<genexpr>  s<       
 
 ss
 
 
 
 
 
rF   rZ   )rC   r   r  rd  T)allr   	CFuncTypeCFuncTypeArgparent_typer  r   r   )rZ   ri   r  rk   rC   r   r  rd  cfunc_type_config
cfunc_typer  s              rD   declare_cgetterzScope.declare_cgetter  s     
 
&
 
 
 
 
 	
 	
 	
  )$VT-=tDDE! !  ! !
 &&*c*PYdl ' n n$ErF   c                 `   |                      |||||          }d|_        |r||_        |s|j        r| j                            |           n`t          | j                  }	t          | j                  D ]}
|
j        s|
j	        j        s n|	dz  }	| j        
                    |	|           |S r   )rZ  r   r   is_fusedr   r   r   reversedr   rj   insert)rZ   ri   rj   rk   rC   r   r  	inheritedr  icfunc_entrys              rD   r  zScope.add_cfunction  s    T5$Z@@ 	-#,E  
	0 
	0%%e,,,, D&''A'(:;;  + ;3C3L EQ%%a///rF   c                 ^    |                      |          }|r|S t          |d|z             d S )Nz'%s' is not declared)ri  r   rZ   ri   rk   r  s       rD   findz
Scope.find  s<    D!! 	6L#-455555rF   c                     | }|D ]T}|                     ||          }|s d S |j        r|j        },t          |dd                    |          z              d S |S )Nz'%s' is not a cimported moduler   )r  r   r   join)rZ   pathrk   r   ri   r  s         rD   find_imported_modulezScope.find_imported_module  sy      	 	DJJtS))E tt c;chhtnnLMMMttrF   c                 6   |                      |          }|                     |          p"| j        o| j                            |          pd }|r|S | j        r| j                            |          pd }|r"|j        r|                     |j        |           |S rW   )r1  rt  r   ri  r   _emit_class_private_warningrk   )rZ   ri   r  r  s       rD   ri  zScope.lookup  s     55d;;!!$'' $N)9)@)@)N)N 	  	L !Cd&6&=&=d&C&CL 	>U& 	>,,UY===rF   c                     | j                             |                     |          d           }|r|S | j                             |d           S rW   )r   getr1  rZ   ri   r  s      rD   rt  zScope.lookup_here  sP       !?!?!E!EtLL 	L |d+++rF   c                 8    | j                             |d           S rW   )r   r  r   s     rD   lookup_here_unmangledzScope.lookup_here_unmangled  s    |d+++rF   c                 ,    |                      |          S rW   )rt  r   s     rD   #lookup_assignment_expression_targetz)Scope.lookup_assignment_expression_target  s     %%%rF   c                     |                      |          }|s9|                     |          }|r"|j        r|                     |j        |           |s|                     |t          d           }|S rW   )rt  r  r   r  rk   r
  r   r  s      rD   lookup_targetzScope.lookup_target   s       && 	B..t44E B* B00DAAA 	A$$T>4@@ErF   c                     |r@|j         r;|j        j        r&| j        r|j                            | j                  S |j        S d S d S rW   )r   rj   r  fused_to_specific
specializer  s     rD   $_type_or_specialized_type_from_entryz*Scope._type_or_specialized_type_from_entry,  sa     	U] 	z" Et'= Ez,,T-CDDD:	 	 	 	rF   c                     |                      |          }|                     |          }|r|S |r|j        rddlm}  ||j                  }|                     |          S )Nr   ) get_known_standard_library_entry)ri  r	  r   Builtinr  )rZ   ri   r  tpr  s        rD   lookup_typezScope.lookup_type2  s    D!! 66u== 	I 	ZU8 	ZAAAAAA44U5XYYE88???rF   c                    |d         j         j        rk|d         j         }|j                            d|z            }|?d |dd          D             }t	          j        ||                                          }||S |                     d|z            }g }||                                }g }	t          |          dk    rgt          d          D ]W}
||
         j         j        rC||
         j         }|j                            d|z            }||	|                                z  }	X|	s|sd S t          t          |	|z                       }t	          j        d |D             |          S )Nr   z
operator%sc                     g | ]	}|j         
S rc   rj   r  args     rD   
<listcomp>z)Scope.lookup_operator.<locals>.<listcomp>G  s    >>>#SX>>>rF   r   r   c                     g | ]	}|j         
S rc   r  r  s     rD   r  z)Scope.lookup_operator.<locals>.<listcomp>`  s    %C%C%C3ch%C%C%CrF   )rj   r   r   ri  r   
best_matchrz   r   ranger  r   )rZ   r?  operandsobj_typemethod	arg_typesresfunctionfunction_alternativesmethod_alternativesnrz   s               rD   lookup_operatorzScope.lookup_operatorB  s   A;( 	{'H^**<(+BCCF!>>!"">>>	 +Iv7N7N7P7PQQ?J;;|h677 "$,$=$=$?$?! !x==A1XX I IA;#0 I'{/H%^22<(3JKKF)+v/F/F/H/HH+# 	.C 	4  $7:O$O P PQQ$%C%C(%C%C%C%57 7 	7rF   c                 x    ddl m}  G d d|          fd|D             }|                     ||          S )Nr   )Nodec                       e Zd ZdS )4Scope.lookup_operator_for_types.<locals>.FakeOperandN)r_   r`   ra   rc   rF   rD   FakeOperandr%  e  s        DrF   r&  c                 *    g | ]} |           S )r  rc   )r  rj   r&  rk   s     rD   r  z3Scope.lookup_operator_for_types.<locals>.<listcomp>g  s(    BBBDKK$///BBBrF   )Nodesr#  r!  )rZ   rk   r?  typesr#  r  r&  s    `    @rD   lookup_operator_for_typeszScope.lookup_operator_for_typesc  sr    	 	 	 	 	$ 	 	 	BBBBBEBBB##Hh777rF   c                 .    t          |d|z  d           d S )NzGlobal name %s matched from within class scope in contradiction to to Python 'class private name' rules. This may change in a future release.r   )r   )rZ   rk   ri   s      rD   r  z!Scope._emit_class_private_warningj  s7     CEIJKL	N 	N 	N 	N 	NrF   c                 T    |                                                      |           d S rW   )r3  use_utility_coderZ   new_codes     rD   r-  zScope.use_utility_codeo  s(    ,,X66666rF   c                 T    |                                                      |           d S rW   )r3  r  r  s     rD   r  zScope.use_entry_utility_coder  s(    22599999rF   c                 (    |D ]}|| j         v r dS dS Nr   r   )r   rZ   r   ri   s      rD   defines_anyzScope.defines_anyu  s/     	 	Dt|##qq $qrF   c                 L    |D ] }|| j         v r| j         |         j        r dS !dS r2  )r   r   r3  s      rD   defines_any_specialzScope.defines_any_special|  s:     	 	Dt|##T(:(E#qqqrF   c                 L    ddl m}  |                                |            d S )Nr   )get_type_inferer)TypeInferencer8  infer_types)rZ   r8  s     rD   r:  zScope.infer_types  s7    333333&&t,,,,,rF   c                 @    | j         }|dS |                                S r   )r   rP  )rZ   outers     rD   rP  zScope.is_cpp  s"     =5<<>>!rF   c                 >    | j                             |||           d S rW   )r   add_include_file)rZ   filenameverbatim_includelates       rD   r>  zScope.add_include_file  s$    ))(4DdKKKKKrF   )TNrW   )r   r   r   )Nrg   r   r   )Nrg   r   r   r   r   )Nrg   r   )Nrg   r   F)Nrc   r-   N)rg   r   r   NNrg   FFFN)rc   )r-   N)Fr-   Nrg   r   r   r   rc   NF)NNrg   rc   FFr   )Or_   r`   ra   rO  is_py_class_scopeis_c_class_scopeis_closure_scopeis_local_scopeis_generator_expression_scopeis_comprehension_scopeis_passthroughrR  is_property_scopeis_module_scopeis_c_dataclass_scopeis_internalr   r   r  r  r  r	  rC  r[   r  r!  r'  r   r+  r/  r1  r7  r3  r;  rA  r   rE  rZ  r   rb  rf  ro  r|  r  rx  ry  r  r  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  ri  rt  r  r  r  r	  r  r!  r*  r  r-  r  r4  r6  r:  rP  r>  rc   rF   rD   r   r   K  s       F N$%!NO KLKEK"P "P "PH  / / / /0J J J! ! !? ? ? ?# # #  
        / / /0 0 0    4 4 4  48 8 8 8tD D D
 
 
 
 GH#$   ( =A67   0 <@>?).# # # #L /1/34 4 4 4lL L L
/ / / @D   >D D D ,5OS   4L L L L1 1 1
; ; ;      (  * * ** * * KLSXf f f fP BFEJ   "   &6 6 6    $	, 	, 	,, , ,& & &

 
 
  @ @ @ 7 7 7B8 8 8N N N
7 7 7: : :    - - -" " "L L L L L LrF   r   c                   (    e Zd Zej        Zd Zd ZdS )PreImportScopec                 T    t                               | t          j        d d            d S rW   )r   r[   r   
pre_importr]   s    rD   r[   zPreImportScope.__init__  s#    tW/t<<<<<rF   c                 ^    |                      ||t          |d          }d|_        d|_        |S )Nrg   T)rZ  r   r   r   r  s       rD   r  zPreImportScope.declare_builtin  s0    T4iHH  rF   N)r_   r`   ra   r   preimport_cnamenamespace_cnamer[   r  rc   rF   rD   rQ  rQ    s:        ,O= = =    rF   rQ  c                   L    e Zd ZdZd Zd	dZd Zd	dZddej	        fdZ
d ZdS )
BuiltinScopeTc                     t           j        t                              | dd d            n)t                              | dt	                      d            i | _        |                     dt          d d           d S )N__builtin__boolz((PyObject*)&PyBool_Type))r   rS  r   r[   rQ  
type_namesr
  r   r]   s    rD   r[   zBuiltinScope.__init__  sn    %NN4d;;;;NN40@0@$GGG 	7RSSSSSrF   Nc                 X    |dk    r
||dv }|sd}t                               | |          S )Nstr)Nr   unicode)r   ri  )rZ   ri   language_level
str_is_strs       rD   ri  zBuiltinScope.lookup  s<    5==!+y8
 ! ||D$'''rF   c                     t          t          |          sY| j        | j                            ||          S t          j        rt          |d|z             d S t          |d|z  d           d S d S )Nundeclared name not builtin: %sr   )hasattrbuiltinsr   r  r   error_on_unknown_namesr   r   r  s      rD   r  zBuiltinScope.declare_builtin  s    x&& 	N+'77cBBB1 N#@4GHHHHHC!BT!I1MMMMM	N 	NrF   c                 >   t          |          }|                     ||d |d|          }|rp|dk    r|}nt          |          }t          ||t                    }|                     |          |_        d|_        d|_        ||_        |j	        |_	        ||_
        |S )Nr-   )r   r   *r   )r   r  re   r   r   r   r   r   r   r   r   )rZ   ri   rj   rC   python_equivr   r  r  s           rD   declare_builtin_cfunctionz&BuiltinScope.declare_builtin_cfunction  s     T""&&tT48bn&oo 	*s""#,\::lL.III'+'8'8'>'>I$$%I!#$I %1I"#kIO )ErF   c                 D   t          |          } ||||          }t          |d d|          }i |_        |dk    rd|_        |                    |           d| j        |<   |                     ||d d          }||_        t          |j	        | 
                    d          j        |j        |j        j                  }	|                     |          |	_        d|	_        d|	_        d|	_        d|	_        ||	_        | |	_        t*          j        rd|	_        |	|_        |S )	Nr-   )r   r   r  r[  Tr   r  rj   ri   rj   rk   rC   )r   CClassScoper  is_final_type	set_scoper\  rf  r   re   ri   ri  rj   rk   typeptr_cnamer   r   r   r   r   r   r   r   cache_builtinsr   r   )
rZ   ri   rC   r   objstruct_cname
type_classrj   r   r  r  s
             rD   declare_builtin_typez!BuiltinScope.declare_builtin_type  s3   T""z$77DdxUYZZZ6>>!%Du !!!$dx!HH)V$$)	**	
 
 
	 $(#4#4T#:#:	  !	 	 !	 	!-		! 	&!%I%rF   c                     | S rW   rc   r]   s    rD   r;  zBuiltinScope.builtin_scope  r  rF   r   )r_   r`   ra   rO  r[   ri  r  rj  r   BuiltinObjectTypert  r;  rc   rF   rD   rX  rX    s         	T 	T 	T( ( ( (N N N   & >B-1j>Z   @    rF   rX  c                       e Zd ZdZdZdZdZg dZd%dZd Z	d Z
d&d	Zd
 Zd Zd'dZd%dZd Zd(dZd Zd Zd Zd Z	 	 d)dZ	 	 d*dZd Zd Zd Z	 	 	 	 	 d+dZd Zd Zd Zd  Zd! Z d" Z!d# Z"d$ Z#dS ),ModuleScoper   r   )	__builtins__r_   __file__r   __path____spec__
__loader____package__
__cached__Fc                    ddl m} || _        |j        }t                              | |||           || _        || _        t          | j                  | _        || _	        t          j        | _        t          j        | _        t          j        | _        d| _        t          j        | _        g | _        i | _        i | _        t-          |j                  | _        d| _        g | _        t5                      | _        g | _        d| _        g | _        g | _        | j        | _         i | _!        | "                    tG          j$        dd                     d S )Nr   r  rf   r   zPython.hT)initial)%rf   r  parent_moduler;  r   r[   
is_packagemodule_namer   contextr   module_cnamemoddict_cnamemodule_dict_cnamemethtable_cnamemethod_table_cnamer   moddoc_cnamer   utility_code_listmodule_entries
c_includesdictr\  pxd_file_loadedcimported_modulesr   types_importedincluded_fileshas_extern_classcached_builtinsundeclared_cached_builtinsrV  _cached_tuple_typesprocess_includer   IncludeCode)rZ   ri   r  r  r  r  r   s          rD   r[   zModuleScope.__init__  s9   *+tT;>>>$()9::"/!'!5"("8,!# {566 !#!ee  !!*,'#0#% T-j$GGGHHHHHrF   c                     | j         S rW   )r  r]   s    rD   r   zModuleScope.qualifying_scope:  s    !!rF   c                     | S rW   rc   r]   s    rD   r3  zModuleScope.global_scope=  r  rF   Nc                     |                      |          }||S || j        | j        j        nd}|'|dk    p | j        d uot          j        | j        j        v}| j                            |||          S )N   r   )r`  ra  )rt  r  r`  r   unicode_literalsfuture_directivesr   ri  )rZ   ri   r`  ra  r  s        rD   ri  zModuleScope.lookup@  s      &&L!<@L<TT\88Z[N'1, lD(jV-DDLLj-j  &&tNWa&bbbrF   c                    t          |          }	 | j        |         }n.# t          $ r! t          j        |          x}| j        |<   Y nw xY w|j        }|                     |          }|st          |          }t          |          D ] \  }}|	                    d|z  ||           !| 
                    |dz   d|d||          }	| j                            |	           |	|_        |                     ||||          }||_        |S )Nzf%s)ri   rj   rk   _structr3   T)rz  rk   rC   )tupler  r4  r   c_tuple_typerC   rt  StructOrUnionScope	enumerater
  r|  r   removestruct_entryrf  r  )
rZ   rk   r  ttyperC   r  r   ix	componentr  s
             rD   r  zModuleScope.declare_tuple_typeM  sI   :&&
	_,Z8EE 	_ 	_ 	_;E;RS];^;^^ED,Z888	_  '' 	@&u--E!*:!6!6 L LI!!urz	s!KKKK77	!8U3V[ 8 ] ]L$$\222!-E%%eUC??Es    (A
	A
c                    t          t          |          s|t          j        vr|t          j        vr| j        r|                     |t          |          }|S t          j	        rt          |d|z             nt          |d|z  d           |                     |d t          |d          }d|_        |S t          j        r| j        D ]}|j        |k    r|c S |dk    r!| j        s| j                            d          S |                     d d t          |d          }t          j        rl|t          j        vr^d|_        d|_        ||_        t*          j        |z   |_        | j                            |           | j                            |           nd|_        ||_        |                                                     |          |_        |S )Nrc  r   rg   r   globals__Pyx_Globals)rd  re  r   non_portable_builtins_mapuncachable_builtinshas_import_starr
  r   r   rf  r   r   rZ  r   rq  r  ri   old_style_globalsr   ri  r   r   builtin_prefixrC   r   r  r;  r   r   r  s       rD   r  zModuleScope.declare_builtina  s   x&& 	t===t777# ((~sCC1 N#@4GHHHHC!BT!I1MMMT4iPP#$ ! 	!- ! !:%% LLL &9T%;#**?;;;LLt^S)LLE! 		d$2J&J&J EENEJ /$6EK ''...+2259999 EEJ#1133@@FFrF   rG  c                    |d uo|dk    }d }d}|0|dk    r*| }| j         rdnd}||k    r|r|j        }|dz  }||k    r|n|dk    r	| j        }d}|                                 }|j                            |||||          S )Nr   Fr   T)from_modulerk   absolute_fallbackrelative_import)r  r  r3  r  find_module)	rZ   r  rk   relative_levelis_relative_importr  r  	top_levelmodule_scopes	            rD   r  zModuleScope.find_module  s    
 ,47NNQ<N!%.1*<*< K!_3!I
 !9,,,)7!# !9,,, q  ,K $((**#//[cM^  qC 0 D D 	DrF   c                     d|v r|                     dd          \  }}nd }|                     |          }|s&t          || | j        |rdn|          }|| j        |<   |r|                    ||          }|S )Nr   r   T)r  r  r  )
as_package)splitlookup_submodulerx  r  r  find_submodule)rZ   ri   r  	submoduler   s        rD   r  zModuleScope.find_submodule  s     $;;"jja00OD))I%%d++ 	.D$,cl[|[_[_r|}}}E(-D% 	K((z(JJErF   c                     d|v r|                     dd          \  }}nd }| j                            |d           }|r||                    |          }|S )Nr   r   )r  r  r  r  )rZ   ri   r  modules       rD   r  zModuleScope.lookup_submodule  sf    $;;"jja00OD))I$((t44 	8+,,Y77FrF   c                 ^    t          j        |||          }|                     |           dS )z
        Add `filename` as include file. Add `verbatim_include` as
        verbatim text in the C file.
        Both `filename` and `verbatim_include` can be `None` or empty.
        )rA  N)r   r  r  )rZ   r?  r@  rA  incs        rD   r>  zModuleScope.add_include_file  s6     x)9EEES!!!!!rF   c                     |                                 }||                                }|                    | j        |           | j        |         }dS )a  
        Add `inc`, which is an instance of `IncludeCode`, to this
        `ModuleScope`. This either adds a new element to the
        `c_includes` dict or it updates an existing entry.

        In detail: the values of the dict `self.c_includes` are
        instances of `IncludeCode` containing the code to be put in the
        generated C file. The keys of the dict are needed to ensure
        uniqueness in two ways: if an include file is specified in
        multiple "cdef extern" blocks, only one `#include` statement is
        generated. Second, the same include might occur multiple times
        if we find it through multiple "cimport" paths. So we use the
        generated code (of the form `#include "header.h"`) as dict key.

        If verbatim code does not belong to any include file (i.e. it
        was put in a `cdef extern from *` block), then we use a unique
        dict key: namely, the `sortkey()`.

        One `IncludeCode` object can contain multiple pieces of C code:
        one optional "main piece" for the include file and several other
        pieces for the verbatim code. The `IncludeCode.dict_update`
        method merges the pieces of two different `IncludeCode` objects
        if needed.
        N)	mainpiecesortkeydict_updater  )rZ   r  r=  s      rD   r  zModuleScope.process_include  sI    2 mmoo;++--C---oc"rF   c                     || j         vrj|j                                        D ]}|                     |           | j                             |           |j         D ]}|                     |           d S d S rW   )r  r  valuesr  r   add_imported_module)rZ   r   r  ms       rD   r  zModuleScope.add_imported_module  s    ...'..00 * *$$S))))"))%000, , ,((++++ /., ,rF   c                 t    |j         rd|_        || j        vr|| j        |<   d S t          |d|z  d           d S )NTrr  r   )r   r   r   r   )rZ   ri   r  rk   s       rD   add_imported_entryzModuleScope.add_imported_entry  sR     	% $E$$!&DLC,t3Q77777rF   c                     |                      |          }|r#|j        r|j        |u r|S |j        r|j        r|S n#|                     |t          |          }d|_        ||_        |                     |           |S )Nr   )rt  r   r   r
  r   r   r  )rZ   ri   r   rk   r  s        rD   declare_modulezModuleScope.declare_module  s    
   && 	"  U_%=%=% eo   $$T>3??E !E  '''rF   rg   c
                    |dvrt          |d|z             |                     ||	d           |s-|t          u rt          }|j        r|j        rt          d          |s4| }
|dk    s|dk    r|
r|}n |                     t          j	        |          }| 
                    |          }|r|j        r|j                            |          s,|dk    r&|j        dk    rt          |d|z  d           ||_        |j        d	k    r4|                     t          j	        |          }|j        |k    r	|}||_        |j        s	d
|_        |S t$                              | |||||||||	
  
        }|r?d|_        |j        j        r|j        j        |_        | j                            |           nd|_        t4          j        rd|_        |S )N)rg   r^  r-   z+Module-level variable cannot be declared %s)ztyping.Optionalz7Non-cdef global variable is not a generic Python objectr-   r^  z6Variable '%s' type does not match previous declarationr   rg   TrC   r   r   r  r  r   )r   r  r   r   is_pyobjectis_extension_typer	   r+  r   r  rt  r   rj   r  r   r   rC   r   r   r
  r   declaration_valuerl   r   r   r   r   cimport_from_pyxr   )rZ   ri   rj   rk   rC   r   r   r  r  r   rd  r  mangled_cnames                rD   r
  zModuleScope.declare_var  s7    <<<#DzQRRR''-?AUVVV 	O'''%$ OT-C O#MO O O  	=!zHX%%**@*@X*@F$5t<<  && 	U) 	 :%%d++ &))e.>(.J.JC!Y\`!`bcddd!%EJ 9,, $F,=t D D;-// E"&EK' '+$!!$dC(-*&)&'^p " r r  	" Ez+ :"Z9
##E**** !E# 	EJrF   rc   c                    |sd|	v rt          |dd           |s1|dk    s|dk    r|r|}n |                     t          j        |          }|dk    r|j        rt          |d           |                     |          }|rM|j        rF|j        dk    r;|                     t          j        |          }|j	        |k    r|}||_	        ||_
        t                              | |||||||||	|
|          }|S )	Nr.   z+Declarations should not be declared inline.r   r-   r^  z6Extern functions cannot have default arguments values.rg   )rC   r   r   r  rd  r  r   r  )r   r+  r   r  optional_arg_countr   rt  r   r   rC   r   r   r  )rZ   ri   rj   rk   rC   r   r   r  rd  r  r   r  r  r  s                 rD   r  zModuleScope.declare_cfunctionJ  s4     	KH	11CFJJJ 	>X%%**@*@X*@F$6==!!d&=!#OPPP  && 	-U) 	-9,, $F,> E E;-// E"'EK',E$''$cJC#	 ( % %
 rF   c                 p    |                      |          }|s|                     |t          |           d S d S rW   )rt  r
  r   r  s       rD   declare_globalzModuleScope.declare_globalg  sE      && 	8T>377777	8 	8rF   c                 B    || j                             |           d S d S rW   )r  r   r.  s     rD   r-  zModuleScope.use_utility_codel  s-    "))(33333  rF   c                     |d S |j         r| j                            |j                    |j        r!| j                            |j                   d S d S rW   )r   r  r   r   r  s     rD   r  z"ModuleScope.use_entry_utility_codep  si    =F 	>"))%*<===( 	I"))%*GHHHHH	I 	IrF   c                    |r$|
dk    r|
dk    s|st          |dd           |}d}nd }|                     |          }|r|s~|j        }|j        r|j        sd }nf|j        }|r |r|j        r|                     |||           |r|j        s	|r"|j        r|r||j        urt          |d           |r|j        s||_        |r|rt          j        ||||
dk    |          }||_        ||_        |||_        |
dk    r||_        n| j        |_        |	r|	|_        n%|                     t&          j        |          |_        |                     ||||
d|          }d	|_        |r||_        nB|j        s&|                     t&          j        |          |_        nt          |j        d
           |                     |           | j                            |           |j        s|s|rt;          || |
|          }| j                                        |_        |r!|j        r|                     |j                   |!                    |           | j"                            |           nC|r |j        j        rt          |d|z             n!|r|j        j#        rt          |d|z             |rd|_$        |r||_        |
dk    r'|j%        |
k    rt          |d|d|j%        d           |rd|_&        |r)|j        r|j        |k    rt          |d           ||_        |r)|j'        r|j'        |k    rt          |d           ||_'        | j        (                    d          rd	|j        _)        | j        (                    d          }|r&ddl*m+} tY          | |          st          |d           |dk    rd	|j        _-        d	|_.        |S )Nr-   r^  z6ctypedef only valid for 'extern' , 'public', and 'api'r   r   r  )
check_size)r   rd  rV  Tz5Object name required for 'public' or 'extern' C class)ri   r   r   r  zC class '%s' already definedz C class '%s' already implementedr   rg   zClass 'r  r  z4Object struct name differs from previous declarationz2Type object name differs from previous declarationfinalcollection_type)NonManglingModuleScopez2'collection_type' is not a public cython directivesequence)/r   rt  rj   r   r  r   definedrx  rm  r   r   PyExtensionTyperk   buffer_defaultsobjtypedef_cnamer  r   rp  r+  r   typeptr_prefixrf  r   rr  r   objstruct_prefixattach_var_entry_to_c_classr   r   rm  r  copydeclare_inherited_c_attributesro  r   implementedr   r   r   typeobj_cnamer  rn  r   r  r~   has_sequence_flagr   )rZ   ri   rk   rd  implementingr  rm  rr  r  rp  r   rz  r   r  r  rV  r  r  rj   r   r  r  s                         rD   declare_c_classzModuleScope.declare_c_classx  s     	$J(22(**c*UWXYYY.LL#   && 	/ 	/:DM 
/d&< 
/
 O O%- O44UL#NNN Tem T Tt~ T  TYdn%D%Dc#RSSS /T^ /%.DN  	/ 	/-lIzX/ER\^ ^ ^DDH#2D +(8%X%%#.  #'#6  N%2""%)[[1F%M%M"%%dD#Jv & / /E"EO M'6$$& M'+{{63JD'Q'Q$$eiKM M M,,U333 ''... z 	F 0< 0#4t) $& & & $(?#7#7#9#9  J J88IIIu%%%!((/// FDJ. Fc9D@AAAA F$*"8 Fc=DEEE  	%#$E  	EI""u'7:'E'E##44)))+ , , , 	EI 	3# S(<(O(OcQRRR#2D  	/! Ud&8M&I&I#STTT!.D?w'' 	,'+EJ$/--.?@@ 	Q;;;;;;d$:;; Q cOPPPj((+/EJ( 

 rF   c                 0   |j         }|j        r-|j        j        r!t          j        d|j        j        |_        n}|j        rv|j        j        rjt          |j        j                  }|j        }|r7|j        r|t          |j        j                  k    rn|j        rd S |j        }|7t          j        |_        |j        rV| 	                    t          j
        |j                  |_        | 	                    t          j        |j                  |_        d S d S r\  )rj   rm  vtabslot_cnamer   obj_base_cnamer   r   r   is_builtin_typer+  vtabstruct_prefixri   vtabstruct_cnamevtabptr_prefixvtabptr_cname)rZ   r  rj   entry_countrm  s        rD   allocate_vtable_namesz!ModuleScope.allocate_vtable_names  s'    z> 	8dn; 	8 %%%t~'D'D#FDZ 	8DJ4 	8 dj677KI 0  +IO<Y8Z8Z*Z*Z, F%/	  0 #)"7D 	P$(KK0H%*$U$UD!!%V-BEJ!O!OD	P 	PrF   c                 l    | j         D ]+}|j        j        st          |j        d|j        z             ,d S )N(C class '%s' is declared but not defined)r   rj   r   r   rk   ri   r  s     rD   check_c_classes_pxdzModuleScope.check_c_classes_pxd  sM     ) 	Z 	ZE:# Zei!Kej!XYYY	Z 	ZrF   c                    |j         }|j        }|j        }|j        st	          |j        d|z             |dk    r,|j        s%|                     t          j	        |          |_        |j        r:|j        j
        D ]-}|j        s$|j        st	          |j        d|j        z             .|j        r,|                     t          j        |j                  |_        d S d S )Nr  r-   z)C method '%s' is declared but not defined)rj   ri   r   r   r   rk   r  r+  r   typeobj_prefixr   r   r   r  vtable_prefixvtable_cname)rZ   r  rj   ri   r   method_entrys         rD   check_c_classzModuleScope.check_c_class  s    zz%
z 	P%)G$NOOO!!$*<!!%V-BD!I!ID : 	+ $
 8 + +#0 +9P +,*,W$)-* + + +  	N $F,@%* M MD	N 	NrF   c                    d}|rt          d| j        z              | j        D ]]}|rDt          d|j        d|           t          d|j                   t          d|j                   |                     |           ^d S )Nr   z&Scope.check_c_classes: checking scope z	...entry r$  z......type = z......visibility = )printr   r   ri   rj   r   r  )rZ   debug_check_c_classesr  s      rD   check_c_classeszModuleScope.check_c_classes6  s     !"  	R:T=PPQQQ) 	& 	&E$ ?%***ee<===o
333+U-=>>>u%%%%	& 	&rF   c                     | j                                         D ]M\  }}|j        rA|j        r:|j        | u r1|j        dk    r&|j        s|j        st          |j	        d|z             Nd S )Nr-   r  )
r   r  r   r   r   r   r   r   r   rk   r  s      rD   check_c_functionszModuleScope.check_c_functionsN  s      <--// 	c 	cKD%! c( c!K4//!,88 % 1 9 % 4 9 %)%Z]a%abbb	c 	crF   c                     ddl m} t          |j        |j        |j        |j        j                  }|j        |_        d|_	        d|_
        d|_        |j        |_        ||_        d S )Nr   r  rl  )rf   r  re   ri   	type_typerk   rj   rp  r   r   r   r   r   r   )rZ   r  r  r  s       rD   r  z'ModuleScope.attach_var_entry_to_c_classZ  s}     	$)J,. . .	 $)#7	  !	 	 !	+	%rF   c                     | j         S rW   )cppr]   s    rD   rP  zModuleScope.is_cppm  s	    xrF   c                 L    ddl m}  |                                |            d S )Nr   )PyObjectTypeInferer)r9  r  r:  )rZ   r  s     rD   r:  zModuleScope.infer_typesp  s7    666666))$/////rF   rD  r   )rG  r   rB  rC  )r   r   NNNNNrg   r   r   NNr   )$r_   r`   ra   rM  r  is_cython_builtinr  r	  r[   r   r3  ri  r  r  r  r  r  r>  r  r  r  r  r
  r  r  r-  r  r  r  r   r  r
  r  r  rP  r:  rc   rF   rD   rx  rx    sQ       0 OO  
I I I I:" " "  c c c c  (# # #JD D D D>   	 	 	" " " "# # #>, , ,8 8 8  4 ,5OS7 7 7 7t KLSX   :8 8 8
4 4 4I I I CD>B?H.2)*	x x x xtP P P:Z Z Z N N N.& & &0
c 
c 
c& & &&  0 0 0 0 0rF   rx  c                   X    e Zd ZdZdZdZddZd Zd Z	 	 ddZ	d	 Z
d
 Zd Zd Zd ZdS )rL  TFNc                 H    ||}t                               | |||           d S rW   r   r[   )rZ   ri   r   r   s       rD   r[   zLocalScope.__init__~  s+    &LtT;=====rF   c                 &    t          ||z             S rW   )rS   r,  s      rD   r+  zLocalScope.mangle  s    v}---rF   c                    |                      |          }|                     t          j        |          }|                     ||||d          }d|_        |j        rd|_        d|_        | j	        
                    |           |S )Nrg   r   0)r1  r+  r   r  rZ  r   r  rl   r   r   r   )rZ   ri   rj   rk   rC   r  s         rD   declare_argzLocalScope.declare_arg  s    --d33F-t44T5$Y?? 	EJ&&&rF   rg   c
                 :   |                      |          }|dv rt          |d|z             t                              | |||||||||	
  
        }
|
j        j        r|
j        j        |
_        d|
_        | j        |
_	        | j
                            |
           |
S )Nr^  readonlyz$Local variable cannot be declared %sr  r   )r1  r   r   r
  rj   r  rl   r   _in_with_gil_blockr   r   r   r  s              rD   r
  zLocalScope.declare_var  s     --d33///#=
JKKK!!$dC(-*&)&'^p " r r :' 	65EJ"&"9&&&rF   c                     |                      |          rt          |dd           d S |                                                     |          }|| j        |<   d S Nrr  r   rt  r   r3  r  r   r  s       rD   r  zLocalScope.declare_global  b    D!! 	'C,a00000%%''55d;;E!&DLrF   c                    |                      |          }|r9|j        | u r0|j        s)t          |d|z             |                                 d S |                     |          }||j        st          |d|z             d S d S Nz'%s' redeclared as nonlocalz"no binding for nonlocal '%s' found)rt  r   r   r   rv   ri  rZ   ri   rk   
orig_entryr  s        rD   declare_nonlocalzLocalScope.declare_nonlocal  s    %%d++
 	H**d22:;R2#4t;<<<,,.....KK%%E}E$6}c?$FGGGGG }rF   c                 V    d|_         t          ||           }d|_        || j        |<   |S NT)r   r   r   r   )rZ   ri   r  inner_entrys       rD   _create_inner_entry_for_closurez*LocalScope._create_inner_entry_for_closure  s3     --"&(TrF   c                    t                               | |          }|a|j        }|j        r|j        }|j        || urA|j        r:t          |j        d          rt          d          |                     ||          S |S )Nscope_classz#lookup() after scope class created.)	r   ri  r   rJ  r   rG  rd  r	   r+  )rZ   ri   r  entry_scopes       rD   ri  zLocalScope.lookup  s     T4((+K4 6)5 4 6$&&;+G&5;66 O'(MNNN ;;D%HHHrF   c                    |                                  D ]}|j                                        D ]}|j        rk|j        j        }| j        r||_        $|                    t          j	                  r$|t          t          j	                  dz   d          }|d||_        t|j        rY|j        |_        t          j	        d|j        |_        |j        j        r&|j        j        d         r|                                 Ռd S )Nr   z->r  )rA  r   r  r   r   rC   rK  r@   r   cur_scope_cnamer   r   original_cnamerj   r   r   r  r   )rZ   outer_scope_cnamer   r  rC   s        rD   mangle_closure_cnamesz LocalScope.mangle_closure_cnames  s#   ++-- 	2 	2E--// 2 2% 2!-3E* L&+ ++F,BCC J$)#f.D*E*Ea*G*H*H$IE2C2C2CUU&K% 2+0;E(.4.D.D.Dekk"REKz. 25;3I,3W 2//1112	2 	2rF   rW   rB  )r_   r`   ra   rH  has_with_gil_blockr  r[   r+  r  r
  r  r'  r+  ri  r3  rc   rF   rD   rL  rL  u  s        N  > > > >
. . .   ,5OS   $' ' '	H 	H 	H    "2 2 2 2 2rF   rL  c                   N    e Zd ZdZdZd Zd Z	 	 ddZd	 Zdd
Z	d Z
d Zd ZdS )ComprehensionScopezScope for comprehensions (but not generator expressions, which use ClosureScope).
    As opposed to generators, these can be easily inlined in some cases, so all
    we really need is a scope that holds the loop variable(s).
    Tc                    |}|j         r|j        }|j         |                                                    t          j                  }t                              | |||           |j        | _        dt          j	        t          |          |fz  | _        |j         s|j        s|j        r|j        }|j         |j        |j        |j        | _        |j                            |            d S )Nz%s%d%s)rJ  r   r3  r7  r   genexpr_id_refr   r[   r  rA   r   genexp_prefixrF  rE  r   r   r   add)rZ   r   r   ri   s       rD   r[   zComprehensionScope.__init__  s    "1 	5'4L 1 	5((**2263HIItT;===%0%)<c$ii(NN 0 	2K4P 	2T_Tq 	2%1K 0 	2K4P 	2T_Tq 	2&2!!$'''''rF   c                 J    | j         | j                            ||          S rW   )r9  r   r+  r,  s      rD   r+  zComprehensionScope.mangle  s)    ++T->-E-Efd-S-S-STTrF   Nrg   Fc
                    |t           u r*| j                            |          }
|
r|
j        r|
j        }|                     ||	           | j        | j                            t          j
        |p|                                           }|                     |||||          }d|_        | j        j        rd|_        nd|_        d|_        | j                            |           || j        |<   |S r)  )r   r   ri  r   rj   r  r9  r   r+  r   r  r7  rZ  rM  r   r   r   r   r   r   )rZ   ri   rj   rk   rC   r   r   r  r  r   r   r  s               rD   r
  zComprehensionScope.declare_var  s    ###*11$77K ({6 ("'''-?@@@ ,,d.?.F.FvGXZ^Zpbfbnbnbpbp.q.q.qrT5$Z@@ , 	"#E!EN &&&"TrF   c                 :    | j                             |||          S rW   )r   r
  r  s       rD   r  z7ComprehensionScope.declare_assignment_expression_target  s     ,,T4===rF   c                 :    | j                             |||          S rW   )r   r  rZ   ri   rk   r  s       rD   r  z%ComprehensionScope.declare_pyfunction  s$    22#~' ' 	'rF   c                 8    | j                             ||          S rW   )r   r  )rZ   r   rk   s      rD   r  z*ComprehensionScope.declare_lambda_function  s    77
CHHHrF   c                 6    | j                             |          S rW   )r   r  r  s     rD   r  z!ComprehensionScope.add_lambda_def  s    ..x888rF   c                 h    |                      |          }|s| j                            |          }|S rW   )rt  r   r  r  s      rD   r  z6ComprehensionScope.lookup_assignment_expression_target"  s9      && 	P%II$OOErF   )Nrg   FFTNrD  )r_   r`   ra   r   rJ  r[   r+  r
  r  r  r  r  r  rc   rF   rD   r6  r6    s          "( ( ("U U U ,5NR   .> > >' ' ' 'I I I9 9 9    rF   r6  c                   (    e Zd ZdZddZddZd ZdS )	ClosureScopeTNc                 j    t                               | |||           t          j        || _        d S rW   )rL  r[   r   closure_scope_prefixclosure_cname)rZ   ri   
scope_namer   r   s        rD   r[   zClosureScope.__init__-  s7    D$\BBB'-'B'BJJOrF   Fc                 @    t                               | |||d          S )Nrg   r  )rL  r  r?  s       rD   r  zClosureScope.declare_pyfunction:  s"    ,,T4nYb,cccrF   c                 0    |                      |||          S rW   r  r  s       rD   r  z1ClosureScope.declare_assignment_expression_target=  s    dC000rF   rW   rD  )r_   r`   ra   rG  r[   r  r  rc   rF   rD   rD  rD  )  sY        P P P Pd d d d1 1 1 1 1rF   rD  c                       e Zd ZdZd Zd ZdS )GeneratorExpressionScopeTc                 f    | j                             |||          }|                     ||          S rW   )r   r
  r+  )rZ   ri   rj   rk   r  s        rD   r  z=GeneratorExpressionScope.declare_assignment_expression_targetD  s2    !--dD#>>33D%@@@rF   c                     |                      |          }|s2| j                            |          }|r|                     ||          S |S rW   )rt  r   r  r+  r  s      rD   r  z<GeneratorExpressionScope.lookup_assignment_expression_targetH  sX      && 	I%II$OOE I;;D%HHHrF   N)r_   r`   ra   rI  r  r  rc   rF   rD   rL  rL  A  s;        $(!A A A    rF   rL  c                   0    e Zd Zd
dZ	 	 	 ddZ	 	 dd	ZdS )r  ?c                 B    t                               | |d d            d S )N)r   r   r  r   s     rD   r[   zStructOrUnionScope.__init__T  s"    tTt$GGGGGrF   Nrg   Fc                    |s|}|dk    rt          |          }|j        rt          j        |          }|                     ||	           |                     |||||          }d|_        | j                            |           |j	        r|
st          |d           n6|j        r|st          |d           n|j        r|st          |d|z             |S )Nrg   r   z/C struct/union member cannot be a Python objectz-C struct/union member cannot be a memory viewz;C struct/union member cannot be reference-counted type '%s')rE   r   r   r  r  rZ  r   r   r   r  r   rT  needs_refcounting)rZ   ri   rj   rk   rC   r   r   r  r  r   allow_pyobjectallow_memoryviewallow_refcountedr  s                 rD   r
  zStructOrUnionScope.declare_varW  s   
  	1EY&&)%00 	-&t,,D''-?@@@T5$Z@@&&& 		a! NcLMMM$ 	a# LcJKKK# 	a# acX[__```rF   r   rc   c                 Z    |
rt          |d           |                     |||||          S )Nz0C struct/union member cannot be declared 'cpdef'r  )r   r
  )rZ   ri   rj   rk   rC   r   r   r  rd  r  r  s              rD   r  z$StructOrUnionScope.declare_cfunctionr  sI      	K#IJJJdC&+
   D D 	DrF   )rP  )	Nrg   FFFNFFF)Nrg   r   r   r   rc   F)r_   r`   ra   r[   r
  r  rc   rF   rD   r  r  Q  so        H H H H ,5OSSX   8 KL@ED D D D D DrF   r  c                   (    e Zd ZddgZd Zd Zd ZdS )
ClassScoper`   ra   c                    |r)|                                                     d          r|S |rV|                    d          rA|                    d          s,t          d| j                            d          |          }|S )N__pyx_r=   rL   )lowerr@   endswithr   
class_namelstripr   s     rD   r1  z$ClassScope.mangle_class_private_name  s     	DJJLL++H55 	K 	PDOOD)) 	P$--2E2E 	P =DO,B,B3,G,G,G!NOODrF   c                 \    t                               | |||           || _        d | _        d S rW   )r   r[   r^  r   rZ   ri   r   s      rD   r[   zClassScope.__init__  s,    tT;<<<rF   c                 \   t                               | |          }|r|S |dk    rt          ddt          j        t
          t          j        dt
          d           gdd                    }t          j        	                    dd          |_
        |                     |           d|_        |S )Nclassmethod__Pyx_Method_ClassMethodrf   r   ClassMethodzCythonFunction.cr   )r   ri  re   r   r  r   r  r   r   r   r   r  r   r  s      rD   ri  zClassScope.lookup  s    T4(( 	L=  
 *$",RFFGAO OP PE -1,<,H,HXj,k,kE)''...!"ErF   N)r_   r`   ra   r	  r1  r[   ri  rc   rF   rD   rY  rY  {  sN         +N;    
    rF   rY  c                   0    e Zd ZdZ	 	 d	dZd Zd Zd ZdS )
PyClassScoper   Nrg   Fc
                     |                      |          }|t          u rt          }t                              | |||||||||	
  
        }
d|
_        d|
_        |
S )Nr  r   )r1  r   r   r   r
  r   r   r  s              rD   r
  zPyClassScope.declare_var  sr     --d33###!D!!$dC(-*&)&'^p " r r  !rF   c                    |                      |          }|r9|j        | u r0|j        s)t          |d|z             |                                 d S |                     |          }|t          |d|z             d S || j        |<   d S r$  )rt  r   r   r   rv   ri  r   r%  s        rD   r'  zPyClassScope.declare_nonlocal  s    %%d++
 
	+**d22:;R2#4t;<<<,,.....KK%%E}c?$FGGGGG &+T"""rF   c                     |                      |          rt          |dd           d S |                                                     |          }|| j        |<   d S r   r!  r  s       rD   r  zPyClassScope.declare_global  r"  rF   c                 6    | j                             |          S rW   )r   add_default_value)rZ   rj   s     rD   rl  zPyClassScope.add_default_value  s    11$777rF   rB  )r_   r`   ra   rE  r
  r'  r  rl  rc   rF   rD   rg  rg    se        
  ,5OS   + + +' ' '8 8 8 8 8rF   rg  c                       e Zd ZdZdZdZdZdZdZdZ	dZ
d Zd Zd Zd Zd Z	 	 dd	Z	 	 ddZddZd Z	 	 ddZddZddZddZ	 	 	 ddZd Zd
S )rm  r   Fc                 X   t                               | ||           |dk    rJ|                    t          j        |          | _        |                    t          j        |          | _        g | _        g | _	        || _
        |j        s|j        r|j        rd|j        z  | _        d S d S d S )Nr-   z(PyObject *)%s)rY  r[   r+  r   methtab_prefixr  gstab_prefixgetset_table_cnameproperty_entriesinherited_var_entriesr  r  r  rp  rV  )rZ   ri   r   r   r  s        rD   r[   zCClassScope.__init__  s    D$444!!&1&8&89NPT&U&UD#&1&8&89Ld&S&SD# "%'"&
 ( 	PK,I 	P-	P#3k6O#OD   	P 	P 	P 	PrF   c                     | j         r| j                            dd          sdS | j        j        }|r |j        |j                                        S | j        j        r| j        j         S dS )Nno_gcFT)	has_cyclic_pyobject_attrsr  r  r  rm  r   needs_gcr  is_gc_simple)rZ   rm  s     rD   rw  zCClassScope.needs_gc	  s}     ) 	$/2E2Egu2U2U 	4$.	 	54?++---- 	5'444urF   c                     | j                             d          }|du rdS |r	| j        rdS | j        j        }|r |j        |j                                        S | j        j        S )NtrashcanFT)r  r  rv  r  rm  r   needs_trashcanbuiltin_trashcan)rZ   	directiverm  s      rD   r{  zCClassScope.needs_trashcan	  s|     O''
33	5  	7 	4$.	 	44?1133300rF   c                 b    |                                  o| j                            dd           S )z
        Do we need to generate an implementation for the tp_clear slot? Can
        be disabled to keep references for the __dealloc__ cleanup function.
        no_gc_clearF)rw  r  r  r]   s    rD   needs_tp_clearzCClassScope.needs_tp_clear	  s,    
 }}Pt':':=%'P'P#PPrF   c                     | }|rZ|                     d          }|r	|j        rdS |j        j        s|j        r|j        j        rdS |j        j        }|r|j        nd}|ZdS )z
        This covers cases where we definitely have a __del__ function
        and also cases where one of the base classes could have a __del__
        function but we don't know.
        __del__TNF)rt  r   r  is_externalr  multiple_basesrm  r   )rZ   current_type_scope	del_entrycurrent_base_types       rD   may_have_finalizezCClassScope.may_have_finalize&	  s     "  		X*66yAAI Y1 t".: BTB` &2A t 2 > H<M!W!2!8!8SW ! 		X urF   Tc                 \   g }g }g }| j         D ]}|j        j        r8|s| j        s|j        dk    r#|s|j        j        s|                    |           F|j        t          j        k    r|                    |           q|j        j	        r|                    |           |p|p|}||||ffS )Nr>   )
r   rj   r  is_closure_class_scoperi   rx  r   r   c_py_buffer_typerT  )rZ   include_weakrefinclude_gc_simplepy_attrs
py_buffersmemoryview_slicesr  have_entriess           rD   get_refcounted_entriesz"CClassScope.get_refcounted_entries9	  s    
% 	0 	0Ez% 0" /t'B /ejTaFaFa( /
0G / ...z:::!!%((((. 0!((///B:B1Bh
4EFFFrF   Nrg   c
                    |                      |          }|	rQd|	v r2d}|j        s)|j        st          |d|z             t          }n|j        }d|	v r| j        st          |d           |r| j        rt          |d           | j        s:t          | j
                                      |          rt          |d|z             |s1|}|dk    rt          |          }t          |t          j                  }|                     |||||          }
d	|
_        | j                            |
           |	|
_        |j        r=|d
k    r7| j
        d         r|
                                 n|                    |           |j        rd| _        n|j        r/|                     t9          j        d                     d| _        nI|j        rB| j        s|dk    r5d| _        |j         r |j!        r|j!        "                                rd| _#        |dvrt          |d|z             |dv rTd|
_$        | j        s|dk    rt          |d           |j        s(|%                    |           st          |d|z             nd|
_$        |
S |tL          u rt          }tN          (                    | |||||||||	
  
        }
d	|
_)        d	|
_*        |
S )Nztyping.ClassVarr   zZClassVar[] requires the type to be a Python object type. Found '%s', using object instead.zdataclasses.InitVarzIUse of cython.dataclasses.InitVar does not make sense outside a dataclasszVC attributes cannot be added in implementation part of extension type defined in a pxdz/The name '%s' is reserved for a special method.rg   r   r-   r  Tz#include <new>r>   )rg   r^  r  z1Attribute of extension type cannot be declared %sr  z9Special attribute __weakref__ cannot be exposed to Pythonz7C attribute of type '%s' cannot be accessed from PythonFr  )+r1  r  equivalent_typer   r   rN  r   r  r  r   r  get_special_method_signaturerE   rS   r   unicode_structmember_prefixrZ  r   r   r   r   r   r   r  rT  has_memoryview_attrsneeds_cpp_constructionr-  r   r   has_cpp_constructable_attrshas_pyobject_attrsr  r   rw  rv  r   can_coerce_to_pyobjectr   r   r
  r   r   r  s              rD   r
  zCClassScope.declare_varL	  s    --d33 
	h $666' 4/ 4  &B  EI  &I  J  J  J-#3%);;;DD];cfggg ?	| 8c78 8 8 /  "4?33PPQUVV cE       S**-e44E'v/QRRLLudCDDE !E##E***'9E$  8Z8%;%;?<0 8++----223777& 	:,0)), :%%d&67G&H&HIII3700! :t'B :dmF[F[*.', :#z:-1Z-@-@-B-B:59D2!BBBcG*TV V V333 (,$2 \t}7L7L#Z[[[( aD,G,G,M,M a#X[__```',$L'''%%%dD$,1j*-fgbt & v vE  EO !"ELrF   c                    |t           v r)|                     d          rt          |d|z             n8|dk    r2t           D ]*}|                     |          rt          |d|z             +|dk    rt          |d           |                     |t          |d          }t          | j                                      |          }|r||_        d|_	        nt          |_        d|_	        | j                            |           |S )	N__richcmp__z$Cannot define both % and __richcmp____new__zv__new__ method of extension type will change semantics in a future version of Pyrex and Cython. Use __cinit__ instead.r-   r  r   r   )r   rt  r   r
  r   r   r  r  r  r   r   r   r   )rZ   ri   rk   r  r   r  special_sigs          rD   r  zCClassScope.declare_pyfunction	  s6   ***.. JcADHIII]"", K K##A&& K#EIJJJ9# R S S S  ~s,4 ! 6 6$T_55RRSWXX 	! *EO E0EO E""5)))rF   c                     | j         s|dk    rt          d          }t                              | |          }|r!|j        r| j        j        s| j        j        sd S |S )Nr  	__cinit__)r  r   rY  rt  r   r  r  rn  r  s      rD   rt  zCClassScope.lookup_here	  ss    * 	.ty/@/@ --D&&tT22 	 U- 	 #3   '5  4rF   r   rc   c           
         |                      |          }t          | j                                      |          r| j        j        st          |d           |j        }|j        sb|st          |d           nO| j        	                    |d         j
                  s*t          |d|d         j
        d|d| j        d           |                     |          }|'t          t          |          t          j                  }|r|j        s)t          |d|z             |                                 n|r|j        rt          |d	|z             |j        r|j        rt          |d
           n`|                    |j
        d          r;|j        |j
        j        k    r&|j
                            |j                  |_
        n	|                    |j
        d          r|j        |j
        j        k    ru| j        rR|sP|                    |j
        dd          s3t9          |d|d| j        dd           t9          |j        dd           |                     ||||d|	          }nct          |d           t          |j        d           n=| j        rt          |d|d| j        d           |                     ||||||	          }|r%|                      t          j!        |          |_        |
|_"        ||_#        d|	v rd|_$        | j        j%        s!|j$        s| j        &                    d          r-d|_        |j        |_'        |j(        s|j
        |_)        ||_
        |S )Nz7Special methods must be declared with 'def', not 'cdef'zC method has no self argumentr   zSelf argument (z) of C method 'z' does not match parent type (r  rI  z'%s' already definedz'Overriding final methods is not allowedr   )
as_cmethod)r  as_pxd_definitionz'Compatible but non-identical C method 'z7' not redeclared in definition part of extension type 'z5'.  This may cause incorrect vtables to be generated.r   ru   rJ  )r   r  z2Signature not compatible with previous declarationz
C method 'z@' not previously declared in definition part of extension type 'r  r.   Tr  )*r1  r   r  r  r  r  r   rQ  r  assignable_fromrj   rt  rS   rE   r   unicode_vtabentry_prefixr   rv   r   r   r   same_c_signature_asr  r  r  r  r  !same_c_signature_as_resolved_typer   r^  rk   r  r+  r  r   r  r   rn  r  r   r  r   )rZ   ri   rj   rk   rC   r   r   r  rd  r  r   r  rQ  r  s                 rD   r  zCClassScope.declare_cfunction	  s    --d334?++HHNN 	R(8	R#PQQQy$ 	> >c:;;;;%55d1glCC >ccAw|||TTT4+;+;+;= > > >  &&=#$5d$;$;V=\]]E !	V% Ec-4555++---- > 0 >#5<===) Ee.@ E#HIIII--ejq-II Edj\a\f\lNlNl!&!9!9$-!H!HEJJ33EJQ3OO ETXT^bgblbrTrTr 	NV 	N$($J$J %
qA %K %O %O	N   !%dooo7 9:	; ; ;
  	+I1MMM ..tT3RZfo.ppEE#STTT%)%CDDDD| Fcc.2ddDOOOEF F F &&tT3z9UUE 	E#{{6+=tDDE)
	!!&*E#) 	"U-D 	"H[H[\cHdHd 	"%)E"%*%5E"= "$)J!!
rF   c           
          |                      |          }t                              | |||||||          }	d|	_        ||	_        |	S )Nr  r   )rt  rY  r  r   r   )
rZ   ri   rj   rk   rC   r   r  r  r   r  s
             rD   r  zCClassScope.add_cfunction
  sW    %%d++
(($c5*i9 ) V V%rF   c                     t          |          }|                     ||d |d|          }t          ||t                    }||_        d|_        d|_        ||_        |j        |_        ||_	        |S )Nr-   )rk   rC   r   r   r   )
r   r  re   r   r   r   r   r   r   r   )rZ   ri   rj   rC   r   r  r  s          rD   rj  z%CClassScope.declare_builtin_cfunction
  s     T""&&$D(Q] ' _ _$n55	#'	  !	 	!-	+	%rF   c                    |                      |          }|"|                     |||t          n||d          }d|_        |d|_        ||_        |t          ||           |_        n||_        | j        	                    |           |S )Nrg   T)class_scope)
rt  rZ  r   r   r   r   PropertyScoper   rr  r   )rZ   ri   r   rk   ctypeproperty_scoper  s          rD   declare_propertyzCClassScope.declare_property$
  s      &&=LLtu}^^RWY\^ghhE !%E	!'$???EKK(EK$$U+++rF   r-   c                     |                      ||||          }|j                            |t          j        |t          j        d| j        d          g|||	|
          ||||          }||fS )zPInternal convenience method to declare a C property function in one go.
        )r   r  rk   rZ   Nr   )r  r  r  r  )ri   rj   rC   r   r   rk   )r  r   r  r   r  r  r  )rZ   ri   rj   
cfunc_namer   rk   r   r  r  r  r  r   property_entryr  s                 rD   declare_cpropertyzCClassScope.declare_cproperty3
  s    
 ..tDc.RR$*<<%(1AtLLLM! / /   %! = 
 
 {**rF   c           
         fd}|j         |j        z   }|D ]g|                     j         |j                  j        d d          }d|_        d|_        j        |_        | j         	                    |           h|j
        d d          D ]'j        j        rj                                         (|j
        D ]j        }j        }|o|j        }|s ||          }|                     j        j        j        |j        j        d          }d|_        j        r6d|_        j        |_        | j        |j        k    s|j        rj        |_        |rd|_        ||_        j        rj        |_        d S )Nc                 0    t           j        dj        S r\  )r   r  rC   )rC   
base_entrys    rD   adaptz9CClassScope.declare_inherited_c_attributes.<locals>.adaptN
  s    $333Z5E5EFFrF   rg   r   Tr  )rs  r   rZ  ri   rC   rj   r   r   r   r   r   r  "get_all_specialized_function_typesr   r   r  rk   r   r   r   r   r   r   r   r   )	rZ   
base_scoper  r   r  rC   r  r   r  s	           @rD   r  z*CClassScope.declare_inherited_c_attributesJ
  s   	G 	G 	G 	G 	G 2Z5KK! 	5 	5JLLz'7!8!8y2 2E !"E!%E)4E&--e4444
 %21115 	E 	EJ' EBBDDD$2 	= 	=J$E".I";y';J %e&&*.%%z'@D ' R RE "#E* I)-&*4*F'%)@@@/ A-7-HE* .+/($-!& =%/%<")	= 	=rF   )FTrB  rD  rC  rW   r   )NNr-   FFNFN)r_   r`   ra   rF  r  r  r  r  rv  r  r  r[   rw  r{  r  r  r  r
  r  rt  r  r  rj  r  r  r  rc   rF   rD   rm  rm    s       " " "' %GKP P P 
 
 
1 1 1 Q Q Q  & 6;15G G G G( ,5OSP P P Pd   6    KLSXB B B BH          X`]b'++ + + +.,= ,= ,= ,= ,=rF   rm  c                   F    e Zd ZdZdZdZddZ	 	 ddZ	 	 dd	Zd
 Z	d Z
dS )CppClassScoper   Nc                     t                               | ||d            |j        | _        g | _        |7|D ]6}|                     ||t          j        |          d d          }d|_        5d S d S )Nr-   r   )r   r[   r  rs  rZ  r   TemplatePlaceholderTyper   )rZ   ri   r   r~  Ttemplate_entrys         rD   r[   zCppClassScope.__init__
  s    tT;555%0%'"  + +!%q*<Q??x"Q "Q)*&&	 ! + +rF   r-   Fc                    |s|}|                      ||
           |                     |          }|	r{|y|j                            |          r%|j                            |j                  |_        nS|j        r"|                    |j                  r||_        n*t          |d           n| 	                    |||||          }d|_
        |j        rC| j        r<| j                                        s#| j                                        d||_        |dk    r"|	s|dk    r| j                            |           |S )Nr  r   ::r  rH  )r  rt  rj   r  r  r  r   r  r   rZ  r   get_fused_typesempty_declaration_coder   r   r   )rZ   ri   rj   rk   rC   r   r   r  r  rd  r   r  s               rD   r
  zCppClassScope.declare_var
  sd     	E''-?@@@  && 		E)z!!$'' U"Z55dmDD

" Ut'E'Eej'Q'Q U!

cSTTTTLLudCDDE 	Z 	Z9,,.. Z/3y/O/O/Q/Q/Q/QSXSX#Y 6>>x>48+;+;##E***rF   r   rc   c                    | j                             d          d         }||dfv rb|`t          j        d|}t	          d          }t          j                    |_        |j        |_	        d fd|j        D             |_        n@|dk    r:|8t          j        d|}t	          d          }t          j                    |_        |d	v rc|j
        r\| j        j        D ]O}|j                            |          }|r1|j        j
        s%t          |d
           t          |j        d           P|                     |          }|                     ||||||          }|r|s|                                |_        |
|_        ||_        |S )Nr  rG  r[   rH  c                     | j         j        rC| j         j        s7t          j        | j        t          j        | j                   | j                  S | S rW   )rj   r   is_referencer   r  ri   
c_ref_typerk   )r  s    rD   	maybe_refz2CppClassScope.declare_cfunction.<locals>.maybe_ref
  sR    8( 1F %2*"7"A"A37L L L JrF   c                 &    g | ]} |          S rc   rc   )r  r  r  s     rD   r  z3CppClassScope.declare_cfunction.<locals>.<listcomp>
  s!    ===C3===rF   __dealloc__<del>rH  r  zdConstructor cannot be called without GIL unless all base constructors can also be called without GILzBase constructor defined here.)rd  rC   r   )ri   r  r   r  r   r   	CVoidTyper  rQ  original_argsr  rj   r  r   ri  r   rk   rt  r
  rz   rm   r   r  )rZ   ri   rj   rk   rC   r   r   r  rd  r  r   r  r^  baser  r   r  r  s                    @rD   r  zCppClassScope.declare_cfunction
  s    Y__T**2.
J
+++&,&8&8&8**EE **D)355D "&D   >===49===DII]""u})/);););ZZHE ))D)355D&&&4:&	. L L!Z..t44
 Ljo&; L#   F  G  G  G*.*JKKK%%d++
  tS*2', ! E E  	Jh 	J,6,G,G,I,IE))
rF   c                    |j         }|}t          |dd           r|j        }t          |dd           t          |dd           rd |j        D             }nd}|j        |j        z   D ]q}|j        dv r|j        | j        v r|j         |                     |j        |j	        |j
        d d          }d|_        d|_        | j                            |           r|j        D ]I}|                     |j        |j
        |j        |j	        |j        d|j        |j        	          }d|_        J|j        D ]F}|j        |vr;|                     |j        |j
        |j        |j	        |j        d
          }d|_        Gd S )Ntemplate_typer~  c                     g | ]	}|j         
S rc   r  )r  r  s     rD   r  zBCppClassScope.declare_inherited_cpp_attributes.<locals>.<listcomp>
  s    FFFafFFFrF   rc   r  r-   r   r   )r   r  r   F)rd  )r   r   r  r~  rs  r   ri   r   rZ  rC   rj   r   r   r   r   r  rk   r   r   r   r   rf  )rZ   r  r  r  base_templatesr  r  s          rD   r  z.CppClassScope.declare_inherited_cpp_attributes
  s   %
"m_d;; 	8)7M m_d;; 	8=+t44 	 FFm.EFFFNNN %:Z=SS 	5 	5J"555$,..LL*2Bx1 1E !E!"E&--e4444$2 	# 	#J**:?JO+5>:;K+5+@a5?5N8B8O	 + Q QE
 "#E$1 	' 	'Jn44))*/:?*4.*:J*4*?% * Q Q &'"	' 	'rF   c           	      p   t          | j        | j                  }||_        | j                                        D ]}|j        rB|                    |j        |j                            |          |j	        |j
        d           K|j        j        r^|                                D ]H}|                    |j        |j                            |          |j	        |j
        |j                   I|                    |j        |j                            |          |j	        |j
        |j                   |S )Nr   )re  )r   )r  ri   r   rj   r   r  r   rf  r  rk   rC   r   rz   r  r   r
  r   )rZ   r  
type_entryr   r  r  s         rD   r  zCppClassScope.specialize
  sU   di)9::
\((** 	4 	4E} 4""5:#(:#8#8#@#@#(9#(;,-	 # / / / /
 ( 4//11 I IA++AF,-F,=,=f,E,E,-E,-G9:	 , I I I II !!%*"'*"7"7"?"?"')"'+"'"2	4 4 4 4 rF   rW   )Nr-   FFFFN)Nr-   r   r   r   rc   NF)r_   r`   ra   rR  default_constructorrj   r[   r
  r  r  r  rc   rF   rD   r  r  y
  s         D+ + + + ,4_c   6 JKSX$ $ $ $L$' $' $'L    rF   r  c                       e Zd Zd Z	 ddZdS )CppScopedEnumScopec                 @    t                               | ||d            d S rW   r  ra  s      rD   r[   zCppScopedEnumScope.__init__  s     tT;55555rF   Nr-   c                 z    |s|}|                      ||           |                     |||||          }d|_        |S r)  )r  rZ  r   )rZ   ri   rj   rk   rC   r   r   r  s           rD   r
  zCppScopedEnumScope.declare_var  sN      	E''-?@@@T5$Z@@ rF   )Nr-   N)r_   r`   ra   r[   r
  rc   rF   rD   r  r    s>        6 6 6 IM     rF   r  c                   &    e Zd ZdZd Zd ZddZdS )r  r   c                     |j         r|                                nd }t                              | |||           |j        | _        |j        | _        d S )Nr)  )r   r3  r   r[   r  r  )rZ   ri   r  r   s       rD   r[   zPropertyScope.__init__%  sT    4?4KUk..000QUtT;[III&2%0rF   c                    |j         j        rt          |d           |j        r6|j        d         j        t
          u r| j        j        |j        d         _        nnt          |j                  dk    rt          |d           nE|j        d         j        j	        s.|j        d         j        | j        j        u st          |d           t          j        | |||g|R i |}d|_        |S )z'Declare a C property function.
        z&C property method cannot return 'void'r   r   z4C property method must have a single (self) argumentz6C property method must have a single (object) argumentT)r  r  r   rQ  rj   r   r   r  r   r  r   r  r   )rZ   ri   rj   rk   rQ  kwargsr  s          rD   r  zPropertyScope.declare_cfunction,  s     # 	A#?@@@9 	Q1*n<< $ 1 =DIaL^^q  #MNNNN)A,#/ 	Q49Q<3DHYHe3e3e#OPPP'dD#OOOOOO!rF   Fc                     t          |          }|r.|                     ||t          |d          }d|_        ||_        |S t          |d           d S )Nrg   r   zKOnly __get__, __set__ and __del__ methods allowed in a property declaration)r   rZ  r   r   r  r   )rZ   ri   rk   r  r  r  s         rD   r  z PropertyScope.declare_pyfunction>  sb    3D99	 	LLt^S)LLE E'EOL# , - - -4rF   NrD  )r_   r`   ra   rL  r[   r  r  rc   rF   rD   r  r    sN         1 1 1  $     rF   r  c                       e Zd ZddZd ZdS )CConstOrVolatileScoper   c                     t                               | d|j        z   |j        |j                   || _        || _        || _        d S )Ncv_)r   r[   ri   r   r   base_type_scoper   is_volatile)rZ   r  r   r  s       rD   r[   zCConstOrVolatileScope.__init__N  sQ    O(('(		* 	* 	*
  / &rF   c                     | j                             |          }|@t          j        |          }t          j        |j        | j        | j                  |_        |S d S rW   )r  rt  r  r   c_const_or_volatile_typerj   r   r  r  s      rD   rt  z!CConstOrVolatileScope.lookup_hereX  s^    $0066Ie$$E#<Jt/?A AEJL	 rF   N)r   r   )r_   r`   ra   r[   rt  rc   rF   rD   r  r  L  s7        ' ' ' '    rF   r  c                       e Zd Zd ZdS )TemplateScopec                 X    t                               | ||d            |j        | _        d S rW   )r   r[   r  ra  s      rD   r[   zTemplateScope.__init__b  s(    tT;555%0rF   N)r_   r`   ra   r[   rc   rF   rD   r  r  a  s#        1 1 1 1 1rF   r  rW   )8
__future__r   rM  r  r?  rZ  re  ImportErrorUtilsr   Errorsr   r   r	   r
   StringEncodingr   rf   r   r   r   r   r   	TypeSlotsr   r   r   r   r   r   r   rB   rE   rS   objectrU   re   r   r   rQ  rX  const_counterrx  rL  r6  rD  rL  r  rY  rg  rm  r  r  r  r  r  rc   rF   rD   <module>r     s[  
 ' & & & & & 				  """""   OOOOO / . . . . . C C C C C C C C C C C C ) ) ) ) ) )               8 8 8 8 8 8 8 85 5 5 5 5 5 5 5 5 5 5 5 5 5                    .0 0 0 0 0 0 0 0S^ S^ S^ S^ S^F S^ S^ S^l!1 !1 !1 !1 !1 !1 !1 !1HDL DL DL DL DLF DL DL DLN    U   W W W W W5 W W Wt v	0 v	0 v	0 v	0 v	0% v	0 v	0 v	0rj2 j2 j2 j2 j2 j2 j2 j2ZD D D D D D D DN1 1 1 1 1: 1 1 10    |    'D 'D 'D 'D 'D 'D 'D 'DT* * * * * * * *Z-8 -8 -8 -8 -8: -8 -8 -8`^= ^= ^= ^= ^=* ^= ^= ^=BP P P P PE P P Pf       ", , , , ,E , , ,^    E   *1 1 1 1 1E 1 1 1 1 1s    	%%