o
    j9e                    @   s*  d dl Z e jdi dededededededed	ed
edededededededededededededede d dlmZ d dlZd dlm	Z
 d dlmZmZ ddlmZmZmZ ddlmZ ddlmZ dd lmZ dd!lmZ dd"lmZ dd#lmZmZ dd$lmZ dd%lmZmZmZ d&d'lmZ dd(lm Z  dd)lm!Z! d*Z"e e#e#d+Z$G d,d- d-Z%e j&dd/efd0d1Z'e j&d/efd2d3Z(e j&d/ed4efd5d6Z)d/efd7d8Z*e j&d/efd9d:Z+e j&d/efd;d<Z,e j&d/efd=d>Z-e j&d/efd?d@Z.dAdBdCZ/e j&d/efdDdEZ0d/efdFdGZ1e j&d/efdHdIZ2e j&d/efdJdKZ3e j&d/efdLdMZ4e j&d/efdNdOZ5e j&d/efdPdQZ6e j&d/efdRdSZ7e j&d/efdTdUZ8e j&d/efdVdWZ9e e#e#dXZ:e j&d/efdYdZZ;e j&d/efd[d\Z<e j&d/efd]d^Z=e j&d/efd_d`Z>e j&d/efdadbZ?e j&d/efdcddZ@e j&d/efdedfZAe j&d/efdgdhZBe j&d/efdidjZCe j&d/efdkdlZDe j&e$fd/edme#fdndoZEe j&d/efdpdqZFe j&d/efdrdsZGe j&d/efdtduZHe j&d/efdvdwZIe j&d/efdxdyZJe j&dd/ed{e jKd4efd|d}ZLe j&d4efd~dZMe j&d/efddZNe j&d/efddZOe j&d/ed4efddZPe j&d/ed4eQfddZRe j&d/efddZSe j&d/efddZTe j&d4eQfddZUe jVdddZWe j&d/efddZXe j&d/efddZYe j&d/efddZZe j&d/efddZ[e j&d/efddZ\e j&dd Z]e j&d/ed4efddZ^e j&dd/ede_fddZ`e j&d4e jKfddZae j&d/ede jKfddZbe j&de_d4e_fddZce j&dd/ed4efddZde j&d/ed4e_fddZee j&d/ede jKde jKde jfd4eQf
ddZge j&d/ede jKde jKde jKde jfd4eQfddZhe j&d/ed4efddZie j&de_d/efddZje j&d/efddZke j&d/efddZle j&d/efddZme j&d/efddZne j&d/efddÄZoe j&d/efddńZpe j&dd/ed4eQfddǄZqe j&dd/ed4eQfddɄZre j&dd/ed4eQfdd˄Zse j&d/efdd̈́Zte j&d/efddτZue j&d/efddфZve j&d/efddӄZwe e#e#dԃZxe j&d/efddքZye j&d/efdd؄Zze j&d/efddڄZ{e j&d/efdd܄Z|e j&d/efddބZ}e j&d/efddZ~e j&dd/ede jKfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&dd/ede jKfddZe j&d/ed4efddZe j&d/ede jKd4efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efdd Ze j&d/efddZe j&dd/ede jKfddZe j&dd/ede jKde jKd4efddZe j&d/efd	d
Ze j&d/efddZe e#e#dZe j&d/ede_fddZe j&d/efddZe j&dd/ede jKde jKfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&dd/ede jKfddZe j&d/ede jKd4eQfdd Ze j&d/ede jKd4efd!d"Ze j&d/efd#d$Ze j&dd/ede jKfd%d&Ze j&dd/ede jKfd'd(Ze j&d/efd)d*Ze j&d/efd+d,Ze j&d/efd-d.Ze j&dd/ede jKfd/d0Ze j&dd/ede jKfd1d2Ze j&e% fd/efd3d4Ze j&dd/ed5e jKd4efd6d7Ze j&dd/ed4efd8d9Ze jVdd/ed:e jKfd;d<Ze j&d/efd=d>Ze e#e#d?Ze j&dd/efd@dAZe j&dd/ed:e jKfdBdCZe j&d/efdDdEZe j&d/ed4e jKfdFdGZe j&d/efdHdIZe j&d/ed4e jKfdJdKZe j&d/ed4e jKfdLdMZe j&d/ed4e jKfdNdOZe j&d/ed4e jKfdPdQZe e#e#dRZe edSdSdTdTdTdSdTdUdVZe e#e#dWZe e#eeB e#eB Ze e#e#dXZe j&d/ed4efdYdZZe j&d/efd[d\Ze jVe% ddddddfd/ed]e jKd^e jKd_e jKd`e jKd:e jKdae jKfdbdcZe j&d/efdddeZe j&d/ed_e jKfdfdgZe e#e#dhZe j&d/ed]e jKd^e jKd_e jKd`e jKd:e jKfdidjZe j&d/ed4e jKfdkdlZe j&d/ed4e jKfdmdnZe j&d/edoe jKd4efdpdqZe e#e#drZe jVe% dddddzfd/edse jKd_e jKdte jKdue jKdve jKd4eQfdwdxZe j&d/ed4e jKfdydzZe j&			zdd/edse jKd_e jKd:e jKdue jKdve jKfd{d|Ze j&d/efd}d~Ze j&d/ed4e jKfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/edeQfddZe j&d/edeQfddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d/ed4eQfddZe j&d/efddZe j&d/efddZe j&d/ed4eQfddZe j&d/efddZe j&dd/edeQde jKfddZe j&dd/ede jfdve jKd4efddZe j&dd/edve jKfddZe j&d/efddZe j&d/efddZe j&d/ed4efddZe j&d/efddZe j&d/efddZe j&d/efddZe j&d4efddZe jVde%fd/efddZe eedjZe j&d/ed4efddZe jVe%fd/efddZe j&d/ed4efddZe j&d/efddZe j&d/efddÄZe j&d/efdĐdńZe j&d/efdƐdǄZe j&d/efdȐdɄZe j&d/efdʐd˄Ze j&d/efd̐d̈́Ze j&d/efdΐdτZe j&d/efdАdфZe j&d/efdҐdӄZe j&d/efdԐdՄZe j&d/efd֐dׄZe j&d/efdؐdلZe j&d/efdڐdۄZe j&d/efdܐd݄Ze j&d/ed4efdސd߄Ze j&d/efddZe jVdde jfddZdS (      NNodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharFutureOptionserrorwarningBuiltin
ModuleNodeUtilsZ_unicodeZ_bytesreZ_parse_escape_sequencesZ_parse_escape_sequences_rawpartialreduce_CDEF_MODIFIERSCOMMON_BINOP_MISTAKES)StringIO)lookup)r   r      )PyrexScannerr   tentatively_scan)r   )r   )MatchCaseNodes)r   )r   )r   r   )r   )r   r   CompileError   )r   )r	   )r
   )inlinenogilapi);NEWLINEEOFc                   @   sD   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d Zdd ZdS )	CtxotherprivateFNc                 K   s   | j | d S N)__dict__update)selfkwds r+   X/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/Cython/Compiler/Parsing.py__init__6   s   zCtx.__init__c                 K   s&   t  }|j}|| j || |S r&   )r#   r'   r(   )r)   r*   ctxdr+   r+   r,   __call__9   s
   
zCtx.__call__)__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr   overridabler   	namespace	templatesallow_struct_enum_decoratorr-   r0   r+   r+   r+   r,   r#   )   s    r#   Expected an identifiersc                 C   s2   | j dkr| j| j}|   |S | | d S NIDENT)sycontextintern_ustringsystringnextr   )r=   messagenamer+   r+   r,   p_identA   s
   
rG   c                 C   sP   g }| j dkr&|| j| j |   | j dkr	 |S |   | j dks|S )Nr?   ,)r@   appendrA   rB   rC   rD   )r=   namesr+   r+   r,   p_ident_listK   s   


rK   returnc                 C   s   |   }| j}|   ||fS r&   )positionr@   rD   )r=   posopr+   r+   r,   p_binop_operator\   s   rP   c                 C   sh   || }| j |v r2t| \}}|| }t||||}|dkr-tj| jjv r*d|_nd |_| j |v s	|S )N/T)	r@   rP   r   
binop_noder	   divisionrA   future_directivesZtruedivision)r=   opsZ
p_sub_exprn1rO   rN   n2r+   r+   r,   p_binop_expre   s   

	rX   c                 C   sb   |   }|   | jdkrg }d  }}n
t| ddd\}}}| d t| }tj|||||dS )N:F)
terminator	annotated)argsstar_argstarstar_argZresult_expr)rM   rD   r@   p_varargslistexpectp_testr   Z
LambdaNode)r=   rN   r\   r]   r^   exprr+   r+   r,   	p_lambdefu   s   


rc   c                 C   s    t | }| jdkr| d |S )N:=zAinvalid syntax: assignment expression not allowed in this context)p_test_allow_walrus_afterr@   r   )r=   rb   r+   r+   r,   ra      s   

ra   c                 C   sd   | j dkr	t| S |  }t| }| j dkr0|   t| }| d t| }tj||||dS |S )Nlambdaifelse)testZtrue_valZ	false_val)	r@   rc   rM   	p_or_testrD   r`   ra   r   ZCondExprNode)r=   rN   rb   ri   r$   r+   r+   r,   re      s   


re   c                 C   sR   t | }| jdkr'|  }|js| jddd |   t| }tj|||dS |S )Nrd   z=Left-hand side of assignment expression must be an identifierFfatallhsrhs)	re   r@   rM   is_namer   rD   ra   r   ZAssignmentExpressionNode)r=   rn   rM   ro   r+   r+   r,   p_namedexpr_test   s   	
rq   orand)z||&&c                 C      t | dtS )Nrr   )p_rassoc_binop_expr
p_and_testr=   r+   r+   r,   rj         rj   c                 C   s   || }| j |kr$|  }| j }|   t| ||}t||||}|S | j tv r>t| j  |kr>t|  d| j |f dd |S )NzAFound the C operator '%s', did you mean the Python operator '%s'?r   r4   )r@   rM   rD   rv   r   rR   r   r   )r=   rO   Z	p_subexprrV   rN   rW   r+   r+   r,   rv      s   
rv   c                 C   ru   )Nrs   )rv   
p_not_testrx   r+   r+   r,   rw      s   rw   c                 C   s4   | j dkr|  }|   tj|t| dS t| S )Nnotoperand)r@   rM   rD   r   ZNotNoder{   p_comparisonr=   rN   r+   r+   r,   r{      s
   
r{   c                 C   sT   t | }| jtv r(|  }t| }t | }tj||||d}| jtv r(t| |_|S )N)operatoroperand1operand2)	p_starred_exprr@   comparison_opsrM   p_cmp_opr   ZPrimaryCmpNodep_cascaded_cmpcascade)r=   rV   rN   rO   rW   r+   r+   r,   r      s   


r   c                 C      | j dkr	t| S t| S N*)r@   r   ra   rx   r+   r+   r,   p_test_or_starred_expr      
r   c                 C   r   r   )r@   r   rq   rx   r+   r+   r,    p_namedexpr_test_or_starred_expr  r   r   c                 C   s@   |   }| jdkrd}|   nd}t| }|rt||}|S )Nr   TF)rM   r@   rD   
p_bit_exprr   ZStarredUnpackingNode)r=   rN   Zstarredrb   r+   r+   r,   r     s   

r   c                 C   s@   |   }t| }t| }tj|||d}| jtv rt| |_|S )N)r   r   )	rM   r   r   r   ZCascadedCmpNoder@   r   r   r   )r=   rN   rO   rW   resultr+   r+   r,   r     s   

r   c                 C   sp   | j dkr|   | d d}n| j dkr)|   | j dkr&|   d}n
d}n| j }|   |dkr6d}|S )Nr|   inZnot_inisis_not<>!=)r@   rD   r`   r=   rO   r+   r+   r,   r   %  s   



r   )
<>==>=<=r   r   r   r   r|   c                 C   ru   )N)|)rX   
p_xor_exprrx   r+   r+   r,   r   B  ry   r   c                 C   ru   )N)^)rX   
p_and_exprrx   r+   r+   r,   r   I  ry   r   c                 C   ru   )N)&)rX   p_shift_exprrx   r+   r+   r,   r   P  ry   r   c                 C   ru   )N)<<>>)rX   p_arith_exprrx   r+   r+   r,   r   W  ry   r   c                 C   ru   )N+-)rX   p_termrx   r+   r+   r,   r   ^  ry   r   c                 C   ru   )N)r   @rQ   %z//)rX   p_factorrx   r+   r+   r,   r   e  ry   r   c                 C   s   t | S r&   )	_p_factorrx   r+   r+   r,   r   l  s   r   c                 C   s   | j }|dv r| j }|  }|   t||t| S | jsJ|dkr5|  }|   t| }tj||dS |dkr=t| S |dkrJ| j	dkrJt
| S t| S )N)r   r   ~r   r}   r   r?   sizeof)r@   rM   rD   r   Z	unop_noder   in_python_fileZAmpersandNode
p_typecastrC   p_sizeofp_power)r=   r@   rO   rN   argr+   r+   r,   r   r  s"   r   c                 C   s   |   }|   t| }t|tj}t|tjtjtjf}|s+|s+|j	d u r+| 
d t| dd}| jdkr=|   d}nd}| d t| }|rRtj|||dS tj|||||dS )	NzUnknown typeTempty?Fr   )base_type_noder~   )	base_type
declaratorr~   	typecheck)rM   rD   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderF   r   p_c_declaratorr@   r`   r   r   ZCythonArrayNodeZTypecastNode)r=   rN   r   Zis_memsliceZis_other_unnamed_typer   r   r~   r+   r+   r,   r     s4   


r   c                 C   sl   |   }|   | d t| rt| }tj||d}nt| }t| dd}tj	|||d}| d |S )N(r}   Tr   r   r   ))
rM   rD   r`   looking_at_exprra   r   ZSizeofVarNoder   r   ZSizeofTypeNode)r=   rN   r~   noder   r   r+   r+   r,   r     s   

r   statement_terminatorsc                 C   s   |   }|   d}| jdkrd}|   | jdkr*| j|vr*|r%t| nt| }n|r4| jd|dd d }|r?tj||dS tj||dS )NFfromTr   z''yield from' requires a source argumentrN   rl   r   )	rM   rD   r@   ra   
p_testlistr   r   ZYieldFromExprNodeYieldExprNode)r=   r   rN   Zis_yield_fromr   r+   r+   r,   p_yield_expression  s    
r   c                 C   s   t | }tj|j|dS )Nrb   )r   r   ExprStatNoderN   )r=   Z
yield_exprr+   r+   r,   p_yield_statement  s   r   c                 C   s   | j dkrd|jv r| d |j| _t| |ddS |r#| d d S | j dkr.t| ddS | j d	kr=|   t| d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')r@   r4   r   p_def_statementp_for_statementrD   p_with_items)r=   r.   
decoratorsr+   r+   r,   p_async_statement  s   




r   c                 C   s   | j dkr|  d dkrt| S d }| jdkr |  }|   t| }| jdv r3t| |}| jdv s)|r<tj	||d}| jdkrU|  }|   t
| }t|d||}|S )Nnewr   r?   await)r   [.r   **)rC   peek
p_new_exprr@   rM   rD   p_atom	p_trailerr   ZAwaitExprNoder   rR   )r=   Z	await_posrV   rN   rW   r+   r+   r,   r     s$   




r   c                 C   s,   |   }|   t| }t| tj||dS )N)cppclass)rM   rD   r   p_callr   ZNewExprNode)r=   rN   r   r+   r+   r,   r     s   r   c                 C   sP   |   }| jdkrt| |S | jdkrt| |S |   t| }tj|||dS )Nr   r   obj	attribute)rM   r@   r   p_indexrD   rG   r   AttributeNode)r=   Znode1rN   rF   r+   r+   r,   r     s   



r   Tallow_genexpc           	      C   s  |    g }g }d}d}| jdkr| jdkr/|r!| jd|  d |    |t|  d}nd| jdkrB|    |t|  d}nQt| }| jdkru|    |jsZ| jd	|jd | j	
|j}tj|j|d
}t| }|||f n|r| jd|jd |r|s|d | n||g d}| jdkrn	|    | jdks| jdv r|r|s|st|dkrt|d dkrt| |d d gg}| d |pg g|fS )NFr   r   %Non-keyword arg following keyword argrN   Tr   =z!Expected an identifier before '='valuerH   r   asyncr   r   )rD   r@   r   rM   rI   ra   rq   rp   rN   rA   rB   rF   r   IdentifierStringNodelenp_genexpr`   )	r=   r   positional_argskeyword_argsZstarstar_seenZlast_was_tuple_unpackr   encoded_namekeywordr+   r+   r,   p_call_parse_args(  sZ   





#
r   c                    s  d } fdd|D }t ttj d|}|rg }g }|D ]9}t|tr5|\}	}
|tj|	j|	|
d q|j	r?|
|j q|rQ|tj|d j|dd g }|| q|rg|tj|d j|dd |rt|dkr||d j	r||d }||fS tj |d	}||fS )
Nc                    s2   g | ]}t |trtj |d ntj |dqS )r\   r   )r   listr   	TupleNodeZAsTupleNode.0r   r   r+   r,   
<listcomp>_  s    $z,p_call_build_packed_args.<locals>.<listcomp>r   rN   keyr   r   T)key_value_pairsreject_duplicatesr   )r   )r   r   r   rR   r   tuplerI   DictItemNoderN   is_dict_literalextendr  DictNoder   MergedDictNode)rN   r   r   keyword_dictZ	subtuples	arg_tuplekwargs
dict_itemsitemr  r   r+   r   r,   p_call_build_packed_args[  s<   

r  c                 C   sh   |   }t| \}}|s#t|dkr#t|d tr#tj|||d dS t|||\}}tj||||dS )Nr   r   )functionr\   )r  r   r   )	rM   r   r   r   r  r   ZSimpleCallNoder  ZGeneralCallNode)r=   r  rN   r   r   r  r  r+   r+   r,   r     s   r   c           
      C   s   |   }|   t| \}}|r(t|d dkr(|d \}}tj||||d}nt||}|r4|d }	ntj||d}	tj|||	d}| 	d |S )Nr   r   )basestartstopr   r  index])
rM   rD   p_subscript_listr   r   SliceIndexNodemake_slice_nodesr  	IndexNoder`   )
r=   r  rN   
subscriptsis_single_valuer  r  r   indexesr  r+   r+   r,   r     s"   


r   c                 C   sX   d}t | g}| jdkr(d}|   | jdkr	 ||fS |t |  | jdks||fS )NTrH   Fr  )p_subscriptr@   rD   rI   )r=   r"  itemsr+   r+   r,   r    s   



r  c                 C   sZ   t | d}| jdkr|gS |   t | d}| jdkr||gS |   t | d}|||gS )N)rY   rY   )rY   rH   r  )p_slice_elementr@   rD   )r=   r  r  stepr+   r+   r,   r$    s   





r$  c                 C   s   | j |vr	t| S d S r&   )r@   ra   )r=   Z
follow_setr+   r+   r,   r&    s   
r&  c                 C   s   |  d d S )N...)r`   rx   r+   r+   r,   expect_ellipsis  s   r)  c                 C   sD   g }|D ]}t |dkr||d  q|t| g|R   q|S )Nr   r   )r   rI   make_slice_node)rN   r!  r   	subscriptr+   r+   r,   r    s   r  c                 C   s<   |st | }|st | }|st | }t j| |||dS )N)r  r  r'  )r   NoneNodeZ	SliceNode)rN   r  r  r'  r+   r+   r,   r*    s   


r*  c                 C   sb  |   }| j}|dkr1|   | jdkrtj|g d}n| jdkr&t| }nt| }| d |S |dkr9t| S |dkrAt	| S |dkrIt
| S |dkrVt|  t|S |d	kr^t| S |d
krp| j}|   tj||dS |dkr| jd d }|   tj||dS |dks|dkrt| S |dkrt| }|d u rt| | j}|   |S | d d S )Nr   r   r   yieldr   {`r(  INTFLOATr   IMAGr   BEGIN_STRINGBEGIN_FT_STRINGr?   z!Expected an identifier or literal)rM   r@   rD   r   r  r   p_testlist_compr`   p_list_makerp_dict_or_set_makerp_backquote_exprr)  EllipsisNodep_int_literalrC   	FloatNodeImagNodep_atom_stringp_atom_ident_constantsp_namer   )r=   rN   r@   r   r   r+   r+   r,   r     sN   




r   c                 C   s   |   }t| \}}}|stj|||dS |}|dkr"tj||dS |dkr.tj|||dS |dkr9tj||dS |dkrDtj||dS |dkrOtj||dS | d	| d
 d S )N)r   bytes_valuecr   ubfvaluestzinvalid string kind '')	rM   p_cat_string_literalr   UnicodeNodeCharNode	BytesNodeJoinedStrNodeZTemplateStringNoder   )r=   rN   kindr@  unicode_valueZ	kind_charr+   r+   r,   r=  '  s    r=  c                 C   s|   |   }| j}|dkrt|}n'|dkrtj|dd}n|dkr)tj|dd}n|dkr6| js6t|}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TrueTr   FalseFZNULLN)rM   rC   r   r,  BoolNoder   ZNullNoderD   )r=   rN   rF   r   r+   r+   r,   r>  ?  s   r>  c                 C   s   |   }tt| j}|   d}d}|d dv r4|d dv r$|d7 }n|d7 }|d d }|d dv sd }|r;d}n|rI|dksG| jjd	krId}| jrU|rSt	|d
 d}t
j|||||dS )N r   ZUuLlZLlLUTZLL   z4illegal integer literal syntax in Python source fileF)is_c_literalr   unsignedlongness)rM   cythoncaststrrC   rD   rA   language_levelr   r   r   IntNode)r=   rN   r   rY  rZ  rX  r+   r+   r,   r:  V  s6   
	
r:  c                 C   sH   |   }| js|| jv r| j|}t||}|d ur|S tj||dS )NrF   )rM   compile_time_exprcompile_time_envZlookup_herewrap_compile_time_constantr   NameNode)r=   rF   rN   r   r   r+   r+   r,   r?  w  s   
r?  c                    sb  |d u r	t  S |tu rt  S t|trt j |dS t|tr-t j t	||dS t|t
r<t j t	||dS t|trit j t	|jtd|jd}|jrgt j dt j t	|j|jd||d}|S t|trwt j t|dS t|trt|d}t j ||dS t|tr fdd|D }d |v rd S t j |d	S t d
||jjf  d S )Nr   )r   constant_resultg        r   )re  asciic                    s   g | ]}t  |qS r+   )rc  r  r   r+   r,   r    s    z.wrap_compile_time_constant.<locals>.<listcomp>r   z4Invalid type for compile-time constant: %r (type %s))r   r,  Ellipsisr9  r   boolrS  intr_  reprfloatr;  complexr<  imagrealrR   r]  rJ  r   bytesr   rL  r
  r  r   	__class__r1   )rN   r   r   Zbvaluer\   r+   r   r,   rc    s@   










rc  c                 C   s  |   }t| \}}}|dks| jdkr| jdkr|||fS |g|g|g}}}d  }}| jdks7| jdkr|   }t| \}}	}
|dkrLt|d q-||krw||hddhddhfv r_d}n|dksg|dkrmt|d	 q-t|d
||f  q-||	 ||
 || | jdks7| jdks7|dv s|dkrd |vrtd|| j}|dv rtddd |D }|dkrg }t	||D ]\}}t
|tr||7 }q|tj|t|d q|dkrg }|D ]}|| q|||fS )NrA  r3  r4  zCCannot concatenate char literal with another string or char literalrD  rB  rT  rG  z:cannot mix t-string literals with string or bytes literalszFCannot mix string literals of different types, expected %s'', got %s'')rC  rA  rT      rB  rT  c                 S   s   g | ]}|d ur|qS r&   r+   )r  rB  r+   r+   r,   r        z(p_cat_string_literal.<locals>.<listcomp>r   )rM   p_string_literalr@   r   rI   r   joinsource_encodingr   zipr   r  r   rJ  r  )r=   rN   rN  r@  rO  ZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuerB  r+   r+   r,   rI    sR   








rI  rB  required_typec                 C   s`   | j dkrd S |  }t| |\}}}|dkr#|dkr!| d| |S |dkr)|S | d d S )Nr3  rB  rD  zf-string not allowed hererC  z#internal parser configuration error)r@   rM   rt  r   )r=   rx  rN   rN  r@  rO  r+   r+   r,   p_opt_string_literal  s   
ry  c                 C   s(   t t| }|D ]	}|dkr dS qdS )N   TF)r[  r\  r]  )stringr=   rA  r+   r+   r,   check_for_non_ascii_characters  s   r|  is_rawc           	      C   s   | j }| j}|}| jjdk}|dkr|| |S |dkrC|r8|s1|dks1t|dk s1|d dvr8|| |S d}t||||  |S |d	krN|d
 |S |dkr[| jd|d |S dS )z
    Returns a string of non-escaped characters (if handled) or none.
    If passed an escape sequence returns an empty string.
    rW  ZCHARSESCAPErB  r   r   ZUurT  r!   
r"   zUnclosed string literalr   N)r@   rC   rA   r^  rI   r   _append_escape_sequencer   )	r=   rN   charsrN  r}  r@   Zsystrr   is_python3_sourcer+   r+   r,   p_string_literal_shared_read  s*   
(


r  rC   c                 C   s   | d }t|dkst|dkr|dv r|S t|}t|t|kr*t| d |d t|}t|dkrKt| d|d  d	|d  d
 dS t| d|  dS )Nz"'r   r   Z	rbrurfrtrz!Duplicate string prefix characterrzString prefixes r   z and z cannot be combinedzInvalid string prefix rT  )rstriplowerr   setr   discardsorted)rN   rC   kind_stringZunique_string_prefixesr+   r+   r,   _validate_kind_string  s    

 r  c                 C   s  | j dkr|d u sJ t| S |  }| jjdk}d}t|| j}d|v }d|v r7t|dkr4t|d d}nd|v r>d}n	d	|v rEd	}nd
}|d
kr_|d u r_t	j
| jjv r_t| j}d	}n$|d uri|dv ri|}|dv rrt }n|d
kr}t| j}nt| j}	 |   t| ||||d}	|	d ur|s|rt	j
| jjv rt|	}q| j dkrn| d| j | jf  q|dkrd }
| }t|dkrt|d|  n| \}}
|r|rt	j
| jjv r|dkr| jd|d d }|   |||
fS )Nr4  rW  Fr  rA  r   z+Invalid string prefix for character literalrC  rB  rT  Zub)rB  rD  r}  Z
END_STRINGz(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.r   )r@   p_ft_string_literalrM   rA   r^  r  rC   r   r   r	   unicode_literalsrT   r   ZStrLiteralBuilderrv  UnicodeLiteralBuilderZBytesLiteralBuilderrD   r  r|  ZgetcharZ
getstrings)r=   Zkind_overriderN   r  Z has_non_ascii_literal_charactersr  r}  rN  r  handled_charsrO  r@  r+   r+   r,   rt  $  s|   





rt  c                 C   sD   g }	 |    | j}|dv r|dkr|    d|S || j q)NT)END_FT_STRING_EXPRr"   Nr  rT  )rD   r@   ru  rI   rC   )r=   stringsr@   r+   r+   r,   p_read_ft_string_expressions  s   
r  is_single_quotedtf_string_kindc              	   C   s  g }d  } }}d }d}	|   }
|
d |
d |
d d f}t| }| s1t|
d| d g }n| }tt||
d | | j|d} |  jd7  _| jdkrQ| 	  | jd	krat
| th d
B d}nt| }| jdkrpd}	| 	  | jdkr|   }| 	  | j}|dv rt|   d n0tj|st|   d|  | 	  n|   d |d d krt|   d | 	  n| 	  |	s|dkr|d ur|dd\}}|dkrtj|t| d d}|	r|tj|t|d | jdks| jdkr| 	  | jdks| jdks| jdkrt|   d| d| j  |} | jdkr;|   }t| ||ddd}tj||d}|	rJ|d u rJ|d u rJd}|d urTt|}|dkrh|tj|
||||d |S |tj|
|||d  |S )!NFr   r   r   z empty expression not allowed in z-string)Zparent_scannerrv  Zinitial_posINDENTr-  >   }rY   !)r   r   Tr  )r  rY   rT  zmissing conversion characterz!invalid conversion character '%s'zDf-string: conversion type must come right after the exclamation markrG  )rN   r   r!   DEDENTr"   zUnexpected characters after z-string expression: rY   rD  is_format_stringr  rE  r  )r   conversion_charformat_specZexpression_str)r   r  r  )rM   r  stripr   r   r   rv  Zbracket_nesting_levelr@   rD   r   r   p_testlist_star_exprrC   r   ZFormattedValueNodeZfind_conversion_funcrsplitrJ  r   r   r  rI   p_ft_string_middlesrM  ZTStringInterpolationNode)r=   r}  r  r  r   r  r  rb   Zt_string_expressionZself_documentingZbracket_posZexpr_posZexpr_stringZoriginal_scannerZprevious_pos_rN   Zformat_spec_contentsr+   r+   r,   p_ft_string_replacement_field  s   










	r  r  c                 C   s   g }t  }|  }	 |   | j}t| ||d|d}	|	d ur q
|jr3|tj	||
 d t  }|dkrOt| |||d}
||
 | jdksN| d q
|dkrV	 |S | jdkra|r`	 |S nt|  d	| j| j|f  q)
NTrB  r  r   r.  )r  r  END_FT_STRINGz+Unexpected token %r:%r in %s-string literal)r   r  rM   rD   r@   r  r  rI   r   rJ  Z	getstringr  r  expectedr   rC   )r=   r}  r  r  r  middlesbuilderrN   r@   r  fieldsr+   r+   r,   r    sL   





r  c                 C   sx   t |  | j}d|v rdnd}d|v }| jd}t|dk}t| ||d|d}| jdkr3| | |   |d |fS )	NrG  rD  r  Z
rRbBuUfFtTrW  Fr  r  )	r  rM   rC   lstripr   r  r@   r  rD   )r=   r  r  r}  quotesr  r  r+   r+   r,   r    s   


r  escape_sequencec              	   C   s  t |dk r|d d S |d }|dv r#|t|dd  d d S |dv r.|| d S |dv r<|t| d S |dkrBd S |d	kret |d
krZ|t|dd  d d S |jd| dd d S |dv r| dv rd}|dkrd }zt|dd }t|}W nA t	y   |jdt
|dd d dd Y n'w t |dv rt|dd  d}|dkr|d|  d}n	|jd| dd |dkr||| d S d S || d S )Nr   \r   01234567   z'"\Zabfnrtvr  x      zInvalid hex escape '%s'Frk   ZNUu)rB  rD  rT  r   NrW  z!Unknown Unicode character name %srB  )   
   i zInvalid unicode escape '%s'r   )r   rI   Zappend_charvalri  r   Zchar_from_escape_sequencer   r   ordKeyErrorrj  r  Zappend_uescape)rN  r  r  r=   rA  ZchrvalZucharr+   r+   r,   r  '  sR   

r  c                 C   s   |   }|   | jdkr| d tj|g dS t| }| jdv rJ|jr*| d tj	||d}t
| |}| d tj|||tj| jjdkdS | jdkrY|   t| |}n|g}| d tj||dS )	Nr  r   r   2iterable unpacking cannot be used in comprehensionr   rW  )looprI   typeZhas_local_scoperH   )rM   rD   r@   r`   r   ZListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   Z	list_typerA   r^  %p_namedexpr_test_or_starred_expr_list)r=   rN   rb   rI   r  exprsr+   r+   r,   r6  X  s,   









r6  c                 C   s,   | j dv r
t| |S | j dkrt| |S |S )Nr   rg   )r@   r  	p_comp_if)r=   bodyr+   r+   r,   p_comp_iterw  s
   



r  c                 C   sb   |   }d}| jdkrd}|   | d t| d|d}|jd t| ||d tj|fi |S )NFr   Tr   allow_testlistr   )else_clauser  r   )	rM   r@   rD   r`   p_for_boundsr(   r  r   ForStatNode)r=   r  rN   r   kwr+   r+   r,   r    s   

r  c                 C   s<   |   }|   t| }tj|tj||t| |dgd dS )N	conditionr  
if_clausesr  )rM   rD   rj   r   
IfStatNodeIfClauseNoder  )r=   r  rN   ri   r+   r+   r,   r    s   r  c                 C   s  |   }|   | jdkr|   tj|g dS g }d}d}	 | jdv rc|dkr2| jdkr/dnd	}n|t| jkrI| d
| j|dkrDdndf  |   | jdkrW| d t| }|| d}n;t	| }|dkrt| jdkrrd	nd}|d	kr| 
d |}t	| }tj|j||d}|r|d | n||g d}| jdkr|   | jdkrnnnq| jdv r2t|dkrt|d trt|d dkr|d d }|d	krt|tjsJ t|tj}tj|j|j|jd}	ntj}tj|j|d}	t| |	}
| 
d tj||
|	|dS t|dkr&t|d ts&| d n| 
d tj|g dS | 
d |dkrg }g }|D ]'}t|trQ|| qB|rc|tj|d j|d g }|| qB|rz|tj|d j|d t|dkr|d jr|d S tj||tjdS g }g }|D ]'}t|tr|| q|r|tj|d j|d g }|| q|r|tj|d j|d t|dkr|d jr|d S tj||ddS )Nr  r  r   FTr   r   r   r   r   z%unexpected %sitem found in %s literalr  dictzexpected expression, found '*'rY   )r  r   r   rH   r   )Zkey_exprZ
value_exprr   )r  rI   r  r  r   )r\   r  )r   r	  )rM   rD   r@   r   r  r   r   r   rI   ra   r`   r  rN   r   r  r  r   	dict_typeZDictComprehensionAppendNoder  r   set_typer  r  r  r  ZSetNodeZis_set_literalZMergedSequenceNoder  r  )r=   rN   partstarget_typeZlast_was_simple_itemr  r  r   Zcomprehension_typerI   r  r%  Z	set_itemspartr  r+   r+   r,   r7    s   







%0




r7  c                 C   s   |   }|   t| g}| jdkr"|   |t|  | jdks| d t|dkr2|d }ntj||d}tj	||dS )NrH   r/  r   r   r   r   )
rM   rD   ra   r@   rI   r`   r   r   r  ZBackquoteNode)r=   rN   r\   r   r+   r+   r,   r8    s   




r8  c                 C   P   |d ur|gng }| j tvr&|t|  | j dkr	 |S |   | j tvs|S NrH   )r@   expr_terminatorsrI   ra   rD   r=   rb   r  r+   r+   r,   p_simple_expr_list)     


r  c                 C   r  r  )r@   r  rI   r   rD   r  r+   r+   r,   p_test_or_starred_expr_list4  r  r  c                 C   r  r  )r@   r  rI   r   rD   r  r+   r+   r,   r  ?  r  r  c                 C   >   |   }t| }| jdkr|   t| |}tj||dS |S NrH   r   )rM   ra   r@   rD   r  r   r  r=   rN   rb   r  r+   r+   r,   r   L     

r   c                 C   r  r  )rM   r   r@   rD   r  r   r  r  r+   r+   r,   r  Z  r  r  c                 C   sR   |   }t| }| jdkr|   t| |}tj||dS | jdv r't| |S |S )NrH   r   r   )rM   r   r@   rD   r  r   r  r   r  r+   r+   r,   r5  h  s   



r5  c                 C   s2   t | tj|jtj|j|dd}tj|j|dS )Nr   r   )r  )r  r   r   rN   r   r   ZGeneratorExpressionNode)r=   rb   r  r+   r+   r,   r   v  s   r   )r   r  r  rY   r   r!   r"   c                 C   &   |   }|   t| }tj||dS N)rJ   )rM   rD   rK   r   Z
GlobalNoder=   rN   rJ   r+   r+   r,   p_global_statement  s   r  c                 C   r  r  )rM   rD   rK   r   ZNonlocalNoder  r+   r+   r,   p_nonlocal_statement  s   r  c                 C   s  t | }d}| jdkr|js|js|jrd}|   t| |_| jdkr/|jr/| j	d|j
d |g}| jdkrS|   | jdkrEt| }nt | }|| | jdks7t|dkrtd	| jr|d
 }t|tjr|tj|j
|jt|j
|j|jd}nt|tjtjtjfst	|j
d | jd d }|   | jdkrt| }nt| }tj|j
|||dS |d
 }tj|j
|dS |d }t|dkrtj|j
|d
 ||dS tj|j
|d d |dS )NFrY   Tr   zqa starred assignment target must be in a list or tuple - maybe you meant to use an index assignment: var[0] = ...r   r-  r   z([-+*/%^&|]|<<|>>|\*\*|//|@)=r   r  z&Illegal operand for inplace operation.r   )r   rn   ro   r   r   )rn   ro   first)Zlhs_listro   ) r  r@   rp   Zis_subscriptZis_attributerD   p_annotation
annotationr  r   rN   r   rI   r   r   matchr   r   r  r   r  r*  r  r  r   rd  r   r   ZInPlaceAssignmentNoder   SingleAssignmentNodeZCascadedAssignmentNode)r=   rb   Zhas_annotationZ	expr_listrn   r   ro   r+   r+   r,   p_expression_or_assignment  sR   







r  c                 C   s   |   }d}|   | jdkr&|   t| }| jdkr%|   | jdv }nd }g }| jdvrS|t|  | jdkrS|   | jdv rGd}n|t|  | jdks;tj||d}tj|||| dS )NFr   rH   r!   r"   Tr   )r  streamZappend_newline)	rM   rD   r@   ra   rI   r   r  r   ZPrintStatNode)r=   rN   Zends_with_commar  r\   r  r+   r+   r,   p_print_statement  s4   






r  c                 C   s   |   }|   t| }t|tjr-d}|j}t|dvr,| jdt| |dd |g}nd}|g}| j	dkr[|r@| jddd |   |
t|  | j	d	kr[|   |
t|  tj||d
S )NT)r   rW  z.expected tuple of length 2 or 3, got length %dFr   r   z@tuple variant of exec does not support additional 'in' argumentsrk   rH   r   )rM   rD   r   r   r   r  r\   r   r   r@   rI   ra   r   ZExecStatNode)r=   rN   codeZtuple_variantr\   r+   r+   r,   p_exec_statement  s2   

r  c                 C   r  )Nr   )rM   rD   r  r   ZDelStatNode)r=   rN   r\   r+   r+   r,   p_del_statement  s   r  Fwith_newlinec                 C   s.   |   }| d |r| jddd t|S )NpassExpected a newlineTZignore_semicolon)rM   r`   expect_newliner   PassStatNode)r=   r  rN   r+   r+   r,   p_pass_statement  s
   

r  c                 C      |   }|   t|S r&   )rM   rD   r   ZBreakStatNoder   r+   r+   r,   p_break_statement     
r  c                 C   r  r&   )rM   rD   r   ZContinueStatNoder   r+   r+   r,   p_continue_statement"  r  r  c                 C   s6   |   }|   | jtvrt| }nd }tj||dS )Nr   )rM   rD   r@   r   r   r   ZReturnStatNode)r=   rN   r   r+   r+   r,   p_return_statement*  s   

r  c                 C   s   |   }|   d }d }d }d }| jtvrAt| }| jdkr4|   t| }| jdkr3|   t| }n| jdkrA|   t| }|sG|sG|rQtj|||||dS t|S )NrH   r   )exc_type	exc_valueexc_tbcause)rM   rD   r@   r   ra   r   ZRaiseStatNodeZReraiseStatNode)r=   rN   r  r   r  r  r+   r+   r,   p_raise_statement6  s4   




r  c           
      C   s   |   }| j}|   t| ddg}| jdkr)|   |t| dd | jdksg }tj| jjv }|D ];\}}}}|dkrHt	j
||||d}	n"t	j|tj||pQ|dtj|tj||dt||rcdnd d d	d
}	||	 q4t	j||dS )NT
as_allowedrH   cimport)module_nameas_nameis_absoluter`  r   r   r  Zis_import_as_namer4   imported_namesrm   stats)rM   r@   rD   p_dotted_namerI   r	   absolute_importrA   rT   r   ZCImportStatNoder  r   rd  
ImportNoder   rh  StatListNode)
r=   rN   rN  r%  r  r	  target_namedotted_namer  statr+   r+   r,   p_import_statementT  s>   


	r  first_statementc              	   C   s  |   }|   | jdv r%d}| jdv r$|t| j7 }|   | jdv snd }|d ur<| jdv r<|   | jd}}n|d u rItj| jjv rId}t	| dd\}}}}| jdvr]| 
d | j}|   |dk}d}	| jd	kr|   | jd	d fg}
|   n| jd
krd}	|   t| g}
| jdkr|   |	r| jdkrn|
t|  | jdks|	r| d |dkr|s| 
d n=|r| 
d n5|
D ]2\}}}|dkr| 
d|  n"ztt|}W n ty   | 
d| | Y  n	w | jj| qt|S |rtj||||
dS g }g }|
D ]\}}}|tj||d ||tj||p.|df qtj|tj|tj||dd||d|dS )N)r   r(  r   importr  rT  Fr  zExpected 'import' or 'cimport'r  r   r   TrH   r   
__future__z?from __future__ imports must occur at the beginning of the filezinvalid syntaxZbracesznot a chancez future feature %s is not defined)r  Zrelative_levelr  r   r`  r
  )moduler%  )rM   rD   r@   r   rA   rB   r	   r  rT   r  r   p_imported_namerI   r`   getattrAttributeErroraddr   r  ZFromCImportStatNoder   r   rd  ZFromImportStatNoder  )r=   r  rN   r4   Zdotted_name_posr  r  rN  Z
is_cimportZis_parenthesizedr  name_posrF   r  	directiveZimported_name_stringsr%  r+   r+   r,   p_from_import_statementu  s   













r!  c                 C   s"   |   }t| }t| }|||fS r&   )rM   rG   	p_as_name)r=   rN   rF   r  r+   r+   r,   r    s   
r  r  c                 C   sj   |   }t| }d }|g}| jdkr"|   |t|  | jdks|r(t| }||| jd||fS )Nr   )	rM   rG   r@   rD   rI   r"  rA   rB   ru  )r=   r  rN   r  r  rJ   r+   r+   r,   r    s   

r  c                 C   s(   | j dkr| jdkr|   t| S d S )Nr?   as)r@   rC   rD   rG   rx   r+   r+   r,   r"    s   r"  c                 C   sH   |   }|   t| }| jdkr|   t| }nd }tj|||dS )NrH   )r  r   )rM   rD   ra   r@   r   ZAssertStatNode)r=   rN   Zcondr   r+   r+   r,   p_assert_statement  s   

r$  c                 C   s\   |   }|   t| g}| jdkr"|   |t|  | jdkst| }tj|||dS )Nelifr  )rM   rD   p_if_clauser@   rI   p_else_clauser   r  )r=   rN   r  r  r+   r+   r,   p_if_statement  s   


r(  c                 C   s(   |   }t| }t| }tj|||dS )Nr  )rM   rq   p_suiter   r  )r=   rN   ri   r  r+   r+   r,   r&    s   r&  c                 C   s   | j dkr|   t| S d S )Nrh   )r@   rD   r)  rx   r+   r+   r,   r'  
  s   
r'  c                 C   s:   |   }|   t| }t| }t| }tj||||dS )N)r  r  r  )rM   rD   rq   r)  r'  r   ZWhileStatNode)r=   rN   ri   r  r  r+   r+   r,   p_while_statement  s   r*  r   c                 C   sP   |   }|   t| d|d}t| }t| }|j|||d tj|fi |S )NTr  )r  r  r   )rM   rD   r  r)  r'  r(   r   r  )r=   r   rN   r  r  r  r+   r+   r,   r      s   r   r  c                 C   s  t | }| jdkr|   t| ||d}t||dS | js|s| jdkr-|   t| }n|d }}t| }|  }t	| }|  }	t| }
t| }t
| }|d u rZtj||d}n|jsdt|jd n
||jkrnt|d |d |
d kr{t|	d	 t||||
||d
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+  bound1Z	relation1Z	relation2bound2r'  )p_for_targetr@   rD   p_for_iteratorr  r   r   p_for_from_relationrM   rG   p_for_from_stepr   rd  rp   r   rN   rF   r`   )r=   r  r   r+  r,  r-  Zrel1Z	name2_posZname2Zrel2_posZrel2r.  r'  r+   r+   r,   r  ,  sP   






r  c                 C   s*   | j tv r| j }|   |S | d d S )Nz#Expected one of '<', '<=', '>' '>=')r@   inequality_relationsrD   r   r   r+   r+   r,   r1  Y  s
   
r1  c                 C   s,   | j dkr| jdkr|   t| }|S d S )Nr?   Zby)r@   rC   rD   r   )r=   r'  r+   r+   r,   r2  c  s
   r2  )r   r   r   r   rZ   c                 C   sp   |   }t| }| jdkr6|   |g}| j|kr/|t|  | jdkr&n	|   | j|kstj||dS |S r  )rM   r   r@   rD   rI   r   r  )r=   rZ   rN   rb   r  r+   r+   r,   p_targetq  s   



r4  c                 C   s
   t | dS )Nr   )r4  rx   r+   r+   r,   r/    s   
r/  c                 C   s6   |   }|rt| }nt| }|rtjntj||dS )N)sequence)rM   r   rj   r   ZAsyncIteratorNodeZIteratorNode)r=   r  r   rN   rb   r+   r+   r,   r0    s
   
r0  c                 C   s   |   }|   t| }g }d }| jdv rC| jdkr&|t|  | jdks| jdkr3|   t| }tj||||d}| jdkrC|S | jdkrX|   t| }tj|||dS | 	d d S )N)exceptrh   r6  rh   )r  except_clausesr  finally)r  finally_clausezExpected 'except' or 'finally')
rM   rD   r)  r@   rI   p_except_clauser   ZTryExceptStatNodeZTryFinallyStatNoder   )r=   rN   r  r7  r  r9  r+   r+   r,   p_try_statement  s2   





r;  c                 C   s   |   }|   d }d }d}| jdkrat| }t|tjr!|j}n|g}| jdks9| jdkrB| jdkrB| j	j
dkrB|   t| }n| jdkra| jdkra|   |   }t| }tj||d}d}t| }tj|||||d	S )
NFrY   rH   r?   r#  r   r`  T)patternr+  r  is_except_as)rM   rD   r@   ra   r   r   r  r\   rC   rA   r^  rG   rd  r)  r   ZExceptClauseNode)r=   rN   r  r   r=  pos2rF   r  r+   r+   r,   r:    s2   

r:  c           
      C   s   |   }|   t| dd }| d | jrU|}| j||}|rS| j| t	|}|
 }t||| |j| jd}t||}	W d    |	S 1 sLw   Y  |	S d S t|S )NrB  r   z!Syntax error in include statement)rv  parse_comments)rM   rD   rt  r  compile_time_evalrA   Zfind_include_fileZincluded_filesrI   r   Zget_file_objectr   encodingr?  p_statement_listr   r  )
r=   r.   rN   Zunicode_include_file_nameZinclude_file_nameZinclude_file_pathZsource_descrD  s2treer+   r+   r,   p_include_statement  s&   



rE  c                 C   s0   |    | jdkr| jst| }|S t| }|S )Ntemplate)rD   rC   r   p_with_templater   )r=   r   r+   r+   r,   p_with_statement  s   rH  c           	      C   s   d}d}| j dkr8t|  }|   t| |}| d | j dkr&| d W d   n1 s0w   Y  | }|s?t| |}t| }t|D ]\}}}||fd|i|}qG|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   rY   rT  Nr  )r@   r   rD   p_with_items_listr`   r   r)  reversed)	r=   r   Zbrackets_succeededr%  errorsr  clsrN   r*   r+   r+   r,   r     s$   






r   c                 C   s@   g }	 | t| | | jdkr	 |S |   | jdkr	 |S q)NTrH   r   )rI   p_with_itemr@   rD   )r=   r   r%  r+   r+   r,   rI  	  s   

rI  c                 C   s   |   }| js<| jdkr<| jdv r<|r| d | j}|   d }| jdkr3|   t| }| d tj	|||dfS t| }d }| jdkrT| jdkrT|   t
| }tj||||dfS )	Nr?   )r   gilzwith gil/nogil cannot be asyncr   r   )stater  r#  )managerr+  r   )rM   r   r@   rC   r   rD   ra   r`   r   ZGILStatNoder   ZWithStatNode)r=   r   rN   rO  r  rP  r+  r+   r+   r,   rM  	  s$   


rM  c                 C   s   |   }g }|   | d || j |   | jdkr1|   || j |   | jdks| d | jdkrZ|   | d |   t }||_	t
| ||}|   |S t|d d S )Nr   rH   r  rY   z-Syntax error in template function declaration)rM   rD   r`   rI   rC   r@   r  expect_indentr#   r:   p_c_func_or_var_declarationexpect_dedentr   )r=   rN   r:   body_ctxZfunc_or_varr+   r+   r,   rG  ;	  s,   





rG  c                 C   sD  | j dkrt| }|S | j dkrt| }|S | j dkr!t| }|S | j dkr,t| }|S | j dkr7t| }|S | j dkrBt| }|S | j dkrMt| }|S | j dkrXt| }|S | j d	krct	| }|S | j d
v rnt
| }|S | j dkr{t| |d}|S | j dkrt| }|S | j dkrt| }|S | j dkrt| }|S t| }|S )NglobalnonlocalprintexecdelbreakcontinuerL   raiser  r   r  r-  assertr  )r@   r  r  r  r  r  r  r  r  r  r  r!  r   r$  r  r  )r=   r  r   r+   r+   r,   p_simple_statementU	  sX   










	


r_  c                 C   s   t | |d}|j}g }t|tjs|| | jdkr>|   | jdv r%nt | |d}t|tjr2q|| d}| jdks|sFt|}nt|dkrQ|d }ntj	||d}| jdvrst|tj
rs|jjrs|jjdkrs| d	| | d
 |S )Nr]  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)r_  rN   r   r   r  rI   r@   rD   r   r  r   rb   rp   rF   r   r  )r=   r.   r  r  rN   r  r+   r+   r,   p_simple_statement_listy	  s4   







ra  c                 C   s   | j }d| _ t| }|| _ |S )Nr   )ra  r   )r=   oldrb   r+   r+   r,   p_compile_time_expr	  s
   rc  c                 C   sd   |   }| j}|   t| }| d t| }| jr&||}||| | j	ddd t
|S )Nr   r  Tr  )rM   rb  rD   rG   r`   rc  r@  compile_time_valuedeclarer  r   r  )r=   rN   denvrF   rb   r   r+   r+   r,   p_DEF_statement	  s   


rg  c           	      C   s   |   }| j}|}| j}d }	 |   t| }|ot||| _t| |}| jr-|}d}| jdkr3nq| jdkrI|   || _t| |}|rI|}|sPt	
|}|| _|S )Nr   r   ZELIFELSE)rM   r@  rb  rD   rc  rh  rd  r)  r@   r   r  )	r=   r.   rN   Z
saved_evalZcurrent_evalrf  r   rb   r  r+   r+   r,   p_IF_statement	  s4   





ri  c                 C   s  |j }|  }d }| jdkr|jdvr| d t| |S | jdkr5| jjddr1t	|ddd	 t
| S | jd
krN| jjddrIt	|ddd	 t| |S | jdkr~|jdvr]| d |j| _t| }|js}| jdvr}| jdkrx| jdkrxn| d n| jdkr|rt| ddS d}| jdkrd}|   n| jdkrd}d}|   |r|jdvr| d |j| _t| |||d}|d urtjtjtjf}|jr|tjtjf7 }t||s| d ||_|S |jr| jddd d S | jdkrd|jv r|jd kr| d! |j| _t| |S | jd"kr'|jd#vr"| d$ t| |S | jd%kr=|jdvr8| d& t| |S |jd'krS| jdkrS| jd(krSt| S | jdkre|jd(kret| ddS |jd)v r{t| }|d urv|S | d* | jd+krt | S | jd,krt!| S | jd-krt"| S | jd.krt#| S | jd/krt$| S | jdkr|   t%| ||S | jdkr| jdkr| j}	|  }
|   | jdkrt%| ||S |r| d | &d|	|
 | jdkr| jd0krt'| |}|d ur|S t(| ||d1S )2Nctypedefr  
module_pxdz#ctypedef statement not allowed hereZ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   rz   Z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  propertyrl  c_class_pxdr$   zdecorator not allowed here)r   r`  cpdefrm  r   r?   r   r   r  )r  r`  rq  )r  rl  r  rn  rp  zcdef statement not allowed here)r8   %'api' not allowed with this statementrk   r   r   rp  r   rm  )r  r  rm  r$   z!class definition not allowed hereincludez"include statement not allowed herern  ro  )rp  ro  z%Executable statement not allowed hererg   whiler   tryr   r  r]  ))r6   rM   r@   r4   r   p_ctypedef_statementrA   Zcompiler_directivesgetr   rg  ri  p_decoratorsr;   rC   r  rD   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r   r   r   p_class_statementrE  p_property_declp_ignorable_statementr(  r*  r   r;  rH  r   put_backp_match_statementra  )r=   r.   r  r6   rN   r   r8   r   tupZ
ident_nameZ	ident_posZmatch_statementr+   r+   r,   p_statement	  s   























$




r  c                 C   sz   |   }g }| jdvr%t| ||d}t|tjrq|| d}| jdvs|s,t|S t|dkr6|d S tj||dS )Nr  r"   r]  Fr   r   r  )	rM   r@   r  r   r   r  rI   r   r  )r=   r.   r  rN   r  r  r+   r+   r,   rB  N
  s   



rB  c                 C   s   t | |ddd S )NFwith_doc_onlyr   )p_suite_with_docstringr=   r.   r+   r+   r,   r)  a
  s   r)  r  c                 C   s   |  d d }| jdkr$|   |   |rt| }t| |}|   n |jr.| jddd |j	dv r9t
| |}nt| }| jddd	 |sLt|\}}||fS )
NrY   r!   rr  Frk   )r  rm  r  r$   zSyntax error in declarationsTr  )r`   r@   rD   rQ  p_doc_stringrB  rS  r   r   r4   ra  r  r  _extract_docstring)r=   r.   r  docr  r+   r+   r,   r  f
  s$   




r  c                 C   s  g }g }d}| j |vr| j dks| j dkr| jddd d}| j dkrh|  d dkrh| j}|   |   t| r?t| }nt| |d	}	t| d
d}
t	j
|	j|	|
d}d
}tj|j|d}|||f d
}n7t| rqt| }nt| |d	}	t| d
d}
t	j
|	j|	|
d}d
}|| |d7 }t|dkr| jd|jd | j dkr| j |vr|r| dd|  	 ||fS |   | j |vs||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.Frk   r?   r   r:   Tr   r   r   r   r   r   rH   zUnmatched %sz or )r@   r   r   rC   rD   r   ra   r   r   r   CComplexBaseTypeNoderN   r   r   rI   r   ru  )r=   Z
end_sy_setr:   r   r   Zpos_idxZparsed_typeidentr   r   r   Zkeyword_nodeZwas_keywordr+   r+   r,   p_positional_and_keyword_args~
  sZ   	






*r  nonemptyc                 C   s$   | j dkrt| |dS t| ||dS )Nr   r  r  r:   )r@   p_c_complex_base_typep_c_simple_base_type)r=   r  r:   r+   r+   r,   r   
  s   
r   c                 C   s.   | j dkr| jtv r| j}|   |S tdS )Nr?   rT  )r@   rC   calling_convention_wordsrD   r   )r=   r   r+   r+   r,   p_calling_convention
  s
   r  )Z	__stdcallZ__cdeclZ
__fastcallc                 C   s   |   }|   t| |d}t| dd}tj|||d}| jdkrV|g}| jdkrO|   | jdkr3nt| |d}t| dd}|tj|||d | jdks)tj||d}| 	d | jdkrqt
| rkt| |}|S t| ||}|S )	Nr  Tr   r   rH   r   )
componentsr   )rM   rD   r   r   r   r  r@   rI   r   r`   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)r=   r:   rN   r   r   	type_noder  r+   r+   r,   r  
  s6   






r  c              
   C   s  d}d}d}d}g }|   }d }	}
| jdkr?| jdkr&|	r#t|d d}	n| jdkr5|
r2t|d	 d}
nn	|   | jdks|	sC|
rft| ||d
}t|tjr]tj	||j
|	|
d|_
|S tj	|||	|
dS | jdkrst|d| j  t| rd}| jdkr| jtv rt| j \}}| j}|   nt| \}}| jdkr| jtv r| j}|   nd}| jdkr| jdkrd}|   nt| r| j}|   | jdkr|| |   t| }| jdksnh| j}|   }|   |rH| jdkrH| jdkr9|   }|   | jdks | jdks | jdks | jdkr(| jtv r(| dd| n | dd| | d|| d }n| jdvrH| d|| d }tj||||||||d}| jdkrlt| rft| |}nt| ||}| jdkr|   t| }tj|||d}|S )NFr   r   r?   constzDuplicate 'const'TZvolatilezDuplicate 'volatile'r  )r   is_constis_volatilez"Expected an identifier, found '%s'ri  rl  r   r   r   r   r   )r   r   r   r   )rF   module_pathis_basic_c_typesignedrl  rZ  r:   r   )r   rF   )rM   r@   rC   r   rD   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_namerI   rG   r  r  CSimpleBaseTypeNoder  r  r  ZCNestedBaseTypeNode)r=   r  r:   Zis_basicr  rZ  rl  r  rN   r  r  r   rF   r  Zold_posr  r+   r+   r,   r  
  s   










$
r  c                 C   sn   |   }|   t| d|\}}| d | jdkr t| ||}tj|dd |D d}tj	||||d}|S )N)r  r  r   c                 S   s"   g | ]\}}t j|j||d qS )r  )r   r  rN   )r  r  r   r+   r+   r,   r  _  s    z(p_buffer_or_template.<locals>.<listcomp>r  )r   r   r   )
rM   rD   r  r`   r@   r  r   r  r   r   )r=   r   r:   rN   r   r   r  r   r+   r+   r,   r  O  s$   


r  c                 C   s   | j | j|  fg}|   d}| jdkrd}n| j dkr4|| j | j|  f |   | j dkr4d}|d d d D ]}| j|  q;|S )NFrY   Tr0  r   )r@   rC   rM   rD   rI   r  )r=   savedretvalsvr+   r+   r,   r  j  s   


r  c                 C   sd   |   }|   t| \}}|D ]}t|dk r| d q| d t||}tj|||d}|S )Nr   zDAn axis specification in memoryview declaration does not have a ':'.r  )r   Zaxes)	rM   rD   r  r   r   r`   r  r   r   )r=   r   rN   r!  r  r+  r#  r   r+   r+   r,   r    s   


r  c                 C   s   | j dko	| jtvS r>   )r@   rC   r  rx   r+   r+   r,   looking_at_name  s   r  c                 C   sr  | j tv rdS | jdkrd}| j }|  }g }|   | jdkr8|   || j |  f | d | jdks | j| j |  f}| jdkrId}nE| jdksS| jdkrb|   | jdv }| j|  n,| jdkrv|   | jdk}| j|  n| jd	kr|   | jd
kpt|  }| j|  |	  |D ]}| jdg|R   | dd|d  q| d|| | o|d S dS )NFr?   r   Tr   r   )r   r  r   r   r  r   r   )
rC   base_type_start_wordsr@   rM   rD   rI   r`   r  r   reverse)r=   is_typerF   r  dotted_pathr  pr+   r+   r,   r     sF   










r   c                 C   s   | j dko	| jtv S r>   )r@   rC   r  rx   r+   r+   r,   r    s   r  c                 C   s@   | j dkr| j}|  }|   | j dk}| d|| |S dS )Nr?   r   F)r@   rC   rM   rD   r  )r=   rF   r  r   r+   r+   r,   r    s   

r  )voidcharri  rk  doublebint)r   r   )r   r   )r   r   )Z
Py_UNICODEPy_UCS4Z	Py_hash_tZ
Py_ssize_tZssize_tZsize_tZ	ptrdiff_tZPy_tss_t)shortlongr  rY  )structunionenumpackedc                 C   s   d}d}| j dkr=| jtv r=| jdkrd}n| jdkrd}n| jdkr&d}n	| jd	kr/|d7 }|   | j dkr=| jtv s||fS )
Nr   r   r?   rY  r  r   r  r   r  )r@   rC   sign_and_longness_wordsrD   )r=   r  rZ  r+   r+   r,   r    s   




r  c                 C   s.   t | d}|d urt|}| j|_|S d }|S )NrB  )ry  r   rv  rA  )r=   literalcnamer+   r+   r,   p_opt_cname  s   
r  r   r  cmethod_flag
assignablecalling_convention_allowedc              	   C   s  |   }| jdkr<|   | jdkst| r+tj|| jdd d}	t| |||	|}
nt	| |||||dd}
| 
d n
t| ||||||}
|sZ|
jrZ| jdkrZt|   d|
j  | jdv r|   }| jd	krnt| |
}
n|   t| |||
|}
d
}| jdv s_|
S )Nr   r   rT  )rF   r  T)r   r  r  r  r  z&%s on something that is not a functionr   r   r   r   )rM   r@   rD   r  r   CNameDeclaratorNoderA   rB   p_c_func_declaratorr   r`   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)r=   r.   r   r  r  r  r  r  rN   r  r   r+   r+   r,   r     s8   	





r   c                 C   sB   |   }|   | jdkrt| }nd }| d tj|||dS )Nr  )r  	dimension)rM   rD   r@   r   r`   r   ZCArrayDeclaratorNode)r=   r  rN   dimr+   r+   r,   r  4  s   


r  c                 C   s   t | ||dd}t| }| d t| }t| |jdk\}}	}
|r-|
r-t|  ddd |p2t| }t| }t	j
||||||	|pE|jpE|||
d	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   rz   )r  r\   Zhas_varargsZexception_valueZexception_checkr   with_gilZhas_explicit_exc_clause)p_c_arg_listp_optional_ellipsisr`   p_nogilp_exception_value_clauser5   r   rM   
p_with_gilr   ZCFuncDeclaratorNoder   )r=   rN   r.   r  r  r\   ellipsisr   exc_val	exc_check
exc_clauser  r+   r+   r,   r  @  s(   
r  )r   r   r   rQ   r   z++z--r   r   r   r   r   r   rH   r   r   r   r   r   r   []()r  r   rh  c              	   C   s  |   }t| }| jdv rP| jdk}	|   |   }
| jdko#| jdk}|r*|   t| ||||||d}|r>tj|
|d}|	rGtj||d}tj||d}n| jdks^| jdkr| j	j
r| jdkrftjntj}|   t| ||||||d}|||d}nd }| jdkr| j}|rt|   d	 |   t| }|d
kr| jdkr|r|   t| }n|rt|   d d}d }|d u r|jd ur|r|jd | }|d
krY|jdkrY|rY| j}dd |D r9|   |dkr| d d}n0|dkr| d d}n#|dv r| j|kr|d9 }|   n| jdkr&|| j7 }|   |tvr4| jd| dd ||7 }n |dkrY| j}|tvrO| jd| dd |d | }|   tj||||d}||_|S )Nr  r   r  r?   )r   r  r  r  r  )r  r   rt   zDeclarator should be emptyr   r   zEmpty declaratorrT  ::r  c                 S   s   g | ]}|d v rdqS )z+-*/<=>!%&|([^~,r   r+   )r  rA  r+   r+   r,   r    rs  z)p_c_simple_declarator.<locals>.<listcomp>r   r   r  r   r  r  )r   r   r   r   r   z,Overloading operator '%s' not yet supported.Frk    )rF   r  default)rM   r  r@   rD   rC   r   r   ZCConstDeclaratorNodeZCPtrDeclaratorNoderA   cppZ CppRvalueReferenceDeclaratorNodeZCReferenceDeclaratorNoder   r  ra   r9   r5   r`   supported_overloaded_operatorsr  r  )r=   r.   r   r  r  r  r  rN   r  Z	is_ptrptrZ	const_posr  r  r   Z
node_classro   rF   r  rO   r+   r+   r,   r  c  s   















r  c                 C   $   | j dkr| jdkr|   dS dS )Nr?   r   TFr@   rC   rD   rx   r+   r+   r,   r       r  c                 C   s$   | j dkr|   | d dS dS )Nr   rN  TF)r@   rD   Zexpect_keywordrx   r+   r+   r,   r    s
   

r  	is_externc                 C   s.  d}d}|rdnd}| j dkr| jdkrd}|   d}nu| j dkrd}|   | j dkr4d}|   n^| j dkrd}|  d	 }|   | j dkrm| j}|d
krc|  d	 |d krbt|  d n/t| |}|   n%| j dkrtj|  dd}|   n| j dkrd}|   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.
    FNTr?   Znoexceptr6  r   r   r   r   r   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r   r   )	r@   rC   rD   rM   r   r?  r   rK  ra   )r=   r  r  r  r  Zplus_char_posrF   r+   r+   r,   r    sJ   










r  )r   r   r(  r   rY   rQ   	in_pyfuncr  kw_onlyr[   c           	      C   sX   g }|}| j tvr*|t| ||||||d | j dkr	 |S |   d}| j tvs	|S )N)r  r  r[   rH   r   )r@   c_arg_list_terminatorsrI   p_c_arg_declrD   )	r=   r.   r  r  r  r  r[   r\   is_self_argr+   r+   r,   r    s   


r  c                 C   s   | j dkrt|  dS dS )Nr(  TF)r@   r)  rx   r+   r+   r,   r  &  s   
r  c                 C   sX  |   }d }}	d }
d }| jrtj|d g dddd|d d	}nt| |d}t| ||d}| jdv r_| js_| j}|   | jdkrI| jdkrI|   n| 	d |sWt	|d	|  |d
k}	|dk}|rn| jdkrn|   t
| }| jdkr|   d|jv r| jdv rt|}
|   nd|jv rt| }
n
t	|d nt| }
tj|||||	|
||dS )NFr   )rF   r  r  r  rl  rZ  r  r:   r  )r|   rr   r?   rP  zExpected 'None'z*'%s None' only allowed in Python functionsrr   r|   rY   r   r   )r   r   r   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  r  r  )rM   r   r   r  r   r   r@   rD   rC   r   r  r4   r   r,  	modifiersra   ZCArgDeclNode)r=   r.   r  r  r  r  r[   rN   r  r  r  r  r   r   rN  r+   r+   r,   r  /  sZ   








r  c                 C   s   |   }t| }tj||d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   )rM   ra   r   ZAnnotationNode)r=   rN   rb   r+   r+   r,   r  f  s   r  c                 C   r  )Nr?   r   TFr  rx   r+   r+   r,   p_apis  r  r  c                 C   s  t | |j|_|jpt| |_|jr|jdvrt|d|j  |jdkr/| jdkr/t| ||S | jdkr>|   t| ||S t| rRd|_	|j
rMt|d t| |S | jdkrd|j
r_t|d t| |S | jd	kr|jd
vrst|d |j
r{t|d t| ||S | jdkr| jdkrt| ||S | jdkr| jtv r|jd
vrt|d |j
r| jdkrt|d t| ||S | jdkr| jdkrt| ||S t| ||S )N)r%   publiczCannot combine 'api' with '%s'r  r   r  Tz$cdef blocks cannot be declared cpdefrY   rm  rk  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefr?   r   z/C struct/union/enum definition not allowed herer  z'C struct/union cannot be declared cpdeffused)p_visibilityr5   r   r  r   r@   p_cdef_extern_blockrD   r  r   r8   p_cdef_blockr4   p_c_class_definitionrC   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionrR  r=   rN   r.   r+   r+   r,   ry  |  sJ   














ry  c                 C   s   t | |ddS )NT)r6   )r)  r  r+   r+   r,   r    s   r  c                 C   s   |j rt|d d }| d | jdkr|   nt| dd }|ddd}| jd	kr7|   t| dd |_t| r>d|_	t
| |d\}}tj|||||jd
S )Nz+cdef extern blocks cannot be declared cpdefr   r   rB  r   Tr  )r6   r5   r9   )include_fileverbatim_includer  r9   )r8   r   r`   r@   rD   rt  rC   r9   r  r   r  r   ZCDefExternNode)r=   rN   r.   r  r  r  r+   r+   r,   r    s(   




r  c           	      C   s  |    d}| jjr| jdks| jdkr| jdkrd}|    | jdkr@| j}|    t| }|d u r?|jd ur?|jd | }nd  }}|rK| d |r`| jdkr`|    t| }| 	d	 nt
j|d
g ddddd}| 	d g }d }| jdkrt| || n |    |   t| }| jdvrt| || | jdvs|   |s|jdkrt|d t
j|||||||j|j|j|j|jdk|dS )NFrm  r?   r  Tr  zUnnamed scoped enum not allowedr   r   ri  r   r   )rF   r  r  r  rl  rZ  rY   r!   r  r  zDEmpty enum definition not allowed outside a 'cdef extern from' blockrl  )rF   r  scopedr%  underlying_typer7   r5   Zcreate_wrapperr   in_pxdr  )rD   rA   r  r@   rC   r  r9   r   r   r`   r   r  p_c_enum_linerQ  r  rS  r5   r~  r7   r8   r   r4   )	r=   rN   r.   r  rF   r  r  r%  r  r+   r+   r,   p_c_enum_definition  sd   &







r  r%  c                 C   sb   | j dkr&t| || | j dkr%|   | j dv rnt| || | j dksn|   | d d S )Nr  rH   r  zSyntax error in enum item list)r@   p_c_enum_itemrD   r  )r=   r.   r%  r+   r+   r,   r    s   



r  c                 C   sr   |   }t| }t| }|d u r|jd ur|jd | }d }| jdkr+|   t| }|tj	||||d d S )Nr  r   )rF   r  r   )
rM   rG   r  r9   r@   rD   ra   rI   r   ZCEnumDefItemNode)r=   r.   r%  rN   rF   r  r   r+   r+   r,   r    s   

r  c           	      C   sn  d}| j dkrd}|   | jdks| j dkr| d | j }|   t| }t| }|d u r;|jd ur;|jd | }d }| jdkr|   g }| jdkrY|   | jd	dd
 n7| d | 	  t
|jd}| jdkr| jdkr~|t| |  | n	|   | d	 | jdksm|   |s|jdkrt|d n| d tj||||||j|j|j|jdk|d
S )NFr  Tr?   r  r  rY   r  r  r  r!   )r5   r  r  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionrl  )	rF   r  rN  
attributesr7   r5   r   r  r  )rC   rD   r@   r  rG   r  r9   r  r`   rQ  r#   r5   rI   rR  rM   rS  r   r   r}  r7   r   r4   )	r=   rN   r.   r  rN  rF   r  r   rT  r+   r+   r,   p_c_struct_or_union_definition#  sP   










r  c                 C   s   |j dvr
t|d |   t| }| d |   |   g }| jdkr@| jdkr3|t	|  n|   |   | jdks&| 
  |sKt|d tj|||dS )z5
    c(type)def fused my_fused_type:
        ...
    rk  z&Fused type definition not allowed hererY   r  r  zNeed at least one type)rF   types)r4   r   rD   rG   r`   r  rQ  r@   rI   r   rS  r   ZFusedTypeNode)r=   rN   r.   rF   r  r+   r+   r,   r  Q  s$   





	
r  c                 C   s"   | j dkrt| ||S t| ||S )Nr  )rC   r  r  r  r+   r+   r,   r  u  s   
r  c                 C   sP   |}| j dkr&| jdv r&| j}|dkr"||kr"| jd||f dd |   |S )Nr?   )r  r  readonlyr%   z,Conflicting visibility options '%s' and '%s'Frk   )r@   rC   r   rD   )r=   Zprev_visibilityr5   r+   r+   r,   r  }  s   r  c                 C   s4   | j dkr| jdv r| j}|   |gt|  S g S )Nr?   )r   )r@   rC   rD   p_c_modifiers)r=   modifierr+   r+   r,   r    s
   r  c                 C   s  |j dv }t| }t| d|jd}t| ||d|ddd}|j|_| jdkr7| jdkr7|j dkr7|   d}nd	}| jd
krM| j	dd	d |   t
|  | jdkr}|j dvr_|js_| 	d t| tdd\}}	tj||j|||	|||j|j|d
}
|
S |r||_|g}| jdkr|   | jdkrnt| ||ddd}|| | jdks| jd }| jddd |j dv r| j|krt| }nd }tj||j|||j dv ||j||jd	}
|
S )N)rn  rp  Tr  )r  )r  r  r  r?   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.rk   rY   )r  rn  rl  rp  r  z&C function definition not allowed herer  rz   )	r5   r   r   r  r  r  r   r8   is_const_methodrH   r!   r   z&Syntax error in C variable declarationr  )rl  rp  )r5   r   declaratorsr  r  r   r  r8   )r4   r  r   r:   r   r8   r@   rC   rD   r   ra   r  r#   r   rz  r5   r   r  rI   
start_liner  r  r{  )r=   rN   r.   r  r  r   r   r  r  Zsuiter   r	  Zdoc_liner+   r+   r,   rR    s|   



&





	rR  c                 C   s   |   }|   t| |j}t| }|d|d}|rd|_| jdkr(t| ||S | jdkr8| jt	v r8t
| ||S | jdkrH| jdkrHt| ||S t| dd}t| |ddd}| jddd	 tj||||||jd
kdS )NT)r7   r5   rm  r?   r  r  )r  r  z"Syntax error in ctypedef statementr  rl  )r   r   r5   r   r  )rM   rD   r  r5   r  r   r@   r  rC   r  r  r  r   r   r  r   ZCTypeDefNoder4   )r=   r.   rN   r5   r   r   r   r+   r+   r,   rv    s,   
rv  c                 C   sR   g }| j dkr'|  }|   t| }|tj||d | d | j dks|S )Nr   )	decoratorz"Expected a newline after decorator)r@   rM   rD   rq   rI   r   ZDecoratorNoder  )r=   r   rN   r  r+   r+   r,   rx    s   


rx  c                 C   s0   | j dkr|tv r| jd| dd t| S |S )zqStep over incorrectly placed cdef modifiers (@see _CDEF_MODIFIERS) to provide a good error message for them.
    r?   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.Frk   )r@   r   r   rG   )r=   rF   r+   r+   r,   _reject_cdef_modifier_in_py  s   r  r   r   c                 C   s   |r|d j n|  }|r|   |   t| t| }| dd| jdkr(| jn| j  t	| dd\}}}| d t| | j d }| jdkrV|   t
| }t| | j t| tdd	\}	}
|rf|   tj||||||	|
|||d

S )Nr   r   z~Expected '(', found '%s'. Did you use cdef syntax in a Python declaration? Use decorators and Python type annotations instead.r?   r   )rZ   r  r  rz   )	rF   r\   r]   r^   r  r  r   r   return_type_annotation)rN   rM   Zenter_asyncrD   r  rG   r`   r@   rC   r_   r  r  r#   Z
exit_asyncr   ZDefNode)r=   r   r   rN   rF   r\   r]   r^   r  r  r  r+   r+   r,   r   	  s6   


r   r   c              	   C   s0  t | dd|d}d }d }| jdkrGt|dkr| d |   |D ]}d|_q"| jdkr=|   |t | dd|d n
| j|krG| d | jd	kr{|   | jd
kr[t| |d}| jdkrq|   |t | ddd|d n
| j|kr{| d | jdkr|   t| |d}| jdkr|   |||fS )NT)r  r  r[   rQ   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'r   rH   z-Syntax error in Python function argument listr   r?   )r[   )r  r  r  r[   r   )r  r@   r   r   rD   Zpos_onlyr  p_py_arg_decl)r=   rZ   r[   r\   r]   r^   r   r+   r+   r,   r_   *  sF   















r_   c                 C   sB   |   }t| }d }|r| jdkr|   t| }tj|||dS )NrY   )rF   r  )rM   rG   r@   rD   r  r   ZPyArgDeclNode)r=   r[   rN   rF   r  r+   r+   r,   r  P  s   r  c           
   
   C   s   |   }|   tt| }| j|_d }d }| jdkr+t| dd\}}t|||\}}|d u r6t	j
|g d}t| tdd\}}	tj||||||	|| jjdkdS )	Nr   Fr   r   rm  rz   rW  )rF   basesr   r  r  r   Zforce_py3_semantics)rM   rD   r   rG   rv  rA  r@   r   r  r   r  r  r#   r   ZPyClassDefNoderA   r^  )
r=   r   rN   
class_namer  r  r   r   r  r  r+   r+   r,   r  [  s&   

r  c                 C   s(  |    g }t| }| jdkr!|    || t| }| jdks|r-|jdkr-t|d |rB| jdkrB| jdkrB|    t| }n|}d }d }d }d }	| jdkrht| dd\}
}|r`| d	 t||
|\}}|d u rst	j
|g d
}| jdkr|jdvr|jst|  d t| \}}}	| jdkr|jdkrd}nd}t| t|d\}}n	| d d }d }|jdkr|st|d |rt|d n3|jdkr|st|d |st|d n|jdkr|jr|st|d |st|d nt|d|j  tj||j|j|jd|||||||	|jdk||dS )Nr   r  z6Qualified class name only allowed for 'extern' C classr?   r#  r   Fr  z$C classes cannot take keyword bases.r   r   )r  r  zBName options only allowed for 'public', 'api', or 'extern' C classrY   rl  rp  rn  rz   z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classr  z>Object struct name specification required for 'public' C classz<Type object name specification required for 'public' C classr%   z;Object struct name specification required for 'api' C classz9Type object name specification required for 'api' C classzInvalid class visibility '%s')r5   r7   r   r  r  r  r  objstruct_nametypeobj_name
check_sizer  r  r  )rD   rG   r@   rI   r5   r   rC   r   r  r   r  r   rM   p_c_class_optionsr4   r  r#   r  r   r|  r7   ru  )r=   rN   r.   r  r  r  r  r  r  r  r   r   r  Z
body_levelr  r  r+   r+   r,   r  s  s   



















r  c                 C   s   d }d }d }|  d 	 | jdkrn?| jdkr |   t| }n&| jdkr.|   t| }n| jdkrF|   t| }|dvrF| d|  | jd	krLn|   q|  d
d |||fS )Nr   r   r?   objectr  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrH   r  z)Expected 'object', 'type' or 'check_size')r`   r@   rC   rD   rG   r   )r=   r  r  r  r+   r+   r,   r    s0   








r  c                 C   sB   |   }|   t| }t| tdddd\}}tj||||dS )Nro  rz   Tr  )rF   r  r  )rM   rD   rG   r  r#   r   ZPropertyNode)r=   rN   rF   r  r  r+   r+   r,   r    s   
r  c                 C   s:   | j dkr|  }t| }| jddd tj||dS dS )zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    r3  zSyntax error in stringTr  r   N)r@   rM   r   r  r   r   )r=   rN   Zstring_noder+   r+   r,   r    s   
r  c                 C   sL   | j dkr$|  }t| \}}}| jddd |dv r|S t|d |S d S )Nr3  zSyntax error in doc stringTr  rr  2Python 3 requires docstrings to be unicode strings)r@   rM   rI  r  r   )r=   rN   rN  Zbytes_resultZunicode_resultr+   r+   r,   r    s   

r  c                 C   s   d}| du rn8t | tjr| jjr| j}tj| jg d} n"t | tjr?| jr?| j}t |d tjr?|d jjr?|d j}|d= |du rId}|| fS t |tj	r\t
| jd |j}|| fS |j}|| fS )z
    Extract a docstring from a statement or from the first statement
    in a list.  Remove the statement if found.  Return a tuple
    (plain-docstring or None, node).
    Nr  r   r  )r   r   r   rb   Zis_string_literalr  rN   r  r   rL  r   r   )r   Zdoc_noder  r  r+   r+   r,   r     s2   
r  c                 C   s@   t | ||ddd}| jdkr| dt| jt| jf  |S )Nrz   Tr]  r"   !Syntax error in statement [%s,%s])rB  r@   r   rj  rC   )r=   r4   r.   r  r+   r+   r,   p_code   s   
r  z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c              
   C   sZ  i }| j dkr|  }t| j}|r|d }z	tj|dd}W n  tyB } z| j	|j
d dd |   W Y d }~qd }~ww |D ]A}||vrLqEtj|tu re||  || 7  < || ||< qE|| || krvt|d|f  qE| j	d	||| || f |d
 qEd|v r| j|d  d|v r|d | j_|| |   | j dks|S )NZcommentliner   T)Zignore_unknownr   Frk   zDuplicate directive found: %sz@Conflicting settings found for top-level directive %s: %r and %rr   r^  legacy_implicit_noexcept)r@   rM   !_match_compiler_directive_commentrC   groupr  r
   Zparse_directive_list
ValueErrorr   r\   rD   Zdirective_typesrw  r  r   rA   set_language_levelr  r(   )r=   r   rN   mZdirectives_stringZnew_directiveserF   r+   r+   r,   p_compiler_directive_comments-  sF   



"r#  c           	      C   s   |   }t| }d| _| jjd u r| jd |rdnd}t| }t| ||ddd}| jdkr?| 	d	t
| jt
| jf  t|||||d
S )NF3rl  r  rz   Tr]  r"   r  )r  r  full_module_namedirective_comments)rM   r#  r?  rA   r^  r   r  rB  r@   r   rj  rC   r   )	r=   r   r%  r.   rN   r&  r4   r  r  r+   r+   r,   p_moduleU  s    
r'  c                 C   s>   t | }| jdkr| d | d d}||fS d}||fS )Nr   r   FT)rG   r@   r`   )r=   rF   requiredr+   r+   r,   p_template_definitionj  s   


r)  c              
   C   s  |    t| }t| }|d u r|jd ur|jd | }| jdkr&t|d | jdkrV|    t| g}| jdkrI|    |t|  | jdks9| d dd |D }nd }d }| jd	kr|    t	| |d
g}| jdkr|    |t	| |d
 | jdkso| d ng }| jdkrt| 
 d t| }| jdkr|    | d |   t|  g }	t|jd|p|jd}
||
_| jdkr| jdkr|	t| |
 n	|    | d | jdks|   nd }	| d tj|||||j|jdk|	|dS )Nr  r   z*Qualified class name not allowed C++ classr   rH   r  c                 S   s   g | ]\}}|qS r+   r+   )r  rF   r(  r+   r+   r,   r        z*p_cpp_class_definition.<locals>.<listcomp>r   r  r   z&Name options not allowed for C++ classrY   r!   r  )r5   r4   r   r  r  r  z$Syntax error in C++ class definitionrl  )rF   r  base_classesr5   r  r   r:   )rD   rG   r  r9   r@   r   r)  rI   r`   r   rM   r  rQ  r  r#   r5   r   r:   p_cpp_class_attributer  rS  r   ZCppClassNoder4   )r=   rN   r.   r  r  r:   Ztemplate_namesr+  r   r   rT  r+   r+   r,   r  v  sp   


















r  c                 C   s   |   }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r9t| ||S t| ||S t| ||}|d urit	j
t	jt	jf}|jr\|t	jt	jf7 }t||sf| d ||_|S )Nr   r   rj  r?   r  r   )rM   r@   rx  rC   r  rv  r  r  rR  r   rz  r{  r|  r;   r}  r~  r   r   r   )r=   r.   rN   r   r   r  r+   r+   r,   r,    s*   






r,  c                 C   s  | j dkr
| jdksJ |  }t| E}|   t| }d }| j dkr'|g}| j dkrB|   | j dkr6n|t|  | j dks,|d urMtj	||d}| 
d W d    n1 s\w   Y  |red S |   |   g }| j dkr|t| | | j dkst|   tj|||dS )Nr?   r  rH   rY   r   r  )subjectcases)r@   rC   rM   r   rD   rq   rI   ra   r   r  r`   r  rQ  p_case_blockrS  r   Z	MatchNode)r=   r.   rN   rK  r-  Zsubjectsr.  r+   r+   r,   r    s8   






r  c                 C   sp   | j dkr
| jdks| d |   |  }t| }d }| j dkr*|   t| }t| |}tj	||||dS )Nr?   caserg   )r<  r  guard)
r@   rC   r  rD   rM   
p_patternsra   r)  r   ZMatchCaseNode)r=   r.   rN   r<  r1  r  r+   r+   r,   r/    s   


r/  c                 C   s   g }d}|   }	 t| }t| }W d    n1 sw   Y  |r7|r&n*|d }| j|jd |jd d || | jdkrNd}|   | jdv rMnnnq	|rYtj	||dS |d S )	NFTr   r   r   rH   )rY   rg   patterns)
rM   r   p_maybe_star_patternr   r\   rI   r@   rD   r   MatchSequencePatternNode)r=   r4  seqrN   rK  r<  r"  r+   r+   r,   r2    s0   




r2  c                 C   sV   | j dkr%|   d }| jdkrt| }n|   tj|  |dd}|S t| }|S )Nr   r  T)r+  Zis_star)r@   rD   rC   p_pattern_capture_targetr   MatchAndAssignPatternNoderM   	p_pattern)r=   r+  r<  r+   r+   r,   r5  #  s   



r5  c                 C   s8  g }|   }	 |t|  | jdkrn|   qt|dkr'tj||d}n|d }| jdkr| jdkr|   t	| }|j
t|  W d    n1 sPw   Y  |rq| jdkrq|   tj|d jd |d jd d	S |rt	|  t| }tj|jd
d	W  d    S 1 sw   Y  | |d  |S )NTr   r   )Zalternativesr   r?   r#  r  whatzInvalid pattern target)rM   rI   p_closed_patternr@   rD   r   r   ZOrPatternNoderC   r   Z
as_targetsr8  r   	ErrorNoder\   ra   rN   r   )r=   r4  rN   r<  rK  rb   r+   r+   r,   r:  7  s:   

"
 r:  c                 C   s  | j dkr| jdkr|  }|   t|S | j dkr t| S | j dkr)t| S | j dkrXt| }t	| }|sB|W  d   S W d   t| S 1 sOw   Y  t| S t| }t
| }|sl|W  d   S W d   n1 svw   Y  t| }t| }|s|W  d   S W d   n1 sw   Y  t| }t| }|s|W  d   S W d   t| S 1 sw   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
    r?   r  r.  r   r   N)r@   rC   rM   rD   r   r9  p_mapping_patternp_sequence_patternr   p_group_patternp_literal_patternp_capture_patternp_value_patternp_class_pattern)r=   rN   rK  r   r+   r+   r,   r=  [  sV   









r=  c           
      C   s  d}d}| j dkr| j }|  }|   d}| j }|  }d }|dkr(t| }n|dkr:| j}|   tj||d}|d urI|dkrItj||d}|d ur| j d	v r| j }|   | j d
krd| d n|  }| jd d }|   tj	|||tj
|  |dd}|d u r|d
kr| jd d }|   tj
||| d}|dkrtj||d}|d urtj||dS |r| d |dkrt| }tj||dS |dkrt| }	|	rtj||	ddS | d d S )NFrT  r   Tr0  r1  r   r}   r   r2  zExpected imaginary numberr   )r   r   zExpected a numberr3  r?   )r   Zis_is_checkzFailed to match literal)r@   rM   rD   r:  rC   r   r;  ZUnaryMinusNoder   rR   r<  r   MatchValuePatternNoder=  r>  )
r=   Znext_must_be_a_numbersignsign_posr@   rN   resr   Zadd_posr   r+   r+   r,   rB    sd   



rB  c                 C   s   t j|  t| dS )N)r+  )r   r9  rM   r8  rx   r+   r+   r,   rC    s   rC  c                 C   s   | j dkr
| d |  }t| | j}|   | j dkr"| d | j dkr@|  }|   t| }tj|||d}| j dks'| j dv rM| d| j   t	j
||dS )Nr?   Expected identifierr   r   )r   r   zUnexpected symbol '%s'r   )r@   r   rM   r?  rC   rD   rG   r   r   r   rF  )r=   rN   rI  attr_posattrr+   r+   r,   rD    s    






rD  c                 C   s    |  d t| }|  d |S )Nr   r   )r`   r:  )r=   r<  r+   r+   r,   rA    s   

rA  c                 C   s   | j }|  }|dv rP|dkrdnd}|   g }| j |krD|t|  | j dkr/|   n|dkr>t|dkr>| d n| j |ks| | tj	||d	S | d
 d S )Nr  r   r  r   rH   r   r   z3tuple-like pattern of length 1 must finish with ','r3  zExpected '[' or '(')
r@   rM   rD   rI   r5  r   r   r`   r   r6  )r=   openerrN   Zcloserr4  r+   r+   r,   r@    s"   





r@  c           	      C   s<  |   }| d | jdkr|   t|S d }g }d }| jdkr{|r*|s*|   }| jdkr8|   t| }n4t| }t| }|j	}W d    n1 sNw   Y  |r\t
| }|j	}| d t| }|||f | jdkrrn	|   | jdks"| d |d urtj|ddS tj|dd	 |D d
d	 |D |dS )Nr.  r  r   rY   rH   z7** pattern must be the final part of a mapping pattern.r;  c                 S      g | ]}|d  qS r   r+   r  kvr+   r+   r,   r  3  r*  z%p_mapping_pattern.<locals>.<listcomp>c                 S   rN  r   r+   rP  r+   r+   r,   r  4  r*  )keysZvalue_patternsdouble_star_capture_target)rM   r`   r@   rD   r   ZMatchMappingPatternNoder8  r   rB  r   rD  r:  rI   r   r>  )	r=   rN   rT  Zitems_patternsZstar_star_arg_posrK  r<  r  r   r+   r+   r,   r?  
  sP   










r?  c           
      C   s  |   }t| | j}|   | jdkr,|   }|   t| }tj|||d}| jdks|}| d | jdkrC|   t	j
||dS g }g }d }| jdkrt| }	|t|  W d    n1 sdw   Y  |	sr|rq|   }nt| }	|t|  W d    n1 sw   Y  | jdkrn	|   | jdksN| d |d urtj|ddS t	j
|||d	d
 |D dd
 |D dS )Nr   r   r   r   )class_rH   z+Positional patterns follow keyword patternsr;  c                 S   rN  rO  r+   rP  r+   r+   r,   r  f  r*  z#p_class_pattern.<locals>.<listcomp>c                 S   rN  rR  r+   rP  r+   r+   r,   r  g  r*  )rU  positional_patternsZkeyword_pattern_namesZkeyword_pattern_patterns)rM   r?  rC   rD   r@   rG   r   r   r`   r   ZClassPatternNoder   rI   r:  p_keyword_patternr   r>  )
r=   rN   rI  rK  rL  rU  rV  Zkeyword_patternsZkeyword_patterns_errorrK  r+   r+   r,   rE  9  sX   









rE  c                 C   sB   | j dkr
| d t| | j}|   | d t| }||fS )Nr?   rJ  r   )r@   r   r?  rC   rD   r`   r:  )r=   r   r   r+   r+   r,   rW  k  s   


rW  c                 C   sZ   | j dkr
| d | jdkr| d t| | j}|   | j dv r+| d| j   |S )Nr?   rJ  r  z$Pattern capture target cannot be '_')r   r   r   zIllegal next symbol '%s')r@   r   rC   r?  rD   )r=   r+  r+   r+   r,   r8  v  s   




r8  r4   c           	      C   s~  d| }|  | |r|  | d |s|  d d S t|tu rM|  d|d  d|d  d |d	d  D ]
}t| ||d  q8|  | d
 d S t|tjrz|j}W n tye   |j	j
}Y nw |  | d|j d t|j D ]\}}|dkr|dkrt| ||d | qyd S t|tu r|  d |D ]
}t| ||d  q|  | d d S |  | | d d S )Nz  z: zNone
r   r   z @ r   r  r   z)
tagrN   z[
z]
)writer  r
  print_parse_treer   r   NoderX  r  rp  r1   rN   r  r'   r%  r  )	rD  r   r4   r  indr  rX  rF   r   r+   r+   r,   rZ    s:   
 

rZ  r+   )r<   )T)NN)rB  r&   )FrO  )TF)FN)FFFT)NF)r   T)r[  re  r  r
  r  ior   r   unicodedatar   r   	functoolsr   r   ZScanningr   r   r   rT  r   r   r   r   r   r   r   r   ZErrorsr   r   r   r   r	   r
   r   	frozensetr   r#   ZcfuncrG   rK   rP   rX   rc   ra   re   rq   r   rj   rv   rw   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r   r   r  r  r$  r&  r)  r  Zccallr*  r   r=  r>  r:  r?  rc  rI  r]  ry  r|  r  r  rt  r  r  r  r  r  r  r6  r  r  r  r7  r8  r  r  r  r   r  r5  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  r1  r2  r3  r4  r/  r0  r;  r:  rE  rH  r   rI  rM  rG  r_  ra  rc  rg  ri  r  rB  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  ry  r  r  r  r  r  r  r  r  r  r  rR  rv  rx  r  r   r_   r  r  r  r  r  r  r  r  r  compiler  r  r#  r'  r)  r  r,  r  r/  r2  r5  r:  r=  rB  rC  rD  rA  r@  r?  rE  rW  r8  r  rZ  r+   r+   r+   r,   <module>   sJ  		

2*	, 

%3Nl(0
n


3	 P ,,		(		    #$y$9 	 b*


%	R	 D
6)?-#D
& ,% 
L	
'?!#1B.1
 