
    -Phg                    ,%   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 d&d'lmZ dd(lmZ dd)lm Z  d*Z! G d+ d,          Z"e j#        d#d.efd/            Z$e j#        d.efd0            Z%e j#        d.ed1efd2            Z&d.efd3Z'e j#        d.efd4            Z(e j#        d.efd5            Z)e j#        d.efd6            Z*e j#        d.efd7            Z+d8d9d:Z,e j#        d.efd;            Z-d.efd<Z.e j#        d.efd=            Z/e j#        d.efd>            Z0e j#        d.efd?            Z1e j#        d.efd@            Z2e j#        d.efdA            Z3e j#        d.efdB            Z4e j#        d.efdC            Z5e j#        d.efdD            Z6 e j        e7 e7dE                    Z8e j#        d.efdF            Z9e j#        d.efdG            Z:e j#        d.efdH            Z;e j#        d.efdI            Z<e j#        d.efdJ            Z=e j#        d.efdK            Z>e j#        d.efdL            Z?e j#        d.efdM            Z@e j#        d.efdN            ZAe j#        d.efdO            ZBe j#        d.efdP            ZCe j#        d.efdQ            ZDe j#        d.efdR            ZEe j#        d.efdS            ZFe j#        d.efdT            ZGe j#        d.efdU            ZHe j#        d$d.edWe jI        fdX            ZJe j#        d1efdY            ZKe j#        d.efdZ            ZLe j#        d.efd[            ZMe j#        d.ed1efd\            ZNe j#        d.efd]            ZOe j#        d.efd^            ZPe j#        d.efd_            ZQe j#        d`             ZRe jS        d%da            ZTe j#        d.efdb            ZUe j#        d.efdc            ZVe j#        d.efdd            ZWe j#        d.efde            ZXe j#        d.efdf            ZYe j#        dg             ZZe j#        d.ed1efdh            Z[e j#        d&d.edje\fdk            Z]e j#        d1e jI        fdl            Z^e j#        d'd.ed1efdm            Z_e j#        dne\d.efdo            Z`dp dqD             \  ZaZbe j#        dredse jc        d1efdt            Zde j#        d.edue jI        d1eefdv            Zfe j#        d.edredwe jc        due jI        d1ef
dx            Zge j#        d.efdy            Zhe j#        d.efdz            Zie j#        d.efd{            Zje j#        d.efd|            Zke j#        d.efd}            Zle j#        d.efd~            Zme j#        d'd.ed1eefd            Zne j#        d'd.ed1eefd            Zoe j#        d'd.ed1eefd            Zpe j#        d.efd            Zqe j#        d.efd            Zre j#        d.efd            Zse j#        d.efd            Zt e j        e7 e7d                    Zue j#        d.efd            Zve j#        d.efd            Zwe j#        d.efd            Zxe j#        d.efd            Zye j#        d.efd            Zze j#        d.efd            Z{e j#        d(d.ede jI        fd            Z|e j#        d.efd            Z}e j#        d.efd            Z~e j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d)d.ede jI        fd            Ze j#        d.efd            Ze j#        d.ede jI        d1efd            Ze j#        d.efd            Ze j#        d.efd            Z e j        e7 e7d                    Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d(d.ede jI        fd            Ze j#        dqd.ede jI        de jI        d1efd            Ze j#        d.efd            Ze j#        d.efd            Z e j        e7 e7d                    Ze j#        d.ede\fd            Ze j#        d.efd            Ze j#        dqd.ede jI        de jI        fd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d(d.ede jI        fd            Ze j#        d.ede jI        d1eefd            Ze j#        d.ede jI        d1efd            Ze j#        d.efd            Ze j#        d)d.ede jI        fd            Ze j#        d)d.ede jI        fd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d(d.ede jI        fd            Ze j#        d)d.ede jI        fd            Ze j#         e"            fd.efd            Ze j#        d(d.ede jI        d1efd            Ze j#        d'd.efd            Ze jS        d*d.ede jI        fd            Ze j#        d.efd            Z e j        e7 e7d¦                    Ze j#        d'd.efdÄ            Ze j#        d'd.ede jI        fdĄ            Ze j#        d.efdń            Ze j#        d.ed1e jI        fdƄ            Ze j#        d.efdǄ            Ze j#        d.ed1e jI        fdȄ            Ze j#        d.ed1e jI        fdɄ            Ze j#        d.ed1e jI        fdʄ            Ze j#        d.ed1e jI        fd˄            Z e j        e7 e7d̦                    Z e j        edddddddddМ          Z e j        e7 e7dѦ                    Z e j        e7eez   e7e          z            Z e j        e7 e7dҦ                    Ze j#        d.ed1efdӄ            Ze j#        d.efdԄ            Ze jS         e"            ddddddfd.ede jI        de jI        de jI        de jI        de jI        de jI        fdڄ            Ze j#        d.efdۄ            Ze j#        d.ede jI        fd܄            Z e j        e7 e7dݦ                    Ze j#        d.ede jI        de jI        de jI        de jI        de jI        fdބ            Ze j#        d.ed1e jI        fd߄            Ze j#        d.ed1e jI        fd            Ze j#        d.ede jI        d1efd            Z e j        e7 e7d                    Ze jS         e"            dddddVfd.ede jI        de jI        de jI        de jI        de jI        d1eefd            Ze j#        d.ed1e jI        fd            Ze j#        	 	 	 d+d.ede jI        de jI        de jI        de jI        de jI        fd            Ze j#        d.efd            Ze j#        d.ed1e jI        fd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.edeefd            Ze j#        d.edeefd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.ed1eefd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.ed1eefd            Ze j#        d.efd            Ze j#        d,d.edeede jI        fd            Ze j#        d-d.ede j        de jI        d1efd            Ze j#        d$d.ede jI        fd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.ed1efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d1efd	            Ze jS        de"fd.efd
            Z e j        e ej        d          j                  Ze j#        d.ed1efd            Ze jS        e"fd.efd            Ze j#        d.ed1efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze j#        d.efd            Ze jS        d'd e j        fd!            ZdS (.      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      )r   )r
   )r   )inlinenogilapic                   B    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZd Zd ZdS )CtxotherprivateFNc                 :    | j                             |           d S N)__dict__update)selfkwdss     W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/Parsing.py__init__zCtx.__init__5   s    T"""""    c                     t                      }|j        }|                    | j                   |                    |           |S r)   )r%   r*   r+   )r,   r-   ctxds       r.   __call__zCtx.__call__8   s:    eeL		
r0   )__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr#   overridabler"   	namespace	templatesallow_struct_enum_decoratorr/   r4    r0   r.   r%   r%   (   se        EJIL
CKEII"'# # #    r0   r%   Expected an identifiersc                     | j         dk    r5| j                            | j                  }|                                  |S |                     |           d S NIDENT)sycontextintern_ustringsystringnextr   )rB   messagenames      r.   p_identrM   @   sN    twy''
33		r0   c                    g }| j         dk    rq|                    | j                            | j                             |                                  | j         dk    rn|                                  | j         dk    q|S )NrE   ,)rF   appendrG   rH   rI   rJ   )rB   namess     r.   p_ident_listrR   J   sr    E
$'//QY--aj99:::	43;;	 $'// Lr0   returnc                 h    |                                  }| j        }|                                  ||fS r)   )positionrF   rJ   )rB   posops      r.   p_binop_operatorrX   [   s,    
**,,C	
BFFHHHs7Nr0   c                     ||           }| j         |v rjt          |           \  }} ||           }t          j        ||||          }|dk    r't          j        | j        j        v rd|_        nd |_        | j         |v j|S )N/T)	rF   rX   r   
binop_noder
   divisionrG   future_directivestruedivision)rB   ops
p_sub_exprn1rW   rV   n2s          r.   p_binop_exprrc   d   s    	AB
$#++"1%%CZ]]!#r2r2299!)"==="&"& $#++ Ir0   c                    |                                  }|                                  | j        dk    rg }d x}}nt          | dd          \  }}}|                     d           t          |           }t          j        |||||          S )N:F)
terminator	annotated)argsstar_argstarstar_argresult_expr)rU   rJ   rF   p_varargslistexpectp_testr   
LambdaNode)rB   rV   rh   ri   rj   exprs         r.   	p_lambdefrq   t   s     **,,CFFHHHts{{"&&<<'4#(0 (0 (0$hHHSMMM!99DDL   r0   c                 d    t          |           }| j        dk    r|                     d           |S )N:=zAinvalid syntax: assignment expression not allowed in this context)p_test_allow_walrus_afterrF   r   )rB   rp   s     r.   rn   rn      s4     %Q''Dtt||	STTTKr0   c                 T   | j         dk    rt          |           S |                                 }t          |           }| j         dk    r_|                                  t          |           }|                     d           t          |           }t          j        ||||          S |S )Nlambdaifelse)testtrue_val	false_val)	rF   rq   rU   	p_or_testrJ   rm   rn   r   CondExprNode)rB   rV   rp   ry   r&   s        r.   rt   rt      s    tx||
**,,CQ<<Dtt||	||	q		%ctuUUUUr0   c                    t          |           }| j        dk    rl|                                 }|j        s|                     dd           |                                  t          |           }t          j        |||          S |S )Nrs   z=Left-hand side of assignment expression must be an identifierFfatallhsrhs)	rt   rF   rU   is_namer   rJ   rn   r   AssignmentExpressionNode)rB   r   rU   r   s       r.   p_namedexpr_testr      s     $A
&
&Ctt||::<<{ 	bGGS[`Gaaa	Qii1(MMMMJr0   orand)z||&&c                 .    t          | dt                    S )Nr   )p_rassoc_binop_expr
p_and_testrB   s    r.   r|   r|      s    q$
333r0   c                     ||           }| j         |k    rX|                                 }| j         }|                                  t          | ||          }t	          j        ||||          }nT| j         t          v rFt          | j                  |k    r0t          |                                 d| j         d|dd           |S )NzFound the C operator 'z%', did you mean the Python operator 'z'?r   r8   )rF   rU   rJ   r   r   r[   r   r   )rB   rW   	p_subexprra   rV   rb   s         r.   r   r      s    	1BtrzzjjllT	 B	22!#r2r22	
&	&	&+@+F"+L+L

WXW[W[W[]_]_]_`	 	 	 	 Ir0   c                 .    t          | dt                    S )Nr   )r   
p_not_testr   s    r.   r   r      s     q%444r0   c                     | j         dk    rK|                                 }|                                  t          j        |t          |                     S t          |           S )Nnotoperand)rF   rU   rJ   r   NotNoder   p_comparisonrB   rV   s     r.   r   r      sO    tu}}jjll	 
1>>>>Ar0   c                    t          |           }| j        t          v rl|                                 }t	          |           }t          |           }t          j        ||||          }| j        t          v rt          |           |_        |S )N)operatoroperand1operand2)	p_starred_exprrF   comparison_opsrU   p_cmp_opr   PrimaryCmpNodep_cascaded_cmpcascade)rB   ra   rV   rW   rb   s        r.   r   r      s    			Bt~jjlla[[A%cbR9 9 94>!!'**BJIr0   c                 T    | j         dk    rt          |           S t          |           S N*)rF   r   rn   r   s    r.   p_test_or_starred_exprr      s'    ts{{a   ayyr0   c                 T    | j         dk    rt          |           S t          |           S r   )rF   r   r   r   s    r.    p_namedexpr_test_or_starred_exprr     s)    ts{{a   """r0   c                     |                                  }| j        dk    rd}|                                  nd}t          |           }|rt	          j        ||          }|S )Nr   TF)rU   rF   rJ   
p_bit_exprr   StarredUnpackingNode)rB   rV   starredrp   s       r.   r   r   
  s]    
**,,Cts{{	a==D 9-c488Kr0   c                     |                                  }t          |           }t          |           }t          j        |||          }| j        t          v rt          |           |_        |S )N)r   r   )	rU   r   r   r   CascadedCmpNoderF   r   r   r   )rB   rV   rW   rb   results        r.   r   r     sf    
**,,C	!B			B&s"& & &Ft~'**Mr0   c                 B   | j         dk    r,|                                  |                     d           d}n_| j         dk    r9|                                  | j         dk    r|                                  d}nd}n| j         }|                                  |dk    rd}|S )Nr   innot_inisis_not<>!=)rF   rJ   rm   rB   rW   s     r.   r   r   $  s    tu}}			
	45==FFHHHBBBBT		TzzIr0   )
<>==>=<=r   r   r   r   r   c                 .    t          | dt                    S )N)|)rc   
p_xor_exprr   s    r.   r   r   A      6:...r0   c                 .    t          | dt                    S )N)^)rc   
p_and_exprr   s    r.   r   r   H  r   r0   c                 .    t          | dt                    S )N)&)rc   p_shift_exprr   s    r.   r   r   O  s    6<000r0   c                 .    t          | dt                    S )N)<<>>)rc   p_arith_exprr   s    r.   r   r   V  s    <666r0   c                 .    t          | dt                    S )N+-)rc   p_termr   s    r.   r   r   ]  s    :v...r0   c                 .    t          | dt                    S )N)r   @rZ   %z//)rc   p_factorr   s    r.   r   r   d  s    5x@@@r0   c                      t          |           S r)   )	_p_factorr   s    r.   r   r   k  s     Q<<r0   c                    | j         }|dv rR| j         }|                                 }|                                  t          j        ||t          |                     S | j        s|dk    rM|                                 }|                                  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   rE   sizeof)rF   rU   rJ   r   	unop_noder   in_python_fileAmpersandNode
p_typecastrI   p_sizeofp_power)rB   rF   rW   rV   args        r.   r   r   q  s    	
B	_Tjjll	"3HQKK888 	99**,,CFFHHH1++C*3#>>>>3YYa== 7]]qzX55A;;1::r0   c                 \   |                                  }|                                  t          |           }t          |t          j                  }t          |t          j        t          j        t          j        f          }|s|s|j	        | 
                    d           t          | d          }| j        dk    r|                                  d}nd}|                     d           t          |           }|rt          j        |||          S t          j        |||||          S )	NzUnknown typeTempty?Fr   )base_type_noder   )	base_type
declaratorr   	typecheck)rU   rJ   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderL   r   p_c_declaratorrF   rm   r   r   CythonArrayNodeTypecastNode)rB   rV   r   is_memsliceis_other_unnamed_typer   r   r   s           r.   r   r     s+    **,,CFFHHHa  IY(EFFK&y& 3  
   0  in6L	...Jts{{				HHSMMMqkkG Y(YPWXXXX!#	   r0   c                    |                                  }|                                  |                     d           t          |           r&t	          |           }t          j        ||          }n7t          |           }t          | d          }t          j	        |||          }|                     d           |S )N(r   Tr   r   r   ))
rU   rJ   rm   looking_at_exprrn   r   SizeofVarNoder   r   SizeofTypeNode)rB   rV   r   noder   r   s         r.   r   r     s     **,,CFFHHHHHSMMM q <))&sg>>>!!$$	#AT222
'!
< < <HHSMMMKr0   c                    |                                  }|                                  d}| j        dk    rd}|                                  | j        dk    r/| j        t          vr!|rt	          |           nt          |           }n|r|                     d|d           d }|rt          j        ||          S t          j	        ||          S )NFfromTr   z''yield from' requires a source argumentrV   r   r   )
rU   rJ   rF   statement_terminatorsrn   
p_testlistr   r   YieldFromExprNodeYieldExprNode)rB   rV   is_yield_fromr   s       r.   p_yield_expressionr    s     **,,CFFHHHMtv~~	ts{{qt#888(;fQiiijmm 	*GG=5  * * * 5*3C8888&s4444r0   c                 V    t          |           }t          j        |j        |          S )Nrp   )r  r   ExprStatNoderV   )rB   
yield_exprs     r.   p_yield_statementr
    s)     $A&&Jjn:>>>>r0   c                    | j         dk    r<d|j        v r|                     d           |j        | _        t          | |d          S |r|                     d           d S | j         dk    rt	          | d          S | j         d	k    r%|                                  t          | d          S |                     d
           d S )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')rF   r8   r   p_def_statementp_for_statementrJ   p_with_items)rB   r2   
decoratorss      r.   p_async_statementr    s     	tu}}CIGG4555)q*4@@@@	 F	IJJJJJ	
q40000	
	A----	DEEEEEr0   c                 $   | j         dk    r-|                                 d         dk    rt          |           S d }| j        dk    r(|                                 }|                                  t          |           }| j        dv rt          | |          }| j        dv |rt          j	        ||          }| j        dk    rN|                                 }|                                  t          |           }t          j        |d||          }|S )Nnewr   rE   await)r   [.r   **)rI   peek
p_new_exprrF   rU   rJ   p_atom	p_trailerr   AwaitExprNoder   r[   )rB   	await_posra   rV   rb   s        r.   r   r     s    zUqvvxx{g55!}}ItwJJLL			B
$/
!
!q" $/
!
! 8$YB777tt||jjll	a[[!#tR44Ir0   c                     |                                  }|                                  t          |           }t          | t	          j        ||                    S )N)cppclass)rU   rJ   r   p_callr   NewExprNode)rB   rV   r'  s      r.   r!  r!    sK     **,,CFFHHHQH!Y*38DDDEEEr0   c                 
   |                                  }| j        dk    rt          | |          S | j        dk    rt          | |          S |                                  t          |           }t          j        |||          S )Nr   r  obj	attribute)rU   rF   r(  p_indexrJ   rM   r   AttributeNode)rB   node1rV   rL   s       r.   r#  r#    s~    
**,,Cts{{a	
q%   	qzz&s' ' ' 	'r0   Tallow_genexpc                    |                                   g }g }d}d}| j        dk    r| j        dk    re|r)|                     d|                                            |                                   |                    t          |                      d}nM| j        dk    r:|                                   |                    t          |                      d}nt          |           }| j        dk    r|                                   |j        s|                     d	|j                   | j	        
                    |j                  }t          j        |j        |
          }t          |           }|                    ||f           nV|r|                     d|j                   |r|s|d                             |           n|                    |g           d}| j        dk    rn |                                   | j        dk    | j        dv rP|rN|sL|sJt          |          dk    r7t          |d                   dk    rt          | |d         d                   gg}|                     d           |pg g|fS )NFr   r   %Non-keyword arg following keyword argrV   Tr  =z!Expected an identifier before '='valuerO   r  asyncr   r   )rJ   rF   r   rU   rP   rn   r   r   rV   rG   rH   rL   r   IdentifierStringNodelenp_genexprm   )	rB   r1  positional_argskeyword_argsstarstar_seenlast_was_tuple_unpackr   encoded_namekeywords	            r.   p_call_parse_argsrD  '  s    FFHHHOLM!
$#++43;; S?QZZ\\RRRFFHHH""6!99---$(!!TT\\FFHHHq		*** MM"1%%Cts{{{ )GG? #  ) ) ) y77AA#8G<1 1 1Qii##WcN3333 RGGCGQQQ" 2+@ 2#B'..s3333#**C5111(-%43;;	C $#++F 	tL 	I$9 	I?##q((S1C-D-D-I-I$,Q0B10E$F$F#G"HHHSMMM"rdL00r0   c                     d } fd|D             }t          t          t          j         d          |          }|r;g }g }|D ]}t	          |t
                    r5|\  }	}
|                    t          j        |	j        |	|
                     L|j	        r|
                    |j                   n|r7|                    t          j        |d         j        |d                     g }|                    |           |r5|                    t          j        |d         j        |d                     |r?t          |          dk    r|d         j	        r	|d         }nt          j         |          }||fS )	Nc                     g | ]C}t          |t                    rt          j        |           nt          j        |          DS )rh   r   )r   listr   	TupleNodeAsTupleNode.0r   rV   s     r.   
<listcomp>z,p_call_build_packed_args.<locals>.<listcomp>^  s_        /9d.C.Cl	Cc****I^_bhkIlIlIl  r0   r   rV   keyr7  r   T)key_value_pairsreject_duplicatesr   )r?  )r   r   r   r[   r   tuplerP   DictItemNoderV   is_dict_literalextendrP  DictNoder<  MergedDictNode)rV   r>  r?  keyword_dict	subtuples	arg_tuplekwargs
dict_itemsitemrO  r7  s   `          r.   p_call_build_packed_argsr^  Z  s   L   "  I
 wy3S#>>	JJI R
  	$ 	$D$&& $!
U!!)"8SW#UZ"["["[\\\\% $!!$"67777 $MM)"4"1):Y]#_ #_ #_ ` ` `!#Jd#### 	XMM),1!:QUW W W X X X  	R6{{aF1I$=%ay  )7&QQQl""r0   c                 @   |                                  }t          |           \  }}|sKt          |          dk    r8t          |d         t                    rt          j        |||d                   S t          |||          \  }}t          j        ||||          S )Nr   r   )functionrh   )r`  r>  r?  )	rU   rD  r<  r   rH  r   SimpleCallNoder^  GeneralCallNode)rB   r`  rV   r>  r?  rZ  rX  s          r.   r(  r(    s     **,,C$5a$8$8!O\ ZC00A55*_UVEWY]:^:^5'h_UVEWXXXX":3Q]"^"^	<((ILZ Z Z 	Zr0   c                    |                                  }|                                  t          |           \  }}|r=t          |d                   dk    r$|d         \  }}t	          j        ||||          }nHt          ||          }|r	|d         }	nt	          j        ||          }	t	          j        |||	          }| 	                    d           |S )Nr   r    )basestartstoprG  rd  index])
rU   rJ   p_subscript_listr<  r   SliceIndexNodemake_slice_nodesrI  	IndexNoderm   )
rB   rd  rV   
subscriptsis_single_valuere  rf  r   indexesrh  s
             r.   r.  r.    s     **,,CFFHHH"21"5"5J (3z!}--22 mt)#t5 5 5 #3
33 	=AJEE'G<<<E$S( ( (HHSMMMMr0   c                     d}t          |           g}| j        dk    rOd}|                                  | j        dk    rn-|                    t          |                      | j        dk    O||fS )NTrO   Fri  )p_subscriptrF   rJ   rP   )rB   ro  itemss      r.   rj  rj    sr    O^^E
$#++	43;;[^^$$$ $#++ /!!r0   c                     t          | d          }| j        dk    r|gS |                                  t          | d          }| j        dk    r||gS |                                  t          | d          }|||gS )N)re   re   )re   rO   ri  )p_slice_elementrF   rJ   )rB   re  rf  steps       r.   rr  rr    s    
 Av&&Ets{{wFFHHH1o..Dts{{t}FFHHH1o..D4r0   c                 6    | j         |vrt          |           S d S r)   )rF   rn   )rB   
follow_sets     r.   ru  ru    s"     	t:ayytr0   c                 0    |                      d           d S )N...)rm   r   s    r.   expect_ellipsisr{    s    HHUOOOOOr0   c                     g }|D ]Q}t          |          dk    r|                    |d                    1|                    t          | g|R             R|S )Nr   r   )r<  rP   make_slice_node)rV   rn  r   	subscripts       r.   rl  rl    sl     F < <	y>>QMM)A,''''MM/#:	:::;;;;Mr0   c                     |st          j        |           }|st          j        |           }|st          j        |           }t          j        | |||          S )N)re  rf  rv  )r   NoneNode	SliceNode)rV   re  rf  rv  s       r.   r}  r}    sm     ("3'' '!#&& '!#&&sd41 1 1 1r0   c                    |                                  }| j        }|dk    rw|                                  | j        dk    rt          j        |g           }n*| j        dk    rt          |           }nt          |           }|                     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    r1| j        }|                                  t          j        ||          S |dk    r9| j        d d         }|                                  t          j        ||          S |dk    rt#          |           S |dk    r<t%          |           }|)t'          | | j                  }|                                  |S |                     d           d S )Nr   r   rG  yieldr  {`rz  INTFLOATr6  IMAGr8  BEGIN_STRINGrE   z!Expected an identifier or literal)rU   rF   rJ   r   rI  r  p_testlist_comprm   p_list_makerp_dict_or_set_makerp_backquote_exprr{  EllipsisNodep_int_literalrI   	FloatNodeImagNodep_atom_stringp_atom_ident_constantsp_namer   )rB   rV   rF   r   r7  s        r.   r"  r"    s   
**,,C	
B	Syy	43;;(R888FFTW__'**FF$Q''F		sA	s"1%%%	s"""	u%c***	uQ	w
	"36666	v
3B3	!#u5555	~		Q	w'**>Aqz**FFFHHH	344444r0   c                    |                                  }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| d	           d S )
N)r7  bytes_valuecr6  ubfvalueszinvalid string kind '')rU   p_cat_string_literalr   UnicodeNodeCharNode	BytesNodeJoinedStrNoder   )rB   rV   kindr  unicode_value	kind_chars         r.   r  r  &  s     **,,C';A'>'>$D+} X$S;WWWW $IC!#[9999	c		$S;WWWW	c		"3k::::	c		&s=AAAA 	
////00000r0   c                 V   |                                  }| j        }|dk    rt          j        |          }n^|dk    rt          j        |d          }nA|dk    rt          j        |d          }n$|dk    r| j        st          j        |          }ndS |                                  |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TrueTr6  FalseFNULLN)rU   rI   r   r  BoolNoder   NullNoderJ   )rB   rV   rL   r   s       r.   r  r  ;  s     **,,C:Dv~~#C((	#Ct444	#Cu555	 0#C((tFFHHHMr0   c                    |                                  }t          j        t          | j                  }|                                  d}d}|d         dv r)|d         dv r|dz  }n|dz  }|d d         }|d         dv )d }|rd}n|r|dk    s| j        j        d	k    rd}| j        r|rt          |d
           d}t          j        |||||          S )N r8  UuLlLlLUTLL   z4illegal integer literal syntax in Python source fileF)is_c_literalr7  unsignedlongness)rU   cythoncaststrrI   rJ   rG   language_levelr   r   r   IntNode)rB   rV   r7  r  r  r  s         r.   r  r  R  s   
**,,CS!*--EFFHHHHH
)v

9OHHOHcrc
 )v

 L  	  tqy71<<L  	O#MNNNS,8%*(0(0	2 2 2 2r0   c                     |                                  }| j        s7|| j        v r.| j                            |          }t	          ||          }||S t          j        ||          S )NrL   )rU   compile_time_exprcompile_time_envlookup_herewrap_compile_time_constantr   NameNode)rB   rL   rV   r7  r   s        r.   r  r  s  sm    
**,,C 41+=#=#="..t44)#u55Kc----r0   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        rEt          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.                    r* fd|D             }d |v rd S t          j         |          S t3           d	|d
|j        j        d           d S )Nr6  )r7  constant_resultg        r   )r  asciic                 0    g | ]}t          |          S r@   )r  rK  s     r.   rM  z.wrap_compile_time_constant.<locals>.<listcomp>  s$    FFF*344FFFr0   rG  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  rR  rI  r   	__class__r5   )rV   r7  r   bvaluerh   s   `    r.   r  r  ~  sB   }!#&&&	(		%c***	E4	 	  3!#U3333	E3		 3 DKKOOOO	E5	!	! 3"3d5kk5QQQQ	E7	#	# 3!#T%*-=-=wWZ\a\fOgOghhh: 	' 'S)-cej9I9I[`[efffhl %' ' 'D 	E3		 
3$Se0D0DEEEE	E5	!	! 3ug.."3feLLLL	E5	!	! 3FFFFFFF4<<4"3T2222	##%%1113 4 4 44r0   c           	         |                                  }t          |           \  }}}|dk    s| j        dk    r|||fS |g|g|g}}}d x}}| j        dk    r|                                  }t          |           \  }}	}
|dk    rt          |d           I||k    r'||hddhddhfv rd}nt          |d|d|d	           v|                    |	           |                    |
           |                    |           | j        dk    |d
v s
|dk    r+d |vr't          t          j        |          | j                  }|dv r,t          d
                    d |D                                 }|dk    rig }t          ||          D ]V\  }}t          |t                    r||z  } |                    t          j        |t          |                               W|||fS )Nr  r  zCCannot concatenate char literal with another string or char literalr  r  r  z8Cannot mix string literals of different types, expected z'', got z'')r  r  r  r  r  c                     g | ]}||S r)   r@   )rL  r  s     r.   rM  z(p_cat_string_literal.<locals>.<listcomp>  s    .T.T.TQamqmmmr0   r6  )rU   p_string_literalrF   r   rP   r   r   
join_bytessource_encodingr   joinzipr   rH  r   r  )rB   rV   r  r  r  bstringsustrings	positions	next_kindnext_bytes_valuenext_unicode_valuer  s               r.   r  r    sP   
 **,,C'7':':$D+}s{{adn,,[-//%0MM?SE	hH"&&K-
$.
 
 jjll:J1:M:M7	#%7#\]]]$i c3Z#r$;;;ccDD)))% & & &()))*+++! $.
 
 $ ~X1E1E#N$=h$G$GIZ[[y%bgg.T.T(.T.T.T&U&UVVs{{(I.. 	Y 	YFAs!T"" Y" $$Y%:3mTUFVFV%W%W%WXXXXm++r0   r  required_typec                     | j         dk    rd S |                                 }t          | |          \  }}}|dk    r|dk    r|                     d|           |S |dk    r|S |                     d           d S )Nr  r  r  zf-string not allowed herer  z#internal parser configuration error)rF   rU   r  r   )rB   r  rV   r  r  r  s         r.   p_opt_string_literalr    s    t~t
**,,C'7='I'I$D+}3;;GG/555	#			566666r0   c                 V    t          j        t          |           }|D ]}|dk    r dS dS )N   TF)r  r  r  )stringrB   r  s      r.   check_for_non_ascii_charactersr    s<    C  A  ;;44 5r0   c                    |                                  }| j        j        dk    }d}|d         |d         |d         t          | j                  z   f}| j                            d                                          }t          |          dk    rt          t          |                    t          |          k    rt          |d           d|v rd	|v rt          |d
           d|v rd|v rt          |d           d	|v rd|v rt          |d           d|v }d|v r&t          |          dk    rt          |d           d}nd|v rd}d}nd|v rd}n	d	|v rd	}nd}|dk    r6|4t          j
        | j        j        v rt          j        | j                  }	d	}nY||dv r|}|dv rt          j                    }	n9|dk    rt          j        | j                  }	nt          j        | j                  }		 |                                  | j        }
t'          j        t*          | j                  }|
dk    r+|	                    |           |r|st/          |          rd}n|
dk    rR|r=|s|d	k    s
|d         dvr+|	                    |           |r|st/          |          rd}nut1          ||	||            nb|
dk    r|	                    d           nF|
dk    rnA|
dk    r|                     d|           n!|                     d|
d| j        d            '|dk    r=d }|	                                }t          |          dk    rt          |d!|z             nR|	                                \  }}|r9|r7t          j
        | j        j        v r|dk    r|                     d"|           d }|dk    rt7          | ||d|v #          }|                                  |||fS )$Nr  Fr   r   r    z"'z!Duplicate string prefix characterr  r  z*String prefixes b and u cannot be combinedr  z*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combinedrr  z+Invalid string prefix for character literalTr  ub)r  r  CHARSESCAPEUuNEWLINE

END_STRINGEOFzUnclosed string literalr4  zUnexpected token re   z in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.)is_raw)rU   rG   r  r<  rI   rstriplowersetr   r
   unicode_literalsr]   r   StrLiteralBuilderr  UnicodeLiteralBuilderBytesLiteralBuilderrJ   rF   r  r  r  rP   r  _append_escape_sequencegetchar
getstrings
p_f_string)rB   kind_overriderV   is_python3_source has_non_ascii_literal_charactersstring_start_poskind_stringr  r  charsrF   systrr  r  s                 r.   r  r    s    **,,C%&Y%=%B',$AAAQZ(@A*##E**0022K
;!s;  C$4$444#:;;;+#"4"4#CDDD+#"4"4#CDDD+#"4"4#CDDD,F
k {q  #DEEE									rzzm+0G19Kf0f0f01BCC$$)>)> D:"8::EERZZ"4Q5FGGEE"6q7HIIE!	TC,,==LL  8)I 8NlmrNsNs 83708^^ ?, ?uQxt?S?SU###$ <-M <RpqvRwRw <7;4'eUA>>>>9__LL<5[[GG-3G7777GGGAJJJ  ! ! !1!6 s{{mmoo{q  #6DEEE%*%5%5%7%7"], 	%	*0*AQYE`*`*`s{{JPSTTTKs{{"1m5EcU`N`aaaFFHHH+}--r0   escape_sequencec           	      *   |d         }|dv r-|                     t          |dd          d                     d S |dv r|                    |           d S |dv r)|                    t          j        |                     d S |dk    rd S |dk    r\t          |          dk    r-|                     t          |d	d          d
                     d S |                    d|z  d           d S |dv r| dv rd}|dk    r|d }	 t          |dd                   }t          |          }n# t          $ rE |                    dt          |dd                                       d          z  d           Y nhw xY wt          |          dv r9t          |d	d          d
          }|dk    r|                    d|z             d}n|                    d|z  d           |dk    r|                    ||           d S d S |                    |           d S )Nr   01234567   z'"\abfnrtvr  x   r       zInvalid hex escape '%s'Fr   NUu)r  r  r  r8  Nr  z!Unknown Unicode character name %sr  )   
   i zInvalid unicode escape '%s'r   )append_charvalr  rP   r   char_from_escape_sequencer<  r   r	   ordKeyErrorr  lstripappend_uescape)r  builderr  rB   r  chrvaluchars          r.   r  r  R  s   AJs?122#6::;;;;;	
gq	
i~?PPQQQQQ	
d	
c1$$""3qrr':B#?#?@@@@@GG-?uGMMMMM	
e..88EN*?1R4+@AAU N N N;_QrT233::3??@GL  N N N N NN !!W,,,b11F5GHHHGG1OC5GQQQQ;;""6?;;;;; ; 	'''''s   &D( (AE76E7c                 z    g | ]8}t          j        d |rdndz   dz                       d                    j        9S )s   (\\(?:s   \\?s]   [\\abfnrtv"\'{]|[0-7]{2,3}|N\{[^}]*\}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[NxuU]|s   )?|\{\{?|\}\}?|[^\\{}]+)zus-ascii)r   compiledecodematch)rL  r  s     r.   rM  rM  y  sm     8 8 8$ 	% 9;
 WW		 fZ#9 9"  #8 8 8r0   )TFrV   ic                 <    | d         | d         | d         |z   dz   fS )Nr   r   r    r@   )rV   r  r  s      r.   _f_string_error_posr     s#    FCFCFQJN++r0   r  c                 N   g }d}t          |          }t          j                    }|rt          nt          }||k     r|}	 |||          }
|
t          t          |||          d           |
                                }|
                                }|d         }|dk    r?|s't          |          dk    rt          d|||            n|
                    |           n|dk    r|dk    r|
                    d           n|j        rN|
                    t          j        ||                                                     t          j                    }t          | ||||          \  }}|                    |           nW|d	k    r<|d
k    r|
                    d	           n5t          t          |||	          d           n|
                    |           ||k     |j        r;|
                    t          j        ||                                                     |S )Nr   zInvalid escape sequence\r   r  r  z{{r6  }z}}z#f-string: single '}' is not allowed)r<  r   r  r   r   r   r   endgroupr  rP   r  r   r  	getstringp_f_string_exprrU  )rB   r  rV   r  r  
next_startsizer  
_parse_seqr$  r  partr  
expr_nodess                 r.   r  r    s?    F$%J!-00D244G06S,,<SJ
t

!+
=*55=%c=*EEG`aaa(-		
KKMMG99 %c$ii!mm'WdA>>>>t$$$$#XXt||s#### = EMM)"77CTCTCVCV"W"W"WXXX,BDDG)8M3PZ\b)c)c&
Jj))))#XXt||s####)#}cBB;= = = = NN4   ? t

B } Mi+Cw7H7H7J7JKKKLLLMr0   starting_indexc           	      |   |}t          |          }d x}x}}	d }
d }d}d}|}d}d}	 ||k    rn+||         }||k    rf|dk    r$|st          t          |||          d           d}n||k    r5|r1|dz   |k     r'||dz            |k    r||dz            |k    r	d}|}|dz  }n|}n|d	v r1|}|dz   |k     r%||dz            |k    r||dz            |k    rd}|dz  }n{|d
v r|dz  }nq|dk    r
|dv r|dz  }na|dk    r t          t          |||          d           n;|dk    r5|dv r1|dz   |k     r%|dv r!||dz            dk    r|dz  }|dv r|dz  }*|}n|dz  }3|||                             dd                              dd          }|d         |d         |d         |z   dz   f}|                                st          t          |||          d           |dk    rb|dz  }||k     r?||                                         r%|dz  }||k     r||                                         %||k     r||         }|||         }|dk    r$|dz  }|dz   |k    rn||         }|dz  }||         }|dk    rd}d}d}|dz   }	 ||k    rnn||         }|s#|s!|dk    r|dz  }n|dk    r|dk    r|dz  }n|}nA|d	v r7|s0|dz   |k     r'||dz            |k    r||dz            |k    r	| }|dz  }n|s| }|dz  }u|||         }
|r||
d}|dk    r)t          t          |||          d|rd|z  ndz              t          d|z            }t          ||d         | | j        |          }t          |          }|2t          j                            |          st          |d |z             |
r&t          j        |t          | |
||          !          }	g }|r6|                    t          j        |t#          |          "                     |                    t          j        ||||	#                     |dz   |fS )$Ni   @r   FTr"  z$backslashes not allowed in f-stringsr    r   z'"z{[(z}])#zformat string cannot include #z><=!:}z!=><r5  z><z
r  z(empty expression not allowed in f-string!re   r  r#  r  z'missing '}' in format string expressionz, found '%s'r  z(%s))parent_scannerr  initial_posz!invalid conversion character '%s'r  r6  )r7  conversion_charformat_spec)r<  r   r   replacestripisspacer   r   r  r  r   FormattedValueNodefind_conversion_funcr  r  rP   r  r   )rB   r  rV   r-  r  r  r)  r4  terminal_charr5  format_spec_str	expr_textNO_CHARnested_depth
quote_charin_triple_quotesbackslash_reportedr  expr_strexpr_pos	in_stringstart_format_specbufscannerrp   nodess                             r.   r'  r'    s    *A!-00D488O8mkOI#G&'L!(J+99!  Dyy) B-c=!DD@B B B%)""j# )1ut||a!e(<(A(AmTUXYTYFZ^_F_F_+0(%,
Q!(J%ZZJ1ut||a!e 4 9 9mAPQE>RVW>W>W#' Q%ZZALLQ1::ALL#XX%c=!<<24 4 4 4Q1==1ut||V Q'3..FA$YYFAM	QW+\ ^A-.66vtDDLLTSWXXHAAA 7! ;<H>> :!#}nEE8	: 	: 	: 	Q$hh=+3355hFA $hh=+3355h t88)!,M%nQ&67I 	Qq54<<+A.OFA)!,M 	E	Dyya A# I 88 A%LL#XX#a''$)()Ezz  .QUT\\mAE6Ja6O6OTabcfgbgThlmTmTm+;';$FAA) .$-IFA'	* ((9!(;< _,1H!#}a8874AI.=00rK	L 	L 	L
 6H$
%
%C3AqO`nvwwwGgD "9+G+\+\]l+m+m"h;oMNNN  g-c*QY\^d:e:efffE QY*3mI6N6NOOOPPP	LL-clwxxxyyyq5%<r0   c                    |                                  }|                                  | j        dk    r+|                     d           t	          j        |g           S t          |           }| j        dv r|j        r|                     d           t	          j	        ||          }t          | |          }|                     d           t	          j        |||t          j        | j        j        dk              S | j        dk    r%|                                  t!          | |          }n|g}|                     d           t	          j        ||          S )	Nri  rG  r9  2iterable unpacking cannot be used in comprehensionr  r  )looprP   typehas_local_scoperO   )rU   rJ   rF   rm   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   	list_typerG   r  %p_namedexpr_test_or_starred_expr_list)rB   rV   rp   rP   rL  exprss         r.   r  r  a  sD    **,,CFFHHHts{{	!#B////+A..Dt? 	JGGHIII23TBBB!V$$	*d60AI49; ; ; 	; 	ts{{	5a>>HHSMMMc....r0   c                 n    | j         dv rt          | |          S | j         dk    rt          | |          S |S )Nr9  rw   )rF   rR  	p_comp_if)rB   bodys     r.   p_comp_iterrZ    sB    t!T"""	
D!!! r0   c                 .   |                                  }d}| j        dk    rd}|                                  |                     d           t	          | d|          }|                    d t          | |          |           t          j        |fi |S )NFr:  Tr  allow_testlistr  )else_clauserY  r  )	rU   rF   rJ   rm   p_for_boundsr+   rZ  r   ForStatNode)rB   rY  rV   r  kws        r.   rR  rR    s    
**,,CHtw	 HHUOOO	a	A	A	ABII$[D%9%9HIMMMS''B'''r0   c                     |                                  }|                                  t          |           }t          j        |t          j        ||t          | |                    gd           S )N	conditionrY  
if_clausesr^  )rU   rJ   r|   r   
IfStatNodeIfClauseNoderZ  )rB   rY  rV   ry   s       r.   rX  rX    sy     **,,CFFHHH Q<<DC($0;At0D0DF F F G   r0   c                 @   |                                  }|                                  | j        dk    r*|                                  t          j        |g           S g }d}d}	 | j        dv r|dk    r| j        dk    rdnd	}nA|t          | j                  k    r)|                     d
| j        d|dk    rdndd           |                                  | j        dk    r|                     d           t          |           }|                    |           d}nt          |           }|dk    r| j        dk    rd	nd}|d	k    rB| 
                    d           |}t          |           }t          j        |j        ||          }|r|d                             |           n|                    |g           d}| j        dk    r!|                                  | j        dk    rnnn| j        dv rt          |          dk    rt          |d         t                    rt          |d                   dk    r|d         d         }|d	k    rdt          |t          j                  sJ t          |                      t           j        }t          j        |j        |j        |j                  }	n't           j        }t          j        |j        |          }	t/          | |	          }
| 
                    d           t          j        ||
|	|          S t          |          dk    r1t          |d         t                    s|                     d           n| 
                    d           t          j        |g           S | 
                    d           |dk    r g }g }|D ]z}t          |t                    r|                    |           -|r6|                    t          j        |d         j        |                     g }|                    |           {|r4|                    t          j        |d         j        |                     t          |          dk    r|d         j        r|d         S t          j        ||t           j                  S g }g }|D ]z}t          |t                    r|                    |           -|r6|                    t          j        |d         j        |                     g }|                    |           {|r4|                    t          j        |d         j        |                     t          |          dk    r|d         j        r|d         S t          j        ||d          S )Nr#  rP  r   FTr   r  r   r   r    zunexpected zitem found in r  dictz literalzexpected expression, found '*'re   )rO  r7  r8  rO   r9  )key_expr
value_exprr  )rL  rP   rM  rK  rG  )rh   rM  )r?  rQ  )rU   rJ   rF   r   rV  r<  r   r   rP   rn   rm   rS  rV   r   rH  rM  r   	dict_typeDictComprehensionAppendNoderO  r7  set_typerQ  rR  rS  rU  SetNodeis_set_literalMergedSequenceNoderT  rW  )rB   rV   partstarget_typelast_was_simple_itemr]  rO  r7  comprehension_typerP   rL  rs  	set_itemsr+  r\  s                  r.   r  r    s    **,,CFFHHHts{{	!#r::::EK #4;a#$43;;aaAAD		))DDD;!#3#3%%??A B B BFFHHHts{{8999!!$$DLL#(  !99Da#$43;;aaAaq		 -cg3eLLL# ,b	  &&&&dV$$$'+$43;;FFHHHts{{  G#J 	tu::??z%(D99?c%(mmq>P>P8A;Da!$	(>??KKdKKK%,%6"">HtxDJH H H &-%5"":48$OOOa((DHHSMMM.sfSeffff 5zzQz%(D'A'ALMMMM %c2>>>>HHSMMMa	 	# 	#D$%% #  &&&& #LL!29Q<3C)!T!T!TUUU "IT"""" 	NLL*9Q<+;)LLLMMMu::??uQx6?8O+Ce'BRSSSS 
 	# 	#D$%% #!!$'''' $LL!3JqM4EWa!b!b!bccc!#JT"""" 	\LL+JqM,=zZZZ[[[u::??uQx7?8O'%SXYYYYr0   c                    |                                  }|                                  t          |           g}| j        dk    rA|                                  |                    t          |                      | j        dk    A|                     d           t          |          dk    r	|d         }nt          j        ||          }t          j	        ||          S )NrO   r  r   r   rG  r   )
rU   rJ   rn   rF   rP   rm   r<  r   rI  BackquoteNode)rB   rV   rh   r   s       r.   r  r  !  s     **,,CFFHHH1II;D
$#++	F1II $#++ HHSMMM
4yyA~~1g!#d333"3c2222r0   c                     ||gng }| j         t          vrP|                    t          |                      | j         dk    rn"|                                  | j         t          vP|S NrO   )rF   expr_terminatorsrP   rn   rJ   rB   rp   rV  s      r.   p_simple_expr_listr  2  sj     ,4&&"E
$&
&
&fQii!!!43;;		 $&
&
&
 Lr0   c                     ||gng }| j         t          vrP|                    t          |                      | j         dk    rn"|                                  | j         t          vP|S r}  )rF   r~  rP   r   rJ   r  s      r.   p_test_or_starred_expr_listr  =  sm     ,4&&"E
$&
&
&+A..///43;;		 $&
&
&
 Lr0   c                     ||gng }| j         t          vrP|                    t          |                      | j         dk    rn"|                                  | j         t          vP|S r}  )rF   r~  rP   r   rJ   r  s      r.   rU  rU  H  sm     ,4&&"E
$&
&
&5a8899943;;		 $&
&
&
 Lr0   c                     |                                  }t          |           }| j        dk    r:|                                  t	          | |          }t          j        ||          S |S NrO   rG  )rU   rn   rF   rJ   r  r   rI  rB   rV   rp   rV  s       r.   r  r  U  s\    
**,,C!99Dts{{	"1d++"3u5555r0   c                     |                                  }t          |           }| j        dk    r:|                                  t	          | |          }t          j        ||          S |S r  )rU   r   rF   rJ   r  r   rI  r  s       r.   p_testlist_star_exprr  c  s^    
**,,C!!$$Dts{{	+At44"3u5555r0   c                    |                                  }t          |           }| j        dk    r:|                                  t	          | |          }t          j        ||          S | j        dv rt          | |          S |S )NrO   rG  r9  )rU   r   rF   rJ   rU  r   rI  r=  r  s       r.   r  r  q  s|    
**,,C+A..Dts{{	5a>>"3u5555	
!	!	!4   r0   c           
          t          | t          j        |j        t	          j        |j        |                              }t	          j        |j        |          S )Nr   r  )rL  )rR  r   r  rV   r   r  GeneratorExpressionNode)rB   rp   rL  s      r.   r=  r=    s_     a+0tDDDF F F G GD,TXDAAAAr0   )r   ri  r#  re   r5  r  c                     |                                  }|                                  t          |           }t          j        ||          S N)rQ   )rU   rJ   rR   r   
GlobalNoderB   rV   rQ   s      r.   p_global_statementr    s?     **,,CFFHHHOOEC////r0   c                     |                                  }|                                  t          |           }t          j        ||          S r  )rU   rJ   rR   r   NonlocalNoder  s      r.   p_nonlocal_statementr    s=    
**,,CFFHHHOOEc51111r0   c           	      x   t          |           }d}| j        dk    r?|j        s|j        s|j        r*d}|                                  t          |           |_        | j        dk    r#|j        r| 	                    d|j
                   |g}| j        dk    r^|                                  | j        dk    rt          |           }nt          |           }|                    |           | j        dk    ^t          |          dk    rPt          j        d	| j                  r|d
         }t!          |t"          j                  r@t#          j        |j
        |j        t+          |j
        |j        |j                            }nFt!          |t"          j        t"          j        t"          j        f          st          |j
        d           | j        d d         }|                                  | j        dk    rt          |           }nt5          |           }t7          j        |j
        |||          S |d
         }t7          j        |j
        |          S |d         }t          |          dk    r#t7          j        |j
        |d
         ||          S t7          j        |j
        |d d         |          S )NFre   Tr5  zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...r4  r  r   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   rg  z&Illegal operand for inplace operation.r8  )r   r   r   r  r    )r   r   first)lhs_listr   ) r  rF   r   is_subscriptis_attributerJ   p_annotation
annotationrP  r   rV   r  rP   r<  r   r  r   r   rk  rm  rd  r}  re  rf  r/  r  r  r   InPlaceAssignmentNoder  SingleAssignmentNodeCascadedAssignmentNode)rB   rp   has_annotation	expr_listr   r   r   s          r.   p_expression_or_assignmentr    s   ""DNts{{{(9{T=N{	&q//ts{{t{ 	
 NH 	 	 	 	 I
$#++	47??%a((DD'**D $#++ 9~~84ad;; 	]A,C#y788 I)G)#'39chGGI I I  i&=y?RT]Tf%ghh IcgGHHHtCRCyHFFHHHtw(++ mm.swsX[\\\\|!$(6666
B-C
9~~)#'y|Tbcccc+CGinRUVVVVr0   c                 p   |                                  }d}|                                  | j        dk    rL|                                  t          |           }| j        dk    r|                                  | j        dv }nd }g }| j        dvrz|                    t          |                      | j        dk    rM|                                  | j        dv rd}n-|                    t          |                      | j        dk    Mt          j        ||          }t          j        ||||           S )NFr   rO   r  r  TrG  )rZ  streamappend_newline)	rU   rJ   rF   rn   rP   r   rI  r   PrintStatNode)rB   rV   ends_with_commar  rh   rZ  s         r.   p_print_statementr    s-    **,,C#(OFFHHHtt||	43;;FFHHHd&88ODt%%%F1IIdckkFFHHHt)))"&KKq		""" dckk #Cd333IsF**, , , ,r0   c                    |                                  }|                                  t          |           }t          |t          j                  rFd}|j        }t          |          dvr+|                     dt          |          z  |d           |g}nd}|g}| j	        dk    r|r|                     dd           |                                  |
                    t          |                      | j	        d	k    r6|                                  |
                    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   rO   rG  )rU   rJ   r   r   r   rI  rh   r<  r   rF   rP   rn   r   ExecStatNode)rB   rV   codetuple_variantrh   s        r.   p_exec_statementr    s<    **,,CFFHHHa==D$	+,, 
yt99F""GGDs4yyP5  * * *6Dvtt|| 	!GGV  ! ! !	F1II43;;FFHHHKKq		"""c----r0   c                     |                                  }|                                  t          |           }t          j        ||          S )NrG  )rU   rJ   r  r   DelStatNode)rB   rV   rh   s      r.   p_del_statementr    sA     **,,CFFHHHa  DS....r0   Fwith_newlinec                     |                                  }|                     d           |r|                     dd           t          j        |          S )NpassExpected a newlineTignore_semicolon)rU   rm   expect_newliner   PassStatNode)rB   r  rV   s      r.   p_pass_statementr    sU    
**,,CHHV F	-EEEc"""r0   c                 z    |                                  }|                                  t          j        |          S r)   )rU   rJ   r   BreakStatNoder   s     r.   p_break_statementr  #  s/     **,,CFFHHHs###r0   c                 z    |                                  }|                                  t          j        |          S r)   )rU   rJ   r   ContinueStatNoder   s     r.   p_continue_statementr  +  s/     **,,CFFHHH!#&&&r0   c                     |                                  }|                                  | j        t          vrt	          |           }nd }t          j        ||          S )Nr6  )rU   rJ   rF   r   r  r   ReturnStatNode)rB   rV   r7  s      r.   p_return_statementr  3  sT     **,,CFFHHHt(((1U3333r0   c                    |                                  }|                                  d }d }d }d }| j        t          vrt	          |           }| j        dk    rR|                                  t	          |           }| j        dk    r#|                                  t	          |           }n.| j        dk    r#|                                  t	          |           }|s|s|rt          j        |||||          S t          j        |          S )NrO   r   )exc_type	exc_valueexc_tbcause)rU   rJ   rF   r   rn   r   RaiseStatNodeReraiseStatNode)rB   rV   r  r  r  r  s         r.   p_raise_statementr  ?  s    **,,CFFHHHHIFEt(((!9943;;FFHHHq		Its{{TV^^FFHHH1IIE *9 * *"3!	   	 $S)))r0   c                    |                                  }| j        }|                                  t          | d          g}| j        dk    rC|                                  |                    t          | d                     | j        dk    Cg }t
          j        | j        j        v }|D ]\  }}}}|dk    rt          j
        ||||          }	nbt          j        |t          j        ||p|          t          j        |t          j        ||          |rdnd d	|v o|d u d 
                    }	|                    |	           t          j        ||          S )NT
as_allowedrO   cimport)module_nameas_nameis_absoluter  r6  r   r  )r  r8   get_top_level_module	name_listr   stats)rU   rF   rJ   p_dotted_namerP   r
   absolute_importrG   r]   r   CImportStatNoder  r   r  
ImportNoder;  StatListNode)
rB   rV   r  rs  r  r  target_namedotted_namer  stats
             r.   p_import_statementr  ]  s    **,,C4DFFHHH1.../E
$#++	]1666777 $#++ E(AI,GGK27  .[+w9(''	) ) )DD -&s1GKHHH( ) >s+ V V V*4!!),);)O4"$ $ $% % %D 	Tc////r0   first_statementc           
         |                                  }|                                  | j        dv r@d}| j        dv r4|t          | j                  z  }|                                  | j        dv 4nd }|8| j        dv r/|                                  | j                            d          }}n2|t          j        | j        j        v rd}t          | d          \  }}}}| j        dvr| 
                    d           | j        }|                                  |dk    }d}	| j        d	k    rE|                                  | j                            d	          d fg}
|                                  n1| j        d
k    rd}	|                                  t          |           g}
| j        dk    rO|                                  |	r| j        dk    rn-|
                    t          |                      | j        dk    O|	r|                     d           |dk    r|s| 
                    d           n|r| 
                    d           n|
D ]\  }}}|dk    r| 
                    d|            na	 t          t          |          }n*# t          $ r | 
                    d|z  |           Y  n$w xY w| j        j                            |           t#          j        |          S |rt#          j        ||||
          S g }g }|
D ]\\  }}}|                    t)          j        ||                     |                    |t)          j        ||p|          f           ]t)          j        |
d         d         |          }t#          j        |t)          j        |t)          j        ||          ||          |          S )N)r  rz  r   importr  r  Fr  zExpected 'import' or 'cimport'r  r   r   TrO   r   
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxbracesznot a chancez future feature %s is not defined)r  relative_levelimported_namesr6  r  rG  )r  r8   r  )modulers  )rU   rJ   rF   r<  rG   rH   r
   r  r]   r  r   p_imported_namerP   rm   getattrAttributeErroraddr   r  FromCImportStatNoder   r;  r  rO  FromImportStatNoder  )rB   r  rV   r8   dotted_name_posr  _r  
is_cimportis_parenthesizedr  name_posrL   r  	directiveimported_name_stringsrs  import_lists                     r.   p_from_import_statementr  ~  s8    **,,CFFHHHt|dl""SYYEFFHHH dl"" QT%:::'(zz||QY5M5Mb5Q5Q=V3qy7RRRE/<Q5/Q/Q/Q,![!t(((	01114DFFHHH"Jts{{::<<)A)A#)F)FMN	43;;#FFHHH)!,,-
$#++	 	oa00111	 $#++
  	l"" 	;GGUVVVV 	;GG$%%%%-; 	; 	;)48##GGNH555E ' 5 5II%   GG>ExPPPEE 	+//	::::!#&&&	 ([ )+ + + 	+
 !#)7 	L 	L%XtW!((.xtDDDF F FLLy)(DIIIJL L L L(1a '<> > >')/'<S+VVV') ) )    	s   0J#J-,J-c                 p    |                                  }t          |           }t          |           }|||fS r)   )rU   rM   	p_as_name)rB   rV   rL   r  s       r.   r  r    s2    
**,,C1::DllGwr0   r  c                 n   |                                  }t          |           }d }|g}| j        dk    rA|                                  |                    t          |                      | j        dk    A|rt          |           }||| j                            d                    |                    |fS )Nr  )	rU   rM   rF   rJ   rP   r  rG   rH   r  )rB   r  rV   r  r  rQ   s         r.   r  r    s    
**,,C!**KGME
$#++	WQZZ    $#++  A,,ai66sxxGGQQr0   c                 x    | j         dk    r.| j        dk    r#|                                  t          |           S d S )NrE   as)rF   rI   rJ   rM   r   s    r.   r  r    s7    tw1:--	qzztr0   c                     |                                  }|                                  t          |           }| j        dk    r$|                                  t          |           }nd }t	          j        |||          S )NrO   )rd  r7  )rU   rJ   rn   rF   r   AssertStatNode)rB   rV   condr7  s       r.   p_assert_statementr    sk     **,,CFFHHH!99Dts{{	q		t5AAAAr0   );r  r  c                 V   |                                  }|                                  t          |           g}| j        dk    rA|                                  |                    t          |                      | j        dk    At          |           }t          j        |||          S )Nelifre  )rU   rJ   p_if_clauserF   rP   p_else_clauser   rg  )rB   rV   rf  r^  s       r.   p_if_statementr    s     **,,CFFHHHa..!J
$&..	+a..))) $&..  ""KC{< < < <r0   c                     |                                  }t          |           }t          |           }t          j        |||          S )Nrc  )rU   r   p_suiter   rh  )rB   rV   ry   rY  s       r.   r  r    sH    
**,,CAD1::Dc' ' ' 'r0   c                 b    | j         dk    r#|                                  t          |           S d S )Nrx   )rF   rJ   r  r   s    r.   r  r    s+    tv~~	qzztr0   c                     |                                  }|                                  t          |           }t          |           }t	          |           }t          j        ||||          S )N)rd  rY  r^  )rU   rJ   r   r  r  r   WhileStatNode)rB   rV   ry   rY  r^  s        r.   p_while_statementr
  !  sg     **,,CFFHHHAD1::D""Ks!# # # #r0   r  c                    |                                  }|                                  t          | d|          }t          |           }t	          |           }|                    |||           t          j        |fi |S )NTr\  )rY  r^  r  )rU   rJ   r_  r  r  r+   r   r`  )rB   r  rV   ra  rY  r^  s         r.   r  r  .  s{     **,,CFFHHH	ax	@	@	@B1::D""KII4[8IDDDS''B'''r0   r]  c                 D   t          |           }| j        dk    r7|                                  t          | ||          }t	          ||          S | j        s1|s.| j        dk    r$|                                  t          |           }n|d }}t          |           }|                                 }t          |           }|                                 }	t          |           }
t          |           }t          |           }|t          j        ||          }n8|j        st          |j        d           n||j        k    rt          |d           |d         |
d         k    rt          |	d	           t	          ||||
||
          S |                     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bound2rv  )p_for_targetrF   rJ   p_for_iteratorrl  r   r   p_for_from_relationrU   rM   p_for_from_stepr   r  r   r   rV   rL   rm   )rB   r]  r  r  r  r  rel1	name2_posname2rel2_posrel2r  rv  s                r.   r_  r_  :  s   !__Ftt||	!!^hGGG6H5555 #h #46>>FFHHH]]FF $TFF"1%%JJLL	

::<<"1%%Aq!!>'	%@@@FF> MfjJL L L L&+%%iKM M M7d1g(>@ @ @V# $ $#   	 	
	r0   c                     | j         t          v r| j         }|                                  |S |                     d           d S )Nz#Expected one of '<', '<=', '>' '>=')rF   inequality_relationsrJ   r   r   s     r.   r  r  g  sB    t###T			566666r0   c                 |    | j         dk    r0| j        dk    r%|                                  t          |           }|S d S )NrE   by)rF   rI   rJ   r   )rB   rv  s     r.   r  r  q  s;    tw1:--	!}}tr0   )r   r   r   r   rf   c                 l   |                                  }t          |           }| j        dk    r|                                  |g}| j        |k    rM|                    t          |                      | j        dk    rn|                                  | j        |k    Mt          j        ||          S |S r  )rU   r   rF   rJ   rP   r   rI  )rB   rf   rV   rp   rV  s        r.   p_targetr!    s    
**,,C!Dts{{	dj  LL**+++ts{{FFHHH	 dj  
 "3u5555r0   c                 "    t          | d          S )Nr   )r!  r   s    r.   r  r    s    Atr0   c                     |                                  }|rt          |           }nt          |           } |rt          j        nt          j        ||          S )N)sequence)rU   r  r|   r   AsyncIteratorNodeIteratorNode)rB   r]  r  rV   rp   s        r.   r  r    sV    
**,,C !}}||O8OI''9OQT_cddddr0   c                 X   |                                  }|                                  t          |           }g }d }| j        dv r| j        dk    r-|                    t          |                      | j        dk    -| j        dk    r#|                                  t          |           }t          j        ||||          }| j        dk    r|S | j        dk    r:|                                  t          |           }t          j        |||          S | 	                    d           d S )N)exceptrx   r(  rx   )rY  except_clausesr^  finally)rY  finally_clausezExpected 'except' or 'finally')
rU   rJ   r  rF   rP   p_except_clauser   TryExceptStatNodeTryFinallyStatNoder   )rB   rV   rY  r)  r^  r+  s         r.   p_try_statementr/    s2    **,,CFFHHH1::DNKt!!!dh!!/!"4"4555 dh46>>FFHHH!!**K&s.%' ' ' 49Kty	 '.: : : 	: 	
011111r0   c                    |                                  }|                                  d }d }d}| j        dk    rt          |           }t	          |t
          j                  r|j        }n|g}| j        dk    s&| j        dk    r?| j        dk    r4| j	        j
        dk    r$|                                  t          |           }ne| j        dk    rZ| j        dk    rO|                                  |                                  }t          |           }t          j        ||          }d}t          |           }t          j        |||||	          S )
NFre   rO   rE   r  r    r  T)patternr  rY  is_except_as)rU   rJ   rF   rn   r   r   rI  rh   rI   rG   r  rM   r  r  r   ExceptClauseNode)rB   rV   r  r  r2  pos2rL   rY  s           r.   r,  r,    s:    **,,CFFHHHHILts{{!99h	 344 	"}HH zH43;;147??qzT/A/A y71<<FFHHHq		IITW__t!3!3FFHHH::<<D1::D!*4===IL1::D!#Y,0 0 0 0r0   c                 *   |                                  }|                                  t          | d          d         }|                     d           | j        r|}| j                            ||          }|r| j                            |           t          |          }|
                                5 }t          ||| |j        | j                  }t          ||          }	d d d            n# 1 swxY w Y   |	S d S t          j        |          S )Nr  r    z!Syntax error in include statement)r  parse_comments)rU   rJ   r  r  compile_time_evalrG   find_include_fileincluded_filesrP   r   get_file_objectr   encodingr6  p_statement_listr   r  )
rB   r2   rV   unicode_include_file_nameinclude_file_nameinclude_file_pathsource_descr  s2trees
             r.   p_include_statementrC    sL   
**,,CFFHHH 0C 8 8 ;8999 '5I778I3OO 	##$5666./@AAK,,.. 1!!![!QZ`a`pqqq'C001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 K4!#&&&s   7/C22C69C6c                     |                                   | j        dk    r| j        st          |           }nt	          |           }|S )Ntemplate)rJ   rI   r   p_with_templater  )rB   r   s     r.   p_with_statementrG    sC    FFHHHzZ(8q!!AKr0   c                    d}d}| j         dk    rt          |           5 }|                                  t          | |          }|                     d           | j         dk    r|                     d           ddd           n# 1 swxY w Y   | }|st          | |          }t          |           }t          |          D ]\  }}} ||fd|i|}|S )	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
    Fr@   r   r   re   r  NrY  )rF   r   rJ   p_with_items_listrm   r   r  reversed)	rB   r  brackets_succeededrs  errorsrY  clsrV   r-   s	            r.   r  r    s+    Ets{{a   	FFFHHH%a22EHHSMMMts{{ 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "(Z /!!X..1::D"5// + +S$s3**T*T**Ks   ABB	B	c                     g }	 |                     t          | |                     | j        dk    rn!|                                  | j        dk    rnP|S )NTrO   r   )rP   p_with_itemrF   rJ   )rB   r  rs  s      r.   rI  rI  	  s]    E[H--...43;;	43;; Lr0   c                 ,   |                                  }| j        s| j        dk    r| j        dv r|r|                     d           | j        }|                                  d }| j        dk    r8|                                  t          |           }|                     d           t          j	        |||dfS t          |           }d }| j        dk    r.| j        dk    r#|                                  t          |           }t          j        ||||dfS )	NrE   )r"   gilzwith gil/nogil cannot be asyncr   r   )staterd  r  )managerr  r  )rU   r   rF   rI   r   rJ   rn   rm   r   GILStatNoder   WithStatNode)rB   r  rV   rR  rd  rS  r  s          r.   rO  rO  +	  s    **,,C eAJBR4R4R 	6GG4555
	 	43;;FFHHHq		IHHSMMM #Y'O'OOO))47??qzT11FFHHH#A&&F!3Gv[c(d(dddr0   c                    |                                  }g }|                                  |                     d           |                    | j                   |                                  | j        dk    rM|                                  |                    | j                   |                                  | j        dk    M|                     d           | j        dk    ry|                                  |                     d           |                                  t                      }||_	        t          | ||          }|                                  |S t          |d           d S )Nr  rO   ri  re   z-Syntax error in template function declaration)rU   rJ   rm   rP   rI   rF   r  expect_indentr%   r>   p_c_func_or_var_declarationexpect_dedentr   )rB   rV   r>   body_ctxfunc_or_vars        r.   rF  rF  I	  s<   
**,,CIFFHHHHHSMMMQZ   FFHHH
*

	$$$	 *

 HHSMMMts{{		HIII	55&1!S(CC	cBCCCCCr0   c                 "   | j         dk    rt          |           }nr| j         dk    rt          |           }nV| j         dk    rt          |           }n:| j         dk    rt	          |           }n| j         dk    rt          |           }n| j         dk    rt          |           }n| j         dk    rt          |           }n| j         dk    rt          |           }n| j         d	k    rt          |           }n| j         d
v rt          |           }n}| j         dk    rt          | |          }n`| j         dk    rt          |           }nE| j         dk    rt          |           }n*| j         dk    rt          |           }nt          |           }|S )NglobalnonlocalprintexecdelbreakcontinuerS   raiser  r   r  r  assertr  )rF   r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r  )rB   r  r   s      r.   p_simple_statementrg  c	  s    	tx!!$$	
		#A&&	
 ##	
""	
q!!	
 ##	
		#A&&	
		!!$$	
 ##	
&	&	&!!$$	
&qOLLL	
 ##	
		!!$$	
"")!,,Kr0   c                    t          | |          }|j        }g }t          |t          j                  s|                    |           | j        dk    rl|                                  | j        dv rnNt          | |          }t          |t          j                  rU|                    |           d}| j        dk    l|st          j        |          }n2t          |          dk    r	|d         }nt          j	        ||          }| j        dvrLt          |t          j
                  r2|j        j        r&|j        j        dk    r|                     d	|           |                     d
           |S )Nre  r  r  Fr   r   r  cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)rg  rV   r   r   r  rP   rF   rJ   r<  r  r  rp   r   rL   r   r  )rB   r2   r  r  rV   r  s         r.   p_simple_statement_listrj  	  s{    a?CCCD
(CEdE.// T
$#++	4%%%!!GGGdE.// 	T $#++  6!#&&	UqQx!#u555t%%%dE.// 	ay  aTY^v%=%=Z\_```<===Kr0   c                 N    | j         }d| _         t          |           }|| _         |S )Nr   )r  r  )rB   oldrp   s      r.   p_compile_time_exprrm  	  s*    

CAa==DAKr0   c                    |                                  }| j        }|                                  t          |           }|                     d           t          |           }| j        r+|                    |          }|                    ||           | 	                    dd           t          j        |          S )Nr5  r  Tr  )rU   r  rJ   rM   rm   rm  r7  compile_time_valuedeclarer  r   r  )rB   rV   denvrL   rp   r7  s         r.   p_DEF_statementrr  	  s    
**,,CDFFHHH1::DHHSMMMq!!D "''--T5!!!)DAAAc"""r0   c                    |                                  }| j        }|}| j        }d }	 |                                  t	          |           }|o!t          |                    |                    | _        t          | |          }| j        r|}d}| j        dk    rnt| j        dk    r/|                                  || _        t          | |          }|r|}|st          j
        |          }|| _        |S )Nr   r   ELIFELSE)rU   r7  r  rJ   rm  r  ro  r  rF   r   r  )	rB   r2   rV   
saved_evalcurrent_evalrq  r   rp   rY  s	            r.   p_IF_statementrx  	  s   
**,,C$JLDF		"1%%*RtD4K4KD4Q4Q/R/Rq# 	FL46>>	 	tv~~	*q# 	F )#C(($AMr0   c                 
   |j         }|                                 }d }| j        dk    r.|j        dvr|                     d           t          | |          S | j        dk    rA| j        j                            dd          rt          |dd	           t          |           S | j        d
k    rB| j        j                            dd          rt          |dd	           t          | |          S | j        dk    rv|j        dvr|                     d           |j        | _        t          |           }|j        s5| j        dvr,| j        dk    r| j        dk    rn4|                     d           n| j        dk    r|rt          | d          S d}| j        dk    rd}|                                  n#| j        dk    rd}d}|                                  |r|j        dvr|                     d           |j        | _        t#          | | ||                    }|qt$          j        t$          j        t$          j        f}|j        r|t$          j        t$          j        fz  }t1          ||          s|                     d           ||_        |S |j        r|                     dd           d S | j        dk    rEd|j        v r |j        d k    r|                     d!           |j        | _        t7          | |          S | j        d"k    r.|j        d#vr|                     d$           t9          | |          S | j        d%k    r.|j        dvr|                     d&           t;          | |          S |j        d'k    r%| j        dk    r| j        d(k    rt=          |           S | j        dk    r|j        d(k    rt          | d          S |j        d)v r(t?          |           }||S |                     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%|                                  tK          | ||          S | j        dk    r| j        dk    ry| j        }	|                                 }
|                                  | j        dk    rtK          | ||          S |r|                     d           | &                    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  ri  cpdefr  r:  rE   r:  r  r  )r  ri  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 hererw   whiler  tryr  r  re  ))r:   rU   rF   r8   r   p_ctypedef_statementrG   compiler_directivesgetr   rr  rx  p_decoratorsr?   rI   r  rJ   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r  r#   r  p_class_statementrC  p_property_declp_ignorable_statementr  r
  r  r/  rG  r  put_backp_match_statementrj  )rB   r2   r  r:   rV   r  r<   r   tup
ident_name	ident_posmatch_statements               r.   p_statementr  	  s    ]I
**,,CJtz9444GG9::: $As+++	
 9(,,-BEJJ 	QCGNOQ Q Q Q q!!!	
9(,,-A4HH 	QCGNOQ Q Q Q a%%%	
9xxxGG0111)!!__
. 	S14?i3i3itw1:#8#8QRRR	
I5555Ktv~~			
		 FX9ZZZGG5666)3(D(D(DEE!%u'8%:MNC. I3U5GHHdC(( SQRRR(DO7 8	XGG;5GIIIIITU]] ""m)C)C8999iAG"1j111TW__y HHH;<<<$Q
333TYy 888<===&q#...Y)##AJ*<T<T"1%%%TV^^	Z 7 7#AD9999y777,Q//#K?@@@tt||%a((((+++&q)))&q)))'***(C<<<47??qzW'<'<!"J !

IFFHHHtu}}0CDDD# [ YZZZJJw
I>>>47??qzW'<'<&73&?&?O&2...q#WWWWr0   c                 h   |                                  }g }| j        dvrMt          | ||          }t          |t          j                  r6|                    |           d}| j        dvM|st	          j        |          S t          |          dk    r|d         S t	          j        ||          S )NDEDENTr  re  Fr   r   r  )	rU   rF   r  r   r   r  rP   r<  r  )rB   r2   r  rV   r  r  s         r.   r<  r<  \
  s     **,,CE
$'
'
'1c_EEEdE.// 	T $'
'
'  6!#&&&	UqQx!#u5555r0   c                 2    t          | |d          d         S )NFwith_doc_onlyr   )p_suite_with_docstringrB   r2   s     r.   r  r  o
  s    !!S>>>qAAr0   r  c                    |                      d           d }| j        dk    r^|                                  |                                  |rt	          |           }t          | |          }|                                  n^|j        r|                     dd           |j	        dv rt          | |          }n&t          |           }|                     dd	           |st          |          \  }}||fS )
Nre   r  r  Fr   )r  r  r`  r&   zSyntax error in declarationsTr  )rm   rF   rJ   rW  p_doc_stringr<  rY  r#   r   r8   rj  r  r  _extract_docstring)rB   r2   r  docrY  s        r.   r  r  t
  s    HHSMMM
Cty		 	"q//C3''	7 	JGG;5GIII9@@@*1c22DD#A&&D;dSSS -&t,,	T9r0   c                 p   g }g }d}| j         |vr#| j         dk    s| j         dk    r|                     dd           d}| j         dk    r|                                 d         dk    r| j        }|                                  |                                  t          |           rt          |           }n@t          | |	          }	t          | d
          }
t          j
        |	j        |	|
          }d
}t          j        |j        |          }|                    ||f           d
}nt          |           rt          |           }n@t          | |	          }	t          | d
          }
t          j
        |	j        |	|
          }d
}|                    |           |dz  }t          |          dk    r|                     d|j                   | j         dk    r7| j         |vr-|r+|                     dd                    |          z             n|                                  | j         |v#||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   rE   r5  r>   Tr   r   r6  r   r3  r4  rO   zUnmatched %sz or )rF   r   r   rI   rJ   r   rn   r   r   r   CComplexBaseTypeNoderV   r   r;  rP   r<  r  )rB   
end_sy_setr>   r>  r?  pos_idxparsed_typeidentr   r   r   keyword_nodewas_keywords                r.   p_positional_and_keyword_argsr  
  se    OLG
$j
 
 43;;!$$,,GG:%GHHH47??qvvxx{c11JEFFHHHFFHHHq!! #Qii)!CCC	+AT:::
0 )
D D D"$9#'OOOLs 3444KK q!! #Qii)!CCC	+AT:::
0 )
D D D"""3'''qLG<  1$$?G  % % % 43;;t:%% FGGNV[[-D-DDEEE	S $j
 
 T L((r0   nonemptyc                 ^    | j         dk    rt          | |          S t          | ||          S )Nr   r  r  r>   )rF   p_c_complex_base_typep_c_simple_base_type)rB   r  r>   s      r.   r   r   
  s5    ts{{$QI>>>>#AINNNNr0   c                     | j         dk    r+| j        t          v r| j        }|                                  |S t	          d          S )NrE   r  )rF   rI   calling_convention_wordsrJ   r   )rB   r   s     r.   p_calling_conventionr  
  sA    tw1:)AAA	R   r0   )	__stdcall__cdecl
__fastcallc                    |                                  }|                                  t          | |          }t          | d          }t	          j        |||          }| j        dk    r|g}| j        dk    rw|                                  | j        dk    rnWt          | |          }t          | d          }|                    t	          j        |||                     | j        dk    wt	          j        ||          }| 	                    d           | j        dk    r1t          |           rt          | |          }nt          | ||          }|S )	Nr  Tr   r   rO   r   )
componentsr  )rU   rJ   r   r   r   r  rF   rP   r   rm   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rB   r>   rV   r   r   	type_noder  s          r.   r  r  
  sl    **,,CFFHHHa9555I...J*yZ9 9 9Its{{[
dckkFFHHHts{{%a9===I'666Je8yZA A A B B B dckk ,SzJJJ	HHSMMMts{{$Q'' 	F0I>>II,Q	9EEIr0   c           
      8   d}d}d}d}g }|                                  }dx}	}
| j        dk    r`| j        dk    r|	rt          |d           d}	n!| j        dk    r|
rt          |d	           d}
nn|                                  | j        dk    `|	s|
rht          | ||
          }t          |t          j                  r$t          j	        ||j
        |	|
          |_
        |S t          j	        |||	|
          S | j        dk    rt          |d| j        z             t          |           rd}| j        dk    r?| j        t          v r1t          | j                 \  }}| j        }|                                  nIt          |           \  }}| j        dk    r*| j        t          v r| j        }|                                  nd}| j        dk    r!| j        dk    rd}|                                  nt          |           rk| j        }|                                  | j        dk    rC|                    |           |                                  t#          |           }| j        dk    Cn| j        }|                                  }|                                  |r| j        dk    r| j        dk    r|                                  }|                                  | j        dk    s/| j        dk    s$| j        dk    s| j        dk    r&| j        t$          v r|                     dd|           nS|                     dd|           |                     d||           d }n"| j        dvr|                     d||           d }t          j        ||||||||          }| j        dk    r1t+          |           rt-          | |          }nt/          | ||          }| j        dk    r:|                                  t#          |           }t          j        |||          }|S )NFr   r   rE   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   )rL   module_pathis_basic_c_typesignedr  r  r>   r  )r   rL   )rU   rF   rI   r   rJ   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_namerP   rM   r  r  CSimpleBaseTypeNoder  r  r  CNestedBaseTypeNode)rB   r  r>   is_basicr  r  r  r  rV   r  r  r   rL   r  old_posr  s                   r.   r  r  
  sF   HFHGK
**,,C #"H{
$'//:  8s$7888HHZ:%%>E#'=>>>KK	 $'//  M; M!!h)LLL	i!>?? 	','Ec#2XS^(` (` (`I$-c(M M M 	M 	twc7!$>???A +47??qz-BBB4QZ@FH:DFFHHHH2155FHtw1:1C#C#Cz47??qzY66GFFHHH		"	" z	dckkt$$$FFHHH1::D dckk
 z::<<	 	ts{{**,,DCKK144<<143;;DGOO
>V0V0VJJsC1111JJsC111JJwh777DD222

7D(333)#;"Vh	  I 	ts{{$Q'' 	F0I>>II,Q	9EEIts{{	qzz-cyQUVVV	r0   c                 P   |                                  }|                                  t          | d|          \  }}|                     d           | j        dk    rt          | ||          }t          j        |d |D                       }t          j	        ||||          }|S )N)ri  ri  r  c                 L    g | ]!\  }}t          j        |j        ||           "S )rN  )r   rS  rV   )rL  rO  r7  s      r.   rM  z(p_buffer_or_template.<locals>.<listcomp>m  s@     
 
 
U "swCuEEE
 
 
r0   rj  )r>  r?  r   )
rU   rJ   r  rm   rF   r  r   rV  r   r   )rB   r   r>   rV   r>  r?  rX  r   s           r.   r  r  ]  s     **,,CFFHHH 	&a;; "O\ HHSMMMts{{-aKK%c
 
*
 
 
  L
 $S)#') ) )F Mr0   c                    | j         | j        |                                 fg}|                                  d}| j        dk    rd}n`| j         dk    rU|                    | j         | j        |                                 f           |                                  | j         dk    rd}|d d d         D ]} | j        |  |S )NFre   Tr  r8  )rF   rI   rU   rJ   rP   r  )rB   savedretvalsvs       r.   r  r  x  s     dAJ

-.EFFHHHFzS	
adAJ

5666	43;;FDDbDk  
BMr0   c                 L   |                                  }|                                  t          |           \  }}|D ]*}t          |          dk     r|                     d           +|                     d           t          ||          }t          j        |||          }|S )Nr    zDAn axis specification in memoryview declaration does not have a ':'.ri  )r   axes)	rU   rJ   rj  r<  r   rm   rl  r   r   )rB   r   rV   rn  r  r~  rp  r   s           r.   r  r    s     **,,CFFHHH$Q''MJ \ \	y>>AGGZ[[[HHSMMMsJ//G*3+  F Mr0   c                 4    | j         dk    o| j        t          vS rD   )rF   rI   r  r   s    r.   looking_at_namer    s    47?Iqz1IIIr0   c                    | j         t          v rdS | j        dk    rd}| j         }|                                 }g }|                                  | j        dk    rb|                                  |                    | j         |                                 f           |                     d           | j        dk    b| j        | j         |                                 f}| j        dk    rd}n| j        dk    s| j        dk    r(|                                  | j        dv } | j        |  ny| j        dk    r*|                                  | j        dk    } | j        |  nD| j        d	k    r9|                                  | j        d
k    pt          |            } | j        |  |	                                 |D ]-} | j        dg|R   |                     dd|d                    .|                     d||           | o|d         S dS )NFrE   r  Tr   r  )r   ri  r   r  ri  r   r   )
rI   base_type_start_wordsrF   rU   rJ   rP   rm   r  r   reverse)rB   is_typerL   r  dotted_pathr  ps          r.   r   r     s   z***u	
z::<<	dckkFFHHH
AJJLL9:::HHW dckk
 aj!**,,.47??GGTS[[ADDLLFFHHHdj(GAJTS[[FFHHHdckGAJTS[[FFHHHdck;););%;GAJ 	' 	'AAJw#####JJsC1&&&&	

7D(+++{'uQx'tr0   c                 4    | j         dk    o| j        t          v S rD   )rF   rI   r  r   s    r.   r  r    s     47?Bqz-BBBr0   c                     | j         dk    rS| j        }|                                 }|                                  | j         dk    }|                     d||           |S dS )NrE   r  F)rF   rI   rU   rJ   r  )rB   rL   r  r   s       r.   r  r    sY    twz::<<	dck	

7D(+++ur0   )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                    d}d}| j         dk    ru| j        t          v rg| j        dk    rd}n,| j        dk    rd}n| j        dk    rd}n| j        d	k    r|dz  }|                                  | j         dk    r| j        t          v g||fS )
Nr   r   rE   r  r  r    r  r8  r  )rF   rI   sign_and_longness_wordsrJ   )rB   r  r  s      r.   r  r     s    FH
$'//aj,CCC:##FFZ8##FFZ7""HHZ6!!MH	 $'//aj,CCC 8r0   c                 f    t          | d          }|t          |          }| j        |_        nd }|S )Nr  )r  r   r  r;  )rB   literalcnames      r.   p_opt_cnamer    s:    "1c**Gg&&*Lr0   r   r  cmethod_flag
assignablecalling_convention_allowedc           	         |                                  }| j        dk    r|                                  | j        dk    st          |           rCt	          j        || j                            d          d           }	t          | |||	|          }
nAt          | |||||d          }
| 
                    d           nt          | ||||||          }
|s<|
j        r5| j        dk    r*t          |                                  d|
j        z             | j        dv rb|                                  }| j        d	k    rt          | |
          }
n'|                                  t          | |||
|          }
d
}| j        dv b|
S )Nr   r   r  )rL   r  T)r   r  r  r  r   z&%s on something that is not a functionr  r   r  r   )rU   rF   rJ   r  r   CNameDeclaratorNoderG   rH   p_c_func_declaratorr   rm   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rB   r2   r   r  r  r  r  r   rV   rd  r   s              r.   r   r     s    **,,Cts{{	43;;/!,,;,Sqy7O7OPR7S7S[_```D(CdLIIFF#AsEW3?/7AEG G GF HHSMMMM&q#ug|'18= =% )&*C )PSajjllD'( 	) 	) 	)
$*

jjll43;;)!V44FFFFHHH(CflKKF $*

 Mr0   c                     |                                  }|                                  | j        dk    rt          |           }nd }|                     d           t          j        |||          S )Nri  )rd  	dimension)rU   rJ   rF   r  rm   r   CArrayDeclaratorNode)rB   rd  rV   dims       r.   r  r  B  s`    
**,,CFFHHHts{{mmHHSMMM%c$CHHHHr0   c                    t          | ||d          }t          |           }|                     d           t          |           }t	          | |j        dk              \  }}	}
|r&|
r$t          |                                 dd           |pt          |           }t          |           }t          j
        ||||||	|p|j        p|||
	  	        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   )rd  rh   has_varargsexception_valueexception_checkr"   with_gilhas_explicit_exc_clause)p_c_arg_listp_optional_ellipsisrm   p_nogilp_exception_value_clauser9   r   rU   
p_with_gilr   CFuncDeclaratorNoder"   )rB   rV   r2   rd  r  rh   ellipsisr"   exc_val	exc_check
exc_clauser  s               r.   r  r  N  s     3|/02 2 2D"1%%HHHSMMMAJJE%=aS[A[%\%\"GY
 
 
JJLL 	
 	
 	
 	
 WQZZE!}}H$SD!Y..h8]gi i i ir0   )r   r   r   rZ   r   z++z--r   r   r   r   r   r   rO   r   r   r   r   r   r   []()r1  r5  r  c           	      6   |                                  }t          |           }| j        dv r| j        dk    }	|                                  |                                  }
| j        dk    o
| j        dk    }|r|                                  t          | ||||||          }|rt          j        |
|          }|	rt          j        ||          }t          j        ||          }n| j        dk    s| j        dk    rh| j	        j
        r\| j        dk    rt          j        nt          j        }|                                  t          | ||||||          } |||          }n*d }| j        dk    r| j        }|r"t          |                                  d	           |                                  t          |           }|d
k    r0| j        dk    r%|r#|                                  t          |           }n(|r"t          |                                  d           d}d }||j        |r|j        dz   |z   }|d
k    r9|j        dk    r-|r*| j        }d |D             r|                                  |dk    r|                     d           d}np|dk    r|                     d           d}nR|dv r%| j        |k    r|dz  }|                                  n)| j        dk    r|| j        z  }|                                  |t&          vr|                     d|z  d           ||z  }nL|dk    rF| j        }|t&          vr|                     d|z  d           |dz   |z   }|                                  t          j        ||||          }||_        |S )Nrk  r  r  rE   )r   r  r  r  r  )rd  r   r   zDeclarator should be emptyr   r5  zEmpty declaratorr  ::r  c                     g | ]}|d v d	S )z+-*/<=>!%&|([^~,r   r@   )rL  r  s     r.   rM  z)p_c_simple_declarator.<locals>.<listcomp>  s#    999a&8!8!8!8!8!8r0   r   r   r  r  ri  r  )r   r   r   r   r    z,Overloading operator '%s' not yet supported.Fr    )rL   r  default)rU   r  rF   rJ   rI   r   r   CConstDeclaratorNodeCPtrDeclaratorNoderG   cpp CppRvalueReferenceDeclaratorNodeCReferenceDeclaratorNoder   r  rn   r=   r9   rm   supported_overloaded_operatorsr  r  )rB   r2   r   r  r  r  r  rV   r  	is_ptrptr	const_posr  rd  r   
node_classr   rL   r  rW   s                      r.   r  r  q  s    **,,C-a00t{DDL		JJLL	:(<QTW_ 	FFHHHaE7+7)3hH H H  	D-idCCCD 	<+Cd;;;D)#D999	
!)-?@tt||U;;QVQo
	aE7+7)3hH H H Cd+++47??:D Bajjll$@AAAFFHHHNNEz!!adckkjkQii 8ajjll$6777DE=S]686MD(4/E:#.H"<"<"<B992999 99HHSMMMBB3YYHHSMMMBB///ADBJJ!GBFFHHHHTS[[!$JBFFHHH;;;GGJRO"'  ) ) )
wZ;;;GGJRO"'  ) ) )czB*3#7 7 7 2FMr0   c                 ^    | j         dk    r!| j        dk    r|                                  dS dS )NrE   r"   TFrF   rI   rJ   r   s    r.   r  r    s0    tw1:00	tur0   c                 r    | j         dk    r+|                                  |                     d           dS dS )Nr  rQ  TF)rF   rJ   expect_keywordr   s    r.   r  r    s8    tv~~		tur0   	is_externc                 x   d}d}|rdnd}| j         dk    r%| j        dk    rd}|                                  d}n|| j         dk    rpd}|                                  | j         dk    rd}|                                  n7| j         dk    rd}|                                 d	         }|                                  | j         dk    rv| j        }|d
k    rD|                                 d	         |dz   k    r"t	          |                                 d           nt          | |          }|                                  n{| j         dk    r<t          j        |                                 d          }|                                  n3| j         dk    rd}|                                  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.
    FNTrE   noexceptr(  r   r   r    r"   r   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r6  r   )	rF   rI   rJ   rU   r   r  r   r  rn   )rB   r2  r  r  r  plus_char_posrL   s          r.   r  r    s   4 $JG",Itw1:33
				
		
	43;;IFFHHHHTS[[IJJLLOMFFHHHtwz7??zz||A-!*;;;ajjll GH H H %QooGFFHHHH#,QZZ\\EEEts{{ 	!	QiiGIz))r0   )r   r  rz  r   re   rZ   	in_pyfuncr  kw_onlyrg   c                     g }|}| j         t          vrY|                    t          | ||||||                     | j         dk    rn$|                                  d}| j         t          vY|S )N)r  r7  rg   rO   r   )rF   c_arg_list_terminatorsrP   p_c_arg_declrJ   )	rB   r2   r6  r  r  r7  rg   rh   is_self_args	            r.   r  r     s     DK
$,
,
,LCK+w!# # # 	$ 	$ 	$ 43;;	 $,
,
, Kr0   c                 >    | j         dk    rt          |            dS dS )Nrz  TF)rF   r{  r   s    r.   r  r  4  s%    tu}}tur0   c                    |                                  }dx}}	d }
d }| j        rt          j        |d g dddd|d 	  	        }nt	          | |          }t          | ||          }| j        dv r| j        s|| j        }|                                  | j        dk    r | j        dk    r|                                  n| 	                    d           |st          |d	|z             |d
k    }	|dk    }|r.| j        dk    r#|                                  t          |           }| j        dk    r|                                  d|j        v r\| j        dv r)t          j        |          }
|                                  n9d|j        v rt          |           }
n t          |d           nt          |           }
t          j        |||||	|
||          S )NFr   )rL   r  r  r  r  r  r;  r>   r  )r   r   rE   r  zExpected 'None'z*'%s None' only allowed in Python functionsr   r   re   r5  r  )r   r   r!   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner$  r  r7  )rU   r   r   r  r   r   rF   rJ   rI   r   r  r8   r   r  	modifiersrn   CArgDeclNode)rB   r2   r6  r  r  r7  rg   rV   r?  r@  r$  r  r   r   r  s                  r.   r:  r:  =  s    **,,CHwGJ 8-cr#a&D	: : :		 "!h777	38<<<Jt}Q%5t	47??qzV33FFHHHHGG%&&& 	L#CdJKKK$,5= %QTS[[	!!__
ts{{	CItz!!#,S11S]** ))cXYYYYQiiGc   r0   c                 t    |                                  }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  )rU   rn   r   AnnotationNode)rB   rV   rp   s      r.   r  r  t  s2     **,,C!99D#Cd3333r0   c                 ^    | j         dk    r!| j        dk    r|                                  dS dS )NrE   r#   TFr/  r   s    r.   p_apirF    s0    tw1:..	tur0   c                 h   t          | |j                  |_        |j        p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%|                                  t          | ||          S t          |           r.d|_	        |j
        rt	          |d           t          | |          S | j        dk    r'|j
        rt	          |d           t          | |          S | j        d	k    rA|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    rZ| j        t           v rL|j        d
vrt	          |d           |j
        r| j        dk    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 cpdefre   r  r{  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefrE   r'  z/C struct/union/enum definition not allowed herer  z'C struct/union cannot be declared cpdeffused)p_visibilityr9   r#   rF  r   rF   p_cdef_extern_blockrJ   r  r"   r<   p_cdef_blockr8   p_c_class_definitionrI   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionrX  rB   rV   r2   s      r.   r  r    sS   !!S^44CNg!qCG
w J>!666#7#.HIII("""1c3///	
			"1c3///	 8	? 	?#=>>>As###	
? 	?#=>>>As###	
9444#CDDD? 	C#ABBB#AsC000	
QZ:55%ac222	
QZ+<<<9444#HIII? 	FzV##cDEEEQS)))	
QZ722!!S#...*1c3777r0   c                 6    t          |  |d                    S )NT)r:   )r  r  s     r.   rL  rL    s    1ccd+++,,,r0   c                    |j         rt          |d           d }|                     d           | j        dk    r|                                  nt          | d          d         } |dd          }| j        d	k    r/|                                  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:   r9   r=   )include_fileverbatim_includerY  r=   )r<   r   rm   rF   rJ   r  rI   r=   r  r"   r  r   CDefExternNode)rB   rV   r2   rU  rV  rY  s         r.   rK  rK    s    
 Bc@AAALHHVts{{	'3//2
#$X
6
6
6Cz[  	(C003qzz 	 4AsDAAd#+M	# # # #r0   c                 @   |                                   d}| j        j        r7| j        dk    s| j        dk    r!| j        dk    rd}|                                   | j        dk    rA| j        }|                                   t          |           }||j        |j        dz   |z   }nd x}}|r|                     d           |rD| j        dk    r9|                                   t          |           }| 	                    d	           nt          j        |d
g dddd          }| 	                    d           g }d }| j        dk    rt          | ||           nn|                                   |                                  t          |           }| j        dvrt          | ||           | j        dv|                                  |s|j        dk    rt          |d           t          j        |||||||j        |j        |j        |j        |j        dk    |          S )NFr  rE   r  Tr!  zUnnamed scoped enum not allowedr   r   r  r   r   )rL   r  r  r  r  r  re   r  r  r  zDEmpty enum definition not allowed outside a 'cdef extern from' blockr|  )rL   r  scopedrs  underlying_typer;   r9   create_wrapperr#   in_pxdr  )rJ   rG   r'  rF   rI   r  r=   r   r   rm   r   r  p_c_enum_linerW  r  rY  r9   r  r;   r<   r#   r8   )	rB   rV   r2   rY  rL   r  rZ  rs  r  s	            r.   p_c_enum_definitionr^    sD    FFHHHFy} !$'//adgoo!*PXBXBX	twz	A=S]6MD(4/Eu 	7GG5666 
!$#++	'**	3"
 
 
 HHSMMME
Ctyae$$$$		1ood+++!S%((( d+++ 	
 [S^x//cYZZZ$eU'%#.GCI53@ @ @ @r0   rs  c                    | j         dk    rWt          | ||           | j         dk    r:|                                  | j         dv rnt          | ||           | j         dk    :n|                                  |                     d           d S )Nr  rO   r  zSyntax error in enum item list)rF   p_c_enum_itemrJ   r  )rB   r2   rs  s      r.   r]  r]    s    tv~~ae$$$dckkFFHHHt)))!S%(((	 dckk 	
566666r0   c                 L   |                                  }t          |           }t          |           }||j        |j        dz   |z   }d }| j        dk    r#|                                  t          |           }|                    t          j	        ||||                     d S )Nr!  r5  )rL   r  r7  )
rU   rM   r  r=   rF   rJ   rn   rP   r   CEnumDefItemNode)rB   r2   rs  rV   rL   r  r7  s          r.   r`  r`  "  s    
**,,C1::DNNE}2$t+Ets{{	q			LL'UE3 3 3 4 4 4 4 4r0   c                 j   d}| j         dk    rAd}|                                  | j        dk    s| j         dk    r|                     d           | j         }|                                  t	          |           }t          |           }||j        |j        dz   |z   }d }| j        dk    r>|                                  g }| j        dk    r,|                                  |                     d	d
           n|                     d           | 	                                 t          |j                  }| j        dk    rv| j        dk    r7|                    t          | |                                 |                     n)|                                  |                     d	           | j        dk    v|                                  |s|j        dk    rt!          |d           n|                     d           t#          j        ||||||j        |j        |j        |j        dk    |
  
        S )NFr  TrE   r  r!  re   r  r  r  r  )r9   r  r  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionr|  )	rL   r  r  
attributesr;   r9   r#   r\  r  )rI   rJ   rF   expectedrM   r  r=   r  rm   rW  r%   r9   rP   rX  rU   rY  r   r   r  r;   r#   r8   )	rB   rV   r2   r  r  rL   r  rd  rZ  s	            r.   p_c_struct_or_union_definitionrf  1  s5   FzX	47??ajH44JJx   :DFFHHH1::DNNE}2$t+Jts{{	
46>>FFHHH1DIIIIHHYOOcn555H$(""46>>%%3Aqzz||XNNP P P P FFHHH$$%9::: $("" OO 	jcn88#hiii	EFFF&sU4j'cng	\ 9FL L L Lr0   c                 J   |j         dvrt          |d           |                                  t          |           }|                     d           |                                  |                                  g }| j        dk    ra| j        dk    r#|                    t          |                      n|                                  |                                  | j        dk    a| 
                                 |st          |d           t          j        |||          S )z5
    c(type)def fused my_fused_type:
        ...
    r{  z&Fused type definition not allowed herere   r  r  zNeed at least one type)rL   types)r8   r   rJ   rM   rm   r  rW  rF   rP   r   rY  r   FusedTypeNode)rB   rV   r2   rL   rh  s        r.   rQ  rQ  _  s    y000c;<<<FFHHH1::DHHSMMMOOE
$(

46>>LLq))****FFHHH	 $(

 OO -c+,,,sU;;;;r0   c                 \    | j         dk    rt          | ||          S t          | ||          S )Nr  )rI   r^  rf  rR  s      r.   rP  rP    s3    zV"1c3///-ac:::r0   c                     |}| j         dk    rN| j        dv rE| j        }|dk    r$||k    r|                     d|d|dd           |                                  |S )	NrE   )r  rH  readonlyr'   z Conflicting visibility options 'z' and 'r  Fr   )rF   rI   r   rJ   )rB   prev_visibilityr9   s      r.   rJ  rJ    s     Jtw1:)IIIZ
i''J/,I,IGGG"??JJJ07<  > > >	r0   c                     | j         dk    r7| j        dv r.| j        }|                                  |gt          |           z   S g S )NrE   )r!   )rF   rI   rJ   p_c_modifiers)rB   modifiers     r.   ro  ro    sG    tw1:44:	zM!,,,,Ir0   c                 ~   |j         dv }t          |           }t          | d|j                  }t	          |  ||          |dd          }|j        |_        | j        dk    r-| j        dk    r"|j         dk    r|                                  d}nd	}| j        d
k    r:| 	                    dd	           |                                  t          |            | j        dk    rt|j         dvr|j        s| 	                    d           t          | t          d                    \  }}	t          j        ||j        |||	|||j        |j        |
  
        }
n|r||_        |g}| j        dk    rT|                                  | j        dk    rn4t	          | ||dd          }|                    |           | j        dk    T| j        dz   }|                     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  )rA  )r  r  r  rE   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   re   )r  r  r|  r  rr  z&C function definition not allowed herer`  r   )	r9   r   r   rY  r  rA  r#   r<   is_const_methodrO   r  r   z&Syntax error in C variable declarationr  )r|  r  )r9   r   declaratorsr\  r  r#   rA  r<   )r8   ro  r   r>   r   r<   rF   rI   rJ   r   rn   r  r%   r   r  r9   r#   rt  rP   
start_liner  r  r  )rB   rV   r2   r  rA  r   r   rt  r  suiter   ru  doc_lines                r.   rX  rX    s    #	-G GLa  Ia$CMJJJI33#;#;#;L+/4A A AJ _Jtw1:00SY+5M5M	tt||	M 	 	 	 	 	
q			ts{{9[[[dgdq[GG<===+As/D/D/DEE
U#C!#!'/-	/ 	/ 	/  	9)8J&!ldckkFFHHHty  '3|37$H H HJz*** dckk <!#	ATXYYY9222q|x7O7Oq//CCC"3!%Y"??'!/+ + + Mr0   c           	      \   |                                  }|                                  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          }|                     dd	           t          j        ||||||j        d
k              S )NT)r;   r9   r  rE   rI  r>  )r  r  z"Syntax error in ctypedef statementr  r|  )r   r   r9   r#   r\  )rU   rJ   rJ  r9   rF  r#   rF   rM  rI   rO  rP  rQ  r   r   r  r   CTypeDefNoder8   )rB   r2   rV   r9   r#   r   r   s          r.   r  r    sA    **,,CFFHHHa00J
((C
#4j
9
9
9C
 tw#AsC000	
QZ+<<<QS)))	
QZ722!!S#...!!d333	#AsD4HHH
	=PTUUU!Y##3Y,.	0 0 0 	0r0   c                     g }| j         dk    r|                                 }|                                  t          |           }|                    t          j        ||                     |                     d           | j         dk    |S )Nr   )	decoratorz"Expected a newline after decorator)rF   rU   rJ   r   rP   r   DecoratorNoder  )rB   r  rV   r|  s       r.   r  r     s    J
$#++jjll	$Q''	%-cYGGGHHH	=>>> $#++ r0   c                     | j         dk    r2|t          v r)|                     d|z  d           t          |           S |S )zqStep over incorrectly placed cdef modifiers (@see _CDEF_MODIFIERS) to provide a good error message for them.
    rE   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.Fr   )rF   r   r   rM   )rB   rL   s     r.   _reject_cdef_modifier_in_pyr    sH     	tw4?22	fimmuz{{{qzzKr0   r  r  c                    |r|d         j         n|                                 }|r|                                  |                                  t	          | t          |                     }|                     dd| j        dk    r| j        n| j        z             t          | d          \  }}}|                     d           t	          | | j                   d }| j        dk    r8|                                  t          |           }t	          | | j                   t          | t          d	                    \  }	}
|r|                                  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.rE   r   )rf   rs  r`  r   )	rL   rh   ri   rj   r  rY  r  r  return_type_annotation)rV   rU   enter_asyncrJ   r  rM   rm   rF   rI   rl   r  r  r%   
exit_asyncr   DefNode)rB   r  r  rV   rL   rh   ri   rj   r  r  rY  s              r.   r  r    sl     *
;*Q-

qzz||C 	FFHHH&q'!**55DHH	>$'//AJJqt	56 6 6
 $1s#C#C#C D(LHHSMMM1:...!tt||	!-a#Aqz222&q#J*?*?*?@@IC 	=$TH<dz57 7 7 7r0   r   c           	         t          | dd|          }d }d }| j        dk    rt          |          dk    r|                     d           |                                  |D ]	}d|_        
| j        dk    r;|                                  |                    t          | dd|                     n | j        |k    r|                     d           | j        d	k    r|                                  | j        d
k    rt          | |          }| j        dk    r<|                                  |                    t          | ddd|                     n | j        |k    r|                     d           | j        dk    r%|                                  t          | |          }| j        dk    r|                                  |||fS )NT)r6  r  rg   rZ   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'r   rO   z-Syntax error in Python function argument listr   rE   )rg   )r6  r  r7  rg   r  )r  rF   r<  r   rJ   pos_onlyrU  p_py_arg_decl)rB   rf   rg   rh   ri   rj   r   s          r.   rl   rl   8  s   T$-/ / /DHLts{{t99>>GG 4 5 5 5	 	 	CCLL43;;FFHHHKKT)U U U V V V VTZGGCDDDts{{	47??$Q)<<<H43;;FFHHHKKdtYbd d d e e e eTZGGCDDDtt||	$Q)<<<ts{{	(L))r0   c                     |                                  }t          |           }d }|r.| j        dk    r#|                                  t	          |           }t          j        |||          S )Nre   )rL   r  )rU   rM   rF   rJ   r  r   PyArgDeclNode)rB   rg   rV   rL   r  s        r.   r  r  ^  sa    
**,,C1::DJ %QTS[[	!!__
s4jIIIIr0   c                    |                                  }|                                  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r1  rG  r  r   r  )rL   basesr?  r  rY  r  force_py3_semantics)rU   rJ   r   rM   r  r;  rF   rD  r^  r   rI  r  r%   r   PyClassDefNoderG   r  )
rB   r  rV   
class_namerZ  rX  r>  r?  r  rY  s
             r.   r  r  i  s     **,,CFFHHHwqzz**J+JILts{{(9!%(P(P(P%":3Q]"^"^	<'"555	&q#G*<*<*<==IC*!dzI49; ; ; ;r0   c                    |                                   g }t          |           }| j        dk    rC|                                   |                    |           t          |           }| j        dk    C|r|j        dk    rt          |d           |r:| j        dk    r/| j        dk    r$|                                   t          |           }n|}d }d }d }d }	| j        dk    r?t          | d          \  }
}|r|                     d	           t          ||
|          \  }}|t          j
        |g 
          }| j        dk    rE|j        dvr)|j        s"t          |                                 d           t          |           \  }}}	| j        dk    r2|j        dk    rd}nd}t          | t!          |                    \  }}n|                     d           d }d }|j        dk    r%|st          |d           |rt          |d           n|j        dk    r%|st          |d           |st          |d           nO|j        dk    r,|j        r$|st          |d           |st          |d           nt          |d|j        z             t%          j        ||j        |j        |j        d                    |          ||||||	|j        dk    ||          S )Nr  r  z6Qualified class name only allowed for 'extern' C classrE   r  r   Fr  z$C classes cannot take keyword bases.rG  r  )rH  r  zBName options only allowed for 'public', 'api', or 'extern' C classre   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 classrH  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')r9   r;   r#   r  r  r  r  objstruct_nametypeobj_name
check_sizer\  r  rY  )rJ   rM   rF   rP   r9   r   rI   rD  r^  r   rI  r#   rU   p_c_class_optionsr8   r  r%   r  r   r  r;   r  )rB   rV   r2   r  r  r  r  r  r  r  r>  r?  r  
body_levelr  rY  s                   r.   rM  rM    s@    FFHHHKJ
$#++	:&&&QZZ
 $#++  Ms~11cKLLL qtw1:+=+=	!**NLEJts{{(9!%(P(P(P% 	<GG:;;;+C,OOq}#Cb111ts{{>!555cg5!**,, deee3DQ3G3G0jts{{9$$&JJ"J*1c
.C.C.CDD	TT	=>>>
~!! 	D#BCCC 	Z#XYYY	8	#	# 	Y#WXXX 	W#UVVV	9	$	$7 	X! ZcXYYY XcVWWWc2S^CDDDs^'ghh{++'#l*   r0   c                    d }d }d }|                      d           	 | j        dk    rn| j        dk    r$|                                  t	          |           }ny| j        dk    r$|                                  t	          |           }nJ| j        dk    r?|                                  t	          |           }|dvr|                     d|z             | j        d	k    rn|                                  |                      d
d           |||fS )Nr  r   rE   objectrM  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrO   ri  z)Expected 'object', 'type' or 'check_size')rm   rF   rI   rJ   rM   r   )rB   r  r  r  s       r.   r  r    s   NLJHHSMMM47??:!!FFHHH$QZZNNZ6!!FFHHH"1::LLZ<''FFHHH J!<<<IJVWWW43;;	!" HHS=>>><33r0   c                     |                                  }|                                  t          |           }t          | t	          d          d          \  }}t          j        ||||          S )Nr  r   Tr  )rL   r  rY  )rU   rJ   rM   r  r%   r   PropertyNode)rB   rV   rL   r  rY  s        r.   r  r    sk    
**,,CFFHHH1::D&	3Z   6 6 6ICc#DAAAAr0   c                     | j         dk    rP|                                 }t          |           }|                     dd           t	          j        ||          S dS )zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    r  zSyntax error in stringTr  r  N)rF   rU   r"  r  r   r  )rB   rV   string_nodes      r.   r  r    s^    
 	t~jjllQii	1DIII!#K88884r0   c                     | j         dk    rV|                                 }t          |           \  }}}|                     dd           |dv r|S t	          |d           |S d S )Nr  zSyntax error in doc stringTr  r  2Python 3 requires docstrings to be unicode strings)rF   rU   r  r  r   )rB   rV   r  bytes_resultunicode_results        r.   r  r     sw    t~jjll-A!-D-D*lN	5MMM9!!IJJJtr0   c                     d}| nt          | t          j                  r/| j        j        r"| j        }t          j        | j        g           } njt          | t          j                  rP| j        rI| j        }t          |d         t          j                  r"|d         j        j        r|d         j        }|d= |d}n>t          |t          j	                  rt          | j        d           |j        }n|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  rp   is_string_literalr  rV   r  r   r  r   r7  )r   doc_noder  r  s       r.   r  r    s    H|	D%,	-	- 	9& 	:yH%dhb999D	D%,	-	- $* 
eAh 233 	Qx}.  8=!H	Hi1	2	2 D	F 	F 	Fnn9r0   c                     t          |  ||          d          }| j        dk    r@|                     dt          | j                  dt          | j                  d           |S )Nr   Tre  r  Syntax error in statement [rO   ri  )r<  rF   r   r  rI   )rB   r8   r2   rY  s       r.   p_coder  .  sq    Ass51114HHHDtu}}	JJJJQZ((((* 	+ 	+ 	+Kr0   z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c           
         i }| j         dk    r|                                 }t          | j                  }|r|                    d                                          }	 t          j        |d          }nM# t          $ r@}| 	                    |j
        d         d           |                                  Y d }~d }~ww xY w|D ]}||vrt          j                            |          t          u r"||xx         ||         z  cc<   ||         ||<   O||         ||         k    rt          |d|           u| 	                    d	|d
||         d||         |           d|v r | j                            |d                    d|v r|d         | j        _        |                    |           |                                  | j         dk    |S )Ncommentliner   T)ignore_unknownr   Fr   zDuplicate directive found: z3Conflicting settings found for top-level directive : z and r4  r  legacy_implicit_noexcept)rF   rU   !_match_compiler_directive_commentrI   r%  r7  r   parse_directive_list
ValueErrorr   rh   rJ   directive_typesr  rH  r   rG   set_language_levelr  r+   )rB   r   rV   mdirectives_stringnew_directiveserL   s           r.   p_compiler_directive_commentsr  ;  s#   F
$-

jjll-aj99 	* !

 0 0 2 2!(!=>O`d!e!e!e   q	///
 ' 
L 
Lv%%,0066$>>4LLLN4$88LLL+1$<N4((#D)VD\99CCDD!JKKKKGGGfTlllN4,@,@BGJ  L L L L  >11	,,^<L-MNNN)^;;5CD^5_	2 MM.)))	C $-

D Ms   "A9 9
C6B>>Cc                    |                                  }t          |           }d| _        | j        j        | j                            d           |rdnd}t          |           }t          |  ||          d          }| j        dk    r@| 	                    d	t          | j                  d
t          | j                  d           t          |||||          S )NF3r|  r  r   Tre  r  r  rO   ri  )r  rY  full_module_namedirective_comments)rU   r  r6  rG   r  r  r  r<  rF   r   r  rI   r   )	rB   r  r  r2   rV   r  r8   r  rY  s	            r.   p_moduler  c  s    
**,,C6q99Ay'		$$S)))-LLXE
q//CAss///FFFDtu}}	JJJJQZ((((* 	+ 	+ 	+cT)9+=? ? ? ?r0   c                     t          |           }| j        dk    r-|                     d           |                     d           d}nd}||fS )Nr5  r   FT)rM   rF   rm   )rB   rL   requireds      r.   p_template_definitionr  x  sL    1::Dts{{		>r0   c           
      4   |                                   t          |           }t          |           }||j        |j        dz   |z   }| j        dk    rt          |d           | j        dk    r|                                   t          |           g}| j        dk    rA|                                   |                    t          |                      | j        dk    A|                     d           d |D             }nd }d }| j        dk    r|                                   t          | |	          g}| j        dk    rC|                                   |                    t          | |	                     | j        dk    C|                     d
           ng }| j        dk    r"t          | 
                                d           t          |           }| j        dk    r|                                   |                     d           |                                  t          |            g }	t          |j        d|p|j                  }
||
_        | j        dk    rc| j        dk    r$|	                    t%          | |
                     n)|                                   |                     d           | j        dk    c|                                  nd }	|                     d           t+          j        |||||j        |j        dk    |	|          S )Nr!  r  z*Qualified class name not allowed C++ classr  rO   ri  c                     g | ]\  }}|S r@   r@   )rL  rL   r  s      r.   rM  z*p_cpp_class_definition.<locals>.<listcomp>  s    ???>4$???r0   r   r  r   z&Name options not allowed for C++ classre   r  rr  )r9   r8   r"   r  r  r  z$Syntax error in C++ class definitionr|  )rL   r  base_classesr9   r\  rd  r>   )rJ   rM   r  r=   rF   r   r  rP   rm   r   rU   r  rW  r  r%   r9   r"   r>   p_cpp_class_attributer  rY  r   CppClassNoder8   )rB   rV   r2   r  r  r>   template_namesr  r"   rd  rZ  s              r.   rN  rN    s    FFHHHJNNE}2$z1ts{{c?@@@ts{{	*1--.	dckkFFHHH2155666 dckk 	
??Y???	ts{{	%a^DDDEdckkFFHHHa^ L L LMMM dckk 	
ts{{ajjllDEEEAJJEts{{			 	Q
CN+UM_VYV_```+dhtv~~!!"78"D"DEEEE  !5666 dh 	

	?@@@c#^l*   r0   c                 h   |                                  }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k    rt	          | ||          S t          | ||          S t          | ||          }|qt          j
        t          j        t          j        f}|j        r|t          j        t          j        fz  }t!          ||          s|                     d           ||_        |S )Nr   r'  rz  rE   r  r  )rU   rF   r  rI   rN  r  rO  rP  rX  r   r  r  r  r?   r  r  r   r   r  )rB   r2   rV   r  r   r  s         r.   r  r    s.   
**,,CJts{{!!__
zZ%ac222	
z	!	!#As+++	
QZ+<<<:)!S#666 C---*1c377!$e&79LLC. Gu2E4FFFdC(( SQRRR(DOr0   c                 <   | j         dk    r| j        dk    sJ |                                 }t          |           5 }|                                  t          |           }d }| j         dk    r|g}| j         dk    rM|                                  | j         dk    rn-|                    t          |                      | j         dk    M|t          j	        ||          }| 
                    d           d d d            n# 1 swxY w Y   |rd S |                                  |                                  g }| j         dk    r.|                    t          | |                     | j         dk    .|                                  t          j        |||          S )NrE   r  rO   re   rG  r  )subjectcases)rF   rI   rU   r   rJ   r   rP   rn   r   rI  rm   r  rW  p_case_blockrY  r   	MatchNode)rB   r2   rV   rL  r  subjectsr  s          r.   r  r    s   47??qzW4444
**,,C	!		 	"1%%43;;yHdckkFFHHHts{{OOF1II&&&	 dckk
 )#H===G	                t OOE
$(

\!S))*** $(

OO#CFFFFs   B9DDDc                 v   | j         dk    r| j        dk    s|                     d           |                                  |                                 }t          |           }d }| j         dk    r#|                                  t          |           }t          | |          }t          j	        ||||          S )NrE   caserw   )r1  rY  guard)
rF   rI   re  rJ   rU   
p_patternsrn   r  r   MatchCaseNode)rB   r2   rV   r1  r  rY  s         r.   r  r    s    DGOO
f 4 4	

6FFHHH
**,,CmmGEtt||	q		1c??D'W4uUUUUr0   c                    g }d}|                                  }	 t          |           5 }t          |           }d d d            n# 1 swxY w Y   |r8|rnx|d         }|                     |j        d         |j        d                    |                    |           | j        dk    r!d}|                                  | j        dv rnnn|rt          j	        ||          S |d         S )	NFTr   r   r4  rO   )re   rw   patterns)
rU   r   p_maybe_star_patternr   rh   rP   rF   rJ   r   MatchSequencePatternNode)rB   r  seqrV   rL  r1  r  s          r.   r  r    sC    H
C
**,,Ca   	.F*1--G	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	2 21Iq	qvay111   43;;CFFHHHt{"" # #&  6sXNNNN{s   AA	A	c                    | j         dk    rp|                                  d }| j        dk    rt          |           }n|                                  t	          j        |                                 |d          }|S t          |           }|S )Nr   r  T)r  is_star)rF   rJ   rI   p_pattern_capture_targetr   MatchAndAssignPatternNoderU   	p_pattern)rB   r  r1  s      r.   r  r  1  s     	ts{{	:-a00FFFFHHH :JJLL
 
 
 A,,r0   c                    g }|                                  }	 |                    t          |                      | j        dk    rn|                                  Ct          |          dk    rt          j        ||          }n|d         }| j        dk    r5| j        dk    r)|                                  t          |           5 }|j
                            t          |                      d d d            n# 1 swxY w Y   |rW| j        dk    rL|                                  t          j        |d         j        d         |d         j        d         	          S |rlt          |           5  t          |           }t          j        |j        d
	          cd d d            S # 1 swxY w Y   |                     |d                    |S )NTr   r   )alternativesr   rE   r  r  whatzInvalid pattern target)rU   rP   p_closed_patternrF   rJ   r<  r   OrPatternNoderI   r   
as_targetsr  r   	ErrorNoderh   rn   rV   r   )rB   r  rV   r1  rL  rp   s         r.   r  r  E  sP    H
**,,C(++,,,43;;		 8}}q .!
 
 

 1+tw1:--	a   	CF%%&>q&A&ABBB	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	C 	adckkFFHHH?6!9>!#46!9>!;LMMMM 	!!$$ P Payytx6NOOOP P P P P P P P P P P P P P P P GGF1INs$   (C<<D D 1*F((F,/F,c                    | j         dk    rG| j        dk    r<|                                 }|                                  t	          j        |          S | j         dk    rt          |           S | j         dk    rt          |           S | j         dk    rVt          |           5 }t          |           }|s|cddd           S 	 ddd           n# 1 swxY w Y   t          |           S t          |           5 }t          |           }|s|cddd           S 	 ddd           n# 1 swxY w Y   t          |           5 }t          |           }|s|cddd           S 	 ddd           n# 1 swxY w Y   t          |           5 }t          |           }|s|cddd           S 	 ddd           n# 1 swxY w Y   t          |           S )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
    rE   r  r  r  r   N)rF   rI   rU   rJ   r   r  p_mapping_patternp_sequence_patternr   p_group_patternp_literal_patternp_capture_patternp_value_patternp_class_pattern)rB   rV   rL  r   s       r.   r  r  i  s;   ( 	tw1:,,jjll	7<<<	
 ###	
!!$$$	
a   	F$Q''F 	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 "!$$$	!		 "1%% 	       	               
!		 "1%% 	       	               
!		  ## 	       	               1sH   !CCC7D$$D(+D(>E++E/2E/F22F69F6c           	         d}d}| j         dk    r1| j         }|                                 }|                                  d}| j         }|                                 }d }|dk    rt          |           }n7|dk    r1| j        }|                                  t          j        ||          }||dk    rt          j        ||          }|| j         d	v r| j         }|                                  | j         d
k    r|                     d           nu|                                 }| j        d d         }|                                  t          j	        |||t          j
        |                                 |                    }|^|d
k    rX| j        d d         }|                                  t          j
        |||z             }|dk    rt          j        ||          }|t          j        ||          S |r|                     d           |dk    r%t          |           }t          j        ||          S |dk    r(t          |           }	|	rt          j        ||	d          S |                     d           d S )NFr  r   Tr  r  r6  r   r   r  zExpected imaginary numberr8  )r   r   zExpected a numberr  rE   )r7  is_is_checkzFailed to match literal)rF   rU   rJ   r  rI   r   r  UnaryMinusNoder   r[   r  r   MatchValuePatternNoder  r  )
rB   next_must_be_a_numbersignsign_posrF   rV   resr7  add_posr   s
             r.   r  r    s    "Dts{{t::<<	 $	
B
**,,C
C	U{{A	w
	!#U333
43;;&x===
14:--t	46>>GG/0000jjllGJssOEFFHHH&"+AJJLLFFF	  C {rV||
3B3	 DJ7773;;*8SAAAC
3CsCCCC %	#$$$	^A3CsCCCC	w (** 	]!76W[\\\\GG%&&&&&r0   c                 l    t          j        |                                 t          |                     S )N)r  )r   r  rU   r  r   s    r.   r  r    s2    3	

'**   r0   c                 <   | j         dk    r|                     d           |                                 }t          | | j                  }|                                  | j         dk    r|                     d           | j         dk    rY|                                 }|                                  t          |           }t          j        |||          }| j         dk    Y| j         dv r|                     d| j         z             t          j
        ||          S )NrE   Expected identifierr  r+  )r   r5  zUnexpected symbol '%s'r6  )rF   r   rU   r  rI   rJ   rM   r   r/  r   r  )rB   rV   r  attr_posattrs        r.   r  r    s    tw	%&&&
**,,C
AJ

CFFHHHts{{	
$#++::<<	qzz%hC4HHH	 $#++
 	tz	(14/000/3????r0   c                 x    |                      d           t          |           }|                      d           |S )Nr   r   )rm   r  )rB   r1  s     r.   r  r    s0    HHSMMMllGHHSMMMNr0   c                    | j         }|                                 }|dv r|dk    rdnd}|                                  g }| j         |k    r||                    t	          |                      | j         dk    r|                                  n/|dk    r(t          |          dk    r|                     d           n| j         |k    ||                     |           t          j	        ||	          S |                     d
           d S )Nr  r  ri  r   rO   r   r   z3tuple-like pattern of length 1 must finish with ','r  zExpected '[' or '(')
rF   rU   rJ   rP   r  r<  r   rm   r   r  )rB   openerrV   closerr  s        r.   r  r    s   TF
**,,C#3	dfnnOO033444ts{{S==S]]a%7%7GGQRRR dfnn 	
6sXNNNN	%&&&&&r0   c                    |                                  }|                     d           | j        dk    r(|                                  t	          j        |          S d }g }d }| j        dk    r|r|s|                                  }| j        dk    r$|                                  t          |           }nt          |           5 }t          |           }|j	        }d d d            n# 1 swxY w Y   |rt          |           }|j	        }|                     d           t          |           }|                    ||f           | j        dk    rn |                                  | j        dk    |                     d           |t          j        |d          S t	          j        |d |D             d	 |D             |
          S )Nr  r#  r  re   rO   z7** pattern must be the final part of a mapping pattern.r  c                     g | ]
}|d          S r   r@   rL  kvs     r.   rM  z%p_mapping_pattern.<locals>.<listcomp>A  s    ///"1///r0   c                     g | ]
}|d          S r   r@   r  s     r.   rM  z%p_mapping_pattern.<locals>.<listcomp>B  s    999B"Q%999r0   )keysvalue_patternsdouble_star_capture_target)rU   rm   rF   rJ   r   MatchMappingPatternNoder  r   r  r7  r  r  rP   r   r  )	rB   rV   r  items_patternsstar_star_arg_posrL  r1  rO  r7  s	            r.   r  r    s   
**,,CHHSMMMts{{	5c:::!%N
$#++% 	-.? 	- !

44<<FFHHH)A!)D)D&& "!$$ $+A..m$ $ $ $ $ $ $ $ $ $ $ $ $ $ $  $)!,,mHHSMMMaLLE!!3,///43;;	' $#++( HHSMMM$L
 
 
 	
 1/////99.999%?	   s   C((C,/C,c                 ^   |                                  }t          | | j                  }|                                  | j        dk    rY|                                  }|                                  t          |           }t          j        |||          }| j        dk    Y|}|                     d           | j        dk    r*|                                  t          j
        ||          S g }g }d }| j        dk    rt          |           5 }	|                    t          |                      d d d            n# 1 swxY w Y   |	s|r|                                  }nIt          |           5 }	|                    t          |                      d d d            n# 1 swxY w Y   | j        dk    rn|                                  | j        dk    |                     d           |t          j        |d          S t          j
        |||d	 |D             d
 |D                       S )Nr  r+  r   r   )class_rO   z+Positional patterns follow keyword patternsr  c                     g | ]
}|d          S r   r@   r  s     r.   rM  z#p_class_pattern.<locals>.<listcomp>t  s     B B B2A B B Br0   c                     g | ]
}|d          S r  r@   r  s     r.   rM  z#p_class_pattern.<locals>.<listcomp>u  s    #E#E#EbBqE#E#E#Er0   )r  positional_patternskeyword_pattern_nameskeyword_pattern_patterns)rU   r  rI   rJ   rF   rM   r   r/  rm   r   ClassPatternNoder   rP   r  p_keyword_patternr   r  )
rB   rV   r  r  r  r  r  keyword_patternskeyword_patterns_errorrL  s
             r.   r  r  G  s    **,,C
AJ

CFFHHH
$#++::<<	qzz%hC4HHH	 $#++
 FHHSMMMts{{	.s6BBBB !
$#++a   	5F&&y||444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	> 6)*&!!$$ > ''(9!(<(<===> > > > > > > > > > > > > > >43;;	 $#++ HHSMMM)">
 
 
 	
 *f1 B B1A B B B#E#E4D#E#E#E	   s$   #D==EE0#FF#&F#c                     | j         dk    r|                     d           t          | | j                  }|                                  |                     d           t          |           }||fS )NrE   r  r5  )rF   r   r  rI   rJ   rm   r  )rB   r   r7  s      r.   r  r  y  sb    tw	%&&&
AJ

CFFHHHHHSMMMaLLE:r0   c                 $   | j         dk    r|                     d           | j        dk    r|                     d           t          | | j                  }|                                  | j         dv r|                     d| j         z             |S )NrE   r  r  z$Pattern capture target cannot be '_')r  r   r5  zIllegal next symbol '%s')rF   r   rI   r  rJ   )rB   r  s     r.   r  r    s     	tw	%&&&zS	6777Aqz""FFFHHHt	*QT1222Mr0   r8   c                    d|z  }|                      |           |r|                      | d           |s|                      d           d S t          |          t          u rc|                      d|d          d|d          d           |d	d          D ]}t          | ||dz              |                      | d
           d S t	          |t
          j                  r	 |j        }n# t          $ r |j	        j
        }Y nw xY w|                      | d|j         d           t          |j                                                  D ]&\  }}|dk    r|dk    rt          | ||dz   |           'd S t          |          t          u rH|                      d           |D ]}t          | ||dz              |                      | d           d S |                      | | d           d S )Nz  r  zNone
r   r   z @ r   r  r    z)
tagrV   z[
z]
)writerM  rR  print_parse_treer   r   Noder  r  r  r5   rV   sortedr*   rs  rH  )	r  r   r8   rO  indr]  r  rL   r7  s	            r.   r  r    sB   e|CGGCLLL
 	3


 "		du			+DG++Q+++,,,H 	/ 	/DQeAg....	3	D%*	%	% "	*(CC 	* 	* 	*.)CCC	*	3''48'''(((!$-"5"5"7"788 	: 	:KD%u}} E57D999	: 	: 
dt			 	/ 	/DQeAg....	3	3    !!!!!s   "C* *DDr@   )rA   )T)NN)r  r)   )Fr   )FN)FFFT)NF)r   T)r  rp  r  rR  rl  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%   cfuncrM   rR   rX   rc   rq   rn   rt   r   r   r|   r   r   r   r   r   r   r   r   r   	frozensetr   r   r   r   r   r   r   r   r   r   r   r  r
  r  r   r!  r#  r  rD  r^  r(  r.  rj  rr  ru  r{  rl  ccallr}  r"  r  r  r  r  r  r  r  r  r  r  r  r   r   r  r   rH  r  r'  r  rZ  rR  rX  r  r  r  r  rU  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!  r  r  r/  r,  rC  rG  r  rI  rO  rF  rg  rj  rm  rr  rx  r  r<  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  rO  r  r  r   r  r  r*  r  r  r  r  r9  r  r  r:  r  rF  r  rL  rK  r^  r]  r`  rf  rQ  rP  rJ  ro  rX  r  r  r  r  r  rl   r  r  rM  r  r  r  r  r  r  r  r  r  r  r  r  rN  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r@   r0   r.   <module>r'     sW(     B B BVV Bvv BVV B#VB4:FB$*FB?EvB fB '-fB 5;FB EKFB v	B +1&	B 9?	B JP	B Y_X^	B
 &B
 39&B
 W]V\B vB '-fB  %uB =ADB B       				 4 4 4 4 4 4 % % % % % % % % J J J J J J J J J J                               8 8 8 8 8 8 8 8 " " " " " " " " " " " " " "                   -       0  |     L           L          ( 
l 
 
 
 
          *  $511 4 4 4 4 4
<    $ 5, 5 5 5 5 ,     
L 
 
 
 
 l     # # # # # 
l 
 
 
 
 l         (  	99 6 , ,   /, / / / / /, / / / / 1, 1 1 1 1 7L 7 7 7 7 /L / / / / Al A A A A     
     ( ,    >     ( 5, 5 5 5 5, ? ? ? ? ? F F F F F, |    ( F, F F F F 
' 
' 
' 
' 
', /1 /1 /1V[ /1 /1 /1 /1d '#E '# '# '# '#T 
Zl 
Z 
Z 
Z 
Z" |    * 	" 	" 	" 	" 	" 	" <      |     |        1 1 1 1 )5l )5 )5 )5 )5X 1\ 1 1 1 1( l    , 2\ 2 2 2 2@ .l . . . . " " "J ),L ),U ), ), ), ),X 7 7L 7 7 7 7 7 fk     d. d. d.U d. d. d. d.N #(C #(L #( #( #( #(L8 8$  %8 8 8 4 4, ,U ,v/@ ,U , , , , ,, ,FK ,D , , , ,^ R| R R$*$5R?E{ROTR R R Rx /L / / / /< <     (, ( ( ( (     , jZ< jZ jZ jZ jZ\ 3 3 3 3 3   , d      < t      \      ,     L     
| 
 
 
 
 B B B B B "6>)YY 8( .) .) * *  0, 0 0 0 0 2L 2 2 2 2 0W, 0W 0W 0W 0Wf , , , , ,8 . . . . .8 /| / / / / # # #FK # # # # $ $ $ $ $ 'L ' ' ' ' 4, 4 4 4 4 * * * * *: 0, 0 0 0 0@ N N| Nfk N N N Nb  |         
R\ 
Rv{ 
Ru 
R 
R 
R 
R      
B, 
B 
B 
B 
B 'y)) = 3 3    
<l 
< 
< 
< 
< '< ' ' ' ' \     	# 	# 	# 	# 	# ( (| (v{ ( ( ( ( ) )L )&+ )PVP[ )hl ) ) ) )X 7< 7 7 7 7 |     &v~i < 2 2     #      L     e el eFK eRXR] e e e e 2| 2 2 2 28 0| 0 0 0 0> '< ' ' ' '*       L FK    @ 
 
 
 
 
 
 
 e< e6; e5 e e e e: D| D D D D2    ,          F ! !| !6; ! ! ! !H <     #| # # # # l    8 vX vX< vXv{ vX vX vX vXr 6 6 6FK 6 6 6 6$ !$ B B| B B B B  l  X]    . 6) 6)\ 6) 6) 6) 6)r O O\ OV[ O O O O !L ! ! ! ! *6>)YY @* 6+ 6+ , ,   \    : _ _L _FK _ _ _ _D L    4  &+    ,     " J| J J J J J '| ' ' ' ' 'T CL CV[ C C C C
 	l 	v{ 	 	 	 	 $V^Iyy :6 07 07 8 8  't
. 
. 
 
  )&.II ?+ 5, 5, - -  'i%&&'( (  #FN9ii 9) /* /* + +  < E      <     *-#%%(-ein-2E=B" "l " +"8>"[a[f"%{">Dk" 06{" " " "J IL I I I I i< iv{ i i i i2 "0	99 F < < " "  O\ O!'O7={ORXR]O&,kO=C[O O O Od |      , 6;     A* A* A* A* A* A* A*H (	99 >% 4& 4& ' '  (+*/U5:SX*. L "K?E{'-{EK[ #K 48   & < FK     [`).HL3 3L 3&+ 3V[ 3!;3 +3:@+3 3 3 3l 	4L 	4 	4 	4 	4 \ fk     &8 &8 &8 &8 &8R -L - - - - #< # # # #4 <@< <@ <@ <@ <@~ 
7\ 
7t 
7 
7 
7 
7 4\ 4t 4 4 4 4 *Ll *L *L *L *LZ  <,  <  <  <  <F ;\ ; ; ; ; L     \ d     A< A A A AH 0L 0 0 0 04 L T     <     7 7| 7 7FK 7 7 7 7@ "* "*\ "*v~ "*PVP[ "*gl "* "* "* "*J J J\ Jfk J J J J ; ; ; ; ;. IL I I I IX 4 4% 4 4 4 44 B| B B B B 	\ 	 	 	 	 
L 
 
 
 
     > "&C  l     %3FN6:2:+<- <--2%4 %4 ! $\ $d $ $ $ $N 9< ? ? ? ? ? ?( \ e     <l < < < <~ \    4 G G G G GB VL V V V V ,    > L    &          F . . . . .b ?' ?' ?' ?' ?'D      @| @ @ @ @$ |     ', ' ' ' ', + + + + +\ .| . . . .b      
 
 
 
 
( " "V[ " " " " " "r0   