
    ڏDj$                    x   d dl Z d dlZd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
 ddlmZ ddlmZmZ 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 Zd7dZ G d d      Z G d d      Z G d de      Z G d d      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       Z- G d/ d0e       Z. G d1 d2e       Z/ G d3 d4e       Z0 G d5 d6e       Z1y)8    N   )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)
DebugFlags)Codec                     | d d dk(  r#| j                  t        j                        s| dv r| t        j                  v rt        j                  | z   } | S )Nr   __)__weakref____dict__)
startswithr   pyrex_prefixreserved_cnames)cnames    ZC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/Symtab.pyc_safe_identifierr       sO    	rd	E$4$4V5H5H$I',0K'K...##e+L    c                 <   | j                         r| S | j                  d      j                  dd      j                  d      } |r	|d| } | S | j	                  t
        j                        r/| j                  t
        j                  t
        j                  d      } | S )Npunycode   -   _ascii_r   )isasciiencodereplacedecoder   r   r   pyunicode_identifier_prefix)r   mangle_withs     r   punycodify_namer.   "   s     }}LL$,,T48??HE '. L 
		&--	. f11$@@!E Lr!   c                       e Zd ZdZd Zd Zy)	BufferAuxFc                      || _         || _        y N)buflocal_nd_var	rcbuf_var)selfr3   r4   s      r   __init__zBufferAux.__init__:   s    ."r!   c                      d| j                   z  S )Nz<BufferAux %r>r   r5   s    r   __repr__zBufferAux.__repr__>   s    $--//r!   N)__name__
__module____qualname__writable_neededr6   r:    r!   r   r0   r0   7   s    O#0r!   r0   c                      e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(g Z)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@dZAdZBdZCdZDdZEdZFdZGdZHdZIdZJdZKdZLdZMddZNeOj                  reQd        ZReRj                  d	        ZRd
 ZTd ZUd ZVd ZWddZXd ZYd ZZeQd        Z[d Z\d Z]y)EntryFr    NprivateTc                     || _         || _        || _        || _        || _        g | _        g | _        g | _        g | _        | | _	        y r2   )
namer   typeposinitoverloaded_alternativescf_assignmentscf_referencesinner_entriesdefining_entry)r5   rE   r   rF   rG   rH   s         r   r6   zEntry.__init__   sM    	
		')$ "r!   c                      | j                   d   S )NrF   r8   r9   s    r   rF   z
Entry.type   s    ==((r!   c           
          t        d| j                   d| j                   d| j                  j	                  d       d|        || j                  d<   y )NzENTRY [z] TYPE: rF   z -> )printrE   r   r   get)r5   new_types     r   rF   z
Entry.type  sL    F499+Qtzzl(4==;L;LV;T:UUYZbYcde$,DMM&!r!   c                 t    dt        |       j                  t        |       | j                  | j                   fz  S )Nz%s(<%x>, name=%s, type=%s))rF   r;   idrE   r9   s    r   r:   zEntry.__repr__  s/    +tDz/B/BBtHdiiY]YbYb.cccr!   c                 0    t        | j                  d       y )NPrevious declaration is here)r   rG   r9   s    r   already_declared_herezEntry.already_declared_here	  s    dhh67r!   c                 V    t        |d| j                  z         | j                          y )Nz('%s' does not match previous declaration)r   rE   rX   )r5   rG   s     r   
redeclaredzEntry.redeclared  s"    c=		IJ""$r!   c                 "    | g| j                   z   S r2   )rI   r9   s    r   all_alternativeszEntry.all_alternatives  s    v4444r!   c                 :   d }| j                   | j                  ||      }|s| j                  j                  r4| j                  j                         }|D cg c]  }|j                   }}n| j                         }t        j                  ||||      }|S c c}w )N)fail_if_emptyarg_is_lvalue_array)specialiserrF   is_fused"get_all_specialized_function_typesentryr\   r   
best_match)	r5   scope	arg_typesr^   r_   
func_entry	functypesfalternativess	            r   best_function_matchzEntry.best_function_match  s    
'))%;Jyy!! IIHHJ	1:;A;;#446#..<}ZmoJ  <s   Bc                 "    | g| j                   z   S r2   )rL   r9   s    r   all_entrieszEntry.all_entries!  s    v****r!   c                     t        | t              rAt        |t              r1| j                  | j                  f|j                  |j                  fk  S t        S r2   )
isinstancerA   rE   r   NotImplemented)leftrights     r   __lt__zEntry.__lt__$  s@    dE"z%'?IItzz*ejj%++-FFF!!r!   c                 2    t        | j                        dkD  S Nr   )lenrJ   r9   s    r   cf_is_reassignedzEntry.cf_is_reassigned*  s    4&&'!++r!   c                     | j                   j                  sJ d| _        | j                  rJ t        j
                  j                  dd      | _        y )NTOptionalLocalsCppSupport.cpp)rF   is_cpp_classis_cpp_optionalutility_coder   UtilityCodeload_cachedutility_code_definitionr9   s    r   make_cpp_optionalzEntry.make_cpp_optional.  sC    yy%%%#$$$'+'7'7'C'CDTVf'g$r!   c                 :    | j                   r|| j                   v S dS NF)pytyping_modifiers)r5   modifier_names     r   declared_with_pytyping_modifierz%Entry.declared_with_pytyping_modifier4  s!    ;?;R;R} 7 77]X]]r!   NN)FN)^r;   r<   r=   inline_func_in_pxdborrowedrH   
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_cclass_var_entryr{   is_constis_propertyis_cproperty	doc_cnamegetter_cnamesetter_cnameis_self_argis_argis_local
in_closurefrom_closurein_subscopeis_declared_genericis_readonlypyfunc_cname
func_cnamefunc_modifiersfinal_func_cnamedocas_variablexdecref_cleanupin_cinclude	as_moduleis_inheritedpystring_cnameis_identifieris_internedused
is_specialdefined_in_pxdis_implementedapir}   r`   is_overridable
buffer_aux
prev_entrymight_overflowfused_cfunctionis_fused_specializedr   needs_propertyin_with_gil_blockfrom_cython_utility_codeerror_on_uninitializedcf_usedouter_entry
is_cgetterr|   known_standard_library_importr   enum_int_valuevtable_typer6   r   debug_verbose_entry_typespropertyrF   setterr:   rX   rZ   r\   rk   rm   rs   rw   r   r   r?   r!   r   rA   rA   B   s	   B HDJJJJKIOKLJLGILHKLILLKFHJLKKLJN
CKOKILNMKDJNN
CLKNJJNO "N#"GKJO$(!NK
# ++		) 
	) 
	- 
	-d8%5+" , ,h^r!   rA   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                  j                  |        y r2   )rA   r6   rE   r   rF   rG   r   re   rM   rL   rJ   rK   rI   r|   append)r5   r   re   outermost_entrys       r   r6   zInnerEntry.__init__>  s    t[--"(("''"	( '
 &))-99O ))-,::-<<,::'6'N'N$.>>!!$'r!   c                 f    |j                  d      rt        |      t        | j                  |      S )Nr   )r   AttributeErrorgetattrrM   r5   rE   s     r   __getattr__zInnerEntry.__getattr__R  s,    ??4  &&t**D11r!   c                 6    | j                   j                         S r2   )rM   rm   r9   s    r   rm   zInnerEntry.all_entriesX  s    ""..00r!   N)r;   r<   r=   __doc__r   r6   r   rm   r?   r!   r   r   r   8  s     L((21r!   r   c                   $   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZg ZdZi Zd Zd ZdAdZd	 Zd
 ZdBdZd Zd Z dBdZ!e"d        Z#d Z$d Z%d Z&e'dBd       Z(dCdZ)dDdZ*d Z+dEdZ,	 	 dFdZ-	 	 dGdZ.	 	 	 dHdZ/	 	 dIdZ0d Z1d Z2	 dJdZ3d Z4	 	 dKd Z5dLd!Z6d" Z7d# Z8dMd$Z9dNd%Z:d& Z;d' Z<d( Z=	 	 dOd)Z>	 	 dPd*Z?dCd+Z@d, ZAd- ZBd. ZCd/ ZDd0 ZEd1 ZFd2 ZGd3 ZHd4 ZId5 ZJd6 ZKd7 ZLd8 ZMd9 ZNd: ZOd; ZPd< ZQd= ZRdQd>ZSd? ZTdBd@ZUy)RScoper   FrB   NTc                    || _         || _        || _        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 | _        g | _        g | _        i | _        | j<                  D ]#  }| j?                  t        |      t@        d        % y )Nz%d%s_._dot_rG   )!rE   outer_scopeparent_scoperv   r*   qualifying_scopequalify_namequalified_namescope_prefixr
   entriesset	subscopesconst_entriestype_entriessue_entriesarg_entriesvar_entriespyfunc_entriescfunc_entriesc_class_entriesdefined_c_classesimported_c_classescname_to_entryidentifier_to_entrynum_to_entryobj_to_entrybuffer_entrieslambda_defsid_countersscope_predefined_namesdeclare_varr   )r5   rE   r   r   mangled_name
qual_scopevar_names          r   r6   zScope.__init__  sN    	&(#d)T\\#w-G!HH**,
","9"9$"?D * 7 7, FD"/"5D ,D !!#"$ #%  33 	PH]84n$O	Pr!   c                     | S r2   r?   )r5   memos     r   __deepcopy__zScope.__deepcopy__      r!   c                    g }|j                   j                         D ].  \  }}|r||v s|j                  s|s|j                  ||f       0 | j                   j	                  |       dD ]g  }t        | |      }|D 	ch c]  }	|	j                   }
}	t        ||      D ]1  }|j                  s|s|j                  |
vs!|j                  |       3 i y c c}	w )N)r   r   r   r   r   r   r   r   )r   itemsr   r   updater   rE   )r5   othermerge_unused	allowlistr   rE   rc   attrself_entriesenamess              r   merge_inzScope.merge_in  s     ==..0 	2KD%	 1::NND%=1	2
 	G$( 	/D #4.L%12QVV2E2 - /JJ,EJJe4K ''./	/ 3s   >Cc                 P    d| j                   j                  d| j                  dS )N< >)	__class__r;   r   r9   s    r   __str__zScope.__str__  s     NN33T5H5HIIr!   c                     | j                   S r2   r   r9   s    r   r   zScope.qualifying_scope  s       r!   c                     |rt        || j                  |      S | j                  j                  || j                        S r2   )r.   r   r   manglerE   r5   prefixrE   s      r   r  zScope.mangle  s:    "vt7H7H$#OPP$$++FDII>>r!   c                 N    t         j                  |d}| j                  |      S )Nr'   )r   r   r  )r5   rE   r  s      r   mangle_internalzScope.mangle_internal  s#     #//6{{6""r!   c                 T    | j                   r| j                   j                  |      S |S r2   )r   mangle_class_private_namer   s     r   r  zScope.mangle_class_private_name  s'    $$>>tDDr!   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)r5   rE   counterscounts       r   next_idzScope.next_id  sn    $$&22	TNQ&E T5M))%<  	E	s   ; A	A	c                 6    | j                         j                  S r2   )r   contextr9   s    r   r&  zScope.context   s      "***r!   c                 6    | j                   j                         S z6 Return the module-level scope containing this scope. )r   r   r9   s    r   r   zScope.global_scope  s    ,,..r!   c                 6    | j                   j                         S r(  )r   builtin_scoper9   s    r   r*  zScope.builtin_scope  s    --//r!   c              #      K   |  | j                   r3t        | j                   t        j                  d            E d {    y y 7 w)Nr   )key)r   sortedoperator
attrgetterr9   s    r   iter_local_scopeszScope.iter_local_scopes  s9     
>>dnn(2E2En2UVVV Vs   >A	 AA	c              #   L   K   | j                   }||| _         d  || _         y wr2   )in_c_type_context)r5   r2  old_c_type_contexts      r   new_c_type_contextzScope.new_c_type_context  s+     !33(%6D"!3s   "$c                    d}| j                   }||   }	d}
|j                  r|	j                  j                  r| j                         r|	j	                         D ]x  }|j                  |j                        s|dk(  r|j                  sd}
n|j                  rd}
|
r5|}|rt        j                  |      }||_        d|_        ||_	        ||_
         n d}
|
r	 |S ||   j                  r	 |S |dk(  r$t        |d|z  | j                  rd       yd       y|d	k7  r,t        |d|z         | j                   |   j                          y)
a  
        Returns an entry or None

        If it returns an entry, it makes sense for "declare" to keep using that
        entry and not to declare its own.

        May be overridden (e.g. for builtin scope,
        which always allows redeclarations)
        NF<init>Textern'%s' redeclared r   r   ignore)r   r   rF   is_cppr\   compatible_signature_withargsr   copyr   rG   r   r   r   rX   )r5   rE   r   rF   rG   r   
copy_entryrc   r   	old_entrycpp_override_allowed	alt_entrys               r   handle_already_declared_namez"Scope.handle_already_declared_name  sd    ,,DM	  %!<!< '779 ,	11)..Ax'		/3,"///3,+ )%$(IIi$8E &*
-2*&+$'	),, (,$  T]''  X% /$6T=M=MU 	 TUU  x'c-45T"88:r!   c	                    |j                   rt        | t              st        |d       | j                  s(|r&t        j                  d|      rt        |d|z  d       | j                  }	d }
|r||	v r|s| j                  |||||      }
|
st        ||||      }
| j                  |
_        ||
_        |rk| j                  |      |
_        |sS||	v rJ| j                         r:|j                  r.|	|   j                   s|	|   j"                  j%                  |
       n|
|	|<   |j&                  r|j(                  |
_        | |
_        ||
_        |
S )Nz5Buffer types only allowed as function local variablesz
^_[_A-Z]+$z'%s' is a reserved name in C.r   )	is_bufferro   
LocalScoper   r   rematchr   r   rB  rA   create_wrapperr   r   r:  r   r   rI   r   is_memoryviewslicedefault_valuerH   re   r   )r5   rE   r   rF   rG   r   shadowr   rI  r   rc   s              r   declarezScope.declareX  s-    >>*T:">#NOEbhh|U.KC85@"E,,DGOF55dE4jYE$t37E $ 0 0E#1E '+'8'8'>$w4;;=T=N=NW^_cWdWoWo==DDUK(-""++EJ%r!   c                 6    t        | j                  d|      S Nr   )r
   r   r   s     r   r   zScope.qualify_name|  s    (;(;TBCCr!   c	                     |s6| j                   s|dk(  s|r|}n | j                  t        j                  |      }| j	                  ||||||      }	d|	_        ||	_        |	S )Npublic)rI  r   )r   r  r   enum_prefixrM  r   
value_node)
r5   rE   rF   valuerG   r   r   r   rI  rc   s
             r   declare_constzScope.declare_const  sa    J($:cF$6$6=T5$ZR`a r!   c
           	          |s|}| j                  ||||||d      }
d|
_        ||
_        |r| j                  j	                  |
       |	st        |dd       |
|_        |
S )NT)r   r   rc   )rM  r   r   r   r   r   rc   )r5   rE   rF   rG   r   r   r   definingrL  templaterc   s              r   declare_typezScope.declare_type  st     ET5$Z%)  +	$$U+ GD'48@DJ r!   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)NrC   r7  r   )r   r   )r   r  r   type_prefixis_cpp_class_scoper   lookuprE   rF   r   create_typedef_type
ValueErrorr   r<  
error_typerY  r   )r5   rE   	base_typerG   r   r   r   	namespacerF   r  rc   s              r   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
           
         |s6| j                   s|dk(  s|r|}n | j                  t        j                  |      }| j	                  |      }
|
si| j                         }t        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/                  | j0                        j                  |
j                  _        |
S )NrQ  )in_cpp)r   r   rW  '%s' redeclared  r   2'%s' already defined  (ignoring second definition))r   r  r   r[  lookup_herer:  r   CStructOrUnionTyperY  r   r   rc   r   rF   is_struct_or_unionkindr   re   check_previous_typedef_flagcheck_previous_visibilityr   r\  r   r]  rE   rb  )r5   rE   rk  re   typedef_flagrG   r   r   r   packedrc   re  rF   s                r   declare_struct_or_unionzScope.declare_struct_or_union  s   
 J($:cF$6$6=  &[[]F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 r!   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 )NrC   )	templates)r   rW  r8  rg  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`  re   r   base_classesrF    declare_inherited_cpp_attributes)rc   ru  
base_classdeclare_inherited_attributesrG   s      r   rx  z=Scope.declare_cpp_class.<locals>.declare_inherited_attributes  sd    * R
!6!66##+#DE0
8O8OPJJ$$EEjQRr!   this)rE   r   rF   rG   )r   r  r   r[  listrh  r   CppClassTyperY  r   r   r   rF   r{   r   rX   re   r   r   ru  rr  r   CPtrTyperG   r\  r   r]  rE   rb  )r5   rE   re   rG   r   ru  r   rr  rc   rF   rx  s      `      @r   declare_cpp_classzScope.declare_cpp_class  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 r!   c                     ||j                   j                  k7  r5t        |d|j                  dd|j                   j                     d       y y )N'z' previously declared using ')cdefctypedef)rF   rn  r   rE   )r5   rc   rn  rG   s       r   rl  z!Scope.check_previous_typedef_flag  sC    5::222#

01H1HIK L 3r!   c                 r    |j                   |k7  r(t        |d|j                  d|j                   d       y y )Nr  ' previously declared as ')r   r   rE   )r5   rc   r   rG   s       r   rm  zScope.check_previous_visibility  s3    z)#

E,,. / *r!   c
                 ~   |r|s;| j                   s|dk(  s|dk(  s|r|}n | j                  t        j                  |      }| j                  r0| j
                  j                  | j                        j                  }
nd }
|rt        j                  |||
|	      }n+t        j                  ||||
|	      }nt        j                  }| j                  ||||||      }|r6t        j                  j!                  dd      |_        | j%                  |       ||_        g |_        | j*                  j-                  |       |S )NrQ  r7  )r   )r   r   r   EnumClassDeclrz   )r   r  r   r[  r\  r   r]  rE   rF   r   CppScopedEnumType	CEnumTypec_anon_enum_typerY  r   r~   r   r}   use_entry_utility_coderI  enum_valuesr   r   )r5   rE   rG   r   scopedrn  r   r   rI  r   rb  rF   rc   s                r   declare_enumzScope.declare_enum  s!   $$
h(>%1S E KK(:(:DAE&& ,,33DII>CC	 	!33D%PST!++D%yVYZ..D!!$c5#3 " 0!%!1!1!=!=oO_!`E''.-&r!   c                 :    | j                   j                  ||      S r2   )r   declare_tuple_type)r5   rG   
componentss      r   r  zScope.declare_tuple_type:  s    223
CCr!   c
                 v   |s*|dk7  s|r|}n | j                  t        j                  |      }| j                  |||||      }
d|
_        |j
                  r6|dk7  r1| j                  d   r|
j                          n|j                  |       |r|dk7  rd|
_	        d|
_
        |rd|
_        d|
_
        |	r|	|
_        |
S )NrC   r   r7  
cpp_locals)r  r   
var_prefixrM  r   r{   
directivesr   check_nullary_constructorr   r   r   r   r5   rE   rF   rG   r   r   r   in_pxdis_cdefr   rc   s              r   r   zScope.declare_var=  s     Y&#F$5$5t<T5$Z@x!7|,'')..s3jH,#$E EJEIEJ'9E$r!   c                 @    |sy |D ]  }||vst        |d|z          y )Nz"Modifier '%s' is not allowed here.)r   )r5   rG   	modifiersallowedmodifiers        r   _reject_pytyping_modifiersz Scope._reject_pytyping_modifiersW  s1    ! 	LHw&c?(JK	Lr!   c                 (    | j                  |||      S r2   r   r5   rE   rF   rG   s       r   $declare_assignment_expression_targetz*Scope.declare_assignment_expression_target^  s     dC00r!   c                 \    | j                  |      }| j                  j                  ||      S r2   )r  r   declare_builtinr5   rE   rG   s      r   r  zScope.declare_builtinc  s+    --d3//c::r!   c                     |r;|j                   j                  s%t        |d|z         t        |j                  d       | j	                  |t
        ||      }t        |_        | j                  j                  |       |S )Nz'%s' already declaredrW   r   )
rF   r   r   rG   r   r   r   	signaturer   r   )r5   rE   rG   r   rc   s        r   _declare_pyfunctionzScope._declare_pyfunctiong  si    00#.56%));<  ~sz R.""5)r!   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)r   rc   r  rC   r   r   T)rh  r  rF   is_unspecifiedr   r   r
   rE   r   r   r   r  r   )r5   rE   rG   allow_redefiner   rc   s         r   declare_pyfunctionzScope.declare_pyfunctionp  s      &++D#*TY+ZZzz((+
>1//cjX]/^^T>3:N  ~s'+	 ! C"4(
#006.!r!   c                 T   | j                  t        j                  dz   |      }| j                  t        j                  dz   |      }| j                  |      }| j	                  d |t
        |d      }t        |      |_        ||_        ||_	        ||_
        t        |_        d|_        |S )Nfuncdef_methdef_rC   T)r  r   lambda_func_prefixr   rM  r   r
   rE   r   pymethdef_cnamer   r   r  r   )r5   lambda_namerG   r   r  r   rc   s          r   declare_lambda_functionzScope.declare_lambda_function  s    [[!:!:Z!GU
++f&?&?*&LkZ**;7T:~sIN";/
- /%.!r!   c                 :    | j                   j                  |       y r2   )r   r   r5   def_nodes     r   add_lambda_defzScope.add_lambda_def  s    )r!   c                 :    | j                   j                  |       y r2   )r   r   r5   rc   s     r   register_pyfunctionzScope.register_pyfunction  s    ""5)r!   c           
         |s*|dk7  s|r|}n | j                  t        j                  |      }d|	v xr |xr |}|rd}| 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(  r| j                  }| j                         rd}n8|r6|s4|j                         D ]  }|j
                  r||j
                  k(  s n d}|rK| j!                  ||||||	      }|j                         |_        |j$                  |j$                  |_        |}nt        |dd
       ||_	        n|s|j&                  r|j)                  |j                        re|j                  j*                  rG|j                  j,                  1|j,                  r%t/        |j0                  d|j2                   d|        ||_	        n1t5        |d       n$| j!                  ||||||	      }||_        ||_        |rd|_        |r|dk7  rd
|_        |rd
|_        |s|s|dk7  rt5        |d|z         |rd|_        |	r|	|_        |
r!|j>                  rJ d|d|d       |
|_        |rMtA        ||tB              }| jE                  |      |_#        d
|_$        d
|_%        |jL                  |_&        ||_'        ||_(        |jR                  rZ|j,                  N|j*                  rB|d   jT                  s3|r1|s/|s-tW        jX                  || ||jZ                  j\                         |S )NrC   inlineFr7  Tz
Function 'r  z', now as 'r  r   cpdefr  6Function signature does not match previous declarationz!No exception value declared for 'z' in pxd file.
Users cimporting this function and calling it without the gil will always require an exception check.
Suggest adding an explicit exception value.3Non-extern C function '%s' declared but not definedz+duplicate utility code definition in entry z ()r   )function_namevoid_return)/r  r   func_prefixrh  r   r   r   r   r   rF   same_aswith_with_gilwith_gilis_builtin_scoper:  r\   add_cfunctionrI   r`   r   r;  nogilexception_valuer	   rG   rE   r   r   r   r   r   r}   rA   r   r   r   r   r   re   r   rc   exception_checkin_utility_coder   write_noexcept_performance_hintreturn_typeis_void)r5   rE   rF   rG   r   r   r   r  rW  r  r}   overridableinline_in_pxdrc   can_overriderA  temp	var_entrys                     r   declare_cfunctionzScope.declare_cfunction  s    Y&#F$6$6= I-E&EXF  &jE,<,<<xAW  "--
##( Y&:9I9I+I%**J89:<e222['f<>?@Bzz!!$'"ZZ55dmmD
)e.>.>(.J#'#8#8L{{}'+| */)?)?)A 0I#,??ey6N %0 ,0L##11$c5*V_`7<7M7M7O4 ,,8/4/@/@D, $%]_`a%)
E$8$8T=[=[\a\f\f=g zz''EJJ,F,F,NSWSgSg(!II?

| LJ J !" "&EJ#WX&&tT3z9UE$E#.E '+E$jH,#$E EI:+A#LtST#'E #,E ))ocgin+oo!-EdE>:I'+'8'8'>I$$%I!$%I!#kkIO )E
  T%9%9%AdjjF**66T4;K;K;S;SUr!   c           	          t        d |D              sJ t        j                  |t        j                  d| j                  d       gfi |}	| j                  ||	|d |||      }
d|
_        |||
_        |
S )Nc              3   $   K   | ]  }|d v  
 yw))r  r  r  r  is_const_methodis_static_methodNr?   ).0ks     r   	<genexpr>z(Scope.declare_cgetter.<locals>.<genexpr>  s      
 ss
s   r5   )r   r   r  rW  T)allr   	CFuncTypeCFuncTypeArgparent_typer  r   r   )r5   rE   r  rG   r   r   r  rW  cfunc_type_config
cfunc_typerc   s              r   declare_cgetterzScope.declare_cgetter  s     
&
 
 	
  ))$$VT-=-=tDE!  !
 &&*c*PYdl ' n$Er!   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 ru   )rM  r   r   ra   r   r   rv   reversedr   rF   insert)r5   rE   rF   rG   r   r   r  	inheritedrc   icfunc_entrys              r   r  zScope.add_cfunction  s    T5$Z@#,E %%e,  D&&'A'(:(:; ++;3C3C3L3LQ %%a/r!   c                 L    | j                  |      }|r|S t        |d|z         y )Nz'%s' is not declared)r]  r   r5   rE   rG   rc   s       r   findz
Scope.find'  s(    D!L#-45r!   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)r5   pathrG   re   rE   rc   s         r   find_imported_modulezScope.find_imported_module/  s`      	DJJtS)Ec;chhtnLM	 r!   c                 ^   | j                  |      }| j                  |      xs- | j                  xr | j                  j                  |      xs d }|r|S | j                  xr | j                  j                  |      xs d }|r(|j                  r| j                  |j                  |       |S r2   )r  rh  r   r]  r   _emit_class_private_warningrG   )r5   rE   r   rc   s       r   r]  zScope.lookup>  s     55d;!!$' $$N)9)9)@)@)N 	 L !!Cd&6&6&=&=d&CLU&&,,UYY=r!   c                     | j                   j                  | j                  |      d       }|r|S | j                   j                  |d       S r2   )r   rR   r  r5   rE   rc   s      r   rh  zScope.lookup_hereP  sF       !?!?!EtLL ||d++r!   c                 :    | j                   j                  |d       S r2   )r   rR   r   s     r   lookup_here_unmangledzScope.lookup_here_unmangled[  s    ||d++r!   c                 $    | j                  |      S r2   )rh  r   s     r   #lookup_assignment_expression_targetz)Scope.lookup_assignment_expression_target^  s     %%r!   c                     | j                  |      }|s;| j                  |      }|r(|j                  r| j                  |j                  |       |s| j                  |t        d       }|S r2   )rh  r  r   r  rG   r   r   r  s      r   lookup_targetzScope.lookup_targetc  sb       &..t4E**00DA$$T>4@Er!   c                     |r`|j                   rS|j                  j                  r1| j                  r%|j                  j	                  | j                        S |j                  S y y r2   )r   rF   ra   fused_to_specific
specializer  s     r   $_type_or_specialized_type_from_entryz*Scope._type_or_specialized_type_from_entryo  sL    U]]zz""t'='=zz,,T-C-CDD:: #5r!   c                     | j                  |      }| j                  |      }|r|S |r$|j                  rddlm}  ||j                        }| j                  |      S )Nr   ) get_known_standard_library_entry)r]  r  r   Builtinr   )r5   rE   rc   tpr   s        r   lookup_typezScope.lookup_typeu  sY    D! 66u=IU88A4U5X5XYE88??r!   c                    |d   j                   j                  rs|d   j                   }|j                  j                  d|z        }|D|dd  D cg c]  }|j                    }}t	        j
                  ||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 )Nr   z
operator%sr   r   )rF   r{   re   r]  r   rd   r\   rv   rangerz  r   )r5   r.  operandsobj_typemethodargrf   resfunctionfunction_alternativesmethod_alternativesnr\   s                r   lookup_operatorzScope.lookup_operator  s   A;(({''H^^**<(+BCF!19!">#SXX>	> ++Iv7N7N7PQ?J;;|h67 "$,$=$=$?! !x=A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 	73 ?2 &Ds   E<!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)r;   r<   r=   r?   r!   r   FakeOperandr    s    r!   r  )rF   )Nodesr  r  )r5   rG   r.  typesr  r  rF   r  s           r   lookup_operator_for_typeszScope.lookup_operator_for_types  sD    	$ 	<ABDK$/BB##Hh77 Cs   ;c                 $    t        |d|z  d       y )NzGlobal name %s matched from within class scope in contradiction to Python 'class private name' rules. This may change in a future release.r   )r   )r5   rG   rE   s      r   r  z!Scope._emit_class_private_warning  s     CEIJKL	Nr!   c                 B    | j                         j                  |       y r2   )r   use_utility_coder5   new_codes     r   r  zScope.use_utility_code  s    ,,X6r!   c                 B    | j                         j                  |       y r2   )r   r  r  s     r   r  zScope.use_entry_utility_code  s    2259r!   c                 2    |D ]  }|| j                   v s y yNr   r   )r   r5   r  rE   s      r   defines_anyzScope.defines_any  s%     	Dt||#	 r!   c                 f    |D ],  }|| j                   v s| j                   |   j                  s, y yr  )r   r   r   s      r   defines_any_specialzScope.defines_any_special  s6     	Dt||#T(:(E(E	 r!   c                 <    ddl m}  |       j                  |        y )Nr   )get_type_inferer)TypeInferencer%  infer_types)r5   r%  s     r   r'  zScope.infer_types  s    3&&t,r!   c                 @    | j                   }|y|j                         S r   )r   r:  )r5   outers     r   r:  zScope.is_cpp  s!      =<<>!r!   c                 >    | j                   j                  |||       y r2   )r   add_include_file)r5   filenameverbatim_includelates       r   r+  zScope.add_include_file  s    ))(4DdKr!   c                 ,    t         j                   d| S )N->)r   modulestateglobal_cname)r5   r   s     r   name_in_module_statezScope.name_in_module_state  s     001E7;;r!   c                    |
t               }| j                   }| j                  j                         D ]  }|s(|j                  s|j
                  dk(  s|j                  s-t        j                  |j                        }t        fd|D              r yt        |j                  dd       }|||v r|j                  |       |j                  |      s y y)NrQ  c              3   (   K   | ]	  }|k(    y wr2   r?   )r  sub_tptype_to_finds     r   r  z3Scope.find_shared_usages_of_type.<locals>.<genexpr>  s     Gf<6)Gs   Tre   F)r   is_module_scoper   valuesr   r   r   r   get_all_subtypesrF   anyr   addfind_shared_usages_of_type)r5   r6  _seen_scopesinclude_all_entriesrc   entry_subtypes
type_scopes    `     r   r<  z Scope.find_shared_usages_of_type  s    5L"&"6"66\\((* 	E'5+?+?5CSCSW_C_chclcl'88DNGGG Wd;J!Z<%?Z(44\<P	 r!   )TNr2   F)r   r   r   )NrC   r   r   )NrC   r   r   r   r   )NrC   r   )NrC   r   F)Nr?   r7  N)rC   r   r   NNrC   FFFN)r?   )r7  N)Fr7  NrC   r   r   r   r?   NF)NNrC   r?   Fr   )Vr;   r<   r=   r  is_py_class_scopeis_c_class_scopeis_closure_scopeis_local_scopeis_generator_scopeis_generator_expression_scopeis_comprehension_scopeis_passthroughr\  is_property_scoper7  is_c_dataclass_scopeis_internalr   r   r  r  r  r   r2  node_positions_to_offsetr6   r  r  r  r   r  r  r  r$  r   r&  r   r*  r0  r   r4  rB  rM  r   rU  rY  rc  rp  r}  rl  rm  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r]  rh  r  r  r  r  r  r  r  r  r  r  r!  r#  r'  r:  r+  r2  r<  r?   r!   r   r   r   \  s"   J N$%!NO KLKEK!"PH/0J!?#
   + +/0W
  4  4<~"HD
 GH#$( =A670 <@>?).#L /1/34lL
/ @D>D ,5OS4L1
;(** KLSXhT BFEJ"&6$	,,&

@ 7B8N
7:-"L<
r!   r   c                   0    e Zd Zej                  Zd Zd Zy)PreImportScopec                 P    t         j                  | t        j                  d d        y r2   )r   r6   r   
pre_importr9   s    r   r6   zPreImportScope.__init__  s    tW//t<r!   c                 T    | j                  ||t        |d      }d|_        d|_        |S )NrC   T)rM  r   r   r   r  s       r   r  zPreImportScope.declare_builtin  s-    T4iH  r!   N)r;   r<   r=   r   preimport_cnamenamespace_cnamer6   r  r?   r!   r   rQ  rQ    s    ,,O=r!   rQ  c                   \    e Zd ZdZd Zd
dZd ZddZdej                  dfdZ
d Zdd	Zy)BuiltinScopeTc                     t         j                   t        j                  | dd d        i | _        y t        j                  | dt	               d        i | _        y )N__builtin__)r   rS  r   r6   rQ  
type_namesr9   s    r   r6   zBuiltinScope.__init__  sG    %NN4d;  NN40@$Gr!   Nc                 `    |dk(  s|dk(  rd}n|dk(  r|dk(  rd}t         j                  | |      S )Nunicode
basestringstrlongr   int)r   r]  )r5   rE   language_levels      r   r]  zBuiltinScope.lookup  s:    9 4DV^! 3D||D$''r!   c                     |t         j                  vrY| j                  | j                  j                  ||      S t        j
                  rt        |d|z         y t        |d|z  d       y y )Nundeclared name not builtin: %sr   )r   KNOWN_PYTHON_BUILTINSr   r  r   error_on_unknown_namesr   r   r  s      r   r  zBuiltinScope.declare_builtin  se    t111+''77cBB11#@4GHC!BT!I1M 2r!   c                 .   t        |      }| j                  ||d |d|      }|||_        |rg|dk(  r|}nt        |      }t        ||t              }| j                  |      |_        d|_        d|_        ||_	        |j                  |_
        ||_        |S )Nr7  )r   r}   *r   )r
   r  r`   rA   r   r   r   r   r   r}   re   r   )	r5   rE   rF   r   python_equivr}   r`   rc   r  s	            r   declare_builtin_cfunctionz&BuiltinScope.declare_builtin_cfunction  s     T"&&tT48bn&o" +Es"#,\:lL.II'+'8'8'>I$$%I!#$I %1I"#kkIO )Er!   c                 |   t        |      } ||||      }t        |d d|      }i |_        |j                  |       d| j                  |<   | j                  ||d d      }|r||_        |dk(  rd| j                  vr|| j                  d<   t        |j                  | j                  d      j                  |j                  |j                  j                        }	| j                  |      |	_        d|	_        d|	_        d|	_        d|	_        | |	_        t*        j,                  rd	|	_        |r||	_        |	|_        |S )
Nr7  )r   r   r  r   r  r  xrangerF   rE   rF   rG   r   T)r
   CClassScoper  	set_scoper[  rY  r}   r   rA   rE   r]  rF   rG   typeptr_cnamer   r   r   r   r   r   re   r   cache_builtinsr   r   )
r5   rE   r   objstruct_cname
type_classr}   rF   re   rc   r  s
             r   declare_builtin_typez!BuiltinScope.declare_builtin_type/  s/    T"$7DdxUYZu !!!$dx!H!-E7?xt||;%*DLL"V$))		****	
	 $(#4#4T#:	  !	 	 !	 		!!!%I%1I"%r!   c                     | S r2   r?   r9   s    r   r*  zBuiltinScope.builtin_scopeT  r  r!   c                      y r2   r?   )r5   rE   r   rF   rG   r   r>  s          r   rB  z)BuiltinScope.handle_already_declared_nameW  s    r!   r2   )NNNrA  )r;   r<   r=   r  r6   r]  r  rj  r   BuiltinObjectTypert  r*  rB  r?   r!   r   rX  rX    s?     (N, .2j>Z>Z*.#Jr!   rX  c                      e Zd ZdZdZdZdZdZg dZd$dZ	d Z
ed        Zd Zd%d
Zd Zd Zd Zd&dZd$dZd Zd'dZd Zd Zd Zd Z	 	 d(dZ	 	 d)dZd Zd Zd Z	 	 	 	 	 d*dZd Z d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'y	)+ModuleScoper   r   F)	__builtins__r;   __file__r   __path____spec__
__loader____package__
__cached__c                    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 | _        t5               | _        g | _        d| _        g | _        g | _        | j                  | _         i | _!        i | _"        | jG                  tI        jJ                  dd             y )Nr   r  rB   r   zPython.hT)initial)&rB   r  parent_moduler*  r   r6   
is_packagemodule_namer
   _contextr   module_cnamemoddict_cnamemodule_dict_cnamemethtable_cnamemethod_table_cnamer   moddoc_cnamer   utility_code_listmodule_entries
c_includesdictr[  pxd_file_loadedcimported_modulesr   types_importedincluded_fileshas_extern_classcached_builtinsundeclared_cached_builtinsrV  _cached_tuple_types _cached_defaults_c_class_entriesprocess_includer   IncludeCode)r5   rE   r  r&  r  r  r   s          r   r6   zModuleScope.__init__  s-   *++tT;>$()9)9:"//!'!5!5"("8"8,,!# {556 !#!e  !!*,'#00#% 02-T--j$GHr!   c                     | j                   S r2   )r  r9   s    r   r   zModuleScope.qualifying_scope  s    !!!r!   c                     | j                   S r2   )r  r9   s    r   r&  zModuleScope.context  s    }}r!   c                     | S r2   r?   r9   s    r   r   zModuleScope.global_scope  r  r!   Nc                     | j                  |      }||S |$| j                  | j                  j                  nd}| j                  j	                  ||      S )N   )rb  )rh  r&  rb  r   r]  )r5   rE   rb  rc   s       r   r]  zModuleScope.lookup  sZ      &L!<@LL<TT\\88Z[N&&tN&KKr!   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)rE   rF   rG   _structstructT)rn  rG   r   )tupler  r!  r   c_tuple_typer   rh  StructOrUnionScope	enumerater   rp  r   removestruct_entryrY  rc   )
r5   rG   r  ttyper   rc   re   ix	componentr  s
             r   r  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                 N   t        |      }	 | j                  |   S # t        $ r Y nw xY w| j                  t        j
                        }t        |      }| j                  ||dd|      x}| j                  |<   | j                  |       d|j                  _
        |j                  j                  }d|_        d|_        t        t        t        |                  }d|z  j                   }t#        |      D ]+  \  }}	t         ||            }
|j%                  |
|	d d       - |S )NT)rW  implementingrr  zarg{:0>%dd})rG   r  )r  r  r!  r$  r   defaults_struct_prefixr
   declare_c_classcheck_c_classrF   is_final_typere   rN  is_defaults_class_scoperv   r_  formatr  r   )r5   rG   r  r   rc   re   	num_zerosbuild_argnamer  type_arg_names              r   declare_defaults_c_classz$ModuleScope.declare_defaults_c_class  s1   :&
	88DD 		 V::;e$DHDXDX3D! EY E# 	#55jA 	5!#'

 

   (,% C
O,-	&2::!*- 	GHAu$]1%56Hh4F	G s    	((c                    |t         j                  vr|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                  j/                  |       | j0                  j/                  |       nd|_        ||_        | j3                         j5                  |      |_        |S )Nrd  r   rC   r   globals__Pyx_Globals)r   re  renamed_py2_builtins_mapuncachable_builtinshas_import_starr   r   r   rf  r   r   rM  r   rq  r  rE   old_style_globalsr   r]  r   r   builtin_prefixr   r   r  r*  r   r   r  s       r   r  zModuleScope.declare_builtin  s   t111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r!   c                    |d uxr |dkD  }d }d}|8|dkD  r3| }| j                   rdnd}||kD  r/|r-|j                  }|dz  }||kD  r|rn|dk7  r| j                  }d}| j                         }|j                  j	                  |||||      S )Nr   Fr   T)from_modulerG   absolute_fallbackrelative_import)r  r  r   r&  find_module)	r5   r  rG   relative_levelis_relative_importr  r  	top_levelmodule_scopes	            r   r  zModuleScope.find_module  s    
 ,47NNQ<N!%.1*< K!__!I
 !9,)77!# !9, q ,,K $((*##//[cM^  qC 0 D 	Dr!   c                     d|v r|j                  dd      \  }}nd }| j                  |      }|s,t        || | j                  |rdn|      }|| j                  |<   |r|j                  ||      }|S )Nr   r   T)r  r&  r  )
as_package)splitlookup_submodulery  r&  r  find_submodule)r5   rE   r  	submodulere   s        r   r  zModuleScope.find_submodule$  s     $;"jja0OD)I%%d+D$,,cl[_r|}E(-D%((z(JEr!   c                     d|v r|j                  dd      \  }}nd }| j                  j                  |d       }|r||j                  |      }|S )Nr   r   )r  r  rR   r  )r5   rE   r  modules       r   r  zModuleScope.lookup_submodule3  sW    $;"jja0OD)I$$((t4+,,Y7Fr!   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   r  r  )r5   r,  r-  r.  incs        r   r+  zModuleScope.add_include_file>  s'     x)9ES!r!   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_updater  )r5   r  r,  s      r   r  zModuleScope.process_includeG  s?    2 mmo;++-C-ooc"r!   c                     || j                   vrn|j                  j                         D ]  }| j                  |        | j                   j	                  |       |j                   D ]  }| j                  |        y y r2   )r  r  r8  r  r   add_imported_module)r5   re   r  ms       r   r  zModuleScope.add_imported_modulef  sx    ...''..0 *$$S)*""))%0,, ,((+,	 /r!   c                     |j                   rd|_        || j                  vr|| j                  |<   y t        |d|z  d       y )NTrf  r   )r   r   r   r   )r5   rE   rc   rG   s       r   add_imported_entryzModuleScope.add_imported_entryn  s?     $E$!&DLLC,t3Q7r!   c                    | j                  |      }|r6|j                  r|j                  |u r|S |j                  r|j                  r |S | j                  |t        |      }d|_        ||_        | j                  |       |S )Nr   )rh  r   r   r   r   r   r  )r5   rE   re   rG   rc   s        r   declare_modulezModuleScope.declare_modulew  s|    
   &  U__%=%%eoo $$T>3?E !E  'r!   c
                 X   |dvrt        |d|z         | j                  ||	d       |s1|t        u rt        }|j                  r|j
                  rt        d      |rF|dk7  rA| j                  d   dk7  r/d}
d}|j                  rd	}
d
}t        |d| d|
z   d|
rdndz          |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,                  |_        | j0                  j3                  |       nd|_        t6        j8                  rd|_        |S )N)rC   rQ  r7  z+Module-level variable cannot be declared %s)ztyping.Optionalz7Non-cdef global variable is not a generic Python objectr7  subinterpreters_compatiblenorB   z9
Python objects should not be shared between interpreterszPython zGlobal cdef zvariable used with subinterpreter support enabled.
This variable is not currently in the per-interpreter module state but this will likely change in future releases.r   r   r   rQ  z6Variable '%s' type does not match previous declarationrC   Tr   r   r   r  r  r   )r   r  r   r   is_pyobjectis_extension_typer   r  r   r  r   r  rh  r   rF   r  r   r   r   r   r   r   declaration_valuerH   r   r   r   r   cimport_from_pyxr   )r5   rE   rF   rG   r   r   r   r  r  r   extra_warningpyobject_warningrW  rc   mangled_cnames                  r   r   zModuleScope.declare_var  sL    <<#DzQR''-?AUV''%$$T-C-C#MO O
h.OO$@ATIM! \#, /0 1B B  11-/ !zHX%**@XF$5$5t<  &U)) ::%%d+)e.>.>(.JC!Y\`!`bcd!%EJ 9, $F,=,=t D;;-/ E"&EK'''+$!!$dC(-*&)&'^p " r  Ezz++"ZZ99
##E* !E##EJr!   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 )	Nr  z+Declarations should not be declared inline.r   r7  rQ  z6Extern functions cannot have default arguments values.rC   )r   r   r   r  rW  r  r}   r  )r   r  r   r  optional_arg_countr   rh  r   r   r   r   r   r  )r5   rE   rF   rG   r   r   r   r  rW  r  r}   r  rc   r  s                 r   r  zModuleScope.declare_cfunction  s     H	1CFJX%**@XF$6$6=!d&=&=#OP  &U))9, $F,>,> E;;-/ E"'EK',E$''$cJC#	 ( %
 r!   c                 Z    | j                  |      }|s| j                  |t        |       y y r2   )rh  r   r   r  s       r   declare_globalzModuleScope.declare_global  s,      &T>37 r!   c                 @    || j                   j                  |       y y r2   )r  r   r  s     r   r  zModuleScope.use_utility_code  s!    ""))(3  r!   c                    |y |j                   r%| j                  j                  |j                          |j                  r%| j                  j                  |j                         t	        j
                  |j                        D ]9  }t        |d      s|j                  |us| j                  |j                         ; y )Nrc   )
r}   r  r   r   r   r9  rF   hasattrrc   r  )r5   rc   r  s      r   r  z"ModuleScope.use_entry_utility_code  s    =""))%*<*<=((""))%*G*GH--ejj9 	6Br7#(=++BHH5	6r!   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                  _)        | j<                  jQ                  d      }|dk(  rd	|j                  _*        d	|_+        |S )Nr7  rQ  z6ctypedef only valid for 'extern' , 'public', and 'api'r   r   rs  )
check_size)r   rW  rL  Tz5Object name required for 'public' or 'extern' C class)rE   r   r   r  zC class '%s' already definedz C class '%s' already implementedr   rC   zClass 'r  r  z4Object struct name differs from previous declarationz2Type object name differs from previous declarationfinalcollection_typesequence),r   rh  rF   r   r  re   definedrl  ra  r   r   PyExtensionTyperG   buffer_defaultsobjtypedef_cnamer  r   rp  r  r   typeptr_prefixrY  r   rr  r   objstruct_prefixattach_var_entry_to_c_classr   r   rn  r  r=  declare_inherited_c_attributesro  r   implementedr   r   r   typeobj_cnamerR   r  has_sequence_flagr   )r5   rE   rG   rW  r  r  ra  rr  r  rp  r   rn  r   r  r  rL  r  rc   rF   re   r  s                        r   r  z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cOP!.D??w''+EJJ$//--.?@j(+/EJJ( 

 r!   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 rO  )rF   ra  vtabslot_cnamer   obj_base_cnamere   r   rv   is_builtin_typer  vtabstruct_prefixrE   vtabstruct_cnamevtabptr_prefixvtabptr_cname)r5   rc   rF   entry_countra  s        r   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 r!   c                     | j                   D ]<  }|j                  j                  rt        |j                  d|j
                  z         > y )N(C class '%s' is declared but not defined)r   rF   re   r   rG   rE   r  s     r   check_c_classes_pxdzModuleScope.check_c_classes_pxd  s@     )) 	ZE::##eii!Kejj!XY	Zr!   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  r7  z)C method '%s' is declared but not defined)rF   rE   r   re   r   rG   r  r  r   typeobj_prefixr   r   r   r  vtable_prefixvtable_cname)r5   rc   rF   rE   r   method_entrys         r   r  zModuleScope.check_c_class  s    zzzz%%
zz%))G$NO!$*<*<!%V-B-BD!ID :: $

 8 8 +#009P9P,**,W$))-* ++
  $F,@,@%** MD r!   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 = )rQ   r   r   rE   rF   r   r  )r5   debug_check_c_classesrc   s      r   check_c_classeszModuleScope.check_c_classes  sw     !" :T=P=PPQ)) 	&E$%**e<=o

3+U-=-=>u%	&r!   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 )Nr7  r  )
r   r  r   r   re   r   r   r   r   rG   r  s      r   check_c_functionszModuleScope.check_c_functions  sy      <<--/ 	cKD%!!((!KK4/!,,8 % 1 1 % 4 4%))%Z]a%ab	cr!   c                    ddl m} t        |j                  |j                  |j
                  |j                  j                        }|j                  |_        d|_	        d|_
        d|_        d|_        |j                  |_        ||_        y )Nr   r  rm  T)rB   r  rA   rE   	type_typerG   rF   rp  r   r   r   r   r   re   r   )r5   rc   r  r  s       r   r  z'ModuleScope.attach_var_entry_to_c_class  sw     	$$))JJ,,.	 $)#7#7	  !	 	 !	(,	%++	%r!   c                     | j                   S r2   )cppr9   s    r   r:  zModuleScope.is_cpp  s    xxr!   c                 <    ddl m}  |       j                  |        y )Nr   )PyObjectTypeInferer)r&  r  r'  )r5   r  s     r   r'  zModuleScope.infer_types  s    6))$/r!   rA  r2   )rD  r   rB  rC  )r   r   NNNNNrC   r   r   NNr   )(r;   r<   r=   r7  r  is_cython_builtinr  namespace_cname_is_typer   r6   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   ry  ry  ^  s    0 OO#
I<"  L(6#JD>	"#>,84 ,5OSEP KLSX:8
4	6 CD>B?H.2)*	rhP:Z N.&0
c&(0r!   ry  c                   V    e Zd ZdZdZdZddZd Zd Z	 	 ddZ	d Z
d	 Zd
 Zd Zd Zy)rF  TFNc                 <    ||}t         j                  | |||       y r2   r   r6   )r5   rE   r   r   s       r   r6   zLocalScope.__init__	  s    &LtT;=r!   c                     t        ||z         S r2   )r.   r  s      r   r  zLocalScope.mangle  s    v}--r!   c                 
   | j                  |      }| j                  t        j                  |      }| j	                  ||||d      }d|_        |j                  rd|_        d|_        | j                  j                  |       |S )NrC   r   0)r  r  r   r  rM  r   r  rH   r   r   r   )r5   rE   rF   rG   r   rc   s         r   declare_argzLocalScope.declare_arg  sv    --d3F--t4T5$Y?EJ&r!   c
                 T   | j                  |      }|dv rt        |d|z         t        j                  | |||||||||	
      }
|
j                  j
                  r|
j                  j
                  |
_        d|
_        | j                  |
_	        | j                  j                  |
       |
S )NrQ  readonlyz$Local variable cannot be declared %sr  r   )r  r   r   r   rF   r  rH   r   _in_with_gil_blockr   r   r   r  s              r   r   zLocalScope.declare_var  s     --d3//#=
JK!!$dC(-*&)&'^p " r ::''55EJ"&"9"9&r!   c                     | j                  |      rt        |dd       y | j                         j                  |      }|| j                  |<   y Nrf  r   rh  r   r   r  r   r  s       r   r  zLocalScope.declare_global0  D    D!C,a0%%'55d;E!&DLLr!   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)rh  re   r   r   rX   r]  r5   rE   rG   
orig_entryrc   s        r   declare_nonlocalzLocalScope.declare_nonlocal8  sv    %%d+
***d2:;R;R#4t;<,,.KK%E}E$6$6c?$FG %7r!   c                 X    d|_         t        ||       }d|_        || j                  |<   |S NT)r   r   r   r   )r5   rE   rc   inner_entrys       r   _create_inner_entry_for_closurez*LocalScope._create_inner_entry_for_closureC  s2     -"&(Tr!   c                    t         j                  | |      }|t|j                  }|j                  r|j                  }|j                  r|| ur?|j
                  r3t        |j                  d      rt        d      | j                  ||      S |S )Nscope_classz#lookup() after scope class created.)	r   r]  re   rJ  r   rF  r  r   r9  )r5   rE   rc   entry_scopes       r   r]  zLocalScope.lookupJ  s     T4(++K44)55 44$&;+G+G5;;6'(MNN ;;D%HHr!   c                 |   | j                         D ](  }|j                  j                         D ]  }|j                  ru|j                  j
                  }| j                  r||_        :|j                  t        j                        r|t        t        j                        dz   d  }|d||_        |j                  s|j
                  |_        t        j                  d|j
                  |_        |j                  j                  s|j                  j                   d   s|j#                          
 + y )Nr   r0  r  )r0  r   r8  r   r   r   rK  r   r   cur_scope_cnamerv   r   original_cnamerF   r{   re   r  r   )r5   outer_scope_cnamere   rc   r   s        r   mangle_closure_cnamesz LocalScope.mangle_closure_cnames[  s    ++- 	2E--/ 2%%!--33E**&+ ++F,B,BC$)#f.D.D*Ea*G*H$IE2CU&K%%+0;;E(.4.D.Dekk"REKzz..5;;3I3I,3W//12	2r!   r2   rB  )r;   r<   r=   rG  has_with_gil_blockr,  r6   r  r(  r   r  r5  r9  r]  rA  r?   r!   r   rF  rF     sM    N  >
. ,5OS$'	H"2r!   rF  c                   L    e Zd ZdZdZd Zd Z	 	 ddZd ZddZ	d	 Z
d
 Zd Zy)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                 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)rJ  r   r   r$  r   genexpr_id_refr   r6   r  r   rv   genexp_prefixrE  rD  r   r   r   r;  )r5   r   r   rE   s       r   r6   zComprehensionScope.__init__t  s    "11'44L 11((*2263H3HItT;=%00%)<)<c$i(NN 00K4P4PT_TqTq%11K 00K4P4PT_TqTq&22!!$'r!   c                 V    | j                   | j                  j                  ||      S r2   )rG  r   r  r  s      r   r  zComprehensionScope.mangle  s&    ++T->->-E-Efd-STTr!   Nc
                    |t         u r5| j                  j                  |      }
|
r|
j                  r|
j                  }| j                  ||	       | j                  | j                  j                  t        j                  |xs | j                               }| j                  |||||      }d|_        | j                  j                  rd|_        nd|_        d|_        | j"                  j%                  |       || j&                  |<   |S r7  )r   r   r]  r   rF   r  rG  r   r  r   r  r$  rM  r7  r   r   r   r   r   r   )r5   rE   rF   rG   r   r   r   r  r  r   r   rc   s               r   r   zComprehensionScope.declare_var  s     ##**11$7K{66"''''-?@ ,,d.?.?.F.FvGXGXZ^Zpbfbnbnbp.qrT5$Z@ ,,#E!EN &"Tr!   c                 <    | j                   j                  |||      S r2   )r   r   r  s       r   r  z7ComprehensionScope.declare_assignment_expression_target  s      ,,T4==r!   c                 <    | j                   j                  |||      S r2   )r   r  r5   rE   rG   r  s       r   r  z%ComprehensionScope.declare_pyfunction  s"    22#~' 	'r!   c                 :    | j                   j                  ||      S r2   )r   r  )r5   r   rG   s      r   r  z*ComprehensionScope.declare_lambda_function  s    77
CHHr!   c                 8    | j                   j                  |      S r2   )r   r  r  s     r   r  z!ComprehensionScope.add_lambda_def  s    ..x88r!   c                 b    | j                  |      }|s| j                  j                  |      }|S r2   )rh  r   r  r  s      r   r  z6ComprehensionScope.lookup_assignment_expression_target  s0      &%%II$OEr!   )NrC   FFTNrA  )r;   r<   r=   r   rJ  r6   r  r   r  r  r  r  r  r?   r!   r   rD  rD  m  sA     "("U ,5NR.>'I9r!   rD  c                   &    e Zd ZdZddZddZd Zy)ClosureScopeTNc                 f    t         j                  | |||       t        j                  || _        y r2   )rF  r6   r   closure_scope_prefixclosure_cname)r5   rE   
scope_namer   r   s        r   r6   zClosureScope.__init__  s)    D$\B'-'B'BJOr!   c                 6    t         j                  | |||d      S )NrC   r  )rF  r  rL  s       r   r  zClosureScope.declare_pyfunction  s    ,,T4nYb,ccr!   c                 (    | j                  |||      S r2   r  r  s       r   r  z1ClosureScope.declare_assignment_expression_target  s    dC00r!   r2   rA  )r;   r<   r=   rF  r6   r  r  r?   r!   r   rQ  rQ    s    Pd1r!   rQ  c                        e Zd ZdZdZd Zd Zy)GeneratorExpressionScopeTc                 `    | j                   j                  |||      }| j                  ||      S r2   )r   r   r9  )r5   rE   rF   rG   rc   s        r   r  z=GeneratorExpressionScope.declare_assignment_expression_target  s/    !!--dD#>33D%@@r!   c                     | j                  |      }|s/| j                  j                  |      }|r| j                  ||      S |S r2   )rh  r   r  r9  r  s      r   r  z<GeneratorExpressionScope.lookup_assignment_expression_target  sF      &%%II$OE;;D%HHr!   N)r;   r<   r=   rH  rI  r  r  r?   r!   r   rY  rY    s    $(!Ar!   rY  c                   .    e Zd ZddZ	 	 	 ddZ	 	 ddZy)r  c                 6    t         j                  | |d d        y )N)r   r   r$  r   s     r   r6   zStructOrUnionScope.__init__  s    tTt$Gr!   Nc                    |s|}|dk(  rt        |      }|j                  rt        j                  |      }| j	                  ||	       | j                  |||||      }d|_        | j                  j                  |       |j                  r|
st        |d       |S |j                  r|st        |d       |S |j                  r|st        |d|z         |S )NrC   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    r   r   r|  r  rM  r   r   r   r  r   rJ  needs_refcounting)r5   rE   rF   rG   r   r   r   r  r  r   allow_pyobjectallow_memoryviewallow_refcountedrc   s                 r   r   zStructOrUnionScope.declare_var  s    
 EY&)%0&&t,D''-?@T5$Z@&!cLM  $$#cJK  ###cX[__`r!   c                 J    |
rt        |d       | j                  |||||      S )Nz0C struct/union member cannot be declared 'cpdef'r  )r   r   )r5   rE   rF   rG   r   r   r   r  rW  r  r  s              r   r  z$StructOrUnionScope.declare_cfunction  s7     #IJdC&+
   D 	Dr!   )?)	NrC   FFFNFFF)NrC   r   r   r   r?   F)r;   r<   r=   r6   r   r  r?   r!   r   r  r    s(    H ,5OSSX8 KL@EDr!   r  c                   &    e Zd ZddgZd Zd Zd Zy)
ClassScoper<   r=   c                     |r!|j                         j                  d      r|S |rK|j                  d      r:|j                  d      s)t        d| j                  j                  d      |      }|S )N__pyx_r   r'   )lowerr   endswithr
   
class_namelstripr   s     r   r  z$ClassScope.mangle_class_private_name	  sY    DJJL++H5KDOOD)$--2E DOO,B,B3,G!NODr!   c                 P    t         j                  | |||       || _        d | _        y r2   )r   r6   rk  r   r5   rE   r   s      r   r6   zClassScope.__init__	  s"    tT;<r!   c                 j   t         j                  | |      }|r|S |dk(  rt        ddt        j                  t
        t        j                  dt
        d       gdd            }t        j                  j                  dd      |_
        | j                  |       d|_        | j                         |_        |S )Nclassmethod__Pyx_Method_ClassMethodrB   r   ClassMethodzCythonFunction.cr   )r   r]  rA   r   r  r   r  r   r~   r   r   r  r   r*  re   r  s      r   r]  zClassScope.lookup	  s    T4(L= 
 *$$",,RFGAOPE -1,<,<,H,HXj,kE)''.!"E,,.EKr!   N)r;   r<   r=   r   r  r6   r]  r?   r!   r   rf  rf  	  s     +N;
r!   rf  c                   2    e Zd ZdZdZ	 	 ddZd Zd Zd Zy)	PyClassScoper   FNc
                     | j                  |      }|t        u rt        }t        j	                  | |||||||||	
      }
d|
_        d|
_        |
S )Nr  r   )r  r   r   r   r   r   r   r  s              r   r   zPyClassScope.declare_var=	  sf     --d3##!D!!$dC(-*&)&'^p " r  !r!   c                    | j                  |      }|r:|j                  | u r,|j                  s t        |d|z         |j	                          y | j                  |      }|t        |d|z         y || j                  |<   y r2  )rh  re   r   r   rX   r]  r   r3  s        r   r5  zPyClassScope.declare_nonlocalK	  sy    %%d+
***d2:;R;R#4t;<,,.KK%E}c?$FG &+T"r!   c                     | j                  |      rt        |dd       y | j                         j                  |      }|| j                  |<   y r.  r/  r  s       r   r  zPyClassScope.declare_globalZ	  r0  r!   c                 8    | j                   j                  |      S r2   )r   add_default_value)r5   rF   s     r   ry  zPyClassScope.add_default_valueb	  s    11$77r!   rB  )	r;   r<   r=   rD  r!  r   r5  r  ry  r?   r!   r   rt  rt  5	  s,    
 # ,5OS+'8r!   rt  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dZ	 	 dd	Zdd
Zd Z	 	 ddZddZddZddZ	 	 	 ddZd Zd fd	Z xZS )rn  r   Fc                    t         j                  | ||       |dk7  rJ|j                  t        j                  |      | _        |j                  t        j                  |      | _        g | _        g | _	        || _
        |j                  s|j                  r0|j                  r#| j                  j                  | _        d| _        y y y )Nr7  T)rf  r6   r  r   methtab_prefixr  gstab_prefixgetset_table_cnameproperty_entriesinherited_var_entriesr  r  r  rp  rV  r!  )r5   rE   r   r   r  s        r   r6   zCClassScope.__init__	  s    D$4!&1&8&89N9NPT&UD#&1&8&89L9Ld&SD# "%'"&
 ((K,I,I--#'#3#3#A#AD +/D( . -Jr!   c                    | j                   r| j                  j                  dd      sy| j                  j                  r| j                  j
                  sy| j                  j                  }|r&|j                  |j                  j                         S | j                  j
                  r| j                  j                   S y)Nno_gcFT)
has_cyclic_pyobject_attrsr  rR   r  is_externalr  ra  re   needs_gcis_gc_simple)r5   ra  s     r   r  zCClassScope.needs_gc	  s     ))$//2E2Egu2U''0@0@0P0P$$..	4??++----''4444r!   c                    | j                   j                  d      }|du ry|r| j                  ry| j                  j                  }|r&|j
                  |j
                  j                         S | j                  j                  S )NtrashcanFT)r  rR   r  r  ra  re   needs_trashcanbuiltin_trashcan)r5   	directivera  s      r   r  zCClassScope.needs_trashcan	  su     OO''
3	 77$$..	4??1133000r!   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  rR   r9   s    r   needs_tp_clearzCClassScope.needs_tp_clear	  s)    
 }}Pt':':=%'P#PPr!   c                    | }|r|j                  d      }|r|j                  ry|j                  j                  s"|j                  r|j                  j
                  ry|j                  j                  }|r|j                  nd}|ry)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)rh  r   r  r  r   multiple_basesra  re   )r5   current_type_scope	del_entrycurrent_base_types       r   may_have_finalizezCClassScope.may_have_finalize	  s     " *66yAIY11"..::BTB`B`&22AA 2 > > H H<M!2!8!8SW ! r!   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   rF   r  is_closure_class_scoperE   r  r   r   c_py_buffer_typerJ  )r5   include_weakrefinclude_gc_simplepy_attrs
py_buffersmemoryview_slicesrc   have_entriess           r   get_refcounted_entriesz"CClassScope.get_refcounted_entries	  s    
%% 	0Ezz%%"t'B'BejjTaFa(

0G0G .z:::!!%(..!((/	0  B:B1Bh
4EFFFr!   c
                 
   | j                  |      }|	r\d|	v r<d}|j                  s.|j                  st        |d|z         t        }n|j                  }d|	v r| j
                  st        |d       |rU| j                  rt        |d       | j                  s3t        | j                        j                  |      rt        |d|z         |s|}| j                  j                  sN| j                  j                  j                  s.| j                  j                  j                   dk(  st#        |      }t%        |t&        j(                        }| j+                  |||||      }
d	|
_        | j.                  j1                  |
       |	|
_        |j4                  r6|d
k7  r1| j                  d   r|
j7                          n|j9                  |       |j:                  rd| _        nv|j?                  |       rd| _         n]|j                  rQ| j                  s|dk7  r@d| _!        |jD                  r&|jF                  r|jF                  jI                         rd| _%        |dvrt        |d|z         |dv rRd|
_&        | j                  s|dk(  rt        |d       |j                  s |jO                  |       st        |d|z         |
S d|
_&        |
S |tP        u rt        }tR        jU                  | |||||||||	
      }
d	|
_+        d	|
_,        |
S )Nztyping.ClassVarr   zZClassVar[] requires the type to be a Python object type. Found '%s', using object instead.zdataclasses.InitVarzIUse of cython.dataclasses.InitVar does not make sense outside a dataclasszVC attributes cannot be added in implementation part of extension type defined in a pxdz/The name '%s' is reserved for a special method.rQ  r   r7  r  Tr   )rC   rQ  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  )-r  r  equivalent_typer   r   rM  r   r  r  r   r  get_special_method_signaturer  r  rc   r   r   r    r.   r   unicode_structmember_prefixrM  r   r   r   r   r{   r   r  rJ  has_memoryview_attrsneeds_explicit_construction"has_explicitly_constructable_attrshas_pyobject_attrsr  re   r  r  r   can_coerce_to_pyobjectr   r   r   r   r   r  s              r   r   zCClassScope.declare_var	  s    --d3 $66''//  &B  EI  &I  J-#33%);;DD]D]cfg||c78 //"4??3PPQUVcE  ((448H8H8N8N8R8R((..99XE-e4E'v/Q/QRLLudCDE !E##E*'9E$  Z8%;??<0++-2237&&,0)11$7:>7!!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*-fgbt & vE  EO !"ELr!   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        | j                        j                  |      }|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.r7  r  r   r   )r   rh  r   r   r   r   r  r  r  r   r   r   r   )r5   rE   rG   r  r  rc   special_sigs          r   r  zCClassScope.declare_pyfunction2
  s    **.cADHI]", K##A&#EIJK 9# R S  ~s,4 ! 6$T__5RRSWX *EO E0EO E""5)r!   c                     | j                   s|dk(  rt        d      }t        j                  | |      }|r9|j                  r-| j
                  j                  s| j
                  j                  sy |S )Nr  	__cinit__)r  r
   rf  rh  r   r  r  r  r  s      r   rh  zCClassScope.lookup_hereM
  sa    **ty/@ -D&&tT2U--##33 ''55r!   c           
      ~   | j                  |      }t        | j                        j                  |      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        t        |      t        j                        }|r|j                   s!t        |d|z         |j#                          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/                  |j0                        |_
        n|j3                  |j                  d      r|j,                  |j                  j,                  k(  ry| j4                  rU|sS|j7                  |j                  dd      s5t9        |d|d| j:                  dd       t9        |j<                  dd       | j?                  ||||d|	      }nbt        |d       t        |j<                  d       n?| j4                  rt        |d|d| j:                  d       | j?                  ||||||	      }|r%| jA                  t        jB                  |      |_        |
|_"        ||_#        d|	v rd|_$        | j                  jJ                  s'|jH                  s| j                  jM                  d      r<d|_        |j$                  |_'        |jP                  s|j                  |_)        ||_
        |S )Nz7Special methods must be declared with 'def', not 'cdef'zC method has no self argumentr   zSelf argument (z) of C method 'z' does not match parent type (r  r8  z'%s' already definedz'Overriding final methods is not allowedr   )
as_cmethod)r  as_pxd_definitionz'Compatible but non-identical C method 'z7' not redeclared in definition part of extension type 'z5'.  This may cause incorrect vtables to be generated.r   rW   r9  )r   r  z2Signature not compatible with previous declarationz
C method 'z@' not previously declared in definition part of extension type 'r  r  Tr  )*r  r   r  r  r  r  r   r<  r  assignable_fromrF   rh  r.   r    r   unicode_vtabentry_prefixr   rX   r   r   r   same_c_signature_asr  r  r  r;  r  !same_c_signature_as_resolved_typer   rk  rG   r  r  r  r}   rc   r   r  rR   r   ra   r   )r5   rE   rF   rG   r   r   r   r  rW  r  r}   r  r<  rc   s                 r   r  zCClassScope.declare_cfunction\
  s    --d34??+HHN((88#PQyy$$c:;%%55d1gllCcAw||T4+;+;= >  &=#$5d$;V=\=\]E%%c-45++- 0 0#5<=))e.@.@#HI--ejjq-Idjj\a\f\f\l\lNl!&!9!9$--!HEJ33EJJQ3OTXT^T^bgblblbrbrTrV$($J$J %

qA %K %O   !%doo7 9:	;
  		+I1M ..tT3RZfo.pE#ST%))%CD||c.2DOOEF &&tT3z9UE#{{6+=+=tDE)
y &*E#))U-D-DH[H[\cHd%)E"%*%5%5E"==$)JJ!!
r!   c           
      ~    | j                  |      }t        j                  | |||||||      }	d|	_        ||	_        |	S )Nr  r   )rh  rf  r  r   r   )
r5   rE   rF   rG   r   r   r  r  r   rc   s
             r   r  zCClassScope.add_cfunction
  sN    %%d+
(($c5*i9 ) V%r!   c                     t        |      }| j                  ||d |d|      }t        ||t              }||_        d|_        d|_        ||_        |j                  |_        ||_	        |S )Nr7  )rG   r   r   r}   r   )
r
   r  rA   r   r   r   r   r}   re   r   )r5   rE   rF   r   r}   rc   r  s          r   rj  z%CClassScope.declare_builtin_cfunction
  sx     T"&&$D(Q] ' _$n5	#'	  !	 	!-	++	%r!   c                    | j                  |      }|| j                  |||t        n||d      }d|_        |d|_        ||_        |t        ||       |_        n||_        | j                  j                  |       |S )NrC   T)class_scope)
rh  rM  r   r   r   r   PropertyScopere   r  r   )r5   rE   r   rG   ctypeproperty_scoperc   s          r   declare_propertyzCClassScope.declare_property
  s      &=LLtu}^RWY\^ghE !%E	!'$?EK(EK$$U+r!   c                     | j                  ||||      }|j                  j                  |t        j                  |t        j
                  d| j                  d      g|||	|
      ||||      }||fS )zPInternal convenience method to declare a C property function in one go.
        )r   r  rG   r5   Nr   )r  r  r  r  )rE   rF   r   r}   r   rG   )r  re   r  r   r  r  r  )r5   rE   rF   
cfunc_namer   rG   r   r  r  r  r  r}   property_entryr  s                 r   declare_cpropertyzCClassScope.declare_cproperty
  s    
 ..tDc.R$**<<%%((1A1AtLM! / / %! = 
 {**r!   c           
         fd}|j                   |j                  z   }|D ]u  | j                  j                   |j                        j
                  d d      }d|_        d|_        j                  |_        | j                   j                  |       w |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|_        ||_        j0                  sj0                  |_         y )Nc                 B    t         j                  dj                  S rO  )r   r  r   )r   
base_entrys    r   adaptz9CClassScope.declare_inherited_c_attributes.<locals>.adapt
  s    $33Z5E5EFFr!   rC   r   Tr  )r  r   rM  rE   r   rF   r   r   r   r   r   ra   rb   r   r   r  rG   r   r   r   r   r   r   r   r}   )	r5   
base_scoper  r   rc   r   r  r   r  s	           @r   r  z*CClassScope.declare_inherited_c_attributes
  s   	G 22Z5K5KK! 	5JLLz'7'7!8y2E !"E!%E)44E&&--e4	5 %2215 	EJ''BBD	E %22 	=J$$E"..I";y';';Je&&*..%%%z'@'@D ' RE "#E**)-&*4*F*F'%%)@)@@//-7-H-HE*+/($-!&&%/%<%<")	=r!   c                 .    t         |   ||||||       y r2   )superrB  )r5   rE   r   rF   rG   r   r>  r  s          r   rB  z(CClassScope.handle_already_declared_name  s    ,T5$ZQ[\r!   )FTrB  rA  rC  r2   r   )NNr7  FFNFN)T)r;   r<   r=   rE  r  r  r  r  r  r  r  r   r6   r  r  r  r  r  r   r  rh  r  r  rj  r  r  r  rB  __classcell__r  s   @r   rn  rn  f	  s    $ "# ).& %GK0"1 Q& 6;15G( ,5OSPd6  KLSXBH X`]b'++.,=^] ]r!   rn  c                   \     e Zd ZdZdZdZd
dZ	 	 ddZ	 	 ddZd Z	d Z
 fdZd	 Z xZS )CppClassScoper   Nc                     t         j                  | ||d        |j                  | _        g | _        |7|D ]1  }| j	                  ||t        j                  |      d d      }d|_        3 y y )Nr7  r   )r   r6   r  r  rM  r   TemplatePlaceholderTyper   )r5   rE   r   rr  Ttemplate_entrys         r   r6   zCppClassScope.__init__  sp    tT;5%00%'"  +!%q*<<Q?x"Q)*&+ !r!   c                    |s|}| j                  ||
       | j                  |      }|	rw|u|j                  r| j                  |||||      }n}|j                  j                  |      r+|j                  j                  |j                        |_        n7t        |d       n*| j                  |||||      }|j                  r	|	sd|_	        d|_
        |j                  rQd|_        | j                  r>| j                  j                         s$| j                  j                         d||_        |dk7  r"|	s|dk7  r| j                  j                  |       |S )Nr  r   ::ry  r6  )r  rh  r   rM  rF   r  r  r  r   r   r   get_fused_typesempty_declaration_coder   r   r   )r5   rE   rF   rG   r   r   r   r  r  rW  r   rc   s               r   r   zCppClassScope.declare_var#  s'    E''-?@  &)  T5$ZH##D)"ZZ55dmmD
cSTLLudCDE  %&"!"Eyy!:!:!</3yy/O/O/QSX#Y 6>x48+;##E*r!   c                    | j                   j                  d      d   }||dfv ru|st        j                  d|}t	        d      }t        j                         |_        |j                  |_	        d }|j                  D cg c]
  } ||       c}|_        n@|dk(  r;|9t        j                  d|}t	        d      }t        j                         |_        |dv r~|j                  rr| j                  j                  D ]Y  }|j                  j                  |      }|s!|j                  j                  r8t        |d	       t        |j                   d
       [ | j#                  ||||||      }|
|_        ||_        |S c c}w )Nr  rD  r6   r6  c                     | j                   j                  r^| j                   j                  sHt        j                  | j
                  t        j                  | j                         | j                        S | S r2   )rF   r{   is_referencer   r  rE   
c_ref_typerG   )r	  s    r   	maybe_refz2CppClassScope.declare_cfunction.<locals>.maybe_refK  sU    88((1F1F%22*"7"7"A377L L Jr!   __dealloc__<del>r6  r  zdConstructor cannot be called without GIL unless all base constructors can also be called without GILzBase constructor defined here.)rW  r   r   )rE   r  r   r  r
   r   	CVoidTyper  r<  original_argsr  rF   ru  re   r]  r   rG   r   r}   rc   )r5   rE   rF   rG   r   r   r   r  rW  r  r}   r  rk  r  r	  baser  rc   s                     r   r  zCppClassScope.declare_cfunction@  sk    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   tS*2', ! E *
# >s   Fc                 N   |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                  rd|_        |j                  |_        | j
                  j                  |        |j                   D ]h  }| j#                  |j                  |j                  |j$                  |j                  |j&                  d|j(                  |j*                        }d|_        j |j,                  D ]a  }|j                  |vs| j/                  |j                  |j                  |j$                  |j                  |j&                  d	
      }d|_        c y c c}w )Ntemplate_typerr  r?   r  r7  r   r   )r   r  r}   F)rW  )re   r   r  rr  rE   r  r   r   rM  r   rF   r   r   r   r   r   r   r  rG   r   r   r}   r   rY  )r5   rw  r  r  r  base_templatesr  rc   s           r   rv  z.CppClassScope.declare_inherited_cpp_attributesd  s   %%
"m_d;)77M m_d;=+t4.;.E.EFaffFNFN %::Z=S=SS 	5J"55$,,.LL*2B2Bx1E !E!"E&&%&"#-#8#8 &&--e4	5 %22 	#J**:??JOO+5>>:;K;K+5+@+@a5?5N5N8B8O8O	 + QE
 "#E	# %11 	'Jn4))*//:??*4..*:J:J*4*?*?% * Q &'"	'9 Gs   H"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   )rX  )r}   )r  rE   r   rF   r   r8  r   rY  r  rG   r   r   r\   r  r}   r   r   )r5   r8  
type_entryre   rc   r  s         r   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* r!   c                 H    |dk(  rd}n|dk(  rd}t         t        |   |      S )Nr6   r6  r  r  )r  r  rh  )r5   rE   r  s     r   rh  zCppClassScope.lookup_here  s/    :D]"D]D5d;;r!   c                      yr7  r?   r9   s    r   r:  zCppClassScope.is_cpp  s     r!   r2   )Nr7  FFFFN)Nr7  r   r   r   r?   NF)r;   r<   r=   r\  default_constructorrF   r6   r   r  rv  r  rh  r:  r  r  s   @r   r  r    sM     D+ ,4_c< JKSX"H''R4<r!   r  c                       e Zd Zd Z	 ddZy)CppScopedEnumScopec                 4    t         j                  | ||d        y r2   r$  rn  s      r   r6   zCppScopedEnumScope.__init__  s    tT;5r!   Nc                 j    |s|}| j                  ||       | j                  |||||      }d|_        |S r7  )r  rM  r   )r5   rE   rF   rG   r   r   r   rc   s           r   r   zCppScopedEnumScope.declare_var  s@     E''-?@T5$Z@ r!   )Nr7  N)r;   r<   r=   r6   r   r?   r!   r   r  r    s    6 IMr!   r  c                   $    e Zd ZdZd Zd ZddZy)r  r   c                     |j                   r|j                         nd }t        j                  | |||       |j                  | _        |j
                  | _        y )Nr  )r   r   r   r6   r  r  )r5   rE   r  r   s       r   r6   zPropertyScope.__init__  sJ    4?4K4Kk..0QUtT;[I&22%00r!   c                 >   |j                   j                  rt        |d       |j                  rH|j                  d   j                  t
        u r)| j                  j                  |j                  d   _        nt        |j                        dk7  rt        |d       n^|j                  d   j                  j                  s;|j                  d   j                  | j                  j                  u st        |d       t        j                  | |||g|i |}d|_        |S )z'Declare a C property function.
        z&C property method cannot return 'void'r   r   z4C property method must have a single (self) argumentz6C property method must have a single (object) argumentT)r  r  r   r<  rF   r   r   r  rv   r  r   r  r   )r5   rE   rF   rG   r<  kwargsrc   s          r   r  zPropertyScope.declare_cfunction  s     ###?@991**n< $ 1 1 = =DIIaL^q #MN))A,##//499Q<3D3DHYHYHeHe3e#OP''dD#OOO!r!   c                     t        |      }|r)| j                  ||t        |d      }d|_        ||_        |S t        |d       y )NrC   r   zKOnly __get__, __set__ and __del__ methods allowed in a property declaration)r   rM  r   r   r  r   )r5   rE   rG   r  r  rc   s         r   r  z PropertyScope.declare_pyfunction  sK    3D9	LLt^S)LE E'EOL# , -r!   NrA  )r;   r<   r=   rL  r6   r  r  r?   r!   r   r  r    s     1$r!   r  c                       e Zd ZddZd Zy)CConstOrVolatileScopec                     t         j                  | d|j                  z   |j                  |j                         || _        || _        || _        y )Ncv_)r   r6   rE   r   r   base_type_scoper   is_volatile)r5   r  r   r  s       r   r6   zCConstOrVolatileScope.__init__  sJ    O(((''((		*
  / &r!   c                     | j                   j                  |      }|Qt        j                  |      }t        j                  |j
                  | j                  | j                        |_        |S y r2   )r  rh  r=  r   c_const_or_volatile_typerF   r   r  r  s      r   rh  z!CConstOrVolatileScope.lookup_here   s^    $$006IIe$E#<<JJt/?/?AEJL	 r!   N)r   r   )r;   r<   r=   r6   rh  r?   r!   r   r  r    s    'r!   r  c                       e Zd Zd Zy)TemplateScopec                 V    t         j                  | ||d        |j                  | _        y r2   )r   r6   r  rn  s      r   r6   zTemplateScope.__init__
  s!    tT;5%00r!   N)r;   r<   r=   r6   r?   r!   r   r  r  	  s    1r!   r  r2   )2rG  r=  r.  mathUtilsr   Errorsr   r   r   r	   StringEncodingr
   rB   r   r   r   r   r   	TypeSlotsr   r   r   r   r   r   r   r    r.   r0   rA   r   r   rQ  rX  const_counterry  rF  rD  rQ  rY  r  rf  rt  rn  r  r  r  r  r  r?   r!   r   <module>r     sX   
    . C C )   85 5  *0 0s^ s^l!1 !1HM M`U _5 _D _
0% _
0Dj2 j2ZD DN1: 10| "'D 'DT+ +\.8: .8bi]* i]V`E `F ",E ,^E *1E 1r!   