
    Aeo                    |   d dl mZ d dlZd dlZd dlZ	 d dlZddl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  eg d      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%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,      Z- G d( d)e,      Z. G d* d+e#      Z/ G d, d-e#      Z0 G d. d/e#      Z1 G d0 d1e#      Z2y# e$ r d dlZY "w xY w)2    )absolute_importN   )warningerrorInternalError)EncodedString)OptionsNaming)
PyrexTypes)py_object_typeunspecified_type)pyfunction_signaturepymethod_signaturerichcmp_special_methodsget_special_method_signatureget_property_accessor_signature)Future)Code)$autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile_Boolz_Complex, _Imaginaryinlinerestrictc                     | d d dk(  r#| j                  t        j                        s| dv r| t        v rt        j                  | z   } | S )N   __)__weakref____dict__)
startswithr
   pyrex_prefixiso_c99_keywords)cnames    6lib/python3.12/site-packages/Cython/Compiler/Symtab.pyc_safe_identifierrB   %   sJ    	rd	E$4$4V5H5H$I',0K'K((##e+L    c                       e Zd ZdZd Zd Zy)	BufferAuxFc                      || _         || _        y N)buflocal_nd_var	rcbuf_var)selfrH   rI   s      rA   __init__zBufferAux.__init__1   s    ."rC   c                      d| j                   z  S )Nz<BufferAux %r>)r<   rJ   s    rA   __repr__zBufferAux.__repr__5   s    $--//rC   N)__name__
__module____qualname__writable_neededrK   rN    rC   rA   rE   rE   .   s    O#0rC   rE   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&g Z'dZ(d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dZEd ZFd	 ZGd
 ZHd ZId ZJd ZKy)EntryFr    NprivateTc                     || _         || _        || _        || _        || _        g | _        g | _        g | _        g | _        | | _	        y rG   )
namer@   typeposinitoverloaded_alternativescf_assignmentscf_referencesinner_entriesdefining_entry)rJ   rY   r@   rZ   r[   r\   s         rA   rK   zEntry.__init__   sM    	
		')$ "rC   c                 t    dt        |       j                  t        |       | j                  | j                   fz  S )Nz%s(<%x>, name=%s, type=%s))rZ   rO   idrY   rM   s    rA   rN   zEntry.__repr__   s/    +tDz/B/BBtHdiiY]YbYb.cccrC   c                 0    t        | j                  d       y )NPrevious declaration is here)r   r[   rM   s    rA   already_declared_herezEntry.already_declared_here   s    dhh67rC   c                 V    t        |d| j                  z         | j                          y )Nz('%s' does not match previous declaration)r   rY   rf   )rJ   r[   s     rA   
redeclaredzEntry.redeclared   s"    c=		IJ""$rC   c                 "    | g| j                   z   S rG   )r]   rM   s    rA   all_alternativeszEntry.all_alternatives   s    v4444rC   c                 "    | g| j                   z   S rG   )r`   rM   s    rA   all_entrieszEntry.all_entries   s    v****rC   c                     t        | t              rAt        |t              r1| j                  | j                  f|j                  |j                  fk  S t        S rG   )
isinstancerU   rY   r@   NotImplemented)leftrights     rA   __lt__zEntry.__lt__   s@    dE"z%'?IItzz*ejj%++-FFF!!rC   NN)LrO   rP   rQ   inline_func_in_pxdborrowedr\   
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_cclassis_cpp_classis_constis_property	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apiutility_codeis_overridable
buffer_aux
prev_entrymight_overflowfused_cfunctionis_fused_specializedutility_code_definitionneeds_propertyin_with_gil_blockfrom_cython_utility_codeerror_on_uninitializedcf_usedouter_entryrK   rN   rf   rh   rj   rl   rr   rS   rC   rA   rU   rU   9   s   f HDJJJJKIOKLJLGILHK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
#d8%5+"rC   rU   c                   &    e Zd ZdZdZd Zd Zd Zy)
InnerEntryzK
    An entry in a closure scope that represents the real outer Entry.
    Tc                    t         j                  | |j                  |j                  |j                  |j
                         || _        || _        |}|j                  r|j                  }|j                  r|| _        |j                  | _	        |j                  | _
        |j                  | _        |j                  | _        | j                  j                  |        y rG   )rU   rK   rY   r@   rZ   r[   r   scopera   r`   r^   r_   r]   append)rJ   r   r   outermost_entrys       rA   rK   zInnerEntry.__init__   s    t[--"(("''"	( '
 &))-99O ))-,::-<<,::'6'N'N$!!$'rC   c                 f    |j                  d      rt        |      t        | j                  |      S )Nr:   )r=   AttributeErrorgetattrra   rJ   rY   s     rA   __getattr__zInnerEntry.__getattr__  s,    ??4  &&t**D11rC   c                 6    | j                   j                         S rG   )ra   rl   rM   s    rA   rl   zInnerEntry.all_entries  s    ""..00rC   N)rO   rP   rQ   __doc__r   rK   r   rl   rS   rC   rA   r   r      s     L(&21rC   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d3dZd Zd Zd4d	Zd
 Zd Zd4dZd Zd Zd Zd5dZd Zd6dZ 	 	 d7dZ!	 	 d8dZ"	 	 	 d9dZ#	 	 d:dZ$d Z%d Z&	 d;dZ'd Z(	 	 d<dZ)d Z*d=dZ+d>dZ,d Z-d  Z.d! Z/	 	 d?d"Z0d@d#Z1d$ Z2d% Z3d& Z4d' Z5d( Z6d) Z7d* Z8d+ Z9d, Z:d- Z;d. Z<d/ Z=d0 Z>d1 Z?dAd2Z@y)BScoper   rV   Nc                 >   || _         || _        || _        dt        |      |j	                  dd      fz  }| j                         }|r+|j                  |      | _        |j                  |z   | _        nt        |      | _        || _        i | _
        t               | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        g | _        i | _        i | _        i | _        i | _        i | _        i | _        g | _        g | _        i | _        y )Nz%d%s_._dot_)rY   outer_scopeparent_scopelenreplace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string_to_entryidentifier_to_entrynum_to_entryobj_to_entrybuffer_entrieslambda_defsid_counters)rJ   rY   r   r   mangled_name
qual_scopes         rA   rK   zScope.__init__C  s%    	&(#d)T\\#w-G!HH**,
","9"9$"?D * 7 7, FD"/"5D ,D !!#"$ !#%  rC   c                     | S rG   rS   )rJ   memos     rA   __deepcopy__zScope.__deepcopy__f      rC   c                    g }|j                   j                         D ].  \  }}|r||v s|j                  s|s|j                  ||f       0 | j                   j	                  |       dD ]`  }t        | |      }t        d |D              }	t        ||      D ]1  }|j                  s|s|j                  |	vs!|j                  |       3 b y )N)r   r   r   r   r   r   r   r   c              3   4   K   | ]  }|j                     y wrG   )rY   ).0es     rA   	<genexpr>z!Scope.merge_in.<locals>.<genexpr>|  s     515s   )r   itemsr   r   updater   r   rY   )
rJ   othermerge_unused	whitelistr   rY   entryattrself_entriesnamess
             rA   merge_inzScope.merge_ini  s     ==..0 	2KD%	 1::NND%=1	2
 	G$( 	/D #4.L555E - /JJ,EJJe4K ''./	/rC   c                 P    d| j                   j                  d| j                  dS )N< >)	__class__rO   r   rM   s    rA   __str__zScope.__str__  s     NN33T5H5HIIrC   c                     | j                   S rG   )r   rM   s    rA   r   zScope.qualifying_scope  s       rC   c                 v    |r|| j                   |S | j                  j                  || j                        S rG   )r   r   manglerY   rJ   prefixrY   s      rA   r  zScope.mangle  s5    %t'8'8$??$$++FDII>>rC   c                 N    t         j                  |d}| j                  |      S )N_)r
   r>   r  )rJ   rY   r  s      rA   mangle_internalzScope.mangle_internal  s#     #//6{{6""rC   c                 T    | j                   r| j                   j                  |      S |S rG   )r   mangle_class_private_namer   s     rA   r  zScope.mangle_class_private_name  s'    $$>>tDDrC   c                     | j                         j                  }	 ||   dz   }|||<   |r|s|S d||fz  S d|z  S # t        $ r d}Y $w xY w)Nr   r   z%s%dz%d)global_scoper   KeyError)rJ   rY   counterscounts       rA   next_idzScope.next_id  sn    $$&22	TNQ&E T5M))%<  	E	s   ; A	A	c                 6    | j                   j                         S z6 Return the module-level scope containing this scope. )r   r
  rM   s    rA   r
  zScope.global_scope  s    ,,..rC   c                 6    | j                   j                         S r  )r   builtin_scoperM   s    rA   r  zScope.builtin_scope  s    --//rC   c              #      K   |  | j                   r4t        | j                   t        j                  d            D ]  }|  y y w)Nr   )key)r   sortedoperator
attrgetter)rJ   r   s     rA   iter_local_scopeszScope.iter_local_scopes  sA     
>>H4G4G4WX  s   AAc	                    |j                   rt        | t              st        |d       | j                  s(|r&t        j                  d|      rt        |d|z  d       | j                  }	|r||	v r|s|	|   }
d}|j                  ra|
j                  j                  rK| j                         r;|
j                         D ]&  }||j                  k(  s|dk(  r|j                  sd} n d}|rng| j                  r|	|   j                  rnK|dk(  rt        |d	|z  | j                  rd
nd       n'|dk7  r"t        |d	|z         |	|   j!                          t#        ||||      }| j                  |_        ||_        |r| j'                  |      |_        |s||	|<   |j*                  rd
dlm} |j0                  |_        | |_        ||_        |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   ignore)r[   )
MemoryView)	is_bufferrn   
LocalScoper   r   rematchr   r   r~   rZ   is_cpprj   argsis_cpp_class_scoper   rf   rU   create_wrapperr   r   is_memoryviewslicerV   r  memslice_entry_initr\   r   rw   )rJ   rY   r@   rZ   r[   rw   shadowr   r&  r   	old_entrycpp_override_allowed	alt_entryr   r  s                  rA   declarezScope.declare  s    >>*T:">#NOEbhh|U.KC85@"E,,DGOFI $)   Y^^%@%@T[[]!*!;!;!= 0Iy~~-8+DII3700 ,0(#((WT]-G-Gx' /$6T=M=MSTUx'c-45335dE4s3 ,,-#'#4#4T#:E 
  %""$#77EJ%rC   c                 6    t        | j                  d|      S Nr   )r   r   r   s     rA   r   zScope.qualify_name  s    (;(;TBCCrC   c	                     |s6| j                   s|dk(  s|r|}n | j                  t        j                  |      }| j	                  ||||||      }	d|	_        ||	_        |	S )Npublic)r&  r   )r   r  r
   enum_prefixr-  r   
value_node)
rJ   rY   rZ   valuer[   r@   rw   r   r&  r   s
             rA   declare_constzScope.declare_const  sa    J($:cF$6$6=T5$ZR`a rC   c
           	          |s|}| j                  ||||||d      }
d|
_        ||
_        |r| j                  j	                  |
       |	s|
|_        |
S )NT)r   r   )r-  r   r   r   r   r   )rJ   rY   rZ   r[   r@   rw   r   definingr)  templater   s              rA   declare_typezScope.declare_type   sd     ET5$Z%)  +	$$U+DJ rC   c                    |s6| j                   s|dk7  s|r|}n | j                  t        j                  |      }	 | j                  r0| j
                  j                  | j                        j                  }nd }t        j                  ||||dk(  |      }| j                  ||||||      }
|
j                   |_        |
S # t        $ r3}	t        ||	j                  d          t        j                  }Y d }	~	ad }	~	ww xY w)NrW   r    r   )rw   r   )r   r  r
   type_prefixr%  r   lookuprY   rZ   r   create_typedef_type
ValueErrorr   r$  
error_typer9  r   )rJ   rY   	base_typer[   r@   rw   r   	namespacerZ   r   r   s              rA   declare_typedefzScope.declare_typedef  s    J)$;sF$6$6=
	)&& ,,33DII>CC	 	11$	53=3I2;=D !!$c5/9 " F#22  	)#qvvay!((D	)s   AB> >	C:)C55C:c
           
      p   |s6| j                   s|dk(  s|r|}n | j                  t        j                  |      }| j	                  |      }
|
sWt        j                  ||||||	      }| j                  |||||||d u      }
| j                  j                  |
       |
|_
        n|
j                  r/|
j                  j                  r|
j                  j                  |k(  st        |d|z  d       n}|r'|
j                  j                   rt        |d|z  d       nT| j#                  |
||       | j%                  |
||       |r,||
j                  _        | j&                  j                  |
       | j(                  r>| j*                  j-                  | j.                        j                  |
j                  _        |
S )Nr1  )rw   r   r7  '%s' redeclared  r   2'%s' already defined  (ignoring second definition))r   r  r
   r;  lookup_herer   CStructOrUnionTyper9  r   r   r   r   rZ   is_struct_or_unionkindr   r   check_previous_typedef_flagcheck_previous_visibilityr   r%  r   r<  rY   rA  )rJ   rY   rI  r   typedef_flagr[   r@   rw   r   packedr   rZ   s               rA   declare_struct_or_unionzScope.declare_struct_or_union*  s   
 J($:cF$6$6=  &00dE<@D%%dD#u's , & .E ##E*DJMMejj&C&C

4/047;5::++QTXXZ[\00cJ..uj#F',EJJ$%%,,U3""#'#3#3#:#:499#E#J#JEJJ rC   c           	      
  
 |4| j                   s|dk7  r|}n | j                  t        j                  |      }t	        |      }| j                  |      }|sPt        j                  |||||      }	| j                  ||	|||d u      }| j                  j                  |       nE|j                  r|j                  j                  s t        d|z         |j                          y |r'|j                  j                   rt#        d|z  d       n.|r,||j                  _        | j$                  j                  |       |r]|j                  j&                  r6|j                  j&                  |k7  rt        d       |j                          n||j                  _        |s|j                  j(                  r5||j                  j(                  k7  rt        d       |j                          
fd	
|rE 
||       |j+                  d
d
t        j,                  |j                        |j.                         | j0                  r>| j2                  j5                  | j6                        j                  |j                  _        |S )NrW   )	templates)rw   r7  r  rE  r   -Base type does not match previous declarationz5Template parameters do not match previous declarationc                     |D ]f  }|t         j                  u r|j                  t        d       / | |j                         | j
                  j                  j                  |       h y )Nz#Cannot inherit from incomplete type)r   r?  r   r   base_classesrZ    declare_inherited_cpp_attributes)r   rS  
base_classdeclare_inherited_attributesr[   s      rA   rV  z=Scope.declare_cpp_class.<locals>.declare_inherited_attributess  sd    * R
!6!66##+#DE0
8O8OPJJ$$EEjQRrC   this)rY   r@   rZ   r[   )r   r  r
   r;  listrF  r   CppClassTyper9  r   r   r   rZ   r   r   rf   r   r   r   rS  rP  declare_varCPtrTyper[   r%  r   r<  rY   rA  )rJ   rY   r   r[   r@   rS  rw   rP  r   rZ   rV  s      `      @rA   declare_cpp_classzScope.declare_cpp_classM  s    =J)$;F$6$6=L)  &**eULiID%%dD#u'E4E & GE##E*MMejj&=&=c-45++-5::++QTXXZ[\',EJJ$%%,,U3::**uzz/F/F,/V#NO//1.:EJJ+EJJ00

 4 44#VW//1	R (=6j>Q>QRWR\R\>]chclclm""#'#3#3#:#:499#E#J#JEJJ rC   c                     ||j                   j                  k7  r5t        |d|j                  dd|j                   j                     d       y y )N'z' previously declared using ')cdefctypedef)rZ   rL  r   rY   )rJ   r   rL  r[   s       rA   rJ  z!Scope.check_previous_typedef_flag  sC    5::222#

01H1HIK L 3rC   c                 r    |j                   |k7  r(t        |d|j                  d|j                   d       y y )Nr^  ' previously declared as ')rw   r   rY   )rJ   r   rw   r[   s       rA   rK  zScope.check_previous_visibility  s3    z)#

E,,. / *rC   c                    |r|s;| j                   s|dk(  s|dk(  s|r|}n | j                  t        j                  |      }| j                  r0| j
                  j                  | j                        j                  }nd }t        j                  ||||      }	nt        j                  }	| j                  ||	||||      }
||
_        g |
_        | j                  j!                  |
       |
S )Nr1  r    )r@   rw   r   )r   r  r
   r;  r%  r   r<  rY   rZ   r   	CEnumTypec_anon_enum_typer9  r&  enum_valuesr   r   )rJ   rY   r[   r@   rL  rw   r   r&  rA  rZ   r   s              rA   declare_enumzScope.declare_enum  s    $$
h(>!X- E KK(:(:DAE&& ,,33DII>CC	 	''e\9MD..D!!$c5#3 " 0-&rC   c                 :    | j                   j                  ||      S rG   )r   declare_tuple_type)rJ   r[   
componentss      rA   ri  zScope.declare_tuple_type  s    223
CCrC   c	                 $   |s*|dk7  s|r|}n | j                  t        j                  |      }|j                  r|dk7  r|j	                  |       | j                  |||||      }	d|	_        |r|dk7  rd|	_        d|	_        |rd|	_	        d|	_        |	S )NrW   r    r   )
r  r
   
var_prefixr   check_nullary_constructorr-  r}   r   r   r   
rJ   rY   rZ   r[   r@   rw   r   in_pxdis_cdefr   s
             rA   rZ  zScope.declare_var  s     Y&#F$5$5t<x!7**3/T5$Z@jH,#$E EJEIEJrC   c                 :    | j                   j                  ||      S rG   )r   declare_builtinrJ   rY   r[   s      rA   rr  zScope.declare_builtin  s    //c::rC   c                     |r;|j                   j                  s%t        |d|z         t        |j                  d       | j	                  |t
        ||      }t        |_        | j                  j                  |       |S )Nz'%s' already declaredre   rw   )
rZ   r~   r   r[   rZ  r   r   	signaturer   r   )rJ   rY   r[   rw   r   s        rA   _declare_pyfunctionzScope._declare_pyfunction  si    00#.56%));<  ~sz R.""5)rC   c                    | j                  |      }|s| j                  ||||      S |rI|j                  j                  rt        |_        n@|j                  t        ur.| j                  ||||      S | j                  |t        ||       | j                  d t        ||d      }t        |      |_        | j                  |      |_	        t        |_        d|_        |S )N)rw   r   ru  rW   r@   rw   T)rF  rw  rZ   is_unspecifiedr   rZ  r   rY   r   r   r   rv  r   )rJ   rY   r[   allow_redefinerw   r   s         rA   declare_pyfunctionzScope.declare_pyfunction  s      &++D#*TY+ZZzz((+
>1//cjX]/^^T>3:N  ~s'+	 ! C"4(
#006.!rC   c                 B   | j                  t        j                  dz   |      }| j                  t        j                  dz   |      }| j                  |      }| j	                  d |t
        |d      }||_        ||_        ||_        ||_	        t        |_        d|_        |S )Nfuncdef_methdef_rW   T)r  r
   lambda_func_prefixr   r-  r   rY   r   pymethdef_cnamer   r   rv  r   )rJ   lambda_namer[   r   r  r   r   s          rA   declare_lambda_functionzScope.declare_lambda_function  s    [[!:!:[!H+V
++f&?&?+&M{[**;7T:~sIN 
- /%.!rC   c                 :    | j                   j                  |       y rG   )r   r   rJ   def_nodes     rA   add_lambda_defzScope.add_lambda_def  s    )rC   c                 :    | j                   j                  |       y rG   )r   r   rJ   r   s     rA   register_pyfunctionzScope.register_pyfunction  s    ""5)rC   c           
         |s*|dk7  s|r|}n | j                  t        j                  |      }| j                  |      }|r|s0||j                  k7  r!|dk(  rd}|j                  }||_        ||_        |dk7  r0||j                  k7  r!t        |d|d|j                  d|dd       ||j                  k7  rt        |d|d|rd	nd
dd       |j                  j                  |      r,|j                  j                  |j                        |_	        n|dk(  r|j                  dk(  rd}| j                         rd}n6|r4|j                         D ]  }|j
                  r||j
                  k(  s n d}|r.| j                  ||||||	      }|j                         |_        |}nwt        |dd       ||_	        nb|s/|j"                  r#|j%                  |j                        r||_	        n1t'        |d       n$| j                  ||||||	      }||_        ||_        |r|dk7  rd|_        |rd|_        |s|s|dk7  rt'        |d|z         |rd|_        |	r|	|_        |
r!|j.                  rJ d|d|d       |
|_        |rMt1        ||t2              }| j5                  |      |_        d|_        d|_        |j<                  |_        ||_        ||_         |S )NrW   r    Tz
Function 'rb  z', now as 'r^  r   cpdefr_  F6Function signature does not match previous declaration3Non-extern C function '%s' declared but not definedz+duplicate utility code definition in entry z ())!r  r
   func_prefixrF  rw   r@   r   r   r   rZ   same_aswith_with_gilwith_gilr#  rj   add_cfunctionr]   r   compatible_signature_withr   r   r   r   r   rU   r   r   r   r}   rz   r   r   r   )rJ   rY   rZ   r[   r@   rw   r   ro  r7  	modifiersr   overridabler   can_overrider,  temp	var_entrys                    rA   declare_cfunctionzScope.declare_cfunction  s    Y&#F$6$6=  &jE,<,<<xAW  "--
##( Y&:9I9I+IY]_d_o_oq{|~  Ae222['f<>?@Bzz!!$'"ZZ55dmmD
)e.>.>(.J#(L{{}'+ */)?)?)A 0I#,??ey6N %0 ,0L##11$c5*V_`7<7M7M7O4 $%]_`a%)
E$8$8T=[=[\a\f\f=g "&EJ#WX&&tT3z9UE$E#.E jH,#$E EI:+A#LtST#'E #,E ))ocgin+oo!-EdE>:I'+'8'8'>I$$%I!$%I!#kkIO )E
rC   c                    | j                  |||||      }d|_        |r||_        |s|j                  r| j                  j                  |       |S t        | j                        }	t        | j                        D ]+  }
|
j                  s|
j                  j                  s n|	dz  }	- | j                  j                  |	|       |S )Nr   )r-  r~   r   is_fusedr   r   r   reversedr   rZ   insert)rJ   rY   rZ   r[   r@   rw   r  	inheritedr   icfunc_entrys              rA   r  zScope.add_cfunctionA  s    T5$Z@#,E %%e,  D&&'A'(:(:; ++;3C3C3L3LQ %%a/rC   c                 L    | j                  |      }|r|S t        |d|z         y )Nz'%s' is not declared)r<  r   rJ   rY   r[   r   s       rA   findz
Scope.findT  s(    D!L#-45rC   c                     | }|D ]P  }|j                  ||      }|s y |j                  r|j                  }2t        |ddj                  |      z          y  |S )Nz'%s' is not a cimported moduler   )r  r   r   join)rJ   pathr[   r   rY   r   s         rA   find_imported_modulezScope.find_imported_module\  s`      	DJJtS)Ec;chhtnLM	 rC   c                     | j                  |      xs- | j                  xr | j                  j                  |      xs d S rG   )rF  r   r<  r   s     rA   r<  zScope.lookupk  sC       &   BT%5%5%<%<T%B	rC   c                 :    | j                   j                  |d       S rG   )r   getr   s     rA   rF  zScope.lookup_herer  s    ||d++rC   c                 Z    | j                  |      }|s| j                  |t        d       }|S rG   rF  rZ  r   rJ   rY   r   s      rA   lookup_targetzScope.lookup_targetv  s0       &$$T>4@ErC   c                     | j                  |      }|r`|j                  rS|j                  j                  r1| j                  r%|j                  j                  | j                        S |j                  S y y rG   )r<  r   rZ   r  fused_to_specific
specializer  s      rA   lookup_typezScope.lookup_type~  sZ    D!U]]zz""t'='=zz,,T-C-CDD:: #5rC   c                 L   |d   j                   j                  r|d   j                   }|j                  j                  d|z        }|_|dd  D cg c]  }|j                    }}t	        j
                  |dd  D cg c]  }|j                    c}|j                               }||S | j                  d|z        }g }	||j                         }	g }
t        |      dk(  rmt        d      D ]_  }||   j                   j                  s||   j                   }|j                  j                  d|z        }|M|
|j                         z  }
a |
s|	sy t        t        |
|	z               }t	        j
                  |D cg c]  }|j                    c}|      S c c}w c c}w c c}w )Nr   z
operator%sr   r9   )rZ   r   r   r<  r   
best_matchrj   r   rangerX  r   )rJ   r  operandsobj_typemethodarg	arg_typesresfunctionfunction_alternativesmethod_alternativesnrj   s                rA   lookup_operatorzScope.lookup_operator  s   A;(({''H^^**<(+BCF!19!">#SXX>	> ++!",N#SXX,N,2,C,C,EG?J;;|h67 "$,$=$=$?! !x=!1X IA;##00'{//H%^^22<(3JKF)+v/F/F/HH+I $.C  $7:O$O PQ$$(%C3chh%C%57 	75 ?,N2 &Ds   F;F<F!c                     ddl m}  G d d|      }|D cg c]  } |||       }}| j                  ||      S c c}w )Nr   )Nodec                       e Zd Zy)4Scope.lookup_operator_for_types.<locals>.FakeOperandN)rO   rP   rQ   rS   rC   rA   FakeOperandr    s    rC   r  )rZ   )Nodesr  r  )rJ   r[   r  typesr  r  rZ   r  s           rA   lookup_operator_for_typeszScope.lookup_operator_for_types  sD    	$ 	<ABDK$/BB##Hh77 Cs   ;c                 B    | j                         j                  |       y rG   )r
  use_utility_coderJ   new_codes     rA   r  zScope.use_utility_code  s    ,,X6rC   c                 B    | j                         j                  |       y rG   )r
  use_entry_utility_coder  s     rA   r  zScope.use_entry_utility_code  s    2259rC   c                 2    |D ]  }|| j                   v s y yNr   r   )r   rJ   r   rY   s      rA   defines_anyzScope.defines_any  s%     	Dt||#	 rC   c                 f    |D ],  }|| j                   v s| j                   |   j                  s, y yr  )r   r   r  s      rA   defines_any_specialzScope.defines_any_special  s6     	Dt||#T(:(E(E	 rC   c                 <    ddl m}  |       j                  |        y )Nr   )get_type_inferer)TypeInferencer  infer_types)rJ   r  s     rA   r  zScope.infer_types  s    3&&t,rC   c                 @    | j                   }|y|j                         S NF)r   r#  )rJ   outers     rA   r#  zScope.is_cpp  s!      =<<>!rC   c                 >    | j                   j                  |||       y rG   )r   add_include_file)rJ   filenameverbatim_includelates       rA   r  zScope.add_include_file  s    ))(4DdKrC   )TNrG   )r   r   r   )NrW   r   r   )NrW   r   r   r   r   )NrW   r   )NrW   r   F)NrS   r    N)rW   r   r   NrW   r   r   r   )r    N)Fr    NrW   r   r   r   rS   NFFr  )ArO   rP   rQ   is_builtin_scopeis_py_class_scopeis_c_class_scopeis_closure_scopeis_genexpr_scopeis_passthroughr%  is_property_scopeis_module_scopeis_internalr   r   nogilr  return_typerK   r   r   r   r   r  r  r  r  r
  r  r  r-  r   r5  r9  rB  rN  r\  rJ  rK  rg  ri  rZ  rr  rw  r|  r  r  r  r  r  r  r  r<  rF  r  r  r  r  r  r  r  r  r  r#  r  rS   rC   rA   r   r     s   < NOKLKEK!F/0J!?#
  /08tD
 GH#$& =A670 <@>?).!H /1/34lL
/ ?@.D 0934*;(** KLSXN`&6, 7D87:-"LrC   r   c                   0    e Zd Zej                  Zd Zd Zy)PreImportScopec                 P    t         j                  | t        j                  d d        y rG   )r   rK   r	   
pre_importrM   s    rA   rK   zPreImportScope.__init__  s    tW//t<rC   c                 T    | j                  ||t        |d      }d|_        d|_        |S )NrW   T)r-  r   r}   rz   r  s       rA   rr  zPreImportScope.declare_builtin  s-    T4iH  rC   N)rO   rP   rQ   r
   preimport_cnamenamespace_cnamerK   rr  rS   rC   rA   r  r    s    ,,O=rC   r  c                       e Zd ZdZd Zd.dZd Zd.dZd.dZd Z	i d	d
e
gdde
gdde
gdde
gdde
gdde
gdde
gdde
gdde
gdde
gdde
gdd e
gd!d"e
gd#d$e
gd%d&e
gd'd(e
gd)d*e
gd+e
gd,e
gd-Zy)/BuiltinScopeTc                 ,   t         j                  t        j                  | dd d        n t        j                  | dt	               d        i | _        t        | j                  j                               D ]  \  }}|\  }}| j                  ||d |         y )N__builtin__)
r	   r  r   rK   r  
type_namesr  builtin_entriesr   rZ  )rJ   rY   
definitionr@   rZ   s        rA   rK   zBuiltinScope.__init__  s    %NN4d;NN40@$G &t';';'A'A'C D 	6D*$KE4T4u5	6rC   Nc                 L    |dk(  r
||dv }|sd}t         j                  | |      S )Nstr)Nr9   unicode)r   r<  )rJ   rY   language_level
str_is_strs       rA   r<  zBuiltinScope.lookup  s2    5=!+y8
 ||D$''rC   c                     t        t        |      sY| j                  | j                  j                  ||      S t        j
                  rt        |d|z         y t        |d|z  d       y y )Nundeclared name not builtin: %sr9   )hasattrbuiltinsr   rr  r	   error_on_unknown_namesr   r   rs  s      rA   rr  zBuiltinScope.declare_builtin  sa    x&+''77cBB11#@4GHC!BT!I1M 'rC   c                    t        |      }| j                  ||d |d|      }|rg|dk(  r|}nt        |      }t        ||t              }| j	                  |      |_        d|_        d|_        ||_        |j                  |_	        ||_
        |S )Nr    rw   r   *r   )r   r  rU   r   r   r   r}   rx   r   r   r   )rJ   rY   rZ   r@   python_equivr   r   r  s           rA   declare_builtin_cfunctionz&BuiltinScope.declare_builtin_cfunction  s     T"&&tT484@ ' Bs"#,\:lL.II'+'8'8'>I$$%I!#$I %1I"#kkIO )ErC   c                 `   t        |      }t        j                  |||      }t        |d d      }i |_        |dk(  rd|_        |j                  |       d| j                  |<   | j                  ||d d      }||_	        t        |j                  | j                  d      j                  |j                  |j                  j                        }| j!                  |      |_        d|_        d|_        d|_        d|_        ||_	        | |_        t.        j0                  rd|_        ||_        |S )	Nr    )r   rw   boolTr   ru  rZ   rY   rZ   r[   r@   )r   r   BuiltinObjectTypeCClassScope
directivesis_final_type	set_scoper  r9  r   rU   rY   r<  rZ   r[   typeptr_cnamer   r   r}   ry   r   rx   r   r	   cache_builtinsr   r   )	rJ   rY   r@   r   objstruct_cnamerZ   r   r   r  s	            rA   declare_builtin_typez!BuiltinScope.declare_builtin_type  s   T"++D%IDdxH6>!%Du !!!$dx!H);;v&++))JJ,,.	 $(#4#4T#:	  !	 	 !	 	!-		!!!%I%rC   c                     | S rG   rS   rM   s    rA   r  zBuiltinScope.builtin_scope3  r   rC   rZ   z((PyObject*)&PyType_Type)r  z((PyObject*)&PyBool_Type)r%   z((PyObject*)&PyInt_Type)r&   z((PyObject*)&PyLong_Type)r!   z((PyObject*)&PyFloat_Type)complexz((PyObject*)&PyComplex_Type)bytesz((PyObject*)&PyBytes_Type)	bytearrayz((PyObject*)&PyByteArray_Type)r   z((PyObject*)&PyString_Type)r  z((PyObject*)&PyUnicode_Type)tuplez((PyObject*)&PyTuple_Type)rX  z((PyObject*)&PyList_Type)dictz((PyObject*)&PyDict_Type)r   z((PyObject*)&PySet_Type)	frozensetz((PyObject*)&PyFrozenSet_Type)slicez((PyObject*)&PySlice_Type)NonePy_NonePy_FalsePy_True)FalseTruers   )rO   rP   rQ   r  rK   r<  rr  r  r  r  r   r  rS   rC   rA   r  r    sv    	6(N(:.? 	.?	
 	-~> 	.? 	/@ 	1>B 	/@ 	8.I 	0.A 	1>B 	/@  	.?!" 	.?#$ 	-~>%& 	8.I'* 	/@+0 	9n-12 ~.n-5OrC   r  c                       e Zd ZdZdZdZdZd Zd Zd Z	d 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#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"y)&ModuleScoper   r   c                 P   ddl m} || _        |j                  }t        j                  | |||       |dk(  r|j                  | _        d| _        n|| _        d| _        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 | _!        dD ]"  }| jE                  t        |      tF        d        $ | jI                  tK        jL                  d	d
             y )Nr   BuiltinrK   TFrV   r   )	__builtins__rO   __file__r   __path____spec__
__loader____package__
__cached__zPython.h)initial)'rV   r,  parent_moduler  r   rK   module_name
is_packager   contextr
   module_cnamemoddict_cnamemodule_dict_cnamemethtable_cnamemethod_table_cnamer   moddoc_cnamer   utility_code_listmodule_entries
c_includesr  r  pxd_file_loadedcimported_modulesr   types_importedincluded_fileshas_extern_classcached_builtinsundeclared_cached_builtinsr  _cached_tuple_typesrZ  r   process_includer   IncludeCode)rJ   rY   r5  r8  r,  r   var_names          rA   rK   zModuleScope.__init__s  sq   *++tT;>:  -88D"DO#D#DO()9)9:"//!'!5!5"("8"8,,!# {556 !#!e  !!*,'#00#% P 	LH]84ndK	L 	T--j$GHrC   c                     | j                   S rG   )r5  rM   s    rA   r   zModuleScope.qualifying_scope  s    !!!rC   c                     | S rG   rS   rM   s    rA   r
  zModuleScope.global_scope  r   rC   Nc                 2   | j                  |      }||S |$| j                  | j                  j                  nd}|=|dk(  xs6 | j                  d uxr& t        j                  | j                  j
                  v}| j                  j                  |||      S )N   r9   )r  r  )rF  r8  r  r   unicode_literalsfuture_directivesr   r<  )rJ   rY   r  r  r   s        rA   r<  zModuleScope.lookup  s      &L!<@LL<TT\\88Z[N'1, lD(jV-D-DDLLLjLj-j  &&tNWa&bbrC   c                    t        |      }	 | j                  |   }|j
                  }| j                  |      }|st        |      }t        |      D ]  \  }}|j                  d|z  ||        | j                  |dz   d|d||      }	| j                  j                  |	       |	|_        | j                  ||||      }||_        |S # t        $ r' t        j                  |      x}| j                  |<   Y w xY w)Nzf%s)rY   rZ   r[   _structr-   T)rL  r[   r@   )r  rI  r  r   c_tuple_typer@   rF  StructOrUnionScope	enumeraterZ  rN  r   removestruct_entryr9  r   )
rJ   r[   rj  ttyper@   r   r   ix	componentrY  s
             rA   ri  zModuleScope.declare_tuple_type  s   :&
	_,,Z8E   '&u-E!*:!6 LI!!urz	s!KL77	!8U3V[ 8 ]L$$\2!-E%%eUC?E  	_;E;R;RS];^^ED,,Z8	_s   C	 	-C98C9c                    t        t        |      s|t        j                  vr|t        j                  vrw| j
                  r| j                  |t        |      }|S t        j                  rt        |d|z         nt        |d|z  d       | j                  |d t        |d      }d|_        |S t        j                  r$| j                  D ]  }|j                   |k(  s|c S  |dk(  r'| j"                  s| j$                  j'                  d      S | j                  d d t        |d      }t        j                  rv|t        j                  vrdd|_        d|_        ||_        t*        j,                  |z   |_        | j                  j1                  |       | j2                  j1                  |       nd|_        ||_        | j5                         j7                  |      |_        |S )Nr  r9   rW   r   globals__Pyx_Globals)r  r  r   non_portable_builtins_mapuncachable_builtinshas_import_starrZ  r   r	   r  r   r   r-  rx   r  rG  rY   old_style_globalsr   r<  r   r
   builtin_prefixr@   r   rH  r  r   r   r  s       rA   rr  zModuleScope.declare_builtin  s   x&t===t777##((~sC11#@4GHC!BT!I1MT4iP#$ !!-- !::% L! 9T%;%;##**?;;LLt^S)LE!!d$2J2J&J EENEJ //$6EK  ''.++2259 EEJ#113@@FrC   c                     d }d}|(|dkD  r#| }|dkD  r/|r-|j                   }|dz  }|dkD  r|rn|dk7  r| j                   }d}| j                         }|j                  j                  ||||      S )NFr   r   T)relative_tor[   absolute_fallback)r5  r
  r8  find_module)rJ   r6  r[   relative_levelrf  rg  module_scopes          rA   rh  zModuleScope.find_module  s    
 !%.1*< K 1$)77!# !1$ q ,,K $((*##//[cM^ 0 ` 	`rC   c                     d|v r|j                  dd      \  }}nd }| j                  |      }|s't        || | j                        }|| j                  |<   |r|j                  |      }|S )Nr   r   )r5  r8  )splitlookup_submoduler)  r8  r@  find_submodule)rJ   rY   	submoduler   s       rA   rn  zModuleScope.find_submodule  sq     $;"jja0OD)I%%d+D$,,OE(-D%((3ErC   c                     d|v r|j                  dd      \  }}nd }| j                  j                  |d       }|r||j                  |      }|S )Nr   r   )rl  r@  r  rm  )rJ   rY   ro  modules       rA   rm  zModuleScope.lookup_submodule  sW    $;"jja0OD)I$$((t4+,,Y7FrC   c                 V    t        j                  |||      }| j                  |       y)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.
        )r  N)r   rK  rJ  )rJ   r  r  r  incs        rA   r  zModuleScope.add_include_file  s'     x)9ES!rC   c                     |j                         }||j                         }|j                  | j                  |       | j                  |   }y)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_updaterA  )rJ   rs  r  s      rA   rJ  zModuleScope.process_include  s?    2 mmo;++-C-ooc"rC   c                     || j                   vrn|j                  j                         D ]  }| j                  |        | j                   j	                  |       |j                   D ]  }| j                  |        y y rG   )rC  rA  valuesrJ  r   add_imported_module)rJ   r   rs  ms       rA   rz  zModuleScope.add_imported_module>  sx    ...''..0 *$$S)*""))%0,, ,((+,	 /rC   c                     |j                   rd|_        || j                  vr|| j                  |<   y t        |d|z  d       y )NTrD  r   )rz   r}   r   r   )rJ   rY   r   r[   s       rA   add_imported_entryzModuleScope.add_imported_entryF  s?     $E$!&DLLC,t3Q7rC   c                    | j                  |      }|r6|j                  r|j                  |u r|S |j                  r|j                  r |S | j                  |t        |      }d|_        ||_        | j                  |       |S )Nr   )rF  rz   r   rZ  r   r}   rz  )rJ   rY   r   r[   r   s        rA   declare_modulezModuleScope.declare_moduleO  s|    
   &  U__%=%%eoo $$T>3?E !E  'rC   c	                    |dvrt        |d|z         |s1|t        u rt        }|j                  r|j                  rt        d      |s2| }	|dk(  s|dk(  r|	r|}n | j                  t        j                  |      }| j                  |      }
|
r|
j                  r|
j                  j                  |      s+|dk(  r&|
j                  dk(  rt        |d|z  d       ||
_        |
j                  dk7  r8| j                  t        j                  |      }|
j                  |k(  r	|}||
_        |
j                   s	d	|
_        |
S t"        j%                  | ||||||||
	      }
|rTd|
_        |
j                  j(                  r|
j                  j(                  |
_        | j,                  j/                  |
       nd|
_        t2        j4                  rd|
_        |
S )N)rW   r1  r    z+Module-level variable cannot be declared %sz7Non-cdef global variable is not a generic Python objectr    r1  z6Variable '%s' type does not match previous declarationr   rW   Tr@   rw   r   ro  rp  )r   r   r   is_pyobjectis_extension_typer   r  r
   rl  rF  r   rZ   r  rw   r   r@   r   r   rZ  ry   declaration_valuer\   r   r   rz   r	   cimport_from_pyxr   )rJ   rY   rZ   r[   r@   rw   r   ro  rp  r7  r   mangled_cnames               rA   rZ  zModuleScope.declare_varh  s    <<#DzQR''%$$T-C-C#MO O !zHX%**@XF$5$5t<  &U)) ::%%d+)e.>.>(.JC!Y\`!`bcd!%EJ 9, $F,=,=t D;;-/ E"&EK'''+$!!$dC(-*&)&' " K  Ezz++"ZZ99
##E* !E##EJrC   c                    |sd|	v rt        |dd       |s/|dk(  s|dk(  r|r|}n | j                  t        j                  |      }|dk(  r|j                  rt        |d       | j                  |      }|rZ|j                  rN|j                  dk7  r?| j                  t        j                  |      }|j                  |k(  r|}||_
        ||_        t        j                  | |||||||||	|
|      }|S )	Nr6   z+Declarations should not be declared inline.r   r    r1  z6Extern functions cannot have default arguments values.rW   )r@   rw   r   ro  r7  r  r   r  )r   r  r
   r  optional_arg_countr   rF  r   rw   rl  r@   r   r   r  )rJ   rY   rZ   r[   r@   rw   r   ro  r7  r  r   r  r   r  s                 rA   r  zModuleScope.declare_cfunction  s     H	1CFJX%**@XF$6$6=!d&=&=#OP  &U))9, $F,=,=t D;;-/ E"'EK',E$''$cJC#	 ( %
 rC   c                 Z    | j                  |      }|s| j                  |t        |       y y rG   r  r  s       rA   declare_globalzModuleScope.declare_global  s,      &T>37 rC   c                 @    || j                   j                  |       y y rG   )r?  r   r  s     rA   r  zModuleScope.use_utility_code  s!    ""))(3  rC   c                     |y |j                   r%| j                  j                  |j                          |j                  r&| j                  j                  |j                         y y rG   )r   r?  r   r   r  s     rA   r  z"ModuleScope.use_entry_utility_code  sU    =""))%*<*<=((""))%*G*GH )rC   c                    |r|
dk7  r|
dk(  s|st        |dd       |}d}nd }| j                  |      }|r|s|j                  }|j                  r|j                  sd }n||j
                  }|r!|r|j                  r| j                  |||       |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%| j%                  t&        j(                  |      |_        | j+                  ||||
d|      }d	|_        |r||_        nH|j0                  s&| j%                  t&        j2                  |      |_        nt        |j                  d
       | j5                  |       | j6                  j9                  |       j
                  s|s|rt;        || |
      }| j<                  j?                         |_        |r'|j
                  r|jA                  |j
                         |jC                  |       | jD                  j9                  |       nO|r&|j
                  j                  rt        |d|z         n'|r%|j
                  jF                  rt        |d|z         |rd|_$        |r||_        |
dk7  r,|jJ                  |
k7  rt        |d|d|jJ                  d       |rd|_&        |r.|j.                  r|j.                  |k7  rt        |d       ||_        |r.|jN                  r|jN                  |k7  rt        |d       ||_'        | j<                  jQ                  d      rd	|j                  _)        d	|_*        |S )Nr    r1  z6ctypedef only valid for 'extern' , 'public', and 'api'r9   r   rQ  )
check_size)rw   r7  r)  Tz5Object name required for 'public' or 'extern' C class)rY   r   rw   zC class '%s' already definedz C class '%s' already implementedr   rW   zClass 'rb  r^  z4Object struct name differs from previous declarationz2Type object name differs from previous declarationfinal)+r   rF  rZ   r   r  r   definedrJ  r@  r   r   PyExtensionTyper[   buffer_defaultsobjtypedef_cnamer6  r   r  r  r
   typeptr_prefixr9  r   r  r   objstruct_prefixattach_var_entry_to_c_classr   r   r  r  copydeclare_inherited_c_attributesr  r   implementedr   rw   r   typeobj_cnamer  r  r   )rJ   rY   r[   r7  implementingr6  r@  r  r  r  rw   rL  r   r  r  r)  r  r   rZ   r   s                       rA   declare_c_classzModuleScope.declare_c_class  s`    J(2(*cUWXY.L#   &::DMMd&<&<

%--44UL#Nemmt~~ Ydnn%Dc#RST^^%.DN --lIzX/ER\^DDH#2D +(8%X%#. #'#6#6 %2"%)[[1F1F%M"%%dD#Jv & /E"EO'6$&&'+{{63J3JD'Q$eiiKM,,U3  ''. zz<#4t!+-#'??#7#7#9 88Iu%!!((/DJJ..c9D@A$**"8"8c=DE #$E EI"u'7'7:'E#))+ ,EI##(<(<(OcQR#2D !!d&8&8M&I#ST!.D??w''+EJJ$ 

 rC   c                    |j                   }|j                  rE|j                  j                  r/t        j                  d|j                  j                  |_        n|j
                  r|j
                  j                  rt        |j
                  j                        }|j                  }|rK|j
                  r"|t        |j
                  j                        kD  rn|j                  ry |j                  }|rKt        j                  |_        |j                  r_| j                  t        j                  |j                        |_        | j                  t        j                  |j                        |_        y y r/  )rZ   r@  vtabslot_cnamer
   obj_base_cnamer   r   r   is_builtin_typer  vtabstruct_prefixrY   vtabstruct_cnamevtabptr_prefixvtabptr_cname)rJ   r   rZ   entry_countr@  s        rA   allocate_vtable_namesz!ModuleScope.allocate_vtable_names>  s    zz>>dnn;; %%t~~'D'D#FDZZDJJ44 djj667KI +IOO<Y<Y8Z*Z,,%//	  #)"7"7D$(KK0H0H%**$UD!!%V-B-BEJJ!OD rC   c                     | j                   D ]<  }|j                  j                  rt        |j                  d|j
                  z         > y )N(C class '%s' is declared but not defined)r   rZ   r   r   r[   rY   r  s     rA   check_c_classes_pxdzModuleScope.check_c_classes_pxd[  s@     )) 	ZE::##eii!Kejj!XY	ZrC   c                 B   |j                   }|j                  }|j                  }|j                  st	        |j
                  d|z         |dk7  r1|j                  s%| j                  t        j                  |      |_        |j                  rX|j                  j                  D ]?  }|j                  r|j                  rt	        |j
                  d|j                  z         A |j                  r0| j                  t        j                  |j                        |_        y y )Nr  r    z)C method '%s' is declared but not defined)rZ   rY   rw   r   r   r[   r  r  r
   typeobj_prefixr   r   r   r  vtable_prefixvtable_cname)rJ   r   rZ   rY   rw   method_entrys         rA   check_c_classzModuleScope.check_c_classk  s    zzzz%%
zz%))G$NO!$*<*<!%V-B-BD!ID :: $

 8 8 +#009P9P,**,W$))-* ++
  $F,@,@%** MD rC   c                    d}|rt        d| j                  z          | j                  D ]\  }|rGt        d|j                  d|       t        d|j                         t        d|j
                         | j                  |       ^ y )Nr   z&Scope.check_c_classes: checking scope z	...entry r   z......type = z......visibility = )printr   r   rY   rZ   rw   r  )rJ   debug_check_c_classesr   s      rA   check_c_classeszModuleScope.check_c_classes  sw     !" :T=P=PPQ)) 	&E$%**e<=o

3+U-=-=>u%	&rC   c                     | j                   j                         D ]q  \  }}|j                  s|j                  s |j                  | u s/|j
                  dk7  s?|j                  rL|j                  rYt        |j                  d|z         s y )Nr    r  )
r   r   r~   r   r   rw   r   r   r   r[   r  s      rA   check_c_functionszModuleScope.check_c_functions  sy      <<--/ 	cKD%!!((!KK4/!,,8 % 1 1 % 4 4%))%Z]a%ab	crC   c                    ddl m} t        |j                  |j                  |j
                  |j                  j                        }|j                  |_        d|_	        d|_
        d|_        |j                  |_        ||_        y )Nr   r+  r  )rV   r,  rU   rY   	type_typer[   rZ   r  r   r}   ry   r   r   r   )rJ   r   r,  r  s       rA   r  z'ModuleScope.attach_var_entry_to_c_class  so     	$$))JJ,,.	 $)#7#7	  !	 	 !	++	%rC   c                     | j                   S rG   )cpprM   s    rA   r#  zModuleScope.is_cpp  s    xxrC   c                 <    ddl m}  |       j                  |        y )Nr   )PyObjectTypeInferer)r  r  r  )rJ   r  s     rA   r  zModuleScope.infer_types  s    6))$/rC   rs   )r  r  r  r  )r   r   NNNNNrW   r   r   NNr   )#rO   rP   rQ   r  rb  is_cython_builtinrc  rK   r   r
  r<  ri  rr  rh  rn  rm  r  rJ  rz  r}  r  rZ  r  r  r  r  r  r  r  r  r  r  r  r#  r  rS   rC   rA   r)  r)  U  s    2 OO$IL"c(#J`.	"#>,84 09346r KLSX:8
4I CD>B?H.2)*	n`P:Z N.&0
c&&0rC   r)  c                   L    e 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y)r   FNc                 <    ||}t         j                  | |||       y rG   r   rK   )rJ   rY   r   r   s       rA   rK   zLocalScope.__init__  s    &LtT;=rC   c                     ||z   S rG   rS   r  s      rA   r  zLocalScope.mangle  s    }rC   c                     | j                  t        j                  |      }| j                  ||||d      }d|_        |j
                  rd|_        d|_        | j                  j                  |       |S )NrW   r   0)
r  r
   rl  r-  r}   r  r\   r   r   r   )rJ   rY   rZ   r[   r@   r   s         rA   declare_argzLocalScope.declare_arg  sf    F--t4T5$Y?EJ&rC   c	                 0   |dv rt        |d|z         t        j                  | ||||||||	      }	|	j                  j                  r|	j                  j                  |	_        d|	_        | j                  |	_        | j                  j                  |	       |	S )Nr1  readonlyz$Local variable cannot be declared %sr  r   )r   r   rZ  rZ   r  r\   r   _in_with_gil_blockr   r   r   rn  s
             rA   rZ  zLocalScope.declare_var  s     //#=
JK!!$dC(-*&)&' " K ::''55EJ"&"9"9&rC   c                     | j                  |      rt        |dd       y | j                         j                  |      }|| j                  |<   y NrD  r   rF  r   r
  r  r   r  s       rA   r  zLocalScope.declare_global  D    D!C,a0%%'55d;E!&DLLrC   c                     | j                  |      }|r:|j                  | u r,|j                  s t        |d|z         |j	                          y | j                  |      }||j                  st        |d|z         y y Nz'%s' redeclared as nonlocalz"no binding for nonlocal '%s' found)rF  r   r   r   rf   r<  rJ   rY   r[   
orig_entryr   s        rA   declare_nonlocalzLocalScope.declare_nonlocal  sv    %%d+
***d2:;R;R#4t;<,,.KK%E}E$6$6c?$FG %7rC   c                 P   t         j                  | |      }||j                  }|j                  r|j                  }|j                  r|| urX|j
                  rLt        |j                  d      rt        d      d|_        t        ||       }d|_
        || j                  |<   |S |S )Nscope_classz#lookup() after scope class created.T)r   r<  r   r  r   r  r  r   r   r   r}   r   )rJ   rY   r   entry_scopeinner_entrys        rA   r<  zLocalScope.lookup  s     T4(++K..)55 ..$&;+G+G5;;6'(MNN $( (5*.'%0T"""rC   c                    | j                         D ]  }|j                  j                         D ]  }|j                  ru|j                  j
                  }| j                  r||_        9|j                  t        j                        r|t        t        j                        dz   d  }|d||_        |j                  s|j
                  |_        t        j                  d|j
                  |_          y )Nr9   z->)r  r   ry  r   r   r@   r  r=   r
   cur_scope_cnamer   r   original_cname)rJ   outer_scope_cnamer   r   r@   s        rA   mangle_closure_cnamesz LocalScope.mangle_closure_cnames  s    ++- 	SE--/ S%%!--33E**&+ ++F,B,BC$)#f.D.D*Ea*G*H$IE2CU&K%%+0;;E(.4.D.Dekk"REKS	SrC   rG   r  )rO   rP   rQ   has_with_gil_blockr  rK   r  r  rZ  r  r  r<  r  rS   rC   rA   r   r     sD      >

 0934"'	H(SrC   r   c                   @    e Zd ZdZdZd Zd Z	 	 d
dZddZd Z	d	 Z
y)GeneratorExpressionScopezScope for generator expressions and comprehensions.  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                 L   |}|j                   r|j                  }|j                   r|j                         j                  t        j
                        }t        j                  | |||       |j                  | _        dt        j                  t        |      |fz  | _        |j                   s|j                  s|j                  r3|j                  }|j                   r|j                  r&|j                  r3|j                  | _        |j                   j#                  |        y )Nz%s%d%s)r  r   r
  r  r
   genexpr_id_refr   rK   r  r>   r   genexp_prefixr  r  r   r   r   add)rJ   r   r   rY   s       rA   rK   z!GeneratorExpressionScope.__init__,  s    "++'44L ++((*2263H3HItT;=%00%)<)<c$i(NN **k.J.JkNkNk%11K **k.J.JkNkNk&22!!$'rC   c                 V    | j                   | j                  j                  ||      S rG   )r  r   r  r  s      rA   r  zGeneratorExpressionScope.mangle=  s&    ++T->->-E-Efd-STTrC   Nc	                    |t         u r5| j                  j                  |      }	|	r|	j                  r|	j                  }| j
                  | j                  j                  t        j                  |xs | j                               }| j                  |||||      }
d|
_        | j                  j                  rd|
_        nd|
_        d|
_        | j                   j#                  |
       |
| j$                  |<   |
S )NT)r   r   r<  r}   rZ   r  r   r  r
   rl  r  r-  r  ry   r   r   r   r   r   )rJ   rY   rZ   r[   r@   rw   r   ro  rp  r   r   s              rA   rZ  z$GeneratorExpressionScope.declare_var@  s     ##**11$7K{66"'' ,,d.?.?.F.FvGXGXZ^Zpbfbnbnbp.qrT5$Z@ ,,#E!EN &"TrC   c                 <    | j                   j                  |||      S rG   )r   r|  rJ   rY   r[   r{  s       rA   r|  z+GeneratorExpressionScope.declare_pyfunctionV  s"    22#~' 	'rC   c                 :    | j                   j                  ||      S rG   )r   r  )rJ   r   r[   s      rA   r  z0GeneratorExpressionScope.declare_lambda_functionZ  s    77
CHHrC   c                 8    | j                   j                  |      S rG   )r   r  r  s     rA   r  z'GeneratorExpressionScope.add_lambda_def]  s    ..x88rC   )NrW   r   r   Tr  )rO   rP   rQ   r   r  rK   r  rZ  r|  r  r  rS   rC   rA   r  r  %  s7     ("U 0937,'I9rC   r  c                        e Zd ZdZddZddZy)ClosureScopeTNc                 f    t         j                  | |||       t        j                  || _        y rG   )r   rK   r
   closure_scope_prefixclosure_cname)rJ   rY   
scope_namer   r   s        rA   rK   zClosureScope.__init__e  s)    D$\B'-'B'BJOrC   c                 6    t         j                  | |||d      S )NrW   ru  )r   r|  r  s       rA   r|  zClosureScope.declare_pyfunctionr  s    ,,T4nYb,ccrC   rG   r  )rO   rP   rQ   r  rK   r|  rS   rC   rA   r  r  a  s    PdrC   r  c                   .    e Zd ZddZ	 	 	 ddZ	 	 ddZy)rV  c                 4    t         j                  | |d d        y rG   r  r   s     rA   rK   zStructOrUnionScope.__init__y  s    tT4.rC   Nc                 p   |s|}|dk(  rt        |      }|j                  rt        j                  |      }| j	                  |||||      }d|_        | j                  j                  |       |j                  r|	st        |d       n|j                  r|
st        |d       |dk7  rt        |d|z         |S )NrW   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 declared %s)rB   r~   r   r[  r-  r}   r   r   r  r   r'  )rJ   rY   rZ   r[   r@   rw   r   ro  rp  allow_pyobjectallow_memoryviewr   s               rA   rZ  zStructOrUnionScope.declare_var|  s    
 EY&)%0&&t,DT5$Z@&N#HI$$-=#FG"#DzQRrC   c                 J    |
rt        |d       | j                  |||||      S )Nz0C struct/union member cannot be declared 'cpdef'ry  )r   rZ  )rJ   rY   rZ   r[   r@   rw   r   ro  r7  r  r  s              rA   r  z$StructOrUnionScope.declare_cfunction  s7     #IJdC&+
   D 	DrC   )?)NrW   r   r   r   FF)NrW   r   r   r   rS   F)rO   rP   rQ   rK   rZ  r  rS   rC   rA   rV  rV  v  s'    / 0934;@0 KL@EDrC   rV  c                       e Zd Zd Zd Zy)
ClassScopec                 P    t         j                  | |||       || _        d | _        y rG   )r   rK   
class_namer   rJ   rY   r   s      rA   rK   zClassScope.__init__  s"    tT;<rC   c                 @   t         j                  | |      }|r|S |dk(  r~t        ddt        j                  t
        t        j                  dt
        d       gdd            }t        j                  j                  dd      |_
        | j                  |       d|_        |S )Nclassmethod__Pyx_Method_ClassMethodrV   r   ClassMethodzCythonFunction.cr   )r   r<  rU   r   	CFuncTyper   CFuncTypeArgr   UtilityCodeload_cachedr   r  r~   r  s      rA   r<  zClassScope.lookup  s    T4(L= 
 *$$",,RFGAOPE -1,<,<,H,HXj,kE)''.!"ErC   N)rO   rP   rQ   rK   r<  rS   rC   rA   r  r    s    
rC   r  c                   @    e Zd ZdZd Zd Zd Z	 	 d
dZd Zd Z	d	 Z
y)PyClassScoper   c                 $    | j                  |      S rG   )mangle_special_namer   s     rA   r  z&PyClassScope.mangle_class_private_name  s    ''--rC   c                     |rK|j                  d      r:|j                  d      s)t        d| j                  j	                  d      |      }|S )Nr:   r  )r=   endswithr   r  lstripr   s     rA   r  z PyClassScope.mangle_special_name  s>    DOOD)$--2E DOO,B,B3,G!NODrC   c                 P    | j                  |      }t        j                  | |      S rG   )r  r  rF  r   s     rA   rF  zPyClassScope.lookup_here  s%    ''-%%dD11rC   Nc	                     | j                  |      }|t        u rt        }t        j	                  | ||||||||	      }	d|	_        d|	_        |	S )Nr  r   )r  r   r   r   rZ  rz   r|   rn  s
             rA   rZ  zPyClassScope.declare_var  sc     ''-##!D!!$dC(-*&)&' " K  !rC   c                    | j                  |      }|r:|j                  | u r,|j                  s t        |d|z         |j	                          y | j                  |      }|t        |d|z         y || j                  |<   y r  )rF  r   r   r   rf   r<  r   r  s        rA   r  zPyClassScope.declare_nonlocal  sy    %%d+
***d2:;R;R#4t;<,,.KK%E}c?$FG &+T"rC   c                     | j                  |      rt        |dd       y | j                         j                  |      }|| j                  |<   y r  r  r  s       rA   r  zPyClassScope.declare_global  r  rC   c                 8    | j                   j                  |      S rG   )r   add_default_value)rJ   rZ   s     rA   r  zPyClassScope.add_default_value  s    11$77rC   r  )rO   rP   rQ   r  r  r  rF  rZ  r  r  r  rS   rC   rA   r  r    s5    
 .
2
 0934+'8rC   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dZ	 	 ddZdd	Zd
 Z	 	 ddZddZddZd Zd Zy)r  r   Fc                     t         j                  | ||       |dk7  rJ|j                  t        j                  |      | _        |j                  t        j                  |      | _        g | _        g | _	        y )Nr    )
r  rK   r  r
   methtab_prefixr=  gstab_prefixgetset_table_cnameproperty_entriesinherited_var_entries)rJ   rY   r   rw   s       rA   rK   zCClassScope.__init__  sc    D$4!&1&8&89N9NPT&UD#&1&8&89L9Ld&SD# "%'"rC   c                 ,   | j                   r| j                  j                  dd      sy| j                  j                  }|r&|j
                  |j
                  j                         S | j                  j                  r| j                  j                   S y)Nno_gcFT)	has_cyclic_pyobject_attrsr  r  parent_typer@  r   needs_gcr  is_gc_simple)rJ   r@  s     rA   r  zCClassScope.needs_gc  sz     ))$//2E2Egu2U$$..	4??++----''4444rC   c                 `    | j                         xr | j                  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)r  r  r  rM   s    rA   needs_tp_clearzCClassScope.needs_tp_clear*  s)    
 }}Pt':':=%'P#PPrC   c                    g }g }g }| j                   D ]  }|j                  j                  rI|s| j                  s|j                  dk7  s7|s|j                  j
                  rP|j                  |       b|j                  t        j                  k(  r|j                  |       |j                  j                  s|j                  |        |xs |xs |}||||ffS )Nr;   )
r   rZ   r  is_closure_class_scoperY   r  r   r   c_py_buffer_typer'  )rJ   include_weakrefinclude_gc_simplepy_attrs
py_buffersmemoryview_slicesr   have_entriess           rA   get_refcounted_entriesz"CClassScope.get_refcounted_entries1  s    
%% 	0Ezz%%"t'B'BejjTaFa(

0G0G .z:::!!%(..!((/	0  B:B1Bh
4EFFFrC   Nc	                 H   |r| j                   rt        |d       | j                  st        |      rt        |d|z         |s|}|dk(  rt	        |      }|j
                  r:|dk7  r5|j                  |       | j                  t        j                  d             | j                  |||||      }	d|	_        | j                  j                  |	       |j                  rd| _        nq|j
                  rd| _        n]|j"                  rQ| j                  s|dk7  r@d| _        |j&                  r&|j(                  r|j(                  j+                         rd| _        |d	vrt        |d
|z         |dv rRd|	_        | j                  s|dk(  rt        |d       |j"                  s |j1                  |       st        |d|z         |	S d|	_        |	S |t2        u rt4        }t6        j9                  | ||||||||	      }	d|	_        d|	_        d| j>                  j@                  z  | _!        |	S )NzVC attributes cannot be added in implementation part of extension type defined in a pxdz/The name '%s' is reserved for a special method.rW   r    z#include <new>r   Tr;   )rW   r1  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  z(PyObject *)%s)"r  r   r   r   rB   r   rm  r  r   r   r-  r}   r   r   r'  has_memoryview_attrshas_cpp_class_attrsr  has_pyobject_attrsr  r   r  r  r   can_coerce_to_pyobjectr   r   r   rZ  r{   rz   r  r  r  rn  s
             rA   rZ  zCClassScope.declare_varD  s%    ||c78 ..3OPT3UcE  *-e4E  Z8%;..s3%%d&6&67G&HILLudCDE !E##E*&&,0)""+/(!!t'B'BdmF[*.',,#zzTZZ-@-@-B59D2!BBcG*TV33 (,$22t}7L#Z[((D,G,G,M#X[__` L (-$L''%%%dD$,1j*-fg & OE  EO !E $4d6F6F6T6T#TD LrC   c                    |t         v r!| j                  d      rAt        |d|z         n1|dk(  r,t         D ]#  }| j                  |      st        |d|z         % |dk(  rt        |d       | j                  |t        |d      }t        |      }|r||_        d|_        nt        |_        d|_        | j                  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    ru  r   r   )r   rF  r   rZ  r   r   rv  r   r   r   r   )rJ   rY   r[   r{  r  r   special_sigs          rA   r|  zCClassScope.declare_pyfunction  s    **.cADHI]", K##A&#EIJK 9# R S  ~s,4 ! 6248 *EO E0EO E""5)rC   c                     | j                   s|dk(  rt        d      }t        j                  | |      }|r9|j                  r-| j
                  j                  s| j
                  j                  sy |S )Nr0  	__cinit__)r   r   r  rF  r   r  r  r  r  s      rA   rF  zCClassScope.lookup_here  sa    **ty/@ -D&&tT2U--##33 ''55rC   c           
         t        |      r"| j                  j                  st        |d       |j                  }|j
                  sd|st        |d       nU| j                  j                  |d   j                        s-t        |d|d   j                  d|d| j                  d       | j                  |      }|t        |      }|r|j                  st        |d|z  d       n|r|j                  rt        |d	|z         |j                  r|j                  rt        |d
       n|j                  |j                  d      rO|j                   |j                  j                   k(  r,|j                  j#                  |j$                        |_        n|j'                  |j                  d      r|j                   |j                  j                   k(  ry| j(                  rU|sS|j+                  |j                  dd      s5t        |d|d| j,                  dd       t        |j.                  dd       | j1                  ||||d|	      }nbt        |d       t        |j.                  d       n?| j(                  rt        |d|d| j,                  d       | j1                  ||||||	      }|r%| j3                  t4        j6                  |      |_        |
|_        ||_        d|	v rd|_        | j                  j>                  s'|j<                  s| j@                  jC                  d      rd|_        |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  rD  z'%s' already definedz'Overriding final methods is not allowedr   )
as_cmethod)r5  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.r9   re   r  )rw   r  z2Signature not compatible with previous declarationz
C method 'z@' not previously declared in definition part of extension type 'r^  r6   Tr  )#r   r  r  r   r$  is_static_methodassignable_fromrZ   rF  rB   r~   r   r   r   r   same_c_signature_asr  r  r  r  r  !same_c_signature_as_resolved_typer  r[   r  r  r
   r  r   r   r   r  r  r  r   )rJ   rY   rZ   r[   r@   rw   r   ro  r7  r  r   r  r$  r   s                 rA   r  zCClassScope.declare_cfunction  s    (-d6F6F6V6V#PQyy$$c:;%%55d1gllCcAw||T4+;+;= >  &=%d+E%%047; 0 0#5<=))e.@.@#HI--ejjq-Idjj\a\f\f\l\lNl!&!9!9$--!HEJ33EJJQ3OTXT^T^bgblblbrbrTrV $ F Fuzz`awx F y %)$//; =>	?
  		+I1M ..tT3RZfo.pE#ST%))%CD||c.2DOOEF &&tT3z9UE#{{6+=+=tDE)
	!&*E#**e.E.EOO(%)E"%*%5%5E"rC   c           
      ~    | j                  |      }t        j                  | |||||||      }	d|	_        ||	_        |	S )Nr  r   )rF  r  r  r   r   )
rJ   rY   rZ   r[   r@   rw   r  r  r   r   s
             rA   r  zCClassScope.add_cfunction  sN    %%d+
((tT3)3Y) ) U%rC   c                     t        |      }| j                  ||d |d|      }t        ||t              }||_        d|_        d|_        ||_        |j                  |_        ||_	        |S )Nr    r
  r   )
r   r  rU   r   r   r}   rx   r   r   r   )rJ   rY   rZ   r@   r   r   r  s          rA   r  z%CClassScope.declare_builtin_cfunction  sw     T"&&tT484@ ' B$n5	#'	  !	 	!-	++	%rC   c                 (   | j                  |      }|| j                  ||t        |d      }d|_        ||_        t        || j                         |       |_        | j                  |j                  _        | j                  j                  |       |S )NrW   r   )r   r   )rF  r-  r   r   r   PropertyScoper
  r   r  r  r   )rJ   rY   r   r[   r   s        rA   declare_propertyzCClassScope.declare_property	  s      &=LLt^S)LE	#D++-dD"&"2"2$$U+rC   c           
         fd}|j                   |j                  z   }|D ]]  | j                  j                   |j                        j
                  d d      }d|_        | j                   j                  |       _ |j                  d d  D ]3  j
                  j                  sj
                  j                          5 |j                  D ]  j                  }j                  }|xr |j                  }|s ||      }| j                  j                  j
                  j                  |j                  j                   d      }d|_        j$                  rNd|_        j&                  |_        | j(                  |j(                  k(  s|j&                  rj*                  |_        |rd|_        ||_        j.                  sj.                  |_         y )Nc                 B    t         j                  dj                  S r/  )r
   r  r@   )r@   
base_entrys    rA   adaptz9CClassScope.declare_inherited_c_attributes.<locals>.adapt	  s    $33Z5E5EFFrC   rW   r   Tr<  )r  r   r-  rY   r@   rZ   r}   r   r   r  "get_all_specialized_function_typesr   rx   r  r[   rw   r   r   r   r   r   r   r   r   )	rJ   
base_scoperD  r   r   r@   r  rx   rC  s	           @rA   r  z*CClassScope.declare_inherited_c_attributes	  s   	G 22Z5K5KK! 	5JLLz'7'7!8y2E !"E&&--e4	5 %2215 	EJ''BBD	E %22 	=J$$E"..I";y';';Je&&z
'1~~u'1'<'<j>W>Wcg ' iE "#E**)-&*4*F*F'%%)@)@@//-7-H-HE*+/($-!&&%/%<%<")	=rC   )FTr  r  r  rG   )rO   rP   rQ   r  r   r,  r*  r+  r  r  r  rK   r  r  r(  rZ  r|  rF  r  r  r  r@  r  rS   rC   rA   r  r    s    " "  %GK(
Q 6;15G( 0934<|6  KLSX<|
*=rC   r  c                   D    e Zd ZdZdZdZddZ	 	 d	dZ	 	 d
dZd Z	d Z
y)CppClassScoper   Nc                     t         j                  | ||d        |j                  | _        g | _        |7|D ]1  }| j	                  ||t        j                  |      d d      }d|_        3 y y )Nr    r   )r   rK   r  r  r-  r   TemplatePlaceholderTyper   )rJ   rY   r   rP  Ttemplate_entrys         rA   rK   zCppClassScope.__init__C	  sp    tT;5%00%'"  +!%q*<<Q?x"Q)*&+ !rC   c
                 n   |s|}| j                  |      }
|	r|
|
j                  j                  |      r+|
j                  j                  |j                        |
_        nQ|j
                  r#|j                  |
j                        r||
_        n"t        |d       n| j                  |||||      }
d|
_	        |j
                  rJ| j                  r>| j                  j                         s$| j                  j                         d||
_        |dk7  r"|	s|dk7  r| j                  j                  |
       |
S )Nr  r   ::rW  r  )rF  rZ   r  r  r  r~   r  r   r-  r}   get_fused_typesempty_declaration_coder   r   r   )rJ   rY   rZ   r[   r@   rw   r   ro  rp  r7  r   s              rA   rZ  zCppClassScope.declare_varM	  s     E  &)zz!!$'"ZZ55dmmD
""t'E'Eejj'Q!
cSTLLudCDE99,,./3yy/O/O/QSX#Y 6>x48+;##E*rC   c                 @   | j                   j                  d      d   }||dfv rl|jt        j                  d|}d}t	        j
                         |_        |j                  |_        d }|j                  D cg c]
  } ||       c}|_        n7|dk(  r2|0t        j                  d|}d}t	        j
                         |_        |dv r~|j                  rr| j                  j                  D ]Y  }|j                  j                  |      }|s!|j                  j                  r8t        |d	       t        |j                  d
       [ | j!                  |      }| j#                  ||||||      }|r|s|j%                         |_        |
|_        ||_        |S c c}w )NrN  r  rK   r  c                     | j                   j                  r^| j                   j                  sHt        j                  | j
                  t        j                  | j                         | j                        S | S rG   )rZ   r   is_referencer   r  rY   
c_ref_typer[   )r  s    rA   	maybe_refz2CppClassScope.declare_cfunction.<locals>.maybe_refq	  sU    88((1F1F%22*"7"7"A377L L JrC   __dealloc__<del>r  rW  zdConstructor cannot be called without GIL unless all base constructors can also be called without GILzBase constructor defined here.)r7  r@   rw   )rY   rl  r
   r  r   	CVoidTyper  r$  original_argsr  rZ   rS  r   r<  r   r[   rF  rZ  rj   r]   r   r   )rJ   rY   rZ   r[   r@   rw   r   ro  r7  r  r   r  r  rU  r  baserC  r   r   s                      rA   r  zCppClassScope.declare_cfunctionf	  s    YY__T*2.
J
++&,&8&8*EED)335D "&D 4899=C3=DI]"u})/););ZHED)335D&&4::		.. L!ZZ..t4
joo&;&;#   F  G*..*JK	L
 %%d+
  tS*2', ! E h,6,G,G,IE))
' >s   9Fc                    |j                   }|}t        |dd       r|j                  }t        |dd       rt        |dd       r$|j                  D cg c]  }|j                   }}nd}|j
                  |j                  z   D ]  }|j                  dv r|j                  | j                  v r|j                   | j                  |j                  |j                  |j                  d d      }d|_        d|_        | j
                  j                  |        |j                  D ]h  }| j                  |j                  |j                  |j                   |j                  |j"                  d|j$                  |j&                        }d|_        j |j(                  D ]_  }|j                  |vs| j+                  |j                  |j                  |j                   |j                  |j"                        }d|_        a y c c}w )	Ntemplate_typerP  rS   rX  r    r   r   )r   r  r   )r   r   r]  rP  rY   r  r   r   r-  r@   rZ   r}   r   r   r   r  r[   rw   r   r   r   r9  )rJ   rU  rF  r]  rK  base_templatesrC  r   s           rA   rT  z.CppClassScope.declare_inherited_cpp_attributes	  s   %%
"m_d;)77M m_d;=+t4.;.E.EFaffFNFN
 ,,z/E/EE	9J ??&99??dll2OOZ__j6F6FOOT85$%!%&"**11%8	9 %22 	#J**:??JOO+5>>:;K;K+5+@+@a5?5N5N8B8O8O	 + QE
 "#E	# %11 	'Jn4))*//:??*4..*:J:J*4*?*?A &'"	'5 Gs   G<c           	         t        | j                  | j                        }||_        | j                  j                         D ]6  }|j                  rN|j                  |j                  |j                  j                  |      |j                  |j                  d       ^|j                  j                  rm|j                         D ]Y  }|j                  |j                  |j                  j                  |      |j                  |j                  |j                         [ |j                  |j                  |j                  j                  |      |j                  |j                  |j                          9 |S )Nr   )r8  )r   )rH  rY   r   rZ   r   ry  r   r9  r  r[   r@   r~   rj   r  r   rZ  rw   )rJ   ry  
type_entryr   r   r   s         rA   r  zCppClassScope.specialize	  s.   dii)9)9:
\\((* 	4E}}""5::#(::#8#8#@#(99#(;;,-	 # /
 ((//1 IA++AFF,-FF,=,=f,E,-EE,-GG9:	 , II !!%**"'**"7"7"?"'))"'++"'"2"2	4	4* rC   rG   )Nr    r   r   r   r   )Nr    r   r   r   rS   NF)rO   rP   rQ   r%  default_constructorrZ   rK   rZ  r  rT  r  rS   rC   rA   rH  rH  ;	  sB     D+ 08AB4 JKSX$L%'NrC   rH  c                       e Zd ZdZddZy)r?  r   c                     t        |      }|r)| j                  ||t        |d      }d|_        ||_        |S t        |d       y )NrW   r   zKOnly __get__, __set__ and __del__ methods allowed in a property declaration)r   r-  r   r   rv  r   )rJ   rY   r[   r{  rv  r   s         rA   r|  z PropertyScope.declare_pyfunction	  sK    3D9	LLt^S)LE E'EOL# , -rC   Nr  )rO   rP   rQ   r  r|  rS   rC   rA   r?  r?  	  s     rC   r?  c                       e Zd Zd Zd Zy)CConstScopec                     t         j                  | d|j                  z   |j                  |j                         || _        y )Nconst_)r   rK   rY   r   r   const_base_type_scope)rJ   rh  s     rA   rK   zCConstScope.__init__	  s<    ,111!--!..		0
 &;"rC   c                     | j                   j                  |      }|;t        j                  |      }t        j                  |j
                        |_        |S y rG   )rh  rF  r  r   c_const_typerZ   r  s      rA   rF  zCConstScope.lookup_here	  sL    **66t<IIe$E#00<EJL rC   N)rO   rP   rQ   rK   rF  rS   rC   rA   re  re  	  s    ;rC   re  c                       e Zd Zd Zy)TemplateScopec                 V    t         j                  | ||d        |j                  | _        y rG   )r   rK   r  r  s      rA   rK   zTemplateScope.__init__	  s!    tT;5%00rC   N)rO   rP   rQ   rK   rS   rC   rA   rl  rl  	  s    1rC   rl  )3
__future__r   r!  r  r  r  r  ImportErrorErrorsr   r   r   StringEncodingr   rV   r	   r
   r   r   r   	TypeSlotsr   r   r   r   r   r   r   r   r?   rB   objectrE   rU   r   r   r  r  const_counterr)  r   r  r  rV  r  r  r  rH  r?  re  rl  rS   rC   rA   <module>ru     so  
 ' 	  " 2 1 )   8C C  => 0 0v"F v"r 1  1Fy
LF y
LxU r5 rh i	0% i	0XaS aSH99u 99xd: d*#D #DL   F98: 98x}=* }=@
PE PfE ,% "1E 1QO  s   D. .	D;:D;