3
h             ,   @   s  d dl mZ d dlZd dlZd dlZyd dlZW n ek
rL   d dlZY nX ddlm	Z	 ddl
mZmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1h$Zd2d3 Z d^d4d5Z!G d6d7 d7e"Z#G d8d9 d9e"Z$G d:d; d;e$Z%G d<d= d=e"Z&G d>d? d?e&Z'G d@dA dAe&Z(dZ)G dBdC dCe&Z*G dDdE dEe&Z+G dFdG dGe&Z,G dHdI dIe+Z-G dJdK dKe-Z.G dLdM dMe&Z/G dNdO dOe&Z0G dPdQ dQe0Z1G dRdS dSe0Z2G dTdU dUe&Z3G dVdW dWe&Z4G dXdY dYe&Z5G dZd[ d[e&Z6G d\d] d]e&Z7dS )_    )absolute_importN   )try_finally_contextmanager   )warningerrorInternalErrorperformance_hint)EncodedString)OptionsNaming)
PyrexTypes)py_object_typeunspecified_type)pyfunction_signaturepymethod_signaturerichcmp_special_methodsget_slot_tableget_property_accessor_signature)Future)CodeautobreakZcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofZstaticstructswitchZtypedefunionZunsignedvoidZvolatilewhileZ_Boolz_Complex, _ImaginaryinlineZrestrictc             C   s<   | d d dkr&| j tjp"| dk s.| tkr8tj|  } | S )Nr   ____weakref____dict__)r4   r5   )
startswithr   pyrex_prefixiso_c99_keywords)cname r:   h/var/www/html/CrowdFlow/Picklecon/ble_analysis_env/lib/python3.6/site-packages/Cython/Compiler/Symtab.pyc_safe_identifier'   s
    

r<   c             C   sp   y| j d W n\ tk
rj   | j djddjd} |rHd|| f } n| jtjrf| jtjtjd} Y nX | S )Nasciipunycode   -   _z%s_%sr   )encodeUnicodeEncodeErrorreplacedecoder6   r   r7   Zpyunicode_identifier_prefix)r9   Zmangle_withr:   r:   r;   punycodify_name/   s    rE   c               @   s    e Zd ZdZdd Zdd ZdS )	BufferAuxFc             C   s   || _ || _d S )N)buflocal_nd_var	rcbuf_var)selfrG   rH   r:   r:   r;   __init__I   s    zBufferAux.__init__c             C   s
   d| j  S )Nz<BufferAux %r>)r5   )rI   r:   r:   r;   __repr__M   s    zBufferAux.__repr__N)__name__
__module____qualname__Zwritable_neededrJ   rK   r:   r:   r:   r;   rF   F   s   rF   c               @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(g Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdddZMd	d
 ZNdd ZOdd ZPdd ZQdd ZRdd ZSeTdd ZUdd ZVdd ZWdS )EntryFr    NprivateTc             C   s@   || _ || _|| _|| _|| _g | _g | _g | _g | _| | _	d S )N)
namer9   typeposinitoverloaded_alternativescf_assignmentscf_referencesinner_entriesdefining_entry)rI   rR   r9   rS   rT   rU   r:   r:   r;   rJ      s    zEntry.__init__c             C   s   dt | jt| | j| j f S )Nz%s(<%x>, name=%s, type=%s))rS   rL   idrR   )rI   r:   r:   r;   rK     s    zEntry.__repr__c             C   s   t | jd d S )NzPrevious declaration is here)r   rT   )rI   r:   r:   r;   already_declared_here  s    zEntry.already_declared_herec             C   s   t |d| j  | j  d S )Nz('%s' does not match previous declaration)r   rR   r\   )rI   rT   r:   r:   r;   
redeclared	  s    zEntry.redeclaredc             C   s   | g| j  S )N)rV   )rI   r:   r:   r;   all_alternatives  s    zEntry.all_alternativesc             C   s   | g| j  S )N)rY   )rI   r:   r:   r;   all_entries  s    zEntry.all_entriesc             C   s4   t | tr,t |tr,| j| jf|j|jfk S tS d S )N)
isinstancerO   rR   r9   NotImplemented)leftrightr:   r:   r;   __lt__  s    zEntry.__lt__c             C   s   t | jdkS )Nr   )lenrW   )rI   r:   r:   r;   cf_is_reassigned  s    zEntry.cf_is_reassignedc             C   s2   | j jstd| _| j sttjjdd| _d S )NTZOptionalLocalszCppSupport.cpp)	rS   is_cpp_classAssertionErroris_cpp_optionalutility_coder   UtilityCodeload_cachedutility_code_definition)rI   r:   r:   r;   make_cpp_optional  s    zEntry.make_cpp_optionalc             C   s   | j r|| j kS dS )NF)pytyping_modifiers)rI   Zmodifier_namer:   r:   r;   declared_with_pytyping_modifier#  s    z%Entry.declared_with_pytyping_modifier)NN)XrL   rM   rN   inline_func_in_pxdZborrowedrU   
annotationZpep563_annotation
visibility
is_builtin
is_cglobalis_pyglobal	is_memberis_pyclass_attris_variableis_cfunction
is_cmethodis_builtin_cmethodZis_unbound_cmethodis_final_cmethodis_inline_cmethodis_anonymousis_type	is_cclassrg   is_constis_propertyis_cproperty	doc_cnameZgetter_cnameZsetter_cnameZis_self_argis_argis_local
in_closurefrom_closurein_subscopeZis_declared_genericis_readonlyZpyfunc_cname
func_cnamefunc_modifiersfinal_func_cnamedocas_variableZxdecref_cleanupin_cinclude	as_moduleis_inheritedZpystring_cnameZis_identifierZis_internedused
is_specialdefined_in_pxdis_implementedapirj   is_overridableZ
buffer_aux
prev_entryZmight_overflowZfused_cfunctionZis_fused_specializedrm   needs_propertyin_with_gil_blockZfrom_cython_utility_codeZerror_on_uninitializedZcf_usedouter_entry
is_cgetterri   known_standard_library_importro   Zenum_int_valuevtable_typerJ   rK   r\   r]   r^   r_   rd   propertyrf   rn   rp   r:   r:   r:   r;   rO   Q   s   [
rO   c               @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )

InnerEntryzK
    An entry in a closure scope that represents the real outer Entry.
    Tc             C   sz   t j| |j|j|j|j || _|| _|}x|jr:|j}q,W || _|j	| _	|j
| _
|j| _|j| _|j| _| j	j|  d S )N)rO   rJ   rR   r9   rS   rT   r   scoperZ   rY   rW   rX   rV   ri   append)rI   r   r   Zoutermost_entryr:   r:   r;   rJ   -  s     

zInnerEntry.__init__c             C   s   |j drt|t| j|S )Nr3   )r6   AttributeErrorgetattrrZ   )rI   rR   r:   r:   r;   __getattr__A  s    
zInnerEntry.__getattr__c             C   s
   | j j S )N)rZ   r_   )rI   r:   r:   r;   r_   G  s    zInnerEntry.all_entriesN)rL   rM   rN   __doc__r   rJ   r   r_   r:   r:   r:   r;   r   '  s
   r   c               @   sb  e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZg ZdZdd Zdd	 Zdwd
dZdd Zdd ZdxddZdd Zdd ZdyddZdd Z dd Z!dd Z"e#dzddZ$d{d d!Z%d"d# Z&d|d%d&Z'd}d(d)Z(d~d*d+Z)dd,d-Z*df d.dfd/d0Z+d1d2 Z,d3d4 Z-dd5d6Z.d7d8 Z/dd9d:Z0f fd;d<Z1d=d> Z2d?d@ Z3ddAdBZ4ddCdDZ5dEdF Z6dGdH Z7dIdJ Z8dd$dddf ddfdKdLZ9ddd$f dfdMdNZ:ddOdPZ;dQdR Z<dSdT Z=dUdV Z>dWdX Z?dYdZ Z@d[d\ ZAd]d^ ZBd_d` ZCdadb ZDdcdd ZEdedf ZFdgdh ZGdidj ZHdkdl ZIdmdn ZJdodp ZKdqdr ZLdsdt ZMddudvZNdS )Scoper   FrP   NTc             C   s   || _ || _|| _dt||jddf }| j }|rP|j|| _|j| | _nt	|| _|| _i | _
t | _g | _g | _g | _g | _g | _g | _g | _g | _g | _i | _i | _i | _i | _i | _g | _g | _i | _x"| jD ]}| jt	|t d d qW d S )Nz%d%s_.Z_dot_)rT   )!rR   outer_scopeparent_scopere   rC   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_entriesZdefined_c_classesZimported_c_classesZcname_to_entryZidentifier_to_entryZnum_to_entryZobj_to_entryZbuffer_entrieslambda_defsid_countersscope_predefined_namesdeclare_varr   )rI   rR   r   r   mangled_nameZ
qual_scopevar_namer:   r:   r;   rJ     s>    
zScope.__init__c             C   s   | S )Nr:   )rI   memor:   r:   r;   __deepcopy__  s    zScope.__deepcopy__c       
      C   s   g }x<|j j D ].\}}| s&||kr|js0|r|j||f qW | j j| xZdD ]R}t| |}td	d
 |D }	x0t||D ]"}|js|r|j|	kr|j| qW qTW d S )Nr   r   r   r   r   r   r   r   c             s   s   | ]}|j V  qd S )N)rR   ).0er:   r:   r;   	<genexpr>  s    z!Scope.merge_in.<locals>.<genexpr>)r   r   r   r   r   r   r   r   )r   itemsr   r   updater   r   rR   )
rI   otherZmerge_unusedZ	allowlistr   rR   entryattrZself_entriesnamesr:   r:   r;   merge_in  s&    
      
zScope.merge_inc             C   s   d| j j| jf S )Nz<%s %s>)	__class__rL   r   )rI   r:   r:   r;   __str__  s    zScope.__str__c             C   s   | j S )N)r   )rI   r:   r:   r;   r     s    zScope.qualifying_scopec             C   s,   |rt d|| j|f S | jj|| jS d S )Nz%s%s%s)rE   r   r   manglerR   )rI   prefixrR   r:   r:   r;   r     s    zScope.manglec             C   s   dt j|f }| j|S )Nz%s%s_)r   r7   r   )rI   rR   r   r:   r:   r;   mangle_internal  s    zScope.mangle_internalc             C   s   | j r| j j|S |S )N)r   mangle_class_private_name)rI   rR   r:   r:   r;   r     s    zScope.mangle_class_private_namec             C   s`   | j  j}y|| d }W n tk
r2   d}Y nX |||< |rT|sH|S d||f S d| S d S )Nr   r   z%s%dz%d)global_scoper   KeyError)rI   rR   Zcounterscountr:   r:   r;   next_id  s    

zScope.next_idc             C   s
   | j j S )z6 Return the module-level scope containing this scope. )r   r   )rI   r:   r:   r;   r     s    zScope.global_scopec             C   s
   | j j S )z6 Return the module-level scope containing this scope. )r   builtin_scope)rI   r:   r:   r;   r     s    zScope.builtin_scopec             c   s4   | V  | j r0x"t| j tjddD ]
}|V  q"W d S )Nr   )key)r   sortedoperator
attrgetter)rI   r   r:   r:   r;   iter_local_scopes  s    zScope.iter_local_scopesc             c   s$   | j }|d k	r|| _ d V  || _ d S )N)in_c_type_context)rI   r   Zold_c_type_contextr:   r:   r;   new_c_type_context  s
    zScope.new_c_type_contextc	             C   s|  |j rt| t rt|d | j rD|rDtjd|rDt|d| d | j}	|ob||	kob| ob| j	 r|	| }
d}|j
r|
jj
r| j rx4|
j D ]$}||jkr|dkr|j rd}P qW d}|rnZ| jr|	| jrnH|dkrt|d	| | jrdnd
 n$|dkrt|d	|  |	| j  t||||d}| j|_||_|r\| j||_|s\||	|< |jrl|j|_| |_||_|S )Nz5Buffer types only allowed as function local variablesz
^_[_A-Z]+$z'%s' is a reserved name in C.r   Fz<init>Tr!   z'%s' redeclared r   ignore)rT   )Z	is_bufferr`   
LocalScoper   r   rematchr   r   is_builtin_scoperz   rS   is_cppr^   argsis_cpp_class_scoper   r\   rO   create_wrapperr   r   is_memoryviewslicedefault_valuerU   r   rs   )rI   rR   r9   rS   rT   rs   shadowr   r   r   Z	old_entryZcpp_override_allowed	alt_entryr   r:   r:   r;   declare  sH    


zScope.declarec             C   s   t d| j|f S )Nz%s.%s)r
   r   )rI   rR   r:   r:   r;   r   ;  s    zScope.qualify_namerQ   c	       
      C   sP   |s*| j s|dks|r|}n| jtj|}| j||||||d}	d|	_||	_|	S )Npublic)r   r   )r   r   r   Zenum_prefixr   r   Z
value_node)
rI   rR   rS   valuerT   r9   rs   r   r   r   r:   r:   r;   declare_const>  s    zScope.declare_constr   c
          	   C   s\   |s|}| j ||||||dd}
d|
_||
_|r<| jj|
 |	 rXt|dd d krX|
|_|
S )NT)r   r   r   )r   r   r   r   r   r   r   )rI   rR   rS   rT   r9   rs   r   definingr   templater   r:   r:   r;   declare_typeJ  s    zScope.declare_typec             C   s   |s*| j s|dks|r|}n| jtj|}y6| jrD| jj| jj}nd }t	j
||||dk|}W n8 tk
r }	 zt||	jd  t	j}W Y d d }	~	X nX | j||||||d}
|
j|_|
S )NrQ   r!   r   )rs   r   )r   r   r   type_prefixr   r   lookuprR   rS   r   Zcreate_typedef_type
ValueErrorr   r   
error_typer   r   )rI   rR   	base_typerT   r9   rs   r   	namespacerS   r   r   r:   r:   r;   declare_typedef^  s$    


zScope.declare_typedefc
          	   C   s(  |s*| j s|dks|r|}n| jtj|}| j|}
|
s| j }tj||||||	|d}| j|||||||d k	d}
| j	j
|
 |
|_n|
jo|
jjo|
jj|kst|d| d nT|r|
jjrt|d| d n6| j|
|| | j|
|| |r||
j_| jj
|
 | jr$| jj| jj|
j_|
S )Nr   )in_cpp)rs   r   r   z'%s' redeclared  r   z2'%s' already defined  (ignoring second definition))r   r   r   r   lookup_herer   r   ZCStructOrUnionTyper   r   r   r   r   rS   Zis_struct_or_unionkindr   r   check_previous_typedef_flagcheck_previous_visibilityr   r   r   r   rR   r   )rI   rR   r   r   typedef_flagrT   r9   rs   r   packedr   r   rS   r:   r:   r;   declare_struct_or_unionu  s8    
zScope.declare_struct_or_unionr!   c       
         s  |d kr*| j s|dkr|}n| jtj|}t|}| j|}|s|tj|||||d}	| j||	|||d k	d}| j	j
| n|jo|jjstd|  |j  d S |r|jjrtd| d n|r||j_| jj
| |r|jjo|jj|kr
td |j  n||j_|s"|jjrB||jjkrBtd |j   fd	d
 |r| || |jddtj|j|jd | jr| jj| jj|j_|S )NrQ   )	templates)rs   r   z'%s' redeclared z2'%s' already defined  (ignoring second definition)r   z-Base type does not match previous declarationz5Template parameters do not match previous declarationc                sN   xH|D ]@}|t jkrq|jd kr,td q | |j | jjj| qW d S )Nz#Cannot inherit from incomplete type)r   r   r   r   base_classesrS    declare_inherited_cpp_attributes)r   r  
base_class)declare_inherited_attributesrT   r:   r;   r    s    


z=Scope.declare_cpp_class.<locals>.declare_inherited_attributesthis)rR   r9   rS   rT   )r   r   r   r   listr   r   ZCppClassTyper   r   r   r   rS   rg   r   r\   r   r   r   r  r  r   CPtrTyperT   r   r   r   rR   r   )
rI   rR   r   rT   r9   r  rs   r  r   rS   r:   )r  rT   r;   declare_cpp_class  sJ    



	
zScope.declare_cpp_classc             C   s,   ||j jkr(t|d|jd|j j f  d S )Nz#'%s' previously declared using '%s'cdefctypedef)r  r  )rS   r  r   rR   )rI   r   r  rT   r:   r:   r;   r     s    z!Scope.check_previous_typedef_flagc             C   s$   |j |kr t|d|j|j f  d S )Nz '%s' previously declared as '%s')rs   r   rR   )rI   r   rs   rT   r:   r:   r;   r     s    
zScope.check_previous_visibilityc
             C   s   |r|s6| j s"|dks"|dks"|r(|}n| jtj|}| jrN| jj| jj}
nd }
|rjt	j
|||
|	d}qt	j||||
|	d}nt	j}| j||||||d}|rtjjdd|_| j| ||_g |_| jj| |S )Nr   r!   )r   )r9   rs   r   ZEnumClassDeclzCppSupport.cpp)r   r   r   r   r   r   r   rR   rS   r   ZCppScopedEnumTypeZ	CEnumTypeZc_anon_enum_typer   r   rk   rl   rj   use_entry_utility_coder   Zenum_valuesr   r   )rI   rR   rT   r9   scopedr  rs   r   r   r   r   rS   r   r:   r:   r;   declare_enum  s,    

zScope.declare_enumc             C   s   | j j||S )N)r   declare_tuple_type)rI   rT   
componentsr:   r:   r;   r    s    zScope.declare_tuple_typec
             C   s   |s$|dks|r|}n| j tj|}| j|||||}
d|
_|jrh|dkrh| jd r^|
j  n
|j| |r|dkrd|
_	d|
_
|rd|
_d|
_
|	r|	|
_|
S )NrQ   r   r!   
cpp_locals)r   r   
var_prefixr   ry   rg   
directivesrn   check_nullary_constructorr   r   r   ro   )rI   rR   rS   rT   r9   rs   r   in_pxdis_cdefro   r   r:   r:   r;   r     s&    


zScope.declare_varc             C   s0   |sd S x"|D ]}||krt |d|  qW d S )Nz"Modifier '%s' is not allowed here.)r   )rI   rT   	modifiersallowedmodifierr:   r:   r;   _reject_pytyping_modifiers  s
    
z Scope._reject_pytyping_modifiersc             C   s   | j |||S )N)r   )rI   rR   rS   rT   r:   r:   r;   $declare_assignment_expression_target  s    z*Scope.declare_assignment_expression_targetc             C   s   | j |}| jj||S )N)r   r   declare_builtin)rI   rR   rT   r:   r:   r;   r  "  s    
zScope.declare_builtinc             C   sP   |r(|j j r(t|d|  t|jd | j|t||d}t|_| jj	| |S )Nz'%s' already declaredzPrevious declaration is here)rs   )
rS   rz   r   rT   r   r   r   	signaturer   r   )rI   rR   rT   rs   r   r:   r:   r;   _declare_pyfunction&  s    zScope._declare_pyfunctionc             C   s   | j |}|s | j||||dS |rR|jjr4t|_qd|jtk	rd| j||||dS n| j|t||d | jd t||dd}t||_| j||_	t
|_d|_|S )N)rs   r   )rs   rQ   )r9   rs   T)r   r!  rS   is_unspecifiedr   r   r
   rR   r   r   r   r   r   )rI   rR   rT   allow_redefiners   r   r:   r:   r;   declare_pyfunction/  s     




zScope.declare_pyfunctionc             C   sl   | j tjd |}| j tjd |}| j|}| jd |t|d}t||_||_||_	||_
t|_d|_|S )NZfuncdef_Zmethdef_rQ   T)r   r   Zlambda_func_prefixr   r   r   r
   rR   r   pymethdef_cnamer   r   r   r   )rI   Zlambda_namerT   r   r%  r   r   r:   r:   r;   declare_lambda_functionC  s    

zScope.declare_lambda_functionc             C   s   | j j| d S )N)r   r   )rI   def_noder:   r:   r;   add_lambda_defR  s    zScope.add_lambda_defc             C   s   | j j| d S )N)r   r   )rI   r   r:   r:   r;   register_pyfunctionU  s    zScope.register_pyfunctionc             C   sB  |s$|dks|r|}n| j tj|}d|	ko2|o2|}|r<d}| j|}|r| rz||jkrz|dkrzd}|j}||_||_|dkr||jkrt|d||j|f d ||jkrt|d||rd	nd
f d |j	j
|r|j	j|j|_	q|dko|jdkr| j}| j rd}n>|rR| rRx.|j D ]}|j sF||jkr,P q,W d}|r|| j||||||	}|j |_|}nt|dd ||_	nd| r|jr|j|j	r|j	jr|j	jd kr|jrt|jd|j |  ||_	n
t|d n | j||||||	}||_||_|r"d|_|r8|dkr8d|_|rDd|_| rl| rl|dkrlt|d|  |rxd|_|	r|	|_|
r|j std||f |
|_|rt ||t!}| j"||_#d|_$d|_%|j&|_&||_'||_(|j)r>|jd kr>|jr>|d j* r>|r>| r>| r>t+j,|| ||j-j.d |S )NrQ   r2   Fr!   Tz6Function '%s' previously declared as '%s', now as '%s'r   z)Function '%s' previously declared as '%s'Zcpdefr  z6Function signature does not match previous declarationzNo exception value declared for '%s' in pxd file.
Users cimporting this function and calling it without the gil will always require an exception check.
Suggest adding an explicit exception value.z3Non-extern C function '%s' declared but not definedz2duplicate utility code definition in entry %s (%s)r   )Zfunction_nameZvoid_return)/r   r   func_prefixr   rs   r9   r   r   r   rS   same_aswith_with_gilwith_gilr   r   r^   add_cfunctionrV   r   compatible_signature_withnogilexception_valuer	   rT   rR   r   rq   r   r   r   rj   rh   rO   r   r   r   ry   rv   r   r   r   exception_checkZin_utility_coder   Zwrite_noexcept_performance_hintreturn_typeis_void)rI   rR   rS   rT   r9   rs   r   r  r   r  rj   overridableZinline_in_pxdr   Zcan_overrider   temp	var_entryr:   r:   r;   declare_cfunctionX  s    



 zScope.declare_cfunctionc          	   K   sd   t dd |D sttj|tjd| jd gf|}	| j||	|d |||d}
d|
_|d k	r`||
_|
S )Nc             s   s   | ]}|dkV  qdS )r1  r2  r0  r-  is_const_methodis_static_methodN)r1  r2  r0  r-  r9  r:  r:   )r   kr:   r:   r;   r     s   z(Scope.declare_cgetter.<locals>.<genexpr>rI   )r9   rs   r  r   T)	allrh   r   	CFuncTypeCFuncTypeArgparent_typer8  r   r   )rI   rR   r3  rT   r9   rs   r  r   Zcfunc_type_configZ
cfunc_typer   r:   r:   r;   declare_cgetter  s    zScope.declare_cgetterc             C   s   | j |||||}d|_|r"||_|s,|jr:| jj| nFt| j}	x,t| jD ]}
|
jsd|
j	j rfP |	d8 }	qPW | jj
|	| |S )Nr   )r   rz   r   is_fusedr   r   re   reversedr   rS   insert)rI   rR   rS   rT   r9   rs   r  	inheritedr   icfunc_entryr:   r:   r;   r.    s    

zScope.add_cfunctionc             C   s$   | j |}|r|S t|d|  d S )Nz'%s' is not declared)r   r   )rI   rR   rT   r   r:   r:   r;   find  s    
z
Scope.findc             C   sP   | }xF|D ]>}|j ||}|s"d S |jr0|j}q
t|ddj|  d S q
W |S )Nz'%s' is not a cimported moduler   )rG  r   r   join)rI   pathrT   r   rR   r   r:   r:   r;   find_imported_module  s    
zScope.find_imported_modulec             C   sd   | j |}| j|p(| jr&| jj|p(d }|r2|S | jrD| jj|pFd }|r`|jr`| j|j| |S )N)r   r   r   r   rv   _emit_class_private_warningrT   )rI   rR   r   r   r:   r:   r;   r     s    


zScope.lookupc             C   s*   | j j| j|d }|r|S | j j|d S )N)r   getr   )rI   rR   r   r:   r:   r;   r     s    zScope.lookup_herec             C   s   | j j|d S )N)r   rL  )rI   rR   r:   r:   r;   lookup_here_unmangled  s    zScope.lookup_here_unmangledc             C   s
   | j |S )N)r   )rI   rR   r:   r:   r;   #lookup_assignment_expression_target  s    z)Scope.lookup_assignment_expression_targetc             C   sF   | j |}|s0| j|}|r0|jr0| j|j| |sB| j|td }|S )N)r   rM  rv   rK  rT   r   r   )rI   rR   r   r:   r:   r;   lookup_target   s    


zScope.lookup_targetc             C   s0   |r,|j r,|jjr&| jr&|jj| jS |jS d S )N)r   rS   rA  fused_to_specific
specialize)rI   r   r:   r:   r;   $_type_or_specialized_type_from_entry,  s    
z*Scope._type_or_specialized_type_from_entryc             C   sF   | j |}| j|}|r|S |r<|jr<ddlm} ||j}| j|S )Nr   ) get_known_standard_library_entry)r   rR  r   BuiltinrS  )rI   rR   r   tprS  r:   r:   r;   lookup_type2  s    



zScope.lookup_typec             C   s  |d j jr`|d j }|jjd| }|d k	r`dd |dd  D }tj||j }|d k	r`|S | jd| }g }|d k	r|j }g }	t|dkrxJtdD ]>}
||
 j jr||
 j }|jjd| }|d k	r|	|j 7 }	qW |	 r| rd S t	t
|	| }tjdd |D |S )Nr   z
operator%sc             S   s   g | ]
}|j qS r:   )rS   )r   argr:   r:   r;   
<listcomp>G  s    z)Scope.lookup_operator.<locals>.<listcomp>r   r   c             S   s   g | ]
}|j qS r:   )rS   )r   rW  r:   r:   r;   rX  `  s    )rS   rg   r   r   r   
best_matchr^   re   ranger
  r   )rI   r   operandsZobj_typemethodZ	arg_typesresfunctionZfunction_alternativesZmethod_alternativesnr^   r:   r:   r;   lookup_operatorB  s2    

zScope.lookup_operatorc                s<   ddl m} G dd d|  fdd|D }| j||S )Nr   )Nodec               @   s   e Zd ZdS )z4Scope.lookup_operator_for_types.<locals>.FakeOperandN)rL   rM   rN   r:   r:   r:   r;   FakeOperande  s   rb  c                s   g | ]} |d qS ))rS   r:   )r   rS   )rb  rT   r:   r;   rX  g  s    z3Scope.lookup_operator_for_types.<locals>.<listcomp>)ZNodesra  r`  )rI   rT   r   typesra  r[  r:   )rb  rT   r;   lookup_operator_for_typesc  s    zScope.lookup_operator_for_typesc             C   s   t |d| d d S )NzGlobal name %s matched from within class scope in contradiction to to Python 'class private name' rules. This may change in a future release.r   )r   )rI   rT   rR   r:   r:   r;   rK  j  s    z!Scope._emit_class_private_warningc             C   s   | j  j| d S )N)r   use_utility_code)rI   new_coder:   r:   r;   re  o  s    zScope.use_utility_codec             C   s   | j  j| d S )N)r   r  )rI   r   r:   r:   r;   r  r  s    zScope.use_entry_utility_codec             C   s    x|D ]}|| j krdS qW dS )Nr   r   )r   )rI   r   rR   r:   r:   r;   defines_anyu  s    

zScope.defines_anyc             C   s,   x&|D ]}|| j kr| j | jrdS qW dS )Nr   r   )r   r   )rI   r   rR   r:   r:   r;   defines_any_special|  s    
zScope.defines_any_specialc             C   s   ddl m} | j|  d S )Nr   )get_type_inferer)TypeInferenceri  infer_types)rI   ri  r:   r:   r;   rk    s    zScope.infer_typesc             C   s   | j }|d krdS |j S d S )NF)r   r   )rI   outerr:   r:   r;   r     s    zScope.is_cppc             C   s   | j j||| d S )N)r   add_include_file)rI   filenameverbatim_includelater:   r:   r;   rm    s    zScope.add_include_file)TN)N)N)N)r   r   r   )NrQ   r   r   )NrQ   r   r   r   r   )NrQ   r   )NrQ   r   F)rQ   r   r   N)NrQ   FFFN)r!   N)Fr!   )F)NF)OrL   rM   rN   r   is_py_class_scopeis_c_class_scopeis_closure_scopeis_local_scopeis_generator_expression_scopeis_comprehension_scopeis_passthroughr   is_property_scopeis_module_scopeis_c_dataclass_scopeZis_internalr   r   r0  rP  r3  r   r   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   r   r  r  r   r  r  r  r!  r$  r&  r(  r)  r8  r@  r.  rG  rJ  r   r   rM  rN  rO  rR  rV  r`  rd  rK  re  r  rg  rh  rk  r   rm  r:   r:   r:   r;   r   K  s   #$



:
 
 
  
#4
 

	
f
!r   c               @   s"   e Zd ZejZdd Zdd ZdS )PreImportScopec             C   s   t j| tjd d  d S )N)r   rJ   r   
pre_import)rI   r:   r:   r;   rJ     s    zPreImportScope.__init__c             C   s"   | j ||t|d}d|_d|_|S )NrQ   T)r   r   ry   rv   )rI   rR   rT   r   r:   r:   r;   r    s    zPreImportScope.declare_builtinN)rL   rM   rN   r   Zpreimport_cnamenamespace_cnamerJ   r  r:   r:   r:   r;   r{    s   r{  c               @   sN   e Zd ZdZdd ZdddZdd Zdd	d
Zddej	fddZ
dd ZdS )BuiltinScopeTc             C   sH   t jd krtj| dd d  ntj| dt d  i | _| jdtd d d S )N__builtin__boolz((PyObject*)&PyBool_Type))r   r|  r   rJ   r{  
type_namesr   r   )rI   r:   r:   r;   rJ     s
    
zBuiltinScope.__init__Nc             C   s,   |dkr |d kr|dk}|s d}t j| |S )Nstrr   unicode)Nr   )r   r   )rI   rR   language_level
str_is_strr:   r:   r;   r     s    zBuiltinScope.lookupc             C   sL   t t|sH| jd k	r"| jj||S tjr8t|d|  nt|d| d d S )Nzundeclared name not builtin: %sr   )hasattrbuiltinsr   r  r   error_on_unknown_namesr   r   )rI   rR   rT   r:   r:   r;   r    s    

zBuiltinScope.declare_builtinc             C   st   t |}| j||d |d|d}|rp|dkr0|}nt |}t||t}| j||_d|_d|_||_|j	|_	||_
|S )Nr!   )rs   rj   *r   )r
   r8  rO   r   r   r   ry   rt   rj   r   r   )rI   rR   rS   r9   Zpython_equivrj   r   r7  r:   r:   r;   declare_builtin_cfunction  s    z&BuiltinScope.declare_builtin_cfunctionc       
      C   s   t |}||||}t|d d|d}i |_|dkr8d|_|j| d| j|< | j||d dd}||_t|j	| j
dj|j|jjd}	| j||	_d|	_d|	_d|	_d|	_||	_| |	_tjrd|	_|	|_|S )	Nr!   )r   rs   r?  r  Tr   )rs   rS   )rR   rS   rT   r9   )r
   CClassScoper  is_final_type	set_scoper  r   rj   rO   rR   r   rS   rT   typeptr_cnamer   r   ry   ru   r   rt   r   r   cache_builtinsr   r   )
rI   rR   r9   rj   objstruct_cnameZ
type_classrS   r   r   r7  r:   r:   r;   declare_builtin_type  s4    


z!BuiltinScope.declare_builtin_typec             C   s   | S )Nr:   )rI   r:   r:   r;   r     s    zBuiltinScope.builtin_scope)NN)NN)rL   rM   rN   r   rJ   r   r  r  r   ZBuiltinObjectTyper  r   r:   r:   r:   r;   r~    s   
	

r~  c               @   s2  e Zd ZdZdZdZdZddddddd	d
dg	ZdGddZdd Z	dd Z
dHddZdd Zdd ZdJddZdKddZdd ZdLd d!Zd"d# Zd$d% Zd&d' Zd(d) ZdMd+d,Zdd*dddf ddfd-d.Zd/d0 Zd1d2 Zd3d4 ZdNd5d6Zd7d8 Zd9d: Zd;d< Zd=d> Zd?d@ Z dAdB Z!dCdD Z"dEdF Z#dS )OModuleScoper   r   __builtins__rL   __file__r   __path____spec__
__loader____package__
__cached__Fc             C   s   ddl m} || _|j}tj| ||| || _|| _t| j| _|| _	t
j| _t
j| _t
j| _d| _t
j| _g | _i | _i | _t|j| _d| _g | _t | _g | _d| _g | _g | _| j| _ i | _!| j"t#j$ddd d S )Nr   )rT  rP   r   zPython.hT)initial)%rP   rT  parent_moduler   r   rJ   
is_packagemodule_namer
   contextr   Zmodule_cnameZmoddict_cnameZmodule_dict_cnameZmethtable_cnamemethod_table_cnamer   Zmoddoc_cnamer   utility_code_listmodule_entries
c_includesdictr  Zpxd_file_loadedcimported_modulesr   Ztypes_importedZincluded_filesZhas_extern_classcached_builtinsundeclared_cached_builtinsr}  _cached_tuple_typesprocess_includer   IncludeCode)rI   rR   r  r  r  rT  r   r:   r:   r;   rJ     s6    zModuleScope.__init__c             C   s   | j S )N)r  )rI   r:   r:   r;   r   :  s    zModuleScope.qualifying_scopec             C   s   | S )Nr:   )rI   r:   r:   r;   r   =  s    zModuleScope.global_scopeNc             C   sn   | j |}|d k	r|S |d kr4| jd k	r0| jjnd}|d kr\|dkpZ| jd k	oZtj| jjk}| jj|||dS )N   r   )r  r  )r   r  r  r   unicode_literalsZfuture_directivesr   r   )rI   rR   r  r  r   r:   r:   r;   r   @  s    
zModuleScope.lookupc       
      C   s   t |}y| j| }W n( tk
r>   tj| }| j|< Y nX |j}| j|}|st|}x(t|D ]\}}|j	d| ||d qfW | j
|d d|d||d}	| jj|	 |	|_| j||||}||_|S )Nzf%s)rR   rS   rT   _structr-   T)r  rT   r9   )tupler  r   r   Zc_tuple_typer9   r   StructOrUnionScope	enumerater   r  r   removestruct_entryr   r   )
rI   rT   r  Zttyper9   r   r   ix	componentr  r:   r:   r;   r  M  s$    
zModuleScope.declare_tuple_typec             C   s6  t t| rz|tjkrz|tjkrz| jr8| j|t|}|S tj	rNt
|d|  nt|d| d | j|d t|d}d|_|S tjrx| jD ]}|j|kr|S qW |dkr| j r| jjdS | jd d t|d}tjo|tjkrd|_d|_||_tj| |_| jj| | jj| nd|_||_| j j||_|S )Nzundeclared name not builtin: %sr   rQ   r   globalsZ__Pyx_Globals)r  r  r   Znon_portable_builtins_mapZuncachable_builtinshas_import_starr   r   r   r  r   r   r   rt   r  r  rR   old_style_globalsr   r   r   r   Zbuiltin_prefixr9   r   r  r   r   r   )rI   rR   rT   r   r:   r:   r;   r  a  s<    


zModuleScope.declare_builtinc       	      C   s   |d k	o|dk}d }d}|d k	r\|dkr\| }| j r6dnd}x2||krX|rX|j}|d8 }q<W n|dkrn| j}d}| j }|jj|||||dS )Nr   Fr   T)from_modulerT   absolute_fallbackZrelative_import)r  r  r   r  find_module)	rI   r  rT   Zrelative_levelZis_relative_importr  r  Z	top_levelZmodule_scoper:   r:   r;   r    s    zModuleScope.find_modulec             C   sf   d|kr|j dd\}}nd }| j|}|sPt|| | j|r>dn|d}|| j|< |rb|j||d}|S )Nr   r   T)r  r  r  )
as_package)splitlookup_submoduler  r  r  find_submodule)rI   rR   r  	submoduler   r:   r:   r;   r    s    

zModuleScope.find_submodulec             C   sF   d|kr|j dd\}}nd }| jj|d }|rB|d k	rB|j|}|S )Nr   r   )r  r  rL  r  )rI   rR   r  moduler:   r:   r;   r    s    
zModuleScope.lookup_submodulec             C   s   t j|||d}| j| dS )z
        Add `filename` as include file. Add `verbatim_include` as
        verbatim text in the C file.
        Both `filename` and `verbatim_include` can be `None` or empty.
        )rp  N)r   r  r  )rI   rn  ro  rp  incr:   r:   r;   rm    s    zModuleScope.add_include_filec             C   s4   |j  }|dkr|j }|j| j| | j| }dS )a  
        Add `inc`, which is an instance of `IncludeCode`, to this
        `ModuleScope`. This either adds a new element to the
        `c_includes` dict or it updates an existing entry.

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

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

        One `IncludeCode` object can contain multiple pieces of C code:
        one optional "main piece" for the include file and several other
        pieces for the verbatim code. The `IncludeCode.dict_update`
        method merges the pieces of two different `IncludeCode` objects
        if needed.
        N)Z	mainpieceZsortkeyZdict_updater  )rI   r  r   r:   r:   r;   r    s
    zModuleScope.process_includec             C   sR   || j krNx|jj D ]}| j| qW | j j| x|j D ]}| j| q<W d S )N)r  r  valuesr  r   add_imported_module)rI   r   r  mr:   r:   r;   r    s    
zModuleScope.add_imported_modulec             C   s6   |j rd|_|| jkr"|| j|< nt|d| d d S )NTz'%s' redeclared  r   )rv   ry   r   r   )rI   rR   r   rT   r:   r:   r;   add_imported_entry  s
    
zModuleScope.add_imported_entryc             C   s^   | j |}|r6|jr"|j|kr"|S |jo.|j sJ|S n| j|t|}d|_||_| j| |S )Nr   )r   rv   r   r   r   ry   r  )rI   rR   r   rT   r   r:   r:   r;   declare_module  s    

zModuleScope.declare_modulerQ   c
             C   sl  |dkrt |d|  | j||	d |sJ|tkr4t}|jo@|j sJtd|s|| }
|dksh|dkrn|
rn|}n| jtj	|}| j
|}|o|jr|jj|s|dkr|jdkrt|d| d ||_|jdk r| jtj	|}|j|k r|}||_|jsd	|_|S tj| |||||||||	d

}|rTd|_|jjrF|jj|_| jj| nd|_tjrhd|_|S )NrQ   r   r!   z+Module-level variable cannot be declared %styping.Optionalz7Non-cdef global variable is not a generic Python objectz6Variable '%s' type does not match previous declarationr   T)r9   rs   r   r  r  ro   )rQ   r   r!   )r  )r   r  r   r   is_pyobjectis_extension_typer   r   r   r  r   r   rS   r+  rs   r   r9   r   r   r   ru   declaration_valuerU   r   r   rv   r   Zcimport_from_pyxr   )rI   rR   rS   rT   r9   rs   r   r  r  ro   r   r   mangled_cnamer:   r:   r;   r     sP    


zModuleScope.declare_varc             C   s   | rd|	krt |dd |sF|dks2|dkr8|r8|}n| jtj|}|dkr^|jr^t|d | j|}|r|jr|jdkr| jtj|}|j	|kr|}||_	||_
tj| |||||||||	|
|d}|S )	Nr2   z+Declarations should not be declared inline.r   r!   r   z6Extern functions cannot have default arguments values.rQ   )r9   rs   r   r  r   r  rj   r5  )r   r   r   r*  Zoptional_arg_countr   r   r   rs   r9   r   r   r8  )rI   rR   rS   rT   r9   rs   r   r  r   r  rj   r5  r   r  r:   r:   r;   r8  J  s,    




zModuleScope.declare_cfunctionc             C   s    | j |}|s| j|t| d S )N)r   r   r   )rI   rR   rT   r   r:   r:   r;   declare_globalg  s    
zModuleScope.declare_globalc             C   s   |d k	r| j j| d S )N)r  r   )rI   rf  r:   r:   r;   re  l  s    zModuleScope.use_utility_codec             C   s8   |d krd S |j r | jj|j  |jr4| jj|j d S )N)rj   r  r   rm   )rI   r   r:   r:   r;   r  p  s    z"ModuleScope.use_entry_utility_codec             C   sF  |r.|
dkr.|
dkp|s$t |dd |}d}nd }| j|}|r| r|j}|joV|js^d }nb|j}|r| st|jr| j||| |r|js|r|jr|r||jk	rt	|d |r|j r||_| s|rt
j||||
dk|d}||_||_|d k	r ||_|
dkr||_n| j|_|	r(|	|_n| jtj||_| j||||
d|d}d	|_|rb||_n&|js|| jtj||_nt	|jd
 | j| | jj| |js |s|r>t|| |
|d}| jj |_|r|jr|j |j |j!| | j"j| n>|r |jjr t	|d|  n|r>|jj#r>t	|d|  |rJd|_$|rV||_|
dkr|j%|
krt	|d||j%f  |rd|_&|r|jr|j|krt	|d ||_|r|j'r|j'|krt	|d ||_'| jj(drd	|j_)| jj(d}|r*ddl*m+} t,| |s*t	|d |dkr<d	|j_-d	|_.|S )Nr!   r   z6ctypedef only valid for 'extern' , 'public', and 'api'r   r   z-Base type does not match previous declaration)
check_size)rs   r   r   Tz5Object name required for 'public' or 'extern' C class)rR   r   rs   r?  zC class '%s' already definedz C class '%s' already implementedr   rQ   z&Class '%s' previously declared as '%s'z4Object struct name differs from previous declarationz2Type object name differs from previous declarationfinalcollection_type)NonManglingModuleScopez2'collection_type' is not a public cython directivesequence)/r   r   rS   r   r  r   definedr   r   r   r   ZPyExtensionTyperT   buffer_defaultsobjtypedef_cnamer  r   r  r   r   Ztypeptr_prefixr   r   r  r   Zobjstruct_prefixattach_var_entry_to_c_classr   r   r  r  copydeclare_inherited_c_attributesr  r   implementedr   rs   r   typeobj_cnamerL  r  rk   r  r`   Zhas_sequence_flagr   )rI   rR   rT   r   Zimplementingr  r   r  r  r  rs   r  r   r  r  r   r  r   rS   r   r  r  r:   r:   r;   declare_c_classx  s    











zModuleScope.declare_c_classc             C   s   |j }|jr*|jjr*dtj|jjf |_n\|jr|jjrt|jj}|j}x2|r||j sh|t|jjkrjP |jrtd S |j}qLW tj|_|jr| j	tj
|j|_| j	tj|j|_d S )Nz%s.%s)rS   r   vtabslot_cnamer   obj_base_cnamer   r   re   is_builtin_typer   Zvtabstruct_prefixrR   Zvtabstruct_cnameZvtabptr_prefixZvtabptr_cname)rI   r   rS   Zentry_countr   r:   r:   r;   allocate_vtable_names  s"    
z!ModuleScope.allocate_vtable_namesc             C   s.   x(| j D ]}|jjst|jd|j  qW d S )Nz(C class '%s' is declared but not defined)r   rS   r   r   rT   rR   )rI   r   r:   r:   r;   check_c_classes_pxd  s    zModuleScope.check_c_classes_pxdc             C   s   |j }|j}|j}|js(t|jd|  |dkrH|j rH| jtj	||_|jrx2|jj
D ]&}|j rX|j rXt|jd|j  qXW |jr| jtj|j|_d S )Nz(C class '%s' is declared but not definedr!   z)C method '%s' is declared but not defined)rS   rR   rs   r   r   rT   r  r   r   Ztypeobj_prefixr   r   r   r  Zvtable_prefixZvtable_cname)rI   r   rS   rR   rs   Zmethod_entryr:   r:   r;   check_c_class  s    zModuleScope.check_c_classc             C   sb   d}|rt d| j  xF| jD ]<}|rPt d|j|f  t d|j t d|j | j| qW d S )Nr   z&Scope.check_c_classes: checking scope z...entry %s %sz......type = z......visibility = )printr   r   rR   rS   rs   r  )rI   Zdebug_check_c_classesr   r:   r:   r;   check_c_classes6  s    zModuleScope.check_c_classesc             C   s\   xV| j j D ]H\}}|jr|jr|j| kr|jdkr|j r|j rt|j	d|  qW d S )Nr!   z3Non-extern C function '%s' declared but not defined)
r   r   rz   r   r   rs   r   r   r   rT   )rI   rR   r   r:   r:   r;   check_c_functionsN  s    

zModuleScope.check_c_functionsc             C   sR   ddl m} t|j|j|j|jjd}|j|_d|_	d|_
d|_|j|_||_d S )Nr   )rT  )rR   rS   rT   r9   )rP   rT  rO   rR   Z	type_typerT   rS   r  r   ry   ru   r   r   r   )rI   r   rT  r7  r:   r:   r;   r  Z  s    z'ModuleScope.attach_var_entry_to_c_classc             C   s   | j S )N)cpp)rI   r:   r:   r;   r   m  s    zModuleScope.is_cppc             C   s   ddl m} | j|  d S )Nr   )PyObjectTypeInferer)rj  r  rk  )rI   r  r:   r:   r;   rk  p  s    zModuleScope.infer_types)F)NNr   )r   )F)NF)NrQ   FFFN)r   r   NNNNNrQ   r   r   NNr   )$rL   rM   rN   ry  r  Zis_cython_builtinr  r   rJ   r   r   r   r  r  r  r  r  rm  r  r  r  r  r   r8  r  re  r  r  r  r  r  r  r  r  r   rk  r:   r:   r:   r;   r    sP   


%


		 
8    
vr  c               @   sd   e Zd ZdZdZdZdddZdd Zdd	 ZdddZ	dd Z
dd Zdd Zdd Zdd ZdS )r   TFNc             C   s    |d kr|}t j| ||| d S )N)r   rJ   )rI   rR   r   r   r:   r:   r;   rJ   ~  s    zLocalScope.__init__c             C   s   t || S )N)rE   )rI   r   rR   r:   r:   r;   r     s    zLocalScope.manglec             C   sR   | j |}| jtj|}| j||||d}d|_|jr<d|_d|_| j	j
| |S )NrQ   r   0)r   r   r   r  r   ry   r  rU   r   r   r   )rI   rR   rS   rT   r9   r   r:   r:   r;   declare_arg  s    
zLocalScope.declare_argrQ   c
             C   sn   | j |}|dkr t|d|  tj| |||||||||	d
}
|
jjrP|
jj|
_d|
_| j|
_	| j
j|
 |
S )Nr   readonlyz$Local variable cannot be declared %s)r9   rs   r   r  r  ro   r   )r   r  )r   r   r   r   rS   r  rU   r   _in_with_gil_blockr   r   r   )rI   rR   rS   rT   r9   rs   r   r  r  ro   r   r:   r:   r;   r     s    

zLocalScope.declare_varc             C   s4   | j |rt|dd n| j j|}|| j|< d S )Nz'%s' redeclared  r   )r   r   r   rO  r   )rI   rR   rT   r   r:   r:   r;   r    s    
zLocalScope.declare_globalc             C   sd   | j |}|r8|j| kr8|j r8t|d|  |j  n(| j|}|d ksR|j r`t|d|  d S )Nz'%s' redeclared as nonlocalz"no binding for nonlocal '%s' found)r   r   r   r   r\   r   )rI   rR   rT   
orig_entryr   r:   r:   r;   declare_nonlocal  s    


zLocalScope.declare_nonlocalc             C   s$   d|_ t|| }d|_|| j|< |S )NT)r   r   ry   r   )rI   rR   r   Zinner_entryr:   r:   r;   _create_inner_entry_for_closure  s
    

z*LocalScope._create_inner_entry_for_closurec             C   s^   t j| |}|d k	rZ|j}x|jr*|j}qW || k	rZ|jrZt|jdrNtd| j||S |S )NZscope_classz#lookup() after scope class created.)	r   r   r   rv  r   rs  r  r   r  )rI   rR   r   Zentry_scoper:   r:   r;   r     s    
zLocalScope.lookupc             C   s   x| j  D ]}x|jj D ]}|jrl|jj}| jr:||_q|jtj	r\|t
tj	d d  }d||f |_q|jr|j|_dtj	|jf |_|jjr|jjd r|j  qW q
W d S )Nr   z%s->%sr  )r   r   r  r   r   r9   rw  r6   r   Zcur_scope_cnamere   r   Zoriginal_cnamerS   rg   r   r  rn   )rI   Zouter_scope_cnamer   r   r9   r:   r:   r;   mangle_closure_cnames  s    z LocalScope.mangle_closure_cnames)N)NrQ   FFFN)rL   rM   rN   rt  Zhas_with_gil_blockr  rJ   r   r  r   r  r  r  r   r  r:   r:   r:   r;   r   u  s   
 
r   c               @   sX   e Zd ZdZdZdd Zdd Zdd
dZdd ZdddZ	dd Z
dd Zdd ZdS )ComprehensionScopezScope for comprehensions (but not generator expressions, which use ClosureScope).
    As opposed to generators, these can be easily inlined in some cases, so all
    we really need is a scope that holds the loop variable(s).
    Tc             C   s   |}x|j r|j}qW |j jtj}tj| ||| |j| _dtj	t
||f | _x|j sh|jsh|jrp|j}qVW |j| _|jj|  d S )Nz%s%d%s)rv  r   r   r   r   Zgenexpr_id_refr   rJ   r  r7   re   genexp_prefixrr  rq  r   r   r   add)rI   r   r   rR   r:   r:   r;   rJ     s    

zComprehensionScope.__init__c             C   s   d| j | jj||f S )Nz%s%s)r  r   r   )rI   r   rR   r:   r:   r;   r     s    zComprehensionScope.mangleNrQ   Fc
             C   s   |t kr$| jj|}
|
r$|
jr$|
j}| j||	 d| j| jjt	j
|pJ| j f }| j|||||}d|_| jjrzd|_nd|_d|_| jj| || j|< |S )Nz%s%sT)r   r   r   ry   rS   r  r  r   r   r   r  r   r   ry  ru   r   r   r   r   r   )rI   rR   rS   rT   r9   rs   r   r  r  ro   r   r   r:   r:   r;   r     s    
"
zComprehensionScope.declare_varc             C   s   | j j|||S )N)r   r   )rI   rR   rS   rT   r:   r:   r;   r    s    z7ComprehensionScope.declare_assignment_expression_targetc             C   s   | j j|||S )N)r   r$  )rI   rR   rT   r#  r:   r:   r;   r$    s    z%ComprehensionScope.declare_pyfunctionc             C   s   | j j||S )N)r   r&  )rI   r   rT   r:   r:   r;   r&    s    z*ComprehensionScope.declare_lambda_functionc             C   s   | j j|S )N)r   r(  )rI   r'  r:   r:   r;   r(    s    z!ComprehensionScope.add_lambda_defc             C   s   | j |}|s| jj|}|S )N)r   r   rN  )rI   rR   r   r:   r:   r;   rN  "  s    
z6ComprehensionScope.lookup_assignment_expression_target)NrQ   FFTN)F)rL   rM   rN   r   rv  rJ   r   r   r  r$  r&  r(  rN  r:   r:   r:   r;   r    s    

r  c               @   s,   e Zd ZdZd
ddZdddZdd	 ZdS )ClosureScopeTNc             C   s$   t j| ||| dtj|f | _d S )Nz%s%s)r   rJ   r   Zclosure_scope_prefixZclosure_cname)rI   rR   Z
scope_namer   r   r:   r:   r;   rJ   -  s    zClosureScope.__init__Fc             C   s   t j| |||ddS )NrQ   )rs   )r   r$  )rI   rR   rT   r#  r:   r:   r;   r$  :  s    zClosureScope.declare_pyfunctionc             C   s   | j |||S )N)r   )rI   rR   rS   rT   r:   r:   r;   r  =  s    z1ClosureScope.declare_assignment_expression_target)N)F)rL   rM   rN   rs  rJ   r$  r  r:   r:   r:   r;   r  )  s   

r  c               @   s    e Zd ZdZdd Zdd ZdS )GeneratorExpressionScopeTc             C   s   | j j|||}| j||S )N)r   r   r  )rI   rR   rS   rT   r   r:   r:   r;   r  D  s    z=GeneratorExpressionScope.declare_assignment_expression_targetc             C   s.   | j |}|s*| jj|}|r*| j||S |S )N)r   r   rN  r  )rI   rR   r   r:   r:   r;   rN  H  s    
z<GeneratorExpressionScope.lookup_assignment_expression_targetN)rL   rM   rN   ru  r  rN  r:   r:   r:   r;   r  A  s   r  c            	   @   s8   e Zd ZdddZdddZddd	d	d	f dfd
dZdS )r  ?c             C   s   t j| |d d d d S )N)r   r   )r   rJ   )rI   rR   r:   r:   r;   rJ   T  s    zStructOrUnionScope.__init__NrQ   Fc             C   s   |s|}|dkrt |}|jr(tj|}| j||	 | j|||||}d|_| jj| |j	rn|
st
|d n.|jr|st
|d n|jr|st
|d|  |S )NrQ   r   z/C struct/union member cannot be a Python objectz-C struct/union member cannot be a memory viewz;C struct/union member cannot be reference-counted type '%s')r<   rz   r   r  r  r   ry   r   r   r  r   r   Zneeds_refcounting)rI   rR   rS   rT   r9   rs   r   r  r  ro   Zallow_pyobjectZallow_memoryviewZallow_refcountedr   r:   r:   r;   r   W  s(    
zStructOrUnionScope.declare_varr   c             C   s"   |
rt |d | j|||||dS )Nz0C struct/union member cannot be declared 'cpdef')r9   rs   )r   r   )rI   rR   rS   rT   r9   rs   r   r  r   r  r5  r:   r:   r;   r8  r  s    

z$StructOrUnionScope.declare_cfunction)r  )	NrQ   FFFNFFF)rL   rM   rN   rJ   r   r8  r:   r:   r:   r;   r  Q  s   
  
r  c               @   s,   e Zd ZddgZdd Zdd Zdd Zd	S )

ClassScoperM   rN   c             C   sL   |r|j  jdr|S |rH|jdrH|jd rHtd| jjd|f }|S )NZ__pyx_r3   z_%s%s_)lowerr6   endswithr
   
class_namelstrip)rI   rR   r:   r:   r;   r     s
    z$ClassScope.mangle_class_private_namec             C   s    t j| ||| || _d | _d S )N)r   rJ   r  r   )rI   rR   r   r:   r:   r;   rJ     s    zClassScope.__init__c          	   C   sd   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classmethodZ__Pyx_Method_ClassMethodrP   r   ZClassMethodzCythonFunction.cr   )r   r   rO   r   r=  r   r>  r   rk   rl   rm   r  rz   )rI   rR   r   r:   r:   r;   r     s    
zClassScope.lookupN)rL   rM   rN   r   r   rJ   r   r:   r:   r:   r;   r  {  s   	r  c               @   s2   e Zd ZdZdddZdd Zd	d
 Zdd ZdS )PyClassScoper   NrQ   Fc
             C   sD   | j |}|tkrt}tj| |||||||||	d
}
d|
_d|
_|
S )N)r9   rs   r   r  r  ro   r   )r   r   r   r   r   rv   rx   )rI   rR   rS   rT   r9   rs   r   r  r  ro   r   r:   r:   r;   r     s    
zPyClassScope.declare_varc             C   sh   | j |}|r8|j| kr8|j r8t|d|  |j  n,| j|}|d krZt|d|  n
|| j|< d S )Nz'%s' redeclared as nonlocalz"no binding for nonlocal '%s' found)r   r   r   r   r\   r   r   )rI   rR   rT   r  r   r:   r:   r;   r    s    


zPyClassScope.declare_nonlocalc             C   s4   | j |rt|dd n| j j|}|| j|< d S )Nz'%s' redeclared  r   )r   r   r   rO  r   )rI   rR   rT   r   r:   r:   r;   r    s    
zPyClassScope.declare_globalc             C   s   | j j|S )N)r   add_default_value)rI   rS   r:   r:   r;   r    s    zPyClassScope.add_default_value)NrQ   FFFN)rL   rM   rN   rq  r   r  r  r  r:   r:   r:   r;   r    s    
r  c               @   s   e 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	d
 Zdd Zd&ddZd'ddZd(ddZdd Zdddddf ddfddZd)ddZd*ddZd+dd Zd,d"d#Zd$d% ZdS )-r  r   Fc             C   sj   t j| || |dkr6|jtj|| _|jtj|| _g | _g | _	|| _
|jsT|jrf|jrfd|j | _d S )Nr!   z(PyObject *)%s)r  rJ   r   r   Zmethtab_prefixr  Zgstab_prefixZgetset_table_cnameproperty_entriesinherited_var_entriesr?  r  r  r  r}  )rI   rR   r   rs   r?  r:   r:   r;   rJ     s    zCClassScope.__init__c             C   sP   | j r| jjdd rdS | jj}|r:|jd k	r:|jj S | jjrL| jj S dS )NZno_gcFT)	has_cyclic_pyobject_attrsr  rL  r?  r   r   needs_gcr  is_gc_simple)rI   r   r:   r:   r;   r  	  s    

zCClassScope.needs_gcc             C   sN   | j jd}|dkrdS |r&| jr&dS | jj}|rF|jd k	rF|jj S | jjS )NZtrashcanFT)r  rL  r  r?  r   r   needs_trashcanZbuiltin_trashcan)rI   	directiver   r:   r:   r;   r  	  s    

zCClassScope.needs_trashcanc             C   s   | j  o| 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.
        Zno_gc_clearF)r  r  rL  )rI   r:   r:   r;   needs_tp_clear	  s    zCClassScope.needs_tp_clearc             C   s\   | }xR|rV|j d}|r"|jr"dS |jjs:|j s:|jjr>dS |jj}|rP|jnd}qW dS )z
        This covers cases where we definitely have a __del__ function
        and also cases where one of the base classes could have a __del__
        function but we don't know.
        __del__TNF)r   r   r?  Zis_externalr  Zmultiple_basesr   r   )rI   Zcurrent_type_scopeZ	del_entryZcurrent_base_typer:   r:   r;   may_have_finalize&	  s    

zCClassScope.may_have_finalizeTc             C   s   g }g }g }xn| j D ]d}|jjrN|s4| js4|jdkrx|sB|jj rx|j| q|jtjkrf|j| q|jj	r|j| qW |p|p|}||||ffS )Nr4   )
r   rS   r  is_closure_class_scoperR   r   r   r   Zc_py_buffer_typer   )rI   Zinclude_weakrefZinclude_gc_simpleZpy_attrsZ
py_buffersZmemoryview_slicesr   Zhave_entriesr:   r:   r;   get_refcounted_entries9	  s    z"CClassScope.get_refcounted_entriesNrQ   c
             C   s>  | j |}|	rZd|	kr@d}|js@|js:t|d|  t}n|j}d|	krZ| j rZt|d |r| jrpt|d | j rt	| j
j|rt|d|  |s|}|dkrt|}t|tj}| j|||||}
d	|
_| jj|
 |	|
_|jo|d
kr| j
d r
|
j  n
|j| |jr$d| _nf|jrD| jtjd d| _nF|jr| js^|dkrd| _|j  s|j! s|j!j" rd| _#|dkrt|d|  |dkrd|
_$| j r|dkrt|d |jp|j%| st|d|  nd|
_$|
S |t&krt}t'j(| |||||||||	d
}
d	|
_)d	|
_*|
S d S )Nztyping.ClassVarr   zZClassVar[] requires the type to be a Python object type. Found '%s', using object instead.zdataclasses.InitVarzIUse of cython.dataclasses.InitVar does not make sense outside a dataclasszVC attributes cannot be added in implementation part of extension type defined in a pxdz/The name '%s' is reserved for a special method.rQ   r   r!   r  Tz#include <new>r4   r   r  z1Attribute of extension type cannot be declared %sz9Special attribute __weakref__ cannot be exposed to Pythonz7C attribute of type '%s' cannot be accessed from PythonF)r9   rs   r   r  r  ro   )rQ   r   r  )r   r  )+r   r  Zequivalent_typer   r   rz  r   r  r  r   r  get_special_method_signaturer<   rE   r   Zunicode_structmember_prefixr   ry   r   r   ro   rg   rn   r  r   has_memoryview_attrsZneeds_cpp_constructionre  r   rk   has_cpp_constructable_attrshas_pyobject_attrsr  r   r  r  r   Zcan_coerce_to_pyobjectr   r   r   rw   rv   )rI   rR   rS   rT   r9   rs   r   r  r  ro   r   r:   r:   r;   r   L	  s|    









zCClassScope.declare_varc             C   s   |t kr"| jdrPt|d|  n.|dkrPx$t D ]}| j|r0t|d|  q0W |dkrbt|d | j|t|dd}t| jj|}|r||_d|_	nt
|_d|_	| jj| |S )	NZ__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!   )rs   r   r   )r   r   r   r   r   r   r  r  r   r   r   r   r   )rI   rR   rT   r#  r_  r   Zspecial_sigr:   r:   r;   r$  	  s&    




zCClassScope.declare_pyfunctionc             C   sF   | j  r|dkrtd}tj| |}|rB|jrB| jjsB| jjsBd S |S )Nr  Z	__cinit__)r  r
   r  r   r|   r?  r  r  )rI   rR   r   r:   r:   r;   r   	  s    
zCClassScope.lookup_herer   c             C   sh  | j |}t| jj|r.| jj r.t|d |j}|jsx|sJt|d n.| jj	|d j
sxt|d|d j
|| jf  | j|}|d krtt|tj}|r|jst|d|  |j  n|r|jrt|d|  |jr|jrt|d n|j|j
dd	r"|j|j
jkr"|j
j|j|_
n|j|j
dd	r|j|j
jkr| jr| r|j|j
ddd
 rt|d|| jf d t|jdd | j||||d|	d}nt|d t|jd n0| jrt|d|| jf  | j||||||	}|r| j tj!||_|
|_"||_#d|	kr d|_$| jj%s@|j$s@| jj&drdd|_|j|_'|j(sd|j
|_)||_
|S )Nz7Special methods must be declared with 'def', not 'cdef'zC method has no self argumentr   zCSelf argument (%s) of C method '%s' does not match parent type (%s)z'%s' redeclared z'%s' already definedz'Overriding final methods is not allowedr   )
as_cmethod)r  Zas_pxd_definitionzCompatible but non-identical C method '%s' not redeclared in definition part of extension type '%s'.  This may cause incorrect vtables to be generated.r   zPrevious declaration is herer   )rs   r  z2Signature not compatible with previous declarationzOC method '%s' not previously declared in definition part of extension type '%s'r2   Tr  )*r   r   r  r  r?  r  r   r   r:  Zassignable_fromrS   r   rE   r<   r   Zunicode_vtabentry_prefixrz   r\   r   r}   r   Zsame_c_signature_asr0  r,  r-  r/  r  Z!same_c_signature_as_resolved_typer   r  rT   r.  r   r*  rj   r   r~   r  rL  r   rA  r   )rI   rR   rS   rT   r9   rs   r   r  r   r  rj   r5  r   r   r:   r:   r;   r8  	  sj    





""

 zCClassScope.declare_cfunctionc       
   
   C   s4   | j |}tj| |||||||d}	d|	_||	_|	S )N)rD  r   )r   r  r.  r{   r   )
rI   rR   rS   rT   r9   rs   r  rD  r   r   r:   r:   r;   r.  
  s    
zCClassScope.add_cfunctionc             C   sT   t |}| j||d |d|d}t||t}||_d|_d|_||_|j|_||_	|S )Nr!   )rT   r9   rs   rj   r   )
r
   r8  rO   r   r   ry   rt   rj   r   r   )rI   rR   rS   r9   rj   r   r7  r:   r:   r;   r  
  s    z%CClassScope.declare_builtin_cfunctionc             C   sx   | j |}|d kr0| j|||d kr&tn||d}d|_|d k	rDd|_||_|d krbt|| d|_n||_| jj	| |S )NrQ   T)class_scope)
r   r   r   r   r   r   PropertyScoper   r  r   )rI   rR   r   rT   ctypeZproperty_scoper   r:   r:   r;   declare_property$
  s    
zCClassScope.declare_propertyr!   c          
   C   sT   | j ||||d}|jj|tj|tjd| jddg|||	|
d||||d}||fS )zPInternal convenience method to declare a C property function in one go.
        )r   r  rT   rI   N)rT   )r0  r-  r1  r2  )rR   rS   r9   rj   rs   rT   )r  r   r8  r   r=  r>  r?  )rI   rR   rS   Z
cfunc_namer   rT   rs   r0  r-  r1  r2  rj   Zproperty_entryrF  r:   r:   r;   declare_cproperty3
  s    zCClassScope.declare_cpropertyc          
      s>   fdd}|j |j }xH|D ]@ | j j| j jd d}d|_d|_ j|_| j j	| qW x(|j
d d  D ]  jjrr jj  qrW x|j
D ]  j} j}|o|j}|s||}| j j j j| j jdd}d|_ jrd|_ j|_| j|jks|jr j|_|r(d|_||_ jr j|_qW d S )Nc                s   dt j jf S )Nz%s.%s)r   r  r9   )r9   )
base_entryr:   r;   adaptN
  s    z9CClassScope.declare_inherited_c_attributes.<locals>.adaptrQ   r   T)rD  )r  r   r   rR   r9   rS   ry   r   rr   r   r   rA  Z"get_all_specialized_function_typesr   rt   r.  rT   rs   r   r}   r~   r   r   r|   rj   )rI   
base_scoper  r   r   r9   r7  rt   r:   )r  r;   r  J
  sD    

z*CClassScope.declare_inherited_c_attributes)FT)NrQ   FFFN)F)F)N)NN)NNr!   FFNFN)rL   rM   rN   rr  r  r  r	  r
  r  r  r  rJ   r  r  r  r  r  r   r$  r   r8  r.  r  r  r  r  r:   r:   r:   r;   r    s8    
 
P
B
	

  
r  c               @   sV   e Zd ZdZdZdZdddZdddZddd	d	d	f ddfd
dZdd Z	dd Z
dS )CppClassScoper   Nc             C   sV   t j| ||d  |j| _g | _|d k	rRx*|D ]"}| j||tj|d d}d|_q,W d S )Nr!   r   )r   rJ   r  r  r   r   ZTemplatePlaceholderTyper   )rI   rR   r   r  TZtemplate_entryr:   r:   r;   rJ   
  s    
zCppClassScope.__init__r!   Fc             C   s   |s|}| j ||
 | j|}|	rn|d k	rn|jj|rH|jj|j|_q|jrb|j|jrb||_qt|d n| j	|||||}d|_
|jr| jr| jj sd| jj |f |_|dkr|	s|dkr| jj| |S )Nz6Function signature does not match previous declarationr   z%s::%sr	  z<init>)r  r   rS   r+  r,  r-  rz   r/  r   r   ry   Zget_fused_typesZempty_declaration_coder   r   r   )rI   rR   rS   rT   r9   rs   r   r  r  r   ro   r   r:   r:   r;   r   
  s$    

zCppClassScope.declare_varr   c                s4  | j jdd }||dfkrl|d krldtj|f }td}tj |_|j|_	dd   fdd	|jD |_n0|d
kr|d krdtj|f }td}tj |_|dkr|j
rx@| jjD ]4}|jj|}|r|jj
 rt|d t|jd qW | j|}| j||||||d}|r$| r$|j |_|
|_||_|S )Nz::r   rJ   z%s__init__%s<init>c             S   s4   | j jr,| j j r,tj| jtj| j | jS | S d S )N)rS   rg   Zis_referencer   r>  rR   Z
c_ref_typerT   )rW  r:   r:   r;   	maybe_ref
  s    z2CppClassScope.declare_cfunction.<locals>.maybe_refc                s   g | ]} |qS r:   r:   )r   rW  )r  r:   r;   rX  
  s    z3CppClassScope.declare_cfunction.<locals>.<listcomp>Z__dealloc__z%s__dealloc__%s<del>zdConstructor cannot be called without GIL unless all base constructors can also be called without GILzBase constructor defined here.)r   r9   rs   r   )r  r  )rR   r  r   r*  r
   r   Z	CVoidTyper3  r   Zoriginal_argsr0  rS   r  r   r   r   rT   r   r   r^   rV   rj   r   )rI   rR   rS   rT   r9   rs   r   r  r   r  rj   r5  r  baser  r   r   r:   )r  r;   r8  
  s6    






zCppClassScope.declare_cfunctionc             C   s*  |j }|}xt|dd r |j}qW t|dd r@dd |jD }nf }xb|j|j D ]R}|jdkrbqR|j| jkrt|j | j|j|j	|j
d d}d|_d|_| jj| qRW x<|jD ]2}| j|j|j
|j|j	|jd	|j|jd
}d|_qW x>|jD ]4}|j|kr| j|j|j
|j|j	|jdd}d|_qW d S )Ntemplate_typer  c             S   s   g | ]
}|j qS r:   )rR   )r   r  r:   r:   r;   rX  
  s    zBCppClassScope.declare_inherited_cpp_attributes.<locals>.<listcomp><init><del>r!   r   r   )r   r  rj   F)r   )r  r  )r   r   r  r  r  r   rR   r   r   r9   rS   ry   r   r   r   r8  rT   rs   r   rj   r   r   )rI   r  r  r  Zbase_templatesr  r   r:   r:   r;   r  
  s<    




z.CppClassScope.declare_inherited_cpp_attributesc          	   C   s   t | j| j}||_x| jj D ]}|jrN|j|j|jj||j	|j
dd q |jjrxX|j D ](}|j|j|jj||j	|j
|jd q`W q |j|j|jj||j	|j
|j q W |S )Nr   )r   )rj   )r  rR   r   rS   r   r  r   r   rQ  rT   r9   rz   r^   r8  rj   r   rs   )rI   r  Z
type_entryr   r   r   r:   r:   r;   rQ  
  s,    



zCppClassScope.specialize)N)Nr!   FFFFN)rL   rM   rN   r   Zdefault_constructorrS   rJ   r   r8  r  rQ  r:   r:   r:   r;   r  y
  s   
 
$&r  c               @   s   e Zd Zdd ZdddZdS )CppScopedEnumScopec             C   s   t j| ||d  d S )N)r   rJ   )rI   rR   r   r:   r:   r;   rJ     s    zCppScopedEnumScope.__init__Nr!   c             C   s0   |s|}| j || | j|||||}d|_|S )NT)r  r   ry   )rI   rR   rS   rT   r9   rs   ro   r   r:   r:   r;   r     s    zCppScopedEnumScope.declare_var)Nr!   N)rL   rM   rN   rJ   r   r:   r:   r:   r;   r    s   r  c               @   s*   e Zd ZdZdd Zdd Zd
ddZd	S )r  r   c             C   s8   |j r|j nd }tj| |||d |j| _|j| _d S )N)r   )r   r   r   rJ   r?  r  )rI   rR   r  r   r:   r:   r;   rJ   %  s    zPropertyScope.__init__c             O   s   |j jrt|d |jr:|jd jtkr:| jj|jd _nFt|jdkrTt|d n,|jd jj	pt|jd j| jjkst|d t
j| |||f||}d|_|S )z'Declare a C property function.
        z&C property method cannot return 'void'r   r   z4C property method must have a single (self) argumentz6C property method must have a single (object) argumentT)r3  r4  r   r   rS   r   r   r?  re   r  r   r8  r   )rI   rR   rS   rT   r   kwargsr   r:   r:   r;   r8  ,  s    
"
zPropertyScope.declare_cfunctionFc             C   s@   t |}|r.| j||t|d}d|_||_|S t|d d S d S )NrQ   r   zKOnly __get__, __set__ and __del__ methods allowed in a property declaration)r   r   r   r   r   r   )rI   rR   rT   r#  r   r   r:   r:   r;   r$  >  s    
z PropertyScope.declare_pyfunctionN)F)rL   rM   rN   rx  rJ   r8  r$  r:   r:   r:   r;   r    s   r  c               @   s   e Zd ZdddZdd ZdS )CConstOrVolatileScoper   c             C   s0   t j| d|j |j|j || _|| _|| _d S )NZcv_)r   rJ   rR   r   r   base_type_scoper   is_volatile)rI   r"  r   r#  r:   r:   r;   rJ   N  s    zCConstOrVolatileScope.__init__c             C   s<   | j j|}|d k	r8tj|}tj|j| j| j|_|S d S )N)r"  r   r  r   Zc_const_or_volatile_typerS   r   r#  )rI   rR   r   r:   r:   r;   r   X  s    
z!CConstOrVolatileScope.lookup_hereN)r   r   )rL   rM   rN   rJ   r   r:   r:   r:   r;   r!  L  s   

r!  c               @   s   e Zd Zdd ZdS )TemplateScopec             C   s   t j| ||d  |j| _d S )N)r   rJ   r  )rI   rR   r   r:   r:   r;   rJ   b  s    zTemplateScope.__init__N)rL   rM   rN   rJ   r:   r:   r:   r;   r$  a  s   r$  )N)8
__future__r   r   r  r   r  r  ImportErrorZUtilsr   ZErrorsr   r   r   r	   ZStringEncodingr
   rP   r   r   r   r   r   Z	TypeSlotsr   r   r   r   r   r   r   r8   r<   rE   objectrF   rO   r   r   r{  r~  Zconst_counterr  r   r  r  r  r  r  r  r  r  r  r  r!  r$  r:   r:   r:   r;   <module>   sx   
 W$      MZ    }mG*-0   $ /