a
    b                    @   s	  d dl mZ 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ejejed d dlmZ d dl	Z	d dl
Z
d dlmZmZ d dlmZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZmZmZmZ ddl m Z  ddl!m"Z"m#Z# ddlm$Z$ ddlm%Z% ddlm&Z& e
j'd  dkZ(e
j)dkZ*dZ+G dd deZ,dddZ-dd Z.dd Z/d d! Z0dd#d$Z1d%d& Z2d'd( Z3d)d* Z4d+d, Z5d-d. Z6d/d0 Z7d1d2 Z8d3d4 Z9d5d6 Z:d7d8 Z;d9d: Z<d;d< Z=ee>e>g d=Z?d>d? Z@d@dA ZAdBdC ZBdDdE ZCdFdG ZDdHdI ZEdJdK ZFdLdM ZGdNdO ZHdPdQ ZIdRdS ZJdTdU ZKdVdW ZLdXdY ZMdZd[ ZNd\d] ZOdd^d_ZPd`da ZQdbdc ZRddde ZSdfdg ZTdhdi ZUdjdk ZVdldm ZWdndo ZXddpdqZYdrds ZZdtdu Z[dvdw Z\dxdy Z]dzd{ Z^dd}d~Z_dd Z`dddZadd Zbdd dD \ZcZddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd ZmdddZndddZodd Zpdd Zqdd Zrdd Zsee>e>g dZtdd Zudd Zvdd Zwdd Zxdd Zydd ZzdddZ{dd Z|dd Z}dd Z~dd Zdd ZdddZee>e>g dZddÄ Zddń ZddǄ ZddɄ Zee>e>g dʢZdd̄ Zdd΄ ZddЄ Zdd҄ ZdddՄZdddׄZddل Zddۄ Zee>e>g dܢZddބ Zdd ZdddZdd Zdd Zdd Zdd ZdddZdd ZdddZdddZdd Zdd Zdd ZdddZdddZe, fddZddd ZdddZdddZdd Zee>e>g dZddd	Zdd
dZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zee>e>g dZeeddd d d dd d!d"Zee>e>g d#Zee>eeB e>eB Zee>e>g d$Zd%d& Zd'd( Ze, d d d d d d fd)d*Zd+d, Zd-d. Zee>e>g d/Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zee>e>g d8Ze, d d d d dfd9d:ZÐd;d< ZĐdd=d>ZŐd?d@ ZƐdAdB ZǐdCdD ZȐdEdF ZɐdGdH ZʐdIdJ ZːdKdL Z̐dMdN Z͐dOdP ZΐdQdR ZϐdSdT ZАdUdV ZѐdWdX ZҐdYdZ ZӐd[d\ ZԐd]d^ ZՐdd_d`Z֐ddbdcZאddddeZؐdfdg Zِdhdi Zڐdjdk Zېdldm Zܐdndo Zݐdpdq Zސdrds Zde,fdtduZeee	dvjZdwdx Ze,fdydzZd{d| Zd}d~ Zdd ZdddZdS (      )absolute_importN)Nodes	ExprNodesEncodedStringbytes_literalStringEncodingFileSourceDescriptorlookup_unicodecharunicode_categoryFutureOptionserrorwarningBuiltin
ModuleNodeUtils_unicode_bytesresys_parse_escape_sequences_parse_escape_sequences_rawpartialreduce_IS_PY3_IS_2BYTE_UNICODE_CDEF_MODIFIERS)StringIO)lookupcategory)r   r      )PyrexScannerr   StringSourceDescriptor)r   )r   )r   )r   )r   r   r   r   )r   )r   r      )r   )r   )r      i  )inlinenogilapic                   @   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privater   NFc                 K   s   | j | d S N)__dict__update)selfkwds r0   g/Users/vegardjervell/Documents/master/model/venv/lib/python3.9/site-packages/Cython/Compiler/Parsing.py__init__7   s    zCtx.__init__c                 K   s&   t  }|j}|| j || |S r+   )r(   r,   r-   )r.   r/   ctxdr0   r0   r1   __call__:   s
    
zCtx.__call__)__name__
__module____qualname__level
visibility	cdef_flagtypedef_flagr'   overridabler&   	namespace	templatesallow_struct_enum_decoratorr2   r5   r0   r0   r0   r1   r(   *   s   r(   Expected an identifierc                 C   s*   | j dkr| j}|   |S | | d S NIDENT)sysystringnextr   )smessagenamer0   r0   r1   p_identB   s
    
rJ   c                 C   s<   g }| j dkr8|| j |   | j dkr.q8|   q|S )NrC   ,)rD   appendrE   rF   )rG   namesr0   r0   r1   p_ident_listJ   s    


rN   c                 C   s   |   }| j}|   ||fS r+   )positionrD   rF   )rG   posopr0   r0   r1   p_binop_operatorZ   s    rR   c                 C   s`   || }| j |v r\t| \}}|| }t||||}|dkrtj| jjv rTd|_qd |_q|S )N/T)	rD   rR   r   
binop_noder   divisioncontextfuture_directivesZtruedivision)rG   opsZ
p_sub_exprn1rQ   rP   n2r0   r0   r1   p_binop_expr`   s    
r[   Tc                 C   sp   |   }|   | jdkr(g }d  }}nt| ddd\}}}| d |rTt| }nt| }tj|||||dS )N:F)
terminator	annotated)argsstar_argstarstar_argZresult_expr)	rO   rF   rD   p_varargslistexpectp_testp_test_nocondr   Z
LambdaNode)rG   allow_conditionalrP   r_   r`   ra   exprr0   r0   r1   	p_lambdefo   s"    



rh   c                 C   s   t | ddS )NF)rf   )rh   rG   r0   r0   r1   p_lambdef_nocond   s    rj   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)	rD   rh   rO   	p_or_testrF   rc   rd   r   ZCondExprNode)rG   rP   rg   rn   r)   r0   r0   r1   rd      s    


rd   c                 C   s   | j dkrt| S t| S d S )Nrk   )rD   rj   ro   ri   r0   r0   r1   re      s    
re   c                 C   s   t | dtS )N)or)p_rassoc_binop_expr
p_and_testri   r0   r0   r1   ro      s    ro   c                 C   sH   || }| j |v rD|  }| j }|   t| ||}t||||}|S r+   )rD   rO   rF   rq   r   rT   )rG   rX   Z	p_subexprrY   rP   rQ   rZ   r0   r0   r1   rq      s    
rq   c                 C   s   t | dtS )N)and)rq   
p_not_testri   r0   r0   r1   rr      s    rr   c                 C   s8   | j dkr,|  }|   tj|t| dS t| S d S )Nnotoperand)rD   rO   rF   r   ZNotNodert   p_comparisonrG   rP   r0   r0   r1   rt      s
    
rt   c                 C   sT   t | }| jtv rP|  }t| }t | }tj||||d}| jtv rPt| |_|S )N)operatorZoperand1operand2)	p_starred_exprrD   comparison_opsrO   p_cmp_opr   ZPrimaryCmpNodep_cascaded_cmpcascade)rG   rY   rP   rQ   rZ   r0   r0   r1   rx      s    


rx   c                 C   s   | j dkrt| S t| S d S )N*)rD   r|   rd   ri   r0   r0   r1   p_test_or_starred_expr   s    
r   c                 C   s@   |   }| jdkr d}|   nd}t| }|r<t||}|S )Nr   TF)rO   rD   rF   
p_bit_exprr   ZStarredUnpackingNode)rG   rP   Zstarredrg   r0   r0   r1   r|      s    

r|   c                 C   s@   |   }t| }t| }tj|||d}| jtv r<t| |_|S )N)rz   r{   )	rO   r~   r|   r   ZCascadedCmpNoderD   r}   r   r   )rG   rP   rQ   rZ   resultr0   r0   r1   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 )Nru   inZnot_inisis_not<>!=)rD   rF   rc   rG   rQ   r0   r0   r1   r~      s    



r~   )
<>==>=<=r   r   r   r   ru   c                 C   s   t | dtS )N)|)r[   
p_xor_exprri   r0   r0   r1   r     s    r   c                 C   s   t | dtS )N)^)r[   
p_and_exprri   r0   r0   r1   r   	  s    r   c                 C   s   t | dtS )N)&)r[   p_shift_exprri   r0   r0   r1   r     s    r   c                 C   s   t | dtS )N)<<>>)r[   p_arith_exprri   r0   r0   r1   r     s    r   c                 C   s   t | dtS )N)+-)r[   p_termri   r0   r0   r1   r     s    r   c                 C   s   t | dtS )N)r   @rS   %z//)r[   p_factorri   r0   r0   r1   r     s    r   c                 C   s   t | S r+   )	_p_factorri   r0   r0   r1   r   "  s    r   c                 C   s   | j }|dv 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   rv   r   rC   sizeof)rD   rO   rF   r   Z	unop_noder   in_python_fileZAmpersandNode
p_typecastrE   p_sizeofp_power)rG   rD   rQ   rP   argr0   r0   r1   r   &  s"    r   c           	      C   s   |   }|   t| }t|tj}t|tj}t|tj}|s\|s\|s\|jd u r\| 	d t
| dd}| jdkr|   d}nd}| d t| }|rtj|||dS tj|||||dS )	NzUnknown typer    empty?r   r   )base_type_noderw   )	base_type
declaratorrw   	typecheck)rO   rF   p_c_base_type
isinstancer   MemoryViewSliceTypeNodeTemplatedTypeNodeCConstTypeNoderI   r   p_c_declaratorrD   rc   r   r   ZCythonArrayNodeZTypecastNode)	rG   rP   r   Zis_memsliceZis_templateZis_constr   r   rw   r0   r0   r1   r   9  s6    


r   c                 C   sl   |   }|   | d t| r:t| }tj||d}n$t| }t| dd}tj	|||d}| d |S )N(rv   r    r   r   r   ))
rO   rF   rc   looking_at_exprrd   r   ZSizeofVarNoder   r   ZSizeofTypeNode)rG   rP   rw   noder   r   r0   r0   r1   r   V  s    

r   c                 C   s   |   }|   d}| jdkr*d}|   | jdkrT| jtv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rP   fatalr   )
rO   rF   rD   statement_terminatorsrd   
p_testlistr   r   ZYieldFromExprNodeYieldExprNode)rG   rP   Zis_yield_fromr   r0   r0   r1   p_yield_expressionj  s     
r   c                 C   s   t | }tj|j|dS )Nrg   )r   r   ExprStatNoderP   )rG   Z
yield_exprr0   r0   r1   p_yield_statement  s    r   c                 C   s   | j dkr4d|jv 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')rD   r9   r   p_def_statementp_for_statementrF   p_with_items)rG   r3   
decoratorsr0   r0   r1   p_async_statement  s    




r   c                 C   s   | j dkr"|  d dkr"t| S d }| jdkr@|  }|   t| }| jdv r^t| |}qH|rptj	||d}| jdkr|  }|   t
| }t|d||}|S )Nnewr   rC   await)r   [.r   **)rE   peek
p_new_exprrD   rO   rF   p_atom	p_trailerr   ZAwaitExprNoder   rT   )rG   Z	await_posrY   rP   rZ   r0   r0   r1   r     s"    


r   c                 C   s,   |   }|   t| }t| tj||dS )N)cppclass)rO   rF   r   p_callr   ZNewExprNode)rG   rP   r   r0   r0   r1   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)rO   rD   r   p_indexrF   rJ   r   AttributeNode)rG   node1rP   rI   r0   r0   r1   r     s    



r   c           
      C   s  |   }|   g }g }d}d}| jdkrP| jdkrh|rL| 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rFqP|   q | jdv 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rP   Tr   =z!Expected an identifier before '='valuerK   r   asyncr    r   )rO   rF   rD   r   rL   rd   is_namerP   rV   intern_ustringrI   r   IdentifierStringNodelenp_genexprc   )
rG   allow_genexprP   positional_argskeyword_argsZstarstar_seenZlast_was_tuple_unpackr   encoded_namekeywordr0   r0   r1   p_call_parse_args  sZ    



 
r   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   r0   r1   
<listcomp>  s   z,p_call_build_packed_args.<locals>.<listcomp>r   rP   keyr   r   T)key_value_pairsreject_duplicatesr    )r   )r   r   r   rT   r   tuplerL   DictItemNoderP   is_dict_literalextendr   DictNoder   MergedDictNode)rP   r   r   keyword_dictZ	subtuples	arg_tuplekwargs
dict_itemsitemr   r   r0   r   r1   p_call_build_packed_args  s:    


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   )	rO   r   r   r   r   r   ZSimpleCallNoder
  ZGeneralCallNode)rG   r  rP   r   r   r  r  r0   r0   r1   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])
rO   rF   p_subscript_listr   r   SliceIndexNodemake_slice_nodesr   	IndexNoderc   )
rG   r  rP   
subscriptsis_single_valuer  r  r   indexesr  r0   r0   r1   r   =  s"    


r   c                 C   sH   d}t | g}| jdkr@d}|   | jdkr0q@|t |  q||fS )NTrK   Fr  )p_subscriptrD   rF   rL   )rG   r  itemsr0   r0   r1   r  Q  s    


r  c                 C   sb   |   }t| d}| jdkr"|gS |   t| d}| jdkrF||gS |   t| d}|||gS )N)r\   r\   )r\   rK   r  )rO   p_slice_elementrD   rF   )rG   rP   r  r  stepr0   r0   r1   r  ^  s    




r  c                 C   s   | j |vrt| S d S d S r+   )rD   rd   )rG   Z
follow_setr0   r0   r1   r  n  s    
r  c                 C   s"   |  d |  d |  d d S Nr   )rc   ri   r0   r0   r1   expect_ellipsisv  s    

r  c                 C   sD   g }|D ]6}t |dkr(||d  q|t| g|R   q|S )Nr    r   )r   rL   make_slice_node)rP   r  r   	subscriptr0   r0   r1   r  {  s    r  c                 C   s<   |st | }|st | }|s*t | }t j| |||dS )N)r  r  r  )r   NoneNodeZ	SliceNode)rP   r  r  r  r0   r0   r1   r    s    


r  c           	      C   sN  |   }| 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rt| \}}}|dkr>tj||dS |dkrXtj|||dS |dkrptj||dS |dkrtj||dS |dkrtj|||dS | d|  n|dkr@| j}|dkrt|}n\|dkrtj|dd}nB|dkrtj|dd}n(|dkr*| js*t|}n
t| |}|   |S | d d S ) Nr   r   r   yieldr   {`r   INTFLOATr   ZIMAGr   BEGIN_STRINGcu)r   bytes_valuebfvalues )r   unicode_valuezinvalid string kind '%s'rC   NoneTrueTFalseFZNULLz!Expected an identifier or literal)rO   rD   rF   r   r   r   p_testlist_comprc   p_list_makerp_dict_or_set_makerp_backquote_exprr  EllipsisNodep_int_literalrE   	FloatNodeImagNodep_cat_string_literalCharNodeUnicodeNode	BytesNodeJoinedStrNode
StringNoder   r!  BoolNoder   ZNullNodep_name)	rG   rP   rD   r   r   kindr*  r0  rI   r0   r0   r1   r     sr    
















r   c                 C   s   |   }| j}|   d}d}|d dv rV|d dv r@|d7 }n|d7 }|d d }qd }|rdd}n|r|dks|| jjd	krd}| jr|rt|d
 d}tj|||||dS )Nr/  r   ZUuLlZLlLUTZLLr$   z4illegal integer literal syntax in Python source fileF)is_c_literalr   unsignedlongness)	rO   rE   rF   rV   language_levelr   r   r   IntNode)rG   rP   r   rH  rI  rG  r0   r0   r1   r9    s4    

r9  c                 C   sH   |   }| js:|| jv r:| j|}t||}|d ur:|S tj||dS )NrI   )rO   compile_time_exprcompile_time_envZlookup_herewrap_compile_time_constantr   NameNode)rG   rI   rP   r   r   r0   r0   r1   rC    s    
rC  c                    s  t |}|d u rt S |tu r,t S t|trDtj |dS t|tr^tj	 ||dS t|t
rxtj ||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rR fdd|D }d |vrLtj |d	S d S n(tszt|trztj	 |d
|dS t d||jjf  d S )Nr   )r   constant_resultg        r   )rQ  asciic                    s   g | ]}t  |qS r0   )rO  r   r   r0   r1   r     s   z.wrap_compile_time_constant.<locals>.<listcomp>r   rE  z4Invalid type for compile-time constant: %r (type %s))reprr   r!  Ellipsisr8  r   boolrB  intrK  floatr:  complexr;  imagrealrT   r   r>  r   r   r   r?  r   r   r   longrstripr   	__class__r6   )rP   r   repr   Zbvaluer_   r0   r   r1   rO    sJ    









rO  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 qPnF||krt||gtddgtddgfv rd}nt|d||f  qP||	 ||
 || qP|dv s
|dkrd |vrtt|| j	}|d	v r>t
dd
d |D }|dkrg }t||D ]8\}}t|trt||7 }n|tj|t
|d qV|||fS )Nr(  r'  zCCannot concatenate char literal with another string or char literalr,  r)  r/  zFCannot mix string literals of different types, expected %s'', got %s'')r+  r(  r/  r)  r/  c                 S   s   g | ]}|d ur|qS r+   r0   )r   r)  r0   r0   r1   r   F      z(p_cat_string_literal.<locals>.<listcomp>r   )rO   p_string_literalrD   r   setrL   r   r   Z
join_bytessource_encodingr   joinzipr   r   r   r>  )rG   rP   rD  r*  r0  ZbstringsZustringsZ	positionsZ	next_kindZnext_bytes_valueZnext_unicode_valuer)  r0   r0   r1   r<  &  sB    


$




r<  r)  c                 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)rD   rO   ra  r   )rG   Zrequired_typerP   rD  r*  r0  r0   r0   r1   p_opt_string_literalR  s    
rf  c                 C   s   | D ]}|dkr dS qdS )N   TFr0   )stringr(  r0   r0   r1   check_for_non_ascii_charactersa  s    ri  c                 C   sP  |   }| jjdk}d}|d |d |d t| j f}| jd }t|dkrtt|t|krrt|d d|v rd	|v rt|d
 d|v rd|v rt|d d	|v rd|v rt|d d|v }d|v rt|dkrt|d d}n6d|v rd}d}n$d|v rd}nd	|v rd	}nd}|dkrX|d u rXt	j
| jjv rXt| j}	d	}nP|d urp|dv rp|}|dv rt }	n$|dkrt| j}	nt| j}	|   | j}
| j}|
dkr|	| |r|st|rd}n|
dkrP|r@|s|d	ks|d dvr@|	| |rN|sNt|rNd}nt||	||  nT|
dkrf|	d n>|
dkrv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v r |dkr| jd |d d }|dkr>t| ||d|v d!}|   |||fS )"Nr$   Fr   r    r#   z"'z!Duplicate string prefix characterr+  r)  z*String prefixes b and u cannot be combinedr,  z*String prefixes b and f cannot be combinedz*String prefixes u and f cannot be combinedrr(  z+Invalid string prefix for character literalTr/  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)rO   rV   rJ  r   rE   r\  lowerrb  r   r   unicode_literalsrW   r   ZStrLiteralBuilderrc  UnicodeLiteralBuilderZBytesLiteralBuilderrF   rD   rL   ri  _append_escape_sequenceZgetcharZ
getstrings
p_f_string)rG   Zkind_overriderP   Zis_python3_sourceZ has_non_ascii_literal_charactersZstring_start_posZkind_stringro  rD  charsrD   Zsystrr0  r*  r0   r0   r1   ra  h  s    
 






$





$






ra  c              	   C   s"  |d }|dv r,| t|dd  d n|dv rB|| n|dv r^|t| n|dkrjn|dkrt|dkr| t|d	d  d
 n|jd| dd np|dv r| dv rd}|dkrd }zt|dd }t|}W n t	y(   |jdt
|dd d dd Y n ty   |d urtrt|d	krt|d dkrt|d dkrdt|d d  dt|d d  ? }n Y n0 nPt|dv rt|d	d  d
}|dkr|d|  d}n|jd| dd |dkr||| n
|| d S )Nr    01234567   z'"\Zabfnrtvrm  x   r#      zInvalid hex escape '%s'Fr   ZNUu)r)  r,  r/  r   Nr$   z!Unknown Unicode character name %sr)  r   Csi   i   
   i   )   r~  i zInvalid unicode escape '%s')Zappend_charvalrV  rL   r   Zchar_from_escape_sequencer   r   r	   ordKeyErrorrS  lstrip	TypeErrorr   r
   Zappend_uescape)rD  builderZescape_sequencerG   r(  ZchrvalZucharr0   r0   r1   rs    sV    

*


rs  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   ro  r0   r0   r1   r     s   
r   )TFc                 C   s   | d | d | d | d fS )Nr   r    r#   r0   )rP   rh  ir0   r0   r1   _f_string_error_pos  s    r  c                 C   sj  g }d}t |}t }|r tnt}||k rF|}	|||}
|
d u 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   rr  r   r   r   r  endgrouprs  rL   ru  r   r>  Z	getstringp_f_string_expr)rG   r0  rP   ro  r.  Z
next_startsizer  Z
_parse_seqr  r  partr(  Z	expr_noder0   r0   r1   rt    sF    




rt  c                 C   s  |}t |}d  } }}	d }
d}d}|}d}d}||kr<q|| }||kr|dkrp|sjtt|||d d}nN||kr|r|d |k r||d  |kr||d  |krd}|}|d7 }n|}n|d	v r|}|d |k r||d  |kr||d  |krd}|d7 }n|d
v r"|d7 }n|dkr@|dv r@|d8 }nn|dkr^tt|||d nP|dkr|dv r|dkr|d |k r||d  dkr|d7 }q0|}q|d7 }q0||| dddd}|d |d |d | d f}| stt|||d |dkrH|d7 }|d |kr0n|| }|d7 }|| }|dkr8d}d}d}|d }||krtq,|| }|s|s|dkr|d7 }n&|dkr|dkr|d8 }n|}q,|d	v r |s|d |k r||d  |kr||d  |kr| }|d7 }n|s | }|d7 }qf||| }
|dkrftt|||d|r^d| nd  td| }t||d | | j|d}t|}|d urt	j
|st|d|  |
rt	j|t| |
||d}	|d t	j
||||	dfS ) Ni   @r   Fr  z$backslashes not allowed in f-stringsTr#   r    z'"z{[(z}])#zformat string cannot include #z!:}!r   z
rm  z(empty expression not allowed in f-stringr\   r#  r  z'missing '}' in format string expressionz, found '%s'r/  z(%s))Zparent_scannerrc  Zinitial_posz!invalid conversion character '%s'r-  )r   conversion_charformat_spec)r   r   r  replacestripr   r!   rc  r   r   ZFormattedValueNodeZfind_conversion_funcr@  rt  )rG   r0  rP   Zstarting_indexro  r  r  r  Zterminal_charr  Zformat_spec_strZNO_CHARZnested_depth
quote_charZin_triple_quotesZbackslash_reportedr(  Zexpr_strZexpr_posZ	in_stringZstart_format_specbufscannerrg   r0   r0   r1   r  D  s    ,

2




*










8


r  c                 C   s   |   }|   | jdkr2| d tj|g dS t| }| jdv 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   r$   )looprL   typeZhas_local_scoperK   )rO   rF   rD   rc   r   ListNoder   
is_starredr   ComprehensionAppendNode
p_comp_forComprehensionNoder   Z	list_typerV   rJ  p_test_or_starred_expr_list)rG   rP   rg   rL   r  exprsr0   r0   r1   r5    s,    









r5  c                 C   s0   | j dv rt| |S | j dkr(t| |S |S d S )Nr   rl   )rD   r  	p_comp_if)rG   bodyr0   r0   r1   p_comp_iter  s
    



r  c                 C   sb   |   }d}| jdkr"d}|   | d t| d|d}|jd t| ||d tj|fi |S )NFr   Tr   allow_testlistr   )else_clauser  r   )	rO   rD   rF   rc   p_for_boundsr-   r  r   ForStatNode)rG   r  rP   r   kwr0   r0   r1   r    s    

r  c                 C   s<   |   }|   t| }tj|tj||t| |dgd dS )N	conditionr  
if_clausesr  )rO   rF   re   r   
IfStatNodeIfClauseNoder  )rG   r  rP   rn   r0   r0   r1   r    s    r  c                 C   s  |   }|   | jdkr0|   tj|g dS g }d}d}| jdv 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v rrt|dkr0t|d tr0t|d dkr0|d d }|dkrt|tjsJ t|tj}tj|j|j|jd}	ntj}tj|j|d}	t| |	}
| 
d tj||
|	|dS t|dk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 literalrb  dictzexpected expression, found '*'r\   )r   r   r   TrK   r   )Zkey_exprZ
value_exprr   )r  rL   r  r  r   )r_   r  )r   r   )rO   rF   rD   r   r  r   r   r|   rL   rd   rc   r   rP   r   r   r  r   	dict_typeZDictComprehensionAppendNoder   r   set_typer  r  r  r  ZSetNodeZis_set_literalZMergedSequenceNoder  r  )rG   rP   partsZtarget_typeZlast_was_simple_itemr	  r   r   Zcomprehension_typerL   r  r  Z	set_itemsr  r  r0   r0   r1   r6    s    






0





r6  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 )NrK   r$  r    r   r   r   )
rO   rF   rd   rD   rL   rc   r   r   r   ZBackquoteNode)rG   rP   r_   r   r0   r0   r1   r7  z  s    



r7  c                 C   sD   |d ur|gpg }| j tvr@|t|  | j dkr6q@|   q|S NrK   )rD   expr_terminatorsrL   rd   rF   rG   rg   r  r0   r0   r1   p_simple_expr_list  s    


r  c                 C   sD   |d ur|gpg }| j tvr@|t|  | j dkr6q@|   q|S r  )rD   r  rL   r   rF   r  r0   r0   r1   r    s    


r  c                 C   sB   |   }t| }| jdkr:|   t| |}tj||dS |S d S NrK   r   )rO   rd   rD   rF   r  r   r   rG   rP   rg   r  r0   r0   r1   r     s    

r   c                 C   sB   |   }t| }| jdkr:|   t| |}tj||dS |S d S r  )rO   r   rD   rF   r  r   r   r  r0   r0   r1   p_testlist_star_expr  s    

r  c                 C   sV   |   }t| }| jdkr:|   t| |}tj||dS | jdv rNt| |S |S d S )NrK   r   r   )rO   r   rD   rF   r  r   r   r   r  r0   r0   r1   r4    s    



r4  c                 C   s2   t | tj|jtj|j|dd}tj|j|dS )Nr   r   )r  )r  r   r   rP   r   r   ZGeneratorExpressionNode)rG   rg   r  r0   r0   r1   r     s    r   )r   r  r  r\   r   rl  c                 C   s&   |   }|   t| }tj||dS N)rM   )rO   rF   rN   r   Z
GlobalNoderG   rP   rM   r0   r0   r1   p_global_statement  s    r  c                 C   s&   |   }|   t| }tj||dS r  )rO   rF   rN   r   ZNonlocalNoder  r0   r0   r1   p_nonlocal_statement  s    r  c                 C   s  t | }| jdkr6|js$|js$|jr6|   t| |_| jdkrV|jrV| j	d|j
d |g}| jdkr|   | jdkrt| }nt | }|| q\t|dkrptd| jrX|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r<t| }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 )Nr\   r   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   )rz   lhsrhsr   r#   r  r  )Zlhs_listr  ) r  rD   r   Zis_subscriptZis_attributerF   rd   
annotationr  r   rP   r   rL   r   r   r  r   r   r  r  r  r  r  r  r   rP  r   r   ZInPlaceAssignmentNoder   SingleAssignmentNodeZCascadedAssignmentNode)rG   rg   Z	expr_listr  rz   r  r0   r0   r1   p_expression_or_assignment  sL    




r  c                 C   s   |   }d}|   | jdkrL|   t| }| jdkrP|   | jdv }nd }g }| jdvr|t|  | jdkr|   | jdv rd}q|t|  qltj||d}tj|||| dS )Nr   r   rK   rl  rn  r    r   )r  streamZappend_newline)	rO   rF   rD   rd   rL   r   r   r   ZPrintStatNode)rG   rP   Zends_with_commar  r_   r  r0   r0   r1   p_print_statement  s0    




r  c                 C   s   |   }|   t| }t|tjrZd}|j}t|dv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#   r$   z.expected tuple of length 2 or 3, got length %dFr   r   z@tuple variant of exec does not support additional 'in' argumentsr{  rK   r   )rO   rF   r   r   r   r   r_   r   r   rD   rL   rd   r   ZExecStatNode)rG   rP   codeZtuple_variantr_   r0   r0   r1   p_exec_statement-  s0    

r  c                 C   s&   |   }|   t| }tj||dS )Nr   )rO   rF   r  r   ZDelStatNode)rG   rP   r_   r0   r0   r1   p_del_statementH  s    r  c                 C   s.   |   }| d |r$| jddd t|S )NpassExpected a newlineTZignore_semicolon)rO   rc   expect_newliner   PassStatNode)rG   with_newlinerP   r0   r0   r1   p_pass_statementP  s
    
r  c                 C   s   |   }|   t|S r+   )rO   rF   r   ZBreakStatNodery   r0   r0   r1   p_break_statementW  s    r  c                 C   s   |   }|   t|S r+   )rO   rF   r   ZContinueStatNodery   r0   r0   r1   p_continue_statement]  s    r  c                 C   s6   |   }|   | jtvr$t| }nd }tj||dS )Nr   )rO   rF   rD   r   r   r   ZReturnStatNode)rG   rP   r   r0   r0   r1   p_return_statementc  s    

r  c                 C   s   |   }|   d }d }d }d }| jtv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 )NrK   r   )exc_type	exc_valueexc_tbcause)rO   rF   rD   r   rd   r   ZRaiseStatNodeZReraiseStatNode)rG   rP   r  r  r  r  r0   r0   r1   p_raise_statementm  s2    




r  c              
   C   s  |   }| j}|   t| ddg}| jdkrJ|   |t| dd q$g }tj| jjv }|D ]\}}}}|dkrt	j
||||d}	nr|rd|v rtj|tj|| jddgd	}
nd }
t	j|tj||p|d
tj|tj||d|rdnd |
dd}	||	 q`t	j||dS )Nr    
as_allowedrK   cimport)module_nameas_nameis_absoluter   r   r   r   rL  r   r  r9   	name_listr  stats)rO   rD   rF   p_dotted_namerL   r   r   rV   rW   r   ZCImportStatNoder   r  r   r   r  rP  
ImportNodeStatListNode)rG   rP   rD  r  r  r  target_namedotted_namer  statr  r0   r0   r1   p_import_statement  sD    


r  c              	   C   s  |   }|   | jdkr<d}| jdkr@|d7 }|   qnd }|d urj| jdv rj|   | jd }}n.|d u rtj| jjv rd}t| dd\}}}}| jdvr| 	d | j}|   |d	k}d}	| jd
kr|   | jd
d d fg}
|   n$| jdkrd}	|   t
| |g}
| jdkrV|   |	rB| jdkrB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y   | 	d| | Y  qY n0 | jj| qt|S |d	kr4tj||||
dS g }g }|
D ]@\}}}}|tj||d ||tj||pt|df q@tj|
d d |d}tj|tj|tj||d||d|dS d S )Nr   r   r    importr  r/  Fr  zExpected 'import' or 'cimport'r  r   r   TrK   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   rL  r   r  )moduler  )rO   rF   rD   rV   r   r   r   rW   r  r   p_imported_namerL   rc   getattrAttributeErroraddr   r  ZFromCImportStatNoder   r   rP  r  ZFromImportStatNoder  )rG   first_statementrP   r9   Zdotted_name_posr  _rD  
is_cimportZis_parenthesizedr  Zname_posrI   r  	directiveZimported_name_stringsr  Zimport_listr0   r0   r1   p_from_import_statement  s    










r  )classstructunionc                 C   sD   |   }d }|r(| jtv r(| j}|   t| }t| }||||fS r+   )rO   rE   imported_name_kindsrF   rJ   	p_as_name)rG   r  rP   rD  rI   r  r0   r0   r1   r    s    r  c                 C   sb   |   }t| }d }|g}| jdkr<|   |t|  q|rHt| }||| jd||fS r  )	rO   rJ   rD   rF   rL   r  rV   r   rd  )rG   r  rP   r  r  rM   r0   r0   r1   r    s    
r  c                 C   s,   | j dkr$| jdkr$|   t| S d S d S )NrC   as)rD   rE   rF   rJ   ri   r0   r0   r1   r    s    r  c                 C   sH   |   }|   t| }| jdkr4|   t| }nd }tj|||dS )NrK   )condr   )rO   rF   rd   rD   r   ZAssertStatNode)rG   rP   r  r   r0   r0   r1   p_assert_statement!  s    

r  );rl  rn  c                 C   sT   |   }|   t| g}| jdkr<|   |t|  qt| }tj|||dS )Nelifr  )rO   rF   p_if_clauserD   rL   p_else_clauser   r  )rG   rP   r  r  r0   r0   r1   p_if_statement0  s    

r
  c                 C   s(   |   }t| }t| }tj|||dS )Nr  )rO   rd   p_suiter   r  )rG   rP   rn   r  r0   r0   r1   r  <  s    r  c                 C   s"   | j dkr|   t| S d S d S )Nrm   )rD   rF   r  ri   r0   r0   r1   r	  C  s    
r	  c                 C   s:   |   }|   t| }t| }t| }tj||||dS )N)r  r  r  )rO   rF   rd   r  r	  r   ZWhileStatNode)rG   rP   rn   r  r  r0   r0   r1   p_while_statementJ  s    r  Fc                 C   sP   |   }|   t| d|d}t| }t| }|j|||d tj|fi |S )NTr  )r  r  r   )rO   rF   r  r  r	  r-   r   r  )rG   r   rP   r  r  r  r0   r0   r1   r   V  s    r   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 u 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   rL  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_targetrD   rF   p_for_iteratorr  r   r   p_for_from_relationrO   rJ   p_for_from_stepr   rP  r   r   rP   rI   rc   )rG   r  r   r  r  r  Zrel1Z	name2_posZname2Zrel2_posZrel2r  r  r0   r0   r1   r  a  sP    





r  c                 C   s*   | j tv r| j }|   |S | d d S )Nz#Expected one of '<', '<=', '>' '>=')rD   inequality_relationsrF   r   r   r0   r0   r1   r    s
    
r  c                 C   s0   | j dkr(| jdkr(|   t| }|S d S d S )NrC   Zby)rD   rE   rF   r   )rG   r  r0   r0   r1   r    s
    r  )r   r   r   r   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  )rO   r|   rD   rF   rL   r   r   )rG   r]   rP   rg   r  r0   r0   r1   p_target  s    



r  c                 C   s
   t | dS )Nr   )r  ri   r0   r0   r1   r    s    r  c                 C   s6   |   }|rt| }nt| }|r(tjntj||dS )N)sequence)rO   r   ro   r   ZAsyncIteratorNodeZIteratorNode)rG   r  r   rP   rg   r0   r0   r1   r    s
    
r  c                 C   s   |   }|   t| }g }d }| jdv 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)exceptrm   r  rm   )r  except_clausesr  finally)r  finally_clausezExpected 'except' or 'finally')
rO   rF   r  rD   rL   p_except_clauser   ZTryExceptStatNodeZTryFinallyStatNoder   )rG   rP   r  r  r  r  r0   r0   r1   p_try_statement  s0    




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 )
NFr\   rK   rC   r  r#   rL  T)patternr  r  is_except_as)rO   rF   rD   rd   r   r   r   r_   rE   rV   rJ  rJ   rP  r  r   ZExceptClauseNode)rG   rP   r  r  r  pos2rI   r  r0   r0   r1   r    s4    


r  c           
      C   s   |   }|   t| dd }| d | jr|}| j||}|r| j| t	
|8}t|}t||| |j| jd}t||}	W d    n1 s0    Y  |	S d S n
t|S d S )Nr)  r#   z!Syntax error in include statement)rc  parse_comments)rO   rF   ra  r  compile_time_evalrV   Zfind_include_fileZincluded_filesrL   r   Zopen_source_filer   r!   encodingr!  p_statement_listr   r  )
rG   r3   rP   Zunicode_include_file_nameZinclude_file_nameZinclude_file_pathr,  Zsource_descs2treer0   r0   r1   p_include_statement  s     
(r'  c                 C   s.   |    | jdkr"| js"t| }nt| }|S )Ntemplate)rF   rE   r   p_with_templater   )rG   r   r0   r0   r1   p_with_statement	  s
    
r*  c                 C   s   |   }| jsr| jdkrr| jdv rr|r0| d | j}|   | jdkrZ|   t| }nt| }tj	|||dS t
| }d }| jdkr| jdkr|   t| }| jdkr|   t| |d}nt| }tj|||||dS )	NrC   )r&   gilzwith gil/nogil cannot be asyncrK   )stater  r  r   )managerr  r  r   )rO   r   rD   rE   r   rF   r   r  r   ZGILStatNoderd   r|   ZWithStatNode)rG   r   rP   r,  r  r-  r  r0   r0   r1   r     s*    



r   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   rK   r  r\   z-Syntax error in template function declaration)rO   rF   rc   rL   rE   rD   r  expect_indentr(   r?   p_c_func_or_var_declarationexpect_dedentr   )rG   rP   r?   body_ctxZfunc_or_varr0   r0   r1   r)  -  s*    





r)  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
v 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continuereturnraiser  r   r  r"  assertr  )rD   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  )rG   r  r   r0   r0   r1   p_simple_statementE  s<    






















r=  c                 C   s   t | |d}|j}g }t|tjs,|| | jdkrt|   | jdv rJqtt | |d}t|tjrdq,|| d}q,|st|}n$t|dkr|d }ntj	||d}| jdvrt|tj
r|jjr|jjdkr| d	| | d
 |S )Nr;  r  r  Fr    r   r  cdefz@The 'cdef' keyword is only allowed in Cython files (pyx/pxi/pxd)z%Syntax error in simple statement list)r=  rP   r   r   r  rL   rD   rF   r   r  r   rg   r   rI   r   r  )rG   r3   r  r  rP   r  r0   r0   r1   p_simple_statement_listg  s2    






r?  c                 C   s   | j }d| _ t| }|| _ |S )Nr    )rM  r   )rG   oldrg   r0   r0   r1   p_compile_time_expr  s
    rA  c                 C   sd   |   }| j}|   t| }| d t| }| jrL||}||| | j	ddd t
|S )Nr   r  Tr  )rO   rN  rF   rJ   rc   rA  r"  compile_time_valuedeclarer  r   r  )rG   rP   denvrI   rg   r   r0   r0   r1   p_DEF_statement  s    

rE  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)rO   r"  rN  rF   rA  rU  rB  r  rD   r   r  )	rG   r3   rP   Z
saved_evalZcurrent_evalrD  r   rg   r  r0   r0   r1   p_IF_statement  s0    




rG  c           	      C   s  |j }d }| jdkr2|jdvr(| d t| |S | jdkrDt| S | jdkrXt| |S | jdkr|jdvrv| d |j| _t| }|js| jd	vr| jd
kr| j	dkrq| d n| jdkr|rt
| ddS d}| jdkrd}|   n| jdkr
d}d}|   |r|jdvr&| d |j| _t| ||d}|d urtjtjtjf}|jrp|tjtjf7 }t||s| d ||_|S |jr| jddd n | jdkrd|jv r|jdkr| d |j| _t| |S | jdkr|jdvr| d t| |S | jd krB|jdvr8| d! t| |S |jd"krn| jd
krn| j	d#krnt| S | jdkr|jd#krt
| d$dS |jd%v rt| }|d ur|S | d& | jd'krt| S | jd(krt| S | jd)krt| S | jd*krt| S | jd+kr"t| S | jdkrB|   t | ||S | jd
kr| j	dkr| j	}|   | jdkrt | ||S |r| d | !d
| t"| ||d,S d S )-Nctypedefr  
module_pxdz#ctypedef statement not allowed hereZDEFZIFr   )r  r  c_classr  propertyrJ  c_class_pxdr)   zdecorator not allowed here)r   r>  cpdefr  r   rC   r   r   r  r    )r  r   r>  rN  )r  rJ  r  rK  rM  zcdef statement not allowed here)r=   %'api' not allowed with this statementFr{  r   r   rM  r   r  )r  r  r  r)   z!class definition not allowed hereincludez"include statement not allowed hererK  rL  T)rM  rL  z%Executable statement not allowed hererl   whiler   tryr   r;  )#r;   rD   r9   r   p_ctypedef_statementrE  rG  p_decoratorsr@   rE   r  rF   p_cdef_statementr   CFuncDefNodeCVarDefNodeCClassDefNodeCStructOrUnionDefNodeCEnumDefNoder   r   r'   r   p_class_statementr'  p_property_declp_ignorable_statementr
  r  r   r  r*  r   put_backr?  )	rG   r3   r  r;   r   r=   r   tupZ
ident_namer0   r0   r1   p_statement  s    




















$


r`  c                 C   sv   |   }g }| jdvrBt| ||d}t|tjr2q|| d}q|sPt|S t|dkrd|d S tj||dS d S )NDEDENTrn  r;  Fr    r   r  )	rO   rD   r`  r   r   r  rL   r   r  )rG   r3   r  rP   r  r  r0   r0   r1   r$   	  s    


r$  c                 C   s   t | |ddd S )NFwith_doc_onlyr    )p_suite_with_docstringrG   r3   r0   r0   r1   r  2	  s    r  c                 C   s   |  d d }| jdkrH|   |   |r4t| }t| |}|   n@|jr\| jddd |j	dv rrt
| |}nt| }| jddd	 |st|\}}||fS )
Nr\   rl  rO  Fr{  )r  r  r  r)   zSyntax error in declarationsTr  )rc   rD   rF   r.  p_doc_stringr$  r0  r'   r   r9   r?  r  r  _extract_docstring)rG   r3   rd  docr  r0   r0   r1   re  6	  s$    




re  c                 C   s  g }g }d}| j |vr| j dks,| j dkr:| jddd d}| j dk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 |v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.Fr{  rC   r   r?   r    r   r   Tr   r   r   rK   zUnmatched %sz or )rD   r   r   rE   rF   r   rd   r   r   r   CComplexBaseTypeNoderP   r   r   rL   r   rd  )rG   Z
end_sy_setr?   r   r   Zpos_idxZparsed_typeidentr   r   r   Zkeyword_nodeZwas_keywordr0   r0   r1   p_positional_and_keyword_argsM	  sV    



rm  c                 C   s*   | j dkrt| |dS t| |||dS d S )Nr   rj  nonemptyr?   )rD   p_c_complex_base_typep_c_simple_base_type)rG   	self_flagro  r?   r0   r0   r1   r   	  s    
r   c                 C   s.   | j dkr&| jtv r&| j}|   |S dS d S )NrC   r/  )rD   rE   calling_convention_wordsrF   )rG   r   r0   r0   r1   p_calling_convention	  s
    rt  )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 )	Nrj  Tr   r   rK   r   )
componentsr   )rO   rF   r   r   r   rk  rD   rL   ZCTupleBaseTypeNoderc   is_memoryviewslice_accessp_memoryviewslice_accessp_buffer_or_template)rG   r?   rP   r   r   	type_noderu  r0   r0   r1   rp  	  s2    





rp  c                 C   s  d}d}d}d}g }|   }	| jdks6t|	d| j  | jdkr|   t| |||d}
t|
tjrztj	|	|
j
d|
_
|
S tj	|	|
dS t| r"d}| jdkr| jtv rt| j \}}| j}|   n4t| \}}| jdkr| jtv r| j}|   nd}| jdkr| jd	krd}|   nt| rf| j}|   | jd
kr|| |   t| }q:n| j}|   |r| jdkr| jdkr|   | jdks| jdks| jdks| jdkr| jtv r| dd n| dd | d| d }n| jdvr| d| d }tj|	||||||||d	}| jdkrht| r\t| |}nt| ||}| jd
kr|   t| }tj|	||d}|S )Nr   r    rC   z"Expected an identifier, found '%s'const)rr  ro  r?   )r   rV  rX  r   r   r   r   r   )r   r   r   r   rI   module_pathZis_basic_c_typesignedrX  rI  is_self_argr?   r   )r   rI   )rO   rD   r   rE   rF   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_namerL   rJ   rs  r^  CSimpleBaseTypeNoderv  rw  rx  ZCNestedBaseTypeNode)rG   rr  ro  r?   Zis_basicr}  rI  rX  r|  rP   r   rI   ry  r0   r0   r1   rq  	  s    







$
rq  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   rP   )r   r   r   r0   r0   r1   r   
  s   z(p_buffer_or_template.<locals>.<listcomp>r  )r   r   r   )
rO   rF   rm  rc   rD   rx  r   r  r   r   )rG   r   r?   rP   r   r   r  r   r0   r0   r1   rx  
  s$    


rx  c                 C   sV   |r|s|S |s4|r4t | r&t| |S t| |d S n|sR|sRt | rNt| |S |S d S r+   )rv  rw  rx  )rG   r   ro  r   r0   r0   r1   p_bracketed_base_type!
  s    

r  c                 C   s~   | j | jfg}|   d}| jdkr*d}n2| j dkr\|| j | jf |   | j dkr\d}|d d d D ]}| j|  qj|S )NFr\   Tr%  r   )rD   rE   rF   rL   r^  )rG   savedretvalsvr0   r0   r1   rv  6
  s    


rv  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)	rO   rF   r  r   r   rc   r  r   r   )rG   r   rP   r  r  r   r  r   r0   r0   r1   rw  K
  s    

rw  c                 C   s   | j dko| jtvS rB   )rD   rE   rs  ri   r0   r0   r1   looking_at_name[
  s    r  c                 C   sR  | j tv rdS | jdkrJd}| j }g }|   | jdkrZ|   || j  | d q0| j| j f}| jdkrvd}n| jdks| jdkr|   | jdv }| j|  nZ| jdkr|   | jdk}| j|  n2| jd	kr|   | jd
kpt|  }| j|  |  |D ]}| d| | dd q| d| | oH|d S dS d S )NFrC   r   Tr   r   )r   r  r   r   r  r   )	rE   base_type_start_wordsrD   rF   rL   rc   r^  r   reverse)rG   is_typerI   dotted_pathr  pr0   r0   r1   r   ^
  sB    






r   c                 C   s   | j dko| jtv S rB   )rD   rE   r  ri   r0   r0   r1   r  
  s    r  c                 C   s:   | j dkr2| j}|   | j dk}| d| |S dS d S )NrC   r   r   )rD   rE   rF   r^  )rG   rI   r   r0   r0   r1   r  
  s    

r  c                 C   s,   | j | jf}t| dk}|s(|\| _ | _|S )zSee if we're looking at a.b.c(r   )
start_lineZ	start_colr   )rG   rO   r   r0   r0   r1   looking_at_call
  s
    r  )voidcharrV  rW  doublebint)r   r   )r#   r   )r    r   )Z
Py_UNICODEZPy_UCS4Z	Py_hash_tZ
Py_ssize_tZssize_tZsize_tZ	ptrdiff_tZPy_tss_t)shortr[  r}  rH  )r  r   enumpackedc                 C   sp   d}d}| j dkrh| jtv 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   rC   rH  r}  r#   r  r   r[  )rD   rE   sign_and_longness_wordsrF   )rG   r}  rI  r0   r0   r1   r  
  s    




r  c                 C   s,   t | d}|d ur$t|}| j|_nd }|S )Nr)  )rf  r   rc  r#  )rG   literalcnamer0   r0   r1   p_opt_cname
  s    

r  c              	   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v r|   }| jd	krt| |
}
n|   t| |||
|}
d
}q|
S )Nr   r   r/  )rI   r  r    )r   r  cmethod_flagro  calling_convention_allowedz&%s on something that is not a function)r   r   r   r   )rO   rD   rF   r  r   CNameDeclaratorNoderV   r   p_c_func_declaratorr   rc   p_c_simple_declaratorcalling_conventionr   p_c_array_declarator)rG   r3   r   r  r  
assignablero  r  rP   r  r   r0   r0   r1   r   
  s6    




r   c                 C   sB   |   }|   | jdkr$t| }nd }| d tj|||dS )Nr  )r  Z	dimension)rO   rF   rD   r   rc   r   ZCArrayDeclaratorNode)rG   r  rP   Zdimr0   r0   r1   r  
  s    


r  c              
   C   sb   t | ||dd}t| }| d t| }t| \}}	t| }
tj||||||	|pZ|jpZ|
|
dS )Nr   )r  nonempty_declaratorsr   )r  r_   Zhas_varargsZexception_valueZexception_checkr&   with_gil)	p_c_arg_listp_optional_ellipsisrc   p_nogilp_exception_value_clause
p_with_gilr   ZCFuncDeclaratorNoder&   )rG   rP   r3   r  r  r_   Zellipsisr&   exc_val	exc_checkr  r0   r0   r1   r  
  s    
r  )r   r   r   rS   r   z++z--r   r   r   r   r   r   rK   r   r   r   r   r   r   []()r  r   rU  c              	   C   s  |   }t| }| jdkr|   | jdkrb|   }	|   t| ||||||d}
tj|	|
d}nt| ||||||d}tj||d}nZ| jdkr|   t| ||||||d}tj|tj||dd}n| jdkr
|   t| ||||||d}tj	||d}nd }| jdkrr| j}|r4t
|   d |   t| }|d	kr| jd
kr|r|   t| }n|rt
|   d d}d }|d u r|jd ur|r|jd | }|d	kr|jdkr|r| j}dd |D r|   |dkr| d d}n`|dkr&| d d}nF|dv rN| j|krN|d9 }|   n| jd
krl|| j7 }|   |tvr| j
d| dd ||7 }n@|dkr| j}|tvr| j
d| dd |d | }|   tj||||d}||_|S )Nr   rz  )r   r  r  r  ro  )r  r   r   rC   zDeclarator should be emptyrz   r   zEmpty declaratorr/  ::externc                 S   s   g | ]}|d v rdqS )z+-*/<=>!%&|([^~,r    r0   )r   r(  r0   r0   r1   r   L  r`  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.Fr{   )rI   r  default)rO   rt  rD   rF   rE   r   r   ZCConstDeclaratorNodeZCPtrDeclaratorNodeZCReferenceDeclaratorNoder   r  rd   r>   r:   rc   supported_overloaded_operatorsr  r  )rG   r3   r   r  r  r  ro  rP   r  Z	const_posZ
const_baser  r   r  rI   r  rQ   r0   r0   r1   r    s    




















r  c                 C   s(   | j dkr | jdkr |   dS dS d S )NrC   r&   r    r   rD   rE   rF   ri   r0   r0   r1   r  k  s    r  c                 C   s(   | j dkr |   | d dS dS d S )Nr   r+  r    r   )rD   rF   Zexpect_keywordri   r0   r0   r1   r  r  s
    

r  c                 C   s   d }d}| j dkr|   | j dkr2d}|   n~| j dkrd}|   | j dkrl| j}|   t| |}q| j dkrtj|  dd}|   n| j dkrd}|   t| }||fS )	Nr   r  r   r    r   rC   r   r   )rD   rF   rE   rC  r   r=  rO   rd   )rG   r  r  rI   r0   r0   r1   r  z  s,    







r  )r   r   r   r   r\   c           	      C   sL   g }|}| j tvrH|t| ||||||d | j dkr:qH|   d}q|S )N)ro  kw_onlyr^   rK   r   )rD   c_arg_list_terminatorsrL   p_c_arg_declrF   )	rG   r3   	in_pyfuncr  r  r  r^   r_   r~  r0   r0   r1   r    s    

r  c                 C   s   | j dkrt|  dS dS d S )Nr   r    r   )rD   r  ri   r0   r0   r1   r    s    
r  c                 C   sb  |   }d }}	d }
d }| jr<tj|d g dddd|d d	}nt| ||d}t| ||d}| jdv r| js| j}|   | jdkr| jdkr|   n
| 	d |st	|d|  |d	k}	|d
k}|r| jdkr|   t
| }| jdkrH|   d|jv r@| jdv rt|}
|   n d|jv r4t
| }
n
t	|d nt
| }
tj|||||	|
||dS )Nr   r{  ro  )ru   rp   rC   r1  zExpected 'None'z*'%s None' only allowed in Python functionsrp   ru   r\   r   r   )r   r   r%   z;default values cannot be specified in pxd files, use ? or *)r   r   not_noneor_noner  r  r  )rO   r   r   r  r   r   rD   rF   rE   r   rd   r9   r   r!  	modifiersZCArgDeclNode)rG   r3   r  r  ro  r  r^   rP   r  r  r  r  r   r   rD  r0   r0   r1   r    sZ    




r  c                 C   s(   | j dkr | jdkr |   dS dS d S )NrC   r'   r    r   r  ri   r0   r0   r1   p_api  s    r  c                 C   s  |   }t| |j|_|jp"t| |_|jrF|jdvrFt|d|j  |jdkrf| jdkrft| ||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
vrt|d |jrt|d t| ||S | jdkr2| jdkr2t| ||S | jdkr| jtv r|jd
vr`t|d |jr~| jdkr~t|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  r    z$cdef blocks cannot be declared cpdefr\   r  rI  z*Extension type definition not allowed herez(Extension types cannot be declared cpdefrC   r   z/C struct/union/enum definition not allowed herer  z'C struct/union cannot be declared cpdeffused)rO   p_visibilityr:   r'   r  r   rD   p_cdef_extern_blockrF   r  r&   r=   p_cdef_blockr9   p_c_class_definitionrE   p_cpp_class_definitionstruct_enum_unionp_struct_enump_fused_definitionr/  )rG   r3   rP   r0   r0   r1   rU    sL    











rU  c                 C   s   t | |ddS )Nr    )r;   )r  rf  r0   r0   r1   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#   r    r  )r;   r:   r>   T)include_fileverbatim_includer  r>   )r=   r   rc   rD   rF   ra  rE   r>   r  r&   re  r   ZCDefExternNode)rG   rP   r3   r  r  r  r0   r0   r1   r    s(    




r  c                 C   s   |    | jdkrJ| j}|    t| }|d u rR|jd urR|jd | }nd }d }d }| d g }| jdkr|t| || n0|    |   | jdvrt| || q|   t	j
|||||j|j|j|j|jdkd	S )NrC   r  r\   rl  ra  rJ  )rI   r  r  r<   r:   Zcreate_wrapperr'   in_pxd)rF   rD   rE   r  r>   rc   p_c_enum_liner.  r0  r   rZ  r<   r:   r=   r'   r9   )rG   rP   r3   rI   r  r  r0   r0   r1   p_c_enum_definition,  s2    



r  c                 C   sZ   | j dkrDt| || | j dkrL|   | j dv r4qLt| || qn|   | d d S )Nr  rK   r  zSyntax error in enum item list)rD   p_c_enum_itemrF   r  )rG   r3   r  r0   r0   r1   r  I  s    


r  c                 C   sr   |   }t| }t| }|d u r8|jd ur8|jd | }d }| jdkrV|   t| }|tj	||||d d S )Nr  r   )rI   r  r   )
rO   rJ   r  r>   rD   rF   rd   rL   r   ZCEnumDefItemNode)rG   r3   r  rP   rI   r  r   r0   r0   r1   r  U  s    

r  c           	      C   s&  d}| j dkr8d}|   | jdks.| j dkr8| d | j }|   t| }t| }|d u rv|jd urv|jd | }d }| jdkr|   | d |   g }t	 }| jd	kr| jd
kr|
t| |  | q|   | d q|   n
| d tj||||||j|j|j|jdk|d
S )NFr  TrC   r  r  r\   rl  rb  r  r  z*Syntax error in struct or union definitionrJ  )	rI   r  rD  
attributesr<   r:   r'   r  r  )rE   rF   rD   expectedrJ   r  r>   rc   r.  r(   rL   r/  rO   r  r0  r   rY  r<   r:   r'   r9   )	rG   rP   r3   r  rD  rI   r  r  r1  r0   r0   r1   p_c_struct_or_union_definitionb  sB    







r  c                 C   s   |j dv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:
        ...
    rI  z&Fused type definition not allowed herer\   rb  r  zNeed at least one type)rI   types)r9   r   rF   rJ   rc   r  r.  rD   rL   r   r0  r   ZFusedTypeNode)rG   rP   r3   rI   r  r0   r0   r1   r    s"    






r  c                 C   s&   | j dkrt| ||S t| ||S d S )Nr  )rE   r  r  )rG   rP   r3   r0   r0   r1   r    s    
r  c                 C   sX   |   }|}| jdkrT| jdv rT| j}|dkrL||krL| jd||f dd |   |S )NrC   )r  r  readonlyr*   z,Conflicting visibility options '%s' and '%s'Fr{  )rO   rD   rE   r   rF   )rG   Zprev_visibilityrP   r:   r0   r0   r1   r    s    r  c                 C   s4   | j dkr0| jdv r0| j}|   |gt|  S g S )NrC   )r%   )rD   rE   rF   p_c_modifiers)rG   modifierr0   r0   r1   r    s
    r  c                 C   s  |j dv }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v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v r| j|krt| }nd }tj||j|||j dv ||j||jd	}
|
S )N)rK  rM  r    rn  )r  )r  r  ro  rC   rz  	cpp_classr   ->z~Return type annotation is not allowed in cdef/cpdef signatures. Please define it before the function name, as in C signatures.Fr{  r\   )r  rK  rJ  rM  r  z&C function definition not allowed herer  r9   )	r:   r   r   r  ri  r  r'   r=   is_const_methodrK   rl  z&Syntax error in C variable declarationTr  )rJ  rM  )r:   r   declaratorsr  ri  r'   r  r=   )r9   r  r   r?   r   r=   rD   rE   rF   r   rd   re  r(   r   rV  r:   r'   r  rL   r  r  rg  rW  )rG   rP   r3   r  r  r   r   r  ri  Zsuiter   r  Zdoc_liner0   r0   r1   r/    sx    





	r/  c                 C   s   |   }|   t| |j}t| }|d|d}|r:d|_| jdkrPt| ||S | jdkrp| jt	v 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 )Nr    )r<   r:   r  rC   r  r  )r  ro  z"Syntax error in ctypedef statementTr  rJ  )r   r   r:   r'   r  )rO   rF   r  r:   r  r'   rD   r  rE   r  r  r  r   r   r  r   ZCTypeDefNoder9   )rG   r3   rP   r:   r'   r   r   r0   r0   r1   rS     s,    
rS  c                 C   s   g }| j dkr|  }|   t| ddd }|d}tj|| j|d d}|dd  D ]}tj	|| j||d}q^| j d	krt
| |}|tj||d
 | d q|S )Nr   r   r  r#   r   rL  r    )r   r   r   )	decoratorz"Expected a newline after decorator)rD   rO   rF   r  splitr   rP  rV   r   r   r   rL   r   ZDecoratorNoder  )rG   r   rP   Z	decstringrM   r  rI   r0   r0   r1   rT    s     



rT  c                 C   s0   | j dkr,|tv r,| jd| dd t| S |S )zqStep over incorrectly placed cdef modifiers (@see _CDEF_MODIFIERS) to provide a good error message for them.
    rC   zTCannot use cdef modifier '%s' in Python function signature. Use a decorator instead.Fr{  )rD   r   r   rJ   )rG   rI   r0   r0   r1   _reject_cdef_modifier_in_py+  s    r  c                 C   s   |   }|r|   |   t| t| }| dd| jdkrB| 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   z~Expected '(', found '%s'. Did you use cdef syntax in a Python declaration? Use decorators and Python type annotations instead.rC   r   )r]   r  r  r  )	rI   r_   r`   ra   ri  r  r   r   return_type_annotation)rO   Zenter_asyncrF   r  rJ   rc   rD   rE   rb   rd   re  r(   Z
exit_asyncr   ZDefNode)rG   r   r   rP   rI   r_   r`   ra   r  ri  r  r0   r0   r1   r   5  s6    


r   r   c              	   C   s   t | dd|d}d }d }| jdkr|   | jdkr@t| |d}| jdkrl|   |t | ddd|d n| j|kr| d | jd	kr|   t| |d}| jdkr|   |||fS )
Nr    )r  r  r^   r   rC   )r^   rK   )r  r  r  r^   z-Syntax error in Python function argument listr   )r  rD   rF   p_py_arg_declr  r   )rG   r]   r^   r_   r`   ra   r0   r0   r1   rb   U  s,    








rb   c                 C   sB   |   }t| }d }|r2| jdkr2|   t| }tj|||dS )Nr\   )rI   r  )rO   rJ   rD   rF   rd   r   ZPyArgDeclNode)rG   r^   rP   rI   r  r0   r0   r1   r  k  s    r  c           
   
   C   s   |   }|   tt| }| j|_d }d }| jdkrVt| dd\}}t|||\}}|d u rlt	j
|g d}t| tdd\}}	tj||||||	|| jjdkdS )	Nr   Fr   r   r  r  r$   )rI   basesr   ri  r  r   Zforce_py3_semantics)rO   rF   r   rJ   rc  r#  rD   r   r
  r   r   re  r(   r   ZPyClassDefNoderV   rJ  )
rG   r   rP   
class_namer  r  r   r   ri  r  r0   r0   r1   r[  u  s&    

r[  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 u rt	j
|g d
}| jdkr|jdv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 classrC   r  r   Fr  z$C classes cannot take keyword bases.r   r   )r  r  zBName options only allowed for 'public', 'api', or 'extern' C classr\   rJ  rM  rK  r  z"Syntax error in C class definitionz)Module name required for 'extern' C classz?Type object name specification not allowed for 'extern' C classr  z>Object struct name specification required for 'public' C classz<Type object name specification required for 'public' C classr*   z;Object struct name specification required for 'api' C classz9Type object name specification required for 'api' C classzInvalid class visibility '%s')r:   r<   r'   r  r  r  r  objstruct_nametypeobj_name
check_sizer  ri  r  )rF   rJ   rD   rL   r:   r   rE   r   r
  r   r   r'   rO   p_c_class_optionsr9   re  r(   r  r   rX  r<   rd  )rG   rP   r3   r|  r  r  r  r  r  r  r   r   r  Z
body_levelri  r  r0   r0   r1   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vr| d|  | jdkrq|   q|  d	d
 |||fS )Nr   rC   objectr  r  )ignorewarnr   z/Expected one of ignore, warn or error, found %rrK   r  z)Expected 'object', 'type' or 'check_size')rc   rD   rE   rF   rJ   r   )rG   r  r  r  r0   r0   r1   r    s,    








r  c                 C   sB   |   }|   t| }t| tdddd\}}tj||||dS )NrL  r  Trc  )rI   ri  r  )rO   rF   rJ   re  r(   r   ZPropertyNode)rG   rP   rI   ri  r  r0   r0   r1   r\    s    
r\  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)rD   rO   r   r  r   r   )rG   rP   Zstring_noder0   r0   r1   r]    s    
r]  c                 C   sP   | j dkrH|  }t| \}}}| jddd |dv r:|S t|d |S d S d S )Nr'  zSyntax error in doc stringTr  r_  2Python 3 requires docstrings to be unicode strings)rD   rO   r<  r  r   )rG   rP   rD  Zbytes_resultZunicode_resultr0   r0   r1   rg    s    

rg  c                 C   s   d}| du 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u rd}nHt |tj	rt
| jd |j}n(t |tjr|j}|du r|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   rg   Zis_string_literalr  rP   r  r   r?  r   r   rA  r0  )r   Zdoc_noder  ri  r0   r0   r1   rh    s4    
rh  c                 C   s@   t | ||ddd}| jdkr<| dt| jt| jf  |S )Nr  r    r;  rn  !Syntax error in statement [%s,%s])r$  rD   r   rS  rE   )rG   r9   r3   r  r0   r0   r1   p_code7  s    
r  z$^#\s*cython\s*:\s*((\w|[.])+\s*=.*)$c              
   C   s  i }| j dkr|  }t| j}|r|d }ztj|dd}W nL ty } z4| j	|j
d dd |   W Y d }~qW Y d }~n
d }~0 0 |D ]P}||vrq|| || krt|d|f  q| j	d	||| || f |d
 qd|v r| j|d  || |   q|S )NZcommentliner    T)Zignore_unknownr   Fr{  zDuplicate directive found: %sz@Conflicting settings found for top-level directive %s: %r and %rr   rJ  )rD   rO   !_match_compiler_directive_commentrE   r  r  r   Zparse_directive_list
ValueErrorr   r_   rF   r   rV   set_language_levelr-   )rG   r   rP   mZdirectives_stringZnew_directiveserI   r0   r0   r1   p_compiler_directive_commentsC  s6    
"


r  c           
      C   s   |   }t| }d| _| jjd u rd| jd |d jrddd l}|jd|d j t	t
jr\dndd t| }|rvd}nd}t| ||d	dd
}	| jdkr| dt| jt| jf  t|||	||dS )NFr#   r   zoCython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: %sr    )
stacklevelrJ  r  r  r;  rn  r  )ri  r  full_module_namedirective_comments)rO   r  r!  rV   rJ  r  filenamewarningsr  FutureWarningcythonZcompiledrg  r$  rD   r   rS  rE   r   )
rG   r   r  r3   rP   r  r  ri  r9   r  r0   r0   r1   p_moduled  s6    

r  c                 C   s8   t | }| jdkr,| d | d d}nd}||fS )Nr   r   FT)rJ   rD   rc   )rG   rI   requiredr0   r0   r1   p_template_definition  s    


r  c              
   C   s  |    g }t| }t| }|d u r<|jd ur<|jd | }| jdkrPt|d | jdkr|    t| g}| jdkr|    |t|  ql| 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 |   g }
t|jd|	pf|jd}||_| jdkr| jdkr|
t| | n|    | d qr|   nd }
| d tj|||||j|jdk|
|dS )Nr  r   z*Qualified class name not allowed C++ classr   rK   r  c                 S   s   g | ]\}}|qS r0   r0   )r   rI   r  r0   r0   r1   r     r`  z*p_cpp_class_definition.<locals>.<listcomp>r   rj  r   z&Name options not allowed for C++ classr\   rl  r  )r:   r9   r&   rb  r  r  z$Syntax error in C++ class definitionrJ  )rI   r  base_classesr:   r  r  r?   )rF   rJ   r  r>   rD   r   r  rL   rc   r   rO   r  r.  r(   r:   r&   r?   p_cpp_class_attributer  r0  r   ZCppClassNoder9   )rG   rP   r3   r|  r  r  r?   Ztemplate_namesr  r&   r  r1  r0   r0   r1   r    sj    









r  c                 C   s   d }| j dkrt| }| jdkr0t| |  |S | jdkrDt| |S | j dkr| jtv r| jdkrrt| |  |S t| |  |S n\t| |  |}|d urt	j
t	jt	jf}|jr|t	jt	jf7 }t||s| d ||_|S d S )Nr   r   rH  rC   r  r   )rD   rT  rE   r  rO   rS  r  r  r/  r   rV  rW  rX  r@   rY  rZ  r   r   r   )rG   r3   r   r   r_  r0   r0   r1   r    s(    






r  c           
      C   st  d| }|r^|  | |r*|  d|  t|}|tu r|  d|d |d f  tdt|D ]}t| || |d  qb|  d|  d S t|tjrz
|j	}W n t
y   |jj}Y n0 |  d||jf  |j D ]*\}}	|d	kr|d
krt| |	|d | qd S |tu r^|  d tt|D ]}t| || |d  q0|  d|  d S |  d||f  d S )Nz  z%s: z	(%s @ %s
r   r    r#   z%s)
z%s @ %s
tagrP   z[
z%s]
z%s%s
)writer  r   ranger   print_parse_treer   r   Noder  r  r]  r6   rP   r,   r  r   )
r,  r   r9   r   indtr  r  rI   r   r0   r0   r1   r    s:    



r  )rA   )T)T)NN)r)  )N)N)N)r   )r   )F)TF)TF)F)r   )r   )r   )r   )F)N)r   r   N)N)N)r   r   r   r    )NF)r   r    )r    )N)r  r   r  rC  r  r  r   ior   r   r   unicodedatar   r	   r   r
   	functoolsr   r   ZScanningr!   r   r"   r/  r   r   r   r   r   r   r   r   r   ZErrorsr   r   r   r   r   version_infor   
maxunicoder   r   r(   rJ   rN   rR   r[   rh   rj   rd   re   ro   rq   rr   rt   rx   r   r|   r   r~   rb  r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r   r   r  r  r  r  r  r  r   r9  rC  rO  r<  rf  ri  ra  rs  r   r   r  rt  r  r5  r  r  r  r6  r7  r  r  r   r  r4  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=  r?  rA  rE  rG  r`  r$  r  re  rm  r   rt  rs  rp  rq  rx  r  rv  rw  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  rU  r  r  r  r  r  r  r  r  r  r  r/  rS  rT  r  r   rb   r  r[  r  r  r\  r]  rg  rh  r  r  r  r  r  r  r  r  r  r  r0   r0   r0   r1   <module>   s  

	

	3*? 
),f.
/ 	n

/
$Q+		"#f8	Q(

	
#
V 4)$"@
 
L	#
!
;