
    Ae
                    d
   d dl mZ d dlZ ej                  di dedededededed	ed
ededededededededededededededededej
                  dej
                  de d dlmZ d dl	Z	d dl
Z
d dlmZmZ d dlmZmZ d d!lmZmZmZ d d"lmZ d d#lmZ d d$lm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% d d,lm&Z& e
jN                  d    d-k\  Z(e
jR                  d.k(  Z*d/Z+ G d0 d1e      Z,dd2Z-d3 Z.d4 Z/d5 Z0dd6Z1d7 Z2d8 Z3d9 Z4d: Z5d; Z6d< Z7d= Z8d> Z9d? Z:d@ Z;dA Z<dB Z= ej                  e> e>g dC            Z?dD Z@dE ZAdF ZBdG ZCdH ZDdI ZEdJ ZFdK ZGdL ZHdM ZIdN ZJdO ZKdP ZLdQ ZMdR ZNdS ZOddTZPdU ZQdV ZRdW ZSdX ZTdY ZUdZ ZVd[ ZWd\ ZXdd]ZYd^ ZZd_ Z[d` Z\da Z]db Z^ddcZ_dd Z`ddeZadf ZbdgD  cg c]7  }  e	j                  dh| rdindjz   dkz   j                  dl            j                  9 c} \  ZfZgdm Zhdn Zido Zjdp Zkdq Zldr Zmds Zndt Zodu ZpddvZqddwZrdx Zsdy Ztdz Zud{ Zv ej                  e> e>g d|            Zwd} Zxd~ Zyd Zzd Z{d Z|d Z}ddZ~d Zd Zd Zd Zd ZddZ ej                  e> e>g d            Zd Zd Zd Zd Z ej                  e> e>g d            Zd Zd Zd Zd ZddZdgdZd Zd Z ej                  e> e>g d            Zd Zd ZdgdZd Zd Zd Zd ZddZd ZddZddZd Zd Zd ZddZddZ e,       fdZddZddZddZd Z ej                  e> e>g d            ZddZddZd Zd Zd Zd Zd Zd Zd Zd Zd Z ej                  e> e>g d            Z ej                  eddddddddd      Z ej                  e> e>g d            Z ej                  e>eez   e>e      z        Z ej                  e> e>g d            Zd Zd Z e,       d d d d d d fdÄZdĄ Zdń Z ej                  e> e>g dƢ            ZdǄ ZdȄ ZdɄ Zdʄ Z ej                  e> e>g dˢ            Z e,       d d d d d fd̄Zd̈́ Z	 	 dd΄Zdτ ZdЄ Zdф Zd҄ Zdӄ ZdԄ ZdՄ Zdք Zdׄ Zd؄ Zdل Zdڄ Zdۄ Zd܄ Zd݄ Zdބ Zdd߄ZddZddZd Zd Zd Zd Zd Zd Zd Zde,fdZ ej                  e e	j                  d      j                        Zd Ze,fdZd Zd Zd ZddZyc c} w )    )absolute_importNNodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharunicode_categoryFutureOptionserrorwarningBuiltin
ModuleNodeUtils_unicode_bytesresys_parse_escape_sequences_parse_escape_sequences_rawpartialreduce_IS_PY3_IS_2BYTE_UNICODE_CDEF_MODIFIERS)StringIO)lookupcategory)r   r      )PyrexScannerr	   StringSourceDescriptor)r   )r   )r   )r   )r   r   r   r   )r   )r   r      )r   )r   )r      i  )inlinenogilapic                   @    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y)Ctxotherprivater   NFc                 :    | j                   j                  |       y N)__dict__update)selfkwdss     7lib/python3.12/site-packages/Cython/Compiler/Parsing.py__init__zCtx.__init__7   s    T"    c                     t               }|j                  }|j                  | j                         |j                  |       |S r.   )r*   r/   r0   )r1   r2   ctxds       r3   __call__zCtx.__call__:   s2    eLL		
r5   )__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr(   overridabler'   	namespace	templatesallow_struct_enum_decoratorr4   r9    r5   r3   r*   r*   *   s?    EJIL
CKEII"'#r5   r*   c                     | j                   dk(  r| j                  }| j                          |S | j                  |       y NIDENT)sysystringnextr   )smessagenames      r3   p_identrO   B   s0    ttwzz		r5   c                     g }| j                   dk(  r]|j                  | j                         | j                          | j                   dk7  r	 |S | j                          | j                   dk(  r]|S )NrH   ,)rI   appendrJ   rK   )rL   namess     r3   p_ident_listrT   J   s]    E
$$'/QZZ 	443;L 	
 $$'/ Lr5   c                 b    | j                         }| j                  }| j                          ||fS r.   )positionrI   rK   )rL   posops      r3   p_binop_operatorrY   Z   s(    
**,C	
BFFHs7Nr5   c                      ||       }| j                   |v rwt        |       \  }} ||       }t        j                  ||||      }|dk(  r5t        j
                  | j                  j                  v rd|_        nd |_        | j                   |v rw|S )N/T)	rI   rY   r   
binop_noder   divisioncontextfuture_directivestruedivision)rL   ops
p_sub_exprn1rX   rW   n2s          r3   p_binop_exprre   `   s    	AB
$$#+"1%C]!!#r2r29!))"="=="&"& $$#+ Ir5   c                    | j                         }| j                          | j                  dk(  rg }d x}}nt        | dd      \  }}}| j	                  d       |rt        |       }nt        |       }t        j                  |||||      S )N:F)
terminator	annotated)argsstar_argstarstar_argresult_expr)	rV   rK   rI   p_varargslistexpectp_testp_test_nocondr   
LambdaNode)rL   allow_conditionalrW   rj   rk   rl   exprs          r3   	p_lambdefru   o   s    
**,CFFHtts{"&&<'4#(0$hHHSMayQDL r5   c                     t        | d      S )NF)rs   )ru   rL   s    r3   p_lambdef_nocondrx      s    Q%00r5   c                 .   | j                   dk(  rt        |       S | j                         }t        |       }| j                   dk(  rP| j	                          t        |       }| j                  d       t        |       }t        j                  ||||      S |S )Nlambdaifelse)testtrue_val	false_val)	rI   ru   rV   	p_or_testrK   ro   rp   r   CondExprNode)rL   rW   rt   r}   r+   s        r3   rp   rp      sz    ttx|
**,CQ<Dttt|	|	q	%%ctuUUr5   c                 L    | j                   dk(  rt        |       S t        |       S )Nrz   )rI   rx   r   rw   s    r3   rq   rq      s#    ttx""|r5   c                 $    t        | dt              S )N)or)p_rassoc_binop_expr
p_and_testrw   s    r3   r   r      s    q':66r5   c                      ||       }| j                   |v rQ| j                         }| j                   }| j                          t        | ||      }t	        j
                  ||||      }|S r.   )rI   rV   rK   r   r   r\   )rL   ra   	p_subexprrc   rW   rX   rd   s          r3   r   r      s\    	1Btts{jjlTT	 C3!!#r2r2Ir5   c                 $    t        | dt              S )N)and)r   
p_not_testrw   s    r3   r   r      s    q(J77r5   c                     | j                   dk(  r@| j                         }| j                          t        j                  |t        |             S t        |       S )Nnotoperand)rI   rV   rK   r   NotNoder   p_comparisonrL   rW   s     r3   r   r      sB    ttu}jjl	  
1>>Ar5   c                    t        |       }| j                  t        v ra| j                         }t	        |       }t        |       }t        j                  ||||      }| j                  t        v rt        |       |_        |S )N)operatoroperand1operand2)	p_starred_exprrI   comparison_opsrV   p_cmp_opr   PrimaryCmpNodep_cascaded_cmpcascade)rL   rc   rW   rX   rd   s        r3   r   r      sl    		Btt~jjla[A%%cbR944>!'*BJIr5   c                 L    | j                   dk(  rt        |       S t        |       S )N*)rI   r   rp   rw   s    r3   p_test_or_starred_exprr      s"    tts{a  ayr5   c                     | j                         }| j                  dk(  rd}| j                          nd}t        |       }|rt	        j
                  ||      }|S )Nr   TF)rV   rI   rK   
p_bit_exprr   StarredUnpackingNode)rL   rW   starredrt   s       r3   r   r      sN    
**,Ctts{	a=D--c48Kr5   c                     | j                         }t        |       }t        |       }t        j                  |||      }| j
                  t        v rt        |       |_        |S )N)r   r   )	rV   r   r   r   CascadedCmpNoderI   r   r   r   )rL   rW   rX   rd   results        r3   r   r      sT    
**,C	!B		B&&s"&Ftt~'*Mr5   c                 :   | j                   dk(  r$| j                          | j                  d       d}n`| j                   dk(  r5| j                          | j                   dk(  r| j                          d}nd}n| j                   }| j                          |dk(  rd}|S )Nr   innot_inisis_not<>!=)rI   rK   ro   rL   rX   s     r3   r   r      s{    ttu}			
	445=FFHBBTT		TzIr5   )
<>==>=<=r   r   r   r   r   c                 $    t        | dt              S )N)|)re   
p_xor_exprrw   s    r3   r   r         6:..r5   c                 $    t        | dt              S )N)^)re   
p_and_exprrw   s    r3   r   r   	  r   r5   c                 $    t        | dt              S )N)&)re   p_shift_exprrw   s    r3   r   r     s    6<00r5   c                 $    t        | dt              S )N)<<>>)re   p_arith_exprrw   s    r3   r   r     s    <66r5   c                 $    t        | dt              S )N)+-)re   p_termrw   s    r3   r   r     s    :v..r5   c                 $    t        | dt              S )N)r   @r[   %z//)re   p_factorrw   s    r3   r   r     s    5x@@r5   c                     t        |       S r.   )	_p_factorrw   s    r3   r   r   "  s    Q<r5   c                    | j                   }|dv rL| j                   }| j                         }| j                          t        j                  ||t        |             S | j                  sv|dk(  rB| j                         }| j                          t        |       }t        j                  ||      S |dk(  rt        |       S |dk(  r| j                  dk(  rt        |       S t        |       S )N)r   r   ~r   r   r   rH   sizeof)rI   rV   rK   r   	unop_noder   in_python_fileAmpersandNode
p_typecastrJ   p_sizeofp_power)rL   rI   rX   rW   args        r3   r   r   &  s    	
B	_TTjjl	""3HQK889**,CFFH1+C**3#>>3Ya= 7]qzzX5A;1:r5   c                 <   | j                         }| j                          t        |       }t        |t        j
                        }t        |t        j                        }t        |t        j                        }|s!|s|s|j                  | j                  d       t        | d      }| j                  dk(  r| j                          d}nd}| j                  d       t        |       }|rt        j                  |||      S t        j                   |||||      S )	NzUnknown typer!   empty?r   r   )base_type_noder   )	base_type
declaratorr   	typecheck)rV   rK   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstTypeNoderN   r   p_c_declaratorrI   ro   r   r   CythonArrayNodeTypecastNode)	rL   rW   r   is_memsliceis_templateis_constr   r   r   s	            r3   r   r   9  s    
**,CFFHa IY(E(EFKY(?(?@K)U%9%9:HHNN"	1-Jtts{			HHSMqkG((Y18: 	: !!#	 r5   c                 F   | j                         }| j                          | j                  d       t        |       r#t	        |       }t        j                  ||      }n0t        |       }t        | d      }t        j                  |||      }| j                  d       |S )N(r   r!   r   r   r   ))
rV   rK   ro   looking_at_exprrp   r   SizeofVarNoder   r   SizeofTypeNode)rL   rW   r   noder   r   s         r3   r   r   V  s    
**,CFFHHHSM q)&&sg>!!$	#Aq1
''!
<HHSMKr5   c                    | j                         }| j                          d}| j                  dk(  rd}| j                          | j                  dk7  r+| j                  t        vr|rt	        |       n
t        |       }n|r| j                  d|d       d }|rt        j                  ||      S t        j                  ||      S )NFfromTr   z''yield from' requires a source argumentrW   fatalr   )
rV   rK   rI   statement_terminatorsrp   
p_testlistr   r   YieldFromExprNodeYieldExprNode)rL   rW   is_yield_fromr   s       r3   p_yield_expressionr   j  s    
**,CFFHMttv~	tts{qtt#88(fQijmGG=5  ***3C88&&s44r5   c                 Z    t        |       }t        j                  |j                  |      S )Nrt   )r   r   ExprStatNoderW   )rL   
yield_exprs     r3   p_yield_statementr     s#    #A&Jjnn:>>r5   c                 x   | j                   dk(  r>d|j                  v r| j                  d       |j                  | _        t        | |d      S |r| j                  d       y | j                   dk(  rt	        | d      S | j                   d	k(  r| j                          t        | d      S | j                  d
       y )Ndefpxddef statement not allowed hereT)is_async_def7Decorators can only be followed by functions or classesforis_asyncwithz2expected one of 'def', 'for', 'with' after 'async')rI   r=   r   p_def_statementp_for_statementrK   p_with_items)rL   r7   
decoratorss      r3   p_async_statementr    s    ttu}CIIGG45))q*4@@		IJ	
q400	
	A--	DEr5   c                    | j                   dk(  r!| j                         d   dk(  rt        |       S d }| j                  dk(  r | j	                         }| j                          t        |       }| j                  dv rt        | |      }| j                  dv r|rt        j                  ||      }| j                  dk(  rC| j	                         }| j                          t        |       }t        j                  |d||      }|S )Nnewr   rH   await)r   [.r   **)rJ   peek
p_new_exprrI   rV   rK   p_atom	p_trailerr   AwaitExprNoder   r\   )rL   	await_posrc   rW   rd   s        r3   r   r     s    zzUqvvx{g5!}IttwJJL			B
$$/
!q" $$/
!$$YB7ttt|jjl	a[!!#tR4Ir5   c                     | j                         }| j                          t        |       }t        | t	        j
                  ||            S )N)cppclass)rV   rK   r   p_callr   NewExprNode)rL   rW   r  s      r3   r  r    s:    
**,CFFHQH!Y**38DEEr5   c                     | j                         }| j                  dk(  rt        | |      S | j                  dk(  rt        | |      S | j	                          t        |       }t        j                  |||      S )Nr   r  )obj	attribute)rV   rI   r  p_indexrK   rO   r   AttributeNode)rL   node1rW   rN   s       r3   r  r    si    
**,Ctts{a	
q%  	qz&&s' 	'r5   c                    | j                         }| j                          g }g }d}d}| j                  dk7  r| j                  dk(  rQ|r!| j                  d| j                                | j                          |j	                  t        |              d}nA| j                  dk(  r.| j                          |j	                  t        |              d}nt        |       }| j                  dk(  r| j                          |j                  s| j                  d	|j                         | j                  j                  |j                        }t        j                  |j                  |
      }	t        |       }|j	                  |	|f       nL|r| j                  d|j                         |r|s|d   j	                  |       n|j	                  |g       d}| j                  dk7  rn!| j                          | j                  dk7  r| j                  dv r7|s5|s3t        |      dk(  r%t        |d         dk(  rt        | |d   d         gg}| j                  d       |xs g g|fS )NFr   r   %Non-keyword arg following keyword argrW   Tr  =z!Expected an identifier before '='valuerQ   r  asyncr!   r   )rV   rK   rI   r   rR   rp   is_namerW   r^   intern_ustringrN   r   IdentifierStringNodelenp_genexpro   )
rL   allow_genexprW   positional_argskeyword_argsstarstar_seenlast_was_tuple_unpackr   encoded_namekeywords
             r3   p_call_parse_argsr;    s   
**,CFFHOLM!
$$#+443;?QZZ\RFFH""6!9-$(!TTT\FFHq	* M)Ctts{{{GG? #  ) yy77A#88GG<1Qi##WcN3GGCGQ"+@#B'..s3#**C51(-%443;	C $$#+F 	tt$9?#q(S1C-D-I$,Q0B10E$F#G"HHHSM"rdL00r5   c                 n   d }|D cg c]@  }t        |t              rt        j                  | |      nt        j                  | |      B }}t        t        t        j                  | d      |      }|r8g }g }|D ]  }	t        |	t              r7|	\  }
}|j                  t        j                  |
j                  |
|             J|	j                  r|j                  |	j                         r|r6|j                  t        j                  |d   j                  |d             g }|j                  |	        |r4|j                  t        j                  |d   j                  |d             |r=t!        |      dk(  r|d   j                  r	|d   }||fS t        j"                  | |	      }||fS c c}w )
Nrj   r   r   rW   keyr+  r   T)key_value_pairsreject_duplicatesr!   )r6  )r   listr   	TupleNodeAsTupleNoder   r   r\   tuplerR   DictItemNoderW   is_dict_literalextendr@  DictNoder2  MergedDictNode)rW   r5  r6  keyword_dictr   	subtuples	arg_tuplekwargs
dict_itemsitemr?  r+  s               r3   p_call_build_packed_argsrQ    s   L # /9d.C	Cc*I^I^_bhkIllI 
 wy33S#>	JI
  	$D$&!
U!!)"8"8SWW#UZ"[\%%!!$"6"67MM)"4"4"1)):Y]#_ `!#Jd#	$ MM),,1!!:QUW X 6{aF1I$=$=%ay
 l""  )77&Ql""Is   AF2c                    | j                         }t        |       \  }}|s<t        |      dk(  r.t        |d   t              rt        j                  |||d         S t        |||      \  }}t        j                  ||||      S )Nr!   r   )functionrj   )rS  r5  r6  )	rV   r;  r2  r   rB  r   SimpleCallNoderQ  GeneralCallNode)rL   rS  rW   r5  r6  rM  rK  s          r3   r  r  ,  s    
**,C$5a$8!O\C0A5*_UVEWY]:^''h_UVEWXX":3Q]"^	<(((ILZ 	Zr5   c                 t   | j                         }| j                          t        |       \  }}|r3t        |d         dk(  r"|d   \  }}t	        j
                  ||||      }nCt        ||      }|r|d   }	nt	        j                  ||      }	t	        j                  |||	      }| j                  d       |S )Nr   r$   )basestartstopr=  rW  index])
rV   rK   p_subscript_listr2  r   SliceIndexNodemake_slice_nodesrC  	IndexNodero   )
rL   rW  rW   
subscriptsis_single_valuerX  rY  r   indexesr[  s
             r3   r#  r#  =  s    
**,CFFH"21"5J3z!}-2 mt))#t5 #3
3AJE''G<E$$S(HHSMMr5   c                     d}t        |       g}| j                  dk(  rPd}| j                          | j                  dk(  r	 ||fS |j                  t        |              | j                  dk(  rP||fS )NTrQ   Fr\  )p_subscriptrI   rK   rR   )rL   rb  itemss      r3   r]  r]  Q  sq    O^E
$$#+	443;/!! 	[^$ $$#+ /!!r5   c                     | j                         }t        | d      }| j                  dk7  r|gS | j                          t        | d      }| j                  dk7  r||gS | j                          t        | d      }|||gS )N)rg   rg   )rg   rQ   r\  )rV   p_slice_elementrI   rK   )rL   rW   rX  rY  steps        r3   re  re  ^  sy     **,CAv&Etts{wFFH1o.Dtts{t}FFH1o.D4r5   c                 6    | j                   |vrt        |       S y r.   )rI   rp   )rL   
follow_sets     r3   rh  rh  n  s     	tt:ayr5   c                 j    | j                  d       | j                  d       | j                  d       y Nr  )ro   rw   s    r3   expect_ellipsisrn  v  s#    HHSMHHSMHHSMr5   c                     g }|D ]@  }t        |      dk(  r|j                  |d          &|j                  t        | g|        B |S )Nr!   r   )r2  rR   make_slice_node)rW   ra  r   	subscripts       r3   r_  r_  {  sQ    
 F <	y>QMM)A,'MM/#:	:;	<
 Mr5   c                     |st        j                  |       }|st        j                  |       }|st        j                  |       }t        j                  | |||      S )N)rX  rY  ri  )r   NoneNode	SliceNode)rW   rX  rY  ri  s       r3   rp  rp    sW    ""3'!!#&!!#&sd41 1r5   c                    | j                         }| j                  }|dk(  rp| j                          | j                  dk(  rt        j                  |g       }n&| j                  dk(  rt        |       }nt        |       }| j                  d       |S |dk(  rt        |       S |dk(  rt        |       S |dk(  rt        |       S |dk(  r t        |        t        j                  |      S |d	k(  rt        |       S |d
k(  r3| j                  }| j                          t        j                  ||      S |dk(  r6| j                  d d }| j                          t        j                   ||      S |dk(  rt#        |       \  }}}|dk(  rt        j$                  ||      S |dk(  rt        j&                  |||      S |dk(  rt        j(                  ||      S |dk(  rt        j*                  ||      S |dk(  rt        j,                  |||      S | j/                  d|z         y |dk(  r| j                  }|dk(  rt        j0                  |      }nm|dk(  rt        j2                  |d      }nP|dk(  rt        j2                  |d      }n3|dk(  r"| j4                  st        j6                  |      }nt9        | |      }| j                          |S | j/                  d       y ) Nr   r   r=  yieldr  {`r  INTFLOATr*  IMAGr,  BEGIN_STRINGcu)r+  bytes_valuebfvalues )r+  unicode_valuezinvalid string kind '%s'rH   NoneTrueTFalseFNULLz!Expected an identifier or literal)rV   rI   rK   r   rC  r   p_testlist_compro   p_list_makerp_dict_or_set_makerp_backquote_exprrn  EllipsisNodep_int_literalrJ   	FloatNodeImagNodep_cat_string_literalCharNodeUnicodeNode	BytesNodeJoinedStrNode
StringNoder   rs  BoolNoder   NullNodep_name)	rL   rW   rI   r   r+  kindr  r  rN   s	            r3   r  r    s   
**,C	
B	Sy	443;((R8FTTW_'*F$Q'F		sA	s"1%%	s""	s%%c**	uQ	w

	""366	v

3B	!!#u55	~	+?+B(k=3;%%c;??S[((mS^__S[&&sK@@S[**3GGRZ''[R_``GG.56	wzz6>'',FV^''48FW_''59FV^A$4$4'',FAt_F		34r5   c                 l   | j                         }| j                  }| j                          d}d}|d   dv r|d   dv r|dz  }n|dz  }|d d }|d   dv rd }|rd}n"|r |dk(  s| j                  j                  d	k\  rd}| j
                  r|rt        |d
       d}t        j                  |||||      S )Nr  r,  UuLlLlLUTLLr%   z4illegal integer literal syntax in Python source fileF)is_c_literalr+  unsignedlongness)	rV   rJ   rK   r^   language_levelr   r   r   IntNode)rL   rW   r+  r  r  r  s         r3   r  r    s    
**,CJJEFFHHH
)w
9OHOHcr
 )w
 L	tqyy771<L#MNS,8%*(0(0	2 2r5   c                     | j                         }| j                  s9|| j                  v r+| j                  j                  |      }t	        ||      }||S t        j                  ||      S )NrN   )rV   compile_time_exprcompile_time_envlookup_herewrap_compile_time_constantr   NameNode)rL   rN   rW   r+  r   s        r3   r  r    sc    
**,C41+=+=#=""..t4)#u5Kc--r5   c           
         t        |      }|t        j                  |       S |t        u rt        j                  |       S t        |t              rt        j                  | |      S t        |t              rt        j                  | ||      S t        |t              rt        j                  | ||      S t        |t              rt        j                  | t        |j                        t        d|j                              }|j                  rMt        j                   | dt        j                  | t        |j                        |j                        ||      }|S t        |t"              r t        j$                  | t'        |            S t        |t(              r$t+        |d      }t        j,                  | ||      S t        |t.              r5|D cg c]  }t1        | |       }}d |vrt        j2                  | |      S y t4        s7t        |t6              r't        j                  | |j9                  d      |      S t;        | d	|d
|j<                  j>                  d       y c c}w )Nr*  )r+  constant_resultg        r   )r  asciir=  r  z(Invalid type for compile-time constant: z (type r   ) reprr   rs  Ellipsisr  r   boolr  intr  floatr  complexr  imagrealr\   r   r  r   r   r   r  rE  r  rC  r   longrstripr   	__class__r:   )rW   r+  repr   bvaluer   rj   s          r3   r  r    s   
u+C}!!#&&	(	%%c**	E4	 !!#U33	E3	  CGG	E5	!""3c5II	E7	#!!#T%**-=wWZ\a\f\fOgh:: ''S)--cejj9I[`[e[efhl %'D 	E8	$$$Se0DEE	E6	"ug.""3feLL	E5	! " +34 " "t&&s66 E40  CJJsOUSS	#113 4"s   I/c           	         | j                         }t        |       \  }}}|dk(  s| j                  dk7  r|||fS |g|g|g}}}d x}}| j                  dk(  r| j                         }t        |       \  }}	}
|dk(  rt        |d       @||k7  r>t	        ||g      t	        ddg      t	        ddg      fv rd}nt        |d|d|d	       |j                  |	       |j                  |
       |j                  |       | j                  dk(  r|d
v s	|dk(  r-d |vr)t        t        j                  |      | j                        }|dv r+t        dj                  |D cg c]  }||	 c}            }|dk(  r[g }t        ||      D ]J  \  }}t        |t              r||z  }|j                  t        j                   |t        |                   L |||fS c c}w )Nr}  r|  zCCannot concatenate char literal with another string or char literalr  r~  r  z8Cannot mix string literals of different types, expected z'', got z'')r  r}  r  r~  r  r*  )rV   p_string_literalrI   r   setrR   r   r   
join_bytessource_encodingr   joinzipr   rB  r   r  )rL   rW   r  r  r  bstringsustrings	positions	next_kindnext_bytes_valuenext_unicode_valuer~  s               r3   r  r  &  s    **,C'7':$D+}s{addn,[-//%0MM?SE	hH"&&K-
$$.
 jjl:J1:M7	#%7#\]$D)$%#sCj/3Ry>)JJc)% &()*+! $$.
 $ ~X1E#N$=$=h$GIZIZ[y%chh8/Uaq}/U&VWs{(I. 	YFAs!T"" $$Y%:%:3mTUFV%WX	Y m++ 0Vs   G"Gc                     | j                   dk7  ry | j                         }t        | |      \  }}}|dk(  r|dk(  r| j                  d|       |S |dk(  r|S | j                  d       y )Nr|  r~  r  zf-string not allowed herer  z#internal parser configuration error)rI   rV   r  r   )rL   required_typerW   r  r  r  s         r3   p_opt_string_literalr  R  sn    tt~
**,C'7='I$D+}3;GG/5	#		56r5   c                      | D ]	  }|dk\  s	 y y)N   TFrE   )stringr}  s     r3   check_for_non_ascii_charactersr  a  s      < r5   c                    | j                         }| j                  j                  dk\  }d}|d   |d   |d   t        | j                        z   f}| j                  j                  d      j                         }t        |      dkD  rht        t        |            t        |      k7  rt        |d       d|v rd	|v rt        |d
       d|v rd|v rt        |d       d	|v rd|v rt        |d       d|v }d|v rt        |      dk7  rt        |d       d}nd|v rd}d}nd|v rd}n	d	|v rd	}nd}|dk(  rJ|Ht        j                  | j                  j                  v r"t        j                  | j                        }	d	}ne||dv r|}|dv rt        j                         }	nD|dk(  r t        j                  | j                        }	nt        j                   | j                        }		 | j#                          | j$                  }
| j                  }|
dk(  r#|	j'                  |       |r|st)        |      rd}n|
dk(  rB|r1|s|d	k7  s|d   dvr#|	j'                  |       |rw|sut)        |      rjd}ngt+        ||	||        nX|
dk(  r|	j'                  d       nA|
dk(  rn<|
dk(  r| j                  d|       n"| j                  d|
d| j                  d        |dk(  r0d }|	j-                         }t        |      dk7  rgt        |d!|z         nW|	j/                         \  }}|rB|r@t        j                  | j                  j                  v r|dk(  r| j                  d"|       d }|dk(  rt1        | ||d|v #      }| j#                          |||fS )$Nr%   Fr   r!   r$   z"'z!Duplicate string prefix characterr  r~  z*String prefixes b and u cannot be combinedr  z*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combinedrr}  z+Invalid string prefix for character literalTr  ub)r~  r  CHARSESCAPEUuNEWLINE

END_STRINGEOFzUnclosed string literalr(  zUnexpected token rg   z in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.is_raw)rV   r^   r  r2  rJ   r  lowerr  r   r   unicode_literalsr_   r   StrLiteralBuilderr  UnicodeLiteralBuilderBytesLiteralBuilderrK   rI   rR   r  _append_escape_sequencegetchar
getstrings
p_f_string)rL   kind_overriderW   is_python3_source has_non_ascii_literal_charactersstring_start_poskind_stringr  r  charsrI   systrr  r  s                 r3   r  r  h  s    **,C		00A5',$AAAQZZ(@A**##E*002K
;!s; C$44#:;+#"4#CD+#"4#CD+#"4#CDKF
k {q #DE						rzm+0G0G199KfKf0f001B1BC$$)> D:"88:ERZ"44Q5F5FGE"66q7H7HIE
	TT

=LL )INlmrNs3708^,uQxu?TU#$-MRpqvRw7;4'eUA>9_LL<5[GG-3G7GGAJJ  !1 6 s{mmo{q #7+EF%*%5%5%7"],%&*A*AQYYE`E`*`s{JPSTKs{"1m5EcU`N`aFFH+}--r5   c           	         |d   }|dv r|j                  t        |dd  d             y |dv r|j                  |       y |dv r%|j                  t        j                  |             y |dk(  ry |dk(  rDt        |      dk(  r|j                  t        |d	d  d
             y |j                  d|z  d       y |dv r| dv rd}|dk(  rd }	 t        |dd       }t        |      }nNt        |      dv r+t        |d	d  d
      }|dkD  r-|j                  d|z         d}n|j                  d|z  d       |dk\  r|j                  ||       y y |j                  |       y # t        $ r4 |j                  dt        |dd       j                  d      z  d       Y gt        $ rf |`t        rZt        |      d	k(  rLt        |d         dk(  r;t        |d         dk(  r*dt        |d         dz
  z   dt        |d         dz
  z   z	  }n Y w xY w)Nr!   01234567   z'"\abfnrtvr  x   r$      zInvalid hex escape '%s'Fr   NUu)r~  r  r  r,  Nr%   z!Unknown Unicode character name %sr~  r   Csi   i   
   i   )   r  i zInvalid unicode escape '%s')append_charvalr  rR   r   char_from_escape_sequencer2  r   r
   ordKeyErrorr  lstrip	TypeErrorr   r   append_uescape)r  builderescape_sequencerL   r}  chrvaluchars          r3   r  r    s3   AKs?12#6:;	
hq	
j~??PQ	
e	
d1$""3qr':B#?@GG-?uGM	
f/9E*?1R+@AU !W,,b1F5GHGG1OC5GQQ;""6?;  	'+  N;_Qr23::3?@GL  N %*;E
a(q2d:?OPUVWPX?Y]a?a$E!H(>?2USTXY_I_C``F s   	E :HA+HH)TFs   (\\(?:s   \\?s]   [\\abfnrtv"\'{]|[0-7]{2,3}|N\{[^}]*\}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[NxuU]|s   )?|\{\{?|\}\}?|[^\\{}]+)zus-asciic                 *    | d   | d   | d   |z   dz   fS )Nr   r!   r$   rE   )rW   r  is      r3   _f_string_error_posr	    s#    FCFCFQJN++r5   c                    g }d}t        |      }t        j                         }|rt        nt        }||k  r_|}	 |||      }
|
t        t        |||      d       |
j                         }|
j                         }|d   }|dk(  r1|st        |      dkD  rt        d|||        n|j                  |       n|dk(  r|dk(  r|j                  d       n|j                  rH|j                  t        j                  ||j                                      t        j                         }t        | ||||      \  }}|j                  |       nE|d	k(  r/|d
k(  r|j                  d	       n)t        t        |||	      d       n|j                  |       ||k  r_|j                  r4|j                  t        j                  ||j                                      |S )Nr   zInvalid escape sequence\r!   r  rw  z{{r*  }z}}z#f-string: single '}' is not allowed)r2  r   r  r   r   r   r	  endgroupr  rR   r  r   r  	getstringp_f_string_expr)rL   r  rW   r  r  
next_startsizer  
_parse_seqr  matchpartr}  	expr_nodes                 r3   r  r    s    FJ}D224G06,<SJ
t
=*5=%c=*EG`aYY[
{{}G9c$i!m'WdA>t$#Xt|s# ==MM)"7"77CTCTCV"WX,BBDG(7=#z[a(b%
Ii(#Xt|s#)#}cB;= NN4 ? t
B }}i++Cw7H7H7JKLMr5   c           	         |}t        |      }d x}x}}	d }
d}d}|}d}d}	 ||k\  rn||   }||k7  rS|dk(  r|st        t        |||      d       d}n||k(  r|r(|dz   |k  r||dz      |k(  r||dz      |k(  rd}|}|dz  }n|}n|d	v r(|}|dz   |k  r~||dz      |k(  rs||dz      |k(  rhd}|dz  }n`|d
v r|dz  }nV|dk7  r
|dv r|dz  }nG|dk(  rt        t        |||      d       n*|dk(  r%|dv r!|dk(  r|dz   |k  r||dz      dk(  r|dz  }|}n|dz  }||| j                  dd      j                  dd      }|d   |d   |d   |z   dz   f}|j	                         st        t        |||      d       |dk(  r|dz  }|dz   |kD  rn||   }|dz  }||   }|dk(  rvd}d}d}|dz   }	 ||k\  rn_||   }|s |s|dk(  r|dz  }n|dk(  r|dkD  r|dz  }n|}n8|d	v r.|s'|dz   |k  r||dz      |k(  r||dz      |k(  r	| }|dz  }n|s| }|dz  }e||| }
|dk7  r!t        t        |||      d|rd|z  ndz          t        d|z        }t        ||d   | | j                  |      }t        |      }|.t        j                  j                  |      st        |d|z         |
r#t        j                  |t        | |
||            }	|dz   t        j                  ||||	      fS ) Ni   @r   FTr  z$backslashes not allowed in f-stringsr$   r!   z'"z{[(z}])#zformat string cannot include #z!:}!r)  z
r  z(empty expression not allowed in f-stringrg   rw  r  z'missing '}' in format string expressionz, found '%s'r  z(%s))parent_scannerr  initial_posz!invalid conversion character '%s'r  )r+  conversion_charformat_spec)r2  r   r	  replacestripr   r"   r  r   r   FormattedValueNodefind_conversion_funcr  r  )rL   r  rW   starting_indexr  r  r  r  terminal_charr  format_spec_strNO_CHARnested_depth
quote_charin_triple_quotesbackslash_reportedr}  expr_strexpr_pos	in_stringstart_format_specbufscannerrt   s                           r3   r  r  D  s-    	A}D488O8mkOGLJ
9! Dy)-c=!D@B%)"j#1ut|a!e(<(AmTUXYTYFZ^_F_+0(%,
Q!(J%ZJ1ut|a!e 4 9mAPQE>RVW>W#' Q%ZALQ1:AL#X%c=!<24Q1:CxAEDL]1q5-AS-HQM	QQ V ^A.66vtDLLTSWXHAAA 7! ;<H>>!#}nE8	: 	Qq54<+A.OFA)!,M 	EDya A#I8 A%L#X#a'$)()Ez QUT\mAE6Ja6OTabcfgbgThlmTm+;';$FA)$-IFA' * ((9!<!#}a874A.=0rK	L
 6H$
%C3AqO`O`nvwGgD "9+G+G+\+\]l+mh;oMN --c*QY\^d:efq5)..4kS S Sr5   c                    | j                         }| j                          | j                  dk(  r(| j                  d       t	        j
                  |g       S t        |       }| j                  dv r|j                  r| j                  d       t	        j                  ||      }t        | |      }| j                  d       t	        j                  |||t        j                  | j                  j                  dk\        S | j                  dk(  r| j                          t!        | |      }n|g}| j                  d       t	        j
                  ||      S )	Nr\  r=  r-  2iterable unpacking cannot be used in comprehensionr   r%   )looprR   typehas_local_scoperQ   )rV   rK   rI   ro   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   	list_typer^   r  p_test_or_starred_expr_list)rL   rW   rt   rR   r3  exprss         r3   r  r    s   
**,CFFHtts{	!!#B//!!$Dtt??GGHI223TB!V$	**d60A0AII449; 	; 	tts{	+At4HHSMc..r5   c                 p    | j                   dv rt        | |      S | j                   dk(  rt        | |      S |S )Nr-  r{   )rI   r9  	p_comp_if)rL   bodys     r3   p_comp_iterrA    s;    tt!T""	
D!! r5   c                    | j                         }d}| j                  dk(  rd}| j                          | j                  d       t	        | d|      }|j                  d t        | |      |       t        j                  |fi |S )NFr.  Tr  allow_testlistr	  )else_clauser@  r	  )	rV   rI   rK   ro   p_for_boundsr0   rA  r   ForStatNode)rL   r@  rW   r	  kws        r3   r9  r9    su    
**,CHttw	 HHUO	a	ABII$[D%9HIMS'B''r5   c                     | j                         }| j                          t        |       }t        j                  |t        j
                  ||t        | |            gd       S )N	conditionr@  
if_clausesrE  )rV   rK   rq   r   
IfStatNodeIfClauseNoderA  )rL   r@  rW   r}   s       r3   r?  r?    s[    
**,CFFHDC(($0;At0DF G r5   c                 
   | j                         }| j                          | j                  dk(  r'| j                          t        j                  |g       S g }d}d}	 | j                  dv r|dk(  r| j                  dk(  rdnd	}nA|t        | j                        k7  r)| j                  d
| j                  d|dk(  rdndd       | j                          | j                  dk(  r| j                  d       t        |       }|j                  |       d}nt        |       }|dk(  r| j                  dk(  rd	nd}|d	k(  r@| j                  d       |}t        |       }t        j                  |j                  ||      }|r|d   j                  |       n|j                  |g       d}| j                  dk(  r | j                          | j                  dk(  rnn|| j                  dv rst        |      dk(  r	t        |d   t              rt        |d         dk(  r|d   d   }|d	k(  rqt        |t        j                        sJ t        |             t         j"                  }t        j$                  |j                  |j&                  |j(                        }	n1t         j*                  }t        j,                  |j                  |      }	t/        | |	      }
| j                  d       t        j0                  ||
|	|      S t        |      dk(  r%t        |d   t              s| j                  d       n| j                  d       t        j                  |g       S | j                  d       |dk(  rg }g }|D ]l  }t        |t              r|j3                  |       %|r5|j                  t        j4                  |d   j                  |             g }|j                  |       n |r3|j                  t        j4                  |d   j                  |             t        |      dk(  r|d   j6                  r|d   S t        j8                  ||t         j*                        S g }g }|D ]l  }t        |t              r|j3                  |       %|r5|j                  t        j                  |d   j                  |             g }|j                  |       n |r3|j                  t        j                  |d   j                  |             t        |      dk(  r|d   j:                  r|d   S t        j<                  ||d      S )Nr  r@  r   FT)r   r  r   r!   r$   zunexpected zitem found in r  dictz literalzexpected expression, found '*'rg   )r?  r+  r,  rQ   r-  )key_expr
value_exprr   )r3  rR   r4  r2  r=  )rj   r4  )r6  rA  )rV   rK   rI   r   rI  r2  r   r   rR   rp   ro   rF  rW   r   rB  r4  r   	dict_typeDictComprehensionAppendNoder?  r+  set_typer8  r9  r:  rH  SetNodeis_set_literalMergedSequenceNoderG  rJ  )rL   rW   partstarget_typelast_was_simple_itemrP  r?  r+  comprehension_typerR   r3  rf  	set_itemsr  rO  s                  r3   r  r    sr   
**,CFFHtts{	!!#r::EK 
44;a#$443;aAADD	)DD;!#3%?A BFFHtts{89!!$DLL#( !9Da#$443;aAaq	 --cgg3eL#b	  &dV$'+$443;FFHtts{G J 	ttu:?z%(D9c%(mq>P8A;Da!$	(>(>?KdK%,%6%6"">>HHtxxDJJH &-%5%5""::488$Oa(DHHSM..sfSeff 5zQz%(D'ALM %%c2>>HHSMa	 	#D$%  &LL!2!29Q<3C3C)!TU "IT"	# LL**9Q<+;+;)LMu:?uQx668O++Ce'BRBRSS 
 	#D$%!!$'LL!3!3JqM4E4EWa!bc!#JT"	# LL++JqM,=,=zZ[u:?uQx778O''%SXYYr5   c                    | j                         }| j                          t        |       g}| j                  dk(  r:| j                          |j	                  t        |              | j                  dk(  r:| j                  d       t        |      dk(  r|d   }nt        j                  ||      }t        j                  ||      S )NrQ   rx  r!   r   r=  r   )
rV   rK   rp   rI   rR   ro   r2  r   rC  BackquoteNode)rL   rW   rj   r   s       r3   r  r  z  s    
**,CFFH1I;D
$$#+	F1I $$#+ HHSM
4yA~1g!!#d3""3c22r5   c                     |d uxr |gxs g }| j                   t        vrO|j                  t        |              | j                   dk7  r	 |S | j	                          | j                   t        vrO|S NrQ   )rI   expr_terminatorsrR   rp   rK   rL   rt   r=  s      r3   p_simple_expr_listrf    si    '$-2E
$$&
&fQi!443;L 	
	 $$&
&
 Lr5   c                     |d uxr |gxs g }| j                   t        vrO|j                  t        |              | j                   dk7  r	 |S | j	                          | j                   t        vrO|S rc  )rI   rd  rR   r   rK   re  s      r3   r<  r<    sk    '$-2E
$$&
&+A./443;L 	
	 $$&
&
 Lr5   c                     | j                         }t        |       }| j                  dk(  r3| j                          t	        | |      }t        j                  ||      S |S NrQ   r=  )rV   rp   rI   rK   rf  r   rC  rL   rW   rt   r=  s       r3   r   r     sN    
**,C!9Dtts{	"1d+""3u55r5   c                     | j                         }t        |       }| j                  dk(  r3| j                          t	        | |      }t        j                  ||      S |S ri  )rV   r   rI   rK   r<  r   rC  rj  s       r3   p_testlist_star_exprrl    sO    
**,C!!$Dtts{	+At4""3u55r5   c                     | j                         }t        |       }| j                  dk(  r3| j                          t	        | |      }t        j                  ||      S | j                  dv rt        | |      S |S )NrQ   r=  r-  )rV   r   rI   rK   r<  r   rC  r3  rj  s       r3   r  r    si    
**,C!!$Dtts{	+At4""3u55	
!	!4  r5   c           
          t        | t        j                  |j                  t	        j
                  |j                  |                  }t	        j                  |j                  |      S )Nr   r   )r3  )r9  r   r   rW   r   r   GeneratorExpressionNode)rL   rt   r3  s      r3   r3  r3    sN    a++00tDF GD,,TXXDAAr5   )r   r\  r  rg   r)  r  c                     | j                         }| j                          t        |       }t        j                  ||      S N)rS   )rV   rK   rT   r   
GlobalNoderL   rW   rS   s      r3   p_global_statementrt    s2    
**,CFFHOEC//r5   c                     | j                         }| j                          t        |       }t        j                  ||      S rq  )rV   rK   rT   r   NonlocalNoders  s      r3   p_nonlocal_statementrw    s2    
**,CFFHOEc511r5   c           	         t        |       }| j                  dk(  rD|j                  s|j                  s|j                  r | j                          t        |       |_        | j                  dk(  r)|j                  r| j                  d|j                         |g}| j                  dk(  rW| j                          | j                  dk(  rt        |       }nt        |       }|j                  |       | j                  dk(  rWt        |      dk(  rst        j                  d| j                        r,|d   }t!        |t"        j$                        rVt#        j&                  |j                  |j(                  t+        |j                  |j,                  |j.                        	      }nOt!        |t"        j0                  t"        j&                  t"        j2                  f      st        |j                  d
       | j                  d d }| j                          | j                  dk(  rt        |       }nt5        |       }t7        j8                  |j                  |||      S |d   }t7        j:                  |j                  |      S |d   }t        |      dk(  r%t7        j<                  |j                  |d   |      S t7        j>                  |j                  |d d |      S )Nrg   r)  zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...r(  rv  r!   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   rZ  z&Illegal operand for inplace operation.r,  )r   lhsrhsr   r$   ry  rz  )lhs_listrz  ) rl  rI   r/  is_subscriptis_attributerK   rp   
annotationr7  r   rW   r   rR   r2  r   r  r   r   r^  r`  rW  rp  rX  rY  r$  r  r   r   InPlaceAssignmentNoder   SingleAssignmentNodeCascadedAssignmentNode)rL   rt   	expr_listry  r   rz  s         r3   p_expression_or_assignmentr    s3   "Dtts{(9(9T=N=N	 )tts{t 	
 NHH 	 	 I
$$#+	447?%a(D'*D $$#+ 9~884add;A,C#y778))GG)#''399chhGI  i&=&=y?R?RT]TfTf%ghcggGHttCRyHFFHttw(+ m..swwsX[\\|!!$((66
B-C
9~))#''y|MM++CGGinRUVVr5   c                 d   | j                         }d}| j                          | j                  dk(  rI| j                          t        |       }| j                  dk(  r!| j                          | j                  dv }nd }g }| j                  dvrt|j	                  t        |              | j                  dk(  rK| j                          | j                  dv rd}n*|j	                  t        |              | j                  dk(  rKt        j                  ||      }t        j                  ||||       S )Nr   r   rQ   r  r  r!   r=  )rM  streamappend_newline)	rV   rK   rI   rp   rR   r   rC  r   PrintStatNode)rL   rW   ends_with_commar  rj   rM  s         r3   p_print_statementr    s    
**,COFFHttt|	443;FFHdd&88ODtt%%F1IddckFFHtt))"#KKq	" ddck ##Cd3IsF**, ,r5   c                 P   | j                         }| j                          t        |       }t        |t        j
                        r?d}|j                  }t        |      dvr)| j                  dt        |      z  |d       |g}nd}|g}| j                  dk(  rx|r| j                  dd       | j                          |j                  t        |              | j                  d	k(  r*| j                          |j                  t        |              t        j                  ||
      S )NT)r$   r%   z.expected tuple of length 2 or 3, got length %dFr   r   z@tuple variant of exec does not support additional 'in' argumentsr  rQ   r=  )rV   rK   r   r   r   rC  rj   r2  r   rI   rR   rp   r   ExecStatNode)rL   rW   codetuple_variantrj   s        r3   p_exec_statementr  -  s    
**,CFFHa=D$	++,yyt9F"GGDs4yP5  *6Dvttt|GGV  !	F1I443;FFHKKq	"c--r5   c                     | j                         }| j                          t        |       }t        j                  ||      S )Nr=  )rV   rK   rf  r   DelStatNode)rL   rW   rj   s      r3   p_del_statementr  H  s3    
**,CFFHa DS..r5   c                     | j                         }| j                  d       |r| j                  dd       t        j                  |      S )NpassExpected a newlineTignore_semicolon)rV   ro   expect_newliner   PassStatNode)rL   with_newlinerW   s      r3   p_pass_statementr  P  sA    
**,CHHV	-Ec""r5   c                 l    | j                         }| j                          t        j                  |      S r.   )rV   rK   r   BreakStatNoder   s     r3   p_break_statementr  W  s'    
**,CFFHs##r5   c                 l    | j                         }| j                          t        j                  |      S r.   )rV   rK   r   ContinueStatNoder   s     r3   p_continue_statementr  ]  s'    
**,CFFH!!#&&r5   c                     | j                         }| j                          | j                  t        vrt	        |       }nd }t        j                  ||      S )Nr*  )rV   rK   rI   r   r   r   ReturnStatNode)rL   rW   r+  s      r3   p_return_statementr  c  sD    
**,CFFHtt((1U33r5   c                    | j                         }| j                          d }d }d }d }| j                  t        vrt	        |       }| j                  dk(  rF| j                          t	        |       }| j                  dk(  rF| j                          t	        |       }n*| j                  dk(  r| j                          t	        |       }|s|s|rt        j                  |||||      S t        j                  |      S )NrQ   r   )exc_type	exc_valueexc_tbcause)rV   rK   rI   r   rp   r   RaiseStatNodeReraiseStatNode)rL   rW   r  r  r  r  s         r3   p_raise_statementr  m  s    
**,CFFHHIFEtt((!9443;FFHq	Itts{TTV^FFH1IE9""3!	 	 $$S))r5   c                 b   | j                         }| j                  }| j                          t        | d      g}| j                  dk(  r<| j                          |j	                  t        | d             | j                  dk(  r<g }t
        j                  | j                  j                  v }|D ]  \  }}}}|dk(  rt        j                  ||||      }	n|rKd|v rGt        j                  |t        j                  || j                  j                  d            g	      }
nd }
t        j                  |t        j                   ||xs |
      t        j"                  |t        j                  ||      |rdnd |
            }	|j	                  |	        t        j$                  ||      S )Nr!   
as_allowedrQ   cimport)module_nameas_nameis_absoluter  r   r*  r=  r  r   r  r=   	name_listr{  stats)rV   rI   rK   p_dotted_namerR   r   r   r^   r_   r   CImportStatNoder   r6  r1  r0  r  r  
ImportNodeStatListNode)rL   rW   r  rf  r  r  target_namedotted_namer  statr  s              r3   p_import_statementr    s   
**,C44DFFH1+,E
$$#+	]134 $$#+ E((AII,G,GGK27 .[+w9((''	)D 3+-%..s223aii>V>VWZ>[\:^ _	 !	--&&s1GKH(( ) > >s+ V*!'	)*D 	T+, c//r5   c           
      d   | j                         }| j                          | j                  dk(  r7d}| j                  dk(  r(|dz  }| j                          | j                  dk(  r%nd }|:| j                  dv r,| j                         | j                  j	                  d      }}n<|(t
        j                  | j                  j                  v rd}t        | d      \  }}}}| j                  dvr| j                  d       | j                  }| j                          |d	k(  }d}	| j                  d
k(  r?| j                         | j                  j	                  d
      d d fg}
| j                          n.| j                  dk(  rd}	| j                          t        | |      g}
| j                  dk(  rM| j                          |	r| j                  dk(  rn+|
j                  t        | |             | j                  dk(  rM|	r| j                  d       |dk(  r|s| j                  d       no|r| j                  d       n[|
D ]V  \  }}}}|dk(  r| j                  d|        n8	 t        t
        |      }| j                  j                  j                  |       X t!        j"                  |      S |d	k(  rt!        j$                  ||||
      S g }g }|
D ]Y  \  }}}}|j                  t'        j(                  ||             |j                  |t'        j*                  ||xs |      f       [ t'        j,                  |
d   d   |      }t!        j.                  |t'        j0                  |t'        j(                  ||      ||      |      S # t        $ r | j                  d|z  |       Y  w xY w)Nr  r   r!   importr  r  Fr  zExpected 'import' or 'cimport'r  r   r   TrQ   r   
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxbracesznot a chancez future feature %s is not defined)r  relative_levelimported_namesr*  r  r=  r  )modulerf  )rV   rK   rI   r^   r0  r   r   r_   r  r   p_imported_namerR   ro   getattrAttributeErroraddr   r  FromCImportStatNoder   r1  r  r6  FromImportStatNoder  )rL   first_statementrW   r=   dotted_name_posr  _r  
is_cimportis_parenthesizedr  name_posrN   r  	directiveimported_name_stringsrf  import_lists                     r3   p_from_import_statementr    se   
**,CFFHtts{ddckQJEFFH ddck QTT%::'(zz|QYY5M5Mb5Q=V33qyy7R7RRE/<Q5/Q,![!tt((	0144DFFH"Jtts{::<)A)A#)FdST	443;#FFH)!Z89
$$#+	oa<=	 $$#+
 	l"GGUVGG$%3A 	;/4$8#GGNH5 ' 5I 		++//	:	; !!#&&		(([ )+ 	+
 !#/= 	L+XtWd!((..xtDFLLy))(DIJL	L
  ((1a '<>''))/'<<S+V')  	) & GG>ExPs   NN/.N/)classstructunionc                     | j                         }d }|r>| j                  t        v r,| j                  }t        |d|z  d       | j	                          t        |       }t        |       }||||fS )NzXthe "from module cimport %s name" syntax is deprecated and will be removed in Cython 3.0r$   )rV   rJ   imported_name_kindsr   rK   rO   	p_as_name)rL   r  rW   r  rN   r  s         r3   r  r    sn    
**,CDajj$77zz 026789	;	1:DlGw%%r5   c                 J   | j                         }t        |       }d }|g}| j                  dk(  r:| j                          |j	                  t        |              | j                  dk(  r:|rt        |       }||| j                  j                  dj                  |            |fS rm  )	rV   rO   rI   rK   rR   r  r^   r0  r  )rL   r  rW   r  r  rS   s         r3   r  r    s    
**,C!*KGME
$$#+	WQZ  $$#+ A,aii66tyy7GH'RRr5   c                 v    | j                   dk(  r*| j                  dk(  r| j                          t        |       S y )NrH   as)rI   rJ   rK   rO   rw   s    r3   r  r    s.    ttw1::-	qzr5   c                     | j                         }| j                          t        |       }| j                  dk(  r| j                          t        |       }nd }t	        j
                  |||      S )NrQ   )condr+  )rV   rK   rp   rI   r   AssertStatNode)rL   rW   r  r+  s       r3   p_assert_statementr  #  sV    
**,CFFH!9Dtts{	q	D%@@r5   );r  r  c                 2   | j                         }| j                          t        |       g}| j                  dk(  r:| j                          |j	                  t        |              | j                  dk(  r:t        |       }t        j                  |||      S )NelifrL  )rV   rK   p_if_clauserI   rR   p_else_clauser   rN  )rL   rW   rM  rE  s       r3   p_if_statementr  2  s{    
**,CFFHa.!J
$$&.	+a.) $$&.  "KC{< <r5   c                 ~    | j                         }t        |       }t        |       }t        j                  |||      S )NrJ  )rV   rp   p_suiter   rO  )rL   rW   r}   r@  s       r3   r  r  >  s9    
**,C!9D1:Dc' 'r5   c                 X    | j                   dk(  r| j                          t        |       S y )Nr|   )rI   rK   r  rw   s    r3   r  r  E  s#    ttv~	qzr5   c                     | j                         }| j                          t        |       }t        |       }t	        |       }t        j                  ||||      S )N)rK  r@  rE  )rV   rK   rp   r  r  r   WhileStatNode)rL   rW   r}   r@  rE  s        r3   p_while_statementr  L  sO    
**,CFFH!9D1:D"Ks!# #r5   c                     | j                         }| j                          t        | d|      }t        |       }t	        |       }|j                  |||       t        j                  |fi |S )NTrC  )r@  rE  r	  )rV   rK   rF  r  r  r0   r   rG  )rL   r	  rW   rH  r@  rE  s         r3   r  r  X  s_    
**,CFFH	ax	@B1:D"KII4[8IDS'B''r5   c                    t        |       }| j                  dk(  r+| j                          t        | ||      }t	        ||      S | j
                  s	|s| j                  dk(  r| j                          t        |       }n|d }}t        |       }| j                         }t        |       }| j                         }	t        |       }
t        |       }t        |       }|t        j                  ||      }n>|j                  st        |j                  d       n||j                   k7  rt        |d       |d   |
d   k7  rt        |	d	       t	        ||||
||
      S | j#                  d       i S )Nr   r  )targetiteratorr   r  z4Target of for-from statement must be a variable namez5Variable name in for-from range does not match targetr   z,Relation directions in for-from do not match)r  bound1	relation1	relation2bound2ri  )p_for_targetrI   rK   p_for_iteratorrR  r   r   p_for_from_relationrV   rO   p_for_from_stepr   r  r/  r   rW   rN   ro   )rL   rD  r	  r  r  r  rel1	name2_posname2rel2_posrel2r  ri  s                r3   rF  rF  c  sK   !_Fttt|	!!^hG6H55h446>FFH]F $TFF"1%JJL	
::<"1%Aq!>''	%@F>>fjjJL&++%iKM7d1g(>@V# $ $# 	 	
	r5   c                     | j                   t        v r| j                   }| j                          |S | j                  d       y )Nz#Expected one of '<', '<=', '>' '>=')rI   inequality_relationsrK   r   r   s     r3   r  r    s3    tt##TT			56r5   c                 z    | j                   dk(  r,| j                  dk(  r| j                          t        |       }|S y )NrH   by)rI   rJ   rK   r   )rL   ri  s     r3   r  r    s2    ttw1::-	!}r5   )r   r   r   r   c                 `   | j                         }t        |       }| j                  dk(  r| j                          |g}| j                  |k7  rJ|j	                  t        |              | j                  dk7  rn | j                          | j                  |k7  rJt        j                  ||      S |S ri  )rV   r   rI   rK   rR   r   rC  )rL   rh   rW   rt   r=  s        r3   p_targetr    s    
**,C!Dtts{	ddj LL*+tts{FFH	 ddj 
 ""3u55r5   c                     t        | d      S )Nr   )r  rw   s    r3   r  r    s    Atr5   c                     | j                         }|rt        |       }nt        |       } |rt        j                  nt        j
                  ||      S )N)sequence)rV   r   r   r   AsyncIteratorNodeIteratorNode)rL   rD  r	  rW   rt   s        r3   r  r    sC    
**,C!}|O8I''9O9OQT_cddr5   c                 >   | j                         }| j                          t        |       }g }d }| j                  dv r| j                  dk(  r*|j	                  t        |              | j                  dk(  r*| j                  dk(  r| j                          t        |       }t        j                  ||||      }| j                  dk7  r|S | j                  dk(  r3| j                          t        |       }t        j                  |||      S | j                  d       y )N)exceptr|   r  r|   )r@  except_clausesrE  finally)r@  finally_clausezExpected 'except' or 'finally')
rV   rK   r  rI   rR   p_except_clauser   TryExceptStatNodeTryFinallyStatNoder   )rL   rW   r@  r  rE  r  s         r3   p_try_statementr    s    
**,CFFH1:DNKtt!!ddh!!/!"45 ddh446>FFH!!*K&&s.%' 449Ktty	 ''.: 	: 	
01r5   c                    | j                         }| j                          d }d }d}| j                  dk7  rt        |       }t	        |t
        j                        r|j                  }n|g}| j                  dk(  s7| j                  dk(  rD| j                  dk(  r5| j                  j                  dk(  r| j                          t        |       }nb| j                  dk(  rS| j                  dk(  rD| j                          | j                         }t        |       }t        j                  ||      }d}t        |       }t        j                  |||||	      S )
NFrg   rQ   rH   r  r$   r  T)patternr  r@  is_except_as)rV   rK   rI   rp   r   r   rC  rj   rJ   r^   r  rO   r  r  r   ExceptClauseNode)rL   rW   r  r  r  pos2rN   r@  s           r3   r  r    s   
**,CFFHHILtts{!9h	 3 34}}H zH443;1447?qzzT/A yy771<FFHq	ITTW_t!3FFH::<D1:D!**4=IL1:D!!#Y,0 0r5   c                    | j                         }| j                          t        | d      d   }| j                  d       | j                  r|}| j
                  j                  ||      }|rv| j                  j                  |       t        j                  |      5 }t        |      }t        ||| |j                  | j                        }t        ||      }	d d d        |	S y t!        j"                  |      S # 1 sw Y   	S xY w)Nr~  r$   z!Syntax error in include statement)r  parse_comments)rV   rK   r  r  compile_time_evalr^   find_include_fileincluded_filesrR   r   open_source_filer	   r"   encodingr  p_statement_listr   r  )
rL   r7   rW   unicode_include_file_nameinclude_file_nameinclude_file_pathr  source_descs2trees
             r3   p_include_statementr*    s    
**,CFFH 0C 8 ;895II778I3O##$56''(9: 1a23DE!![!QZZ`a`p`pq'C01 K!!#&&1 Ks   <C99Dc                     | j                          | j                  dk(  r| j                  st        |       }|S t	        |       }|S )Ntemplate)rK   rJ   r   p_with_templater  )rL   r   s     r3   p_with_statementr.    s@    FFHzzZ(8(8q! K AKr5   c                    | j                         }| j                  s| j                  dk(  r| j                  dv r}|r| j	                  d       | j                  }| j                          | j                  dk(  r| j                          t        |       }nt        |       }t        j                  |||      S t        |       }d }| j                  dk(  r*| j                  dk(  r| j                          t        |       }| j                  dk(  r| j                          t        | |      }nt        |       }t        j                  |||||      S )	NrH   )r'   gilzwith gil/nogil cannot be asyncrQ   )stater@  r  r  )managerr  r@  r	  )rV   r   rI   rJ   r   rK   r  r  r   GILStatNoderp   r   WithStatNode)rL   r	  rW   r1  r@  r2  r  s          r3   r  r    s   
**,CAJJBR4RGG45

	443;FFH?D1:D  E==)447?qzzT1FFH#A&F443;FFHH5D1:Dc76W_``r5   c                    | j                         }g }| j                          | j                  d       |j                  | j                         | j                          | j                  dk(  rK| j                          |j                  | j                         | j                          | j                  dk(  rK| j                  d       | j
                  dk(  ra| j                          | j                  d       | j                          t               }||_	        t        | ||      }| j                          |S t        |d       y )Nr  rQ   r\  rg   z-Syntax error in template function declaration)rV   rK   ro   rR   rJ   rI   r  expect_indentr*   rC   p_c_func_or_var_declarationexpect_dedentr   )rL   rW   rC   body_ctxfunc_or_vars        r3   r-  r-  /  s    
**,CIFFHHHSMQZZ FFH
**
	$	 **
 HHSMtts{		HI	5&1!S(C	cBCr5   c                 .   | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S | j                   dk(  rt	        |       }|S | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S | j                   d	k(  rt        |       }|S | j                   d
v rt        |       }|S | j                   dk(  rt        | |      }|S | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S | j                   dk(  rt        |       }|S t        |       }|S )Nglobalnonlocalprintexecdelbreakcontinuereturnraiser  r   r  rv  assertr  )rI   rt  rw  r  r  r  r  r  r  r  r  r  r   r  r  r  )rL   r  r   s      r3   p_simple_statementrG  G  s   ttx!!$: K9 
	#A&6 K5 
 #2 K1 
". K- 
q!* K) 
 #& K% 
	#A&" K! 
	!!$ K 
 # K 
&	&!!$ K 
&qOL K 
 # K 
	!!$
 K	 
" K *!,Kr5   c                    t        | |      }|j                  }g }t        |t        j                        s|j                  |       | j                  dk(  rj| j                          | j                  dv rnKt        | |      }t        |t        j                        rV|j                  |       d}| j                  dk(  rj|st        j                  |      }n+t        |      dk(  r|d   }nt        j                  ||      }| j                  dvr[t        |t        j                        rA|j                  j                  r+|j                  j                  dk(  r| j                  d	|       | j                  d
       |S )NrE  r  r  Fr!   r   r  cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)rG  rW   r   r   r  rR   rI   rK   r2  r  r   rt   r/  rN   r   r  )rL   r7   r  r  rW   r  s         r3   p_simple_statement_listrJ  i  s3    a?CD
((CEdE../T
$$#+	44%%!!GdE../T $$#+ !!#&	UqQx!!#u5tt%%dE../yy  TYY^^v%=Z\_`<=Kr5   c                 P    | j                   }d| _         t        |       }|| _         |S )Nr!   )r  r   )rL   oldrt   s      r3   p_compile_time_exprrM    s+    


CAa=DAKr5   c                 V   | j                         }| j                  }| j                          t        |       }| j	                  d       t        |       }| j                  r#|j                  |      }|j                  ||       | j                  dd       t        j                  |      S )Nr)  r  Tr  )rV   r  rK   rO   ro   rM  r  compile_time_valuedeclarer  r   r  )rL   rW   denvrN   rt   r+  s         r3   p_DEF_statementrR    s    
**,CDFFH1:DHHSMq!D''-T5!)DAc""r5   c                    | j                         }| j                  }|}| j                  }d }	 | j                          t	        |       }|xr t        |j                  |            | _        t        | |      }| j                  r|}d}| j                  dk7  rnk| j                  dk(  r'| j                          || _        t        | |      }|r|}|st        j                  |      }|| _        |S )Nr   ELIFELSE)rV   r  r  rK   rM  r  rO  r  rI   r   r  )	rL   r7   rW   
saved_evalcurrent_evalrQ  r   rt   r@  s	            r3   p_IF_statementrX    s    
**,C$$JLDF
	"1%*RtD4K4KD4Q/Rq#FL446>  	ttv~	*q#F##C($AMr5   c                 	   |j                   }d }| j                  dk(  r+|j                  dvr| j                  d       t	        | |      S | j                  dk(  rt        |       S | j                  dk(  rt        | |      S | j                  dk(  r|j                  dvr| j                  d       |j                  | _        t        |       }|j                  s]| j                  d	vrO| j                  d
k(  r| j                  dk(  rn0| j                  d       n| j                  dk(  r|rt        | d      S d}| j                  dk(  rd}| j                          n#| j                  dk(  rd}d}| j                          |r|j                  dvr| j                  d       |j                  | _        t        |  ||            }|t        j                  t        j                  t        j                   f}|j                  r#|t        j"                  t        j$                  fz  }t'        ||      s| j                  d       ||_        |S |j*                  r| j                  dd       y | j                  dk(  rKd|j                  v r |j                  dk7  r| j                  d       |j                  | _        t-        | |      S | j                  dk(  r+|j                  dvr| j                  d       t/        | |      S | j                  d k(  r+|j                  dvr| j                  d!       t1        | |      S |j                  d"k(  r)| j                  d
k(  r| j                  d#k(  rt3        |       S | j                  dk(  r|j                  d#k7  rt        | d$      S |j                  d%v r t5        |       }||S | j                  d&       | j                  d'k(  rt7        |       S | j                  d(k(  rt9        |       S | j                  d)k(  rt;        |       S | j                  d*k(  rt=        |       S | j                  d+k(  rt?        |       S | j                  dk(  r| j                          tA        | ||      S | j                  d
k(  rl| j                  dk(  r]| j                  }| j                          | j                  dk(  rtA        | ||      S |r| j                  d       | jC                  d
|       tE        | ||,      S )-Nctypedefr  
module_pxdz#ctypedef statement not allowed hereDEFIFr   )r  r  c_classrS  propertyr\  c_class_pxdr+   zdecorator not allowed here)r  rI  cpdefr  r.  rH   r.  r  r  r!   )r  r   rI  rb  )r  r\  rS  r_  ra  zcdef statement not allowed here)rA   %'api' not allowed with this statementFr  r  r  ra  r  r  )r  rS  r  r+   z!class definition not allowed hereincludez"include statement not allowed herer_  r`  T)ra  r`  z%Executable statement not allowed herer{   whiler  tryr
  rE  )#r?   rI   r=   r   p_ctypedef_statementrR  rX  p_decoratorsrD   rJ   r  rK   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r  r(   r  p_class_statementr*  p_property_declp_ignorable_statementr  r  r  r  r.  r  put_backrJ  )	rL   r7   r  r?   r  rA   r   tup
ident_names	            r3   p_statementru    s%   IJttz9944GG9: $As++	
q!!	
a%%	
99xxGG01))!!_
..144?i3ittw1::#8QR	
I22Kttv~			
		99ZZGG56))3;#?@!%%u'8'8%:M:MNC..33U5G5GHHdC(QR(DO77GG;5GITTU] "m)C89iiAG"1j11TTW_yy HH;<$Q
33TTYyy 88<=&q#..YY)#AJJ*<T"1%%TTV^		Z 7#AD99yy77,Q/#K?@ttt|%a(((++&q))&q))'**(C<<447?qzzW'<!"JFFHttu}0CDD# YZJJw
3.q#WWr5   c                 Z   | j                         }g }| j                  dvrKt        | ||      }t        |t        j
                        r7|j                  |       d}| j                  dvrK|st	        j
                  |      S t        |      dk(  r|d   S t	        j                  ||      S )NDEDENTr  rE  Fr!   r   r  )	rV   rI   ru  r   r   r  rR   r2  r  )rL   r7   r  rW   r  r  s         r3   r#  r#  "	  s    
**,CE
$$'
'1c_EdE../T $$'
' !!#&&	UqQx!!#u55r5   c                 $    t        | |d      d   S )NFwith_doc_onlyr!   )p_suite_with_docstringrL   r7   s     r3   r  r  4	  s    !!S>qAAr5   c                    | j                  d       d }| j                  dk(  rJ| j                          | j                          |rt	        |       }t        | |      }| j                          nX|j                  r| j                  dd       |j                  dv rt        | |      }nt        |       }| j                  dd	       |st        |      \  }}||fS )
Nrg   r  rc  Fr  )r  r  rS  r+   zSyntax error in declarationsTr  )ro   rI   rK   r6  p_doc_stringr#  r8  r(   r   r=   rJ  r  r  _extract_docstring)rL   r7   r{  docr@  s        r3   r|  r|  8	  s    HHSM
Ctty		q/C3'	77GG;5GI99@@*1c2D#A&D;dS&t,	T9r5   c                 N   g }g }d}| j                   |vr| j                   dk(  s| j                   dk(  r| j                  dd       d}| j                   dk(  r| j                         d   dk(  r| j                  }| j	                          | j	                          t        |       rt        |       }n>t        | |	      }	t        | d
      }
t        j                  |	j                  |	|
      }d}t        j                  |j                  |      }|j                  ||f       d}nt        |       rt        |       }n>t        | |	      }	t        | d
      }
t        j                  |	j                  |	|
      }d}|j                  |       |d
z  }t        |      dkD  r| j                  d|j                         | j                   dk7  r8| j                   |vr%|r#| j                  ddj!                  |      z         	 ||fS | j	                          | j                   |vr||fS )z
    Parses positional and keyword arguments. end_sy_set
    should contain any s.sy that terminate the argument list.
    Argument expansion (* and **) are not allowed.

    Returns: (positional_args, keyword_args)
    r   r   r  z$Argument expansion not allowed here.Fr  rH   r)  rC   r!   r   r   Tr*  r'  r(  rQ   zUnmatched %sz or )rI   r   r  rJ   rK   r   rp   r   r   r   CComplexBaseTypeNoderW   r   r1  rR   r2  r  )rL   
end_sy_setrC   r5  r6  pos_idxparsed_typeidentr   r   r   keyword_nodewas_keywords                r3   p_positional_and_keyword_argsr  O	  s    OLG
$$j
 443;!$$$,GG:%GH447?qvvx{c1JJEFFHFFHq!Qi)!C	+Aq9
00 )
D"$99#''OLs 34K q!Qi)!C	+Aq9
00 )
D"""3'qLG< 1$?GG  % 443;tt:%GGNV[[-DDEL(( 	
S $$j
 T L((r5   c                 X    | j                   dk(  rt        | |      S t        | |||      S )Nr   r  nonemptyrC   )rI   p_c_complex_base_typep_c_simple_base_type)rL   	self_flagr  rC   s       r3   r   r   	  s.     	tts{$QI>>#AyXS\]]r5   c                     | j                   dk(  r0| j                  t        v r| j                  }| j                          |S y)NrH   r  )rI   rJ   calling_convention_wordsrK   )rL   r   s     r3   p_calling_conventionr  	  s3    ttw1::)AA	r5   )	__stdcall__cdecl
__fastcallc                    | j                         }| j                          t        | |      }t        | d      }t	        j
                  |||      }| j                  dk(  r|g}| j                  dk(  rq| j                          | j                  dk(  rnQt        | |      }t        | d      }|j                  t	        j
                  |||             | j                  dk(  rqt	        j                  ||      }| j                  d       | j                  dk(  r&t        |       rt        | |      }|S t        | ||      }|S )	Nr  Tr   r   rQ   r   )
componentsr  )rV   rK   r   r   r   r  rI   rR   CTupleBaseTypeNodero   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rL   rC   rW   r   r   	type_noder  s          r3   r  r  	  s   
**,CFFHa95I.J**yZ9Itts{[
ddckFFHtts{%a9=I'6Je88yZA B ddck ,,SzJ	HHSMtts{$Q'0I>I  -Q	9EIr5   c                 Z   d}d}d}d}g }| j                         }	| j                  dk(  st        |	d| j                  z         | j                  dk(  rx| j	                          t        | |||      }
t        |
t        j                        r(t        j                  |	|
j                        |
_
        |
S t        j                  |	|
      S t        |       rd}| j                  dk(  rE| j                  t        v r3t        | j                     \  }}| j                  }| j	                          nNt        |       \  }}| j                  dk(  r/| j                  t        v r| j                  }| j	                          nd}| j                  dk(  r| j                  d	k(  r~d}| j	                          njt        |       ri| j                  }| j	                          | j                  d
k(  r3|j!                  |       | j	                          t#        |       }| j                  d
k(  r<n| j                  }| j	                          |r| j                  dk7  r| j                  dk(  r| j	                          | j                  dk(  s?| j                  dk(  s0| j                  dk(  s!| j                  dk(  r%| j                  t$        v r| j'                  dd       nI| j'                  dd       | j'                  d|       d }n"| j                  dvr| j'                  d|       d }t        j(                  |	||||||||	      }| j                  dk(  r%t+        |       rt-        | |      }nt/        | ||      }| j                  d
k(  r3| j	                          t#        |       }t        j0                  |	||      }|S )Nr   r!   rH   z"Expected an identifier, found '%s'const)r  r  rC   )r   r  r  r  r   r   r  r   )r   r  r  r   rN   module_pathis_basic_c_typesignedr  r  is_self_argrC   r  )r   rN   )rV   rI   r   rJ   rK   r   r   r   r   r   r   looking_at_base_typespecial_basic_c_typesp_sign_and_longnessbasic_c_type_nameslooking_at_dotted_namerR   rO   r  rr  CSimpleBaseTypeNoder  r  r  CNestedBaseTypeNode)rL   r  r  rC   is_basicr  r  r  r  rW   r   rN   r  s                r3   r  r  	  s   HFHGK
**,C447?c7!$$>?zzW	!!y8W`a	i!>!>?',';';C9KcKc'dI$##C9==A447?qzz-BB4QZZ@FH::DFFH215FHttw1::1C#Czz447?qzzY6GFFH		"zz	ddckt$FFH1:D ddck
 zz	tts{DDCK1444<1443;DDGO

>V0VJJsC(JJsC(JJw-D22

7D)))#;"VhY	8I 	tts{$Q'0I>I,Q	9EItts{	qz--cyQUV	r5   c                    | j                         }| j                          t        | d|      \  }}| j                  d       | j                  dk(  rt        | ||      }t        j                  ||D cg c]'  \  }}t        j                  |j                  ||      ) c}}      }t        j                  ||||      }	|	S c c}}w )N)r\  r\  r  r>  rQ  )r5  r6  r   )rV   rK   r  ro   rI   r  r   rI  rF  rW   r   r   )
rL   r   rC   rW   r5  r6  r?  r+  rK  r   s
             r3   r  r  

  s    
**,CFFH 	&a; "O\ HHSMtts{-aK%%c +
U ""swwCuE
L
 $$S)#')F M
s   3,Cc                     |r|s|S |s&|r$t        |       rt        | |      S t        | |d       S |s|st        |       rt        | |      S |S y y r.   )r  r  r  )rL   r   r  r   s       r3   p_bracketed_base_typer  #
  s_    Xx$Q'+A~>>'>4@@8 %Q'+A~>>!! $Ur5   c                 f   | j                   | j                  fg}| j                          d}| j                  dk(  rd}nW| j                   dk(  rH|j                  | j                   | j                  f       | j                          | j                   dk(  rd}|d d d   D ]  } | j                  |   |S )NFrg   Try  r,  )rI   rJ   rK   rR   rr  )rL   savedretvalsvs       r3   r  r  8
  s    
 ddAJJ EFFHFzzS	
addAJJ'(	443;FDbDk 

B Mr5   c                    | j                         }| j                          t        |       \  }}|D ]"  }t        |      dk  s| j	                  d       $ | j                  d       t        ||      }t        j                  |||      }|S )Nr$   zDAn axis specification in memoryview declaration does not have a ':'.r\  )r   axes)	rV   rK   r]  r2  r   ro   r_  r   r   )rL   r   rW   ra  r  rq  rc  r   s           r3   r  r  M
  s    
**,CFFH$Q'MJ \	y>AGGZ[\ HHSMsJ/G**3+F Mr5   c                 H    | j                   dk(  xr | j                  t        vS rG   )rI   rJ   r  rw   s    r3   looking_at_namer  ]
  s    447?I1::1I#IIr5   c                    | j                   t        v ry| j                  dk(  rd}| j                   }g }| j                          | j                  dk(  rL| j                          |j	                  | j                          | j                  d       | j                  dk(  rL| j                  | j                   f}| j                  dk(  rd}n| j                  dk(  s| j                  dk(  r.| j                          | j                  dv } | j                  |  n| j                  dk(  r/| j                          | j                  dk(  } | j                  |  nK| j                  d	k(  r<| j                          | j                  d
k(  xs t        |        } | j                  |  |j                          |D ]&  }| j                  d|       | j                  dd       ( | j                  d|       | xr |d   S y)NFrH   r  Tr   r  )r   r\  r   r  r\  r   )	rJ   base_type_start_wordsrI   rK   rR   ro   rr  r   reverse)rL   is_typerN   dotted_pathr  ps         r3   r   r   `
  s   zz**	
zz	ddckFFHqzz*HHW ddck
 ajj 447?GTTS[ADDDLFFHddj(GAJJTTS[FFHddckGAJJTTS[FFHddck;);%;GAJJ 	!AJJw"JJsC 	! 	


7D!{'uQx'r5   c                 H    | j                   dk(  xr | j                  t        v S rG   )rI   rJ   r  rw   s    r3   r  r  
  s    447?Bqzz-BBBr5   c                     | j                   dk(  r?| j                  }| j                          | j                   dk(  }| j                  d|       |S y)NrH   r  r   )rI   rJ   rK   rr  )rL   rN   r   s      r3   r  r  
  sB    ttwzz		

7D!r5   c                 t    | j                   | j                  f}t        |       dk(  }|s|\  | _         | _        |S )zSee if we're looking at a.b.c(r   )
start_line	start_colr   )rL   rV   r   s      r3   looking_at_callr  
  s;    
 ||Q[[(HQ4'F$,!akMr5   )voidcharr  r  doublebint)r   r   )r$   r   )r!   r   )
Py_UNICODEPy_UCS4	Py_hash_t
Py_ssize_tssize_tsize_t	ptrdiff_tPy_tss_t)shortr  r  r  )r  r  enumpackedc                 L   d}d}| j                   dk(  r| j                  t        v r|| j                  dk(  rd}n8| j                  dk(  rd}n&| j                  dk(  rd}n| j                  d	k(  r|dz  }| j                          | j                   dk(  r| j                  t        v r|||fS )
Nr!   r   rH   r  r  r$   r  r,  r  )rI   rJ   sign_and_longness_wordsrK   )rL   r  r  s      r3   r  r  
  s    FH
$$'/ajj,CC::#FZZ8#FZZ7"HZZ6!MH	 $$'/ajj,CC 8r5   c                 b    t        | d      }|t        |      }| j                  |_        |S d }|S )Nr~  )r  r   r  r"  )rL   literalcnames      r3   p_opt_cnamer  
  s>    "1c*Gg&** L Lr5   c           	         | j                         }| j                  dk(  r| j                          | j                  dk(  st        |       rAt	        j
                  || j                  j                  d      d       }	t        | |||	|      }
n5t        | |||||d      }
| j                  d       nt        | ||||||      }
|sB|
j                  r6| j                  dk7  r't        | j                         d|
j                  z         | j                  dv r\| j                         }| j                  d	k(  rt        | |
      }
n| j                          t        | |||
|      }
d
}| j                  dv r\|
S )Nr   r   r  )rN   r  r!   )r   r  cmethod_flagr  calling_convention_allowedz&%s on something that is not a function)r  r   r  r   )rV   rI   rK   r  r   CNameDeclaratorNoder^   r0  p_c_func_declaratorr   ro   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rL   r7   r   r  r  
assignabler  r  rW   rW  r   s              r3   r   r   
  sH    **,Ctts{	443;/!,,,Sqyy7O7OPS7T\`aD(CdLIF#AsEW3?/7ABDF HHSM&q#ug|'18=%&*C*CPSajjlD''( 	)
$$*
jjl443;)!V4FFFH(CflKF $$*
 Mr5   c                     | j                         }| j                          | j                  dk7  rt        |       }nd }| j	                  d       t        j                  |||      S )Nr\  )rW  	dimension)rV   rK   rI   r   ro   r   CArrayDeclaratorNode)rL   rW  rW   dims       r3   r  r  
  sO    
**,CFFHtts{mHHSM%%c$CHHr5   c           
         t        | ||d      }t        |       }| j                  d       t        |       }t	        |       \  }}	|xs t        |       }t        |       }
t        j                  ||||||	|xs |j                  xs |
|
      S )Nr   )r  nonempty_declaratorsr   )rW  rj   has_varargsexception_valueexception_checkr'   with_gil)	p_c_arg_listp_optional_ellipsisro   p_nogilp_exception_value_clause
p_with_gilr   CFuncDeclaratorNoder'   )rL   rW   r7   rW  r  rj   ellipsisr'   exc_val	exc_checkr  s              r3   r  r    s    3|/02D"1%HHHSMAJE1!4GYWQZE!}H$$SD!Y..h8E Er5   )r   r   r   r[   r   z++z--r   r   r   r   r   r   rQ   r   r   r   r   r   r   []()r  r)  r  c           	      *   | j                         }t        |       }| j                  dk(  r| j                          | j                  dk(  rJ| j                         }	| j                          t        | ||||||      }
t        j                  |	|
      }nt        | ||||||      }t        j                  ||      }n| j                  dk(  rP| j                          t        | ||||||      }t        j                  |t        j                  ||            }ni| j                  dk(  r;| j                          t        | ||||||      }t        j                  ||      }nd }| j                  dk(  ru| j                  }|rt        | j                         d       | j                          t        |       }|d	k7  rM| j                  d
k(  r>|r<| j                          t        |       }n |rt        | j                         d       d}d }| |j                  |r|j                  dz   |z   }|d	k(  r8|j                  dk(  r(|r%| j                  }|D cg c]	  }|dv sd c}r| j                          |dk(  r| j                  d       d}np|dk(  r| j                  d       d}nW|dv r%| j                  |k(  r|dz  }| j                          n.| j                  d
k(  r|| j                  z  }| j                          |t         vr| j                  d|z  d       ||z  }nG|dk(  rB| j                  }|t         vr| j                  d|z  d       |dz   |z   }| j                          t        j"                  ||||      }||_        |S c c}w )Nr   r  )r   r  r  r  r  )rW  r  r   rH   zDeclarator should be emptyr   r)  zEmpty declaratorr  ::externz+-*/<=>!%&|([^~,r!   r   r   r  r  r\  r  )r   r   r   r   r$   z,Overloading operator '%s' not yet supported.Fr   )rN   r  default)rV   r  rI   rK   rJ   r   r   CConstDeclaratorNodeCPtrDeclaratorNodeCReferenceDeclaratorNoder   r  rp   rB   r>   ro   supported_overloaded_operatorsr  r  )rL   r7   r   r  r  r  r  rW   r  	const_pos
const_baserW  r   rz  rN   r  rX   r}  s                     r3   r  r    sD   
**,C-a0tts{	:: 

IFFH'3186B4>2:	<J
 --i
KD!!S%71=/9hPD ))#	
	aew-9+5(L ))#++C 
	aew-9+5(L //DA447?::Dajjl$@AFFHNEz!addckjQiajjl$67DE=S]]68MMD(4/E:#..H"<B9a&8!899HHSMB3YHHSMB//ADDBJ!GBFFHTTS[!$$JBFFH;;GGJRO"'  )
wZZ;;GGJRO"'  )czB**3#7 2FM; :s   	N#Nc                 b    | j                   dk(  r | j                  dk(  r| j                          yy)NrH   r'   r!   r   rI   rJ   rK   rw   s    r3   r  r  o  s'    ttw1::0	r5   c                 f    | j                   dk(  r"| j                          | j                  d       yy)Nr
  r0  r!   r   )rI   rK   expect_keywordrw   s    r3   r  r  v  s*    ttv~		r5   c                 B   d }d}| j                   dk(  r%| j                  dk(  r| j                          d}||fS | j                   dk(  rT| j                          | j                   dk(  rd}| j                          ||fS | j                   dk(  rd}| j                         d	   }| j                          | j                   dk(  rh| j                  }|d
k(  r7| j                         d	   |dz   k(  rt	        | j                         d       ||fS t        | |      }| j                          ||fS | j                   dk(  r5t        j                  | j                         d      }| j                          ||fS | j                   dk(  rd}| j                          t        |       }||fS )Nr   rH   noexceptFr  r   r!   r   r$   r'   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r*  r   )	rI   rJ   rK   rV   r   r  r   r  rp   )rL   r  r  plus_char_posrN   s        r3   r  r  ~  s   GIttw1::3		8 I7 
		443;IFFH. I- TTS[IJJLOMFFHttwzz7?zz|A-!*;;ajjl GH I %QoGFFH I #,,QZZ\F I	 tts{	QiGIr5   )r   r  r  r   rg   c                     g }|}| j                   t        vrX|j                  t        | ||||||             | j                   dk7  r	 |S | j	                          d}| j                   t        vrX|S )N)r  kw_onlyri   rQ   r   )rI   c_arg_list_terminatorsrR   p_c_arg_declrK   )	rL   r7   	in_pyfuncr  r  r  ri   rj   r  s	            r3   r  r    s{     DK
$$,
,LCK+w!# 	$ 443; K 	
 $$,
, Kr5   c                 :    | j                   dk(  rt        |        yy)Nr  r!   r   )rI   rn  rw   s    r3   r  r    s    tts{r5   c                    | j                         }dx}}	d }
d }| j                  rt        j                  |d g dddd|d 	      }nt	        | ||      }t        | ||      }| j                  dv r| j                  sw| j                  }| j                          | j                  dk(  r | j                  dk(  r| j                          n| j                  d       |st        |d|z         |d	k(  }	|d
k(  }|r*| j                  dk(  r| j                          t        |       }| j                  dk(  r| j                          d|j                  v r[| j                  dv r&t        j                  |      }
| j                          n2d|j                  v rt        |       }
nt        |d       nt        |       }
t        j                  |||||	|
||      S )Nr   r  r  )r   r   rH   r  zExpected 'None'z*'%s None' only allowed in Python functionsr   r   rg   r)  r  )r   r   r&   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  r  r  )rV   r   r   r  r   r   rI   rK   rJ   r   rp   r=   r   rs  	modifiersCArgDeclNode)rL   r7   r  r  r  r  ri   rW   r  r  r  r  r   r   r  s                  r3   r  r    s   
**,CHwGJ--cr!A&D	:	 "!\hG	38<Jtt}Q%5%5tt	447?qzzV3FFHGG%&#CdJK$,5=QTTS[	AY
tts{	CIIttz!#,,S1S]]* )cXYQiGc r5   c                 b    | j                   dk(  r | j                  dk(  r| j                          yy)NrH   r(   r!   r   r  rw   s    r3   p_apir    s'    ttw1::.	r5   c                    | j                         }t        | |j                        |_        |j                  xs t	        |       |_        |j                  r'|j                  dvrt        |d|j                  z         |j                  dk(  r| j                  dk(  rt        | ||      S | j                  dk(  r| j                          t        | ||      S t        |       r+d|_
        |j                  rt        |d       t        | |      S | j                  dk(  r$|j                  rt        |d       t        | |      S | j                  d	k(  r?|j                  d
vrt        |d       |j                  rt        |d       t        | ||      S | j                  dk(  r| j                  dk(  rt!        | ||      S | j                  dk(  r`| j                  t"        v rN|j                  d
vrt        |d       |j                  r| j                  dk7  rt        |d       t%        | ||      S | j                  dk(  r| j                  dk(  rt'        | ||      S t)        | ||      S )N)r,   publiczCannot combine 'api' with '%s'r  r   r  r!   z$cdef blocks cannot be declared cpdefrg   r  r[  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefrH   r  z/C struct/union/enum definition not allowed herer  z'C struct/union cannot be declared cpdeffused)rV   p_visibilityr>   r(   r  r   rI   p_cdef_extern_blockrK   r  r'   rA   p_cdef_blockr=   p_c_class_definitionrJ   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionr7  )rL   r7   rW   s      r3   ri  ri    s   
**,C!!S^^4CNgg!qCG
ww>>!66#7#..HI(""1c3//	
		"1c3//		??#=>As##	
??#=>As##	
9944#CD??#AB#AsC00	
QZZ:5%ac22	
QZZ+<<9944#HI??zzV#cDEQS))	
QZZ72!!S#..*1c377r5   c                 (    t        |  |d            S )Nr!   )r?   )r  r}  s     r3   r  r    s    1ca())r5   c                    |j                   rt        |d       d }| j                  d       | j                  dk(  r| j	                          nt        | d      d   } |dd      }| j                  d	k(  r$| j	                          t        | d      d   |_        t        |       rd|_	        t        | |d
      \  }}t        j                  |||||j                        S )Nz+cdef extern blocks cannot be declared cpdefr   r   r~  r$   r!   r  )r?   r>   rB   T)include_fileverbatim_includer@  rB   )rA   r   ro   rI   rK   r  rJ   rB   r  r'   r|  r   CDefExternNode)rL   rW   r7   r%  r&  r@  s         r3   r  r  "  s    
c@ALHHVtts{	'3/2
!(
3Czz[ 	(C03qz	 4AsDAd#+MM	# #r5   c                    | j                          | j                  dk(  rH| j                  }| j                          t        |       }|#|j                  |j                  dz   |z   }nd }d }d }| j                  d       g }| j                  dk7  rt        | ||       nZ| j                          | j                          | j                  dvrt        | ||       | j                  dvr| j                          t        j                  |||||j                  |j                  |j                  |j                  |j                  dk(  	      S )NrH   r  rg   r  rw  r\  )rN   r  rf  r@   r>   create_wrapperr(   in_pxd)rK   rI   rJ   r  rB   ro   p_c_enum_liner6  r8  r   rn  r@   r>   rA   r(   r=   )rL   rW   r7   rN   r  rf  s         r3   p_c_enum_definitionr,  ;  s   FFHttwzz	A=S]]6MMD(4/EEHHSMEttyae$		dd++!S%( dd++	D%''cnngg		\ 9	; ;r5   c                    | j                   dk7  rYt        | ||       | j                   dk(  rM| j                          | j                   dv rn.t        | ||       | j                   dk(  r<n| j                          | j                  d       y )Nr  rQ   r  zSyntax error in enum item list)rI   p_c_enum_itemrK   r  )rL   r7   rf  s      r3   r+  r+  X  sp    ttv~ae$ddckFFHtt))!S%(	 ddck 	
56r5   c                 8   | j                         }t        |       }t        |       }||j                  |j                  dz   |z   }d }| j                  dk(  r| j                          t        |       }|j                  t        j                  ||||             y )Nr  r)  )rN   r  r+  )
rV   rO   r  rB   rI   rK   rp   rR   r   CEnumDefItemNode)rL   r7   rf  rW   rN   r  r+  s          r3   r.  r.  d  s    
**,C1:DNE}2$t+Etts{	q		LL''UE3 4r5   c                    d}| j                   dk(  rAd}| j                          | j                  dk7  s| j                   dk7  r| j                  d       | j                   }| j                          t	        |       }t        |       }||j                  |j                  dz   |z   }d }| j                  dk(  r| j                          | j                  d       | j                          g }t               }| j                  d	k7  rk| j                  d
k7  r+|j                  t        | | j                         |             n!| j                          | j                  d       | j                  d	k7  rk| j                          n| j                  d       t        j                   ||||||j"                  |j$                  |j&                  |j(                  dk(  |
      S )NFr  TrH   r  r  rg   r  rx  r  r  z*Syntax error in struct or union definitionr\  )	rN   r  r  
attributesr@   r>   r(   r*  r  )rJ   rK   rI   expectedrO   r  rB   ro   r6  r*   rR   r7  rV   r  r8  r   rm  r@   r>   r(   r=   )	rL   rW   r7   r  r  rN   r  r2  r9  s	            r3   p_c_struct_or_union_definitionr4  q  s   FzzX	447?ajjH4JJx ::DFFH1:DNE}2$t+Jtts{			
5ddhttv~!!/1::<JL   !56 ddh 	
	EF&&sU4j''cnngg		\ 9FL Lr5   c                    |j                   dvrt        |d       | j                          t        |       }| j	                  d       | j                          | j                          g }| j                  dk7  rZ| j                  dk7  r|j                  t        |              n| j                          | j                          | j                  dk7  rZ| j                          |st        |d       t        j                  |||      S )z5
    c(type)def fused my_fused_type:
        ...
    r[  z&Fused type definition not allowed hererg   rx  r  zNeed at least one type)rN   types)r=   r   rK   rO   ro   r  r6  rI   rR   r   r8  r   FusedTypeNode)rL   rW   r7   rN   r6  s        r3   r"  r"    s     yy00c;<FFH1:DHHSMOOE
$$(
446>LLq)*FFH	 $$(
 OOc+,sU;;r5   c                 T    | j                   dk(  rt        | ||      S t        | ||      S )Nr  )rJ   r,  r4  )rL   rW   r7   s      r3   r!  r!    s,    zzV"1c3//-ac::r5   c                     | j                         }|}| j                  dk(  rN| j                  dv r@| j                  }|dk7  r||k7  r| j                  d|d|dd       | j	                          |S )	NrH   )r  r  readonlyr,   z Conflicting visibility options 'z' and ''Fr  )rV   rI   rJ   r   rK   )rL   prev_visibilityrW   r>   s       r3   r  r    sn    
**,C Jttw1::)IIZZ
i'J/,IGG"J07<  >	r5   c                     | j                   dk(  r9| j                  dv r+| j                  }| j                          |gt        |       z   S g S )NrH   )r&   )rI   rJ   rK   p_c_modifiers)rL   modifiers     r3   r>  r>    sA    ttw1::4::	zM!,,,Ir5   c                    |j                   dv }t        |       }t        | d|j                        }t	        |  ||      |dd      }|j
                  |_        | j                  dk(  r1| j                  dk(  r"|j                   dk(  r| j                          d}nd	}| j                  d
k(  r.| j                  dd       | j                          t        |        | j                  dk(  r|j                   dvr|j                  s| j                  d       t        | t        d            \  }}	t        j                  ||j                  |||	|||j                   |j
                  |
      }
|
S |r||_        |g}| j                  dk(  rQ| j                          | j                  dk(  rn1t	        | ||dd      }|j%                  |       | j                  dk(  rQ| j&                  dz   }| j)                  dd       |j                   dv r| j&                  |k(  rt+        |       }nd }t        j,                  ||j                  |||j                   dv ||j                   ||j
                  	      }
|
S )N)r_  ra  r!   r  )r  )r  r  r  rH   r  	cpp_classr   ->z~Return type annotation is not allowed in cdef/cpdef signatures. Please define it before the function name, as in C signatures.Fr  rg   )r  r_  r\  ra  rA  z&C function definition not allowed hererS  r=   )	r>   r   r   r@  r  r  r(   rA   is_const_methodrQ   r  z&Syntax error in C variable declarationTr  )r\  ra  )r>   r   declaratorsr*  r  r(   r  rA   )r=   r>  r   rC   r   rA   rI   rJ   rK   r   rp   r|  r*   r   rj  r>   r(   rD  rR   r  r  r  rk  )rL   rW   r7   r  r  r   r   rD  r  suiter   rE  doc_lines                r3   r7  r7    s<   99 ::La IaA3==II3#;L-.1>J __Jttw1::0SYY+5M	ttt|	M 	 	 	
q	tts{99[[dgdqdqGG<=+As/DE
U##C!#!''//-	/L M3 )8J&!lddckFFHtty '3|561FJz* ddck <<!#	ATXY9922q||x7Oq/CC""3!%YY"??''!//+ Mr5   c           	      B   | j                         }| j                          t        | |j                        }t	        |       } |d|      }|rd|_        | j                  dk(  rt        | ||      S | j                  dk(  r| j                  t        v rt        | ||      S | j                  dk(  r| j                  dk(  rt        | ||      S t        | d      }t        | |dd      }| j                  dd	
       t        j                   ||||||j"                  dk(        S )Nr!   )r@   r>   r  rH   r  r  )r  r  z"Syntax error in ctypedef statementTr  r\  )r   r   r>   r(   r*  )rV   rK   r  r>   r  r(   rI   r  rJ   r   r!  r"  r   r   r  r   CTypeDefNoder=   )rL   r7   rW   r>   r(   r   r   s          r3   rg  rg    s   
**,CFFHa0J
(C
QZ
8C
ttw#AsC00	
QZZ+<<QS))	
QZZ72!!S#..!!2	#AsaAF
	=PTU!!Y##3YY,.	0 	0r5   c                 N   g }| j                   dk(  r| j                         }| j                          t        | d      d   }|j	                  d      }t        j                  || j                  j                  |d               }|dd  D ]3  }t        j                  || j                  j                  |      |      }5 | j                   d	k(  rt        | |      }|j                  t        j                  ||
             | j                  d       | j                   dk(  r|S )Nr   r   r  r$   r  r  r!   )r"  r!  r   )	decoratorz"Expected a newline after decorator)rI   rV   rK   r  splitr   r  r^   r0  r$  r  rR   r   DecoratorNoder  )rL   r  rW   	decstringrS   rK  rN   s          r3   rh  rh  (  s   J
$$#+jjl	!!215	$&&s1I1I%PQ(1ST	!"I 	ND!//qyy77=9NI	N 443;q),I%--cYGH	=> $$#+ r5   c                 v    | j                   dk(  r)|t        v r!| j                  d|z  d       t        |       S |S )zqStep over incorrectly placed cdef modifiers (@see _CDEF_MODIFIERS) to provide a good error message for them.
    rH   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.Fr  )rI   r   r   rO   )rL   rN   s     r3   _reject_cdef_modifier_in_pyrP  :  s=     	ttw4?2	fimmuz{qzKr5   c                    | j                         }|r| j                          | j                          t        | t	        |             }| j                  dd| j                  dk(  r| j                  n| j                  z         t        | d      \  }}}| j                  d       t        | | j                         d }| j                  dk(  r1| j                          t        |       }t        | | j                         t        | t        d            \  }	}
|r| j                          t        j                  ||||||	|
|||	
      S )
Nr   z~Expected '(', found '%s'. Did you use cdef syntax in a Python declaration? Use decorators and Python type annotations instead.rH   r   )rh   rB  rS  rC  )	rN   rj   rk   rl   r  r@  r  r  return_type_annotation)rV   enter_asyncrK   rP  rO   ro   rI   rJ   rn   rp   r|  r*   
exit_asyncr   DefNode)rL   r  r  rW   rN   rj   rk   rl   rR  r  r@  s              r3   r  r  D  s   
**,C	FFH&q'!*5DHH	>$$'/AJJqtt	56
 $1s#C D(LHHSM1::.!ttt|	!'#Aqzz2&q#J*?@IC	==$TH<dz57 7r5   c           	         t        | dd|      }d }d }| j                  dk(  r| j                          | j                  dk(  rt        | |      }| j                  dk(  r0| j                          |j	                  t        | ddd|             n | j                  |k7  r| j                  d       | j                  d	k(  r| j                          t        | |      }| j                  dk(  r| j                          |||fS )
Nr!   )r  r  ri   r   rH   )ri   rQ   )r  r  r  ri   z-Syntax error in Python function argument listr  )r  rI   rK   p_py_arg_declrH  r   )rL   rh   ri   rj   rk   rl   s         r3   rn   rn   d  s    q$-/DHLtts{	447?$Q)<H443;FFHKKQA'(A9N OTTZGGCDttt|	$Q)<tts{	(L))r5   c                     | j                         }t        |       }d }|r*| j                  dk(  r| j                          t	        |       }t        j                  |||      S )Nrg   )rN   r  )rV   rO   rI   rK   rp   r   PyArgDeclNode)rL   ri   rW   rN   r  s        r3   rW  rW  z  sO    
**,C1:DJQTTS[	AY
s4jIIr5   c                    | j                         }| j                          t        t        |             }| j                  |_        d }d }| j                  dk(  r t        | d      \  }}t        |||      \  }}|t        j                  |g       }t        | t        d            \  }}	t        j                  ||||||	|| j                  j                   dk\        S )	Nr   Fr4  r=  r  rC  r%   )rN   basesr6  r  r@  r  force_py3_semantics)rV   rK   r   rO   r  r"  rI   r;  rQ  r   rC  r|  r*   r   PyClassDefNoder^   r  )
rL   r  rW   
class_namerM  rK  r5  r6  r  r@  s
             r3   ro  ro    s    
**,CFFHwqz*J++JILtts{(9!%(P%":3Q]"^	<''"5	&q#G*<=IC*!dzII449; ;r5   c                    | j                          g }t        |       }| j                  dk(  r<| j                          |j                  |       t        |       }| j                  dk(  r<|r|j                  dk7  rt        |d       |r:| j                  dk(  r+| j                  dk(  r| j                          t        |       }n|}d }d }d }d }	| j                  dk(  r3t        | d      \  }
}|r| j                  d	       t        ||
|      \  }}|t        j                  |g 
      }| j                  dk(  rC|j                  dvr&|j                  st        | j                         d       t        |       \  }}}	| j                  dk(  r.|j                  dk(  rd}nd}t        | t!        |            \  }}n| j#                  d       d }d }|j                  dk(  r|st        |d       |rt        |d       n}|j                  dk(  r|st        |d       |s^t        |d       nQ|j                  dk(  r)|j                  r6|st        |d       |s&t        |d       nt        |d|j                  z         t%        j&                  ||j                  |j(                  |j                  dj+                  |      ||||||	|j                  dk(  ||      S )Nr  r  z6Qualified class name only allowed for 'extern' C classrH   r  r   Fr[  z$C classes cannot take keyword bases.r=  r  )r  r  zBName options only allowed for 'public', 'api', or 'extern' C classrg   r\  ra  r_  rC  z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classr  z>Object struct name specification required for 'public' C classz<Type object name specification required for 'public' C classr,   z;Object struct name specification required for 'api' C classz9Type object name specification required for 'api' C classzInvalid class visibility '%s')r>   r@   r(   r  r_  r  r\  objstruct_nametypeobj_name
check_sizer*  r  r@  )rK   rO   rI   rR   r>   r   rJ   r;  rQ  r   rC  r(   rV   p_c_class_optionsr=   r|  r*   r  r   rl  r@   r  )rL   rW   r7   r  r_  r  ra  rb  r\  rc  r5  r6  r  
body_levelr  r@  s                   r3   r  r    s   FFHKJ
$$#+	:&QZ
 $$#+ s~~1cKLqttw1::+=	!*NLEJtts{(9!%(P%GG:;+C,Oq}##Cb1tts{>>!55cgg!**, de3DQ3G0jtts{99$&J"J*1c
.CD	T	=>
~~!#BC#XY	8	##WX#UV	9	$77!cXYcVWc2S^^CDs^^''gghh{+'#l* r5   c                    d }d }d }| j                  d       	 | j                  dk7  rn| j                  dk(  r| j                          t	        |       }nm| j                  dk(  r| j                          t	        |       }nB| j                  dk(  r3| j                          t	        |       }|dvr| j                  d|z         | j                  dk7  rn| j                          | j                  d	d
       |||fS )Nr  rH   objectr4  rc  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrQ   r\  z)Expected 'object', 'type' or 'check_size')ro   rI   rJ   rK   rO   r   )rL   ra  rb  rc  s       r3   rd  rd    s    NLJHHSM
447?::!FFH$QZNZZ6!FFH"1:LZZ<'FFH J!<<IJVW443;	! " HHS=><33r5   c                     | j                         }| j                          t        |       }t        | t	        d      d      \  }}t        j                  ||||      S )Nr`  rC  Trz  )rN   r  r@  )rV   rK   rO   r|  r*   r   PropertyNode)rL   rW   rN   r  r@  s        r3   rp  rp    sP    
**,CFFH1:D&	3Z 6ICc#DAAr5   c                     | j                   dk(  rE| j                         }t        |       }| j                  dd       t	        j
                  ||      S y)zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    r|  zSyntax error in stringTr  r   N)rI   rV   r  r  r   r   )rL   rW   string_nodes      r3   rq  rq  
  sN     	tt~jjlQi	1DI!!#K88r5   c                     | j                   dk(  rF| j                         }t        |       \  }}}| j                  dd       |dv r|S t	        |d       |S y )Nr|  zSyntax error in doc stringTr  r  2Python 3 requires docstrings to be unicode strings)rI   rV   r  r  r   )rL   rW   r  bytes_resultunicode_results        r3   r  r    s`    tt~jjl-A!-D*lN	5M9!!IJr5   c                    d}| nt        | t        j                        rD| j                  j                  r| j                  }t        j
                  | j                  g       } nzt        | t        j
                        r`| j                  rT| j                  }t        |d   t        j                        r+|d   j                  j                  r|d   j                  }|d= |d}|| fS t        |t        j                        r&t        | j                  d       |j                  }|| fS t        |t        j                        r|j                  }||j                  }|| fS |j                  }|| fS )z
    Extract a docstring from a statement or from the first statement
    in a list.  Remove the statement if found.  Return a tuple
    (plain-docstring or None, node).
    Nr  r   ro  )r   r   r   rt   is_string_literalr  rW   r  r   r  r   r+  r  r  )r   doc_noder  r  s       r3   r  r  #  sA    H|	D%,,	-99&&yyH%%dhhb9D	D%,,	-$**

eAh 2 23Qx}}.. 8==!H 9 
Hi11	2D	Fnn 9 
Hi22	3$$;..C 9 nn9r5   c                     t        |  ||      d      }| j                  dk7  r>| j                  dt        | j                        dt        | j                        d       |S )NrC  r!   rE  r  Syntax error in statement [rQ   r\  )r#  rI   r   r  rJ   )rL   r=   r7   r@  s       r3   p_coderw  F  sL    As51QGDttu}	JQZZ(* 	+Kr5   z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c           
         i }| j                   dk(  r| j                         }t        | j                        }|r|j	                  d      j                         }	 t        j                  |d      }|D ]D  }||vr||   ||   k(  rt        |d|       #| j                  d	|d
||   d||   |       F d|v r| j                  j                  |d          |j                  |       | j                          | j                   dk(  r|S # t        $ r;}| j                  |j                  d   d       | j                          Y d }~Jd }~ww xY w)Ncommentliner!   T)ignore_unknownr   Fr  zDuplicate directive found: z3Conflicting settings found for top-level directive z: z and r(  r  )rI   rV   !_match_compiler_directive_commentrJ   r  r   r   parse_directive_list
ValueErrorr   rj   rK   r   r^   set_language_levelr0   )rL   r   rW   mdirectives_stringnew_directiveserN   s           r3   p_compiler_directive_commentsr  R  sH   F
$$-
jjl-ajj9 !
 0 0 2!(!=!=>O`d!e ' Lv%#D)VD\9CD!JKGGfTlN4,@BGJ  LL  >1		,,^<L-MNMM.)	7 $$-
8 M+  q	/s   D 	E0EEc                 J   | j                         }t        |       }d| _        | j                  j                  h| j                  j                  d       |d   j                  r>dd l}|j                  d|d   j                  z  t        t        j                  rdnd       t        |       }|rd}nd}t        |  ||	      d
      }	| j                  dk7  r>| j                  dt!        | j                        dt!        | j"                        d       t%        |||	||      S )NFr$   r   zoCython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: %sr!   )
stacklevelr\  r  rC  rE  r  rv  rQ   r\  )r  r@  full_module_namedirective_comments)rV   r  r  r^   r  r~  filenamewarningsri  FutureWarningcythoncompiledr  r#  rI   r   r  rJ   r   )
rL   r  r  r7   rW   r  r  r  r=   r@  s
             r3   p_moduler  s  s    
**,C6q9Ayy'			$$Q'q6??MM@BEa&//R &1Q	   q/C
As/1EDttu}	JQZZ(* 	+cT)9+=? ?r5   c                     t        |       }| j                  dk(  r(| j                  d       | j                  d       d}||fS d}||fS )Nr)  r   FT)rO   rI   ro   )rL   rN   requireds      r3   p_template_definitionr    sN    1:Dtts{		 > >r5   c           
         | j                          g }t        |       }t        |       }||j                  |j                  dz   |z   }| j                  dk(  rt        |d       | j                  dk(  r| j                          t        |       g}| j                  dk(  r:| j                          |j                  t        |              | j                  dk(  r:| j                  d       |D cg c]  \  }}|	 }	}}nd }d }	| j                  dk(  r{| j                          t        | |	      g}
| j                  dk(  r<| j                          |
j                  t        | |	             | j                  dk(  r<| j                  d	       ng }
| j                  dk(  rt        | j                         d
       t        |       }| j                  dk(  r| j                          | j                  d       | j                          g }t        |j                  d|xs |j                        }|	|_        | j                  dk7  r\| j                  dk7  r|j                  t#        | |             n!| j                          | j%                  d       | j                  dk7  r\| j'                          nd }| j%                  d       t)        j*                  ||||
|j                  |j,                  dk(  ||      S c c}}w )Nr  r  z*Qualified class name not allowed C++ classr  rQ   r\  r   r  r   z&Name options not allowed for C++ classrg   r  rA  )r>   r=   r'   rx  r  r  z$Syntax error in C++ class definitionr\  )rN   r  base_classesr>   r*  r2  rC   )rK   rO   r  rB   rI   r   r  rR   ro   r   rV   r  r6  r*   r>   r'   rC   p_cpp_class_attributer  r8  r   CppClassNoder=   )rL   rW   r7   r  r_  r  rC   rN   r  template_namesr  r'   r2  r9  s                 r3   r  r    ss   FFHKJNE}2$z1tts{c?@tts{	*1-.	ddckFFH2156 ddck 	
5>?>4$??	tts{	%a^DEddckFFHa^ LM ddck 	
tts{ajjlDEAJEtts{			
CNN+UM_VYV_V_`+ddhttv~!!"78"DE  !56 ddh 	

	?@c#^^l* C @s   .K4c                    d }| j                   dk(  rt        |       }| j                  dk(  rt        | | j	                         |      S | j                  dk(  rt        | |      S | j                   dk(  rW| j                  t        v rE| j                  dk7  rt        | | j	                         |      S t        | | j	                         |      S t        | | j	                         |      }|t        j                  t        j                  t        j                  f}|j                  r#|t        j                  t        j                  fz  }t!        ||      s| j#                  d       ||_        |S )Nr   r  rZ  rH   r  r  )rI   rh  rJ   r  rV   rg  r   r!  r7  r   rj  rk  rl  rD   rm  rn  r   r   r  )rL   r7   r  r   rs  s        r3   r  r    s!   Jtts{!!_
zzZ%as;;	
z	!#As++	
QZZ+<<::)!QZZ\3?? AJJL#66*1ajjlC@!$$e&7&79L9LLC..u22E4F4FFFdC(QR(DOr5   c                    d|z  }|r|| j                  |       |r| j                  d|z         t        |      }|t        u r`| j                  d|d   d|d   d       t        dt	        |            D ]  }t        | ||   |dz           | j                  d	|z         y t        |t        j                        rn	 |j                  }| j                  |d|j                  d       |j                  j                         D ]"  \  }}	|d
k7  s|dk7  st        | |	|dz   |       $ y |t         u rR| j                  d       t        t	        |            D ]  }t        | ||   |dz           | j                  d|z         y | j                  ||d       y # t        $ r |j                  j                  }Y w xY w)Nz  z%s: r   r   z @ r!   r  r$   z%s)
tagrW   z[
z%s]
)writer4  rE  ranger2  print_parse_treer   r   Noder  r  r  r:   rW   r/   rf  rB  )
r  r   r=   r?  indtr  r  rN   r+  s
             r3   r  r    s   
,C	GGFSL!J:GGDGT!W561c$i( 6 DGU1W56GGGcM"ejj).hh GG312#}}224 >e5=TU]$QuQw=> $YGGEN3t9% 6 DGU1W56GGGcM"GGT"# " .nn--.s   >F F>=F>rE   )zExpected an identifier)T)NN)r~  r.   )r   )F)r   r   N)r   r   r   r!   )NF)r   r!   )r!   )r  r   r  rP  rg  r  rE  ior   r   r   unicodedatar   r
   r    r   	functoolsr   r   Scanningr"   r	   r#   r  r   r   r   r   r   r   r   r   r   Errorsr   r   r   r   r   version_infor   
maxunicoder   r   r*   rO   rT   rY   re   ru   rx   rp   rq   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;  rQ  r  r#  r]  re  rh  rn  r_  rp  r  r  r  r  r  r  r  r  r  compiledecoder  r   r   r	  r  r  r  rA  r9  r?  r  r  rf  r<  r   rl  r  r3  rd  rt  rw  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  rF  r  r  r  r  r  r  r  r  r*  r.  r  r-  rG  rJ  rM  rR  rX  ru  r#  r  r|  r  r   r  r  r  r  r  r  r  r  r  r   r  r  r  r  rR  r  r  r  r   r  r  r   r  r  r   r  r  r  r  r  r  r  r  r  ri  r  r  r,  r+  r.  r4  r"  r!  r  r>  r7  rg  rh  rP  r  rn   rW  ro  r  rd  rp  rq  r  r  rw  r{  r  r  r  r  r  r  r  s   0r3   <module>r     s   '   &V &v &V &#&4:&$*&?E&X^& & '-& 5;& EK& 	& +1	& 9?	& JP	& Y_	&
 &
 %&
 ?E&
 ci& & '-& 7=kk& V\U`U`&  %&  	 
 R % P P     J J " "   


1

"NNf, ,& 0 ,1
 78

&  S * & /
/
1
7
/
A
&:(5,?F,(F
',01f'#T
Z"(	" 
1=5~2@.&R),X7c.L+(@  %8!$ 	% 9C

W		 fZ#9"  %#9  8! 4 4*,,^xSD/<("jZ\3
B "6>>#s ,( () * 02,W^,8.6/#$'4*:!0HNb %fnnS#.J*KL 
&
S
A 'sC0G,HI 
<'	#()V7 &v~~c3/E+FG  e260<'*a6D0 D!F#6cXL6$ 5 B.6)p^ *6>>3	46 :Ob2"** J&PC	 $V^^?	@B  't
. 
  )&..4	57  '	
 !"  #FNN2	35   E1! !a01!FIE  "0S : 6 " Tl"H (S1K-LM %Qq()QA  BC*+2h'8R*#2;:
74"LH <D;	>@02$7@*,J;.IX44B	
 F c  %3FNN6:2::+<--2U%4 !B ,/ ?>9v>$uW8!s   <T-