U
    {hg                    @   sB  d dl Z e jeeeeeeeeeeeeeeeeeeeeeeed d dlmZ d dlZd dlm	Z
 d dlmZmZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZ ddlmZ ddlmZmZ ddlmZ ddlmZ ddlm Z  dZ!G dd dZ"e j#dedddZ$e j#edddZ%e j#eedddZ&edd d!Z'e j#edd"d#Z(e j#edd$d%Z)e j#edd&d'Z*e j#edd(d)Z+d*d+d,Z,e j#edd-d.Z-edd/d0Z.e j#edd1d2Z/e j#edd3d4Z0e j#edd5d6Z1e j#edd7d8Z2e j#edd9d:Z3e j#edd;d<Z4e j#edd=d>Z5e j#edd?d@Z6e e7e7dAZ8e j#eddBdCZ9e j#eddDdEZ:e j#eddFdGZ;e j#eddHdIZ<e j#eddJdKZ=e j#eddLdMZ>e j#eddNdOZ?e j#eddPdQZ@e j#eddRdSZAe j#eddTdUZBe j#eddVdWZCe j#eddXdYZDe j#eddZd[ZEe j#edd\d]ZFe j#edd^d_ZGe j#edd`daZHe j#dee jIdcdddeZJe j#edfdgdhZKe j#eddidjZLe j#eddkdlZMe j#eeddmdnZNe j#eddodpZOe j#eddqdrZPe j#eddsdtZQe j#dudv ZRe jSddwdxZTe j#eddydzZUe j#edd{d|ZVe j#edd}d~ZWe j#edddZXe j#edddZYe j#dd ZZe j#eedddZ[e j#dee\dddZ]e j#e jIdfddZ^e j#deedddZ_e j#e\edddZ`dd dD \ZaZbe j#ee jcedddZde j#ee jIeedddZfe j#eee jce jIedddZge j#edddZhe j#edddZie j#edddZje j#edddZke j#edddZle j#edddZme j#deeedddZne j#deeedddZoe j#deeedddZpe j#edddZqe j#edddZre j#edddZse j#edddZte e7e7dZue j#edddZve j#edddZwe j#edddZxe j#edddZye j#edddZze j#edddĄZ{e j#dee jIdƜddȄZ|e j#edddʄZ}e j#eddd̄Z~e j#eddd΄Ze j#edddЄZe j#eddd҄Ze j#dee jIdӜddՄZe j#edddׄZe j#ee jIed؜ddڄZe j#eddd܄Ze j#edddބZe e7e7d߃Ze j#edddZe j#edddZe j#edddZe j#edddZe j#dee jIdddZe j#dee jIe jIedddZe j#edddZe j#edddZe e7e7dZe j#ee\dddZe j#edddZe j#dee jIe jIdddZe j#edddZe j#edddZe j#eddd Ze j#edddZe j#dee jIdddZe j#ee jIeedddZe j#ee jIeddd	Ze j#edd
dZe j#dee jIdӜddZe j#dee jIdӜddZe j#edddZe j#edddZe j#edddZe j#dee jIdӜddZe j#dee jIdӜddZe j#e" fedddZe j#dee jIedddZe j#deddd Ze jSdee jId!d"d#Ze j#edd$d%Ze e7e7d&Ze j#dedd'd(Ze j#dee jId!d)d*Ze j#edd+d,Ze j#ee jIdd-d.Ze j#edd/d0Ze j#ee jIdd1d2Ze j#ee jIdd3d4Ze j#ee jIdd5d6Ze j#ee jIdd7d8Ze e7e7d9Ze ed:d:d;d;d;d:d;d<d=Ze e7e7d>Ze e7eeB e7eB Ze e7e7d?Ze j#eedd@dAZe j#eddBdCZe jSe" ddddddfee jIe jIe jIe jIe jIe jIdDdEdFZe j#eddGdHZe j#ee jIdIdJdKZe e7e7dLZe j#ee jIe jIe jIe jIe jIdMdNdOZe j#ee jIddPdQZe j#ee jIddRdSZe j#ee jIedTdUdVZe e7e7dWZe jSe" dddddbfee jIe jIe jIe jIe jIeedXdYdZZe j#ee jIdd[d\Ze j#dee jIe jIe jIe jIe jId]d^d_Ze j#edd`daZe j#ee jIddbdcZe j#eddddeZe j#eddfdgZe j#eddhdiZe j#eddjdkZe j#eeedldmdnZe j#eeedldodpZe j#eddqdrZe j#eddsdtZe j#eddudvZe j#eddwdxZe j#eeeddydzZe j#edd{d|Ze j#edd}d~Ze j#eeedddZe j#edddZe j#deeee jIdddZe j#dee je jIedddZe j#dee jIdddZe j#edddZe j#edddZe j#eedddZe j#edddZe j#edddZe j#edddZe j#edfddZe jSde"fedddZe eedjZe j#eedddZe jSe"fedddZe j#eedddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddZe j#edddÄZe j#eddĐdńZe jSde jdƜdǐdȄZdS (      N)Nodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharFutureOptionserrorwarningBuiltin
ModuleNodeUtilsZ_unicodeZ_bytesre_parse_escape_sequences_parse_escape_sequences_rawpartialreduce_CDEF_MODIFIERSCOMMON_BINOP_MISTAKES)StringIO)lookup)r   r      )PyrexScannerr   tentatively_scan)r   )r   )MatchCaseNodes)r   )r   )r   r   )r   )r   r      )r   )r	   )r
   )inlinenogilapic                   @   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)   ;/tmp/pip-unpacked-wheel-fhl22ezh/Cython/Compiler/Parsing.py__init__5   s    zCtx.__init__c                 K   s&   t  }|j}|| j || |S r$   )r!   r%   r&   )r'   r(   ctxdr)   r)   r*   __call__8   s
    
zCtx.__call__)__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr    overridabler   	namespace	templatesallow_struct_enum_decoratorr+   r.   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_ident@   s
    
rF   c                 C   sD   g }| j dkr@|| j| j |   | j dkr6q@|   q|S )Nr>   ,)r?   appendr@   rA   rB   rC   )r<   namesr)   r)   r*   p_ident_listJ   s    


rJ   )r<   returnc                 C   s   |   }| j}|   ||fS r$   )positionr?   rC   )r<   posopr)   r)   r*   p_binop_operator[   s    rO   c                 C   s`   || }| j |kr\t| \}}|| }t||||}|dkrtj| jjkrTd|_qd |_q|S )N/T)	r?   rO   r   
binop_noder	   divisionr@   future_directivesZtruedivision)r<   opsZ
p_sub_exprn1rN   rM   n2r)   r)   r*   p_binop_exprd   s    
rW   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)rL   rC   r?   p_varargslistexpectp_testr   Z
LambdaNode)r<   rM   r[   r\   r]   exprr)   r)   r*   	p_lambdeft   s&    

  
  rb   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<   ra   r)   r)   r*   r`      s    

r`   c                 C   sh   | j dkrt| S |  }t| }| j dkr`|   t| }| d t| }tj||||dS |S d S )Nlambdaifelse)testZtrue_valZ	false_val)	r?   rb   rL   	p_or_testrC   r_   r`   r   ZCondExprNode)r<   rM   ra   rh   r"   r)   r)   r*   rd      s    


rd   c                 C   sR   t | }| jdkrN|  }|js.| jddd |   t| }tj|||dS |S )Nrc   z=Left-hand side of assignment expression must be an identifierFfatallhsrhs)	rd   r?   rL   is_namer   rC   r`   r   ZAssignmentExpressionNode)r<   rm   rL   rn   r)   r)   r*   p_namedexpr_test   s    	
rp   orand)z||&&c                 C   s   t | dtS )Nrq   )p_rassoc_binop_expr
p_and_testr;   r)   r)   r*   ri      s    ri   c                 C   s~   || }| j |krF|  }| j }|   t| ||}t||||}n4| j tkrzt| j  |krzt|  d| j |f dd |S )NzAFound the C operator '%s', did you mean the Python operator '%s'?r   r2   )r?   rL   rC   rt   r   rQ   r   r   )r<   rN   Z	p_subexprrU   rM   rV   r)   r)   r*   rt      s    
rt   c                 C   s   t | dtS )Nrr   )rt   
p_not_testr;   r)   r)   r*   ru      s    ru   c                 C   s8   | j dkr,|  }|   tj|t| dS t| S d S )Nnotoperand)r?   rL   rC   r   ZNotNoderw   p_comparisonr<   rM   r)   r)   r*   rw      s
    
rw   c                 C   sT   t | }| jtkrP|  }t| }t | }tj||||d}| jtkrPt| |_|S )N)operatoroperand1operand2)	p_starred_exprr?   comparison_opsrL   p_cmp_opr   ZPrimaryCmpNodep_cascaded_cmpcascade)r<   rU   rM   rN   rV   r)   r)   r*   r{      s    
  

r{   c                 C   s   | j dkrt| S t| S d S N*)r?   r   r`   r;   r)   r)   r*   p_test_or_starred_expr   s    
r   c                 C   s   | j dkrt| S t| S d S r   )r?   r   rp   r;   r)   r)   r*    p_namedexpr_test_or_starred_expr  s    
r   c                 C   s@   |   }| jdkr d}|   nd}t| }|r<t||}|S )Nr   TF)rL   r?   rC   
p_bit_exprr   ZStarredUnpackingNode)r<   rM   Zstarredra   r)   r)   r*   r   
  s    

r   c                 C   s@   |   }t| }t| }tj|||d}| jtkr<t| |_|S )N)r}   r   )	rL   r   r   r   ZCascadedCmpNoder?   r   r   r   )r<   rM   rN   rV   resultr)   r)   r*   r     s     

r   c                 C   sp   | j dkr"|   | d d}n>| j dkrR|   | j dkrL|   d}q`d}n| j }|   |dkrld}|S )Nrx   inZnot_inisis_not<>!=)r?   rC   r_   r<   rN   r)   r)   r*   r   $  s    



r   )
<>==>=<=r   r   r   r   rx   c                 C   s   t | dtS )N)|)rW   
p_xor_exprr;   r)   r)   r*   r   A  s    r   c                 C   s   t | dtS )N)^)rW   
p_and_exprr;   r)   r)   r*   r   H  s    r   c                 C   s   t | dtS )N)&)rW   p_shift_exprr;   r)   r)   r*   r   O  s    r   c                 C   s   t | dtS )N)<<>>)rW   p_arith_exprr;   r)   r)   r*   r   V  s    r   c                 C   s   t | dtS )N+-)rW   p_termr;   r)   r)   r*   r   ]  s    r   c                 C   s   t | dtS )N)r   @rP   %z//)rW   p_factorr;   r)   r)   r*   r   d  s    r   c                 C   s   t | S r$   )	_p_factorr;   r)   r)   r*   r   k  s    r   c                 C   s   | j }|dkr6| j }|  }|   t||t| S | js|dkrj|  }|   t| }tj||dS |dkrzt| S |dkr| j	dkrt
| S t| S )N)r   r   ~r   ry   r   r>   sizeof)r?   rL   rC   r   Z	unop_noder   in_python_fileZAmpersandNode
p_typecastrB   p_sizeofp_power)r<   r?   rN   rM   argr)   r)   r*   r   q  s"    r   c                 C   s   |   }|   t| }t|tj}t|tjtjtjf}|sV|sV|j	d krV| 
d t| dd}| jdkrz|   d}nd}| d t| }|rtj|||dS tj|||||dS )	NzUnknown typeTempty?Fr   )base_type_noderz   )	base_type
declaratorrz   	typecheck)rL   rC   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstOrVolatileTypeNodeCTupleBaseTypeNoderE   r   p_c_declaratorr?   r_   r   r   ZCythonArrayNodeZTypecastNode)r<   rM   r   Zis_memsliceZis_other_unnamed_typer   r   rz   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(ry   Tr   r   r   ))
rL   rC   r_   looking_at_exprr`   r   ZSizeofVarNoder   r   ZSizeofTypeNode)r<   rM   rz   noder   r   r)   r)   r*   r     s    
 
r   c                 C   s   |   }|   d}| jdkr*d}|   | jdkrT| jtkrT|rJt| nt| }n|rh| jd|dd d }|r~tj||dS tj	||dS d S )NFfromTr   z''yield from' requires a source argumentrM   rk   r   )
rL   rC   r?   statement_terminatorsr`   
p_testlistr   r   ZYieldFromExprNodeYieldExprNode)r<   rM   Zis_yield_fromr   r)   r)   r*   p_yield_expression  s"    
 r   c                 C   s   t | }tj|j|dS )Nra   )r   r   ExprStatNoderM   )r<   Z
yield_exprr)   r)   r*   p_yield_statement  s    r   c                 C   s   | j dkr4d|jkr| d |j| _t| |ddS |rD| d n>| j dkrZt| ddS | j d	krx|   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?   r2   r   p_def_statementp_for_statementrC   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kr^t| |}qH|rptj	||d}| jdkr|  }|   t
| }t|d||}|S )Nnewr   r>   await)r   [.r   **)rB   peek
p_new_exprr?   rL   rC   p_atom	p_trailerr   ZAwaitExprNoder   rQ   )r<   Z	await_posrU   rM   rV   r)   r)   r*   r     s"    


r   c                 C   s,   |   }|   t| }t| tj||dS )N)cppclass)rL   rC   r   p_callr   ZNewExprNode)r<   rM   r   r)   r)   r*   r     s    r   c                 C   sT   |   }| jdkrt| |S | jdkr0t| |S |   t| }tj|||dS d S )Nr   r   obj	attribute)rL   r?   r   p_indexrC   rF   r   AttributeNode)r<   node1rM   rE   r)   r)   r*   r     s    



 r   T)r<   allow_genexpc           	      C   s  |    g }g }d}d}| jdkrH| jdkr`|rD| jd|  d |    |t|  d}n| jdkr|    |t|  d}nt| }| jdkr|    |js| jd	|jd | j	
|j}tj|j|d
}t| }|||f nB|r| jd|jd |r|s|d | n||g d}| jdkr>qH|    q| jdk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rM   Tr   =z!Expected an identifier before '='valuerG   r   asyncr   r   )rC   r?   r   rL   rH   r`   rp   ro   rM   r@   rA   rE   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   )rK   c                    s  d } fdd|D }t ttj d|}|rg }g }|D ]r}t|trl|\}	}
|tj|	j|	|
d q<|j	r|
|j q<|r|tj|d j|dd g }|| q<|r|tj|d j|dd |rt|dkr|d j	r|d }n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   rM   keyr   r   T)key_value_pairsreject_duplicatesr   )r   )r   r   r   rQ   r   tuplerH   DictItemNoderM   is_dict_literalextendr  DictNoder   MergedDictNode)rM   r   r   keyword_dictZ	subtuples	arg_tuplekwargs
dict_itemsitemr  r   r)   r   r*   p_call_build_packed_argsZ  sB    

    
r  c                 C   sl   |   }t| \}}|sFt|dkrFt|d trFtj|||d dS t|||\}}tj||||dS d S )Nr   r   )functionr[   )r  r   r   )	rL   r   r   r   r   r   ZSimpleCallNoder  ZGeneralCallNode)r<   r  rM   r   r   r  r  r)   r)   r*   r     s       r   c           
      C   s   |   }|   t| \}}|rPt|d dkrP|d \}}tj||||d}n6t||}|rh|d }	ntj||d}	tj|||	d}| 	d |S )Nr   r   )basestartstopr   r  index])
rL   rC   p_subscript_listr   r   SliceIndexNodemake_slice_nodesr   	IndexNoder_   )
r<   r  rM   
subscriptsis_single_valuer  r  r   indexesr  r)   r)   r*   r     s(      

 
r   c                 C   sH   d}t | g}| jdkr@d}|   | jdkr0q@|t |  q||fS )NTrG   Fr  )p_subscriptr?   rC   rH   )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)rX   rX   )rX   rG   r  )p_slice_elementr?   rC   )r<   r  r  stepr)   r)   r*   r    s    




r  c                 C   s   | j |krt| S d S d S r$   )r?   r`   )r<   Z
follow_setr)   r)   r*   r!    s    
r!  c                 C   s   |  d d S )N...)r_   r;   r)   r)   r*   expect_ellipsis  s    r$  c                 C   sB   g }|D ]4}t |dkr(||d  q|t| f|  q|S )Nr   r   )r   rH   make_slice_node)rM   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)rM   r  r  r"  r)   r)   r*   r%    s    


  r%  c                 C   sb  |   }| j}|dkrb|   | jdkr8tj|g d}n| jdkrLt| }nt| }| d |S |dkrrt| S |dkrt	| S |dkrt
| S |dkrt|  t|S |d	krt| S |d
kr| j}|   tj||dS |dkr| jd d }|   tj||dS |dkr t| S |dkrTt| }|d krPt| | j}|   |S | d d S )Nr   r   r   yieldr   {`r#  INTFLOATr   IMAGr   BEGIN_STRINGr>   z!Expected an identifier or literal)rL   r?   rC   r   r   r   p_testlist_compr_   p_list_makerp_dict_or_set_makerp_backquote_exprr$  EllipsisNodep_int_literalrB   	FloatNodeImagNodep_atom_stringp_atom_ident_constantsp_namer   )r<   rM   r?   r   r   r)   r)   r*   r     sN    








r   c                 C   s   |   }t| \}}}|s*tj|||dS |}|dkrDtj||dS |dkr\tj|||dS |dkrrtj||dS |dkrtj||dS | d| d	 d S )
N)r   bytes_valuecr   ubfvalueszinvalid string kind '')rL   p_cat_string_literalr   UnicodeNodeCharNode	BytesNodeJoinedStrNoder   )r<   rM   kindr:  unicode_valueZ	kind_charr)   r)   r*   r7  &  s    r7  c                 C   s|   |   }| j}|dkr"t|}nN|dkr:tj|dd}n6|dkrRtj|dd}n|dkrl| jslt|}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)rL   rB   r   r'  BoolNoder   ZNullNoderC   )r<   rM   rE   r   r)   r)   r*   r8  ;  s    r8  c                 C   s   |   }tt| j}|   d}d}|d dkr^|d dkrH|d7 }n|d7 }|d d }q&d }|rld}n|r|dks| jjd	krd}| jr|rt	|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)rL   cythoncaststrrB   rC   r@   language_levelr   r   r   IntNode)r<   rM   r   rR  rS  rQ  r)   r)   r*   r4  R  s4    

r4  c                 C   sH   |   }| js:|| jkr:| j|}t||}|d k	r:|S tj||dS )NrE   )rL   compile_time_exprcompile_time_envZlookup_herewrap_compile_time_constantr   NameNode)r<   rE   rM   r   r   r)   r)   r*   r9  s  s    
r9  c                    sj  |d krt  S |tkr$t  S t|tr<t j |dS t|trZt j t	||dS t|t
rxt j t	||dS t|trt j t	|jtd|jd}|jrt j dt j t	|j|jd||d}|S t|t rt j t|dS t|trt|d}t j ||dS t|trP fdd|D }d |krBd S t j |d	S t d
||jjf  d S )Nr   )r   constant_resultg        r   )r^  asciic                    s   g | ]}t  |qS r)   )r\  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'  Ellipsisr3  r   boolrL  intrX  reprfloatr5  complexr6  imagrealrQ   rV  rC  r   bytesr   rE  r  r   r   	__class__r/   )rM   r   r   Zbvaluer[   r)   r   r*   r\  ~  sF    





   


r\  c                 C   s  |   }t| \}}}|dks(| jdkr2|||fS |g|g|g  }}}d  }}| jdkr|   }t| \}}	}
|dkrt|d qPn:||kr||hddhddhfkrd}nt|d||f  qP||	 ||
 || qP|dks|dkrd |krtt|| j}|d	kr0t	d
d
d |D }|dkrg }t||D ]8\}}t|trf||7 }n|tj|t	|d qH|||fS )Nr;  r.  zCCannot concatenate char literal with another string or char literalr>  r<  rM  zFCannot mix string literals of different types, expected %s'', got %s'')r=  r;  rM  r<  rM  c                 S   s   g | ]}|d k	r|qS r$   r)   )r   r<  r)   r)   r*   r     s      z(p_cat_string_literal.<locals>.<listcomp>r   )rL   p_string_literalr?   r   rH   r   r   Z
join_bytessource_encodingr   joinzipr   r   r   rC  )r<   rM   rG  r:  rH  ZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuer<  r)   r)   r*   rB    sD    


 




rB  r<  )r<   required_typec                 C   s`   | j dkrd S |  }t| |\}}}|dkrF|dkrB| d| |S |dkrR|S | d d S )Nr.  r<  r>  zf-string not allowed herer=  z#internal parser configuration error)r?   rL   rk  r   )r<   ro  rM   rG  r:  rH  r)   r)   r*   p_opt_string_literal  s    
rp  c                 C   s(   t t| }|D ]}|dkr dS qdS )N   TF)rT  rU  rV  )stringr<   r;  r)   r)   r*   check_for_non_ascii_characters  s
    rs  c                 C   sX  |   }| jjdk}d}|d |d |d t| j f}| jd }t|dkrtt|t|krrt|d d|krd	|krt|d
 d|krd|krt|d d	|krd|krt|d d|k}d|krt|dkrt|d d}n6d|krd}d}n$d|krd}nd	|krd	}nd}|dkrX|d krXt	j
| jjkrXt| j}	d	}nP|d k	rp|dkrp|}|dkrt }	n$|dkrt| j}	nt| j}	|   | j}
tt| j}|
dkr|	| |r|st|rd}n|
dkrX|rH|s"|d	ks"|d dkrH|	| |rV|sVt|rVd}nt||	||  nT|
dkrn|	d n>|
dkr~qn.|
dkr| jd|d n| d|
| jf  q|dkrd }|	 }t|dkr(t|d|  nD|	 \}}|r(|r(t	j
| jjkr(|dkr$| jd |d d }|dkrFt| ||d|kd!}|   |||fS )"NrP  Fr   r   r   z"'z!Duplicate string prefix characterr=  r<  z*String prefixes b and u cannot be combinedr>  z*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combinedrr;  z+Invalid string prefix for character literalTrM  Zub)r<  r>  ZCHARSESCAPEZUuNEWLINE
Z
END_STRINGEOFzUnclosed string literalr   z(Unexpected token %r:%r in string literalzinvalid character literal: %rz0bytes can only contain ASCII literal characters.)is_raw)rL   r@   rW  r   rB   rstriplowersetr   r	   unicode_literalsrS   r   ZStrLiteralBuilderrl  UnicodeLiteralBuilderZBytesLiteralBuilderrC   r?   rT  rU  rV  rH   rs  _append_escape_sequenceZgetcharZ
getstrings
p_f_string)r<   Zkind_overriderM   Zis_python3_sourceZ has_non_ascii_literal_charactersZstring_start_posZkind_stringry  rG  charsr?   ZsystrrH  r:  r)   r)   r*   rk    s     






$





$



 


rk  )escape_sequencer<   c              	   C   s  |d }|dkr,| t|dd  d nr|dkrB|| n\|dkr^|t| n@|dkrjn4|dkrt|dkr| t|d	d  d
 n|jd| dd n|dkr| dkrd}|dkr,d }zt|dd }t|}W n: t	k
r(   |jdt
|dd d dd Y nX nPt|dkrjt|d	d  d
}|dkr||d|  d}n|jd| dd |dkr||| n
|| d S )Nr   01234567   z'"\Zabfnrtvrw  x   r      zInvalid hex escape '%s'Frj   ZNUu)r<  r>  rM  r   NrP  z!Unknown Unicode character name %sr<  )   
   i zInvalid unicode escape '%s'r   )Zappend_charvalrb  rH   r   Zchar_from_escape_sequencer   r   r   ordKeyErrorrc  lstripZappend_uescape)rG  builderr  r<   r;  ZchrvalZucharr)   r)   r*   r  R  sF    


r  c                 C   s.   g | ]&}t d |rdnd d djqS )s   (\\(?:s   \\?s]   [\\abfnrtv"\'{]|[0-7]{2,3}|N\{[^}]*\}|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|[NxuU]|s   )?|\{\{?|\}\}?|[^\\{}]+)zus-ascii)r   compiledecodematch)r   ry  r)   r)   r*   r   y  s   
r   )TF)rM   irK   c                 C   s   | d | d | d | d fS )Nr   r   r   r)   )rM   rr  r  r)   r)   r*   _f_string_error_pos  s    r  )r<   ry  rK   c                 C   sj  g }d}t |}t }|r tnt}||k rF|}	|||}
|
d krVtt|||d |
 }|
 }|d }|dkr|st |dkrt	d|||  n
|
| q$|dkr|dkr|
d nD|jr|
tj|| d t }t| ||||\}}|| q$|d	kr:|d
kr&|
d	 ntt|||	d q$|
| q$|jrf|
tj|| d |S )Nr   zInvalid escape sequence\r   r>  r)  z{{r   }z}}z#f-string: single '}' is not allowed)r   r   r~  r   r   r   r  endgroupr  rH   r  r   rC  Z	getstringp_f_string_exprr  )r<   rH  rM   ry  r@  Z
next_startsizer  Z
_parse_seqr  r  partr;  Z
expr_nodesr)   r)   r*   r    sF    




r  )r<   rM   starting_indexry  rK   c                 C   s  |}t |}d  } }}	d }
d }d}d}|}d}d}||kr@q|| }||kr|dkrt|sntt|||d d}nN||kr|r|d |k r||d  |kr||d  |krd}|}|d7 }n|}n|d	kr|}|d |k r||d  |kr||d  |krd}|d7 }n|d
kr(|d7 }n|dkrF|dkrF|d8 }n|dkrdtt|||d nf|dkr|dkr|d |k r|dkr||d  dkr|d7 }q4n|dkr|d7 }q4|}q|d7 }q4||| dddd}|d |d |d | d f}| s*tt|||d |dkr~|d7 }||k r`||  r`|d7 }q<||k r~|| }||| }|dkr|d7 }|d |krn|| }|d7 }|| }|dkrd}d}d}|d }||krq|| }|s2|s2|dkr|d7 }n&|dkr2|dkr*|d8 }n|}q|d	kr|s|d |k r||d  |kr||d  |kr| }|d7 }n|s| }|d7 }q||| }
|r|d kr|
d krd}|dkrtt|||d|rd| nd  td| }t||d | | j|d}t	|}|d k	rFt
j|sFt|d |  |
rdt
j|t| |
||d!}	g }|r|t
j|t|d" |t
j||||	d# |d |fS )$Ni   @r   Fr  z$backslashes not allowed in f-stringsTr   r   z'"z{[(z}])#zformat string cannot include #z><=!:}z!=><r   z><z
rw  z(empty expression not allowed in f-string!rX   r)  r  rt  z'missing '}' in format string expressionz, found '%s'rM  z(%s))Zparent_scannerrl  Zinitial_posz!invalid conversion character '%s'r?  r   )r   conversion_charformat_spec)r   r   r  replacestripisspacer   r   rl  r   r   ZFormattedValueNodeZfind_conversion_funcrF  r  rH   rC  r   )r<   rH  rM   r  ry  r  r  r  Zterminal_charr  Zformat_spec_strZ	expr_textZNO_CHARZnested_depth
quote_charZin_triple_quotesZbackslash_reportedr;  Zexpr_strZexpr_posZ	in_stringZstart_format_specbufscannerra   Znodesr)   r)   r*   r    s    ,

2


















8

r  c                 C   s   |   }|   | jdkr2| d tj|g dS t| }| jdkr|jrT| d tj	||d}t
| |}| d tj|||tj| jjdkdS | jdkr|   t| |}n|g}| d tj||dS )	Nr  r   r   2iterable unpacking cannot be used in comprehensionr   rP  )looprH   typeZhas_local_scoperG   )rL   rC   r?   r_   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   Z	list_typer@   rW  %p_namedexpr_test_or_starred_expr_list)r<   rM   ra   rH   r  exprsr)   r)   r*   r0  a  s2    





   


r0  c                 C   s0   | j dkrt| |S | j dkr(t| |S |S d S )Nr   rf   )r?   r  	p_comp_if)r<   bodyr)   r)   r*   p_comp_iter  s
    



r  c                 C   s^   |   }d}| jdkr"d}|   | d t| d|d}|jd t| ||d tj|f|S )NFr   Tr   allow_testlistr   )else_clauser  r   )	rL   r?   rC   r_   p_for_boundsr&   r  r   ForStatNode)r<   r  rM   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  )rL   rC   ri   r   
IfStatNodeIfClauseNoder  )r<   r  rM   rh   r)   r)   r*   r    s    r  c                 C   s  |   }|   | jdkr0|   tj|g dS g }d}d}| jdkr|dkrb| jdkr\dnd}n.|t| jkr| d	| j|dkrd
ndf  |   | jdkr| d t| }|| d}nzt	| }|dkr| jdkrdnd}|dkr| 
d |}t	| }tj|j||d}|r.|d | n||g d}| jdkrj|   | jdkrhqjq<qjq<| jdkrrt|dkr0t|d tr0t|d dkr0|d d }|dkrt|tjst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rZt|d tsZ| d n
| 
d tj|g dS | 
d |dkr4g }g }|D ]L}t|tr|| n.|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||tjdS g }g }|D ]L}t|tr\|| n.|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 d S )Nr  r  r   Fr   r   r   r   r   z%unexpected %sitem found in %s literalr|  dictzexpected expression, found '*'rX   )r  r   r   TrG   r   )Zkey_exprZ
value_exprr   )r  rH   r  r  r   )r[   r  )r   r  ) rL   rC   r?   r   r	  r   r   r   rH   r`   r_   r  rM   r   r   AssertionErrorr  r   	dict_typeZDictComprehensionAppendNoder  r   set_typer  r  r  r  ZSetNodeZis_set_literalZMergedSequenceNoder  r
  )r<   rM   partsZtarget_typeZlast_was_simple_itemr  r  r   Zcomprehension_typerH   r  r   Z	set_itemsr  r  r)   r)   r*   r1    s    

 




0
  




r1  c                 C   sx   |   }|   t| g}| jdkr<|   |t|  q| d t|dkr\|d }ntj||d}tj	||dS )NrG   r*  r   r   r   r   )
rL   rC   r`   r?   rH   r_   r   r   r   ZBackquoteNode)r<   rM   r[   r   r)   r)   r*   r2  !  s    



r2  c                 C   sD   |d k	r|gng }| j tkr@|t|  | j dkr6q@|   q|S NrG   )r?   expr_terminatorsrH   r`   rC   r<   ra   r  r)   r)   r*   p_simple_expr_list2  s    


r  c                 C   sD   |d k	r|gng }| j tkr@|t|  | j dkr6q@|   q|S r  )r?   r  rH   r   rC   r  r)   r)   r*   p_test_or_starred_expr_list=  s    


r  c                 C   sD   |d k	r|gng }| j tkr@|t|  | j dkr6q@|   q|S r  )r?   r  rH   r   rC   r  r)   r)   r*   r  H  s    


r  c                 C   sB   |   }t| }| jdkr:|   t| |}tj||dS |S d S NrG   r   )rL   r`   r?   rC   r  r   r   r<   rM   ra   r  r)   r)   r*   r   U  s    

r   c                 C   sB   |   }t| }| jdkr:|   t| |}tj||dS |S d S r  )rL   r   r?   rC   r  r   r   r  r)   r)   r*   p_testlist_star_exprc  s    

r  c                 C   sV   |   }t| }| jdkr:|   t| |}tj||dS | jdkrNt| |S |S d S )NrG   r   r   )rL   r   r?   rC   r  r   r   r   r  r)   r)   r*   r/  q  s    



r/  c                 C   s2   t | tj|jtj|j|dd}tj|j|dS )Nr   r   )r  )r  r   r   rM   r   r   ZGeneratorExpressionNode)r<   ra   r  r)   r)   r*   r     s
     r   )r   r  r  rX   r   rv  c                 C   s&   |   }|   t| }tj||dS N)rI   )rL   rC   rJ   r   Z
GlobalNoder<   rM   rI   r)   r)   r*   p_global_statement  s    r  c                 C   s&   |   }|   t| }tj||dS r  )rL   rC   rJ   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r|   | jdkrt| }nt | }|| qdt|dkrxtd	| jr`|d
 }t|tjrtj|j
|jt|j
|j|jd}n$t|tjtjtjfst	|j
d | jd d }|   | jdkrDt| }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 d S )NFrX   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}   rm   rn   r   r   )rm   rn   first)Zlhs_listrn   ) r  r?   ro   Zis_subscriptZis_attributerC   p_annotation
annotationr  r   rM   r   rH   r   r   r  r   r   r  r  r  r%  r  r  r   r]  r   r   ZInPlaceAssignmentNoder   SingleAssignmentNodeZCascadedAssignmentNode)r<   ra   Zhas_annotationZ	expr_listrm   r}   rn   r)   r)   r*   p_expression_or_assignment  sP    




r  c                 C   s   |   }d}|   | jdkrL|   t| }| jdkrP|   | jdk}nd }g }| jdkr|t|  | jdkr|   | jdkrd}q|t|  qltj||d}tj|||| dS )NFr   rG   rv  rx  Tr   )r  streamZappend_newline)	rL   rC   r?   r`   rH   r   r   r   ZPrintStatNode)r<   rM   Zends_with_commar  r[   r  r)   r)   r*   p_print_statement  s2    




 r  c                 C   s   |   }|   t| }t|tjrZd}|j}t|dkrd| 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   rP  z.expected tuple of length 2 or 3, got length %dFr   r   z@tuple variant of exec does not support additional 'in' argumentsrj   rG   r   )rL   rC   r   r   r   r   r[   r   r   r?   rH   r`   r   ZExecStatNode)r<   rM   codeZtuple_variantr[   r)   r)   r*   p_exec_statement  s2     

r  c                 C   s&   |   }|   t| }tj||dS )Nr   )rL   rC   r  r   ZDelStatNode)r<   rM   r[   r)   r)   r*   p_del_statement  s    r  F)r<   with_newlinec                 C   s.   |   }| d |r$| jddd t|S )NpassExpected a newlineTZignore_semicolon)rL   r_   expect_newliner   PassStatNode)r<   r  rM   r)   r)   r*   p_pass_statement  s
    
r  c                 C   s   |   }|   t|S r$   )rL   rC   r   ZBreakStatNoder|   r)   r)   r*   p_break_statement#  s    r  c                 C   s   |   }|   t|S r$   )rL   rC   r   ZContinueStatNoder|   r)   r)   r*   p_continue_statement+  s    r  c                 C   s6   |   }|   | jtkr$t| }nd }tj||dS )Nr   )rL   rC   r?   r   r   r   ZReturnStatNode)r<   rM   r   r)   r)   r*   p_return_statement3  s    

r  c                 C   s   |   }|   d }d }d }d }| jtkrt| }| jdkrh|   t| }| jdkr|   t| }n| jdkr|   t| }|s|s|rtj|||||dS t|S d S )NrG   r   )exc_type	exc_valueexc_tbcause)rL   rC   r?   r   r`   r   ZRaiseStatNodeZReraiseStatNode)r<   rM   r  r  r  r  r)   r)   r*   p_raise_statement?  s2    




r  c           
      C   s   |   }| j}|   t| ddg}| jdkrJ|   |t| dd q$g }tj| jjk}|D ]~\}}}}|dkrt	j
||||d}	nLt	j|tj||p|dtj|tj||d|rdnd d	|ko|d kd d
d}	||	 q`t	j||dS )NT
as_allowedrG   cimport)module_nameas_nameis_absoluterY  r   r   r   )r  r2   Zget_top_level_module	name_listrl   stats)rL   r?   rC   p_dotted_namerH   r	   absolute_importr@   rS   r   ZCImportStatNoder  r   r]  
ImportNoder   StatListNode)
r<   rM   rG  r   r  r  target_namedotted_namer  statr)   r)   r*   p_import_statement]  s<    

	r  )r<   first_statementc              	   C   s  |   }|   | jdkrBd}| jdkrF|t| j7 }|   qnd }|d k	rp| jdkrp|   | jd }}n.|d krtj| jjkrd}t	| dd\}}}}| jdkr| 
d | j}|   |dk}d}	| jd	kr|   | jd	d fg}
|   n"| jd
krd}	|   t| g}
| jdkrV|   |	rD| jdkrDqV|
t|  q|	rf| d |dkr|s| 
d n|r| 
d nz|
D ]t\}}}|dkr| 
d|  qztt|}W n. tk
r   | 
d| | Y  qY nX | jj| qt|S |r0tj||||
dS g }g }|
D ]>\}}}|tj||d ||tj||pn|df q<tj|
d d |d}tj|tj|tj||d||d|dS d S )N)r   r#  r   importr  rM  Fr  zExpected 'import' or 'cimport'r  r   r   TrG   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_levelimported_namesr   rY  r   )r  r2   r  )moduler   )rL   rC   r?   r   r@   rA   r	   r  rS   r  r   p_imported_namerH   r_   getattrAttributeErroraddr   r  ZFromCImportStatNoder   r   r]  r  ZFromImportStatNoder  )r<   r  rM   r2   Zdotted_name_posr  _rG  Z
is_cimportZis_parenthesizedr  name_posrE   r  	directiveZimported_name_stringsr   Zimport_listr)   r)   r*   p_from_import_statement~  s    










 
 r  c                 C   s"   |   }t| }t| }|||fS r$   )rL   rF   	p_as_name)r<   rM   rE   r  r)   r)   r*   r    s    r  )r<   r  rK   c                 C   sb   |   }t| }d }|g}| jdkr<|   |t|  q|rHt| }||| jd||fS )Nr   )	rL   rF   r?   rC   rH   r  r@   rA   rm  )r<   r  rM   r  r  rI   r)   r)   r*   r    s    
r  c                 C   s,   | j dkr$| jdkr$|   t| S d S d S )Nr>   as)r?   rB   rC   rF   r;   r)   r)   r*   r    s    r  c                 C   sH   |   }|   t| }| jdkr4|   t| }nd }tj|||dS )NrG   )r  r   )rL   rC   r`   r?   r   ZAssertStatNode)r<   rM   Zcondr   r)   r)   r*   p_assert_statement  s    

r  );rv  rx  c                 C   sT   |   }|   t| g}| jdkr<|   |t|  qt| }tj|||dS )Nelifr  )rL   rC   p_if_clauser?   rH   p_else_clauser   r  )r<   rM   r  r  r)   r)   r*   p_if_statement  s    

 r  c                 C   s(   |   }t| }t| }tj|||dS )Nr  )rL   rp   p_suiter   r  )r<   rM   rh   r  r)   r)   r*   r    s     r  c                 C   s"   | j dkr|   t| S d S d S )Nrg   )r?   rC   r  r;   r)   r)   r*   r    s    
r  c                 C   s:   |   }|   t| }t| }t| }tj||||dS )N)r  r  r  )rL   rC   rp   r  r  r   ZWhileStatNode)r<   rM   rh   r  r  r)   r)   r*   p_while_statement!  s     r  )r<   r   c                 C   sL   |   }|   t| d|d}t| }t| }|j|||d tj|f|S )NTr  )r  r  r   )rL   rC   r  r  r  r&   r   r  )r<   r   rM   r  r  r  r)   r)   r*   r   .  s    r   )r<   r  r   rK   c                 C   s   t | }| jdkr4|   t| ||d}t||dS | js|s| jdkr^|   t| }n
|d  }}t| }|  }t	| }|  }	t| }
t| }t
| }|d krtj||d}n(|jst|jd n||jkrt|d |d |
d krt|	d	 t||||
||d
S | d i S d S )Nr   r   )targetiteratorr   rY  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?   rC   p_for_iteratorr  r   r   p_for_from_relationrL   rF   p_for_from_stepr   r]  ro   r   rM   rE   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kr| j }|   |S | d d S )Nz#Expected one of '<', '<=', '>' '>=')r?   inequality_relationsrC   r   r   r)   r)   r*   r  g  s
    
r  c                 C   s0   | j dkr(| jdkr(|   t| }|S d S d S )Nr>   Zby)r?   rB   rC   r   )r<   r"  r)   r)   r*   r  q  s
    r  )r   r   r   r   )r<   rY   c                 C   sl   |   }t| }| jdkrd|   |g}| j|krV|t|  | jdkrLqV|   q(tj||dS |S d S r  )rL   r   r?   rC   rH   r   r   )r<   rY   rM   ra   r  r)   r)   r*   p_target  s    



r  c                 C   s
   t | dS )Nr   )r  r;   r)   r)   r*   r    s    r  )r<   r  r   c                 C   s6   |   }|rt| }nt| }|r(tjntj||dS )N)sequence)rL   r   ri   r   ZAsyncIteratorNodeZIteratorNode)r<   r  r   rM   ra   r)   r)   r*   r    s
    
r  c                 C   s   |   }|   t| }g }d }| jdkr~| jdkrD|t|  q*| jdkr^|   t| }tj||||d}| jdkr~|S | jdkr|   t| }tj|||dS | 	d d S )N)exceptrg   r!  rg   )r  except_clausesr  finally)r  finally_clausezExpected 'except' or 'finally')
rL   rC   r  r?   rH   p_except_clauser   ZTryExceptStatNodeZTryFinallyStatNoder   )r<   rM   r  r"  r  r$  r)   r)   r*   p_try_statement  s4    


 

 r&  c                 C   s   |   }|   d }d }d}| jdkrt| }t|tjrB|j}n|g}| jdksr| jdkr| jdkr| j	j
dkr|   t| }n>| jdkr| jdkr|   |   }t| }tj||d}d}t| }tj|||||d	S )
NFrX   rG   r>   r  r   rY  T)patternr  r  is_except_as)rL   rC   r?   r`   r   r   r   r[   rB   r@   rW  rF   r]  r  r   ZExceptClauseNode)r<   rM   r  r  r(  pos2rE   r  r)   r)   r*   r%    s8    


  r%  c           
   	   C   s   |   }|   t| dd }| d | jr|}| j||}|r| j| t	|}|
 &}t||| |j| jd}t||}	W 5 Q R X |	S d S n
t|S d S )Nr<  r   z!Syntax error in include statement)rl  parse_comments)rL   rC   rk  r  compile_time_evalr@   Zfind_include_fileZincluded_filesrH   r   Zget_file_objectr   encodingr*  p_statement_listr   r  )
r<   r,   rM   Zunicode_include_file_nameZinclude_file_nameZinclude_file_pathZsource_descr>  s2treer)   r)   r*   p_include_statement  s     

r0  c                 C   s.   |    | jdkr"| js"t| }nt| }|S )Ntemplate)rC   rB   r   p_with_templater   )r<   r   r)   r)   r*   p_with_statement  s
    
r3  c           	   	   C   s   d}d}| j dkr\t| 6}|   t| |}| d | j dkrL| d W 5 Q R X | }|sjt| |}t| }t|D ]\}}}||fd|i|}qz|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   rX   rM  r  )r?   r   rC   p_with_items_listr_   r   r  reversed)	r<   r   Zbrackets_succeededr   errorsr  clsrM   r(   r)   r)   r*   r     s     





r   )r<   r   rK   c                 C   s:   g }| t| | | jdkr q6|   | jdkrq6q|S )NrG   r   )rH   p_with_itemr?   rC   )r<   r   r   r)   r)   r*   r4  	  s    

r4  c                 C   s   |   }| jsx| jdkrx| jdkrx|r0| d | j}|   d }| jdkrf|   t| }| d tj	|||dfS t| }d }| jdkr| jdkr|   t
| }tj||||dfS d S )	Nr>   )r   gilzwith gil/nogil cannot be asyncr   r   )stater  r  )managerr  r   )rL   r   r?   rB   r   rC   r`   r_   r   ZGILStatNoder   ZWithStatNode)r<   r   rM   r:  r  r;  r  r)   r)   r*   r8  +	  s$    


r8  c                 C   s   |   }g }|   | d || j |   | jdkrZ|   || j |   q2| d | jdkr|   | d |   t }||_	t
| ||}|   |S t|d d S )Nr   rG   r  rX   z-Syntax error in template function declaration)rL   rC   r_   rH   rB   r?   r  expect_indentr!   r8   p_c_func_or_var_declarationexpect_dedentr   )r<   rM   r8   body_ctxZfunc_or_varr)   r)   r*   r2  I	  s*    





r2  c                 C   s0  | j dkrt| }n| j dkr,t| }n | j dkr@t| }n| j dkrTt| }n| j dkrht| }n| j dkr|t| }n| j dkrt| }n| j dkrt| }n| j d	krt	| }nt| j d
krt
| }n`| j dkrt| |d}nH| j dkrt| }n4| j dkrt| }n| j dkr$t| }nt| }|S )NglobalnonlocalprintexecdelbreakcontinuerK   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_statementc	  s<    






















rJ  c                 C   s   t | |d}|j}g }t|tjs,|| | jdkrt|   | jdkrJqtt | |d}t|tjrdq,|| d}q,|st|}n$t|dkr|d }ntj	||d}| jdkrt|tj
r|jjr|jjdkr| d	| | d
 |S )NrH  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)rJ  rM   r   r   r  rH   r?   rC   r   r  r   ra   ro   rE   r   r  )r<   r,   r  r  rM   r  r)   r)   r*   p_simple_statement_list	  s2    






rL  c                 C   s   | j }d| _ t| }|| _ |S )Nr   )rZ  r   )r<   oldra   r)   r)   r*   p_compile_time_expr	  s
    rN  c                 C   sd   |   }| j}|   t| }| d t| }| jrL||}||| | j	ddd t
|S )Nr   r  Tr  )rL   r[  rC   rF   r_   rN  r+  compile_time_valuedeclarer  r   r  )r<   rM   denvrE   ra   r   r)   r)   r*   p_DEF_statement	  s    

rR  c           	      C   s   |   }| j}|}| j}d }|   t| }|o<t||| _t| |}| jrX|}d}| jdkrqfq| jdkr|   || _t| |}|r|}|st	
|}|| _|S )Nr   ZELIFELSE)rL   r+  r[  rC   rN  ra  rO  r  r?   r   r  )	r<   r,   rM   Z
saved_evalZcurrent_evalrQ  r   ra   r  r)   r)   r*   p_IF_statement	  s0    




rT  c                 C   s:  |j }|  }d }| jdkr:|jdkr0| d t| |S | jdkrj| jjddrbt	|ddd	 t
| S | jd
kr| jjddrt	|ddd	 t| |S | jdkr|jdkr| d |j| _t| }|js | jdkr | jdkr| jdkrn
| d n| jdkr |r t| ddS d}| jdkr>d}|   n| jdkrZd}d}|   |r|jdkrv| d |j| _t| |||d}|d k	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 n:| jdkr<d|jkr*|jd kr*| d! |j| _t| |S | jd"krh|jd#kr^| d$ t| |S | jd%kr|jdkr| d& t| |S |jd'kr| jdkr| jd(krt| S | jdkr|jd(krt| ddS |jd)krt| }|d k	r|S | d* | jd+kr$t | S | jd,kr8t!| S | jd-krLt"| S | jd.kr`t#| S | jd/krtt$| 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 k	r(|S t(| ||d1S d 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   rv   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  propertyrW  c_class_pxdr"   zdecorator not allowed here)r   rK  cpdefrX  r   r>   r   r   r  )r  rK  r\  )r  rW  r  rY  r[  zcdef statement not allowed here)r6   %'api' not allowed with this statementrj   r   r   r[  r   rX  )r  r  rX  r"   z!class definition not allowed hereincludez"include statement not allowed hererY  rZ  )r[  rZ  z%Executable statement not allowed hererf   whiler   tryr   r  rH  ))r4   rL   r?   r2   r   p_ctypedef_statementr@   Zcompiler_directivesgetr   rR  rT  p_decoratorsr9   rB   r  rC   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r   r    r   p_class_statementr0  p_property_declp_ignorable_statementr  r  r   r&  r3  r   put_backp_match_statementrL  )r<   r,   r  r4   rM   r   r6   r   tupZ
ident_nameZ	ident_posZmatch_statementr)   r)   r*   p_statement	  s    


















$




rp  c                 C   sv   |   }g }| jdkrBt| ||d}t|tjr2q|| d}q|sPt|S t|dkrd|d S tj||dS d S )NDEDENTrx  rH  Fr   r   r  )	rL   r?   rp  r   r   r  rH   r   r  )r<   r,   r  rM   r  r  r)   r)   r*   r-  \
  s    


r-  c                 C   s   t | |ddd S )NFwith_doc_onlyr   )p_suite_with_docstringr<   r,   r)   r)   r*   r  o
  s    r  )r<   rt  rK   c                 C   s   |  d d }| jdkrH|   |   |r4t| }t| |}|   n@|jr\| jddd |j	dkrrt
| |}nt| }| jddd	 |st|\}}||fS )
NrX   rv  r]  Frj   )r  rX  r  r"   zSyntax error in declarationsTr  )r_   r?   rC   r<  p_doc_stringr-  r>  r    r   r2   rL  r  r  _extract_docstring)r<   r,   rt  docr  r)   r)   r*   ru  t
  s$    




ru  c                 C   s  g }g }d}| j |kr| j dks,| j dkr:| jddd d}| j dkr|  d dkr| j}|   |   t| rt| }n.t| |d	}	t| d
d}
t	j
|	j|	|
d}d
}tj|j|d}|||f d
}npt| rt| }n.t| |d	}	t| d
d}
t	j
|	j|	|
d}d
}|| |d7 }t|dkrB| jd|jd | j dkrx| j |kr|r| dd|  q|   q||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.Frj   r>   r   r8   Tr   r   r   r   r   r   rG   zUnmatched %sz or )r?   r   r   rB   rC   r   r`   r   r   r   CComplexBaseTypeNoderM   r   r   rH   r   rm  )r<   Z
end_sy_setr8   r   r   Zpos_idxZparsed_typeidentr   r   r   Zkeyword_nodeZwas_keywordr)   r)   r*   p_positional_and_keyword_args
  sZ    	
 
 

r}  )r<   nonemptyc                 C   s(   | j dkrt| |dS t| ||dS d S )Nr   rz  r~  r8   )r?   p_c_complex_base_typep_c_simple_base_type)r<   r~  r8   r)   r)   r*   r   
  s    
r   c                 C   s2   | j dkr&| jtkr&| j}|   |S tdS d S )Nr>   rM  )r?   rB   calling_convention_wordsrC   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r|g}| jdkr|   | jdkrfqt| |d}t| dd}|tj|||d qHtj||d}| 	d | jdkrt
| rt| |}nt| ||}|S )	Nrz  Tr   r   rG   r   )
componentsr   )rL   rC   r   r   r   r{  r?   rH   r   r_   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)r<   r8   rM   r   r   	type_noder  r)   r)   r*   r  
  s:      


  


r  c              
   C   s  d}d}d}d}g }|   }d }	}
| jdkrv| jdkrL|	rFt|d d}	n | jdkrv|
rdt|d	 d}
nqv|   q$|	s~|
rt| ||d
}t|tjrtj	||j
|	|
d|_
|S tj	|||	|
dS | jdkrt|d| j  t| rd}| jdkr"| jtkr"t| j \}}| j}|   n8t| \}}| jdkrV| jtkrV| j}|   nd}| jdkr| jdkrd}|   nt| r| j}|   | jdkr|| |   t| }qn| j}|   }|   |r| jdkr| jdkrx|   }|   | jdksF| jdksF| jdksF| jdkrV| jtkrV| dd| n | dd| | d|| d }n| jdkr| d|| d }tj||||||||d}| jdkrt| rt| |}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'rb  re  r   r   r   r   r   )r   r   r   r   )rE   module_pathis_basic_c_typesignedre  rS  r8   r   )r   rE   )rL   r?   rB   r   rC   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_namerH   rF   r  rm  CSimpleBaseTypeNoder  r  r  ZCNestedBaseTypeNode)r<   r~  r8   Zis_basicr  rS  re  r  rM   r  r  r   rE   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  rM   )r   r  r   r)   r)   r*   r   m  s   z(p_buffer_or_template.<locals>.<listcomp>r  )r   r   r   )
rL   rC   r}  r_   r?   r  r   r	  r   r   )r<   r   r8   rM   r   r   r  r   r)   r)   r*   r  ]  s$    


r  c                 C   s   | j | j|  fg}|   d}| jdkr0d}n8| j dkrh|| j | j|  f |   | j dkrhd}|d d d D ]}| j|  qv|S )NFrX   Tr+  r   )r?   rB   rL   rC   rH   rm  )r<   savedretvalsvr)   r)   r*   r  x  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)	rL   rC   r  r   r   r_   r  r   r   )r<   r   rM   r  r  r&  r  r   r)   r)   r*   r    s    

r  c                 C   s   | j dko| jtkS r=   )r?   rB   r  r;   r)   r)   r*   looking_at_name  s    r  c                 C   st  | j tkrdS | jdkrld}| j }|  }g }|   | jdkrj|   || j |  f | d q8| j| j |  f}| jdkrd}n| jdks| jdkr|   | jdk}| j|  n\| jdkr|   | jdk}| j|  n4| jd	kr|   | jd
kpt|  }| j|  |	  |D ]&}| jd|  | dd|d  q&| d|| | oj|d S dS d S )NFr>   r   Tr   r   )r   r  r   r   r  r   r   )r>   )
rB   base_type_start_wordsr?   rL   rC   rH   r_   rm  r   reverse)r<   is_typerE   r	  dotted_pathr  pr)   r)   r*   r     sD    






r   c                 C   s   | j dko| jtkS r=   )r?   rB   r  r;   r)   r)   r*   r    s    r  c                 C   sD   | j dkr<| j}|  }|   | j dk}| d|| |S dS d S )Nr>   r   F)r?   rB   rL   rC   rm  )r<   rE   r	  r   r)   r)   r*   r    s    

r  )voidcharrb  rd  doublebint)r   r   )r   r   )r   r   )Z
Py_UNICODEPy_UCS4Z	Py_hash_t
Py_ssize_tZssize_tZsize_tZ	ptrdiff_tZPy_tss_t)shortlongr  rR  )structunionenumpackedc                 C   sp   d}d}| j dkrh| jtkrh| jdkr,d}n2| jdkr<d}n"| jdkrLd}n| jd	kr^|d7 }|   q||fS )
Nr   r   r>   rR  r  r   r  r   r  )r?   rB   sign_and_longness_wordsrC   )r<   r  rS  r)   r)   r*   r     s    




r  c                 C   s,   t | d}|d k	r$t|}| j|_nd }|S )Nr<  )rp  r   rl  r,  )r<   literalcnamer)   r)   r*   p_opt_cname  s    

r  )r<   r   r  cmethod_flag
assignabler~  calling_convention_allowedc              	   C   s   |   }| jdkrx|   | jdks,t| rVtj|| jdd d}	t| |||	|}
qt	| |||||dd}
| 
d nt| ||||||}
|s|
jr| jdkrt|   d|
j  | jdkr|   }| jd	krt| |
}
n|   t| |||
|}
d
}q|
S )Nr   r   rM  )rE   r  T)r   r  r  r~  r  z&%s on something that is not a functionr   r   r   r   )rL   r?   rC   r  r   CNameDeclaratorNoder@   rA   p_c_func_declaratorr   r_   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)r<   r,   r   r  r  r  r~  r  rM   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  Z	dimension)rL   rC   r?   r   r_   r   ZCArrayDeclaratorNode)r<   r  rM   Zdimr)   r)   r*   r  B  s    


r  )r<   r  c                 C   s   t | ||dd}t| }| d t| }t| |jdk\}}	}
|rZ|
rZt|  ddd |pdt| }t| }t	j
||||||	|p|jp|||
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   rv   )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_clauser3   r   rL   
p_with_gilr   ZCFuncDeclaratorNoder   )r<   rM   r,   r  r  r[   Zellipsisr   exc_val	exc_check
exc_clauser  r)   r)   r*   r  N  s2    
     r  )r   r   r   rP   r   z++z--r   r   r   r   r   r   rG   r   r   r   r   r   r   []()r  r   ra  )r<   r   r  r  r  r~  c              	   C   s  |   }t| }| jdkr| jdk}	|   |   }
| jdkoF| jdk}|rT|   t| ||||||d}|r|tj|
|d}|	rtj||d}tj||d}n>| jdks| jdkr| j	j
r| jdkrtjntj}|   t| ||||||d}|||d}nd }| jdkrl| j}|r.t|   d	 |   t| }|d
kr| jdkr|r|   t| }n|rt|   d d}d }|d kr|jd k	r|r|jd | }|d
kr|jdkr|r| j}dd |D r|   |dkr| d d}n`|dkr | d d}nF|dkrH| j|krH|d9 }|   n| jdkrf|| j7 }|   |tkr| jd| dd ||7 }n@|dkr| j}|tkr| jd| dd |d | }|   tj||||d}||_|S )Nr  r   r  r>   )r   r  r  r  r~  )r  r   rs   zDeclarator should be emptyr}   r   zEmpty declaratorrM  ::r  c                 S   s   g | ]}|d krdqS )z+-*/<=>!%&|([^~,r   r)   )r   r;  r)   r)   r*   r     s      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.Frj    )rE   r  default)rL   r  r?   rC   rB   r   r   ZCConstDeclaratorNodeZCPtrDeclaratorNoder@   cppZ CppRvalueReferenceDeclaratorNodeZCReferenceDeclaratorNoder   r  r`   r7   r3   r_   supported_overloaded_operatorsr  r  )r<   r,   r   r  r  r  r~  rM   r  Z	is_ptrptrZ	const_posr  r  r   Z
node_classrn   rE   r  rN   r)   r)   r*   r  q  s    


  
 












  r  c                 C   s(   | j dkr | jdkr |   dS dS d S )Nr>   r   TFr?   rB   rC   r;   r)   r)   r*   r    s    r  c                 C   s(   | j dkr |   | d dS dS d S )Nr   r9  TF)r?   rC   Zexpect_keywordr;   r)   r)   r*   r    s
    

r  )r<   	is_externrK   c                 C   s6  d}d}|rdnd}| j dkr:| jdkr:d}|   d}n| j dkr,d}|   | j dkrjd}|   n| j dkrd}|  d	 }|   | j dkr| j}|d
kr|  d	 |d krt|  d nt| |}|   n&| j dkr,tj|  dd}|   n&| j dkr d}|   nd}t| }|||fS )a  
    Parse exception value clause.

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

    Note that the only reason we need `exc_clause` is to raise a
    warning when `'except'` or `'noexcept'` is placed after the
    `'nogil'` keyword.
    FNTr>   Znoexceptr!  r   r   r   r   r   zf'except +nogil' defines an exception handling function. Use 'except + nogil' for the 'nogil' modifier.r   r   )	r?   rB   rC   rL   r   r9  r   rD  r`   )r<   r  r  r  r  Zplus_char_posrE   r)   r)   r*   r    sF    






r  )r   r   r#  r   rX   rP   )r<   	in_pyfuncr  r  kw_onlyrZ   rK   c           	      C   sL   g }|}| j tkrH|t| ||||||d | j dkr:qH|   d}q|S )N)r~  r  rZ   rG   r   )r?   c_arg_list_terminatorsrH   p_c_arg_declrC   )	r<   r,   r  r  r  r  rZ   r[   is_self_argr)   r)   r*   r     s    
 
r  c                 C   s   | j dkrt|  dS dS d S )Nr#  TF)r?   r$  r;   r)   r)   r*   r  4  s    
r  )r<   r  r  r~  r  rZ   c                 C   s`  |   }d }}	d }
d }| jr<tj|d g dddd|d d	}nt| |d}t| ||d}| jdkr| js| j}|   | jdkr| jdkr|   n
| 	d |st	|d	|  |d
k}	|dk}|r| jdkr|   t
| }| jdkrF|   d|jkr>| jdkrt|}
|   n d|jkr2t| }
n
t	|d nt| }
tj|||||	|
||dS )NFr   )rE   r  r  r  re  rS  r  r8   r~  )rx   rq   r>   rI  zExpected 'None'z*'%s None' only allowed in Python functionsrq   rx   rX   r   r   )r   r   r   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  r  r  )rL   r   r   r  r   r   r?   rC   rB   r   r  r2   r   r'  	modifiersr`   ZCArgDeclNode)r<   r,   r  r  r~  r  rZ   rM   r  r  r  r  r   r   rG  r)   r)   r*   r  =  sb        




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   )rL   r`   r   ZAnnotationNode)r<   rM   ra   r)   r)   r*   r  t  s    r  c                 C   s(   | j dkr | jdkr |   dS dS d S )Nr>   r    TFr  r;   r)   r)   r*   p_api  s    r  c                 C   s  t | |j|_|jpt| |_|jr>|jdkr>t|d|j  |jdkr^| jdkr^t| ||S | jdkr||   t| ||S t| rd|_	|j
rt|d t| |S | jdkr|j
rt|d t| |S | jd	kr|jd
krt|d |j
 rt|d t| ||S | jdkr*| jdkr*t| ||S | jdkr| jtkr|jd
krXt|d |j
rv| jdkrvt|d t| ||S | jdkr| jdkrt| ||S t| ||S d S )N)r#   publiczCannot combine 'api' with '%s'r  r   r   Tz$cdef blocks cannot be declared cpdefrX   rX  rV  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_visibilityr3   r    r  r   r?   p_cdef_extern_blockrC   r  r   r6   p_cdef_blockr2   p_c_class_definitionrB   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionr=  r<   rM   r,   r)   r)   r*   rd    sJ    











rd  c                 C   s   t | |ddS )NT)r4   )r  rv  r)   r)   r*   r    s    r  c                 C   s   |j rt|d d }| d | jdkr2|   nt| dd }|ddd}| jd	krn|   t| dd |_t| r|d|_	t
| |d\}}tj|||||jd
S )Nz+cdef extern blocks cannot be declared cpdefr   r   r<  r   Tr  )r4   r3   r7   )include_fileverbatim_includer  r7   )r6   r   r_   r?   rC   rk  rB   r7   r  r   ru  r   ZCDefExternNode)r<   rM   r,   r  r  r  r)   r)   r*   r    s(    




r  c           	      C   s  |    d}| jjr>| jdks2| jdkr>| jdkr>d}|    | jdkr| j}|    t| }|d kr|jd k	r|jd | }nd  }}|r| d |r| jdkr|    t| }| 	d	 nt
j|d
g ddddd}| 	d g }d }| jdkrt| || n<|    |   t| }| jdkr8t| || q|   |s\|jdkr\t|d t
j|||||||j|j|j|j|jdk|dS )NFrX  r>   r  Tr  zUnnamed scoped enum not allowedr   r   rb  r   r   )rE   r  r  r  re  rS  rX   rv  rq  r  zDEmpty enum definition not allowed outside a 'cdef extern from' blockrW  )rE   r  scopedr   underlying_typer5   r3   Zcreate_wrapperr    in_pxdry  )rC   r@   r  r?   rB   r  r7   r   r   r_   r   r  p_c_enum_liner<  rw  r>  r3   ri  r5   r6   r    r2   )	r<   rM   r,   r  rE   r  r  r   ry  r)   r)   r*   p_c_enum_definition  sl    &




      r  )r<   r   c                 C   sZ   | j dkrDt| || | j dkrL|   | j dkr4qLt| || qn|   | d d S )Nr  rG   r  zSyntax error in enum item list)r?   p_c_enum_itemrC   r  )r<   r,   r   r)   r)   r*   r    s    


r  c                 C   sr   |   }t| }t| }|d kr8|jd k	r8|jd | }d }| jdkrV|   t| }|tj	||||d d S )Nr  r   )rE   r  r   )
rL   rF   r  r7   r?   rC   r`   rH   r   ZCEnumDefItemNode)r<   r,   r   rM   rE   r  r   r)   r)   r*   r  "  s    

  r  c           	      C   sp  d}| j dkr8d}|   | jdks.| j dkr8| d | j }|   t| }t| }|d krv|jd k	rv|jd | }d }| jdkr<|   g }| jdkr|   | jd	dd
 nj| d | 	  t
|jd}| jdkr| jdkr|t| |  | q|   | d	 q|   |sF|jdkrFt|d n
| d tj||||||j|j|j|jdk|d
S )NFr  Tr>   r  r  rX   r  r  r  rv  )r3   rr  r  zOEmpty struct or union definition not allowed outside a 'cdef extern from' blockz*Syntax error in struct or union definitionrW  )	rE   r  rG  
attributesr5   r3   r    r  r  )rB   rC   r?   expectedrF   r  r7   r  r_   r<  r!   r3   rH   r=  rL   r>  r   r   rh  r5   r    r2   )	r<   rM   r,   r  rG  rE   r  r  r?  r)   r)   r*   p_c_struct_or_union_definition1  sX    




      r  c                 C   s   |j dkrt|d |   t| }| d |   |   g }| jdkrx| jdkrf|t	|  n|   |   qB| 
  |st|d tj|||dS )z5
    c(type)def fused my_fused_type:
        ...
    rV  z&Fused type definition not allowed hererX   rr  r  zNeed at least one type)rE   types)r2   r   rC   rF   r_   r  r<  r?   rH   r   r>  r   ZFusedTypeNode)r<   rM   r,   rE   r  r)   r)   r*   r  _  s"    






r  c                 C   s&   | j dkrt| ||S t| ||S d S )Nr  )rB   r  r  r  r)   r)   r*   r    s    
r  c                 C   sP   |}| j dkrL| jdkrL| j}|dkrD||krD| jd||f dd |   |S )Nr>   )r  r  readonlyr#   z,Conflicting visibility options '%s' and '%s'Frj   )r?   rB   r   rC   )r<   Zprev_visibilityr3   r)   r)   r*   r    s    r  c                 C   s4   | j dkr0| jdkr0| j}|   |gt|  S g S )Nr>   )r   )r?   rB   rC   p_c_modifiers)r<   modifierr)   r)   r*   r    s
    r  c                 C   s  |j dk}t| }t| d|jd}t| ||d|ddd}|j|_| jdkrn| jdkrn|j dkrn|   d}nd	}| jd
kr| j	dd	d |   t
|  | jdkr|j dkr|js| 	d t| tdd\}}	tj||j|||	|||j|j|d
}
n|r||_|g}| jdkrN|   | jdkr.qNt| ||ddd}|| q
| jd }| jddd |j dkr| j|krt| }nd }tj||j|||j dk||j||jd	}
|
S )N)rY  r[  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.rj   rX   )r  rY  rW  r[  r  z&C function definition not allowed herer  rv   )	r3   r   r   r  ry  r  r    r6   is_const_methodrG   rv  r   z&Syntax error in C variable declarationr  )rW  r[  )r3   r   declaratorsr  ry  r    r  r6   )r2   r  r   r8   r   r6   r?   rB   rC   r   r`   ru  r!   r   re  r3   r    r  rH   Z
start_liner  rw  rf  )r<   rM   r,   r  r  r   r   r  ry  Zsuiter   r  Zdoc_liner)   r)   r*   r=    s|    
 


 

	r=  c                 C   s   |   }|   t| |j}t| }|d|d}|r:d|_| jdkrPt| ||S | jdkrp| jt	krpt
| ||S | jdkr| jdkrt| ||S t| dd}t| |ddd}| jddd	 tj||||||jd
kdS d S )NT)r5   r3   rX  r>   r  r  )r  r~  z"Syntax error in ctypedef statementr  rW  )r   r   r3   r    r  )rL   rC   r  r3   r  r    r?   r  rB   r  r  r  r   r   r  r   ZCTypeDefNoder2   )r<   r,   rM   r3   r    r   r   r)   r)   r*   ra    s0    
  ra  c                 C   sJ   g }| j dkrF|  }|   t| }|tj||d | d q|S )Nr   )	decoratorz"Expected a newline after decorator)r?   rL   rC   rp   rH   r   ZDecoratorNoder  )r<   r   rM   r  r)   r)   r*   rc     s    
rc  c                 C   s0   | j dkr,|tk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.Frj   )r?   r   r   rF   )r<   rE   r)   r)   r*   _reject_cdef_modifier_in_py  s    r  )r<   r   r   c                 C   s   |r|d j n|  }|r"|   |   t| t| }| dd| jdkrP| jn| j  t	| dd\}}}| d t| | j d }| jdkr|   t
| }t| | j t| tdd	\}	}
|r|   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   )rY   r  r  rv   )	rE   r[   r\   r]   ry  r  r   r   return_type_annotation)rM   rL   Zenter_asyncrC   r  rF   r_   r?   rB   r^   r  ru  r!   Z
exit_asyncr   ZDefNode)r<   r   r   rM   rE   r[   r\   r]   r  ry  r  r)   r)   r*   r     sD    

       r   r   )r<   rY   rZ   rK   c              	   C   s4  t | dd|d}d }d }| jdkrt|dkr8| d |   |D ]
}d|_qD| jdkrz|   |t | dd|d n| j|kr| d | jd	kr|   | jd
krt| |d}| jdkr|   |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  rZ   rP   r   zTGot zero positional-only arguments despite presence of positional-only specifier '/'r   rG   z-Syntax error in Python function argument listr   r>   )rZ   )r  r  r  rZ   r   )r  r?   r   r   rC   Zpos_onlyr  p_py_arg_decl)r<   rY   rZ   r[   r\   r]   r   r)   r)   r*   r^   8  sT    


   





    


r^   )r<   rZ   c                 C   sB   |   }t| }d }|r2| jdkr2|   t| }tj|||dS )NrX   )rE   r  )rL   rF   r?   rC   r  r   ZPyArgDeclNode)r<   rZ   rM   rE   r  r)   r)   r*   r  ^  s    r  c           
   
   C   s   |   }|   tt| }| j|_d }d }| jdkrVt| dd\}}t|||\}}|d krlt	j
|g d}t| tdd\}}	tj||||||	|| jjdkdS )	Nr   Fr   r   rX  rv   rP  )rE   basesr   ry  r  r   Zforce_py3_semantics)rL   rC   r   rF   rl  r,  r?   r   r  r   r   ru  r!   r   ZPyClassDefNoder@   rW  )
r<   r   rM   
class_namer  r  r   r   ry  r  r)   r)   r*   rj  i  s,    
   
rj  c                 C   s>  |    g }t| }| jdkr:|    || t| }q|rR|jdkrRt|d |r|| jdkr|| jdkr||    t| }n|}d }d }d }d }	| jdkrt| dd\}
}|r| d	 t||
|\}}|d krt	j
|g d
}| jdkr|jdkr|jst|  d t| \}}}	| jdkrR|jdkr8d}nd}t| t|d\}}n| d d }d }|jdkr|st|d |rt|d nt|jdkr|st|d |st|d nF|jdkr|jr|st|d |st|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 classrX   rW  r[  rY  rv   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')r3   r5   r    r  r  r  r  objstruct_nametypeobj_name
check_sizer  ry  r  )rC   rF   r?   rH   r3   r   rB   r   r  r   r   r    rL   p_c_class_optionsr2   ru  r!   r  r   rg  r5   rm  )r<   rM   r,   r  r  r  r  r  r  r  r   r   r  Z
body_levelry  r  r)   r)   r*   r    s    










r  c                 C   s   d }d }d }|  d | jdkr"q| jdkr>|   t| }nL| jdkrZ|   t| }n0| jdkr|   t| }|dkr| d|  | jdkrq|   q|  d	d
 |||fS )Nr   r>   objectr  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrG   r  z)Expected 'object', 'type' or 'check_size')r_   r?   rB   rC   rF   r   )r<   r  r  r  r)   r)   r*   r    s,    








r  c                 C   sB   |   }|   t| }t| tdddd\}}tj||||dS )NrZ  rv   Trs  )rE   ry  r  )rL   rC   rF   ru  r!   r   ZPropertyNode)r<   rM   rE   ry  r  r)   r)   r*   rk    s      
rk  c                 C   s:   | j dkr6|  }t| }| jddd tj||dS dS )zO
    Parses any kind of ignorable statement that is allowed in .pxd files.
    r.  zSyntax error in stringTr  r   N)r?   rL   r   r  r   r   )r<   rM   Zstring_noder)   r)   r*   rl    s    
rl  c                 C   sP   | j dkrH|  }t| \}}}| jddd |dkr:|S t|d |S d S d S )Nr.  zSyntax error in doc stringTr  rj  2Python 3 requires docstrings to be unicode strings)r?   rL   rB  r  r   )r<   rM   rG  Zbytes_resultZunicode_resultr)   r)   r*   rw     s    

rw  c                 C   s   d}| dkrnpt | tjr:| jjr~| j}tj| jg d} nDt | tjr~| jr~| j}t |d tjr~|d jjr~|d j}|d= |dkrd}n&t |tj	rt
| jd |j}n|j}|| fS )z
    Extract a docstring from a statement or from the first statement
    in a list.  Remove the statement if found.  Return a tuple
    (plain-docstring or None, node).
    Nr  r   r  )r   r   r   ra   Zis_string_literalr  rM   r  r   rE  r   r   )r   Zdoc_noder  ry  r)   r)   r*   rx    s,    
rx  c                 C   s@   t | ||ddd}| jdkr<| dt| jt| jf  |S )Nrv   TrH  rx  !Syntax error in statement [%s,%s])r-  r?   r   rc  rB   )r<   r2   r,   r  r)   r)   r*   p_code.  s    
 r  z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c              
   C   s`  i }| j dkr\|  }t| j}|rR|d }ztj|dd}W nF tk
r } z(| j	|j
d dd |   W Y qW 5 d }~X Y nX |D ]}||krqtj|tkr||  || 7  < || ||< q|| || krt|d|f  q| j	d	||| || f |d
 qd|kr2| j|d  d|krH|d | j_|| |   q|S )NZcommentliner   T)Zignore_unknownr   Frj   zDuplicate directive found: %sz@Conflicting settings found for top-level directive %s: %r and %rr   rW  legacy_implicit_noexcept)r?   rL   !_match_compiler_directive_commentrB   r  r  r
   Zparse_directive_list
ValueErrorr   r[   rC   Zdirective_typesrb  r   r   r@   set_language_levelr  r&   )r<   r   rM   mZdirectives_stringZnew_directiveserE   r)   r)   r*   p_compiler_directive_comments;  sD    
  



r
  c           	      C   s   |   }t| }d| _| jjd kr.| jd |r6dnd}t| }t| ||ddd}| jdkr~| 	d	t
| jt
| jf  t|||||d
S )NF3rW  r  rv   TrH  rx  r  )ry  r  full_module_namedirective_comments)rL   r
  r*  r@   rW  r  rw  r-  r?   r   rc  rB   r   )	r<   r   r  r,   rM   r  r2   ry  r  r)   r)   r*   p_modulec  s"    
 r  c                 C   s8   t | }| jdkr,| d | d d}nd}||fS )Nr   r   FT)rF   r?   r_   )r<   rE   requiredr)   r)   r*   p_template_definitionx  s    


r  c              
   C   s  |    t| }t| }|d kr8|jd k	r8|jd | }| jdkrLt|d | jdkr|    t| g}| jdkr|    |t|  qh| d dd |D }nd }d }| jd	kr|    t	| |d
g}| jdkr|    |t	| |d
 q| d ng }| jdkrt| 
 d t| }| jdkr|    | d |   t|  g }	t|jd|ph|jd}
||
_| jdkr| jdkr|	t| |
 n|    | d qt|   nd }	| d tj|||||j|jdk|	|dS )Nr  r   z*Qualified class name not allowed C++ classr   rG   r  c                 S   s   g | ]\}}|qS r)   r)   )r   rE   r  r)   r)   r*   r     s     z*p_cpp_class_definition.<locals>.<listcomp>r   rz  r   z&Name options not allowed for C++ classrX   rv  r  )r3   r2   r   rr  r  r  z$Syntax error in C++ class definitionrW  )rE   r  base_classesr3   r  r  r8   )rC   rF   r  r7   r?   r   r  rH   r_   r   rL   r  r<  rw  r!   r3   r   r8   p_cpp_class_attributer  r>  r   ZCppClassNoder2   )r<   rM   r,   r  r  r8   Ztemplate_namesr  r   r  r?  r)   r)   r*   r    sj    










r  c                 C   s   |   }d }| jdkrt| }| jdkr4t| ||S | jdkrHt| |S | jdkr| jtkr| jdkrrt| ||S t| ||S nXt| ||}|d k	rt	j
t	jt	jf}|jr|t	jt	jf7 }t||s| d ||_|S d S )Nr   r   rU  r>   r  r   )rL   r?   rc  rB   r  ra  r  r  r=  r   re  rf  rg  r9   rh  ri  r   r   r   )r<   r,   rM   r   r   ro  r)   r)   r*   r    s*    






r  c              	   C   s   | j dkr| jdkst|  }t| x}|   t| }d }| j dkrN|g}| j dkr||   | j dkrlq||t|  qN|d k	rt	j
||d}| d W 5 Q R X |rd S |   |   g }| j dkr|t| | q|   tj|||dS )Nr>   r  rG   rX   r   rr  )subjectcases)r?   rB   r  rL   r   rC   rp   rH   r`   r   r   r_   r  r<  p_case_blockr>  r   Z	MatchNode)r<   r,   rM   r6  r  Zsubjectsr  r)   r)   r*   rn    s2    




rn  c                 C   sp   | j dkr| jdks| d |   |  }t| }d }| j dkrT|   t| }t| |}tj	||||dS )Nr>   Zcaserf   )r'  r  guard)
r?   rB   r  rC   rL   
p_patternsr`   r  r   ZMatchCaseNode)r<   r,   rM   r'  r  r  r)   r)   r*   r    s    


r  c              	   C   s   g }d}|   }t| }t| }W 5 Q R X |rZ|r8qn"|d }| j|jd |jd d || | jdkrd}|   | jdkrqqqq|rtj	||dS |d S d S )	NFr   r   r   rG   T)rX   rf   patterns)
rL   r   p_maybe_star_patternr   r[   rH   r?   rC   r   MatchSequencePatternNode)r<   r  seqrM   r6  r'  r	  r)   r)   r*   r    s(    



r  c                 C   sZ   | j dkrJ|   d }| jdkr*t| }n|   tj|  |dd}|S t| }|S d S )Nr   r  T)r  Zis_star)r?   rC   rB   p_pattern_capture_targetr   MatchAndAssignPatternNoderL   	p_pattern)r<   r  r'  r)   r)   r*   r  1  s    


  r  c              
   C   s  g }|   }|t|  | jdkr&q0|   qt|dkrLtj||d}n|d }| jdkr| jdkr|   t	| }|j
t|  W 5 Q R X |r| jdkr|   tj|d jd |d jd dS |rt	| & t| }tj|jd	dW  5 Q R  S Q R X | |d  |S )
Nr   r   )Zalternativesr   r>   r  r  whatzInvalid pattern target)rL   rH   p_closed_patternr?   rC   r   r   ZOrPatternNoderB   r   Z
as_targetsr  r   	ErrorNoder[   r`   rM   r   )r<   r  rM   r'  r6  ra   r)   r)   r*   r  E  s2    


"
"r  c              
   C   s.  | j dkr.| jdkr.|  }|   t|S | j dkr@t| S | j dkrRt| S | j dkrt| "}t	| }|s|W  5 Q R  S W 5 Q R X t| S t| "}t
| }|s|W  5 Q R  S W 5 Q R X t| "}t| }|s|W  5 Q R  S W 5 Q R X t| $}t| }|s|W  5 Q R  S W 5 Q R X 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   )r?   rB   rL   rC   r   r  p_mapping_patternp_sequence_patternr   p_group_patternp_literal_patternp_capture_patternp_value_patternp_class_pattern)r<   rM   r6  r   r)   r)   r*   r"  i  s6    







r"  c           
      C   s  d}d}| j dkr,| j }|  }|   d}| j }|  }d }|dkrPt| }n$|dkrt| j}|   tj||d}|d k	r|dkrtj||d}|d k	r
| j d	kr
| j }|   | j d
kr| d n>|  }| jd d }|   tj	|||tj
|  |dd}|d kr^|d
kr^| jd d }|   tj
||| d}|dkr^tj||d}|d k	rvtj||dS |r| d |dkrt| }tj||dS |dkrt| }	|	rtj||	ddS | d d S )NFrM  r   Tr+  r,  r   ry   r   r-  zExpected imaginary numberr   )r~   r   zExpected a numberr.  r>   )r   Zis_is_checkzFailed to match literal)r?   rL   rC   r4  rB   r   r5  ZUnaryMinusNoder   rQ   r6  r   MatchValuePatternNoder7  r8  )
r<   Znext_must_be_a_numbersignsign_posr?   rM   resr   Zadd_posr   r)   r)   r*   r'    sd    







r'  c                 C   s   t j|  t| dS )N)r  )r   r  rL   r  r;   r)   r)   r*   r(    s    r(  c                 C   s   | j dkr| d |  }t| | j}|   | j dkrD| d | j dkrx|  }|   t| }tj|||d}qD| j dkr| d| j   t	j
||dS )Nr>   Expected identifierr   r   )r   r   zUnexpected symbol '%s'r   )r?   r   rL   r9  rB   rC   rF   r   r   r   r+  )r<   rM   r.  attr_posattrr)   r)   r*   r)    s    





r)  c                 C   s    |  d t| }|  d |S )Nr   r   )r_   r  )r<   r'  r)   r)   r*   r&    s    

r&  c                 C   s   | j }|  }|dkr|dkr"dnd}|   g }| j |kr|t|  | j dkr^|   q2|dkrt|dkr| d qq2| | tj	||d	S | d
 d S )Nr  r   r  r   rG   r   r   z3tuple-like pattern of length 1 must finish with ','r  zExpected '[' or '(')
r?   rL   rC   rH   r  r   r   r_   r   r  )r<   openerrM   closerr  r)   r)   r*   r%    s     




r%  c           	   	   C   s   |   }| d | jdkr.|   t|S d }g }d }| jdkr|rT|sT|   }| jdkrp|   t| }nTt| }t| }|j	}W 5 Q R X |rt
| }|j	}| d t| }|||f | jdkrq|   q:| d |d k	rtj|ddS tj|dd	 |D d
d	 |D |dS )Nr)  r  r   rX   rG   z7** pattern must be the final part of a mapping pattern.r   c                 S   s   g | ]}|d  qS r   r)   r   kvr)   r)   r*   r   A  s     z%p_mapping_pattern.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r   r)   r5  r)   r)   r*   r   B  s     )keysZvalue_patternsdouble_star_capture_target)rL   r_   r?   rC   r   ZMatchMappingPatternNoder  r   r'  r   r)  r  rH   r   r#  )	r<   rM   r9  Zitems_patternsZstar_star_arg_posr6  r'  r  r   r)   r)   r*   r$    sL    










r$  c           
   	   C   sN  |   }t| | j}|   | jdkrP|   }|   t| }tj|||d}q|}| d | jdkr~|   t	j
||dS g }g }d }| jdkrt| }	|t|  W 5 Q R X |	s|r|   }n"t| }	|t|  W 5 Q R X | jdkrq|   q| d |d k	r&tj|ddS t	j
|||d	d
 |D dd
 |D dS )Nr   r   r   r   )class_rG   z+Positional patterns follow keyword patternsr   c                 S   s   g | ]}|d  qS r4  r)   r5  r)   r)   r*   r   t  s     z#p_class_pattern.<locals>.<listcomp>c                 S   s   g | ]}|d  qS r7  r)   r5  r)   r)   r*   r   u  s     )r:  positional_patternsZkeyword_pattern_namesZkeyword_pattern_patterns)rL   r9  rB   rC   r?   rF   r   r   r_   r   ZClassPatternNoder   rH   r  p_keyword_patternr   r#  )
r<   rM   r.  r0  r1  r:  r;  Zkeyword_patternsZkeyword_patterns_errorr6  r)   r)   r*   r*  G  sP    









 r*  c                 C   sB   | j dkr| d t| | j}|   | d t| }||fS )Nr>   r/  r   )r?   r   r9  rB   rC   r_   r  )r<   r   r   r)   r)   r*   r<  y  s    


r<  c                 C   sZ   | j dkr| d | jdkr(| d t| | j}|   | j dkrV| d| j   |S )Nr>   r/  r  z$Pattern capture target cannot be '_')r   r   r   zIllegal next symbol '%s')r?   r   rB   r9  rC   )r<   r  r)   r)   r*   r    s    




r  rv   c           	      C   s  d| }|  | |r&|  | d |s8|  d nDt|tkr|  d|d  d|d  d |d	d  D ]}t| ||d  qp|  | d
 nt|tjr"z
|j}W n tk
r   |j	j
}Y nX |  | d|j d t|j D ]*\}}|dkr|dkrt| ||d | qnZt|tkrh|  d |D ]}t| ||d  q>|  | d n|  | | d d S )Nz  z: zNone
r   r   z @ r   rw  r   z)
tagrM   z[
z]
)writer  r  print_parse_treer   r   Noder=  r  ri  r/   rM   sortedr%   r   r   )	r>  r   r2   r  indr  r=  rE   r   r)   r)   r*   r?    s4    
 

r?  )r:   )T)NN)r<  )N)N)N)N)F)r   )F)TF)TF)F)r   )r   )F)r   )F)N)FN)N)N)FFFT)NF)r   T)T)N)rT  rP  r  r  r  ior   r   unicodedatar   r   	functoolsr   r   ZScanningr   r   r   rM  r   r   r   r   r   r   r   r   ZErrorsr   r   r   r	   r
   r   r!   ZcfuncrF   rJ   rO   rW   rb   r`   rd   rp   r   ri   rt   ru   rw   r{   r   r   r   r   r   	frozensetr   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   r7  r8  r4  r9  r\  rB  rV  rp  rs  rk  r  r   r   r  r  r   r  r  r0  r  r  r  r1  r2  r  r  r  r   r  r/  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r   r  r  r  r  r  r  r  r&  r%  r0  r3  r   r4  r8  r2  rJ  rL  rN  rR  rT  rp  r-  r  ru  r}  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rd  r  r  r  r  r  r  r  r  r  r  r=  ra  rc  r  r   r  r^   r  rj  r  r  rk  rl  rw  rx  r  r  r  r  r
  r  r  r  r  rn  r  r  r  r  r"  r'  r(  r)  r&  r%  r$  r*  r<  r  r  r?  r)   r)   r)   r*   <module>   s  
             		

2*	
, 

%,g&
/   
n


3	 Q,				 #$y 9	b*

      %	   R	D          6)?-#D
  $%
L	
'?!#1B.1
