
    ڏDjw                    `+   d dl Z  e j                  d"i 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 dlmZ d dlZd dl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 dd#lmZmZ dd$l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*Z" e j                  e# e#d+            Z$ G d, d-      Z%e jL                  d#d.efd/       Z'e jL                  d.efd0       Z(e jL                  d.ed1efd2       Z)d.efd3Z*e jL                  d.efd4       Z+e jL                  d.efd5       Z,e jL                  d.efd6       Z-e jL                  d.efd7       Z.d8d9d:Z/e jL                  d.efd;       Z0d.efd<Z1e jL                  d.efd=       Z2e jL                  d.efd>       Z3e jL                  d.efd?       Z4e jL                  d.efd@       Z5e jL                  d.efdA       Z6e jL                  d.efdB       Z7e jL                  d.efdC       Z8e jL                  d.efdD       Z9 e j                  e# e#dE            Z:e jL                  d.efdF       Z;e jL                  d.efdG       Z<e jL                  d.efdH       Z=e jL                  d.efdI       Z>e jL                  d.efdJ       Z?e jL                  d.efdK       Z@e jL                  d.efdL       ZAe jL                  d.efdM       ZBe jL                  d.efdN       ZCe jL                  d.efdO       ZDe jL                  e$fd.edPe#fdQ       ZEe jL                  d.efdR       ZFe jL                  d.efdS       ZGe jL                  d.efdT       ZHe jL                  d.efdU       ZIe jL                  d.efdV       ZJe jL                  d$d.edXe j                  d1efdY       ZLe jL                  d1efdZ       ZMe jL                  d.efd[       ZNe jL                  d.efd\       ZOe jL                  d.ed1efd]       ZPe jL                  d.ed1eQfd^       ZRe jL                  d.efd_       ZSe jL                  d.efd`       ZTe jL                  d1eQfda       ZUe j                  d%db       ZWe jL                  d.efdc       ZXe jL                  d.efdd       ZYe jL                  d.efde       ZZe jL                  d.efdf       Z[e jL                  d.efdg       Z\e jL                  dh        Z]e jL                  d.ed1efdi       Z^e jL                  d&d.edje_fdk       Z`e jL                  d1e j                  fdl       Zae jL                  d.edme j                  fdn       Zbe jL                  doe_d1e_fdp       Zce jL                  d'd.ed1efdq       Zde jL                  d.ed1e_fdr       Zee jL                  d.edme j                  dse j                  dte j                  d1eQf
du       Zge jL                  d.edme j                  dse j                  dve j                  dte j                  d1eQfdw       Zhe jL                  d.ed1efdx       Zie jL                  dye_d.efdz       Zje jL                  d.efd{       Zke jL                  d.efd|       Zle jL                  d.efd}       Zme jL                  d.efd~       Zne jL                  d.efd       Zoe jL                  d.efd       Zpe jL                  d'd.ed1eQfd       Zqe jL                  d'd.ed1eQfd       Zre jL                  d'd.ed1eQfd       Zse jL                  d.efd       Zte jL                  d.efd       Zue jL                  d.efd       Zve jL                  d.efd       Zw e j                  e# e#d            Zxe jL                  d.efd       Zye jL                  d.efd       Zze jL                  d.efd       Z{e jL                  d.efd       Z|e jL                  d.efd       Z}e jL                  d.efd       Z~e jL                  d(d.ede j                  fd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d)d.ede j                  fd       Ze jL                  d.ed1efd       Ze jL                  d.ede j                  d1efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d(d.ede j                  fd       Ze jL                  d*d.ede j                  de j                  d1efd       Ze jL                  d.efd       Ze jL                  d.efd       Z e j                  e# e#d            Ze jL                  d.ede_fd       Ze jL                  d.efd       Ze jL                  d*d.ede j                  de j                  fd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d(d.ede j                  fd       Ze jL                  d.ede j                  d1eQfd       Ze jL                  d.ede j                  d1efd       Ze jL                  d.efd       Ze jL                  d)d.ede j                  fd       Ze jL                  d)d.ede j                  fd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d(d.ede j                  fd       Ze jL                  d)d.ede j                  fd       Ze jL                   e%       fd.efd       Ze jL                  d(d.ede j                  d1efd       Ze jL                  d'd.ed1efd       Ze j                  d+d.ede j                  fd       Ze jL                  d.efd       Z e j                  e# e#dë            Ze jL                  d'd.efdĄ       Ze jL                  d'd.ede j                  fdń       Ze jL                  d.efdƄ       Ze jL                  d.ed1e j                  fdǄ       Ze jL                  d.efdȄ       Ze jL                  d.ed1e j                  fdɄ       Ze jL                  d.ed1e j                  fdʄ       Ze jL                  d.ed1e j                  fd˄       Ze jL                  d.ed1e j                  fd̄       Z e j                  e# e#dͫ            Z e j                  edddddddddќ      Z e j                  e# e#dҫ            Z e j                  e#eez   e#e      z        Z e j                  e# e#dӫ            Ze jL                  d.ed1efdԄ       Ze jL                  d.efdՄ       Ze j                   e%       ddddddfd.ede j                  de j                  de j                  de j                  de j                  de j                  fdۄ       Ze jL                  d.efd܄       Ze jL                  d.ede j                  fd݄       Z e j                  e# e#dޫ            Ze jL                  d.ede j                  de j                  de j                  de j                  de j                  fd߄       Ze jL                  d.ed1e j                  fd       Ze jL                  d.ed1e j                  fd       Ze jL                  d.ede j                  d1efd       Z e j                  e# e#d            Ze j                   e%       dddddWfd.ede j                  de j                  de j                  de j                  de j                  d1eQfd       Ze jL                  d.ed1e j                  fd       Ze jL                  	 	 	 d,d.ede j                  de j                  de j                  de j                  de j                  fd       Ze jL                  d.efd       Ze jL                  d.ed1e j                  fd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.edeQfd       Ze jL                  d.edeQfd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.ed1eQfd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.ed1eQfd       Ze jL                  d.efd       Ze jL                  d-d.edeQde j                  fd        Ze jL                  d.d.ede j                  de j                  d1efd       Ze jL                  d$d.ede j                  fd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.ed1efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d1efd	       Ze j                  de%fd.efd
       Z e j                  e ej                  d      j                        Ze jL                  d.ed1efd       Ze j                  e%fd.efd       Ze jL                  d.ed1efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.efd       Ze jL                  d.ed1efd       Ze jL                  d.efd       Ze j                  d'd e j                  fd!       Zy(/      NNodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharFutureOptionserrorwarningBuiltin
ModuleNodeUtils_unicode_bytesre_parse_escape_sequences_parse_escape_sequences_rawpartialreduce_CDEF_MODIFIERSCOMMON_BINOP_MISTAKES)StringIO)lookup)r   r      )PyrexScannerr   tentatively_scan)r   )r   )MatchCaseNodes)r   )r   )r   r   )r   )r   r   CompileError   )r   )r
   )r   )inlinenogilapi);NEWLINEEOFc                   @    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privateFNc                 :    | j                   j                  |       y N)__dict__update)selfkwdss     [C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/Parsing.py__init__zCtx.__init__6   s    T"    c                     t               }|j                  }|j                  | j                         |j                  |       |S r-   )r)   r.   r/   )r0   r1   ctxds       r2   __call__zCtx.__call__9   s2    eLL		
r4   )__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr$   overridabler#   	namespace	templatesallow_struct_enum_decoratorr3   r8    r4   r2   r)   r)   )   s?    EJIL
CKEII"'#r4   r)   sc                     | j                   dk(  r7| j                  j                  | j                        }| j	                          |S | j                  |       y NIDENT)sycontextintern_ustringsystringnextr   )rE   messagenames      r2   p_identrP   A   s?    ttwyy''

3		r4   c                    g }| j                   dk(  rv|j                  | j                  j                  | j                               | j                          | j                   dk7  r	 |S | j                          | j                   dk(  rv|S )NrH   ,)rI   appendrJ   rK   rL   rM   )rE   namess     r2   p_ident_listrU   K   sl    E
$$'/QYY--ajj9:	443;L 	
 $$'/ Lr4   returnc                 b    | j                         }| j                  }| j                          ||fS r-   )positionrI   rM   )rE   posops      r2   p_binop_operatorr[   \   s(    
**,C	
BFFHs7Nr4   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   r[   r   
binop_noder
   divisionrJ   future_directivestruedivision)rE   ops
p_sub_exprn1rZ   rY   n2s          r2   p_binop_exprrf   e   s    	AB
$$#+"1%C]!!#r2r29!))"="=="&"& $$#+ Ir4   c                     | j                         }| j                          | j                  dk(  rg }d x}}nt        | dd      \  }}}| j	                  d       t        |       }t        j                  |||||      S )N:F)
terminator	annotated)argsstar_argstarstar_argresult_expr)rX   rM   rI   p_varargslistexpectp_testr   
LambdaNode)rE   rY   rk   rl   rm   exprs         r2   	p_lambdefrt   u   s~     **,CFFHtts{"&&<'4#(0$hHHSM!9DDL r4   c                 \    t        |       }| j                  dk(  r| j                  d       |S )N:=zAinvalid syntax: assignment expression not allowed in this context)p_test_allow_walrus_afterrI   r   )rE   rs   s     r2   rq   rq      s+     %Q'Dttt|	STKr4   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   rt   rX   	p_or_testrM   rp   rq   r   CondExprNode)rE   rY   rs   r|   r*   s        r2   rw   rw      sz    ttx|
**,CQ<Dttt|	|	q	%%ctuUUr4   c                     t        |       }| j                  dk(  rb| j                         }|j                  s| j	                  dd       | j                          t        |       }t        j                  |||      S |S )Nrv   z=Left-hand side of assignment expression must be an identifierFfatallhsrhs)	rw   rI   rX   is_namer   rM   rq   r   AssignmentExpressionNode)rE   r   rX   r   s       r2   p_namedexpr_testr      si     $A
&Cttt|::<{{GGS[`Ga	Qi11(MMJr4   orand)z||&&c                 $    t        | dt              S )Nr   )p_rassoc_binop_expr
p_and_testrE   s    r2   r   r      s    q$
33r4   c                     ||       }| j                   |k(  rS| j                         }| j                   }| j                          t        | ||      }t	        j
                  ||||      }|S | j                   t        v rCt        | j                      |k(  r-t        | j                         d| j                   d|dd       |S )NzFound the C operator 'z%', did you mean the Python operator 'z'?r   r<   )rI   rX   rM   r   r   r^   r   r   )rE   rZ   	p_subexprrd   rY   re   s         r2   r   r      s    	1BttrzjjlTT	 B	2!!#r2r2 I 
&	&+@+F"+L

WXW[W[]_`	 Ir4   c                 $    t        | dt              S )Nr   )r   
p_not_testr   s    r2   r   r      s     q%44r4   c                     | j                   dk(  r@| j                         }| j                          t        j                  |t        |             S t        |       S )Nnotoperand)rI   rX   rM   r   NotNoder   p_comparisonrE   rY   s     r2   r   r      sB    ttu}jjl	  
1>>Ar4   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_opsrX   p_cmp_opr   PrimaryCmpNodep_cascaded_cmpcascade)rE   rd   rY   rZ   re   s        r2   r   r      sl    		Btt~jjla[A%%cbR944>!'*BJIr4   c                 L    | j                   dk(  rt        |       S t        |       S N*)rI   r   rq   r   s    r2   p_test_or_starred_exprr      s"    tts{a  ayr4   c                 L    | j                   dk(  rt        |       S t        |       S r   )rI   r   r   r   s    r2    p_namedexpr_test_or_starred_exprr     s#    tts{a  ""r4   c                     | j                         }| j                  dk(  rd}| j                          nd}t        |       }|rt	        j
                  ||      }|S )Nr   TF)rX   rI   rM   
p_bit_exprr   StarredUnpackingNode)rE   rY   starredrs   s       r2   r   r     sN    
**,Ctts{	a=D--c48Kr4   c                     | j                         }t        |       }t        |       }t        j                  |||      }| j
                  t        v rt        |       |_        |S )N)r   r   )	rX   r   r   r   CascadedCmpNoderI   r   r   r   )rE   rY   rZ   re   results        r2   r   r     sT    
**,C	!B		B&&s"&Ftt~'*Mr4   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   rM   rp   rE   rZ   s     r2   r   r   %  s{    ttu}			
	445=FFHBBTT		TzIr4   )
<>==>=<=r   r   r   r   r   c                 $    t        | dt              S )N)|)rf   
p_xor_exprr   s    r2   r   r   B      6:..r4   c                 $    t        | dt              S )N)^)rf   
p_and_exprr   s    r2   r   r   I  r   r4   c                 $    t        | dt              S )N)&)rf   p_shift_exprr   s    r2   r   r   P  s    6<00r4   c                 $    t        | dt              S )N)<<>>)rf   p_arith_exprr   s    r2   r   r   W  s    <66r4   c                 $    t        | dt              S )N+-)rf   p_termr   s    r2   r   r   ^  s    :v..r4   c                 $    t        | dt              S )N)r   @r]   %z//)rf   p_factorr   s    r2   r   r   e  s    5x@@r4   c                     t        |       S r-   )	_p_factorr   s    r2   r   r   l  s     Q<r4   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   rX   rM   r   	unop_noder   in_python_fileAmpersandNode
p_typecastrL   p_sizeofp_power)rE   rI   rZ   rY   args        r2   r   r   r  s    	
B	_TTjjl	""3HQK889**,CFFH1+C**3#>>3Ya= 7]qzzX5A;1:r4   c                 B   | j                         }| j                          t        |       }t        |t        j
                        }t        |t        j                  t        j                  t        j                  f      }|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 typeTempty?Fr   )base_type_noder   )	base_type
declaratorr   	typecheck)rX   rM   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderO   r   p_c_declaratorrI   rp   r   r   CythonArrayNodeTypecastNode)rE   rY   r   is_memsliceis_other_unnamed_typer   r   r   s           r2   r   r     s     **,CFFHa IY(E(EFK&y&&  3 
 0inn6L	.Jtts{			HHSMqkG((YPWXX!!#	 r4   c                 F   | j                         }| j                          | j                  d       t        |       r#t	        |       }t        j                  ||      }n0t        |       }t        | d      }t        j                  |||      }| j                  d       |S )N(r   Tr   r   r   ))
rX   rM   rp   looking_at_exprrq   r   SizeofVarNoder   r   SizeofTypeNode)rE   rY   r   noder   r   s         r2   r   r     s     **,CFFHHHSM q)&&sg>!!$	#AT2
''!
<HHSMKr4   statement_terminatorsc                    | j                         }| j                          d}| j                  dk(  rd}| j                          | j                  dk7  r'| j                  |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rY   r   r   )	rX   rM   rI   rq   
p_testlistr   r   YieldFromExprNodeYieldExprNode)rE   r   rY   is_yield_fromr   s        r2   p_yield_expressionr    s     **,CFFHMttv~	tts{qtt#88(fQijmGG=5  ***3C88&&s44r4   c                 Z    t        |       }t        j                  |j                  |      S )Nrs   )r  r   ExprStatNoderY   )rE   
yield_exprs     r2   p_yield_statementr    s%     $A&Jjnn:>>r4   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_statementrM   p_with_items)rE   r6   
decoratorss      r2   p_async_statementr    s     	ttu}CIIGG45))q*4@@		IJ	
q400	
	A--	DEr4   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  **)rL   peek
p_new_exprrI   rX   rM   p_atom	p_trailerr   AwaitExprNoder   r^   )rE   	await_posrd   rY   re   s        r2   r   r     s    zzUqvvx{g5!}IttwJJL			B
$$/
!q" $$/
!$$YB7ttt|jjl	a[!!#tR4Ir4   c                     | j                         }| j                          t        |       }t        | t	        j
                  ||            S )N)cppclass)rX   rM   r   p_callr   NewExprNode)rE   rY   r*  s      r2   r$  r$    s<     **,CFFHQH!Y**38DEEr4   c                     | j                         }| j                  dk(  rt        | |      S | j                  dk(  rt        | |      S | j	                          t        |       }t        j                  |||      S )Nr   r   obj	attribute)rX   rI   r+  p_indexrM   rP   r   AttributeNode)rE   node1rY   rO   s       r2   r&  r&    si    
**,Ctts{a	
q%  	qz&&s' 	'r4   Tallow_genexpc                    | 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 r9|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rY   Tr"  =z!Expected an identifier before '='valuerR   r  asyncr   r   )rM   rI   r   rX   rS   rq   r   r   rY   rJ   rK   rO   r   IdentifierStringNodelenp_genexprp   )	rE   r4  positional_argskeyword_argsstarstar_seenlast_was_tuple_unpackr   encoded_namekeywords	            r2   p_call_parse_argsrG  (  s    FFHOLM!
$$#+443;?QZZ\RFFH""6!9-$(!TTT\FFHq	* M"1%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L$9?#q(S1C-D-I$,Q0B10E$F#G"HHHSM"rdL00r4   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rk   r  r   rY   keyr:  r   T)key_value_pairsreject_duplicatesr   )rB  )r   listr   	TupleNodeAsTupleNoder   r   r^   tuplerS   DictItemNoderY   is_dict_literalextendrL  DictNoder?  MergedDictNode)rY   rA  rB  keyword_dictr   	subtuples	arg_tuplekwargs
dict_itemsitemrK  r:  s               r2   p_call_build_packed_argsr]  [  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   )functionrk   )r_  rA  rB  )	rX   rG  r?  r   rN  r   SimpleCallNoder]  GeneralCallNode)rE   r_  rY   rA  rB  rY  rW  s          r2   r+  r+    s     **,C$5a$8!O\C0A5*_UVEWY]:^''h_UVEWXX":3Q]"^	<(((ILZ 	Zr4   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stoprI  rc  index])
rX   rM   p_subscript_listr?  r   SliceIndexNodemake_slice_nodesrO  	IndexNoderp   )
rE   rc  rY   
subscriptsis_single_valuerd  re  r   indexesrg  s
             r2   r1  r1    s     **,CFFH"21"5J3z!}-2 mt))#t5 #3
3AJE''G<E$$S(HHSMMr4   c                     d}t        |       g}| j                  dk(  rPd}| j                          | j                  dk(  r	 ||fS |j                  t        |              | j                  dk(  rP||fS )NTrR   Frh  )p_subscriptrI   rM   rS   )rE   rn  itemss      r2   ri  ri    sq    O^E
$$#+	443;/!! 	[^$ $$#+ /!!r4   c                     t        | d      }| j                  dk7  r|gS | j                          t        | d      }| j                  dk7  r||gS | j                          t        | d      }|||gS )N)rh   rh   )rh   rR   rh  )p_slice_elementrI   rM   )rE   rd  re  steps       r2   rq  rq    sn    
 Av&Etts{wFFH1o.Dtts{t}FFH1o.D4r4   c                 6    | j                   |vrt        |       S y r-   )rI   rq   )rE   
follow_sets     r2   rt  rt    s     	tt:ayr4   c                 &    | j                  d       y )N...)rp   r   s    r2   expect_ellipsisrz    s    HHUOr4   c                     g }|D ]@  }t        |      dk(  r|j                  |d          &|j                  t        | g|        B |S )Nr   r   )r?  rS   make_slice_node)rY   rm  r   	subscripts       r2   rk  rk    sQ     F <	y>QMM)A,'MM/#:	:;	<
 Mr4   c                     |st        j                  |       }|st        j                  |       }|st        j                  |       }t        j                  | |||      S )N)rd  re  ru  )r   NoneNode	SliceNode)rY   rd  re  ru  s       r2   r|  r|    sW    ""3'!!#&!!#&sd41 1r4   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(  s|dk(  rt#        |       S |dk(  r5t%        |       }|&t'        | | j                        }| j                          |S | j)                  d       y )Nr   r   rI  yieldr   {`ry  INTFLOATr9  IMAGr;  BEGIN_STRINGBEGIN_FT_STRINGrH   z!Expected an identifier or literal)rX   rI   rM   r   rO  r  p_testlist_comprp   p_list_makerp_dict_or_set_makerp_backquote_exprrz  EllipsisNodep_int_literalrL   	FloatNodeImagNodep_atom_stringp_atom_ident_constantsp_namer   )rE   rY   rI   r   r:  s        r2   r%  r%    s   
**,C	
B	Sy	443;((R8FTTW_'*F$Q'F		sA	s"1%%	s""	u%%c**	uQ	w

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

3B	!!#u55	~	'8!8Q	w'*>Aqzz*FFFH	34r4   c                    | j                         }t        |       \  }}}|s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 |dk(  rt        j                  ||      S | j                  d	| d
       y )N)r:  bytes_valuecr9  ubfvaluestzinvalid string kind '')	rX   p_cat_string_literalr   UnicodeNodeCharNode	BytesNodeJoinedStrNodeTemplateStringNoder   )rE   rY   kindr  unicode_value	kind_chars         r2   r  r  '  s     **,C';A'>$D+}$$S;WW $IC!!#[99	c	$$S;WW	c	""3k::	c	&&s=AA	c	++CFF 	
'vQ/0r4   c                 X   | j                         }| j                  }|dk(  rt        j                  |      }nb|dk(  rt        j                  |d      }nE|dk(  rt        j                  |d      }n(|dk(  r"| j
                  st        j                  |      }ny| j                          |S )	z
    Returns None if it isn't a special-cased named constant.
    Only calls s.next() if it successfully matches a named constant.
    NoneTrueTr9  FalseFNULLN)rX   rL   r   r  BoolNoder   NullNoderM   )rE   rY   rO   r   s       r2   r  r  ?  s     **,C::Dv~##C(	##Ct4	##Cu5	 0 0##C(FFHMr4   c                    | j                         }t        j                  t        | 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 )N r;  UuLlLlLUTLL   z4illegal integer literal syntax in Python source fileF)is_c_literalr:  unsignedlongness)rX   cythoncaststrrL   rM   rJ   language_levelr   r   r   IntNode)rE   rY   r:  r  r  r  s         r2   r  r  V  s    
**,CS!**-EFFHHH
)v
9OHOHcr
 )v
 L	tqyy771<L#MNS,8%*(0(0	2 2r4   c                     | j                         }| j                  s9|| j                  v r+| j                  j                  |      }t	        ||      }||S t        j                  ||      S )NrO   )rX   compile_time_exprcompile_time_envlookup_herewrap_compile_time_constantr   NameNode)rE   rO   rY   r:  r   s        r2   r  r  w  sc    
**,C41+=+=#=""..t4)#u5Kc--r4   c           
      |   |t        j                  |       S |t        u rt        j                  |       S t	        |t
              rt        j                  | |      S t	        |t              r!t        j                  | t        |      |      S t	        |t              r!t        j                  | t        |      |      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y t        j2                  | |      S t5        | d|d	|j6                  j8                  d
       y c c}w )Nr9  )r:  constant_resultg        r   )r  asciirI  z(Invalid type for compile-time constant: z (type r   )r   r  Ellipsisr  r   boolr  intr  reprfloatr  complexr  imagrealr^   r  r  r   bytesr   r  rQ  r  rO  r   	__class__r9   )rY   r:  r   bvaluer   rk   s         r2   r  r    s   }!!#&&	(	%%c**	E4	 !!#U33	E3	  DKOO	E5	!""3d5k5QQ	E7	#!!#T%**-=wWZ\a\f\fOgh:: ''S)--cejj9I[`[e[efhl %'D 	E3	$$Se0DEE	E5	!ug.""3feLL	E5	!@EF*34FF4<""3T22	#113 4 Gs    H9c           	      @   | j                         }t        |       \  }}}|dk(  s| j                  dk7  r| j                  dk7  r|||fS |g|g|g}}}d x}}| j                  dk(  s| j                  dk(  r| j                         }t        |       \  }}	}
|dk(  rt        |d       O||k7  r:||hddhddhfv rd}n+|dk(  s|dk(  rt        |d	       zt        |d
|d|d       |j	                  |	       |j	                  |
       |j	                  |       | j                  dk(  r| j                  dk(  r|dv s	|dk(  r)d |vr%t        d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 |dk(  rg }|D ]  }|j                  |        |||fS c c}w )Nr  r  r  zCCannot concatenate char literal with another string or char literalr  r  r  r  z:cannot mix t-string literals with string or bytes literalsz8Cannot mix string literals of different types, expected z'', got z'')r  r  r  r4   r  r  r9  )rX   p_string_literalrI   r   rS   r   joinsource_encodingr   zipr   rN  r   r  rT  )rE   rY   r  r  r  bstringsustrings	positions	next_kindnext_bytes_valuenext_unicode_valuer  s               r2   r  r    sI   
 **,C'7':$D+}s{qtt~-!$$:K2K[-//%0MM?SE	hH"&&K-
$$.
 ADD,=$=jjl:J1:M7	#%7#\]$i c3Z#r$;;	S 0cWXc)% &()*+' $$.
 ADD,=$=* ~X1E#CHHX$68I8IJy%bgg(.TQamq.T&UVs{(I. 	YFAs!T"" $$Y%:%:3mTUFV%WX	Y s{ 	$A  #	$m++ /Us    HHrequired_typec                     | 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   rX   r  r   )rE   r  rY   r  r  r  s         r2   p_opt_string_literalr    sn    tt~
**,C'7='I$D+}3;GG/5	#		56r4   c                 T    t        j                  t        |       }|D ]	  }|dk\  s	 y y)N   TF)r  r  r  )stringrE   r  s      r2   check_for_non_ascii_charactersr    s0    C A ; r4   is_rawc                    | j                   }| j                  }|}| j                  j                  dk\  }|dk(  r|j	                  |       |S |dk(  rC|r/|s|dk7  st        |      dk  s|d   dvr|j	                  |       |S d}t        ||||        |S |d	k(  r|j	                  d
       |S |dk(  r| j                  d|       |S y)z
    Returns a string of non-escaped characters (if handled) or none.
    If passed an escape sequence returns an empty string.
    r  CHARSESCAPEr  r!   r   Uur  r&   
r'   zUnclosed string literalr7  N)rI   rL   rJ   r  rS   r?  _append_escape_sequencer   )	rE   rY   charsr  r  rI   systrr   is_python3_sources	            r2   p_string_literal_shared_readr    s     
BJJEF%&YY%=%=%B	W}U M 
x(DCK3u:>USTX]aMaLL M F#D%: M 
yT
 M	 
u	)s3 M r4   rL   c                    |j                  d      j                         }t        |      dk  st        |      dk(  r|dv r|S t        |      }t        |      t        |      k7  rt	        | d       |j                  d       t        |      }t        |      dk\  rt	        | d|d    d	|d    d
       yt	        | d|        y)Nz"'r   r!   	rbrurfrtrz!Duplicate string prefix characterrzString prefixes r    and z cannot be combinedzInvalid string prefix r  )rstriplowerr?  setr   discardsorted)rY   rL   kind_stringunique_string_prefixess       r2   _validate_kind_stringr    s    //%(..0K
;1[!1Q!6;+;U -
!"c+&66c67""3'#$:;
!"a'c%&<Q&?%@F\]^F_E``stu  	c+K=9:r4   c                     | j                   dk(  r|J t        |       S | j                         }| j                  j                  dk\  }d}t        || j                        }d|v }d|v rt        |      dk7  rt        |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#                          t%        | ||||      }	|	6|s3|r1t        j                  | j                  j                  v rt'        |	      }Y| j                   dk(  rn-| j                  d| j                   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 }| j#                          |||
fS )Nr  r  Fr  r  r   z+Invalid string prefix for character literalr  r  r  ub)r  r  r  
END_STRINGUnexpected token rh   z in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.r7  )rI   p_ft_string_literalrX   rJ   r  r  rL   r?  r   r
   unicode_literalsr`   r   StrLiteralBuilderr  UnicodeLiteralBuilderBytesLiteralBuilderrM   r  r  getchar
getstrings)rE   kind_overriderY   r   has_non_ascii_literal_charactersr  r  r  r  handled_charsr  r  s               r2   r  r  $  sf    	tt  $$"1%%
**,C%&YY%=%=%B',$'QZZ8K,F
k {q #DE				rzm+0G0G199KfKf0f001B1BC$$)> D:"88:ERZ"44Q5F5FGE"66q7H7HIE
	4sE4 $4%&*A*AQYYE`E`*`3QR_3`044<GGajj" #   s{mmo{q #6DE%*%5%5%7"],%&*A*AQYYE`E`*`s{JPSTKFFH+}--r4   c                     g }	 | j                          | j                  }|dv r&|dk(  r| j                          dj                  |      S |j                  | j                         b)N)END_FT_STRING_EXPRr'   Nr  r  )rM   rI   r  rS   rL   )rE   stringsrI   s      r2   p_read_ft_string_expressionr  s  sa    G
	TT     ))777##qzz" r4   is_single_quotedtf_string_kindc           	         g }d x}x}}d }d}	| j                         }
|
d   |
d   |
d   dz   f}t        |       }|j                         st        |
d| d       g }n| }t	        t        |      |
d   | | j                  |      } | xj                  dz  c_        | j                  dk(  r| j                          | j                  d	k(  rt        | t        h d
z        }nt        |       }| j                  dk(  rd}	| j                          | j                  dk(  r| j                         }| j                          | j                  }|dv rt        | j                         d       nt        j                  j!                  |      s.t        | j                         d|z         | j                          nW| j                         d   |d   dz   k7  r+t        | j                         d       | j                          n| j                          |	s|dk(  r||j#                  dd      \  }}|dk(  rUt        j$                  |t'        j(                  |j+                         j+                  d      j+                                     }|	r9|j-                  t        j$                  |t'        j(                  |                   | j                  dk(  s| j                  dk(  r0| j                          | j                  dk(  r | j                  dk(  r0| j                  dk7  r*t        | j                         d| d| j                          |} | j                  dk(  r7| j                         }t/        | ||dd      }t        j0                  ||      }|	r||d}|t'        j(                  |      }|dk(  r+|j-                  t        j2                  |
||||             |S |j-                  t        j                  |
|||              |S )!NFr   r   r!   z empty expression not allowed in z-string)parent_scannerr  initial_posINDENTr  >   !rh   })r   r8  Tr  )r  rh   r  zmissing conversion characterz!invalid conversion character '%s'zDf-string: conversion type must come right after the exclamation markr  )rY   r:  r&   DEDENTr'   zUnexpected characters after z-string expression: rh   r  is_format_stringr  r  r  )r:  conversion_charformat_specexpression_str)r:  r  r  )rX   r  stripr   r   r   r  bracket_nesting_levelrI   rM   r  r   p_testlist_star_exprrL   r   FormattedValueNodefind_conversion_funcrsplitr  r   r   r  rS   p_ft_string_middlesr  TStringInterpolationNode)rE   r  r  r  r   r  r  rs   t_string_expressionself_documentingbracket_posexpr_posexpr_stringoriginal_scannerprevious_pos_rY   format_spec_contentss                     r2   p_ft_string_replacement_fieldr0    s    F+//O/kD**,KAAAq0@AH-a0Kk00@H	J[!N-- 
 	
1$448FFH447?%&;o&MOD (*D443;#FFH443;::<LFFHjjO.0ajjl$BC11FFWajjl$G/$YZa\!_q%89ajjl$jk~4*!,!3!3C!;Q$&/&;&; (66{7I7I7K7R7RSV7W7^7^7`a'#  ))$,::;G ddi1448#3FFH ddi1448#3445=

.~.>>RSTS]S]R^_a tts{jjl  31f>Naevyz--'
 O38K"(66Gi88t_#4G
 	 M	 	i22t_#
 	 Mr4   r  c           
         g }t        j                         }| j                         }	 | j                          | j                  }t        | ||d|      }	|	0|j                  rH|j                  t        j                  ||j                                      t        j                         }|dk(  rAt        | |||      }
|j                  |
       | j                  dk(  s| j                  d       |dk(  r	 |S | j                  dk(  r|r;	 |S t        | j                         d| j                  d	| j                  d
|d       )Nr  r   r9  r  )r  r  END_FT_STRINGr  rh   z in z-string literal)r   r  rX   rM   rI   r  r  rS   r   r  	getstringr0  rT  expectedr   rL   )rE   r  r  r  r  middlesbuilderrY   rI   r  fieldss              r2   r%  r%    s(   
 G224G
**,C
	TT4sGS $==NN900G<M<M<OPQ$::<G926+NLFNN6"443;

3?" N TTS[ N	 

ajj.237 r4   c                 >   t        | j                         | j                        }d|v rdnd}d|v }| j                  j                  d      }t	        |      dk7  }t        | ||d|      }| j                  dk7  r| j                  |       | j                          |d |fS )	Nr  r  r  
rRbBuUfFtTr  Fr  r2  )	r  rX   rL   lstripr?  r%  rI   r4  rM   )rE   r  r  r  quotesr  r5  s          r2   r  r    s     (

ajjAK,/;,>SCN,FZZ|,F$'K1$4!!V-=PUftuGtt	

6FFH4((r4   escape_sequencec           	      x   t        |      dk  r|j                  d       y |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 gw xY w)Nr!   \r   01234567   z'"\abfnrtvr  x      zInvalid hex escape '%s'Fr   NUu)r  r  r  r;  Nr  z!Unknown Unicode character name %sr  )   
   i zInvalid unicode escape '%s'r   )r?  rS   append_charvalr  r   char_from_escape_sequencer   r	   ordKeyErrorr  r:  append_uescape)r  r6  r<  rE   r  chrvaluchars          r2   r  r  '  s   
?atAJs?12#6:;	
gq	
i~??PQ	
d	
c1$""3qr':B#?@GG-?uGM	
e.8EN*?1R+@AU !W,,b1F5GHGG1OC5GQQ;""6?;  	'  N;_Qr23::3?@GL  NNs   )E< <:F98F9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 )	Nrh  rI  r<  2iterable unpacking cannot be used in comprehensionr
  r  )looprS   typehas_local_scoperR   )rX   rM   rI   rp   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   	list_typerJ   r  %p_namedexpr_test_or_starred_expr_list)rE   rY   rs   rS   rR  exprss         r2   r  r  X  s    **,CFFHtts{	!!#B//+A.Dtt??GGHI223TB!V$	**d60A0AII449; 	; 	tts{	5a>HHSMc..r4   c                 p    | j                   dv rt        | |      S | j                   dk(  rt        | |      S |S )Nr<  rz   )rI   rX  	p_comp_if)rE   bodys     r2   p_comp_iterr`  w  s;    tt!T""	
D!! r4   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  )	rX   rI   rM   rp   p_for_boundsr/   r`  r   ForStatNode)rE   r_  rY   r  kws        r2   rX  rX    su    
**,CHttw	 HHUO	a	ABII$[D%9HIMS'B''r4   c                     | j                         }| j                          t        |       }t        j                  |t        j
                  ||t        | |            gd       S )N	conditionr_  
if_clausesrd  )rX   rM   r   r   
IfStatNodeIfClauseNoder`  )rE   r_  rY   r|   s       r2   r^  r^    s^     **,CFFH Q<DC(($0;At0DF G r4   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  rL  r   FTr   r"  r   r   r!   zunexpected zitem found in r  dictz literalzexpected expression, found '*'rh   )rK  r:  r;  rR   r<  )key_expr
value_exprr
  )rR  rS   rS  rQ  rI  )rk   rS  )rB  rM  )rX   rM   rI   r   rU  r?  r   r   rS   rq   rp   rR  rY   r   rN  rS  r   	dict_typeDictComprehensionAppendNoderK  r:  set_typerW  rX  rY  rT  SetNodeis_set_literalMergedSequenceNoderS  rV  )rE   rY   partstarget_typelast_was_simple_itemr\  rK  r:  comprehension_typerS   rR  rr  	set_itemspartr[  s                  r2   r  r    st    **,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Yr4   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 )NrR   r  r   r   rI  r  )
rX   rM   rq   rI   rS   rp   r?  r   rO  BackquoteNode)rE   rY   rk   r   s       r2   r  r    s     **,CFFH1I;D
$$#+	F1I $$#+ HHSM
4yA~1g!!#d3""3c22r4   c                     ||gng }| j                   t        vrO|j                  t        |              | j                   dk7  r	 |S | j	                          | j                   t        vrO|S NrR   )rI   expr_terminatorsrS   rq   rM   rE   rs   r\  s      r2   p_simple_expr_listr  )  sa     ,4&"E
$$&
&fQi!443;L 	
	 $$&
&
 Lr4   c                     ||gng }| j                   t        vrO|j                  t        |              | j                   dk7  r	 |S | j	                          | j                   t        vrO|S r  )rI   r  rS   r   rM   r  s      r2   p_test_or_starred_expr_listr  4  sc     ,4&"E
$$&
&+A./443;L 	
	 $$&
&
 Lr4   c                     ||gng }| j                   t        vrO|j                  t        |              | j                   dk7  r	 |S | j	                          | j                   t        vrO|S r  )rI   r  rS   r   rM   r  s      r2   r[  r[  ?  sc     ,4&"E
$$&
&5a89443;L 	
	 $$&
&
 Lr4   c                     | j                         }t        |       }| j                  dk(  r3| j                          t	        | |      }t        j                  ||      S |S NrR   rI  )rX   rq   rI   rM   r  r   rO  rE   rY   rs   r\  s       r2   r  r  L  sN    
**,C!9Dtts{	"1d+""3u55r4   c                     | j                         }t        |       }| j                  dk(  r3| j                          t	        | |      }t        j                  ||      S |S r  )rX   r   rI   rM   r  r   rO  r  s       r2   r!  r!  Z  sO    
**,C!!$Dtts{	+At4""3u55r4   c                     | j                         }t        |       }| j                  dk(  r3| j                          t	        | |      }t        j                  ||      S | j                  dv rt        | |      S |S )NrR   rI  r<  )rX   r   rI   rM   r[  r   rO  r@  r  s       r2   r  r  h  si    
**,C+A.Dtts{	5a>""3u55	
!	!4  r4   c           
          t        | t        j                  |j                  t	        j
                  |j                  |                  }t	        j                  |j                  |      S )Nr  r
  )rR  )rX  r   r  rY   r   r  GeneratorExpressionNode)rE   rs   rR  s      r2   r@  r@  v  sP     a++00tDF GD,,TXXDAAr4   )r   rh  r  rh   r8  r&   r'   c                     | j                         }| j                          t        |       }t        j                  ||      S N)rT   )rX   rM   rU   r   
GlobalNoderE   rY   rT   s      r2   p_global_statementr    s4     **,CFFHOEC//r4   c                     | j                         }| j                          t        |       }t        j                  ||      S r  )rX   rM   rU   r   NonlocalNoder  s      r2   p_nonlocal_statementr    s2    
**,CFFHOEc511r4   c           	         t        |       }d}| j                  dk(  rF|j                  s|j                  s|j                  r"d}| 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 )NFrh   Tr8  zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...r7  r  r   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   rf  z&Illegal operand for inplace operation.r;  )r   r   r   r
  r!   )r   r   first)lhs_listr   ) r!  rI   r   is_subscriptis_attributerM   p_annotation
annotationrV  r   rY   r  rS   r?  r   matchr   r   rj  rl  rc  r|  rd  re  r2  r  r  r   InPlaceAssignmentNoder  SingleAssignmentNodeCascadedAssignmentNode)rE   rs   has_annotation	expr_listr   r   r   s          r2   p_expression_or_assignmentr    s@   "DNtts{(9(9T=N=N	&q/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|Tbcc++CGGinRUVVr4   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 )NFr   rR   r&   r'   TrI  )rY  streamappend_newline)	rX   rM   rI   rq   rS   r   rO  r   PrintStatNode)rE   rY   ends_with_commar  rk   rY  s         r2   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**, ,r4   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   rR   rI  )rX   rM   r   r   r   rO  rk   r?  r   rI   rS   rq   r   ExecStatNode)rE   rY   codetuple_variantrk   s        r2   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--r4   c                     | j                         }| j                          t        |       }t        j                  ||      S )NrI  )rX   rM   r  r   DelStatNode)rE   rY   rk   s      r2   p_del_statementr    s5     **,CFFHa DS..r4   Fwith_newlinec                     | j                         }| j                  d       |r| j                  dd       t        j                  |      S )NpassExpected a newlineTignore_semicolon)rX   rp   expect_newliner   PassStatNode)rE   r  rY   s      r2   p_pass_statementr    sA    
**,CHHV	-Ec""r4   c                 l    | j                         }| j                          t        j                  |      S r-   )rX   rM   r   BreakStatNoder   s     r2   p_break_statementr    s)     **,CFFHs##r4   c                 l    | j                         }| j                          t        j                  |      S r-   )rX   rM   r   ContinueStatNoder   s     r2   p_continue_statementr  "  s)     **,CFFH!!#&&r4   c                     | j                         }| j                          | j                  t        vrt	        |       }nd }t        j                  ||      S )Nr9  )rX   rM   rI   r   r  r   ReturnStatNode)rE   rY   r:  s      r2   p_return_statementr  *  sF     **,CFFHtt((1U33r4   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 )NrR   r  )exc_type	exc_valueexc_tbcause)rX   rM   rI   r   rq   r   RaiseStatNodeReraiseStatNode)rE   rY   r  r  r  r  s         r2   p_raise_statementr  6  s     **,CFFHHIFEtt((!9443;FFHq	Itts{TTV^FFH1IE9""3!	 	 $$S))r4   c                    | 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                  ||||      }	nkt        j                  |t        j                  ||xs |      t        j                  |t        j                  ||      t!        |      |rdnd d 	      
      }	|j	                  |	        t        j"                  ||      S )NT
as_allowedrR   cimport)module_nameas_nameis_absoluter  r9  r   r  is_import_as_namer<   imported_namesr   stats)rX   rI   rM   p_dotted_namerS   r
   absolute_importrJ   r`   r   CImportStatNoder  r   r  
ImportNoder>  r  StatListNode)
rE   rY   r  rr  r  r  target_namedotted_namer  stats
             r2   p_import_statementr  T  s@    **,C44DFFH1./E
$$#+	]167 $$#+ E((AII,G,GGK27 .[+w9((''	)D --&&s1GKH(( ) > >s+ V&*7m*!#')*D 	T#$ c//r4   first_statementc           
      :   | j                         }| j                          | j                  dv rHd}| j                  dv r:|t        | j                        z  }| j                          | j                  dv r7n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 fg}
| j                          n-| j                  d
k(  rd}	| j                          t        |       g}
| j                  dk(  rL| j                          |	r| j                  dk(  rn*|
j                  t        |              | j                  dk(  rL|	r| j                  d       |dk(  r|s| j                  d       nn|r| j                  d       nZ|
D ]U  \  }}}|dk(  r| j                  d|        n8	 t        t        |      }| j                  j                  j!                  |       W t#        j$                  |      S |rt#        j&                  ||||
      S g }g }|
D ]X  \  }}}|j                  t)        j*                  ||             |j                  |t)        j,                  ||xs |      f       Z t#        j.                  |t)        j0                  |t)        j*                  ||      d||      |      S # t        $ r | j                  d|z  |       Y  w xY w)N)r!  ry  r   importr  r  Fr  zExpected 'import' or 'cimport'r  r   r   TrR   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_levelr  r9  r  r  )modulerr  )rX   rM   rI   r?  rJ   rK   r
   r  r`   r  r   p_imported_namerS   rp   getattrAttributeErroraddr   r  FromCImportStatNoder   r>  r  FromImportStatNoder  )rE   r  rY   r<   dotted_name_posr  r.  r  
is_cimportis_parenthesizedr  name_posrO   r  	directiveimported_name_stringsrr  s                    r2   p_from_import_statementr  u  sG    **,CFFHtt|ddl"SYEFFH ddl" QTT%::'(zz|QYY5M5Mb5Q=V33qyy7R7RRE/<Q5/Q,![!tt((	0144DFFH"Jtts{::<)A)A#)FMN	443;#FFH)!,-
$$#+	oa01	 $$#+
 	l"GGUVGG$%-; 	;)48#GGNH5 ' 5I 		++//	:	; !!#&&	(([ )+ 	+
 !#)7 	L%XtW!((..xtDFLLy))(DIJL	L
 ''))/'<<S+V$)!6	8
  	% & GG>ExPs   +M88NNc                 X    | j                         }t        |       }t        |       }|||fS r-   )rX   rP   	p_as_name)rE   rY   rO   r  s       r2   r  r    s,    
**,C1:DlGwr4   r  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 )Nr!  )	rX   rP   rI   rM   rS   r  rJ   rK   r  )rE   r  rY   r  r  rT   s         r2   r  r    s    
**,C!*KGME
$$#+	WQZ  $$#+ A,aii66sxxGQQr4   c                 v    | j                   dk(  r*| j                  dk(  r| j                          t        |       S y )NrH   as)rI   rL   rM   rP   r   s    r2   r  r    s.    ttw1::-	qzr4   c                     | j                         }| j                          t        |       }| j                  dk(  r| j                          t        |       }nd }t	        j
                  |||      S )NrR   )rj  r:  )rX   rM   rq   rI   r   AssertStatNode)rE   rY   condr:  s       r2   p_assert_statementr    sX     **,CFFH!9Dtts{	q	t5AAr4   c                 2   | j                         }| j                          t        |       g}| j                  dk(  r:| j                          |j	                  t        |              | j                  dk(  r:t        |       }t        j                  |||      S )Nelifrk  )rX   rM   p_if_clauserI   rS   p_else_clauser   rm  )rE   rY   rl  rd  s       r2   p_if_statementr    s}     **,CFFHa.!J
$$&.	+a.) $$&.  "KC{< <r4   c                 ~    | j                         }t        |       }t        |       }t        j                  |||      S )Nri  )rX   r   p_suiter   rn  )rE   rY   r|   r_  s       r2   r  r    s:    
**,CAD1:Dc' 'r4   c                 X    | j                   dk(  r| j                          t        |       S y )Nr{   )rI   rM   r
  r   s    r2   r  r  
  s#    ttv~	qzr4   c                     | j                         }| j                          t        |       }t        |       }t	        |       }t        j                  ||||      S )N)rj  r_  rd  )rX   rM   r   r
  r  r   WhileStatNode)rE   rY   r|   r_  rd  s        r2   p_while_statementr    sR     **,CFFHAD1:D"Ks!# #r4   r  c                     | j                         }| j                          t        | d|      }t        |       }t	        |       }|j                  |||       t        j                  |fi |S )NTrb  )r_  rd  r  )rX   rM   re  r
  r  r/   r   rf  )rE   r  rY   rg  r_  rd  s         r2   r  r     sa     **,CFFH	ax	@B1:D"KII4[8IDS'B''r4   rc  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bound2ru  )p_for_targetrI   rM   p_for_iteratorrr  r   r   p_for_from_relationrX   rP   p_for_from_stepr   r  r   r   rY   rO   rp   )rE   rc  r  r  r  r  rel1	name2_posname2rel2_posrel2r  ru  s                r2   re  re  ,  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# $ $# 	 	
	r4   c                     | j                   t        v r| j                   }| j                          |S | j                  d       y )Nz#Expected one of '<', '<=', '>' '>=')rI   inequality_relationsrM   r   r   s     r2   r  r  Y  s3    tt##TT			56r4   c                 z    | j                   dk(  r,| j                  dk(  r| j                          t        |       }|S y )NrH   by)rI   rL   rM   r   )rE   ru  s     r2   r  r  c  s2    ttw1::-	!}r4   )r   r   r   r   ri   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 r  )rX   r   rI   rM   rS   r   rO  )rE   ri   rY   rs   r\  s        r2   p_targetr%  q  s    
**,C!Dtts{	ddj LL*+tts{FFH	 ddj 
 ""3u55r4   c                     t        | d      S )Nr   )r%  r   s    r2   r  r    s    Atr4   c                     | j                         }|rt        |       }nt        |       } |rt        j                  nt        j
                  ||      S )N)sequence)rX   r  r   r   AsyncIteratorNodeIteratorNode)rE   rc  r  rY   rs   s        r2   r  r    sC    
**,C!}|O8I''9O9OQT_cddr4   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_clausesrd  finally)r_  finally_clausezExpected 'except' or 'finally')
rX   rM   r
  rI   rS   p_except_clauser   TryExceptStatNodeTryFinallyStatNoder   )rE   rY   r_  r-  rd  r/  s         r2   p_try_statementr3    s     **,CFFH1:DNKtt!!ddh!!/!"45 ddh446>FFH!!*K&&s.%' 449Ktty	 ''.: 	: 	
01r4   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 )
NFrh   rR   rH   r  r!   r  T)patternr  r_  is_except_as)rX   rM   rI   rq   r   r   rO  rk   rL   rJ   r  rP   r  r
  r   ExceptClauseNode)rE   rY   r  r  r6  pos2rO   r_  s           r2   r0  r0    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 0r4   c                    | j                         }| j                          t        | d      d   }| j                  d       | j                  r|}| j
                  j                  ||      }|rq| j                  j                  |       t        |      }|j                         5 }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)rX   rM   r  r  compile_time_evalrJ   find_include_fileincluded_filesrS   r   get_file_objectr   encodingr:  p_statement_listr   r  )
rE   r6   rY   unicode_include_file_nameinclude_file_nameinclude_file_pathsource_descr  s2trees
             r2   p_include_statementrG    s    
**,CFFH 0C 8 ;895II778I3O##$56./@AK,,. 1!!![!QZZ`a`p`pq'C01 K!!#&&1 Ks   #1C44C>c                     | j                          | j                  dk(  r| j                  st        |       }|S t	        |       }|S )Ntemplate)rM   rL   r   p_with_templater  )rE   r   s     r2   p_with_statementrK    s@    FFHzzZ(8(8q! K AKr4   c                 |   d}d}| j                   dk(  rdt        |       5 }| j                          t        | |      }| j	                  d       | j                   dk7  r| j                  d       ddd        }|st        | |      }t        |       }t        |      D ]  \  }}} ||fd|i|} |S # 1 sw Y   FxY w)	a  
    Copied from CPython:
    | 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block {
        _PyAST_With(a, b, NULL, EXTRA) }
    | 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block {
        _PyAST_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
    Therefore the first thing to try is the bracket-enclosed
    version and if that fails try the regular version
    FrD   r   r   rh   r  Nr_  )rI   r   rM   p_with_items_listrp   r   r
  reversed)	rE   r  brackets_succeededrr  errorsr_  clsrY   r1   s	            r2   r  r    s     Etts{a  	FFFH%a2EHHSMtts{ 	 "(Z!!X.1:D"5/ +S$3*T*T*+ K!	 	s   AB22B;c                     g }	 |j                  t        | |             | j                  dk7  r	 |S | j                          | j                  dk(  r	 |S P)NrR   r   )rS   p_with_itemrI   rM   )rE   r  rr  s      r2   rM  rM  	  sU    E
[H-.443;
 L	 	
443;L r4   c                 2   | j                         }| j                  s| j                  dk(  r| j                  dv r|r| j	                  d       | j                  }| j                          d }| j                  dk(  r,| j                          t        |       }| j                  d       t        j                  |||dfS t        |       }d }| j                  dk(  r*| j                  dk(  r| j                          t        |       }t        j                  ||||dfS )	NrH   )r#   gilzwith gil/nogil cannot be asyncr   r   )staterj  r  )managerr  r  )rX   r   rI   rL   r   rM   rq   rp   r   GILStatNoder   WithStatNode)rE   r  rY   rV  rj  rW  r  s          r2   rS  rS  	  s     **,CAJJBR4RGG45

	 	443;FFHq	IHHSM  #Y'OOO)447?qzzT1FFH#A&F!!3Gv[c(dddr4   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   rR   rh  rh   z-Syntax error in template function declaration)rX   rM   rp   rS   rL   rI   r  expect_indentr)   rB   p_c_func_or_var_declarationexpect_dedentr   )rE   rY   rB   body_ctxfunc_or_vars        r2   rJ  rJ  ;	  s    
**,CIFFHHHSMQZZ FFH
**
	$	 **
 HHSMtts{		HI	5&1!S(C	cBCr4   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continuerV   raiser  r  r  r  assertr  )rI   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )rE   r  r   s      r2   p_simple_statementrk  U	  s    	ttx!!$: K9 
	#A&6 K5 
 #2 K1 
". K- 
q!* K) 
 #& K% 
	#A&" K! 
	!!$ K 
 # K 
&	&!!$ K 
&qOL K 
 # K 
	!!$
 K	 
" K *!,Kr4   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 )Nri  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)rk  rY   r   r   r  rS   rI   rM   r?  r  r  rs   r   rO   r   r  )rE   r6   r  r  rY   r  s         r2   p_simple_statement_listrn  y	  s3    a?CD
((CEdE../T
$$#+	44%%!!GdE../T $$#+ !!#&	UqQx!!#u5tt%%dE../yy  TYY^^v%=Z\_`<=Kr4   c                 P    | j                   }d| _         t        |       }|| _         |S )Nr   )r  r  )rE   oldrs   s      r2   p_compile_time_exprrq  	  s+    


CAa=DAKr4   c                 V   | j                         }| j                  }| j                          t        |       }| j	                  d       t        |       }| j                  r#|j                  |      }|j                  ||       | j                  dd       t        j                  |      S )Nr8  r  Tr  )rX   r  rM   rP   rp   rq  r;  compile_time_valuedeclarer  r   r  )rE   rY   denvrO   rs   r:  s         r2   p_DEF_statementrv  	  s    
**,CDFFH1:DHHSMq!D''-T5!)DAc""r4   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)rX   r;  r  rM   rq  r  rs  r
  rI   r   r  )	rE   r6   rY   
saved_evalcurrent_evalru  r   rs   r_  s	            r2   p_IF_statementr|  	  s    
**,C$$JLDF
	"1%*RtD4K4KD4Q/Rq#FL446>  	ttv~	*q#F##C($AMr4   c                 b   |j                   }| j                         }d }| j                  dk(  r+|j                  dvr| j	                  d       t        | |      S | j                  dk(  r?| j                  j                  j                  dd      rt        |dd	       t        |       S | j                  d
k(  r@| j                  j                  j                  dd      rt        |dd	       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  }t1        ||      s| j	                  d       ||_        |S |j4                  r| j	                  dd       y | j                  dk(  rKd|j                  v r |j                  d k7  r| j	                  d!       |j                  | _        t7        | |      S | j                  d"k(  r+|j                  d#vr| j	                  d$       t9        | |      S | j                  d%k(  r+|j                  dvr| j	                  d&       t;        | |      S |j                  d'k(  r)| j                  dk(  r| j                  d(k(  rt=        |       S | j                  dk(  r|j                  d(k7  rt        | d      S |j                  d)v r t?        |       }||S | j	                  d*       | j                  d+k(  rtA        |       S | j                  d,k(  rtC        |       S | j                  d-k(  rtE        |       S | j                  d.k(  rtG        |       S | j                  d/k(  rtI        |       S | j                  dk(  r| j!                          tK        | ||      S | j                  dk(  r}| j                  dk(  rn| j                  }	| j                         }
| j!                          | j                  dk(  rtK        | ||      S |r| j	                  d       | jM                  d|	|
       | j                  dk(  r| j                  d0k(  rtO        | |      }||S tQ        | ||1      S )2Nctypedefr  
module_pxdz#ctypedef statement not allowed hereDEFzwarn.deprecated.DEFFzThe 'DEF' statement  will be removed in a future Cython version. Consider using global variables, constants, and in-place literals instead. See https://github.com/cython/cython/issues/4310r   r   IFzwarn.deprecated.IFTzThe 'IF' statement is deprecated and will be removed in a future Cython version. Consider using runtime conditions or C macros instead. See https://github.com/cython/cython/issues/4310r   )r  classc_classr_  propertyr  c_class_pxdr*   zdecorator not allowed here)r  rm  cpdefr  r=  rH   r=  r  r  )r  rm  r  )r  r  r_  r  r  zcdef statement not allowed here)r@   %'api' not allowed with this statementr   r  r  r  r  r  )r  r_  r  r*   z!class definition not allowed hereincludez"include statement not allowed herer  r  )r  r  z%Executable statement not allowed hererz   whiler  tryr  r  ri  ))r>   rX   rI   r<   r   p_ctypedef_statementrJ   compiler_directivesgetr   rv  r|  p_decoratorsrC   rL   r  rM   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r  r$   r  p_class_statementrG  p_property_declp_ignorable_statementr  r  r  r3  rK  r  put_backp_match_statementrn  )rE   r6   r  r>   rY   r  r@   r   tup
ident_name	ident_posmatch_statements               r2   p_statementr  	  s    ]]I
**,CJttz9944GG9: $As++	
 99((,,-BEJCGNOQ q!!	
99((,,-A4HCGNOQ a%%	
99xxGG01))!!_
..144?i3ittw1::#8QR	
I55Kttv~			
		99ZZGG56))3(DE!%%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 !

IFFHttu}0CDD# YZJJw
I>447?qzzW'<&73&?O&2...q#WWr4   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r  r'   ri  Fr   r   r  )	rX   rI   r  r   r   r  rS   r?  r  )rE   r6   r  rY   r  r  s         r2   r@  r@  N
  s     **,CE
$$'
'1c_EdE../T $$'
' !!#&&	UqQx!!#u55r4   c                 $    t        | |d      d   S )NFwith_doc_onlyr   )p_suite_with_docstringrE   r6   s     r2   r
  r
  a
  s    !!S>qAAr4   r  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 )
Nrh   r&   r  Fr   )r  r  r_  r*   zSyntax error in declarationsTr  )rp   rI   rM   r[  p_doc_stringr@  r]  r$   r   r<   rn  r  r  _extract_docstring)rE   r6   r  docr_  s        r2   r  r  f
  s    HHSM
Ctty		q/C3'	77GG;5GI99@@*1c2D#A&D;dS&t,	T9r4   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   r8  rB   Tr   r   r9  r   r6  r7  rR   zUnmatched %sz or )rI   r   r#  rL   rM   r   rq   r   r   r   CComplexBaseTypeNoderY   r   r>  rS   r?  r  )rE   
end_sy_setrB   rA  rB  pos_idxparsed_typeidentr   r   r   keyword_nodewas_keywords                r2   p_positional_and_keyword_argsr  ~
  s    OLG
$$j
 443;!$$$,GG:%GH447?qvvx{c1JJEFFHFFHq!Qi)!C	+AT:
00 )
D"$99#''OLs 34K q!Qi)!C	+AT:
00 )
D"""3'qLG< 1$?GG  % 443;tt:%GGNV[[-DDEL(( 	
S $$j
 T L((r4   nonemptyc                 V    | j                   dk(  rt        | |      S t        | ||      S )Nr   r  r  rB   )rI   p_c_complex_base_typep_c_simple_base_type)rE   r  rB   s      r2   r   r   
  s)    tts{$QI>>#AINNr4   c                     | j                   dk(  r0| j                  t        v r| j                  }| j                          |S t	        d      S )NrH   r  )rI   rL   calling_convention_wordsrM   r   )rE   r   s     r2   p_calling_conventionr  
  s;    ttw1::)AA	R  r4   )	__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   rR   r   )
componentsr   )rX   rM   r   r   r   r  rI   rS   r   rp   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rE   rB   rY   r   r   	type_noder  s          r2   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r4   c           
      Z   d}d}d}d}g }| j                         }dx}	}
| j                  dk(  ra| j                  dk(  r|	rt        |d       d}	n!| j                  dk(  r|
rt        |d	       d}
nn | j	                          | j                  dk(  ra|	s|
rkt        | ||
      }t        |t        j                        r*t        j                  ||j                  |	|
      |_
        |S t        j                  |||	|
      S | j                  dk7  rt        |d| j                  z         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(  rd}| j	                          nt        |       rj| j                  }| j	                          | j                  dk(  rX|j!                  |       | j	                          t#        |       }| j                  dk(  r<n| j                  }| j                         }| j	                          |r| j                  dk7  r| j                  dk(  r| j                         }| j	                          | j                  dk(  s?| j                  dk(  s0| j                  dk(  s!| j                  dk(  r&| j                  t$        v r| j'                  dd|       nL| 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 )NFr   r   rH   constzDuplicate 'const'TvolatilezDuplicate 'volatile'r  )r   is_constis_volatilez"Expected an identifier, found '%s'r  r  r!  r   r   r"  r   )r   r"  r   r   )rO   module_pathis_basic_c_typesignedr  r  rB   r   )r   rO   )rX   rI   rL   r   rM   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_namerS   rP   r  r  CSimpleBaseTypeNoder  r  r  CNestedBaseTypeNode)rE   r  rB   is_basicr  r  r  r  rY   r  r  r   rO   r  old_posr  s                   r2   r  r  
  s   HFHGK
**,C #"H{
$$'/:: s$78HZZ:%E#'=>K	 $$'/ ;!!h)L	i!>!>?','E'Ec#22XS^(`I$--c(M 	M 	ttwc7!$$>?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1JJsC1JJwh7D22

7D(3))#;"Vh	I 	tts{$Q'0I>I,Q	9EItts{	qz--cyQUV	r4   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)rh  rh  r   rJ  rp  )rA  rB  r   )rX   rM   r  rp   rI   r  r   rU  rR  rY   r   r   )
rE   r   rB   rY   rA  rB  rK  r:  rW  r   s
             r2   r  r  O  s     **,CFFH 	&a; "O\ HHSMtts{-aK%%c +
U ""swwCuE
L
 $$S)#')F M
s   3,Cc                    | j                   | j                  | j                         fg}| j                          d}| j                  dk(  rd}nf| j                   dk(  rW|j	                  | j                   | j                  | j                         f       | j                          | j                   dk(  rd}|d d d   D ]  } | j
                  |   |S )NFrh   Tr  r;  )rI   rL   rX   rM   rS   r  )rE   savedretvalsvs       r2   r  r  j  s     ddAJJ

-.EFFHFzzS	
addAJJ

56	443;FDbDk 

B Mr4   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 ':'.rh  )r   axes)	rX   rM   ri  r?  r   rp   rk  r   r   )rE   r   rY   rm  r.  r}  ro  r   s           r2   r  r    s     **,CFFH$Q'MJ \	y>AGGZ[\ HHSMsJ/G**3+F Mr4   c                 H    | j                   dk(  xr | j                  t        vS rG   )rI   rL   r  r   s    r2   looking_at_namer    s    447?Iqzz1IIIr4   c                 V   | j                   t        v ry| j                  dk(  rd}| j                   }| j                         }g }| j	                          | j                  dk(  r\| j	                          |j                  | j                   | j                         f       | j                  d       | j                  dk(  r\| j                  | 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g|  | j                  dd|d          - | j                  d||       | xr |d   S y)NFrH   r!  Tr   r"  )r   rh  r   r   rh  r   r   )
rL   base_type_start_wordsrI   rX   rM   rS   rp   r  r   reverse)rE   is_typerO   r  dotted_pathr  ps          r2   r   r     s   zz**	
zz::<	ddckFFH

AJJL9:HHW ddck
 ajj!**,.447?GTTS[ADDDLFFHddj(GAJJTTS[FFHddckGAJJTTS[FFHddck;);%;GAJJ 	'AAJJw##JJsC1&	' 	


7D(+{'uQx'r4   c                 H    | j                   dk(  xr | j                  t        v S rG   )rI   rL   r  r   s    r2   r  r    s!     447?Bqzz-BBBr4   c                     | j                   dk(  rP| j                  }| j                         }| j                          | j                   dk(  }| j	                  d||       |S y)NrH   r!  F)rI   rL   rX   rM   r  )rE   rO   r  r   s       r2   r  r    sO    ttwzz::<	ddck	

7D(+r4   )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)shortlongr  r  )structunion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   rL   sign_and_longness_wordsrM   )rE   r  r  s      r2   r  r    s    FH
$$'/ajj,CC::#FZZ8#FZZ7"HZZ6!MH	 $$'/ajj,CC 8r4   c                 b    t        | d      }|t        |      }| j                  |_        |S d }|S )Nr  )r  r   r  r?  )rE   literalcnames      r2   p_opt_cnamer    s>    "1c*Gg&** L Lr4   r   r  cmethod_flag
assignablecalling_convention_allowedc           	         | 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  )rO   r  T)r   r  r   r  r  z&%s on something that is not a functionr   r   r   r   )rX   rI   rM   r  r   CNameDeclaratorNoderJ   rK   p_c_func_declaratorr   rp   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rE   r6   r   r  r   r  r  r  rY   rc  r   s              r2   r   r     sH    **,Ctts{	443;/!,,,Sqyy7O7OPR7S[_`D(CdLIF#AsEW3?/7AEGF HHSM&q#ug|'18=%&*C*CPSajjlD''( 	)
$$*
jjl443;)!V4FFFH(CflKF $$*
 Mr4   c                     | j                         }| j                          | j                  dk7  rt        |       }nd }| j	                  d       t        j                  |||      S )Nrh  )rc  	dimension)rX   rM   rI   r  rp   r   CArrayDeclaratorNode)rE   rc  rY   dims       r2   r	  r	  4  sO    
**,CFFHtts{mHHSM%%c$CHHr4   c                 |   t        | ||d      }t        |       }| j                  d       t        |       }t	        | |j
                  dk(        \  }}	}
|r|
rt        | j                         dd       |xs t        |       }t        |       }t        j                  ||||||	|xs |j                  xs |||
	      S )	Nr   )r   nonempty_declaratorsr   externzThe keyword 'nogil' should appear at the end of the function signature line. Placing it before 'except' or 'noexcept' will be disallowed in a future version of Cython.r!   r   )rc  rk   has_varargsexception_valueexception_checkr#   with_gilhas_explicit_exc_clause)p_c_arg_listp_optional_ellipsisrp   p_nogilp_exception_value_clauser=   r   rX   
p_with_gilr   CFuncDeclaratorNoder#   )rE   rY   r6   rc  r   rk   ellipsisr#   exc_val	exc_check
exc_clauser  s               r2   r  r  @  s     3|/02D"1%HHHSMAJE%=aS[A[%\"GY
JJL 	
 WQZE!}H$$SD!Y..h8]gi ir4   )r   r   r   r]   r   z++z--r   r   r   r   r   r   rR   r   r   r   r   r   r   []()r  r8  r  c           	      L   | j                         }t        |       }| j                  dv r| j                  dk(  }	| j                          | j                         }
| j                  dk(  xr | j                  dk(  }|r| j                          t        | ||||||      }|rt        j                  |
|      }|	rt        j                  ||      }t        j                  ||      }n| j                  dk(  s%| j                  dk(  rs| j                  j                  r]| j                  dk(  rt        j                  nt        j                  }| j                          t        | ||||||      } |||      }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 )Nrq  r"  r  rH   )r   r  r   r  r  )rc  r   r   zDeclarator should be emptyr   r8  zEmpty declaratorr  ::r  z+-*/<=>!%&|([^~,r   r   r   r!  r   rh  r   )r   r   r   r   r!   z,Overloading operator '%s' not yet supported.Fr    )rO   r  default)rX   r  rI   rM   rL   r   r   CConstDeclaratorNodeCPtrDeclaratorNoderJ   cpp CppRvalueReferenceDeclaratorNodeCReferenceDeclaratorNoder   r  rq   rA   r=   rp   supported_overloaded_operatorsr  r  )rE   r6   r   r  r   r  r  rY   r  	is_ptrptr	const_posr  rc  r   
node_classr   rO   r  rZ   r  s                       r2   r  r  c  s1    **,C-a0tt{DDDL		JJL	::(<QTTW_FFHaE7+7)3hH --idCD++Cd;D))#D9	
!))--?@ttt|U;;QVQoQo
	aE7+7)3hH Cd+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!4N!c                 b    | j                   dk(  r | j                  dk(  r| j                          yy)NrH   r#   TFrI   rL   rM   r   s    r2   r  r    s'    ttw1::0	r4   c                 f    | j                   dk(  r"| j                          | j                  d       yy)Nr  rU  TF)rI   rM   expect_keywordr   s    r2   r  r    s*    ttv~		r4   	is_externc                 D   d}d}|rdnd}| j                   dk(  r%| j                  dk(  rd}| j                          d}n^| j                   dk(  rNd}| j                          | j                   dk(  rd}| j                          n| j                   dk(  rd}| j                         d	   }| j                          | j                   dk(  rb| j                  }|d
k(  r4| j                         d	   |dz   k(  rt	        | j                         d       nt        | |      }| j                          nt| j                   dk(  ret        j                  | j                         d      }| j                          n/| j                   dk(  rd}| j                          nd}t        |       }|||fS )a  
    Parse exception value clause.

    Maps clauses to exc_check / exc_value / exc_clause as follows:
     ______________________________________________________________________
    |                             |             |             |            |
    | Clause                      | exc_check   | exc_value   | exc_clause |
    | ___________________________ | ___________ | ___________ | __________ |
    |                             |             |             |            |
    | <nothing> (default func.)   | True        | None        | False      |
    | <nothing> (cdef extern)     | False       | None        | False      |
    | noexcept                    | False       | None        | True       |
    | except <val>                | False       | <val>       | True       |
    | except? <val>               | True        | <val>       | True       |
    | except *                    | True        | None        | True       |
    | except +                    | '+'         | None        | True       |
    | except +*                   | '+'         | '*'         | True       |
    | except +<PyErr>             | '+'         | <PyErr>     | True       |
    | ___________________________ | ___________ | ___________ | __________ |

    Note that the only reason we need `exc_clause` is to raise a
    warning when `'except'` or `'noexcept'` is placed after the
    `'nogil'` keyword.
    FNTrH   noexceptr,  r   r   r!   r#   r   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r9  r   )	rI   rL   rM   rX   r   r  r   r  rq   )rE   r3  r  r  r  plus_char_posrO   s          r2   r  r    sZ   4 $JG"Ittw1::3
			
	
	443;IFFHTTS[IJJLOMFFHttwzz7?zz|A-!*;;ajjl GH %QoGFFH#,,QZZ\Etts{ 	!	QiGIz))r4   )r   r"  ry  r   rh   r]   	in_pyfuncr  kw_onlyrj   c                     g }|}| j                   t        vrX|j                  t        | ||||||             | j                   dk7  r	 |S | j	                          d}| j                   t        vrX|S )N)r  r8  rj   rR   r   )rI   c_arg_list_terminatorsrS   p_c_arg_declrM   )	rE   r6   r7  r   r  r8  rj   rk   is_self_args	            r2   r  r    s{     DK
$$,
,LCK+w!# 	$ 443; K 	
 $$,
, Kr4   c                 :    | j                   dk(  rt        |        yy)Nry  TF)rI   rz  r   s    r2   r  r  &  s    ttu}r4   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 )NFr   )rO   r  r  r  r  r  r<  rB   r  )r   r   rH   r  zExpected 'None'z*'%s None' only allowed in Python functionsr   r   rh   r8  r  )r   r   r"   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner%  r  r8  )rX   r   r   r  r   r   rI   rM   rL   r   r  r<   r   r  	modifiersrq   CArgDeclNode)rE   r6   r7  r   r  r8  rj   rY   r@  rA  r%  r  r   r   r  s                  r2   r;  r;  /  s    **,CHwGJ--cr#a&D	:	 "!h7	38<Jtt}Q%5%5tt	447?qzzV3FFHGG%&#CdJK$,5=QTTS[	!!_
tts{	CIIttz!#,,S1S]]* )cXYQiGc r4   c                 f    | j                         }t        |       }t        j                  ||      S )a  An annotation just has the "test" syntax, but also stores the string it came from

    Note that the string is *allowed* to be changed/processed (although isn't here)
    so may not exactly match the string generated by Python, and if it doesn't
    then it is not a bug.
    r
  )rX   rq   r   AnnotationNode)rE   rY   rs   s      r2   r  r  f  s+     **,C!9D##Cd33r4   c                 b    | j                   dk(  r | j                  dk(  r| j                          yy)NrH   r$   TFr0  r   s    r2   p_apirG  s  s'    ttw1::.	r4   c                    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  Tz$cdef blocks cannot be declared cpdefrh   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)p_visibilityr=   r$   rG  r   rI   p_cdef_extern_blockrM   r  r#   r@   p_cdef_blockr<   p_c_class_definitionrL   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionr\  rE   rY   r6   s      r2   r  r  |  s   !!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7r4   c                 (    t        |  |d            S )NT)r>   )r
  r  s     r2   rM  rM    s    1cd+,,r4   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!   Tr  )r>   r=   rA   )include_fileverbatim_includer_  rA   )r@   r   rp   rI   rM   r  rL   rA   r  r#   r  r   CDefExternNode)rE   rY   r6   rV  rW  r_  s         r2   rL  rL    s    
c@ALHHVtts{	'3/2
$X
6Czz[ 	(C03qz	 4AsDAd#+MM	# #r4   c                 t   | j                          d}| j                  j                  r?| j                  dk(  s| j                  dk(  r!| j                  dk(  rd}| j                          | j                  dk(  rH| j                  }| j                          t        |       }|6|j                  *|j                  dz   |z   }nd x}}|r| j                  d       |r<| j                  dk(  r-| j                          t        |       }| j                  d	       nt        j                  |d
g dddd      }| j                  d       g }d }| j                  dk7  rt        | ||       ne| j                          | j                          t        |       }| j                  dvrt        | ||       | j                  dvr| j                          |s|j                   dk7  rt        |d       t        j"                  |||||||j$                  |j                   |j&                  |j(                  |j*                  dk(  |      S )NFr  rH   r  Tr#  zUnnamed scoped enum not allowedr   r   r  r   r   )rO   r  r  r  r  r  rh   r&   r  r  zDEmpty enum definition not allowed outside a 'cdef extern from' blockr  )rO   r  scopedrr  underlying_typer?   r=   create_wrapperr$   in_pxdr  )rM   rJ   r(  rI   rL   r  rA   r   r   rp   r   r  p_c_enum_liner[  r  r]  r=   r  r?   r@   r$   r<   )	rE   rY   r6   rZ  rO   r  r[  rr  r  s	            r2   p_c_enum_definitionr_    s    FFHFyy}}!$$'/addgo!**PXBX	ttwzz	A=S]]6MMD(4/EuGG56!$$#+	'*	33"
 HHSME
Cttyae$		1odd++!S%( dd++ 	
S^^x/cYZ$eU'%%#..GGCII53@ @r4   rr  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  rR   r  zSyntax error in enum item list)rI   p_c_enum_itemrM   r  )rE   r6   rr  s      r2   r^  r^    sp    ttv~ae$ddckFFHtt))!S%(	 ddck 	
56r4   c                 8   | j                         }t        |       }t        |       }||j                  |j                  dz   |z   }d }| j                  dk(  r| j                          t        |       }|j                  t        j                  ||||             y )Nr#  r8  )rO   r  r:  )
rX   rP   r  rA   rI   rM   rq   rS   r   CEnumDefItemNode)rE   r6   rr  rY   rO   r  r:  s          r2   ra  ra    s    
**,C1:DNE}2$t+Etts{	q		LL''UE3 4r4   c                 l   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                          g }| j                  dk(  r$| j                          | j                  d	d
       n| j                  d       | j                          t        |j                        }| j                  dk7  rk| j                  dk7  r+|j                  t        | | j                         |             n!| j                          | j                  d	       | j                  dk7  rk| j                          |s-|j                  dk7  rt!        |d       n| j                  d       t#        j$                  ||||||j&                  |j                  |j(                  |j*                  dk(  |
      S )NFr  TrH   r  r#  rh   r  r  r  r&   )r=   r  r  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionr  )	rO   r  r  
attributesr?   r=   r$   r]  r  )rL   rM   rI   r4  rP   r  rA   r  rp   r[  r)   r=   rS   r\  rX   r]  r   r   r  r?   r$   r<   )	rE   rY   r6   r  r  rO   r  re  r^  s	            r2   p_c_struct_or_union_definitionrf  #  s   FzzX	447?ajjH4JJx ::DFFH1:DNE}2$t+Jtts{	
446>FFH1DIHHYOOcnn5H$$("446>%%3Aqzz|XNP FFH$$%9: $$(" OOcnn8#hi	EF&&sU4j''cnngg		\ 9FL Lr4   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 hererh   r  r  zNeed at least one type)rO   types)r<   r   rM   rP   rp   r  r[  rI   rS   r   r]  r   FusedTypeNode)rE   rY   r6   rO   rh  s        r2   rR  rR  Q  s     yy00c;<FFH1:DHHSMOOE
$$(
446>LLq)*FFH	 $$(
 OOc+,sU;;r4   c                 T    | j                   dk(  rt        | ||      S t        | ||      S )Nr  )rL   r_  rf  rS  s      r2   rQ  rQ  u  s,    zzV"1c3//-ac::r4   c                     |}| j                   dk(  rN| j                  dv r@| j                  }|dk7  r||k7  r| j                  d|d|dd       | j                          |S )	NrH   )r  rI  readonlyr+   z Conflicting visibility options 'z' and 'r  Fr   )rI   rL   r   rM   )rE   prev_visibilityr=   s      r2   rK  rK  }  sc     Jttw1::)IIZZ
i'J/,IGG"J07<  >	r4   c                     | j                   dk(  r9| j                  dv r+| j                  }| j                          |gt        |       z   S g S )NrH   )r"   )rI   rL   rM   p_c_modifiers)rE   modifiers     r2   ro  ro    sA    ttw1::4::	zM!,,,Ir4   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  r  Tr  )rB  )r   r  r  rH   r  	cpp_classF->z~Return type annotation is not allowed in cdef/cpdef signatures. Please define it before the function name, as in C signatures.r   rh   )r  r  r  r  rr  z&C function definition not allowed herer_  r   )	r=   r   r   r_  r  rB  r$   r@   is_const_methodrR   r&   r   z&Syntax error in C variable declarationr  )r  r  )r=   r   declaratorsr]  r  r$   rB  r@   )r<   ro  r   rB   r   r@   rI   rL   rM   r   rq   r  r)   r   r  r=   r$   rt  rS   
start_liner  r  r  )rE   rY   r6   r   rB  r   r   rt  r  suiter   ru  doc_lines                r2   r\  r\    s=    #		-G GLa Ia$CMMJI3#;L+/4A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|37$HJz* ddck <<!#	ATXY9922q||x7Oq/CC""3!%YY"??''!//+ Mr4   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 )NT)r?   r=   r  rH   rJ  r?  )r  r  z"Syntax error in ctypedef statementr  r  )r   r   r=   r$   r]  )rX   rM   rK  r=   rG  r$   rI   rN  rL   rP  rQ  rR  r   r   r  r   CTypeDefNoder<   )rE   r6   rY   r=   r$   r   r   s          r2   r  r    s	    **,CFFHa0J
(C
4j
9C
ttw#AsC00	
QZZ+<<QS))	
QZZ72!!S#..!!d3	#AsD4H
	=PTU!!Y##3YY,.	0 	0r4   c                    g }| j                   dk(  rr| j                         }| j                          t        |       }|j	                  t        j                  ||             | j                  d       | j                   dk(  rr|S )Nr   )	decoratorz"Expected a newline after decorator)rI   rX   rM   r   rS   r   DecoratorNoder  )rE   r  rY   r|  s       r2   r  r    so    J
$$#+jjl	$Q'	%--cYGH	=> $$#+ r4   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   rP   )rE   rO   s     r2   _reject_cdef_modifier_in_pyr    s=     	ttw4?2	fimmuz{qzKr4   r  r  c                    |r|d   j                   n| 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   r   z~Expected '(', found '%s'. Did you use cdef syntax in a Python declaration? Use decorators and Python type annotations instead.rH   r   )ri   rs  r_  r   )	rO   rk   rl   rm   r  r_  r  r  return_type_annotation)rY   rX   enter_asyncrM   r  rP   rp   rI   rL   ro   r  r  r)   
exit_asyncr   DefNode)rE   r  r  rY   rO   rk   rl   rm   r  r  r_  s              r2   r  r  	  s     **Q-

qzz|C	FFH&q'!*5DHH	>$$'/AJJqtt	56
 $1s#C D(LHHSM1::.!ttt|	!-a#Aqzz2&q#J*?@IC	==$TH<dz57 7r4   c           	      P   t        | dd|      }d }d }| j                  dk(  rt        |      dk(  r| j                  d       | j	                          |D ]	  }d|_         | j                  dk(  r/| j	                          |j                  t        | dd|             n | j                  |k7  r| j                  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 )NT)r7  r  rj   r]   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'r   rR   z-Syntax error in Python function argument listr   rH   )rj   )r7  r  r8  rj   r"  )r  rI   r?  r   rM   pos_onlyrT  p_py_arg_decl)rE   ri   rj   rk   rl   rm   r   s          r2   ro   ro   *  sj   T$-/DHLtts{t9>GG 4 5	 	CCL	443;FFHKKT)U VTTZGGCDtts{	447?$Q)<H443;FFHKKdtYbd eTTZGGCDttt|	$Q)<tts{	(L))r4   c                     | j                         }t        |       }d }|r*| j                  dk(  r| j                          t	        |       }t        j                  |||      S )Nrh   )rO   r  )rX   rP   rI   rM   r  r   PyArgDeclNode)rE   rj   rY   rO   r  s        r2   r  r  P  sO    
**,C1:DJQTTS[	!!_
s4jIIr4   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  rI  r  r   r  )rO   basesrB  r  r_  r  force_py3_semantics)rX   rM   r   rP   r  r?  rI   rG  r]  r   rO  r  r)   r   PyClassDefNoderJ   r  )
rE   r  rY   
class_namerY  rW  rA  rB  r  r_  s
             r2   r  r  [  s     **,CFFHwqz*J++JILtts{(9!%(P%":3Q]"^	<''"5	&q#G*<=IC*!dzII449; ;r4   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.rI  r   )rI  r  zBName options only allowed for 'public', 'api', or 'extern' C classrh   r  r  r  r   z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classrI  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_  )rM   rP   rI   rS   r=   r   rL   rG  r]  r   rO  r$   rX   p_c_class_optionsr<   r  r)   r  r   r  r?   r  )rE   rY   r6   r  r  r  r  r  r  r  rA  rB  r.  
body_levelr  r_  s                   r2   rN  rN  s  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* r4   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   objectrS  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrR   rh  z)Expected 'object', 'type' or 'check_size')rp   rI   rL   rM   rP   r   )rE   r  r  r  s       r2   r  r    s    NLJHHSM
447?::!FFH$QZNZZ6!FFH"1:LZZ<'FFH J!<<IJVW443;	! " HHS=><33r4   c                     | j                         }| j                          t        |       }t        | t	        d      d      \  }}t        j                  ||||      S )Nr  r   Tr  )rO   r  r_  )rX   rM   rP   r  r)   r   PropertyNode)rE   rY   rO   r  r_  s        r2   r  r    sP    
**,CFFH1:D&	3Z 6ICc#DAAr4   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   rX   r%  r  r   r  )rE   rY   string_nodes      r2   r  r    sN    
 	tt~jjlQi	1DI!!#K88r4   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   rX   r  r  r   )rE   rY   r  bytes_resultunicode_results        r2   r  r    s`    tt~jjl-A!-D*lN	5M9!!IJr4   c                 l   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 |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   r  )r   r   r  rs   is_string_literalr  rY   r  r   r  r   r:  )r   doc_noder  r  s       r2   r  r     s
    H|	D%,,	-99&&yyH%%dhhb9D	D%,,	-$**

eAh 2 23Qx}}.. 8==!H 9 
Hi11	2D	Fnn 9 nn9r4   c                     t        |  ||      d      }| j                  dk7  r>| j                  dt        | j                        dt        | j                        d       |S )Nr   Tri  r'   Syntax error in statement [rR   rh  )r@  rI   r   r  rL   )rE   r<   r6   r_  s       r2   p_coder     sL    As514HDttu}	JQZZ(* 	+Kr4   z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c           
      \   i }| j                   dk(  rR| j                         }t        | j                        }|r	|j	                  d      j                         }	 t        j                  |d      }|D ]  }||vrt        j                  j                  |      t        u r||xx   ||   z  cc<   ||   ||<   F||   ||   k(  rt        |d|       a| j                  d	|d
||   d||   |        d|v r| j                   j#                  |d          d|v r|d   | j                   _        |j'                  |       | j                          | j                   dk(  rR|S # t        $ r;}| j                  |j                  d   d       | j                          Y d }~d }~ww xY w)Ncommentliner   T)ignore_unknownr   Fr   zDuplicate directive found: z3Conflicting settings found for top-level directive : r  r7  r  legacy_implicit_noexcept)rI   rX   !_match_compiler_directive_commentrL   groupr  r   parse_directive_list
ValueErrorr   rk   rM   directive_typesr  rN  r   rJ   set_language_levelr  r/   )rE   r   rY   mdirectives_stringnew_directiveserO   s           r2   p_compiler_directive_commentsr  -  s   F
$$-
jjl-ajj9 !
 0 0 2!(!=!=>O`d!e ' 
Lv%,,006$>4LN4$88L+1$<N4(#D)VD\9CD!JKGGfTlN4,@BGJ  L
L  >1		,,^<L-MN)^;5CD^5_		2 MM.)	C $$-
D M7  q	/s   E' '	F+00F&&F+c                    | j                         }t        |       }d| _        | j                  j                  | j                  j                  d       |rdnd}t        |       }t        |  ||      d      }| j                  dk7  r>| j                  d	t        | j                        d
t        | j                        d       t        |||||      S )NF3r  r  r   Tri  r'   r  rR   rh  )r  r_  full_module_namedirective_comments)rX   r  r:  rJ   r  r  r  r@  rI   r   r  rL   r   )	rE   r  r  r6   rY   r  r<   r  r_  s	            r2   p_moduler  U  s    
**,C6q9Ayy'			$$S)LXE
q/CAs/FDttu}	JQZZ(* 	+cT)9+=? ?r4   c                     t        |       }| j                  dk(  r(| j                  d       | j                  d       d}||fS d}||fS )Nr8  r   FT)rP   rI   rp   )rE   rO   requireds      r2   p_template_definitionr  j  sN    1:Dtts{		 > >r4   c           
         | j                          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                          t        |        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   rR   rh  r   r  r   z&Name options not allowed for C++ classrh   r&   rr  )r=   r<   r#   r  r  r  z$Syntax error in C++ class definitionr  )rO   r  base_classesr=   r]  re  rB   )rM   rP   r  rA   rI   r   r  rS   rp   r   rX   r  r[  r  r)   r=   r#   rB   p_cpp_class_attributer  r]  r   CppClassNoder<   )rE   rY   r6   r  r  rB   rO   r  template_namesr  r#   re  r^  s                r2   rO  rO  v  sy    FFH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{			 	Q
CNN+UM_VYV_V_`+ddhttv~!!"78"DE  !56 ddh 	

	?@c#^^l* K @s   ,K=c                    | j                         }d }| j                  dk(  rt        |       }| j                  dk(  rt	        | ||      S | j                  dk(  rt        | |      S | j                  dk(  r;| j                  t        v r)| j                  dk7  rt	        | ||      S t        | ||      S t        | ||      }|t        j                  t        j                  t        j                  f}|j                  r#|t        j                  t        j                  fz  }t!        ||      s| j#                  d       ||_        |S )Nr   r*  r~  rH   r  r  )rX   rI   r  rL   rO  r  rP  rQ  r\  r   r  r  r  rC   r  r  r   r   r  )rE   r6   rY   r  r   r  s         r2   r  r    s   
**,CJtts{!!_
zzZ%ac22	
z	!#As++	
QZZ+<<::)!S#66 C--*1c37!$$e&7&79L9LLC..u22E4F4FFFdC(QR(DOr4   c                    | j                   dk(  r| j                  dk(  sJ | j                         }t        |       5 }| j	                          t        |       }d }| j                   dk(  r|g}| j                   dk(  rJ| j	                          | j                   dk(  rn*|j                  t        |              | j                   dk(  rJ|t        j                  ||      }| j                  d       d d d        ry | j                          | j                          g }| j                   dk7  r+|j                  t        | |             | j                   dk7  r+| j                          t        j                   ||      S # 1 sw Y   xY w)NrH   r  rR   rh   rI  r  )subjectcases)rI   rL   rX   r   rM   r   rS   rq   r   rO  rp   r  r[  p_case_blockr]  r   	MatchNode)rE   r6   rY   rP  r  subjectsr  s          r2   r  r    sD   447?qzzW44
**,C	!	 	"1%443;yHddckFFHtts{OOF1I&	 ddck
 ))#H=G	  OOE
$$(
\!S)* $$(
OO##CFF7 s   BE>*E>>Fc                 X   | j                   dk(  r| j                  dk(  s| j                  d       | j                          | j	                         }t        |       }d }| j                   dk(  r| j                          t        |       }t        | |      }t        j                  ||||      S )NrH   caserz   )r5  r_  guard)
rI   rL   r4  rM   rX   
p_patternsrq   r
  r   MatchCaseNode)rE   r6   rY   r5  r  r_  s         r2   r  r    s    DDGO

f 4	

6FFH
**,CmGEttt|	q	1c?D''W4uUUr4   c                    g }d}| j                         }	 t        |       5 }t        |       }d d d        r5|rnu|d   }| j                  |j                  d   |j                  d          |j                         | j                  dk(  r!d}| j                          | j                  dv rnn|rt        j                  ||      S |d   S # 1 sw Y   xY w)	NFTr   r   r7  rR   )rh   rz   patterns)
rX   r   p_maybe_star_patternr   rk   rS   rI   rM   r   MatchSequencePatternNode)rE   r  seqrY   rP  r5  r  s          r2   r  r    s     H
C
**,C
a  	.F*1-G	.1Iq	qvvay1 443;CFFHtt{"# & 66sXNN{+	. 	.s   CCc                    | j                   dk(  re| j                          d }| j                  dk7  rt        |       }n| j                          t	        j
                  | j                         |d      }|S t        |       }|S )Nr   r.  T)r  is_star)rI   rM   rL   p_pattern_capture_targetr   MatchAndAssignPatternNoderX   	p_pattern)rE   r  r5  s      r2   r  r  #  sn     	tts{	::-a0FFFH ::JJL
 A,r4   c                 T   g }| j                         }	 |j                  t        |              | j                  dk7  rn| j	                          ;t        |      dkD  rt        j                  ||      }n|d   }| j                  dk(  r| j                  dk(  r| j	                          t        |       5 }|j                  j                  t        |              d d d        rV| j                  dk(  rG| j	                          t        j                  |d   j                  d   |d   j                  d         S |rAt        |       5  t        |       }t        j                  |j                   d	      cd d d        S |S # 1 sw Y   xY w# 1 sw Y   nxY w| j#                  |d          /)
Nr   r   )alternativesr   rH   r  r.  whatzInvalid pattern target)rX   rS   p_closed_patternrI   rM   r?  r   OrPatternNoderL   r   
as_targetsr  r   	ErrorNoderk   rq   rY   r   )rE   r  rY   r5  rP  rs   s         r2   r  r  7  sq    H
**,C
(+,443;		  8}q ..!

 1+ttw1::-	a  	CF%%&>q&AB	CaddckFFH??6!9>>!#46!9>>!;LMM!!$ Paytxx6NOP P N	C 	CP P GGF1Is   3%E=,F	=F	Fc                 J   | j                   dk(  rD| j                  dk(  r5| j                         }| j                          t	        j
                  |      S | j                   dk(  rt        |       S | j                   dk(  rt        |       S | j                   dk(  r8t        |       5 }t        |       }|s|cddd       S 	 ddd       t        |       S t        |       5 }t        |       }|s|cddd       S 	 ddd       t        |       5 }t        |       }|s|cddd       S 	 ddd       t        |       5 }t        |       }|s|cddd       S 	 ddd       t        |       S # 1 sw Y   t        |       S xY w# 1 sw Y   xY w# 1 sw Y   cxY w# 1 sw Y   t        |       S xY w)a	  
    The PEG parser specifies it as
    | literal_pattern
    | capture_pattern
    | wildcard_pattern
    | value_pattern
    | group_pattern
    | sequence_pattern
    | mapping_pattern
    | class_pattern

    For the sake avoiding too much backtracking, we know:
    * starts with "{" is a sequence_pattern
    * starts with "[" is a mapping_pattern
    * starts with "(" is a group_pattern or sequence_pattern
    * wildcard pattern is just identifier=='_'
    The rest are then tried in order with backtracking
    rH   r.  r  r   r   N)rI   rL   rX   rM   r   r  p_mapping_patternp_sequence_patternr   p_group_patternp_literal_patternp_capture_patternp_value_patternp_class_pattern)rE   rY   rP  r   s       r2   r  r  [  s   ( 	ttw1::,jjl	77<<	
 ##	
!!$$	
a  	F$Q'F	 		 "!$$	!	 "1%  
!	 "1%  
!	  #  1%	 "!$$   1s0   "E!E7F4F!E47F FF"c           	         d}d}| j                   dk(  r.| j                   }| j                         }| j                          d}| j                   }| j                         }d }|dk(  rt        |       }n8|dk(  r3| j                  }| j                          t        j                  ||      }||dk(  rt        j                  |      }|| j                   d	v r| j                   }| j                          | j                   d
k7  r| j                  d       nk| j                         }| j                  d d }| j                          t        j                  |||t        j                  | j                         |            }|Z|d
k(  rU| j                  d d }| j                          t        j                  |||z         }|dk(  rt        j                  |      }|t        j                  ||      S |r| j                  d       |dk(  r"t        |       }t        j                  ||      S |dk(  r%t        |       }	|	rt        j                  ||	d      S | j                  d       y )NFr  r   Tr  r  r9  r   r   r  zExpected imaginary numberr;  )r   r   zExpected a numberr  rH   )r:  is_is_checkzFailed to match literal)rI   rX   rM   r  rL   r   r  UnaryMinusNoder   r^   r  r   MatchValuePatternNoder  r  )
rE   next_must_be_a_numbersignsign_posrI   rY   resr:  add_posr   s
             r2   r  r    s    "Dtts{tt::<	 $	
B
**,C
C	U{A	w

	!!#U3
43;&&x=
144:-tt	446>GG/0jjlGJJsOEFFH&&"++AJJLF	C {rV|

3B	  DJ73;**8SAC
33CsCC	#$	^A33CsCC	w (*!776W[\\GG%&r4   c                 ^    t        j                  | j                         t        |             S )N)r  )r   r  rX   r  r   s    r2   r  r    s&    33	

'* r4   c                 8   | j                   dk7  r| j                  d       | j                         }t        | | j                        }| j                          | j                   dk7  r| j                  d       | j                   dk(  rS| j                         }| j                          t        |       }t        j                  |||      }| j                   dk(  rS| j                   dv r| j                  d| j                   z         t        j                  ||      S )NrH   Expected identifierr!  r.  )r   r8  zUnexpected symbol '%s'r9  )rI   r   rX   r  rL   rM   rP   r   r2  r   r  )rE   rY   r  attr_posattrs        r2   r  r    s    ttw	%&
**,C
AJJ
CFFHtts{	
$$#+::<	qz%%hC4H	 $$#+
 	ttz	(144/0//3??r4   c                 `    | j                  d       t        |       }| j                  d       |S )Nr   r   )rp   r  )rE   r5  s     r2   r  r    s&    HHSMlGHHSMNr4   c                    | j                   }| j                         }|dv r|dk(  rdnd}| j                          g }| j                   |k7  ro|j                  t	        |              | j                   dk(  r| j                          n%|dk(  rt        |      dk(  r| j                  d       n| j                   |k7  ro| j                  |       t        j                  ||	      S | j                  d
       y )Nr  r   rh  r   rR   r   r   z3tuple-like pattern of length 1 must finish with ','r  zExpected '[' or '(')
rI   rX   rM   rS   r  r?  r   rp   r   r  )rE   openerrY   closerr  s        r2   r  r    s    TTF
**,C#3	ddfnOO034tts{S=S]a%7GGQR ddfn 	
66sXNN	%&r4   c           	         | j                         }| j                  d       | j                  dk(  r%| j                          t	        j
                  |      S d }g }d }| j                  dk7  r|r|s| j                         }| j                  dk(  r| j                          t        |       }nst        |       5 }t        |       }|j                  }d d d        rt        |       }|j                  }| j                  d       t        |       }|j                  |f       | j                  dk7  rn | j                          | j                  dk7  r| j                  d       |t        j                  |d      S t	        j
                  ||D 	cg c]  }	|	d   	 c}	|D 	cg c]  }	|	d	   	 c}	|
      S # 1 sw Y   xY wc c}	w c c}	w )Nr  r  r"  rh   rR   z7** pattern must be the final part of a mapping pattern.r  r   r   )keysvalue_patternsdouble_star_capture_target)rX   rp   rI   rM   r   MatchMappingPatternNoder  r   r  r:  r  r  rS   r   r  )
rE   rY   r  items_patternsstar_star_arg_posrP  r5  rK  r:  kvs
             r2   r  r  
  s   
**,CHHSMtts{	55c::!%N
$$#+%.? !

444<FFH)A!)D& "!$ $+A.mm$ )!,mmHHSMaLE!!3,/443;	' $$#+( HHSM$L
 	
 11 ./"1/*89B"Q%9%?	 '$ $* 09s   5F2F>
G2F;c                 @   | j                         }t        | | j                        }| j                          | j                  dk(  rS| j                         }| j                          t        |       }t        j                  |||      }| j                  dk(  rS|}| j                  d       | j                  dk(  r'| j                          t        j                  ||      S g }g }d }| j                  dk7  rt        |       5 }	|j                  t        |              d d d        	s|r?| j                         }n.t        |       5 }	|j                  t        |              d d d        | j                  dk7  rn | j                          | j                  dk7  r| j                  d       |t        j                   |d      S t        j                  ||||D 
cg c]  }
|
d	   	 c}
|D 
cg c]  }
|
d
   	 c}
      S # 1 sw Y   xY w# 1 sw Y   xY wc c}
w c c}
w )Nr!  r.  r   r   )class_rR   z+Positional patterns follow keyword patternsr  r   r   )r  positional_patternskeyword_pattern_nameskeyword_pattern_patterns)rX   r  rL   rM   rI   rP   r   r2  rp   r   ClassPatternNoder   rS   r  p_keyword_patternr   r  )rE   rY   r  r  r  r  r  keyword_patternskeyword_patterns_errorrP  r  s              r2   r  r  9  s    **,C
AJJ
CFFH
$$#+::<	qz%%hC4H	 $$#+
 FHHSMtts{	..s6BB !
$$#+a  	5F&&y|4	5)*&!!$ > ''(9!(<=>443;	 $$#+ HHSM)">
 	
 **f11A B2A B4D#EbBqE#E	 %	5 	5> > !C#Es$   G>H
H*H>H
Hc                     | j                   dk7  r| j                  d       t        | | j                        }| j	                          | j                  d       t        |       }||fS )NrH   r  r8  )rI   r   r  rL   rM   rp   r  )rE   r   r:  s      r2   r  r  k  sQ    ttw	%&
AJJ
CFFHHHSMaLE:r4   c                 *   | j                   dk7  r| j                  d       | j                  dk(  r| j                  d       t        | | j                        }| j	                          | j                   dv r| j                  d| j                   z         |S )NrH   r  r.  z$Pattern capture target cannot be '_')r!  r   r8  zIllegal next symbol '%s')rI   r   rL   r  rM   )rE   r  s     r2   r  r  v  su     	ttw	%&zzS	67Aqzz"FFFHtt	*QTT12Mr4   r<   c                 t   d|z  }| j                  |       |r| j                  | d       |s| j                  d       y t        |      t        u rM| j                  d|d    d|d    d       |d	d  D ]  }t        | ||dz           | j                  | d
       y t	        |t
        j                        rw	 |j                  }| j                  | d|j                   d       t        |j                  j                               D ]"  \  }}|dk7  s|dk7  st        | ||dz   |       $ y t        |      t        u r=| j                  d       |D ]  }t        | ||dz           | j                  | d       y | j                  | | d       y # t        $ r |j                  j                  }Y w xY w)Nz  r  zNone
r   r   z @ r   r  r!   z)
tagrY   z[
z]
)writerS  rQ  print_parse_treer   r   Noder  r  r  r9   rY   r  r.   rr  rN  )	r  r   r<   rK  indr\  r  rO   r:  s	            r2   r  r    s   e|CGGCL
	3%r
		du		!DG9CQy+,H 	/DQeAg.	/	3%s	D%**	%	*((C 	
3%s488*B'(!$--"5"5"78 	:KD%u} E57D9	: 
dt		 	/DQeAg.	/	3%s	3%vR !  	*..))C	*s   :F F76F7rD   )zExpected an identifier)T)NN)r  r-   )F)r   )TF)FN)FFFT)NF)r   T)r  rt  r  rQ  rr  ior   r   unicodedatar   r	   	functoolsr   r   Scanningr   r   r   r  r   r   r   r   r   r   r   r   Errorsr   r   r    r   r
   r   r   	frozensetr   r)   cfuncrP   rU   r[   rf   rt   rq   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r$  r&  r  rG  r]  r+  r1  ri  rN  rq  rt  rz  rk  ccallr|  r%  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r0  r%  r  r  r  r`  rX  r^  r  r  r  r  r[  r  r!  r  r@  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  re  r  r  r!  r%  r  r  r3  r0  rG  rK  r  rM  rS  rJ  rk  rn  rq  rv  r|  r  r@  r
  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  rP  r  r  r   r	  r  r+  r  r  r  r  r:  r  r  r;  r  rG  r  rM  rL  r_  r^  ra  rf  rR  rQ  rK  ro  r\  r  r  r  r  ro   r  r  rN  r  r  r  r  r  r  compiler  r  r  r  r  rO  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rD   r4   r2   <module>r      s6     BV Bv BV B#B4:B$*B?EB B '-B 5;B EKB 	B +1	B 9?	B JP	B Y_	B
 B
 39B
 W]B B '-B  %B =AB  	 4 % J J      8 " 0 0    -&y) = 3   0 |   L       L     ( 
l 
 
      *  $51 4 4 4
< $ 5, 5 5 ,   
L 
 
 l   # # # 
l 
 
 l     (  	9 6 ,  /, / / /, / / 1, 1 1 7L 7 7 /L / / Al A A   
   ( ,  >   ( K` 5, 5y 5 5, ? ? ? F F F, |  ( F, F F 
' 
' 
', /1 /1V[[ /1E /1 /1d '#E '# '#T 
Zl 
Z 
Z" |  * 	" 	" 	" 	" < D    |   |      1 1 )5l )5 )5X 1\ 1 1. l  , 2\ 2 2@ .l . . " "J 0,L 0,U 0, 0,f 7L 7 7 7 fkk    :      K. K.U K. K.\ #< #C # # j\ j(.jGM{{j06jCGj jX &< & &&?E{{&*0++& )/& <@& &P )< )E ) ) &(C &(L &( &(` /L / /< <   (, ( (   , jZ< jZ jZ\ 3 3 3  , d   < t   \    ,   L   
| 
 
 B B B "6>>)Y 8/ .0 1  0, 0 0 2L 2 2 0W, 0W 0Wf , , ,8 . . .8 /| / / # #FKK # # $ $ $ 'L ' ' 4, 4 4 * * *: 0, 0 0@ M| Mfkk M M`  |       
R\ 
Rv{{ 
Ru 
R 
R    
B, 
B 
B 
<l 
< 
< '< ' ' \   	# 	# 	# (| (v{{ ( ( )L )&++ )PVP[P[ )hl ) )X 7< 7 7 |   &v~~i < 2    #    L   el eFKK eRXR]R] e e 2| 2 28 0| 0 0> '< ' '*    L FKK  @ 
 
 
 
 
 e< e6;; e5 e e: D| D D2  ,      F !| !6;; ! !H <   #| # # l  8 vX< vXv{{ vX vXr 6 6FKK 6 6$ !$ B| B B l  X]  . 6)\ 6)TY 6) 6)r O\ OV[[ O O !L ! ! *6>>)Y @* 6+ ,  \  : _L _FKK _ _D L  4  &++  ,   " J| J J J '| ' ' 'T CL CV[[ C C
 	l 	v{{ 	 	 $V^^Iy :6 07 8  't
. 
  )&..I ?+ 5, -  '%&'(  #FNN9i 9) /* +  < E    <   *-%(-ein-2E=B"l " ++"8>"[a[f[f"%{{">Dkk" 06{{" "J IL I I i< iv{{ i i2 "0	9 F < "  O\ O!'O7={{ORXR]R]O&,kkO=C[[O Od |    , 6;;   A* A* A* A* A*H (	9 >% 4& '  (+*/U5:SX*.L "KK?E{{'-{{EK[[ #KK 48 & < FKK   [`).HL3L 3&++ 3V[[ 3!;;3 ++3:@++3 3l 	4L 	4 	4 \ fkk   &8 &8 &8R -L - - #< # #4 <@< <@ <@~ 
7\ 
7t 
7 
7 4\ 4t 4 4 *Ll *L *LZ  <,  <  <F ;\ ; ; L   \ d   A< A AH 0L 0 04 L T   <   7| 7 7FKK 7 7@ "*\ "*v~~ "*PVP[P[ "*gl "* "*J J\ Jfkk J J ; ; ;. IL I IX 4 4% 4 44 B| B B 	\ 	 	 
L 
 
   > "&C l   %3FNN6:2::+<--2U%4 ! $\ $d $ $N 9< ? ? ?( \ e   <l < <~ \  4 G G GB VL V V ,  > L  &      F . . .b ?' ?' ?'D    @| @ @$ |   ', ' ', + + +\ .| . .b  %   
 
 
( "V[[ " "r4   