
    Ng                       d dl mZ d dlZ ej        di dedededededed	ed
ededededededededededede d dlZd dlZd dlmZ ddl	m
Z
 ddlmZmZ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mZ ddlmZmZmZmZmZmZmZmZ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+m,Z, d%d&l-m.Z.m/Z/ ej0        d          d'k    re1Z2ne1e3fZ2d(d)hZ4d* Z5d+ Z6d, Z7 G d- d.e8          Z9 G d/ d0e8          Z:d1 Z;e; G d2 d3e                      Z< G d4 d5e<          Z= G d6 d7e          Z> G d8 d9e<          Z? G d: d;e<          Z@ G d< d=e@          ZA G d> d?e<          ZB G d@ dAeB          ZC G dB dCeB          ZD G dD dEeB          ZE G dF dGeE          ZF G dH dIeE          ZG G dJ dKeB          ZH G dL dMeB          ZI G dN dOeB          ZJ G dP dQe<          ZK G dR dSe<          ZL G dT dUe<          ZM G dV dWeL          ZN G dX dYeL          ZO G dZ d[eL          ZP G d\ d]eL          ZQ G d^ d_eL          ZR G d` daeL          ZS G db dceL          ZT G dd deeL          ZU G df dge@          ZV G dh die@          ZW G dj dkeWe>          ZX G dl dme@          ZY G dn doe@          ZZ G dp dqe@          Z[ G dr dse@e>          Z\ G dt due\          Z] G dv dwe<          Z^ G dx dye<          Z_ G dz d{e\          Z` G d| d}e\          Za G d~ de`          Zb G d deb          Zc G d dec          Zd G d dec          Ze G d de`          Zf G d de@          Zg G d de@e>          Zh G d deh          Zi G d deh          Zj G d de@          Zk G d de@          Zl G d de@          Zm G d de@          Zn G d de@          Zo G d de@          Zp G d dep          Zq G d dep          Zr G d dep          Zs G d dep          Zt G d de@          Zu G d de@          Zv G d de@          Zw G d de@          Zx G d de?          Zy G d de@          Zz G d de@          Z{ G d de@          Z| G d de@          Z} G d de@          Z~ G d de@          Z G d de@          Z G d de<          Z G d de@          Z G d de@          Z G d de          Z G dĄ dee@          Z G dƄ de<          Z G dȄ de<          Zdʄ Z G d˄ dee@          Z G d̈́ de          Z G dτ de          Z G dф dee@          Z G dӄ de@          Z G dՄ dep          Z G dׄ de@          Z G dل de<          Z G dۄ de@          Z G d݄ de          Z G d߄ de          Z G d de@          Z G d de          Zd Zd d edZdddZd Z G d de@          Z G d de@          Z G d de@          Z G d de<          Z G d de@e          Z G d de          Z G d de          Z G d de@          Ze'j        rdZndZ e#j        dd           Z e#j        dd           Z e#j        dd          Z e#j        dd          Z e#j        dd          Z e#j        dd          Z e#j        dd          Z e#j        dd          Z e#d	d
eg          ZdS (      )absolute_importNsysoscopyBuiltinerrorwarningNaming
PyrexTypespy_object_typeModuleScope
LocalScopeClosureScopeStructOrUnionScopePyClassScopeCppClassScopeUtilityCodeEncodedString
error_type_py_int_types)chain   )r   )r   r	   InternalErrorCompileErrorCannotSpecialize)r
   )r   )	TypeSlots)r   r   )r   r   r   PropertyScoper   r   r   TemplateScopeGeneratorExpressionScopeCppScopedEnumScopepunycodify_name)r   r   )Future)Options)
DebugFlags)has_np_pythranpythran_typeis_pythran_buffer   )add_metaclassstr_to_number   __init_subclass____class_getitem__c                 F    | d                                          | d         fS Nr   r   )get_filenametable_entryposs    Q/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/Nodes.pyrelative_positionr5   .   s!    F**,,c!f55    c                 (   t           j        s|S dt          |           z  }|t          |          S |j        }|)	 |                    |           n# t          $ r d }Y nw xY w|st          |          }nt          |dz   |z             }||_        |S )NzFile: %s (starting at line %s)
)r$   embed_pos_in_docstringr5   r   encodingencodeUnicodeEncodeError)r3   	docstringpos_liner:   docs        r4   embed_positionr@   2   s    ) 03DS3I3IIHX&&& !H	OOH%%%%! 	 	 	HHH	  :H%%Hu,y899CLJs   A A! A!c                       fd}|S )Nc            
      b   t          |           dk    rt          | d                   r| d d         \  }}dd|j        z  d|j        j        d	j        d|j        dd          d	}|                                }|j        j        	                                }|xj        dz  c_         	| i |}|xj        dz  c_        ||j        j        	                                k    r?|
                    |                    d	d
d                     |
                    |           |S  	| i |S )Nr   r)   z                    /*  z -> .z */   ->z<-)len
isinstance
call_level	__class____name__r3   insertion_pointbufferstreamtellputlnreplace)
argskwdsnodecodemarkerrL   startrescodewriter_classfuncs
           r4   fzwrite_func_call.<locals>.fM   sB   t99q==ZQ1ABB= bqbJD$$do%%%'''	F #2244OK&++--EOOq OO$%%%COOq OO*//1111

6>>$a88999%%f---J4&&&&r6    )rZ   rY   r[   s   `` r4   write_func_callr]   L   s)    ' ' ' ' ' ', Hr6   c                        e Zd Z fdZ xZS )VerboseCodeWriterc                 
   ddl m} ddlm} t	          |          }|                                D ](\  }}t          ||          rt          ||          ||<   )t          t          |           
                    | |||          S )Nr   FunctionTyper   )CCodeWriter)typesrb   Coderc   dictitemsrH   r]   superr_   __new__)	clsnamebasesattrsrb   rc   mnamemrJ   s	           r4   ri   zVerboseCodeWriter.__new__i   s    &&&&&&%%%%%%U 	? 	?HE1!\** ?.q+>>e&,,44S$uMMMr6   )rK   
__module____qualname__ri   __classcell__rJ   s   @r4   r_   r_   f   sA        N N N N N N N N Nr6   r_   c                   <     e Zd ZdZ eh d          Z fdZ xZS )CheckAnalyserszCMetaclass to check that type analysis functions return a node.
    >   analyse_typesanalyse_expressionsanalyse_target_typesc                    ddl m} d }t          |          }|                                D ]-\  }}t	          ||          r|| j        v r |||          ||<   .t          t          |                               | |||          S )Nr   ra   c                       fd}|S )Nc                  J     | i |}|t          d| d|           |S )NrC   )print)rR   kwargsretvalrZ   rk   s      r4   callz3CheckAnalysers.__new__.<locals>.check.<locals>.call   s@    t.v..>dddFF;<<<r6   r\   )rk   rZ   r   s   `` r4   checkz%CheckAnalysers.__new__.<locals>.check~   s)         
 Kr6   )	rd   rb   rf   rg   rH   methodsrh   ru   ri   )	rj   rk   rl   rm   rb   r   rn   ro   rJ   s	           r4   ri   zCheckAnalysers.__new__|   s    &&&&&&	 	 	 U 	/ 	/HE1!\** /u/C/C$uUAe^S))11#tUEJJJr6   )rK   rp   rq   __doc__	frozensetr   ri   rr   rs   s   @r4   ru   ru   s   sk         i     GK K K K K K K K Kr6   ru   c                 X    t           j        r t          t                    |           S | S N)r%   debug_trace_code_generationr*   r_   )rj   s    r4   _with_metaclassr      s+    - 5/}.//444Jr6   c                       e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZd ZdZdZdZd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 )Noder   FNc                 H    || _         | j                            |           d S r   )r3   __dict__update)selfr3   kws      r4   __init__zNode.__init__   s%    R     r6   	Operationc                 @    t          | j        d| j        z             d S )Nz%s not allowed without gil)r   r3   gil_messager   envs     r4   	gil_errorzNode.gil_error   s#    dh4t7GGHHHHHr6   c                 Z    |                                 s|                                  d S d S r   )is_cpp	cpp_errorr   s     r4   	cpp_checkzNode.cpp_check   s2    zz|| 	NN	 	r6   c                 @    t          | j        d| j        z             d S )Nz%s only allowed in c++)r   r3   cpp_messager   s    r4   r   zNode.cpp_error   s#    dh043CCDDDDDr6   c                     t          j         |           }|j        D ]B}t          ||          }t          |t                    rt          ||d |D                        C|S )ac  Clone the node. This is defined as a shallow copy, except for member lists
           amongst the child attributes (from get_child_accessors) which are also
           copied. Lists containing child nodes are thus seen as a way for the node
           to hold multiple children directly; the list is not treated as a separate
           level in the tree.c                     g | ]}|S r\   r\   ).0xs     r4   
<listcomp>z#Node.clone_node.<locals>.<listcomp>   s    *<*<*<1*<*<*<r6   )r   child_attrsgetattrrH   listsetattr)r   resultattrnamevalues       r4   
clone_nodezNode.clone_node   sk     4* 	> 	>HFH--E%&& >*<*<e*<*<*<===r6   c                     d S r   r\   r   s     r4   analyse_declarationszNode.analyse_declarations       r6   c                 :    t          d| j        j        z            )Nz*analyse_expressions not implemented for %sr   rJ   rK   r   s     r4   rw   zNode.analyse_expressions   s$    HN#$ % % 	%r6   c                 :    t          d| j        j        z            )Nz$generate_code not implemented for %sr   r   rU   s     r4   generate_codezNode.generate_code   s$    BN#$ % % 	%r6   c                 h    t          | t                    r| j                            |           d S d S r   )rH   	BlockNodebodyannotater   s     r4   r   zNode.annotate   s:    dI&& 	%It$$$$$	% 	%r6   c                 n   	 | j         S # t          $ r | j        }| j        s|| _         |cY S | j        D ]t}t	          | |          }|t          |t                    r(|D ]$}t          ||                                          }%Rt          ||                                          }u|| _         |cY S w xY wr   )	_end_posAttributeErrorr3   r   r   rH   r   maxend_pos)r   r3   attrchildcs        r4   r   zNode.end_pos   s    	=  	 	 	(C#  #


( 	4 	4d++=t,, 4" 4 4!#qyy{{334 c5==??33CCDMJJJ!	s   	 !B4BB43B4r2   d   c                 8  
 dk    rdS t                      t          |           v rd| j        j        t          |           fz  S                     t          |                      
fd
fd| j                                        D             }t          |          dk    rd| j        j        t          |           fz  S d|z  }d	| j        j        t          |           fz  }|D ] \  }}	||d|d
 
|	|dz             dz  }!|d|z  z  }|S )zYDebug helper method that returns a recursive string representation of this node.
        r   z<...nesting level cutoff...>Nz<%s (0x%x) -- already output>c                     t          | t                    r|                     dz
            S t          | t                    r%dd                    fd| D                       z  S t          |           S )Nr   z[%s], c                 (    g | ]} |          S r\   r\   )r   item
dump_childlevels     r4   r   z1Node.dump.<locals>.dump_child.<locals>.<listcomp>"  s%    *Q*Q*Qt::dE+B+B*Q*Q*Qr6   )rH   r   dumpr   joinrepr)r   r   cutoffr   encountered
filter_outs    `r4   r   zNode.dump.<locals>.dump_child  s~    !T"" vveZ;GGGAt$$ 		*Q*Q*Q*Q*Qq*Q*Q*Q R RRRAwwr6   c                 &    g | ]\  }}|v	||fS r\   r\   )r   keyr   r   s      r4   r   zNode.dump.<locals>.<listcomp>&  s,    ___*#uT^I^I^#uI^I^I^r6   z<%s (0x%x)>z  z<%s (0x%x)
z: r   r8   z%s>)setidrJ   rK   addr   rg   rG   )r   r   r   r   r   rm   indentrX   r   r   r   s     ```     @r4   r   z	Node.dump  sd    Q;;11%%Kd88{""2dn6MrRVxx5XXX4!!!	 	 	 	 	 	 	 	 `___0C0C0E0E___u::?? DN$;RXX#FFFE\F DN$;RXX#FFC# T T
UjjPQ	6R6R6R6RSS56>!CJr6   (#)c                    | j         sdS | j         \  }}}|                    dd          }|t          d|dz
            |         }|d         }|r|d|         |z   ||d         z   }|                                d	z   |d<   ||||d
z            z  }d|                                ||d                    |          fz  S )z[Debug helper method that returns the source code context of this node as a string.
         ASCIIignore)r:   error_handlingr   r,   Nz             # <<<<<<<<<<<<<<
r)   z"%s":%d:%d
%s
)r3   	get_linesr   rstripget_escaped_descriptionr   )	r   mark_columnrV   source_desclinecolcontentslinescurrents	            r4   dump_poszNode.dump_pos1  s     x 	3!%T3(('((SSQQ,-) 	=dsdmf,wstt}<GNN$$'IIb	$tAv+&&"//114chhuoo&O O 	Or6   r   )r   r2   r   N)Fr   ) rK   rp   rq   is_nameis_noneis_nonecheck
is_literalis_terminator
is_wrapperis_cpropertyis_templated_type_nodetempsr   outer_attrscf_statecoercion_typer   r   nogil_checkin_nogil_contextr   r   r   r   r   r   rw   r   r   r   r   r   r\   r6   r4   r   r      sH        GGLJMJL"E
 K KH M! ! ! KKI I I I K  E E E  J  % % %% % %% % %
  *   <O O O O O Or6   r   c                   6    e Zd ZdZdgZd Zd Zd Zd Zd Z	dS )	CompilerDirectivesNodez9
    Sets compiler directives for the children nodes
    r   c                 n    |j         }| j         |_         | j                            |           ||_         d S r   )
directivesr   r   r   r   olds      r4   r   z+CompilerDirectivesNode.analyse_declarationsL  s3    n	&&s+++r6   c                 x    |j         }| j         |_         | j                            |          | _        ||_         | S r   )r   r   rw   r   s      r4   rw   z*CompilerDirectivesNode.analyse_expressionsR  s5    nI11#66	r6   c                     |j         }|j        j         }| j         |j        _         | j                            ||           ||_         ||j        _         d S r   )r   globalstater   generate_function_definitions)r   r   rU   env_oldcode_olds        r4   r   z4CompilerDirectivesNode.generate_function_definitionsY  sQ    .#.&*o#	//T::: &.###r6   c                     |j         j        }| j        |j         _        | j                            |           ||j         _        d S r   )r   r   r   generate_execution_coder   rU   r   s      r4   r   z.CompilerDirectivesNode.generate_execution_codea  sA    )&*o#	))$///&)###r6   c                     |j         j        }| j        |j         _        | j                            |           ||j         _        d S r   )r   r   r   r   r   s      r4   r   zCompilerDirectivesNode.annotateg  sA    )&*o#	4   &)###r6   N)
rK   rp   rq   r   r   r   rw   r   r   r   r\   r6   r4   r   r   C  sr          (K    / / /* * ** * * * *r6   r   c                       e Zd Zd Zd ZdS )r   c                     |                                 j        }|D ]}|j                            |           |d d = d S r   )global_scopeundeclared_cached_builtinsr   add_cached_builtin_decl)r   r   rU   entriesentrys        r4   generate_cached_builtins_declsz(BlockNode.generate_cached_builtins_declsq  sN    ""$$? 	< 	<E44U;;;;AAAJJJr6   c                 F    |j         D ]}|                    ||           d S r   )lambda_defsr   )r   r   rU   rT   s       r4   generate_lambda_definitionsz%BlockNode.generate_lambda_definitionsw  s6    O 	: 	:D..sD9999	: 	:r6   N)rK   rp   rq   r	  r  r\   r6   r4   r   r   n  s2          : : : : :r6   r   c                   H    e Zd ZdgZed             Zd Zd Zd Zd Z	d Z
dS )	StatListNodestatsc                      t          | fi |}|S r   )r  )r3   r   r   rT   s       r4   create_analysedzStatListNode.create_analysed  s    C&&2&&r6   c                 D    | j         D ]}|                    |           d S r   r  r   r   r   stats      r4   r   z!StatListNode.analyse_declarations  s4    J 	+ 	+D%%c****	+ 	+r6   c                 8    fd| j         D             | _         | S )Nc                 :    g | ]}|                               S r\   rw   r   r  r   s     r4   r   z4StatListNode.analyse_expressions.<locals>.<listcomp>  s7     . . . ..s33 . . .r6   r  r   s    `r4   rw   z StatListNode.analyse_expressions  s4    . . . ."&*. . .
r6   c                 F    | j         D ]}|                    ||           d S r   r  r   r   r   rU   r  s       r4   r   z*StatListNode.generate_function_definitions  s6    J 	: 	:D..sD9999	: 	:r6   c                 x    | j         D ]1}|                    |j                   |                    |           2d S r   )r  mark_posr3   r   r   rU   r  s      r4   r   z$StatListNode.generate_execution_code  sH    J 	/ 	/DMM$(###((....	/ 	/r6   c                 D    | j         D ]}|                    |           d S r   r  r   r   s      r4   r   zStatListNode.annotate  2    J 	  	 DMM$	  	 r6   N)rK   rp   rq   r   staticmethodr  r   rw   r   r   r   r\   r6   r4   r  r  |  s         )K  \+ + +
  : : :
/ / /         r6   r  c                       e Zd Zd Zd ZdS )StatNodec                     d S r   r\   r   r   rU   s      r4   r   z&StatNode.generate_function_definitions  r   r6   c                 :    t          d| j        j        z            )Nz.generate_execution_code not implemented for %sr   r   s     r4   r   z StatNode.generate_execution_code  s$    LN#$ % % 	%r6   N)rK   rp   rq   r   r   r\   r6   r4   r&  r&    s2          % % % % %r6   r&  c                   2    e Zd ZdgZd Zd Zd Zd Zd ZdS )CDefExternNoder   c                 :   |j         }d|_         | j                            |           ||_         | j        s| j        r]| j        j        }|j        d         sd}n|sd}nt          d |D                       }|                    | j        | j        |           d S d S )Nr   preliminary_late_includes_cy28Fc              3   @   K   | ]}t          |t                    V  d S r   )rH   CVarDefNode)r   rT   s     r4   	<genexpr>z6CDefExternNode.analyse_declarations.<locals>.<genexpr>  s,      KKT:dK88KKKKKKr6   )	in_cincluder   r   include_fileverbatim_includer  r   alladd_include_file)r   r   old_cinclude_flagr  lates        r4   r   z#CDefExternNode.analyse_declarations  s    O	&&s++++ 
	Q 5 
	QIOE>"BC L LKKUKKKKK  !2D4I4PPPPP
	Q 
	Qr6   c                 D    | j                             |          | _         | S r   r   rw   r   s     r4   rw   z"CDefExternNode.analyse_expressions  s    I11#66	r6   c                 <    | j                             ||           d S r   r   r   r(  s      r4   r   z,CDefExternNode.generate_function_definitions       	//T:::::r6   c                     d S r   r\   r   s     r4   r   z&CDefExternNode.generate_execution_code  r   r6   c                 :    | j                             |           d S r   r   r   r   s     r4   r   zCDefExternNode.annotate      	4     r6   N	rK   rp   rq   r   r   rw   r   r   r   r\   r6   r4   r+  r+    sk        
 (KQ Q Q$  
; ; ;  ! ! ! ! !r6   r+  c                   "    e Zd Zg ZdZd Zd ZdS )CDeclaratorNoder   c                     d S r   r\   r   s    r4   declared_namezCDeclaratorNode.declared_name  s    tr6   c                     d S r   r\   r   s    r4   analyse_templatesz!CDeclaratorNode.analyse_templates  s    tr6   N)rK   rp   rq   r   calling_conventionrE  rG  r\   r6   r4   rC  rC    s?         K      r6   rC  c                   &    e Zd ZdgZdZd ZddZdS )CNameDeclaratorNodedefaultNc                     | j         S r   rk   r   s    r4   rE  z!CNameDeclaratorNode.declared_name   
    yr6   r   Fc                    |rw| j         dk    rl|j        s|j        s|j        rt	          | j        d           nA|j        rt	          | j        d           n$|                    ddd          | _         t          }|j	        rP|j
        rI	 |                    |j
                  }n-# t          $ r  t	          | j        d| j         z             Y nw xY w|| _        | |fS )Nr   Missing argument nameJUse spam() rather than spam(void) to declare a function with no arguments.r   )for_displaypyrexR'%s' cannot be specialized since its type is not a fused argument to this function)rk   is_ptris_array	is_bufferr   r3   is_voiddeclaration_coder   is_fusedfused_to_specific
specializer   type)r   	base_typer   nonempty
visibilityin_pxds         r4   analysezCNameDeclaratorNode.analyse  s    	+	R +9#5 +9L +dh 78888" +dh lmmmm%66rqPQ6RR	*	 	!#"7 	!!%001FGG		# ! ! !dhji ! ! ! ! !!
 	Ys   	B$ $'CCr   NF)rK   rp   rq   r   rK  rE  rb  r\   r6   r4   rJ  rJ    sE        
 +KG       r6   rJ  c                   (    e Zd ZdgZd Zd ZddZdS )	CPtrDeclaratorNodebasec                 4    | j                                         S r   rf  rE  r   s    r4   rE  z CPtrDeclaratorNode.declared_name      y&&(((r6   c                 4    | j                                         S r   rf  rG  r   s    r4   rG  z$CPtrDeclaratorNode.analyse_templates"      y**,,,r6   r   NFc                     |j         rt          | j        d           t          j        |          }| j                            |||||          S )Nz+Pointer base type cannot be a Python objectr_  r`  ra  )is_pyobjectr   r3   r   
c_ptr_typerf  rb  )r   r^  r   r_  r`  ra  ptr_types          r4   rb  zCPtrDeclaratorNode.analyse%  sS      	K$(IJJJ(33y  3jag hhhr6   rc  )rK   rp   rq   r   rE  rG  rb  r\   r6   r4   re  re    sU         (K) ) )- - -i i i i i ir6   re  c                        e Zd ZdgZd Zd ZdS )_CReferenceDeclaratorBaseNoderf  c                 4    | j                                         S r   rh  r   s    r4   rE  z+_CReferenceDeclaratorBaseNode.declared_name/  ri  r6   c                 4    | j                                         S r   rk  r   s    r4   rG  z/_CReferenceDeclaratorBaseNode.analyse_templates2  rl  r6   N)rK   rp   rq   r   rE  rG  r\   r6   r4   rs  rs  ,  s9        (K) ) )- - - - -r6   rs  c                       e Zd ZddZdS )CReferenceDeclaratorNoder   NFc                     |j         rt          | j        d           t          j        |          }| j                            |||||          S )Nz-Reference base type cannot be a Python objectrn  )ro  r   r3   r   
c_ref_typerf  rb  r   r^  r   r_  r`  ra  ref_types          r4   rb  z CReferenceDeclaratorNode.analyse7  sS      	M$(KLLL(33y  3jag hhhr6   rc  rK   rp   rq   rb  r\   r6   r4   rw  rw  6  .        i i i i i ir6   rw  c                       e Zd ZddZdS ) CppRvalueReferenceDeclaratorNoder   NFc                     |j         rt          | j        d           t          j        |          }| j                            |||||          S )Nz4Rvalue-reference base type cannot be a Python objectrn  )ro  r   r3   r   cpp_rvalue_ref_typerf  rb  rz  s          r4   rb  z(CppRvalueReferenceDeclaratorNode.analyse?  sS      	T$(RSSS1)<<y  3jag hhhr6   rc  r|  r\   r6   r4   r  r  >  r}  r6   r  c                       e Zd ZddgZddZdS )CArrayDeclaratorNoderf  	dimensionr   NFc                    |j         r|                                s|j        s|j        rddlm} t          | j        |          r| j        j        }n| j        f}fd|D             }d |v r8|	                    d           }	t          ||	         j        d           t          }n|                    | j        |          }| j                            ||||          S | j        r| j                                      | _        | j        j        j        st          | j        j        d           | j                                        }
|
!	 t)          |
          }
n# t*          $ r Y nw xY wnd }
|                                st          | j        d|z             |j        rt          | j        d           |j        rt          | j        d	           t1          j        ||
          }| j                            ||||          S )
Nr   	TupleNodec                 :    g | ]}|                               S r\   )analyse_as_type)r   vr   s     r4   r   z0CArrayDeclaratorNode.analyse.<locals>.<listcomp>U  s'    ;;;a'',,;;;r6   zTemplate parameter not a typern  zArray dimension not integerz%Array element type '%s' is incompletez'Array element cannot be a Python objectz"Array element cannot be a function)is_cpp_classis_template_typeis_cfunctionpython_type_constructor_name	ExprNodesr  rH   r  rR   indexr   r3   r   specialize_hererf  rb  analyse_const_expressionr]  is_intget_constant_c_result_codeint
ValueErroris_completero  r   c_array_type)r   r^  r   r_  r`  ra  r  rR   valuesixsize
array_types     `         r4   rb  zCArrayDeclaratorNode.analyseL  sD   # 	n	(B(B(D(D 	n&	n6	n -,,,,,$.)44 '~*~;;;;d;;;Fv~~\\$''d2hl$CDDD&		%55dhVLL	9$$YhS]fl$mmm> 	!^DDSIIDN>&- Idn(*GHHH><<>>Dt99DD!   D   D$$&& 	Q$(CiOPPP  	G$(EFFF! 	B$(@AAA,Y==
y  S8PZci jjjs   E 
E*)E*rc  rK   rp   rq   r   rb  r\   r6   r4   r  r  F  s:         ;'K%k %k %k %k %k %kr6   r  c                   B    e Zd Zg dZdZdZdZdZd Zd Z	d	dZ
d
dZdS )CFuncDeclaratorNode)rf  rR   exception_valuer   Nc                 4    | j                                         S r   rh  r   s    r4   rE  z!CFuncDeclaratorNode.declared_name  ri  r6   c                    t          | j        t                    rddlm}m} | j        j        }t          ||          r|j        }n+t          ||          r|g}nt          |j	        d           d S g | _
        |D ]Y}t          ||          r2| j
                            t          j        |j                             Dt          |j	        d           Z| j        j        | _        | j
        S d S )Nr   )r  NameNodez*Template arguments must be a list of names)rH   rf  r  r  r  r  r  rR   r   r3   	templatesappendr   TemplatePlaceholderTyperk   )r   r  r  template_nodetemplate_nodestemplates         r4   rG  z%CFuncDeclaratorNode.analyse_templates  s   di!566 	66666666 I/M-33 !.!3M844 "/m')UVVVtDN* V Vh11 VN))**LX]*[*[\\\\(,(TUUUU	DI>!4r6   Fc                 z    |i }|r|dz  }g }t           j                  D ]\  }}	|	                    ||dk    oj        odj        v          \  }
}|
j        }||v r||         }|                              }|t          |j        d           nU|t          j
        urE|                    |          s0t           j        j        d           t          |j        d           n|}|
j        rt           j        d           |dk    rj        r|j        rj        }|j        rt          j        |j                  }|j        rt          |	j        d	           |                    t          j        |||	j                             |	j        r xj        dz  c_         j        rt           j        d
           d }d}j        d         rV|j        sO j        sH j        rA|dk    r;                                 j        v r|rd _        t;           j        dd            j        dk    rU                    d                               d                               d                               d           n|j        r j        rd _        |j        r0 j        s j        r" j        dk    rt           j        d           n|j        r, j        s%|dk    r j        rt;           j        dd           nU j        e j        r^ j        dk    rS|j        L|dk    rF|sDj        s=tA           j        tB                    s#ddl"m#}  | j        |j        |           _         j        rډ j        dk    r j        $                               _         j        j%        }|j&        s[|j        sT|j'        r|j(        j        s|j        r:|t          j)        k    r j        j*        dk    st           j        j        d            j        }n9 j        +                              ,                    |          $                               _         j        -                                }|t           j        j        d           |.                     j        j%                  st           j        j        d           |dk    r|j/        s|j0        rq j        1                                rX	 te          |j3                  } j        j4        |k    r"t;           j        d j        j4        z             n# tj          $ r Y nw xY w j        }|j'        rt           j        d           t          j6        || j7         j        || j        j8         j9         j:         j;         j<         j=                   } j        r+|j>        r fd!}||_?        n @                    |           j        d"         }|r2|j8        }|r"||k    rt           j        d#|d$|d%           ||_8        |j(        jA        rt;           j        d&d           |j        D ]8}|j%        jA        r*|B                                st;           j        d'd           9 j                            |||(          S ))Nr   r   r$  r_  is_self_arg
Not a type2Signature does not agree with previous declarationPrevious declaration herez2Function argument cannot have C name specificationrQ  z-Non-default argument follows default argumentlegacy_implicit_noexceptexternFzdImplicit noexcept declaration is deprecated. Function declaration should contain 'noexcept' keyword.r)   r   +iosnew	stdexcepttypeinfozAException clause not allowed for function returning Python objectz?noexcept clause is ignored for function returning Python object	ConstNoder   r]  *zTException value must be a Python exception, or C++ function with no arguments, or *.z Exception value must be constantz6Exception value incompatible with function return typez;Ambiguous exception value, same as default return value: %rz!Function cannot return a function)	optional_arg_countr  exception_checkrH  nogilwith_gilis_overridableis_const_methodr  c                 6                         | |           d S r   )declare_optional_arg_struct)	func_typefused_cnamer   r   s     r4   declare_opt_arg_structz;CFuncDeclaratorNode.analyse.<locals>.declare_opt_arg_struct.  s!    44Y[QQQQQr6   callspeczcannot have both 'z' and 'z' calling conventionsz6Rvalue-reference as function return type not supportedz3Rvalue-reference as function argument not supportedr`  ra  )C	enumeraterR   rb  is_c_class_scoper   rk   r  r   r3   r   r   same_asrf  cnameis_unspecifiedparent_typerV  rp  r^  rX  r  CFuncTypeArgrK  r  ro  has_explicit_exc_clauser  rE  r  r	   r5  r  rH   re  r  r  r  r]  is_errorr  return_typec_char_typer   rv   	coerce_tor  assignable_fromr  is_floathas_constant_resultfloatdefault_valueconstant_resultr  	CFuncTypehas_varargsrH  r  r  overridabler  r  rZ  r  r  is_rvalue_referenceis_forwarding_reference)r   r  r   r_  directive_localsr`  ra  func_type_argsiarg_nodename_declaratorr]  rk   	type_node
other_typeexc_val	exc_checkr  exc_val_typetype_default_valuer  r  r  r   args   ` `                      r4   rb  zCFuncDeclaratorNode.analyse  s<   #! 	MH$TY//  	Q  	QKAx$,$4$4h!Ve(<eWZWeAe %5 %h %h!OT #'D''',T2	&66s;;
%)-6666*";;;"ll:66 <$)-)]^^^)-)DEEEE%D$ Vdh TUUUAvv#.v43Fv} =!,T^<<| rhl$pqqq!!'dHLAAC C C Q''1,'''( Qdh OPPP	N56 	#/	4	 (	 (**&&((CK777',$DHO   
 3&&  '''  '''  ---  ,,,,$ 	))= 	) $)D # 9	-)9	--1-A9	-(C//$(_````$ 5	-T-A 5	-jT\F\F\aea}F\DH_abcccc#+0D+I]adIdId  /;xAWAW`fAW / [
49N`8a8a [888888/8y HK,Gk0[ 0[ 0[,# !N'3..+/+?+X+XY\+]+]D(#'#7#<L(1 v$0$<v%1%>v .:-E-Qv .:->	v
 &2Z5K%K%K)-)=)Cs)J)Jd26tv v v"2GG+/+?+M+Mc+R+R+\+\#S,* ,**B*B3*G*G ("2MMOOGd268Z[[[&66t7K7PQQ Xd26VX X X"h..!,!3 /7B7K / $ 4 H H J J /N16{7P1Q1Q.  $3CGYYY '2o(,(<(L3M !N !N !N	  * ! ! ! D! ,I# 	A$(?@@@()9#6#Y#y;*t}TEU 0n& & &	 " 
	A! 	AR R R R R R 4J	0000C@@@>*- 	42G C7h..dhh/6ww!B C C C+3I( 4 	[DHVXYZZZ> 	\ 	\Cx+ \C4O4O4Q4Q \"WYZ[[[y  CJv VVVs   U
 

UUc                 t   t                      }dt          j        z  }|                    |t          j        | j                   |j        t          |j                  | j	        z
  d         D ]+}|                    |j
        |j        |j        dd           ,|                    t          j        | j        j
                  }|t	          j        ||          }|                                                    |d|d| j        |          }d|_        d|_        t	          j        |j                  |_        dS )	a  
        Declares the optional argument struct (the struct used to hold the
        values for optional arguments). For fused cdef functions, this is
        deferred as analyse_declarations is called only once (on the fused
        cdef function).
        z%snNT)allow_pyobjectallow_memoryviewstructr   )rk   kindscopetypedef_flagr3   r  r   )r   r
   pyrex_prefixdeclare_varr   
c_int_typer3   rR   rG   r  rk   r]  mangleopt_arg_prefixrf  get_fused_cnamer  declare_struct_or_uniondefined_in_pxdusedrp  op_arg_struct)	r   r  r   r  r  arg_count_memberr  struct_cnameop_args_structs	            r4   r  z/CFuncDeclaratorNode.declare_optional_arg_structE  s/    #$$ 6#66*J,A48LLL>#in"5"58O"O"P"PQ 	g 	gCch#'$aeffffzz&"7HH"%5k<PPL))++CC D     )*%","78K"L"L	r6   )r   NNFr   )rK   rp   rq   r   r  r  r  r  rE  rG  rb  r  r\   r6   r4   r  r  t  s         655KKOI) ) )  ,cW cW cW cWJM M M M M Mr6   r  c                       e Zd ZdgZddZdS )CConstDeclaratorNoderf  r   NFc                     |j         rt          | j        d           t          j        |          }| j                            |||||          S )Nz)Const base type cannot be a Python objectrn  )ro  r   r3   r   c_const_typerf  rb  )r   r^  r   r_  r`  ra  consts          r4   rb  zCConstDeclaratorNode.analysek  sX      	?$(=? ? ?'	22y  h:^d eeer6   rc  r  r\   r6   r4   r  r  f  s7         (Kf f f f f fr6   r  c                       e Zd Zg dZddgZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZd Zed	             Zed
             ZddZd Zd Zd ZddZdS )CArgDeclNode)r^  
declaratorrK  
annotationrK  r  r   r   FNc                 4    | j                                         S r   r  rE  r   s    r4   rE  zCArgDeclNode.declared_name      ,,...r6   c                 4    | j                                         S r   )rk   as_c_string_literalr   s    r4   name_cstringzCArgDeclNode.name_cstring  s    y,,...r6   c                     | j         r&t          t          j        | j        j        z             S t          t          j        | j        j        z             S r   )needs_conversionr!   r
   
arg_prefixr  rk   
var_prefixr   s    r4   	hdr_cnamezCArgDeclNode.hdr_cname  sD       	H"6#4tz#FGGG"6#4tz#FGGGr6   c                 2   |r|x| j         _        | _        | j        | j        | j        fS t	          | j        t                    r| j        j        dk    r|rz| j         j        r1| j         	                    |d          }|
                                }n| j         j        }t          |          | j        _        d | j         _        d| j         _        d}nd}d| j         _        | j         	                    ||          }t          | j         dd           }|r|| j        _        |j        rt	          | j         t                    rtt	          | j        t                     rZ| j        }	t	          |	j        t                     r!|	j        }	t	          |	j        t                     !| j         j        |	_        |j         }| j        r>|r<|j        d         r/t          | j         dd           |                     |          }
|
|
}| j        	                    |||          S )	Nr   T)could_be_nameFarg_nameannotation_typingrk   r_  )r^  r  r]  r  rH   r  rJ  rk   is_basic_c_typerb  empty_declaration_coder   is_argr   rV  TemplatedTypeNoder  rf  array_declaratorr  r   inject_type_from_annotations)r   r   r_  r  r]  r  r  r^  base_arg_namer  arg_types              r4   rb  zCArgDeclNode.analyse  s    	H<GGDN&)99 '22 do':;; 	"@TXZ@Z@Z 	7>1 3>11#T1JJD#::<<HH#~2H'4X'>'>$&*#16. MM!M $N**3m*LL	
DAA 	1#0DO 
  	,t~/@AA	,t0DEE	, JZ_.BCC -'_
 Z_.BCC -"n=JO!+I O 	% 	%7J(K 	% DNFD99A88==H#$	&&y#&IIIr6   c                 H   | j         }|sd S |                    || j                  \  }}|t          |j        |d          | _        |rd|v r3|                                }|r|                                snd| _        n|t          u rd| _        n| j        rf| j        j
        rZ|                                s|j        r?|                                s|j        }| j        st          | j        d           d| _        n"| j        s|                                rd| _        |S )N)assigned_valueT)r]  r  typing.OptionalzIPEP-484 recommends 'typing.Optional[...]' for arguments that can be None.)r  analyse_type_annotationrK  CAnalysedBaseTypeNoder3   r^  resolvecan_be_optionalor_noner   r   equivalent_typer	   not_none)r   r   r  	modifiersr   s        r4   r  z)CArgDeclNode.inject_type_from_annotations  s]   _
 	4(@@UYUa@bb	82Xd< < <DN  	% I--#++-- (H$<$<$>$> ( #'DLL^++# %$,"6 %H<T<T<V<V %ZbZr %//11 8'7H| (DH&qrrr#'DL\ %h&>&>&@&@ % $r6   c                    | j         }| j        rv| j        j        rK| j                            |           | j                            | j                                                  S |                    | j                  | _         | j         S r   )r  rK  r   generate_evaluation_coder]  	cast_coder   get_argument_default_constr   s     r4   calculate_default_value_codez)CArgDeclNode.calculate_default_value_code  s    %| P<* FL99$???9..t|/B/B/D/DEEE%)%D%DTY%O%O"!!r6   c                 L    | j         r| j                             |           d S d S r   )rK  r   r   s     r4   r   zCArgDeclNode.annotate  s2    < 	(L!!$'''''	( 	(r6   c                    | j         }||j        rd S ||                     |          }|                    |           |                    |           |r|                                n|                    | j                  }|                    |d|d           |	                    |                                | j                   |
                    |           |                    |           d S N = ;)rK  r   r0  r-  make_owned_referencer   	result_asr]  rP   put_giverefgenerate_post_assignment_code
free_temps)r   rU   targetoverloaded_assignmentrK  r   s         r4   generate_assignment_codez%CArgDeclNode.generate_assignment_code  s    ,?g0?F>66t<<F((...$$T***%:\!!!@Q@QRVR[@\@\

0111))49555--d3334     r6   )r   FNF)rK   rp   rq   r   r   r  is_type_arg
is_genericis_special_method_optionalkw_onlypos_onlyr*  r(  r]  r  r  r  
is_dynamicrE  propertyr  r  rb  r  r0  r   r=  r\   r6   r4   r  r  s  s       ( GFFKl+KKKJ!&GHHGDOMJJ/ / / / / X/ H H XH0J 0J 0J 0Jd! ! !F" " "( ( (! ! ! ! ! !r6   r  c                       e Zd Zd ZdS )CBaseTypeNodec                 ,    |                      |          S r   rb  r   s     r4   r  zCBaseTypeNode.analyse_as_type#  s    ||C   r6   N)rK   rp   rq   r  r\   r6   r4   rG  rG    s#        ! ! ! ! !r6   rG  c                       e Zd Zg ZddZdS )r%  Fc                     | j         S r   r]  )r   r   r  s      r4   rb  zCAnalysedBaseTypeNode.analyse,  rN  r6   NFr  r\   r6   r4   r%  r%  '  s/         K     r6   r%  c                   .    e Zd Zg ZdZg ZdZdZdZddZ	dS )CSimpleBaseTypeNodeNFc                    d }| j         r>t          j        | j        | j        | j                  }|st          | j        d           n| j        dk    r| j        s	t          }n| j         | j
        r|j        r	|j        }nt          }n|}| j        r| j        D ]S}|                    |          }|'|j        s|j        r|j        j        r|j        j        }@|r|j        r|j        }Qd } |Wt'          | j                  dk    r?ddlm} |                    | j        d                   }|r|j        r ||j                  }| |                    | j        | j                  }|r|j        r|                                }|                    | j                  }|n|r7| j
        r|j        r|j        }nt          }t5          | j                  | _        ni| j        rE| j        | j        vrt          | j        d| j        z             t          j        | j                  }nt          | j        d| j        z             |r(|j        r!|j        r|                     |j                  }| j!        rM|j"        r|j#        rt          | j        d           t          j$        |          }|%                    |           n6|t(          j&        u r(t          j'        }|%                    |           d| _!        |st          j(        }|S )	Nz&Unrecognised type modifier combinationobjectr   )'get_known_standard_library_module_scoper   z'%s' is not a type identifierz#can only complexify c numeric typesT))r  r   simple_c_typesignedlongnessrk   r   r3   module_pathr   r  r  r  lookupr  is_typer]  r  	as_modulerG   r   rR  known_standard_library_importfind_imported_moduler  lookup_typer   r  r  r  rZ  r[  r\  complex
is_numeric
is_complexCComplexTypecreate_declaration_utility_codecomplex_typec_double_complex_typer   )	r   r   r  r]  r  r   r  rR  found_entrys	            r4   rb  zCSimpleBaseTypeNode.analyseA  sg     >	U+DK	RRD Jdh HIIIY(""4+;"!DDY &C$8 & &E Q ,  D!LL..E(* ) )*/**A ) !&
 0 5?  % $=S)9%:%:a%?%? QPPPPP"%**T-=a-@"A"AK" s{'P s G GHq r r=44T5EtxPPE U) 1!..00E((33#" U' .C,@ ."  .$1$)$<$<DMM~ U9DN::!$(,Kdi,WXXX)A$)LLdh(G$)(STTT 	:DM 	:c&; 	:??3#899D< 	 ? Gdo Gdh EFFF*400D005555W)))
 3D00555DL 	)(Dr6   rM  )
rK   rp   rq   r   r  rV  r  r]  r  rb  r\   r6   r4   rO  rO  0  sN         KHKOGKT T T T T Tr6   rO  c                   (    e Zd ZdZddgZddZd ZdS )	MemoryViewSliceTypeNode
memoryviewbase_type_nodeaxesFc                 (   | j                             |          }|j        r|S ddlm} 	 |                    || j                  }nP# t          $ rC}t          |j	        |j
                   t          j                    | _        | j        cY d }~S d }~ww xY w|                    | j        |          st           | _        nNt          j        ||          | _        | j                            | j                   |                     |           | j        S Nr   
MemoryView)rh  rb  r  r   rm  get_axes_specsri  r   r   positionmessage_onlyr   	ErrorTyper]  validate_axesr3   r   MemoryViewSliceTypevalidate_memslice_dtypeuse_memview_utilities)r   r   r  r^  rm  
axes_specses          r4   rb  zMemoryViewSliceTypeNode.analyse  s   '//44	/i/      	#223	BBJJ 	 	 	!*an---",..DI9	
 ''*== 	,"DII"6y*MMDII--dh777&&s+++ys   A 
B8B	BBc                 F    ddl m} |                    |j                   d S rk  )r   rm  use_utility_codeview_utility_code)r   r   rm  s      r4   ru  z-MemoryViewSliceTypeNode.use_memview_utilities  s1          Z9:::::r6   NrM  )rK   rp   rq   rk   r   rb  ru  r\   r6   r4   rf  rf    sF        D#V,K   .; ; ; ; ;r6   rf  c                       e Zd ZdgZddZdS )CNestedBaseTypeNoder^  Nc                 x   | j                             |          }|t          j        u rt          j        S |j        s$t          | j        d|z             t          j        S |j                            | j	                  }|r|j
        s-t          | j        d|d| j	        d           t          j        S |j        S )Nz'%s' is not a valid type scope'rD   z' is not a type identifier)r^  rb  r   r   r  r   r3   r  lookup_hererk   rX  r]  )r   r   r  r^  
type_entrys        r4   rb  zCNestedBaseTypeNode.analyse  s    N**3//	
---((% 	)$(<yHIII((_00;;
 	)!3 	)$(()))TYYYWXXX((r6   r   r  r\   r6   r4   r|  r|    s1         -K     r6   r|  c                   6    e Zd Zg dZdZdZdZd ZddZd Z	dS )	r  )rh  positional_argskeyword_args
dtype_nodeTNc                 R   |j         dk    }|j         dk    }|j        o| }g }| j        D ]}|                    |pt	          |t
                              5  |                    |          }d d d            n# 1 swxY w Y   |$|j        rt          |j	        d           t          }nh|r|j        r|r]|                                sI|j        r|                                s|j        }n&t          |j	        |j         d|           t          }|                    |           |S )Nr#  zdataclasses.ClassVarz!unknown type in template argumentz [...] cannot be applied to type )r  in_c_type_contextr  new_c_type_contextrH   rG  r  r  r   r3   r   ro  r'  r)  as_cython_attributer  )	r   r   r^  require_optional_typesrequire_python_typesr  template_typesr  ttypes	            r4   _analyse_template_typesz)TemplatedTypeNode._analyse_template_types  s   !*!GK\!\(EI__1N:N6N!1 	) 	)M''(9(eZWd=e=eff ; ;%55c::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;}) '-+-PQQQ&E% 'e.? 'CY 'bgbwbwbyby '( '1R1R1T1T '!1EE-+!>>>.    'E!!%((((s   A88A<	?A<	Fc                    || j                             |          }|j        r|S |j        r|                                s|j        r| j        rG| j        j        r;|j        rdnd}t          | j	        d|z             t          j        | _        | j        S |                     ||          }|                    | j	        ||          | _        n|j        rddlm} |                    | j	        || j        | j        |j                  }t*          j        d         dk     r+t/          d |                                D                       }t          j        |fi || _        t5          |          rEt7          | j                  r1t          j        t;          | j                  | j                  | _        nt=          | j	        d	d 
          }t?          | j                  dk    s| j        j        r't          | j	        d           t          j        | _        nY| j        sd }	n| j        d         }	tA          | j	        ||	          | _!        | j!                            ||          d         | _        | j        rf| j        j"        rZ|j#        rS	 | j        $                    |j#                  | _        n-# tJ          $ r  t          | j	        d| j&        z             Y nw xY w| j        S )Nzc++ templateszindexed typesz %s cannot take keyword argumentsr   Bufferr   r,   c                 B    g | ]\  }}|                     d           |fS )r   )r;   )r   rk   r   s      r4   r   z-TemplatedTypeNode.analyse.<locals>.<listcomp>  sC      D  D  D$/D% "&W!5!5u =  D  D  Dr6   r   rk   r  zinvalid array declaration)rf  r  rT  )'rh  rb  r  r  r  r  r  key_value_pairsr   r3   r   r   r]  r  r  ro  r   r  analyse_buffer_optionsr  buffer_defaultsr   version_inforf   rg   
BufferTyper&   r(   PythranExprr'   rJ  rG   r  r  rZ  r[  r\  r   rk   )
r   r   r  r^  tpr  r  optionsempty_declaratorr  s
             r4   rb  zTemplatedTypeNode.analyse  s,   +33C88I/i/# 1	M	(B(B(D(D 1	M61	M   !T%6%F !(1(>S__Odh BR GHHH&1	y !99#yIIN!11$(CPPDII" %	M      33$!)+ +G "Q&&  D  D3:==?? D  D  D E E #-iCC7CCDIc"" W'8'C'C W&2<	3J3JDIVV	  348"DQQQ4'((1,,0A0Q,dh ;<<<&1		 + 8 $II $ 4Q 7I(<H)')) )) ))% !199)SII!L	9 	!+ 	!0E 	!! I001FGG		# ! ! !dhji ! ! ! ! !!
 ys   $J1 1'KKc                 D   g }| }|j         r|j        rt          |j                  dk    ru| j                            |          }|j        r!|j        r|                    |j                   |j        d         }|j         r|j        rt          |j                  dk    u|S )Nr   r   )r   rh  rG   r  r  r  modifier_namer  )r   r   r+  modifier_nodemodifier_types        r4   analyse_pytyping_modifiersz,TemplatedTypeNode.analyse_pytyping_modifiers=  s     	2 	=}7S 	=X[\i\yXzXz~XX /??DDM9 >m>Y >  !<===)9!<M	 2 	=}7S 	=X[\i\yXzXz~XX r6   )FN)
rK   rp   rq   r   r   r  rk   r  rb  r  r\   r6   r4   r  r    sn        1 1 1K "JD  :@ @ @ @D    r6   r  c                       e Zd ZddgZddZdS )CComplexBaseTypeNoder^  r  Fc                 x    | j                             ||          }| j                            ||          \  }}|S r   )r^  rb  r  )r   r   r  rf  _r]  s         r4   rb  zCComplexBaseTypeNode.analyseQ  s9    ~%%c=99/))$444r6   NrM  r  r\   r6   r4   r  r  K  s4         -K     r6   r  c                       e Zd ZdgZddZdS )CTupleBaseTypeNode
componentsFc                 
   g }| j         D ]Q}|                    |          }|j        rt          |j        d           t
          c S |                    |           R|                    | j        |          }d|_        |j	        S )Nz/Tuple types can't (yet) contain Python objects.T)
r  rb  ro  r   r3   r   r  declare_tuple_typer  r]  )r   r   r  component_typesr   r]  r  s          r4   rb  zCTupleBaseTypeNode.analyse\  s     	) 	)A99S>>D "aeNOOO!!!!""4((((&&txAA
zr6   NrM  r  r\   r6   r4   r  r  W  s1          .K
 
 
 
 
 
r6   r  c                   $    e Zd ZdZg Zd ZddZdS )FusedTypeNodea  
    Represents a fused type in a ctypedef statement:

        ctypedef cython.fused_type(int, long, long long) integral

    name            str                     name of this fused type
    types           [CSimpleBaseTypeNode]   is the list of types to be fused
    c                     |                      |          }|                    | j        || j                  }d|_        d S )NT)rb  declare_typedefrk   r3   r1  )r   r   r]  r  s       r4   r   z"FusedTypeNode.analyse_declarationsu  s>    ||C  ##DItTX>> !r6   Fc                    g }| j         D ]^}|                    |          }|st          |j        d           /||v rt          |j        d           I|                    |           _t          j        || j                  S )Nr  zType specified multiple timesrM  )rd   r  r   r3   r  r   	FusedTyperk   )r   r   r  rd   r  r]  s         r4   rb  zFusedTypeNode.analyse|  s     
	# 
	#I,,S11D im\222u}}im%DEEEET""""
 #E	::::r6   NrM  )rK   rp   rq   r   r   r   rb  r\   r6   r4   r  r  i  sH          K! ! !; ; ; ; ; ;r6   r  c                       e Zd ZdgZddZdS )CConstOrVolatileTypeNoder^  Fc                     | j                             ||          }|j        rt          | j        d           t          j        || j        | j                  S )Nz2Const/volatile base type cannot be a Python object)	r^  rb  ro  r   r3   r   c_const_or_volatile_typeis_constis_volatile)r   r   r  rf  s       r4   rb  z CConstOrVolatileTypeNode.analyse  s[    ~%%c=99 	H$(FH H H24HXYYYr6   NrM  r  r\   r6   r4   r  r    s7        
 -KZ Z Z Z Z Zr6   r  c                   &    e Zd ZddgZdZdZddZdS )r/  r^  declaratorsNc                    | j         i | _         |s|}|| _        | j        r | j        d                                         }nd }|| j        dk    rt          | j        d           t          | j                  dk    r t          | j        d         j        d           t          d|          }|j	        j
        |_
        |D ]#}|                    |j        || j                   $| j                            |          }d }| j        j        r| j                            |          }|j        r1| j        s*|j        s|j        rt          | j        d           t*          S d | _        | j        }| j        D ]}t          | j                  dk    r8t/          |t0                    s#|j
        d         rt3          |j        d	d           | j        o| j        dk    o|j        }	|	rd
|_        t/          |t6                    r(|                    ||| j         || j                  \  }
}n!|                    |||| j                  \  }
}|                                s1| j        dk    r|j        s|j        st          |j        d|z             | j        dk    r|j        rt          |j        d           |
j        }|
j         }|dk    rt          |j        d            d S |j!        r | j        dk    rt          |j        d           |j"        r | j        dk    rt          |j        d           |j#        rd|j
        v rd|_$        |%                    |||j        || j        | j        | j&        | j'        | j        	  	        | _        | j        #tQ          j(        | j                   | j        _         |	r+| j        j)        *                    |           d| j        _+        j| j        rt          | j        d           | j         rt          | j        d           |,                    |||j        ||| j        | j&        d|	  	        | _        tZ          j.        r$t_          | j        | j0                  | j        _0        d S )Nr   r  zOnly extern functions allowedr   z%Can't multiply declare template typesfunc_templatezFused types not allowed herezwarn.multiple_declaratorszNon-trivial type declarators in shared declaration (e.g. mix of pointers and values). Each pointer declaration should be on its own line.F)r  r`  ra  r  z Variable type '%s' is incompletez'Python object cannot be declared externr   zMissing name in declaration.z8C++ references cannot be declared; use a pointer insteadz(C++ rvalue-references cannot be declaredr$  T)r  r`  ra  apir+  r  z>Variables cannot be declared with 'cpdef'. Use 'cdef' instead.z,Decorators can only be followed by functions)r  r`  ra  r  is_cdefpytyping_modifiers)1r  
dest_scoper  rG  r`  r   r3   rG   r   outer_scoper   declare_typerk   r^  rb  r   r  rZ  ra  r  is_module_scoper   r  rH   rJ  r	   r  r  r  rV  is_memoryviewslicero  r  is_referencer  r  is_static_methoddeclare_cfunctionr  r+  r   r]  create_to_py_utility_codecreate_wrapperr  r$   
docstringsr@   r?   )r   r   r  r  template_paramr^  r+  r`  r  create_extern_wrapperr  r]  rk   r  s                 r4   r   z CVarDefNode.analyse_declarations  s    ($&D! 	J$ 	(+==??III (**dh ?@@@4#$$q((d&q)-/VWWW55C _7CN"+ P P  !4ndhOOOON**3//	 	>0 	GAA#FFI 	dk 	s7K 	7:7J	$(:;;;
_
* 9	H 9	HJD$%%))&z3FGG *'BC * NJKLN N N
 &*%5 &=)-H)D&=),)< " % /).
&*&9:: O(2(:(:sT5JWajnju ); )w )w% )3(:(:sz$+ ); )O )O%##%% U8333I`3*.*Lt*STTT(**t/?*jn&OPPP"'D#)Erzzjn&DEEE  bT_%@%@jn&`aaa' RDOx,G,Gjn&PQQQ  H!S^33,0D)'99$
DODKDNHX : Z Z
 :)26)D<Q2R2RDJ/( 5JO==cBBB04DJ-# f$($deee( T$($RSSS'33$
Jt{$9 4 N N
 % H%3DHdh%G%GDJNs9	H 9	Hr6   r   )rK   rp   rq   r   
decoratorsr  r   r\   r6   r4   r/  r/    sK         .KJ]H ]H ]H ]H ]H ]Hr6   r/  c                   .    e Zd ZdgZddZd Zd Zd ZdS )CStructOrUnionDefNode
attributesNc                     |                     | j        | j        || j        | j        | j        | j        | j        | j        	  	        | _	        d S )N)r`  r  packed)
r  rk   r  r  r3   r  r`  r  r  r  r   r   r  s      r4   declarezCStructOrUnionDefNode.declare   sH    00Ity%):DHJ4?; 1    


r6   c                    d }| j         t          | j                  }|                     ||           | j         | j        r|j        sd| j        _        | j         D ]}|                    ||           | j	        dk    rM|j
        D ]G}|j        }|j        r|j        }|j        || j        j        k    rt          |j        d           Dd S d S d S )Nr   r  z)Struct cannot contain itself as a member.)r  r   rk   r  ra  r1  r  r  r   r`  var_entriesr]  rV  r^  r   r3   )r   r   r  r   r]  s        r4   r   z*CStructOrUnionDefNode.analyse_declarations&  s   ?&&ty11ES%   ?&{ .3? .,-
) 6 6))#u5555(**!- U UD9D- .#~ - .tz..dh(STTT '&
 +*U Ur6   c                     | S r   r\   r   s     r4   rw   z)CStructOrUnionDefNode.analyse_expressions8      r6   c                     d S r   r\   r   s     r4   r   z-CStructOrUnionDefNode.generate_execution_code;  r   r6   r   )rK   rp   rq   r   r  r   rw   r   r\   r6   r4   r  r    sa          .K       U U U$      r6   r  c                   6    e Zd ZdZd Zd Zd Zd Zd Zd Z	dS )CppClassNodeNc           	      ^   | j         d }nmd | j         D             }t          d | j         D                       }|r<t          d | j         d |          D                       st          | j        d           |                    | j        d | j        | j        g | j        |          | _	        d S )Nc                 @    g | ]\  }}t          j        ||           S r\   r   r  r   template_namerequireds      r4   r   z(CppClassNode.declare.<locals>.<listcomp>Q  C     M M M"9- )@T\P\]] M M Mr6   c              3   "   K   | ]
\  }}| V  d S r   r\   r   r  r  s      r4   r0  z'CppClassNode.declare.<locals>.<genexpr>S  s(      (X(X+!XX(X(X(X(X(X(Xr6   c              3       K   | ]	\  }}|V  
d S r   r\   r  s      r4   r0  z'CppClassNode.declare.<locals>.<genexpr>T  s&      1w1w{q((1w1w1w1w1w1wr6   zGRequired template parameters must precede optional template parameters.)base_classesr`  r  )
r  sumr4  r   r3   declare_cpp_classrk   r  r`  r  )r   r   r  num_optional_templatess       r4   r  zCppClassNode.declareM  s    >!!NNM M=A^M M MN%((X(X(X(X(X%X%X"% kc1w1wdn]u_u^u]uNv1w1w1w.w.w kdh ijjj**ItTXtz> + S S


r6   c           	      l   
  j         d x}}n"d  j         D             }d  j         D             }d  j        t           j        |           fd}t	          |fd j        D                       }                     j         j         j        | j	        |           _
         j
        d S d j
        _         j
        j        _        g }
fd
 j         j        rj        sd j
        _         j        D ]?}t!          |d	d           }|r|                               |                               @ 
 j                  D ];}	|                    |	            j         d
d                    |          z  |	_        <t-           j        |           _         _        d S )Nc                     g | ]\  }}|S r\   r\   )r   r  r  s      r4   r   z5CppClassNode.analyse_declarations.<locals>.<listcomp>^  s    SSS0@qmSSSr6   c                 @    g | ]\  }}t          j        ||           S r\   r  r  s      r4   r   z5CppClassNode.analyse_declarations.<locals>.<listcomp>_  r  r6   )r  c                 X    | j         s| j        rdS t          j        d| z             d S )NTz&Base class '%s' not a struct or class.)r  	is_structr   r3   )
base_classr   s    r4   base_okz2CppClassNode.analyse_declarations.<locals>.base_okd  s=    & W**> Wtdh H: UVVVVVr6   c                 >    g | ]}|                     p          S r\   rI  )r   br   r  s     r4   r   z5CppClassNode.analyse_declarations.<locals>.<listcomp>i  s)    +_+_+_AIIels,C,C+_+_+_r6   )r`  r  r   c              3     K   | D ]}t          |t                    r|V  t          |t                    r |j        j                  D ]}|V  Nt          |t
                    r|j         |j                  D ]}|V  d S r   )rH   CFuncDefNoder   r   r  r  r  )r  r   sub_attrfunc_attributess      r4   r  z:CppClassNode.analyse_declarations.<locals>.func_attributess  s      " ' 'dL11 'JJJJ&<== '$3ODIO$D$D ' '&'l33 '8S$3ODO$D$D ' '&' 'r6   r  ztemplate <typename %s>z, typename r  )r  r  r   rk   filterr  r  r3   r  r`  r  r  r]  ra  r1  r  r   r  r   r  r   template_declarationr  r   r  )r   r   r  template_namesr  base_class_typesdefined_funcsr   r  rZ   r  r  s   ``        @@r4   r   z!CppClassNode.analyse_declarationsZ  s3   >!.22N^^SSDNSSSNM M=A^M M MN?&!$)SNKKKE	W 	W 	W 	W 	W
 "'+_+_+_+_+_TM^+_+_+_``**IudhJ(T_P^ + ` `
 :F"#
EJ		' 		' 		' 		' 		' ?&{ .3? .,-
) 1 1!$	488 (LL'''))%0000'88 n n$$T***>-0H=K]K]^lKmKm0mD- ???	


r6   c                 b    | j                             | j        j        j                  | _         | S r   )r   rw   r  r]  r  r   s     r4   rw   z CppClassNode.analyse_expressions  s%    I11$*/2GHH	r6   c                 Z    | j                             | j        j        j        |           d S r   )r   r   r  r]  r  r(  s      r4   r   z*CppClassNode.generate_function_definitions  s'    	//
0EtLLLLLr6   c                 :    | j                             |           d S r   r   r   r   s     r4   r   z$CppClassNode.generate_execution_code      	))$/////r6   c                 :    | j                             |           d S r   r?  r   s     r4   r   zCppClassNode.annotate  r@  r6   )
rK   rp   rq   r  r  r   rw   r   r   r   r\   r6   r4   r  r  ?  s|         JS S S0 0 0d  M M M0 0 0! ! ! ! !r6   r  c                   2    e Zd ZddgZdZd Zd Zd Zd ZdS )CEnumDefNoderg   underlying_typeNc                     d }t           j        rt          | j        | j                  }|                    | j        | j        | j        | j        | j	        | j
        | j        | j        |	  	        | _        d S )N)r  scopedr  r`  r  r  r?   )r$   r  r@   r3   r?   declare_enumrk   r  r  r  r`  r  r  r  )r   r   r?   s      r4   r  zCEnumDefNode.declare  so     	5 4844C%%Itx*;*DH.C & 9 9


r6   c                    d }| j                             |          }|j        st          | j         j        d           || j        j        _         | j        r:| j        3t          | j
        |          }| j        j        |_        |j        |_        n|}| j        p| j        r|j        sd| j        _        | j        dk    }|rdnd }| j        D ]?}|                    || j        |           |rd|j        j        |j        j        n|z   }>d S d S )Nz'underlying type is not an integral typer   r  r   )r  rb  r  r   r3   r  r]  r  rg   r    rk   r   ra  r1  r  r`  analyse_enum_declarationsenum_int_value)r   r   r  r  is_declared_enumnext_int_enum_valuer   s          r4   r   z!CEnumDefNode.analyse_declarations  s>   .66s;;% 	W$&*,UVVV*9
'; 	4:1&ty#66EEJ"~EE:!{ .3? .,-
)  $(:'7"A!!T
 u u..udjBUVVV# u*+59Z5N5Z
11`s+u' "!u ur6   c                     | S r   r\   r   s     r4   rw   z CEnumDefNode.analyse_expressions  r  r6   c                    | j         rd S | j        dk    s| j        r.|                    | j                   |j                            t          j        d          }| j	        j
        D ]}|                    |d|j        d|                    ||j                             |                    |t          j                   |                    dt          j        d|j        d|d	|                    |j                             |                    |t          j                   |j                            |           d S d S )
NpublicT
manage_refz = PyInt_FromLong(); zif (PyDict_SetItemString(, "", ) < 0) )r  r`  r  r  r3   	funcstateallocate_tempr   r   r  enum_valuesrP   r  error_goto_if_null
put_gotrefr
   moddict_cnamerk   
error_gotoput_decref_clearrelease_temp)r   rU   tempr   s       r4   r   z$CEnumDefNode.generate_execution_code  sX   ; 	F?h&&$(&MM$(###>//
0IVZ/[[D
. G G

DDJJJ++D$(;;;= > > > j&?@@@


(((IIIDDOODH---	/ 0 0 0
 %%dJ,EFFFFN''----- '&r6   )	rK   rp   rq   r   r?   r  r   rw   r   r\   r6   r4   r  r    se         -.K
C9 9 9u u u>  . . . . .r6   r  c                       e Zd ZdgZd ZdS )CEnumDefItemNoder   c                 ^   | j         ry| j                             |          | _         | j         j        j        sI| j                             t
          j        |          | _         | j                             |          | _         |j        j        r|j        d| j	        }n| j        }|
                    | j	        |j        | j         | j        ||j        |j        |j        o|j	        d u           x| _        }|}| j         r^| j         j        rt#          | j         j                   }n8| j         j        s| j         j        r| j         j        r| j         j        j        }nd }|||_        |j                            |           |j	        r&|j        j                            |j	                   d S d S )N::)r  r`  r  r  )r   r  r]  r  r  r   r  is_cpp_enumr  rk   declare_constr3   r`  r  r  r  r   r+   r   is_attributer  r  r  r  )r   r   
enum_entryincremental_int_valuer  r  
enum_values          r4   r  z*CEnumDefItemNode.analyse_enum_declarations  s   : 	F<<SAADJ:?) F!Z11*2GMM
!Z@@EE
?& 	 * 0 0 0$))<EEJE ..IzJ!,*.%4PD9P	 / R R 	R
U +
: 	"z$ "*4:+;<<

*$ "
(? "TZEU "!Z-<

 "
!#-E %%e,,,? 	6O"))%*55555	6 	6r6   N)rK   rp   rq   r   r  r\   r6   r4   r  r    s,        
 )K!6 !6 !6 !6 !6r6   r  c                   (    e Zd ZddgZd Zd Zd ZdS )CTypeDefNoder^  r  c                 N   | j                             |          }| j                            ||| j        | j                  \  }}|j        }|j        }|                    ||| j        || j        | j	                  }|j
        rd|_        | j        r|j        sd|_        d S d S d S )Nr  )r  r`  r  Tr   )r^  rb  r  r`  ra  rk   r  r  r3   r  rZ  r1  r  )r   r   rf  r  r]  rk   r  r  s           r4   r   z!CTypeDefNode.analyse_declarations#  s    ~%%c** $ 7 7#$/$+ !8 !G !G#%##$DO $ C C = 	% $E; 	%s 	%#$E   	% 	% 	% 	%r6   c                     | S r   r\   r   s     r4   rw   z CTypeDefNode.analyse_expressions4  r  r6   c                     d S r   r\   r   s     r4   r   z$CTypeDefNode.generate_execution_code7  r   r6   NrK   rp   rq   r   r   rw   r   r\   r6   r4   r)  r)    sM         -K% % %"      r6   r)  c                       e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZg ZdZdZdZdZdZdZdZd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&dS )FuncDefNodeNFc                    d}| j         D ]}|j        rd}|j        rE|j                            |          |_        |j                            |j        |          |_        W|j        r)|j        j        st          |j	        d           d |_        t          |j	        d           d |_        |j
        rd}|rt          |j	        d           d S )Nr   r   z2This argument cannot have a non-None default valuez)This argument cannot have a default valuez/Non-default argument following default argument)rR   rK  r@  rv   r  r]  rA  r   r   r3   rB  )r   r   default_seenr  s       r4   analyse_default_valuesz"FuncDefNode.analyse_default_valuesd  s    9 	R 	RC{ R > 	'"%+";";C"@"@CK"%+"7"7#"F"FCKK3 ';. +cg'[\\\&*#'#NOOO"&CKK R  RcgPQQQ!	R 	Rr6   c                     | j         D ](}|j        r|j                            |          |_        )| j        r!| j                            |          | _        d S d S r   )rR   r  rv   return_type_annotationr   r   r  s      r4   analyse_annotationszFuncDefNode.analyse_annotationsx  sp    9 	C 	CC~ C!$!=!=c!B!B& 	Y*.*E*S*STW*X*XD'''	Y 	Yr6   c                 8   | j         }|j        }|j        |v r#||j                 }|                    |          }nLt	          |t
                    r5|j        r.|j        d         r!|j        }|                    |          }||S n|S |t          |j
        d           n{|t          urE|                    |          s0t          |j        j
        d           t          |j
        d           n-||_        |j        j        r|j                            |           |S )Nr  r  r  r  )r  r]  rk   r  rH   r  r  r   r  r   r3   r   r  r^  r_  ra  )r   r   r  r  	orig_typer  r  s          r4   align_argument_typezFuncDefNode.align_argument_type  s0   0H	8'''(2I"22377JJ\** 	s~ 	#.QdBe 	I99#>>J!
 " J)-....n,,Y5F5Fz5R5R,#-#%YZZZ)-!<====!CHx" >88===
r6   c                     dS Nr   r\   r   lenvs     r4   need_gil_acquisitionz FuncDefNode.need_gil_acquisition  s    qr6   c                    |}|j         s|j        r|j        }|j         |j        | j        r9| j        rt
          nt          } || j        j        ||| j        j	                  }nt          | j        j        ||          }| j        |_        | j        j        }|j        r|j        o|j         |_        || _        |j        |_        |S )N)rk   r  parent_scope
scope_name)rk   r  r@  )is_py_class_scoper  r  needs_closureis_generator_expressionr   r   r  rk   r  r   r  r]  r  r  r  local_scoper   )r   r   genvrj   r=  r]  s         r4   create_local_scopezFuncDefNode.create_local_scope  s    $ 	$(= 	$#D $ 	$(= 	$ 		0.2.J\**P\C3DJO,0-0+/:+;= = =DD
 4:?*.+.0 0 0D  +z 	:9DM(9DJ.r6   c                 :    | j                             |           d S r   r  r(  s      r4   generate_function_bodyz"FuncDefNode.generate_function_body  r  r6   c                 (   '() ddl m}  j        }|j        r#|j        st
          j        dt
          j        }nt
          j        }|                    |            j	        
                    ||                                ||            j        j        dk    o j        j        j        } j        j        dk    o j        j        j        }|p|}|rd j        vr j        dgz    _                                         }	|j        j        d         }
|j        j        d         }|
s|rC|r|                                 |j                            t-          j        d	d
                     |                    |           |                                |_        |j         |j        _        |                     j                                         ||           |!                    d           |	r|!                    |	            "                    ||          p j#        } j$        r j$        %                    ||d            %                    ||           |}|j&        s|j        r|j'        }|j&        |j         j(        rR|)                    |j*        j+        ,                    t
          j                             |!                    d           n j-        r|j        rQ|)                    |j*        j+        ,                    t
          j                             |!                    d           |)                    |j*        j+        ,                    t
          j                             |!                    d            .                    ||           |j/        D ]%}|j0        s|j1        s|2                    |           &d} j3        }|j4        r|j5        r|j6        }|j7        se|j8        rd}n$|j9        rd|:                    |j;                  z   }|!                    |,                    t
          j<                  |d           |=                                } >                    |            j?        }d |j@        D             }|j        o j(        p j-        }d )d}|s|r#|A                                 d|j        _        d}n|=                                )|
s|rS jB        sL|C                                  jD        r jD        E                    |          nd }|F                    |           |r G                    |           |=                                }|=                                }|r H                    |            j(        rt          jJ        dd          }t          jK        |j*        j+        j        |          }|sd|j*        j+        jL        z  }|!                    t
          j        d|j*        j+        M                                d|d|j*        j+        jL        dt
          jN        d
           |!                    dt
          j        z             |!                    t
          j        d|j*        j+        O                    d          d           |P                    dt                     |!                    |R                     j                             |!                    d           |S                    t
          j        |j*        j+                   |!                    d            j-        r jT        rE|!                    |d|j*        j+        M                                d t
          jU        d!           nD|!                    |d|j*        j+        M                                d"t
          jU        d           |j        r&|!                    t
          j        d|d           nG j(        r@|P                    ||j*        j+                   |V                    ||j*        j+                   |
s|r^ jB        sK jW        r j        j        d#z   }n j        j        }|X                    | j        |j        j         $           d|j        _Y         Z                    ||           |j[        D ]c}|j+        j9        s&|s|j\        r|j0        s|]                    |           4|j\        r(|j0        s!|^                    ||j        j        %           d|j/        D ]v}|j1        rm|j\        rf|j0        s_|j+        j9        r!|^                    ||j        j        %           |j_        r|`                    |           a|]                    |           w|j/        |j[        z   D ]5}|j+        ja        r'|jb        jc        jd        r|e                    ||           6 f                    |           |j[        D ]*}|j+        ja        r|g                    || j                   +|j        jh        rd}|rK|j        rD)")A                                 d )d|j        _        |i                                 d|j        _         j                    ||           |                     j        d&           |!                    d           |!                    d'           |j        j        |j        j        )d u d((|f()fd)	' j3        } j	        jk        s|j8        r.t
          j<        } 'd*           |l                    ||           n_|j9        sX|j;        }|r&|!                    t
          j<        d|d           n)|j7        s"|!                    d+t
          j<        z             |m                    |jn                  r j	        jk        s|o                    |jp                   |q                    |jn                   |j        r                                D ].\  }} 'd,           |s                    ||(d,         %           /t          |          d-k    } | r|j                            t                     |!                    d.           |!                    d/            'd,           |!                    d0           |!                    d1           |D ]}|v                    ||           |!                    d2           |j9        r3dd3l mw}! |!x                    t
          j<        |           t
          j<        }"n y                                }" z                                }#|"|#r 'd,           |j        j{        rD|!                    d4t
          j|        z             |!                    d5t
          j|        z             |}                     j        j~                   |j        j{        r|!                    d           nRt           j        j        d6 j        j~        z  d-            'd,           |                     j        j~                   |j;        }$|"|$r|$}"|"6|"t
          j<        k    r%|!                    t
          j<        d|"d           n)|j7        s"|!                    d+t
          j<        z             |r  'd,                                |           |=                                f'( fd7	}%| s	|s|j9        r,(d,         s	|j9        sJ |o                    |j                   n |%             nd8 }%|m                    |jp                  s|m                    |jn                  s|q                    |jp                   |D ]#} 'd*           |v                    ||           $|r  'd*                                |           |j9        r|                    |                    t
          j<                            }&|!                    d9|&z             (d*         s|A                                 |!                    d:           (d*         s|i                                 |!                    d           |m                    |j                  r$ |%             |q                    |j                   |j/        D ]`}|jd        r|j0        r|j+        j        r&|j1        r|j\        s,|j+        j        r 'd*           |                    |(d*         %           a|j[        D ]]}|j0        r
|j+        j9        r	|j\        sn!|s|j\        s)|j+        j        r 'd*           |                    |(d*         %           ^ j(        r5 'd*           |                    t
          j        |j*        j+                   |j        sA|j;        }$ y                                }"|"|$r|$}"|                    t
          j<        |            j        j        rK j        j        d;k    r; 'd*           |!                    d<t
          j<        d=t
          j<        d>           |
s|rad|j        _Y         jB        sN|j8        r)|                    t
          j<        (d*          $           n|                    d(d*          $           |j        jh        rS|                                 |                     j        j        | ?           |                    (d*          $           |s|j        r((d*         r |i                                 d|j        _        |j7        s"|!                    d@t
          j<        z             |!                    d           |	r|!                    dA|	z             |                    |j                   |                                  j$        r j$        
                    ||                                |           d S )BNr   r  rF   __getbuffer____releasebuffer__cython_unusedprofile	linetraceProfilez	Profile.cr   Twith_pymethdef
proto_only)rR  r5  z = NULLr4  c                      g | ]}|j         	|S r\   r  )r   r  s     r4   r   z=FuncDefNode.generate_function_definitions.<locals>.<listcomp>  s    TTTTuTTTr6   Ftp_newri   z
%s->tp_newz = ()(r   , NULL);if (unlikely(!%s)) {Py_None} else {}z) __Pyx_CyFunction_GetClosure();z) z
 (wrapper)r  have_giltrace/* function exit code */)successr   gil_state_declaredc                     |          s>d         s                                  dd<   |                    d           d| <   d S d S )Nrf  TFdeclare_gilstate)ri  put_ensure_gil)	code_pathrU   	gil_ownedgilstate_decls     r4   
assure_gilz=FuncDefNode.generate_function_definitions.<locals>.assure_gil  sl    Y' , !56 ;!224446:I23##U#;;;'+	)$$$, ,r6   re  z!__Pyx_pretend_to_initialize(&%s);r   r   z0{ PyObject *__pyx_type, *__pyx_value, *__pyx_tb;__Pyx_PyThreadState_declare__Pyx_PyThreadState_assignz5__Pyx_ErrFetch(&__pyx_type, &__pyx_value, &__pyx_tb);z5__Pyx_ErrRestore(__pyx_type, __pyx_value, __pyx_tb);}rl  zint %s = 0; /* StopIteration */
if (!%s) {z&Unraisable exception in function '%s'.c                     d         r d|            n!d         r|                                   dd<   d         d         k    s#J j        dd         dd                     d S )Nre  r   )rU   Fz: error path z != success path )put_release_ensured_gilr3   )rU   rn  rl  r   s    r4   $align_error_path_gil_to_success_pathzWFuncDefNode.generate_function_definitions.<locals>.align_error_path_gil_to_success_path	  s    Y' /JwT22222w' /00222).Ig& )Yy-AAAAHHHi000)I2F2FDHAAAAAr6   c                      d S r   r\   r\   r6   r4   rt  zWFuncDefNode.generate_function_definitions.<locals>.align_error_path_gil_to_success_path!	  s      r6   	if (%s) {zOPyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");__hash__if (unlikely(z == -1) && !PyErr_Occurred()) z = -2;)acquire_gil
return %s;#endif /*!(%s)*/)r   r  rE  is_closure_scopeis_passthroughr
   cur_scope_cnameouter_scope_cnamemangle_closure_cnamesr   r   r  r  rk   r  r  r+  get_preprocessor_guardr   r   use_fast_gil_utility_codery  r   load_cachedenter_cfunc_scope	new_labelreturn_from_error_cleanup_labelr  r  rl  r  r3   r	  rP   needs_assignment_synthesispymethdef_requiredpy_funcgenerate_function_headerrB  r  rC  putscope_classr]  rY  needs_outer_scopegenerate_argument_declarationsr  
in_closurer  put_var_declarationr  is_cv_qualifiedr  cv_base_typerX  ro  r  literal_coder  retval_cnamerL   generate_keyword_listry  buffer_entriesrj  is_generatorput_trace_declarationscode_objectcalculate_result_codeput_trace_frame_initgetbuffer_checkgetbuffer_initr   ConstructorSlotget_slot_functiontypeptr_cnamer  empty_tupler.  
put_increfr   r  r  is_cyfunction
self_cnamer8  r   put_trace_call	can_tracegenerate_argument_parsing_codearg_entriescf_is_reassignedput_var_increfput_var_incref_memoryviewslicexdecref_cleanupput_var_xincrefrW  
buffer_auxbuflocal_nd_varr  put_init_varsgenerate_argument_type_testsput_acquire_arg_bufferneeds_refnannyrs  rI  r   put_init_to_py_none
label_usederror_labelput_gotoreturn_label	put_labelall_managed_tempsput_xdecrefrG   restore_exception_utility_codeput_release_buffer_coderm  put_init_entryerror_valuecaller_will_check_exceptionserror_without_exceptionerror_without_exception_cnameput_add_tracebackqualified_namer	   put_unraisablegetbuffer_error_cleanupgetbuffer_normal_cleanupunlikelyerror_conditionneeds_refcountingrefcounting_needs_gilput_var_xdecref
put_decrefput_xgiveref
is_specialput_trace_returnput_declare_refcount_contextput_setup_refcount_contextput_finish_refcount_contextput_temp_declarationsexit_cfunc_scopegenerate_wrapper_functions)*r   r   rU   r  r=  r  is_getbuffer_slotis_releasebuffer_slotis_buffer_slotpreprocessor_guardrN  rO  rR  cenvr  initr  tempvardecl_codery  used_buffer_entriesvar_decls_definitely_need_gilvar_decls_need_gilr  refnanny_decl_coderefnanny_setup_codetp_slotslot_func_cname
trace_namelhsvalr  r]  buffers_presentrm  err_valr  default_retvalrt  condrn  rl  rm  s*   `                                      @@@r4   r   z)FuncDefNode.generate_function_definitions  s     	9)< 	9,2,B,B,B,2,D,D!F !' 8""#4555	//d;;;((t444!Z_? ?!Z-> 	!%4G!G "C!%!1!B 	*C.C 	Ddn44!%?2C!C!88::"-i8$/<	 	Ai 	A 1..000--'	;??A A A 	t$$$/3~~/?/?,'+z>  	dh++D$777

2 	+JJ)***99#tDD 21 	< 	FL11^ 2 F F F%%d>%JJJ $ 	$(= 	$#D $ 	$(= 	$ 	HHT%*;;F<RSSTTTJJsOOOO# 	"  ).??@VWWXXX

3HHT%*;;F<TUUVVVJJsOOO++D$777% 	0 	0E$ 0 0((/// && 	3;+? 	3 &2K" 	& S / S{778QRRRJJ,,V-@AAA     //11""4((( &TT$2ETTT )-
(e8J8ddNd%" 	37 	3!!!'+DN$!% 0022M 	7i 	7$ 7 77999NRN^hd.DDTJJJdh))+666  	'  &&& .==??"2244  	&%%% 	/)DDG'9$:J:O:UW^__O" U".1A1F1T"TJJ&&& %<<>>>> %333"""$ % % % JJ-0FFGGGJJ&&& %//	::::< = = = OOI~666JJttx00111JJz"""OOF2D4D4IJJJJJsOOO! 	K! 	(

%%%$)@@BBBB%%%' ( ( ( (
 

%%%$)@@BBBB%%%' ( ( ( " K

)?)?)?ARARARSTTTT# K 143C3HIII  !2D4D4IJJJ 	,i 	, $ N? 1!%<!?JJ!%J##DN4L0L $ N N N'+DN$++C666 % 
	G 
	GE:0 	G /5#9 /5CS /''...
 ' G0@ G33E-1^-E 4 G G G% 	/ 	/E| / 6 /u?O /:0 K77151I 8 K K K( /((////''... %(88 	2 	2Ez# 2(8(H(M 2$$UD111 	))$///% 	E 	EEz# E--eT48DDD>( 	& "& 	-$* 	-(,,... $+/(((***',DN$
 	##C...dhe,,,

2

-... ~/^-"/4"7
 
	
 (, 	, 	, 	, 	, 	, 	, 	, &y& 	Z& Z )
9%%%((k:::: 3 Z!/ ZJJV-@-@-@###FGGGG$, ZJJBVEXXYYY ??4+,, W	=9* 1d/000NN4+,,,#~??AA K Kt
7###  y7I JJJJ ""566:O 
T 112PQQQ

MNNN

8999
7###

7888

RSSS0 @ @E224????

RSSS- -(((((())&*=tDDD -**,,99;;I"i"
 
7###>9 T$**9F<``   JJ|f.RRSSS&&tz'@AAA>9 $JJsOOO
@
12346 6 6 
7#####DJ$=>>>(6N>("f111JJV-@-@-@'''JKKK ( V

>ATTUUU  3
7###,,T222:>:N:N:P:P H H H H H H H H  7"3 7{7U 7 )K[-KKKKdBCCCC 546666 =<< ??4,-- 	T__TEU5V5V 	NN4,---, < <
9%%%..tU;;;;  4
9%%%--d333-  }}[%@%@AT%U%UVV

$&( ( ( + *'')))

eg g g + 300222

   ??4?@@ 	A00222NN4?@@@% 
	G 
	GE: !1 z+ *< (> :3 *Jy)))  91E FFFF % 	G 	GE z, 	* -  # 5+A :/ *Jy)))   91E FFFF 	KJy!!!OOF2D4D4IJJJ z 	@(6N&&((G>(f1;???:  	;TZ_
%B%B Jy!!!JJJ###V%8%8%8: ; ; ;  		Ci 		C',DN$$ C* C))+y7K3K * M M M M ))!Yy-A)A * C C C >( 	M;;===::z0B,B ; D D D,,y7K3K,LLL 	-4: 	-)I*> 	-((***',DN$" 	;JJ|f&99:::

3 	@JJ),>>??? 	..t~>>> 	< 	BL66sDAAA''-----r6   c                 X   |j         j        rt          |j        d           nN|j                                         s5|j         j        s)|j         j        st          |j        d|j         z             |                    |j        |j         |j                  }|j	        r|j	        |_	        |S )NzInvalid use of 'void'z Argument type '%s' is incomplete)
r]  rX  r   r3   r  rV  r  declare_argrk   r  )r   r   r  r  s       r4   declare_argumentzFuncDefNode.declare_argument	  s    8 	J#'23333%%'' 	J1B 	JchFa 	J#'=HIII#(CG<<> 	."~Er6   c                    |j                                         r|j                            t	          j        dd                     |j         j        }d|j        j        z  }|	                    d|||j
        |j        |j         j        o|j         j        |                    |j                  fz             d S t!          |j        d           d S )NArgTypeTestFunctionArguments.c((PyObject *)%s)z8if (unlikely(!__Pyx_ArgTypeTest(%s, %s, %d, %s, %s))) %szICannot test type of extern C class without type object name specification)r]  typeobj_is_availabler   ry  r   r  r  r  r  rP   accept_noner  is_builtin_typerequire_exactr  r3   r   )r   r  rU   r  arg_codes        r4   generate_arg_type_testz"FuncDefNode.generate_arg_type_test	  s    8((** 	h--'7LMMO O OH2M)CIO;HJJJ!O$H,G1GOOCG,,N. ./ / / / / #'fgggggr6   c           	      `   |j         j        rd|j        j        z  }n|j        j        }|                    d|z             |                    dt          dt          |j                            |j        |                    |j	                  fz             |                    d           d S )Nz
%s.memviewz,if (unlikely(((PyObject *)%s) == Py_None)) {zKPyErr_Format(PyExc_TypeError, "Argument '%%.%ds' must not be None", %s); %s   r]  )
r]  r  r  r  rP   r   rG   r  r  r3   )r   r  rU   r  s       r4   generate_arg_none_checkz#FuncDefNode.generate_arg_none_check	  s    8& 	$ 39?2EEIOE

AEIJJJ

dS)**++S-=OOCG$$h& & 	' 	' 	' 	

3r6   c                     d S r   r\   r   s     r4   r  z&FuncDefNode.generate_wrapper_functions	  r   r6   c                     |                     | j                   | j        s&| j        D ] }|j        s|                    |           d S d S r   )r  r3   r   rR   rD  r=  r   rU   r  s      r4   r   z#FuncDefNode.generate_execution_code	  sf    dh  	7y 7 7~ 700666	7 	77 7r6   c                     | j         j        d         }	 |j        j        j        j        d         j        }n# t          t          f$ r d }Y nw xY w||fS )Nr   obj)rE  r  r]  r^  r  r  r   KeyError)r   	py_bufferobj_types      r4   _get_py_buffer_infozFuncDefNode._get_py_buffer_info	  sg    $03		 ~/5=eDIHH) 	 	 	HHH	 (""s   !6 AAc                     |                                  \  }}|j        }|                    d|z             |                    d           |                    d           |                    d           d S )Nzif (unlikely(%s == NULL)) {zZPyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");z
return -1;r]  )r  r  rP   )r   rU   r  r  views        r4   r  zFuncDefNode.getbuffer_check	  sz    //11	1

047888

 O 	P 	P 	P

<   

3r6   c                     |                                  \  }}|j        }|r;|j        r4|                    d|z  |           |                    d|z  |           d S |                    d|z             d S )N%s->objz%s->obj = NULL;)r  r  ro  r  r8  rP   r   rU   r  r  r  s        r4   r  zFuncDefNode.getbuffer_init	  s    "6688	8 	1, 	1$$Y%5x@@@Y-x88888JJ(4/00000r6   c                 F   |                                  \  }}|j        }|rh|j        ra|                    d|z             |                    d|z  |           |                    d|z  |           |                    d           d S |                    d|z             d S )Nzif (%s->obj != NULL) {r  r]  zPy_CLEAR(%s->obj);r  r  ro  rP   r  r  r	  s        r4   r  z#FuncDefNode.getbuffer_error_cleanup	  s    "6688	8 	4, 	4JJ/$6777OOI,h777!!)d"2H===JJsOOOOOJJ+d233333r6   c                    |                                  \  }}|j        }|rh|j        rc|                    d|z             |                    d|z  |           |                    d|z  |           |                    d           d S d S d S )Nzif (%s->obj == Py_None) {r  r]  r  r	  s        r4   r  z$FuncDefNode.getbuffer_normal_cleanup 
  s    "6688	8 	, 	JJ2T9:::OOI,h777!!)d"2H===JJsOOOOO		 	 	 	r6   c                 D   | j         j        sd S | j         j        }t          j        | j        j                                      |          }|sd S |dk    r!| j         j        	                    d          sd S |dv r| j         j        j
        rd S |                                S )N__long____int__rK  rL  )r  r  rk   r   get_slot_tablerE  r   get_slot_by_method_namer  r  r  preprocessor_guard_code)r   rk   slots      r4   r  z"FuncDefNode.get_preprocessor_guard	
  s    z$ 	4z'(8(CDD\\]abb 	4:dj&6&B&B9&M&M4999dj>N>_94++---r6   )'rK   rp   rq   r  rC  r  r  r  rD  is_coroutineis_asyncgenis_generator_bodyis_async_defr+  has_fused_argumentsstar_argstarstar_argr  r  r4  r   r2  r6  r9  r>  rG  rI  r   r  r  r  r  r   r  r  r  r  r  r  r\   r6   r4   r/  r/  ;  s       * GML#LKLIHLMK!KR R R(Y Y Y  4    ,0 0 0d. d. d.L  h h h$    7 7 7# # #   1 1 1	4 	4 	4  . . . . .r6   r/  c                        e Zd Zg dZddgZdZdZdZdZdZ	dZ
dZdZd Zd Zed             Zd	 Zd
 Zd ZddZd Zd Zd Zd ZddZd dZd Zd Zd Zd Zd Z fdZ d Z!d Z"d Z# xZ$S )!r  )r^  r  r   r  py_func_statr  r  FNc                     | j         j        S r   )r  rk   r   s    r4   unqualified_namezCFuncDefNode.unqualified_name;
  s    zr6   c                 4    | j                                         S r   r
  r   s    r4   rE  zCFuncDefNode.declared_name>
  r  r6   c                 ,    | j         r| j         j        nd S r   )r  r  r   s    r4   r  zCFuncDefNode.code_objectA
  s     ,0<At|''TAr6   c                 	   |j         | _        | j        i | _        | j                            |j                            di                      | j        C| j                            |          }|&t          | j        j	        d           t          j        }n| j                            |          }d|j        v o|                    d           | _        t!          | j        t$                    r7| j                            ||d| j        d uz  | j        | j                  \  }}n0| j                            ||d| j        d uz  | j                  \  }}|j        st          | j	        d           || _        | j        |_        | j        }t3          |d          s|j        }t3          |d          || _        |j        | _        | j        j        }| j        d	k    s| j        r|rt          | j        j	        d
           |j        dk    rJ| j        dk    r?|j         r"|j         j!        rt          | j	        d           ntE          | j	        dd           tG          | j        |j                  D ]\  }}| $                    ||           |j        |_        |j%        |_%        |j&        |_&        | '                    |j        |j	        |           |j        j(        rd| _)        |j        j*        rd| j+        v rtE          |j	        dd           |j        j*        s|j        j,        rA| j        j-        rt          |j	        d           d| j+        v rtE          |j	        dd           | '                    |j.        | j	        |           |j%        }	|j&        }
| j/        |_/        | j        |_        |0                    |	|| j	        |
| j        | j        | j        d u| j+        | j        | j1        
  
        | _2        |j.        | _.        | j.        j3        r | j        dk    rt          | j	        d           | j.        j4        r | j.        5                    | j	        d           | j        rD|j6        s=| j        s6to          | j                  dk     s| j        d         j        j8        sd| _        | 9                    |           | :                    |           d S )Nlocalsr  r$  r)   )r_  r  r`  )r_  r`  z*Suite attached to non-function declarationrR   r  zBFunction with optional arguments may not be declared public or apir  r  z/Only extern functions can throw C++ exceptions.Tinlinez$Buffer unpacking not optimized away.r   zUBuffer may not be acquired without the GIL. Consider using memoryview slices instead.)r  r`  r  definingr+  r  ra  zFunction cannot return an arrayzused as a return valuer   F);r  is_c_class_methodr  r   r   getdirective_returnsr  r   r3   r   r   r^  rb  r  r  rH   r  r  r   r`  r  r]  r  r  hasattrrf  cfunc_declaratorrR   r  r  r  r  r   r	   zipr9  rk   r  _validate_type_visibilityrZ  r  rW  r+  is_pythran_exprr  r  r  r  inline_in_pxdr  rV  r  check_nullary_constructorr  rG   ro  declare_cpdef_wrapperrG  )r   r   r^  r  typr  opt_arg_count
formal_argtype_argrk   r  s              r4   r   z!CFuncDefNode.analyse_declarationsF
  s#   !$!5 ($&D!$$S^%7%7"%E%EFFF!-.>>sCCI d,0,???&1	..s33I .#. @ hYgIhIhEhdo':;; 	b#'?#:#:3dit.C)D!%!64? $; $T $T OSS $(?#:#:3dit.C)DQUQ` $; $b $b OS 	J$(HIII
 	!-_
*f-- 	)#J *f-- 	) !+O	-@Ox''48''$'+VX X X #%%$/X*E*E" Js':'B J dhEG G G G EqJ J J %(	38$<$< 	W 	W J$$S(333&mJO&mJO'~J**8=(,LLL}% 0+/(}& S8t~+E+E
(NPQRRR}& W(-*G W9? W*.qs s s s//JN,RTUVVV&&s#FFF#%"2#4**#txDOYd*dn(1C	 + E E

 ?$ 	?H)D)D$(=>>>( 	[66txAYZZZ 	)C$7 	)@U 	)49~~!!1):)F!#( ""3'''$$$$$r6   c                 `   | j         sd S | j        rt          | j        d           | j        j        }|                     |j                  }| j        r[ddlm	} t          | j         || j        t          d                              g}|d         j                            |           ng }t          | j        | j        j        | j        d d | j        ||d		  	        | _        |j        | j        _        | j                            |           d
| j        j        _        t)          | j        | j        g          | _        t,          j        | j        _        | j        j        | j        _        d
x| j        _        | j        j        _        | j        |j        |<   | j        j        s|j        rt:          j        rs| j        r!| j        j         sJ | j        | j        _        d S tC          | j        | j                  | _        t)          | j        | j        | j"        g          | _"        d S d S d S )Nz&static cpdef methods not yet supported)r  r   r  r$  rM  	decoratorr   )	r3   rk   rR   r  r  r?   r   r  r   Tr  )r  )#r  r  r   r3   r  rk   call_self_noder  r  r  DecoratorNoder   r8  rv   DefNoderR   r?   r  r   r  r  r  r   r   r]  as_variabler  r  is_final_cmethodr$   lookup_module_cpdefoverrideis_fused_specializedOverrideCheckNoder   )r   r   rk   py_func_bodyr  r  s         r4   r0  z"CFuncDefNode.declare_cpdef_wrapper
  s3    	F  	F$(DEEEz**3;N*OO  	++++++'HHTXTabpTqTq<r<r<rssstJqM#11#6666J48$(JO$(I(,,0#'8$0*4*+- - - (+':$))#...,0)($,HHH&5!%!3
8<<
$*05 JD
+ 	U(	U,3,G	U} Uz6666(,%%% 1$(DL Q Q Q($-9STTT				U 	U 	U 	Ur6   c                     | j         dk    p| j        }t          |dd          }|r2|r2|j        r-|j         dv s&|j        s!|j        st          |d           dS dS dS dS dS dS dS )zo
        Ensure that types used in cdef functions are public or api, or
        defined in a C header.
        r  r  N)r  r  z:Function declared public or api may not have private types)r`  r  r   r  r1  r   )r   r]  r3   r   public_or_apir  s         r4   r,  z&CFuncDefNode._validate_type_visibility
  s    
 H4@gt,, 	YU 	Ys': 	Y$(<<<I =!&!2 =cWXXXXX	Y 	Y 	Y 	Y 	Y 	Y<<<<<<r6   r   c                 p    ddl m  j        j        }|r$|d t	          |           j        j        z
           }d |D             }|r5                     j         j        j	                  }|}t          j        }n߉ j        j        rh j        j        j        j        }                     j        |j	                  }	||	_                             j        |	 j        j	                  }d}nk j        j        d         j        j        }
                     j        |
j	                  }|
|_                             j        | j        j	                  }| pt          j        }                     j        | fd|D             |	          }t#           j        t$          j        |
          S )Nr   r  c                     g | ]	}|j         
S r\   rM  r   r  s     r4   r   z/CFuncDefNode.call_self_node.<locals>.<listcomp>
  s    ...#SX...r6   rM  )r   	attributeTr   c                 H    g | ]}                     j        |           S rM  )r  r3   )r   nr  r   s     r4   r   z/CFuncDefNode.call_self_node.<locals>.<listcomp>
  s.    JJJ1)$$TXA$66JJJr6   )functionrR   wrapper_call)r3   r  r   )r   r  r]  rR   rG   r  r  r3   r  rk   r$   r>  r  r  r  AttributeNodeSimpleCallNodeReturnStatNoder   r   )r   omit_optional_argsr  rR   	arg_namescfunccall_arg_namesskip_dispatchclass_entry
class_noder  r4  c_callr  s   `            @r4   r9  zCFuncDefNode.call_self_node
  s   y~ 	CATTY%AAABD.....	 	_&&txdjo&FFE&N#7MMY' 	_**6<K"++DH;;K+LLJ*J++DH*PTPZP_+``E !MM*/5J ))$()IIH'HN++DH(djo+^^E++Jw/J))HJJJJJ	JJJ&	 * ( (
 $(
8QY_````r6   c                     | j         j        D ]4}|j        st          |j        d           |                     ||           5d S )NrP  )r]  rR   rk   r   r3   r  r5  s      r4   declare_argumentszCFuncDefNode.declare_arguments  sU    9> 	, 	,C8 8cg6777!!#s++++	, 	,r6   c                     | j         j        S r   )r]  r  r<  s     r4   r>  z!CFuncDefNode.need_gil_acquisition  s    y!!r6   c                     | j         }|j        }|j        rZ|sZ|j        j        rt          | j        d           | j        j        D ].}|j         j        r|j	        st          | j        d           +d S d S d S )Nz9Function with Python return type cannot be declared nogilz8Function declared nogil has Python locals or temporaries)
r]  r  r  r  ro  r   r3   rE  r  in_with_gil_block)r   r   r]  r  r  s        r4   r   zCFuncDefNode.nogil_check
  s    y=: 	`h 	`+ SdhQS S S)5 ` `:) `%2I `$($^___	` 	` 	` 	`` `r6   c                 V   |j         | j        _         | j         | j                            |          | _        nQ| j         | j                            |          | _        n*|                     |           |                     |           |                     | j                  | _        | S r   )	r   rE  r  rw   r  r2  r6  r>  ry  r   s     r4   rw   z CFuncDefNode.analyse_expressions  s    &)n#( $ 1 E Ec J JD\%<;;C@@DLL'',,,$$S)))44T5EFFr6   c                     dS r>  r\   r(  s      r4   r  z'CFuncDefNode.needs_assignment_synthesis#  s    ur6   r   c                    | j         }g }| j        }|j        d t          |j                  |j        z
           D ]Q}	|	                                }
|                    |	j                  }|j        sd|
z  }
|	                    |
           R|re| j
        r^t          j                            t          j                  }| j        r|	                    |           n|	                    d|z             |j        r9|r7|	                    |j                            t          j                             |j        r|	                    d           |sdg}|| j        j        }|                    |d                    |                    }| j        j        dk    rd|vrd}nd}d }|                    | j        j                  }| j                            ||	          }| j        p| j        j        }| j        rF|r*|j        j        d
                              | j                   |                     | j                   |r,|j        j        d
                              |||d           |                     |||d           d S )NzCYTHON_UNUSED %sz...voidr   privater!  static r   )dll_linkagemodule_declarationsz; /* proto*/z {)!rE  r]  rR   rG   r  rY  rW  rk   cf_usedr  r  r   r  r
   skip_dispatch_cnamer?  r  optional_args_cnamer  r  
func_cnamefunction_header_coder   r`  build_function_modifiersfunc_modifiersr  r&  r   r  r   partsrP   )r   rU   rR  with_opt_argswith_dispatchr  r  	arg_declsr]  r  arg_declr  dispatch_argentitystorage_classre  r+  headerneeds_protos                      r4   r  z%CFuncDefNode.generate_function_header&  s    	y9Dc$)nnT-DDDE 	' 	'C++--HLL**E= 9-8X&&&& 	DT- 	D%0AA*, ,L} D  ....  !3l!BCCC" 	^} 	^T/@@A[\\]]] 	$U### 	!I=J)E**5$))I2F2FGG: I--$e2C2C%MMM11$*2KLL	!226{2SS,G
0G$ 	2 _ &'<=CCDD]^^^JJt0111 	K"#89??(5yy&&&IK K K

		666BCCCCCr6   c                     | j         }| j        D ]~}|j        ru|                    |j                  }| j        s|j        rM|                    |          }|                    |j	        
                    |j                  d|d           d S r3  )rE  rR   rK  rW  rk   r?  rg  r0  rP   r]  rY  r  )r   r   rU   r  r  r  r   s          r4   r  z+CFuncDefNode.generate_argument_declarationsS  s     9 	G 	GC{ GSX..= GEM G ==dCCFJJ11#)<<<<fff F G G G	G 	Gr6   c                     d S r   r\   r   s     r4   r  z"CFuncDefNode.generate_keyword_list]  r   r6   c           
      8  
 d}d}| j         }| j        j        rL                    dt          j        z             | j        D ]

j        r|                    
j	                  }| j
        s|j        r                    dt          j        dt          j        d|d           
j        }t          |d          s|j        }t          |d                              
j        dt          j        d| j                            |j	                  d	           |d
z  }|d
z  }t%          |          D ]}                    d                               d           
fd}	| j        D ]%
 |	|                    
j	                             &d S )Nr   rv  if (rF   zn > ) {rk   r4  r5  r   r]  c                 (   | j         rj        s                    | j        d| j        d           | j        j        r#| j                            | j        d           d S                     |            	                    |            d S d S d S )Nr4  r5  T)
r  rK  rP   r  original_cnamer]  r  generate_incref_memoryviewslicer  put_var_giveref)r  r  rU   s    r4   put_into_closurezECFuncDefNode.generate_argument_parsing_code.<locals>.put_into_closurez  s     0 0

e6J6J6JKLLL:0 0J>>tU[RVWWWWW''...((/////0 0 0 0r6   )rE  r]  r  rP   r
   ri  rR   rK  rW  rk   r?  rg  r  r  r)  rf  r  opt_arg_cnameranger  )r   r   rU   r  r  r  r  r  r  r  r  s     `       @r4   r  z+CFuncDefNode.generate_argument_parsing_code`  s    9' 	JJ{V%??@@@y  ; !LL22E} 
" 
"


$*$>$>$>$*$7$7$7$< = = = &)^
")*f"="= 9)3J #**f"="= 9

$'IIIv/I/I/I$(I$;$;JO$L$L$L$L$N O O O 	FA4[[    

3JJsOOO	0 	0 	0 	0 	0 	0 9 	: 	:CU..sx889999	: 	:r6   c                     d S r   r\   r   s     r4   !generate_argument_conversion_codez.CFuncDefNode.generate_argument_conversion_code  r   r6   c                     | j         j        D ]I}|j        r|                     ||            |j         j        r|j        s|                     ||           Jd S r   )r]  rR   needs_type_testr  ro  r  r  r  s      r4   r  z)CFuncDefNode.generate_argument_type_tests  sr     9> 	8 	8C" 8++C6666% 8co 8,,S$777		8 	8r6   c                     |j         j        d         r/|                    | j                   |                    d           t          t          |                               |           | j        r| j                            |           d S d S )NrO  r   )	r   r   r  r3   rP   rh   r  r   r  )r   rU   rJ   s     r4   r   z$CFuncDefNode.generate_execution_code  s    &{3 	MM$(###JJrNNNlD!!99$??? 	<55d;;;;;	< 	<r6   c                 @    | j         j        rdS | j        j        j        S )N0)r  ro  r  r]  r  r   s    r4   r  zCFuncDefNode.error_value  s"    ' 	33:?22r6   c                 $    | j         j        j        S r   )r  r]  r  r   s    r4   r  z)CFuncDefNode.caller_will_check_exceptions  s    z..r6   c                    d}| j         }|j        }|j        |dz  }|j        }| j         j        t          j        d||_        |                                 |                     |d|j        j        |j        j	        |j                   | j
        j        s|                    d           | j        j        }d |d t          |          | j        j	        z
           D             }|j        j        r |                    t          j                   n|j        r|                    d           |j        j	        r |                    t          j                   n|j	        r|                    d           |                    | j         j        d	d
                    |          d           |                    d           |j        d S d S )Nr   r   wrap_)rp  ro  r  zreturn c                     g | ]	}|j         
S r\   )r  rH  s     r4   r   z;CFuncDefNode.generate_wrapper_functions.<locals>.<listcomp>  s    ZZZSsyZZZr6   r  NULLrX  r   r^  r]  )r  r]  
prev_entryrj  r
   r  rP   r  r  r  r  rX  r  rR   rG   r  rh  ri  r   )r   rU   kr  r  rR   arglists          r4   r  z'CFuncDefNode.generate_wrapper_functions  s    
J	*FA$E04
0E0EvGZGZGZ\]\]^EJJLLL))a#j7#j;&	 * ( ( (
 #+ $###9>DZZD1X#d))DI<X2X1X,YZZZGz( $v9::::) $s###z, 'v9::::- 'v&&&JJDJ$9$9$9499W;M;M;M;MNOOOJJsOOO/ *****r6   )r   r   r   )r   r   N)%rK   rp   rq   r   r   r.  r  r  r(  r?  r  r  r  r  rE  rE  r  r   r0  r,  r9  r[  r>  r   rw   r  r  r  r  r  r  r  r   r  r  r  rr   rs   s   @r4   r  r  
  s       0 TSSK0KMJHOL  / / / B B XBc% c% c%J)U )U )UV
Y 
Y 
Ya a a a>, , ," " "	` 	` 	`     +D +D +D +DZG G G  #: #: #:L  8 8 8< < < < <3 3 3/ / /      r6   r  c                        e Zd Zg ZdZdZd ZdS )PyArgDeclNodeFc                 <    | j                             ||           d S r   )r  r   r(  s      r4   r   z+PyArgDeclNode.generate_function_definitions  s     
00d;;;;;r6   N)rK   rp   rq   r   r  r?  r   r\   r6   r4   r  r    s4         KKK< < < < <r6   r  c                       e Zd ZdgZdS )r:  r8  N)rK   rp   rq   r   r\   r6   r4   r:  r:    s         -KKKr6   r:  c                       e Zd Zg dZddgZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZd	 Z	 	 d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 Z'd Z(d Z)d dZ*d Z+d Z,d Z-d Z.dS )!r;  )rR   r  r  r   r  r4  r  r4  FNr  r   Tc                     t          j        | |fi | dx}x}x}}| j        D ]2}|j        r|dz  }|j        r|dz  }|j        s|dz  }|j        s|dz  }3|| _        || _        || _        || _	        d S r0   )
r/  r   rR   rC  rB  rK  num_posonly_argsnum_kwonly_argsnum_required_kw_argsnum_required_args)r   r3   rS   pr  rkrr  s           r4   r   zDefNode.__init__  s    T3//$///AQ9 	 	C| Q{ Q{ !GB; Q ! $&!!"r6   c
                 \   | j         rt          | j         j        d           | j        rt          | j        j        d           |pd\  }
}|p|	}|g }| j        D ]\}|                    |d          \  }}|                    t          j        |j	        d |j
        t          |j                             ]t          j        t          |dd |||	|          }t          | j        |	          }n||j        }|j        }t!          | j                  t!          |j                  k    s|j        r*t          | j        d
           t          |j        d           t%          t'          | j        |j                            D ]Q\  }\  }}|                    |d|dk    o|j                  \  }}||t          j        u r|j        |_        ||_        R|
*|j        #ddlm}  || j        |j        |j                  }
t5          | j        t7          | j        | j	        d           | j        d|j        |
||j        |j        	  	        }t?          | j        |pg tA          | j        |j        	          || j!        | j"        |j#        ||j        |j        ddtI          |di           |          S )Nz'cdef function cannot have star argumentz+cdef function cannot have starstar argumentr>  r   r  )rk   r  r  r]  r3   F)r  rR   r  r  r  r  r  r  rL  zwrong number of argumentszprevious declaration herer   r  r  r  r  )rf  rR   r  r  r  r  r  r  rc  r  )r+  r^  r  r   r?   r  r]  r  r  r`  r  r  r(  )%r  r   r3   r  rR   rb  r  r   r  rk   r  r   r  r/  r  r]  rG   r  r  r+  r  r  r  r  r  r  r  rJ  r  r  r  r  r%  r   r?   r  r   )r   rT  r  r  returns
except_valr  r+  r  r  r  r  
cfunc_argsr3  r  r]  
cfunc_typer  r4  r  r  s                        r4   as_cfunctionzDefNode.as_cfunction  s+   = 	P$-#%NOOO 	X$#')VWWW+5+F(!=J"i O O
(2(:(:51(:(M(M%!!*"9?S@DEOEZ?M>Hn	#N #N #N O O O O
 $-.3=:?>B>M497?=HJ J JJ  z:::EE}J49~~Z_!5!5559O5dh ;<<<ei!<===-6s49jo7V7V-W-W A A))J(2(:(:51HIQHiSXSi ); )l )l%<4:+D#D#D&.mJO1@J."z'A'M,,,,,,'i
 :AWY Y YO(.A$(QUQZbf.g.g.g.2i5:9C9S9HCZ2<2E/9/?A A A
 DH&/o2&;DH:Ka&b&b&b'1!% $(2(A!+%/%8","2'0 %-4U<NPR-S-S.57 7 7 	7r6   c                 8    | j         rdS | j        s| j        rdS dS )zDetermines if the function's signature is compatible with a
        cdef function.  This can be used before calling
        .as_cfunction() to see if that will be successful.
        FT)rC  r  r  r   s    r4   is_cdef_func_compatiblezDefNode.is_cdef_func_compatiblea  s2    
  	5= 	D- 	5tr6   c                 b   | j         rJ| j         D ]B}|j        }|j        r2| xj        |j        dk    z  c_        | xj        |j        dk    z  c_        C| j        r|                    d          rd| _        | j        r|                    d          rd| _        |j        s|j        r| j        dk    r|j        rd| _        n| j        dk    r|j        rt          | j
        d           n|| j        t          v rn| j        sgd| _        dd	lm} | j         pg | _         | j                             d
t          | j
         || j
        t!          d                                         |                     |           | j        dk    r|                     |           n|                     |           |                     |           | j        j                                        | _        | j        t0          u rM| j        rF|j        d         r9| j        j        s-| j                            |          \  }}|r|j        r|| _        |                     |           t?          | j
        | | j        j        | j         | j!        | j"        | j                  | _#        | j#        $                    |           d S )Nclassmethodr$  Fri   Tr-   z7'__init_subclass__' is not supported by extension classr   r6  r   rM  r7  z<lambda>r  )r;  rk   rR   r  r  r  )%r  r8  r   is_classmethodrk   is_staticmethodr  rB  r  r   r3   IMPLICIT_CLASSMETHODSr  r  insertr:  r   analyse_argument_typesdeclare_lambda_functiondeclare_pyfunctionanalyse_signaturer  	signaturer  r   r4  r   r  r$  ro  rG  DefNodeWrapperrR   r  r  
py_wrapperr   )r   r   r8  rZ   r  r  r  s          r4   r   zDefNode.analyse_declarationsl  s   ? 	H!_ H H	 *< H''49+EE''((DI,GG(( 	(3??=#A#A 	("'D 	)COON$C$C 	)#(D   	`C$8 	`yI%%#*?%'+$$111c6J1dh YZZZZ333D<O3&*#//////"&/"7R&&q-Hm@\@\(](](]+_ +_ +_ ` ` ` 	##C(((9
""((----##C(((s###:/;;==~--$2M-~12 34:;P 3!%!<!T!TUX!Y!Y; 3;#: 3'2D$$$$(H]*(* * * 	,,S11111r6   c                    |j                             di           | _        |j         d         }|j        }d |_        | j        D ]}t          |d          rd }n||j                            |          }t          |          r"|j	        rt          j        ||j        g          }|j                            ||          \  }}|j        |_        ||_        |                     ||           |r|j        rt%          | j        d           |j                                        |_        d |_        d|_        d|_        d|_        |j        j        s|j        j        s|j        j        ry|j        rd|_        n|j        rd|_        n|j        j        s$|j        j         s|j        j        s|j        j        r#|j!        r|j!        j"        d|_        n[||_        nSd|_        nK|j        j#        s?d|_        |j        rt%          |j        d	           |j        rt%          |j        d
           |j        j$        rd| _%        ||_        t          |          r%d tM          | j                  D             | _'        d S g | _'        d S )Nr#  allow_none_for_extension_argsrk   z9Python function argument cannot have C name specificationr   r   TFz.Only Python type arguments can have 'not None'z-Only Python type arguments can have 'or None'c                 0    g | ]\  }}|j         j        |S r\   )r]  is_numpy_buffer)r   r  as      r4   r   z2DefNode.analyse_argument_types.<locals>.<listcomp>  s&    \\\caQVE[\\\\r6   )(r   r'  r  r[  rR   r)  r^  rb  r&   r-  r   r  
org_bufferr  rk   r]  r9  r  r   r3   as_argument_typehdr_typer  r  r@  ro  rW  r  r(  r  r*  is_extension_typer  rK  r  r  rZ  r  r  np_args_idx)r   r   r  f2sr  r  r^  r]  s           r4   r  zDefNode.analyse_argument_types  s    # 2 28R @ @(+7V(W%# $9 1	0 1	0CsF##  "&M11#66	 "#&& /9+D / * 4!!,6. !/ !/I
 N**9c:: &*/$$S#... ]?#8 ]dh [\\\x0022CHCL#$C "#CCNx# Tsx'9 TSX=X T; +&*COO\ +&+COOh0 
+CH4L 
+8-
+141L
+{ Hs{'B'J*. +H '+COOX& T"&< U#'#STTT; T#'#RSSSx  0+/( ## 	"\\Yty-A-A\\\D!Dr6   c                 
   | j         j        rO| j        rt          | j        d           t          | j                  dk    o| j        p| j         | j         _	        no| j        sg| j        s_|j
        d         rt          d | j        D                       r3| j         j        t          j        u rt          | j                  dk    rt          j        | j         _        nt          | j                  dk    r:| j        d         j        (| j        d         j        st          j        | j         _        n| j         j        t          j        u rt          | j                  dk    rt          j        | j         _        nRt          | j                  dk    r:| j        d         j        (| j        d         j        st          j        | j         _        | j         j        }|                                }|                                }|t          j        u rH|dk    rBt          | j                  dk    r*| j        r#t          j        x}| j         _        d| _        dx}}| j        rG|j        r@dx}}d| _        t7          j        |          x| j         _        }d|_        d|_        d|_        | j        s| j        r| j        r|j        r| j         j!        d d = tE          tG          |t          | j                                      D ]}| j        |         }d|_$        ||k    rd|_%        |&                    |          rP| j        sI| j        r d|_'        tP          j)        x|_*        |_+        nd|_&        |j,        x|_*        |_+        d|_-        |.                    |          |_*        |j+        /                    |j*                  s'|j*        j0        r|j+        j0        rd|_1        d|_-        |t          | j                  k    r| 2                                 d S |t          | j                  k     rK|j        s| 2                                 | j        D ](}|j$        r|j+        j3        s|j+        j4        rd|_1        )|5                                }|rrt          j6        |v rf| j         j        s\| j        r+d}| j        D ] }|j$        r|j        s|j&        s	|j'        sd	}!nd	}|s(|7                                x}| j         _        d S d S d S d S d S )
Nz8special functions of cdef classes cannot have decoratorsr   always_allow_keywordsc                     g | ]	}|j         
S r\   rC  rH  s     r4   r   z-DefNode.analyse_signature.<locals>.<listcomp>  s    ::::::r6   r   r)   Tr  F)8r  r  r  r   r3   rG   rR   r  r  trivial_signaturer   r4  r  r   pyfunction_signaturepyfunction_noargsrK  rB  pyfunction_oneargpymethod_signature	unaryfuncibinaryfuncmax_num_fixed_argsmin_num_fixed_argsself_in_starargr  r  r   fixed_arg_formathas_generic_argsr  r  decorator_indirectionr  r  minr@  rA  r  r?  r   	type_typer  r]  r  r  fixed_arg_typer  ro  r  bad_signaturer  r  method_flagsmethod_varargswith_fastcall)	r   r   signfixed
min_nfixedr  r  mfuses_args_tuples	            r4   r  zDefNode.analyse_signature  s#   :  	E \dh Z[[[+.ty>>Q+>+kHjY]YjCkDJ((- 	E4#4 	EN#:;	E::	:::;;	E z#y'EEEty>>Q&&+4+FDJ((^^q((y|+3DIaL<P3/8/J
,%)EEEty>>Q&&+4+>DJ((^^q((y|+3DIaL<P3/8/D
,j"''))++--
9///FaKKty>>Q&&4=& *3)GGC$*&#$D "##FZ 	(C$8 	("##FZ#'D )-37DJ 3#&C "&C#'C   	4D$8 	4(	4-0-A	4*03s63ty>>2233 	1 	1A)A,CCNJ15.q!! 1$*> 1& >&'CO.5.??CL388&'CO.1o=CL38'($$"11!44x''55 1|/ 1CH4H 1./++/0,DI&&   Fc$)nn$$' %""$$$y , ,> ,sx'A ,SXE] ,*+C'  	A)*b009N0 } ("&9 0 0C 0s{ 0 #08;0 +0	0 #(" A-0->->-@-@@dj***#	A 	A0000 A Ar6   c           	      z   | j         j        }d|                                z  }|j        r|dz  }n!|j        r|d|                                z  z  }| j        }|                    d          r|                    d          rd}nd}t          | j
        d|| j        t          | j                  |fz             d S )Nz%dz or morez to %d__zSpecial methodMethodz>%s %s has wrong number of arguments (%d declared, %s expected))r  r  r  r  optional_object_arg_countr  rk   
startswithendswithr   r3   rG   rR   )r   r  expected_strrk   descs        r4   r  zDefNode.bad_signatureJ  s    j"c44666 	@J&LL* 	@Hs'='='?'???Ly??4   	T]]4%8%8 	#DDDdhX$)S^^\\; ; 	< 	< 	< 	< 	<r6   c                 H   | j         }|                    |          }|rX|j        r!|j        j        st          | j        d           |j        j        r$|j	        s| j
        st          | j        dd           |                    || j        | j
                   }|| _        |                    |j                  }t!          t"          j        |z   |z             | j        _        t(          j        rt-          | j        | j                  |_        t!          t"          j        |z   |z             |_        |j        r_|j         t6          j        v s|j        r|j         dv r|j        d         r	d |_        d S t!          t"          j        |z   |z             |_        d S d S d |_        d S )Nz:Only final types can have final Python (def/cpdef) methodsz'Overriding cdef method with def method.   )allow_redefine__getattr__fast_getattr) rk   r  r=  r  is_final_typer   r3   r]  r  is_builtin_cmethodr   r	   r  r  next_idscope_prefixr!   r
   pyfunc_prefixpyfunc_cnamer$   r  r@   r?   funcdoc_prefix	doc_cnamer  r   	invisibler   wrapperbase_cnamewrapperbase_prefix)r   r   rk   r  prefixs        r4   r  zDefNode.declare_pyfunctionY  s   y%% 	P% ^co.K ^dh \]]]z& Pu/G PPTP_ P"KQOOO&&tTX$/FY&ZZ
S-.."1&2F2ORV2V"W"W
 
	&tx::EI-f.Cf.Lt.STTEO i:!444EI4
m33~8V3.2E+++.=f>WZ`>`cg>g.h.hE+++i i EIIIr6   c                     |                     | j        | j                  }d |_        || _        |j        | j        _        d S r   )r  lambda_namer3   r?   r  r  r  )r   r   r  s      r4   r  zDefNode.declare_lambda_functionr  s<    ++D,<dhGG	
"'+
r6   c                    | j         D ]}|j        st          |j        d           |j        rD|                    |j        |j        |j                  |_        |j        j        rd|j        _	        n| 
                    ||          |_        d|j        _        d|j        _        |j        |j        _        |                     || j                   |                     || j                   d S )NrP  r  r   )rR   rk   r   r3   r  r  r]  r  ro  r  r  r  r  r  declare_python_argr  r  r5  s      r4   r[  zDefNode.declare_argumentsx  s    9 	4 	4C8 8cg6777# <OOCHchHH	8' )%(CIN 11#s;;	 CICIN$'OCI!!T]333T%677777r6   c                     |rk|j         d         dk    rt          j        }nt          }|                    |j        ||j                  }d|_        d|_        d|_	        d|_
        ||_        d S d S )Ninfer_typesFr   r  )r   r   unspecified_typer   r  rk   r3   r  r  r  r  r  )r   r   r  r]  r  s        r4   r  zDefNode.declare_python_arg  sv     
	~m,55!2%OOCHdCG<<EELEJEJ$%E!CIII
	 
	r6   c                 L   |j         | j        _         |                     |           |                     |           |                     |          s9| j        r2| j        d d d         D ]!}|j                            |          |_        "| j        	                    |           | S )Nr   )
r   rE  r2  r6  r  r  r8  rw   r  prepare_argument_coercion)r   r   r8  s      r4   rw   zDefNode.analyse_expressions  s    &)n###C(((  %%%..s33 	S 	S!_TTrT2 S S	&/&9&M&Mc&R&R	##11#666r6   c                    | j         rdS | j        s| j        j        rdS | j        rdS | j        j        rdS | j        j        rdS |j        s|j        r&|| j	        j
        d         S |j        j
        d         S |j        p|j        S )NTFbinding)r  specialized_cpdefsr  r@  no_assignment_synthesisr  is_anonymousr  r  rE  r   r   rB  r|  r(  s      r4   r  z"DefNode.needs_assignment_synthesis  s     	4" 	dj&E 	5' 	5:  	5:" 	4 	>#"6 	>|'29=='29==$<(<<r6   c                 $    | j         j        j        S r   )r  r  r  r   s    r4   r  zDefNode.error_value  s    z#//r6   c                 $    | j         j        j        S r   )r  r  r  r   s    r4   r  z$DefNode.caller_will_check_exceptions  s    z#33r6   c                    | j         r-| j                             |                                |           | j        r1| j        j        | j        _        | j                            ||           t                              | ||           d S r   )defaults_getterr   r  py_wrapper_requiredr  rj  r  r/  r(  s      r4   r   z%DefNode.generate_function_definitions  s     	Y >>s?O?O?Q?QSWXXX # 	E)-)>DO&O99#tDDD11$TBBBBBr6   c                 b   |r%| j         r| j                            ||d           d S g }| j        j        j        r0dt          j        z  }| j        sd|z   }|	                    |           d }| j
        D ] }|	                     ||                     !| j        r#|	                     || j                             | j        r#|	                     || j                             |rd                    |          }nd}| j                            | j        j                  }	|j        d         }
|                                 }|r|
                    |           |
                    d|	d	|d
           |r|
                    d           |                    d|	d	|d           d S )NTPyObject *%sCYTHON_UNUSED c                     | j         }|j        r|j        }n|j        }|j                            |          }|j        sd|z   }|S )Nr  )r  r  r~  r  r]  rY  rg  )r  r  r  decls       r4   arg_decl_codez7DefNode.generate_function_header.<locals>.arg_decl_code  sS    IE $,:..u55D= /'$.Kr6   r   rb  declsrd  rX  z); /* proto */#endifr|  )r  r  r  r  r  has_dummy_argr
   r  r  r  rR   r  r  r   r  rY  r  r   r  rP   )r   rU   rR  rS  arg_code_listself_argr  r  r  dc
decls_coder  s               r4   r  z DefNode.generate_function_header  s    	' 088.$0 0 0F:- 	+%(99H) 7+h6  ***		 		 		 9 	5 	5C  s!3!34444= 	?  t}!=!=>>> 	C  t/@!A!ABBB 	yy//HHH..tz/FGG%g.
!88:: 	1/000,.BB9	; 	; 	; 	'X&&&


HHH566666r6   c                     d S r   r\   r(  s      r4   r  z&DefNode.generate_argument_declarations  r   r6   c                     d S r   r\   r   s     r4   r  zDefNode.generate_keyword_list  r   r6   c                     fd}| j         D ]} ||j                   | j        | j        fD ]}|r ||j                   d S )Nc                 t   | j         r.| j        j        ro| j        j        J j                            t          j        dd                                         d	                    | j
        | j                             n%                    | j
        d| j        d           | j        j        r#| j                            | j
        d           d S | j        r,                    |                                |            d S                     |                                |            d S d S )NIncludeStringHzStringTools.czmemcpy({0}, {1}, sizeof({0}));r4  r5  T)r  r]  rV  r  r   ry  r   r  rP   formatr  r~  r  r  r  r  put_var_xgiverefr  r  )r  rU   s    r4   r  z@DefNode.generate_argument_parsing_code.<locals>.put_into_closure  sK    0:& Q !:?666$55k6MN^`o6p6pqqqJJ?FFu{TYThiijjjjJJU[[[%:N:N:NOPPP:0 0 J>>tU[RVWWWWW* 0 ((///))%00000''...((/////+0 0r6   )rR   r  r  r  )r   r   rU   r  r  s     `  r4   r  z&DefNode.generate_argument_parsing_code  s    	0 	0 	0 	0 	0. 9 	( 	(CSY''''=$"33 	, 	,C ,  +++	, 	,r6   c                     d S r   r\   r   s     r4   r  z$DefNode.generate_argument_type_tests  r   r6   )	NNTNNFNFFr   r   )/rK   rp   rq   r   r   r  r  r  reqd_kw_flags_cnamer   r  r  r4  r  ry  r  py_cfunc_noderequires_classobjdefaults_structr?   fused_py_funcr  r  r  rj  r  r   r  r  r   r  r  r  r  r  r[  r  rw   r  r  r  r   r  r  r  r  r  r\   r6   r4   r;  r;    s       , gffK!9:KONKJJ!EKOMO
CMJJO# # #" }B;@C7 C7 C7 C7J	 	 	52 52 52n>" >" >"@eA eA eAN< < <  2. . .8 8 8   
 
 
= = = =$0 0 04 4 4
C 
C 
C,7 ,7 ,7 ,7\    , , ,>    r6   r;  c                       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 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )r  NFc                     t          j        | g|R i | | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        | j        j        | _        d | _        d S r   )	r/  r   r;  r  r  r  r  r  r  )r   rR   r}   s      r4   r   zDefNodeWrapper.__init__#  so    T3D333F333 $ <#{:$(K$D!!%!>#{:r6   c                 *   | j         j        }| j        }|                    |j                  }t          t          j        |z   |z             |_        t          t          j	        |z   |z             |_
        |j        | _        | j         j        | _        d S r   )r;  r  rk   r  r  r!   r
   pywrap_prefixrj  pymethdef_prefixpymethdef_cnamer  r  )r   r   target_entryrk   r  s        r4   r   z#DefNodeWrapper.analyse_declarations,  s    {(yS-.."1&2F2ORV2V"W"W'6v7NQW7WZ^7^'_'_$%/;2r6   c                 v   | j         D ]X}|j        j        s|j                            |          s	 *|j        r'|j        j        s|j                            |          s	 Y| j        rM| j        j        j        s>| j        j        }d|_	        |j
        D ]%}|j        s|j        j        rd|j        _        "d S d S d S )Nr   T)rR   r]  ro  create_from_py_utility_coder  r  r  r  rg  r  cf_assignmentsr  r  r   cf_maybe_null)r   r   r  r  asss        r4   r  z(DefNodeWrapper.prepare_argument_coercion7  s    
 9 	 	C8' x;;C@@  cl&> |==cBB  	1T%6%<%D 	1 %+E$%E!+ 1 1z 1cgo 1,0CG)	1 	1 	1 	1
1 1r6   c                     t          | j                  }|dk    s*|dk    r&| j        d         j        s| j        d         j        rdS dS r0   )rG   rR   r  r?  )r   argcounts     r4   signature_has_nongeneric_argsz,DefNodeWrapper.signature_has_nongeneric_argsM  sI    ty>>q==A49Q<#;#'9Q<#; 1qr6   c                     | j         j        S r   )r  r  r   s    r4   signature_has_generic_argsz)DefNodeWrapper.signature_has_generic_argsU  s    ~..r6   c                    g }| j         j        r|                    t          j                   | j        D ]}|j        j        rP|j        	                    t          j        dd                     |                    d|j        j        z             ^|j        r\|j        j        sP|j        j        sD|j        j        s8|                    |j                            |j        j                             |                    |j        j                   | j        r$|                    | j        j        j                   | j        r$|                    | j        j        j                   d                    |          }| j        j        s"|                    dt          j        z             |                    | j        j        j        d|d           d S )NMoveIfSupportedCppSupport.cpp__PYX_STD_MOVE_IF_SUPPORTED(%s)r   z%s = rX  r^  )r  r  r  r
   r  rR   r]  r  r   ry  r   r  r  r  r  r  r  r_  r.  r  r  r   r  rX  r  r  rP   r;  r  )r   rU   rR   r  s       r4   rI  z%DefNodeWrapper.generate_function_bodyX  s   >' 	+KK)***9 	- 	-Cx$ -  11+,=?OPPR R R=	OPPPP -sx'B -%(X%7-%(X%8- CH..sy??@@@@CIO,,,,= 	3KK+1222 	7KK)/5666yy' 	4HHWv22333

K***DDD2 	3 	3 	3 	3 	3r6   c                    | j         j        }|                    | j                   |                    d           |                    d           | j                                         }|r|                    |           |                    |           |                                |_        | j         	                    ||          p| j         j
        }|                     ||           |                     ||           |                                }| j        j        rd}nd}| j        j        s<|                    | j                            t$          j                  |d           |                                 |                    t-          d| j        z                       |                     |||           |                     |           |                     |           |                    |j                   |                    | j                   |                    d           |                    d           |j        |j        v r|                    |j                    |!                    |j                   |j        "                                D ]\  }}	|#                    ||	           | $                                }
|
%|                    t$          j        d|
d           |!                    |j                    |j%        D ];}|j&        r2|j'        r|(                    |           &|)                    |           <tU          |j%                  }| j+        D ]X}|j,        j        sJ|j-        |vrA|j-        j'        r|(                    |j-                   >|)                    |j-                   Y| .                    |           |/                                 | j        j        s"|                    dt$          j        z             |                    d	           |0                                 |r|                    d
|z             d S d S )Nr   z/* Python wrapper */z = 0r5  z%s (wrapper)rd  r4  rz  r]  r{  )1r;  rE  r  r3   rP   r  r  r  r  r  r  r  r  rL   r  ro  rX  rY  r
   r  r  r  r   rk   r  r  rI  r  r  r  labels_usedr  r  r  r  r  r  r  r  r  r  put_var_decrefr   rR   r]  r  %generate_argument_values_cleanup_coder  r  )r   r   rU   r=  r  rR  r  retval_initr  r]  r  r  var_entries_setr  s                 r4   r   z,DefNodeWrapper.generate_function_definitionss  s^   {&dh

2

)***![??AA 	+JJ)***t$$$/3~~/?/?,+@@dKK 9+8 	%%dN;;;++D$777//11' 	 KKK' 	JJ 11&2EFFF    	))+++''nty6P(Q(QRRR++D$8HIII))$///##D))) 	..t~>>>dh

2

-... t///MM$+,,,NN4+,,,#~??AA . .t  ----&&((G"

)<)<)<gggFGGG 	t()))% 	/ 	/E| /( /((////''...d.//9 	3 	3C8' 3CI_,L,L 9, 3((3333''	222224888((***' 	;JJ|f&99:::

3 	@JJ),>>?????	@ 	@r6   r   c                    g }| j         }|j        s| j        r0dt          j        z  }|j        sd|z   }|                    |           | j        D ]g}|j        s^|j        s|j	        r|                    d|j
        z             5|                    |j                            |j
                             h| j        j        }|j        s8|                                t"          j        gk    r|                    d           |j        r~dt          j        dt          j        }	|j        rFdt          j        dt          j        dt          j        }
|                    d|
d	|	d
           n|                    |	           |j        rOt1          t3          | j                  |                                          D ]}|                    d|z             d                    |          }d}|j        dv r|j        j        rd}d}| j                            |j                   }|d|d|d}|!                    d|z             |r0| j        j"        r"| j        j"        #                    ||d           d S tH          j%        r|j&        r| j        j"        s|j        j'        s|j        r|j(        r|j&        }|j)        r|*                                }|j        r	|j        dv s3|!                    d|j+        d|,                                d           |j        rG|!                    d           |!                    d|j(        z             |!                    d           |s| j        j"        r?|-                    d|j.        z             |/                    | j        j        dd           |!                    d|z             d S )Nr
  r  zCYTHON_UNUSED PyObject *unusedz
PyObject *, PyObject *zPyObject *const *z, Py_ssize_t z
#if CYTHON_METH_FASTCALL
z
#else
z
#endif
z%CYTHON_UNUSED PyObject *unused_arg_%sr   r   r  Frd  rX  rW  z%s; /*proto*/T)rS  zPyDoc_STRVAR(r^   #if CYTHON_UPDATE_DESCRIPTOR_DOCzstruct wrapperbase %s;r  zstatic PyMethodDef %s = r5  )
allow_skipz%s {)0r  r  r  r
   r  r  rR   r@  r  r?  r  r  rY  r;  r  r  r  r   method_noargsr  
args_cname
kwds_cnameuse_fastcallnargs_cnamer  rG   r  r   rk   r  r  r  rj  rP   r#  r  r$   r  r?   is_property_scoper  
is_unicodeas_utf8_stringr  r  r  r)  put_pymethoddef)r   rU   rR  rS  r  r  r  r  r  varargs_argsfastcall_argsrL  r  r  rv  docstrs                   r4   r  z'DefNodeWrapper.generate_function_header  s|   n 	+ 4 	+%(99H$ 7+h6  ***9 	F 	FC> F? Fco F!((#-)GHHHH!((55cmDDF F F! 	CC$4$4$6$69;R:S$S$S  !ABBB 
	3 
	3%%%v'8'8:L 3 3)))6+=+=+=v?P?P!R$$$%|||56 6 6 6 $$\222 	R3ty>>3+A+A+C+CDD R R$$%Lq%PQQQQ99]++ J@@@K0 A!B"N..u/?@@&(bb"""hhh7

?V+,,, 	{( ; )BB.T C ; ; ;F 	%59 	%K-	%K1	% %	% */)@	%
 YF  1..00$ 37])])]


OOO..00002 3 3 3  %

=>>>

,u/FFH H H

8$$$ 	KT[6 	KHH*U-BBD D D  !2CE JJJ

6F?#####r6   c                 >   | j         D ]H}|j        r?|j        r|                    d|j        z             .|                    |j                   I|j        D ]}|j        r|                    |           | 	                                rpdt          j        z  }| j        j        r@|                    d           |                    |           |                    d           n|                    |           |                    dt          j        z             d S )NzPyObject *%s = 0;zCYTHON_UNUSED Py_ssize_t %s;#if !CYTHON_METH_FASTCALLr  z"CYTHON_UNUSED PyObject *const *%s;)rR   r@  r  rP   r  r  r  r  r  r4  r
   rG  r  rF  kwvalues_cname)r   r   rU   r  r  
nargs_codes         r4   r  z-DefNodeWrapper.generate_argument_declarations  s+   9 	8 	8C~ 8' 8JJ2S]BCCCC,,SY777_ 	0 	0E| 0((/// **,, 	'7&:LLJ~* '

6777

:&&&

8$$$$

:&&& 	

7&:OOPPPPPr6   c           
         |                                 }|j        }|                    d          }| j        dk    }| j        d up
| j        d up|}| j        D ])}	|	j        j        s|	j        	                    |          s	 *| 
                                r| j        j        r|                    d           |                    d           |                    t          j        dt          j        d           |                    d           |                    t          j        dt          j        d	|                    d
t          j        z            d|                                 d           |                    d           | j        j        r|                    d           |j                            t+          j        dd                     |                    t          j        d| j        j        dt          j        dt          j        d           | 
                                s-|rt3          | j        d           |                     |           nM|                                 s|                     |           n#|                     | j        ||           d| _        ||_        |                     |          rf|                     |          s|!                    |           |"                    |           | #                    |           |rr| $                    | j        |           | j        rP| j        j%        j&        r |'                    | j        j%                   n|(                    | j        j%                   | j        D ]4}	|	j        j        s&|	j        j)        r|*                    |	j%                   5|+                    | j,        j%        j-                   |.                                 |                    d|                                 z             |                     |          r|"                    |           d S d S )Nargument_unpacking_doner   rP  z#if CYTHON_ASSUME_SAFE_MACROSz = PyTuple_GET_SIZE(r^  #elsez = PyTuple_Size(z); if (z%s < 0z	) return r5  r  fastcallr  z = __Pyx_KwValues_rX  r   z.This method cannot have * or keyword argumentsTrz  )/new_error_labelr  r  r  r  r  rR   r]  ro  r,  r4  r  rF  rP   r
   rG  rD  r  r  r   ry  r   r  rQ  fastvarr   r3   r  r2  generate_stararg_copy_code'generate_tuple_and_keyword_parsing_codeneeds_values_cleanupr  r  r  r<  generate_arg_decrefr  r  put_var_xdecref_clearput_var_decref_clearr  r  r  r;  r  r  )
r   r   rU   	decl_codeold_error_labelour_error_label	end_labelhas_kwonly_argshas_star_or_kw_argsr  s
             r4   r  z-DefNodeWrapper.generate_argument_parsing_code-  s    ..00*NN#<==	.2"m47 @ ,@0? 	 9 	 	C8' x;;C@@  **,, 	%~* 8

6777JJ6777JJ"""F$5$5$57 8 8 8JJw JJ"""!!!h);;<<<<  """"	    JJx   ~* %

8$$$))#J0EFF	H 	H 	H

!!!4>#9#9#96;L;L;LfN`N`N`b 	c 	c 	c ..00 	-" Rdh PQQQ22488883355 	- ++D1111 88D)TTT(,D%*???++ 	:??9-- )i(((NN?+++66t<<<" K((===$ K(.> K2243D3JKKKK11$2C2IJJJy 4 4x+ 40J 4 ((333""4;#4#CDDD,,...JJ|d&6&6&8&88999??9%% 	&NN9%%%%%	& 	&r6   c                 B    |r|                     |j                   d S d S r   )r]  r  r   r  rU   s      r4   generate_arg_xdecrefz#DefNodeWrapper.generate_arg_xdecref}  s0     	2&&sy11111	2 	2r6   c                 B    |r|                     |j                   d S d S r   )r^  r  rf  s      r4   r\  z"DefNodeWrapper.generate_arg_decref  s0     	1%%ci00000	1 	1r6   c                 0   | j         s|j                            t          j        dd                     |                    dt          j        z             |                    d| j	        
                                dt          j        d|                                 d           |                    d           | j        r8| j         s| j        j        j        sd	t          j        z  }n:d
t          j        z  }n*dt          j        d| j        j        dt          j        d}|j                            t          j        dd                     |                    d|t          j        | j	        
                                t%          | j                  |                                 fz             | j        r| j        j        j        r|                    d|z             |                    | j        j        j        d| j        j        dt          j        dt          j        d           |                    d| j        j        j        d|                                 d           |                    | j        j        j        t,                     |                    d           |                    | j        j        j        d           |                    d| j        j        j        d|                                 d           |                    | j        j                   d| j        j        _        |                    d           | j        r2| j        j        s%| j        j        rJ |                    | j         j        j        dt          j        d|                    | j         j        j        | j                             |                    | j         j                   |                    t          j         t,                     |!                    t          j         t,                     |                    d| j         j        j        dt          j         d           |j"        #                    tH          j%        d          }|                    d|d |d!t          j        d"|d#	           |                    d$t          j&        d|d           |                    d%t,                     |!                    d%t,                     |                    d| j         j        j        d|d&           |                    d           |j"        '                    |           d'| j         j        _        d S | j         rz| j        j        rJ |                    t          j&        t,                     |                    | j         j        j        d(t          j&        d           d'| j         j        _        d S d S ))NRaiseArgTupleInvalidr  zif (unlikely(%s > 0)) {z__Pyx_RaiseArgtupleInvalid(z, 1, 0, 0, z
); return r5  r]  zunlikely(%s)%sz	unlikely(z) && __Pyx_NumKwargs_rX  rW  KeywordStringCheckzFif (%s && unlikely(!__Pyx_CheckKeywordStrings(%s, %s, %d))) return %s;rv  z = __Pyx_KwargsAsDict_r   r^  zif (unlikely(!
)) return r\  z = PyDict_New();Fz = PyTuple_New(z + 1); zPyTuple_SET_ITEM(z, 0, r  for (=0; z < ; z++) {z"PyObject* item = PyTuple_GET_ITEM(r   z
+1, item);r   r4  )(r  r   ry  r   r  rP   r
   rG  r  rk   r  r  r  r  rg  rE  r  rX  boolr  rQ  r  r   put_var_gotrefr  r  r;  r  rF  r  r3   r  r  r8  r  r  r   c_py_ssize_t_typerD  r  )r   rU   kwarg_checkr  s       r4   rY  z)DefNodeWrapper.generate_stararg_copy_code  s   } 	--'(>@UVVX X XJJ063EEFFFHHH	--////1C1C1CTEUEUEWEWEWEWY Z Z ZJJsOOO 	N} 7D$5$;$C 7,v/@@"V%66		N !!!4>#9#9#96;L;L;LNK))#$8:OPP	R 	R 	R

TV.	0M0M0O0OT&'')9)9););X= =	> 	> 	>
  	!2!8!@ 	JJ{[0111JJ!'---&&&!!!%%%	' ( ( (
 JJJ!'---t/?/?/A/A/A/AC D D DOOD-39>JJJJJz"""JJt/@/F/L/L/LNOOOJJJ!'---t/?/?/A/A/A/AC D D D 1 78886;D#3JJsOOO  	4(C 	4~2222JJ#)))"""''(;(A48LLL   
  3444OOF-~>>>V.???JJJ#)))6+<+<+<> ? ? ?>//
0LY^/__DJJJdddF...6 7 7 7JJJ!!!444) * * *OOFN333V^444JJJ#)))4441 2 2 2JJsOOON''---23DM///] 	4~2222OOF-~>>>JJ#)))!!!# $ $ $ 34DM///	4 	4r6   c                 j   j                             t          j        dd                     | j                                        }                    d          }g }g }g }d}	|D ]}
|
j        r|
j        rA|
j	        s9|
j
        s2|
j        r|                    |
           nV|                    |
           n@|
j        r|                    |
           n#|
j	        s|
j
        s|                    |
           |
j        r|	dz  }	||z   }| j        | j        z
  }t!          |          dk    r|d         j	        s|d         j
        r|dz  }t!          |          }| j         o||k    }t%          |          }| j        s| j        r|                     |                               d           t-          |          t-          |          z   }d |D             }d                    fd	|D             d
gz             }                    dt0          j        d|d           |                     ||           |p| j        }|rt0          j        }n)t0          j        d| j        j        dt0          j        d}| j        dk    rd|z  }                    d|z             |r|                     ||||||           nj                             t          j        dd                                         dt0          j        dt0          j        dt0          j        d| j        r| j        j         j!        ndddddd|d"                    | j#                             | j        r|dk    s||k    rL||k    r
| j        sd}nd}                    dt0          j$        ||fz             %                    |           | j        r||k    r@| j        s9                    dt0          j$        |fz             %                    |                               d           tM          |          D ]\  }}
|
j        s'                    |
j         j                  }j                             t          j        dd                     (                    d| j        d|d                                "                    | j#                              nn                    d           ||k    rGtM          |          D ]5\  }}
                    d!|| j        j        t0          j)        |fz             6n                    d"t0          j$        z             | j        r                    d#           tU          tM          |                    d d d$         }|D ]\  }}
||dz
  k    rB||d         d         k    r                    d%           (                    d&|dz   z                                 d!|| j        j        t0          j)        |fz             |dk    r*                    d%           (                    d'                               d(           | j        rG|rDtW          |dz
  d$d$          D ]}                    d)|z             %                    |           n*(                    d*           %                    |                               d+                               d+           tM          |          D ]\  }}
| ,                    |
d,|z                                  d+           -                    |          rÉ                    d-          }%                    |           .                    |           j                             t          j        d.d                                         d/||||t0          j$        "                    | j#                  fz             .                    |           d S d S )0NrV  r  argtuple_errorr   r   {c                      g | ]}|j         	|S r\   r  rH  s     r4   r   zJDefNodeWrapper.generate_tuple_and_keyword_parsing_code.<locals>.<listcomp>  s    HHHC3<HCHHHr6   ,c                 T    g | ]$}d                      |j        j                  z  %S &%s)intern_identifierr  rk   )r   r  rU   s     r4   r   zJDefNodeWrapper.generate_tuple_and_keyword_parsing_code.<locals>.<listcomp>  s0    XXXUT++CIN;;;XXXr6   r  zPyObject **z[] = {z};z && __Pyx_NumKwargs_rX  z) > 0z
likely(%s)rv  ParseKeywordsz'if (likely(__Pyx_ParseOptionalKeywords(r   r  ) < 0)) z!=<z } else if (unlikely(%s %s %d)) {z} else if (unlikely(%s > %d)) {r\  RaiseKeywordRequiredz__Pyx_RaiseKeywordRequired("r  r  "values[%d] = __Pyx_Arg_%s(%s, %d);switch (%s) {default:r   CYTHON_FALLTHROUGH;
case %2d: 	case  0: break;	case %2d:	default: r]  z
values[%d]skiprj  z2__Pyx_RaiseArgtupleInvalid(%s, %d, %d, %d, %s); %s)/r   ry  r   r  rk   r  r  r@  rK  r  r?  rB  r  rC  r  r  rG   r  rq  r  generate_stararg_init_coderP   tupler   r
   pykwdlist_cname#generate_argument_values_setup_coderE  r  rX  generate_keyword_unpacking_coderQ  r  r  r  r3   rG  r  r  r}  r  rD  r   r  generate_arg_assignmentr  r  )r   rR   rU   r_  self_name_csafeargtuple_error_labelr  required_kw_only_argsoptional_kw_only_argsnum_pos_only_argsr  kw_only_argsmin_positional_argsmax_positional_argshas_fixed_positional_counthas_kw_only_argsall_argsnon_posonly_argsnon_pos_args_idaccept_kwd_argskw_unpacking_conditioncomparer  pystring_cnamereversed_argsskip_error_handlings     `                       r4   rZ  z6DefNodeWrapper.generate_tuple_and_keyword_parsing_code  s	   ))#J0EFF	H 	H 	H )7799#~~.>?? " " 	+ 	+C~ +; 	0? 83? 8; 8188====+223777[ 0)005555 0 0#**3///< +%*% -/DD"4t7PPt99q==d1g1=T!W5H=1$!/22)-%6 &7#66 	#-- 	G 	G++,?FFF

3))E,,?,??HH8HHH((XXXXGWXXX\_[``b b


"""OO 	 	 	 	004KKK +?d.? 	N%+%6"" !!!4>#9#9#96;L;L;L&N" $q((%14J%J" 	

;!77888 	,00#%8*,<hH\^bd d d d --'9NOOQ Q QJJJ!!!%%%&&&151BI!'--II)))+ , , , % 		0*=*A*AFY]pFpFp #&999$-9JJ9"G-@=B B C C CMM.///$ 6	 "%8888

<&(;@= = > > >2333JJz"""#L11 
 
3{ 	%)%;%;CIN%K%KN$55#/0FH]^^` ` `HHH			&( ) ) ) JJttx88999E	 JJz""""&999 (88 N NFAsJJCt~5v7H!GM  M N N N NN 

?V-??@@@= +JJz*** $Y%?%? @ @2 F+ N NFAs/111a 0 333 JJ'<===1!5666JJCt~5v7H!GM  M N N N N&!++JJ4555HH[)))

8$$$= 8* <!&':1'<b"!E!E 8 8A JJ{Q7777&:;;;HH[)))MM"6777

3

3
  )) 	F 	FFAs((lQ.>EEEE

3??/00 	0"&.."8"8MM-...NN/000--'(>@UVVX X XJJK!;#%8"))	O     NN./////	0 	0r6   c                     |j         j        rU|j        r%t          j        |j         t          j        |          }|j        }|                    |j        d|d           d S |j         j	        r|j
        r|                    d|z             |                    |j                             ||j        j        |j        |                     |j
        r|                    d           |                    |j        j        d|                    |          d           |j         j        r|                    |j        d           |                    d           d S d S t!          |j        d|j         z             d S )	Nr4  r5  rv  r\  Tr`  r]  2Cannot convert Python object argument to type '%s')r]  ro  r@  r   typecastr   r  rP   r  from_py_functionrK  from_py_call_coder3   r0  r  r  r   )r   r  r   rU   r  s        r4   r  z&DefNodeWrapper.generate_arg_assignment  s   8 	`~ V!*38Z5NPTUUIEJJU[[[$$$788888x( `; 3JJ{T1222

3855#)/37D: : ; ; ;; $JJz***JJ	88>>>> @ A A A x2 V;;CIPT;UUUJJsOOOOO$ $ cgSVYV^^_____r6   c                 z   | j         r~d| j         j        _        |                    | j         j        j        d| j         j        j        d|                                 d           |                    | j         j                   | j        rd| j        j        _        |dk    ri| j        j	        rJ |
                    t          j        t                     |                    | j        j        j        dt          j        d           d S |                    d| j        j        j        | j        j        t          j        |t          j        fz             |                    d| j        j        j                            | j        j        j                  z             | j         r|                    | j         j                   |                                 |                    d|                                 z             |                    d	           |                    | j        j                   d S d S )
Nr   z = PyDict_New(); if (unlikely(!rm  r5  r4  z$%s = __Pyx_ArgsSlice_%s(%s, %d, %s);rZ  rz  r]  )r  r  r  rP   r  r  rr  r  r  rF  r  r
   rD  r   rX  rG  r]  nullcheck_stringr^  r  )r   r  rU   s      r4   r  z)DefNodeWrapper.generate_stararg_init_code  s.    	967D#3JJ!'---!'---  """"$ % % %  1 7888= 	923DM/"a''  >6666 1>BBB

)<)B)B)BFDUDUDUVWWWWW
 

AM'-t~/E%':F<NEP P Q Q Q 

1=.3DDT]EXE^__` a a a$ G--d.?.EFFF00222

<$*:*:*<*<<===

3##DM$788888-	9 	9r6   c           
      "   t          |          }|                    d|d                    d|z            fz             | j        j        rI|                    | j        j        dt
          j        d| j        j        dt
          j        d           t          |          D ]j\  }}|j	        r^|j
        j        rR|                    |          }|                    d|| j        j        |j
                            |          fz             kd S )	NzPyObject* values[%d] = {%s};ry  r  z *z = __Pyx_CyFunction_Defaults(r   r^  z%values[%d] = __Pyx_Arg_NewRef_%s(%s);)rG   rP   r   r;  r"  r
   dynamic_args_cnamer  r  rK  r]  ro  r0  r  rX  as_pyobject)r   rR   rU   r_  max_argsr  r  r  s           r4   r  z2DefNodeWrapper.generate_argument_values_setup_code  sB   t99 	6chhs8|,,:. . 	/ 	/ 	/ ;& 	AJJ+++V-F-F-F+++V->->->@ A A A  oo 	U 	UFAs{ Usx3 U # @ @ F F

Bt~-sx/C/CM/R/RFT T U U U	U 	Ur6   c           	      h   | j         sd S t          j        }|                    d           |                    d|z             |                    d|d|d|d           |                    d| j        j        d|d	           |                    d
           |                    d
           d S )Nrw  zPy_ssize_t %s;rn  ro  z5 < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++r|  __Pyx_Arg_XDECREF_z(values[]);r]  )r[  r
   quick_temp_cnamerP   r  rX  )r   rU   loop_vars      r4   r<  z4DefNodeWrapper.generate_argument_values_cleanup_code  s    ( 	F *

3

#h.///


HHhhh* 	+ 	+ 	+


$.:P:P:PRZRZRZ[\\\

3

3r6   c                    dx}}	t          |          D ]\  }
}|j        r|	dz  }	|j        s|dz  }|                    d           |                    dt          j        z             | j        r|                    d           t          |dz
  |dz
  d          D ]b}
|                    d|
dz   z             |                    d|
| j	        j
        t          j        |
fz             |                    d	           c|dk    rt|                    d|z             t          |dz
  dd          D ]2}
|                    d|
| j	        j
        t          j        |
fz             3|                    d
           t          |dz
  dd          D ]2}
|                    d|
dz   z             |                    d	           3|                    d           |dk    r|                    d
           n|                    |           | j        s*|                    d           |                    |           |                    d           | j                                        }|                    d| j	        j
        dt          j        d           | j        s|dk    rd}t          |          D ]\  }
}|j        s|
}||k     r|dz
  }||	k    r"|                    dt          j        z             t          ||	|dz            |	          D ]\  }
}||	k    r\|
|k    rV|
|	k    r|                    d	           | j        r|
|k    r|                    d           n|                    d|
z             |                    |j        j                  }|j        r|j        r|                    d           |                    d| j	        j
        dt          j        dt          j        d|d	           |                    d|
| j	        j
        fz             |                    d|                    | j                  z             |                    d           V|                    d|
| j	        j
        t          j        t          j        |fz             |                    d| j	        j
        |
fz             |                    d           |                    d           |                    d|                    | j                  z             |
|k     r|
dk    r,|                    d           |                    |           G|                    d           |j                            t3          j        dd                     |                    d|||||
fz             |                    |                    | j                             |                    d           |j        r|                    d           |j                            t3          j        d d                     |                    d!|d|d"           |                    |                    | j                             |                    d           ||	k    r|                    d           |r|                     ||           |                    d#           |	dk    r1|                    d$t          j        |	t          j        |	fz             n(|dk    r"|                    d%t          j        z             |dk    rd&}n,| j        r#|                    d'||	z
  ||	z
  fz             d(}nd)}|	t9          |          k     rd*|	z  }nd+}|j                            t3          j        d,d                     |                    d-t          j        dt          j        dt          j        d| j        r| j        j        j        pd&d|d|d|d.|                    | j                             |                    d           d S )/Nr   r   zPy_ssize_t kw_args;r  r  r   r  r  r  r  r)   r  r  r]  zkw_args = __Pyx_NumKwargs_rX  r^  r  zif (kw_args > 0) {#PyObject* value = __Pyx_GetKwValue_r   zBif (value) { values[%d] = __Pyx_Arg_NewRef_%s(value); kw_args--; }'else if (unlikely(PyErr_Occurred())) %szBif (likely((values[%d] = __Pyx_GetKwValue_%s(%s, %s, %s)) != 0)) {z&(void)__Pyx_Arg_NewRef_%s(values[%d]);z
kw_args--;zelse else {rj  r  z0__Pyx_RaiseArgtupleInvalid(%s, %d, %d, %d, %d); r  z__Pyx_RaiseKeywordRequired(r  zif (unlikely(kw_args > 0)) {zBconst Py_ssize_t kwd_pos_args = (unlikely(%s < %d)) ? 0 : %s - %d;z#const Py_ssize_t kwd_pos_args = %s;r  zIconst Py_ssize_t used_pos_args = (kwd_pos_args < %d) ? kwd_pos_args : %d;used_pos_argskwd_pos_argszvalues + %dr  r~  z)if (unlikely(__Pyx_ParseOptionalKeywords(r  ) r  rC  rK  rP   r
   rG  r  r  r  r  rX  rD  r  rk   r  rE  r  r}  r  rB  rQ  r  r3   r   ry  r   r  ,generate_optional_kwonly_args_unpacking_coderG   r  r  r  )r   r  r  r  r  r  r  rU   num_required_posonly_argsr  r  r  r  last_required_argr  pos_arg_countvalues_arrays                    r4   r  z.DefNodeWrapper.generate_keyword_unpacking_code  s^	    9:9!$5)) 	3 	3FAs| 3!Q&!{ 3-2-

()))

?V%77888= 	#JJz"""*1,.G.I2NN 	. 	.AHH\QqS)***JJ;4>)6+<a?A A B B BJJ,----$q((HH\$==>>>4Q6B?? F F

?t~-v/@!CE E F F F FJJx   02B;; 	. 	.AHH\QqS)***JJ,----$))JJx     MM.///} 	0HH[!!!MM.///

3 )7799


&&&(9(9(9; 	< 	< 	<! ?	 %81%<%< "#H-- * *3{ *()% #666$7$9!"%666

?V-??@@@#H->?PQR?R-R$SUfgg 4( 4(3&):::qDW?W?W---

#8999} 4.A)A)A

:....

;?333!%!7!7	!G!G; +({ ! JJ3444JJJ...0A0A0A6CXCXCXZhZhZh j k k kJJc4>1g3  3 4 4 4JJH4??[_[cKdKddeeeJJsOOOOJJc4>163DfF[]kgm  m n n nJJG4>KacdJeefffJJ|,,,JJsOOOJJH4??[_[cKdKddeee...66 HHW--- MM*>????
 !JJx000 ,== + 78NPe f fh h h HH%W /1K 35H![M &M N N N !JJttx'@'@AAA JJsOOOO (

8,,,(99'34JLabbd d d+OO^^^"= > > >

4??48#<#<===

3"%666

3 	N ==hMMM

1222 q   JJ["$5"$5_      !1$$JJ<v?QQRRR!##MM] 
	+ JJb#&779LO`9`fb b c c c+MM*Ms8}},,(+<<LL#L))#O5JKK	M 	M 	M


!!!"""?$"3"9"?F3FFLLMMOOOODH%%%' 	( 	( 	( 	

3r6   c                    g }d}d}t          |          D ]>\  }}|j        r|dz  }|j        r|j        s |s|}|                    |j                   ?|dk    rd|z  }nd}|rt          |          dk    rq|                    d| j         rdpdt          |          fz             |                    d           |                    d	||t          |          z   fz             n-|                    d
           |                    d|z             |                    d| j	        j
        dt          j        dt          j        dt          j        d|d           |                    d| j	        j
        z             |                    d|                    | j                  z             t          |          dk    r|                    d           |                    d           d S d S )Nr   r   r   z-%dr   z'if (kw_args > 0 && %s(kw_args <= %d)) {likelyzPy_ssize_t index;z6for (index = %d; index < %d && kw_args > 0; index++) {zif (kw_args == 1) {zconst Py_ssize_t index = %d;r  rX  r   z, *z[indexr  zEif (value) { values[index] = __Pyx_Arg_NewRef_%s(value); kw_args--; }r  r]  )r  rC  rB  rK  r  rk   rG   rP   r  r  rX  r
   rE  rQ  r  r  r3   )	r   r  rU   optional_argsfirst_optional_argr  r  r  posonly_corrections	            r4   r  z;DefNodeWrapper.generate_optional_kwonly_args_unpacking_code  sk   )) 	+ 	+FAs| & A% ; ck   '%&"  ****a!&)9!9!# 	=!!A%% 

D))6h<"&&H( ( ) ) ) 

.///

S&(:S=O=O(OWQ Q R R R R 

0111

9<NNOOOJJJ&&&!!!%%%&&&"""$ % % % JJ^~-. / / /JJ@4??SWS[C\C\\]]]=!!A%%

3JJsOOOOO5	 	r6   c                 T    | j         D ]}|j        r|                     ||            d S r   )rR   r  generate_arg_conversionr  s      r4   r  z0DefNodeWrapper.generate_argument_conversion_code  sA     9 	8 	8C# 8,,S$777	8 	8r6   c                    |j         }|j        }|j        ro|j        r|                    d|j        z             n|                    d|j        z             |                     ||           |                    d           d S |j        r|                     ||           d S |                    |          r,|                    |j	        j
        d|j        d           d S t          |j        d|d|d           d S )	Nrv  zassert(%s); {r]  r4  r5  z Cannot convert 1 argument from 'z' to 'r~  )r  r]  ro  rK  rP   r  %generate_arg_conversion_from_pyobject#generate_arg_conversion_to_pyobjectr  r  r  r   r3   )r   r  rU   old_typenew_types        r4   r  z&DefNodeWrapper.generate_arg_conversion  s   <8 	e{ <

;67777

?S]:;;;66sDAAAJJsOOOOO! 	e44S$?????''11 e

#---HIIIIIcggPXPXPXZbZbZbcdddddr6   c                     |j         }|j        rA|                    |                    |j        |j        j        |j        |                     d S t          |j        d|z             d S )Nr  )	r]  r  rP   r  r  r  r  r3   r   )r   r  rU   r  s       r4   r  z4DefNodeWrapper.generate_arg_conversion_from_pyobject  s|    8$ 	\JJx11		       #'ORZZ[[[[[r6   c                 2   |j         }|j        }|rn|                    |j        j        d|d|j        d|                    |j        j        |j                             |                    |j                   d S t          |j        d|z             d S )Nr4  rX  r  z5Cannot convert argument of type '%s' to Python object)
r  to_py_functionrP   r  r  r  r  r3   rr  r   )r   r  rU   r  rZ   s        r4   r  z2DefNodeWrapper.generate_arg_conversion_to_pyobject  s    <& 	_JJ	''	AAA	C D D D
 	*****#'RU]]^^^^^r6   c           
         | j         D ]a}|j        r|                     ||            |j        s:|j        j        s|j        j        s|j        j        r|                     ||           b| j	        j
        j        rt          t          t          | j                   | j                                                            D ]}| j	        j
        j        dk    r|                    d           |                    d|z             |                    d| j	        j
        j        d| j                                        d|d           |                    d|                    | j                  z             |                    d	           | j	        j
        j        dk    r|                    d
           | j	        j
        j        dk    rt          | j                   dk    r|                    d           |                    d| j	        j
        j        z             |                    d|                    | j                  z             |                    d	           d S d S d S d S )N__ipow__z #if PY_VERSION_HEX >= 0x03080000z)if (unlikely(unused_arg_%s != Py_None)) {z"PyErr_SetString(PyExc_TypeError, "z	() takes z arguments but z were given");%s;r]  z'#endif /*PY_VERSION_HEX >= 0x03080000*/r)   z$if ((PY_VERSION_HEX < 0x03080000)) {zYPyErr_SetString(PyExc_NotImplementedError, "3-argument %s cannot be used in Python<3.8");)rR   r  r  r  r]  ro  rW  r  r  r;  r  r  reversedr  rG   r  r  rk   rP   r  r  r3   )r   rU   r  rL  s       r4   r  z+DefNodeWrapper.generate_argument_type_tests  su    9 	8 	8C" 8++C6666_ 8#(*> 8*-(*<8*-(*E8 ,,S$777;' 	 eC	NNDN4U4U4W4WXXYY J J ;$)Z77 JJABBB

FJKKK


 )888$.:[:[:]:]:]:]_`_`_`bc c c 

54??48#<#<<===

3;$)Z77JJHIII{ %33DI!8K8K
 

ABBB

E)8:; ; ; 

54??48#<#<<===

3;	  	 $ 438K8Kr6   c                     | j         j        S r   )r  r  r   s    r4   r  zDefNodeWrapper.error_value/  s    ~))r6   r  ) rK   rp   rq   defnoder;  r[  r   r   r  r2  r4  rI  r   r  r  r  rg  r\  rY  rZ  r  r  r  r<  r  r  r  r  r  r  r  r  r\   r6   r4   r  r    s        GF   	3 	3 	31 1 1,  / / /3 3 36L@ L@ L@\Q$ Q$ Q$ Q$fQ Q Q2N& N& N&`2 2 21 1 1L4 L4 L4\~0 ~0 ~0@` ` `29 9 9@U U U*  s s sj* * *X8 8 8e e e&\ \ \_ _ _(  (  ( T* * * * *r6   r  c                   ^     e Zd ZdZdZdZdZej        dgz   Z fdZ	 fdZ
d Z fdZ xZS )	GeneratorDefNodeTF	Generatorgbodyc                 t    t          |g d          |d<    t          t          |           j        |fi | d S )NT)r  r   r   )r  rh   r  r   r   r3   r}   rJ   s      r4   r   zGeneratorDefNode.__init__@  sG    %c4HHHv.%%.s==f=====r6   c                     t          t          |                               |           | j        | j        _        | j                            |           d S r   )rh   r  r   rE  r  r   r   rJ   s     r4   r   z%GeneratorDefNode.analyse_declarationsE  sK    %%::3???!%!1

'',,,,,r6   c                 h   | j         j        j        }|                    | j                  }|                    | j                  }|                    | j                  }|                    d           |                    d| j        d|d| j	        r| j	        
                    |          nddt          j        d|d|d|d|                    d| j                             |                    t          j        t                      | j        r]d	}|                    |d
t          j        d           |                    |t                      |                    |t                      |                                 |                    d           |                    d           d S )Nrw  z#__pyx_CoroutineObject *gen = __Pyx_z_New((__pyx_coroutine_body_t) r   r  , (PyObject *) r  genzgen->classobjz  = __Pyx_CyFunction_GetClassObj(r^  zreturn (PyObject *) gen;r]  )r  r  rj  r}  rk   qualnamemodule_namerP   gen_type_namer  r  r
   r~  r  r3   r  r   r!  r  r  r8  r  )r   r   rU   
body_cnamerk   r  r  classobj_cnames           r4   rI  z'GeneratorDefNode.generate_function_bodyJ  s   Z%0
%%di00))$-88,,T-=>>

3


)))!zzSWSc#o4#3#I#I$#O#O#Oio#o#o---tttXXX{{{..udh???A 	B 	B 	B 	.???! 	=,NJJ 1 1 13 4 4 4OONN;;;^^<<<((***

-...

3r6   c                 "   |                     t          j        | j        d                     | j                            |d           t          t          |                               ||           | j                            ||           d S )NCoroutine.cT)proto)	ry  r   r  r  r  r  rh   r  r   )r   r   rU   rJ   s      r4   r   z.GeneratorDefNode.generate_function_definitionsb  s    [4T5GWWXXX
++D+===%%CCCNNN
00d;;;;;r6   )rK   rp   rq   r  is_iterable_coroutiner  rC  r;  r   r   r   rI  r   rr   rs   s   @r4   r  r  3  s         L!MM%	1K> > > > >
- - - - -
  0< < < < < < < < <r6   r  c                       e Zd ZdZdZdS )AsyncDefNode	CoroutineTN)rK   rp   rq   r  r  r\   r6   r4   r  r  i  s        MLLLr6   r  c                       e Zd ZdZdZdS )IterableAsyncDefNodeIterableCoroutineTN)rK   rp   rq   r  r  r\   r6   r4   r  r  n  s        'M r6   r  c                       e Zd ZdZdZdS )AsyncGenNodeAsyncGenTN)rK   rp   rq   r  r  r\   r6   r4   r  r  s  s        MKKKr6   r  c                   J     e Zd ZdZdZdZdZd	 fd	Zd Zd Z	d
dZ
d Z xZS )GeneratorBodyDefNodeTFNc           
      h    t          t          |                               ||||d g d d            d S )N)r3   r   rk   is_async_gen_bodyr?   rR   r  r  )rh   r  r   )r   r3   rk   r   r  rJ   s        r4   r   zGeneratorBodyDefNode.__init__  sM    "D))22$T=N24 	3 	A 	A 	A 	A 	Ar6   c                 ,   |                     |j                  }|                     d          }t          j        |z   |z   }|                    d t
          | j        |d          }||_        t          | j	                  |_
        d|_        || _        d S )N	generatorrc  )r  r`  T)r  r  r
   genbody_prefixr  r   r3   rj  r   rk   r  r  r  )r   r   r  rk   r  r  s         r4   declare_generator_bodyz+GeneratorBodyDefNode.declare_generator_body  s    S-..{{;''%.5ndh&+	   C C ,TY77 



r6   c                 Z    |                      |           |                     |           d S r   )r  r  r   s     r4   r   z)GeneratorBodyDefNode.analyse_declarations  s0    ##C(((##C(((((r6   c           	          d| j         j        dt          j        dt          j        dt          j        d	}|r|                    d|z             d S |                    d|z             d S )Nzstatic PyObject *z(__pyx_CoroutineObject *z, CYTHON_UNUSED PyThreadState *r@  rW  z%s; /* proto */z%s /* generator body */
{)r  rj  r
   generator_cnamelocal_tstate_cnamesent_value_cnamerP   )r   rU   r  rv  s       r4   r  z-GeneratorBodyDefNode.generate_function_header  s     J!!!"""%%%###	%
  	>JJ(6122222JJ3f<=====r6   c           
         | j         }| j                            ||           |                    |           |                                |_        |                    | j                   |                     ||           |	                    d           | 
                    |           |                                }|	                    dt          j        z             |                                }|                                 |                    | j        j        p| j        j                   |j        j        d         }|j        j        d         }|s|rX|                                 d|j        _        | j        r| j                            |          nd }|                    |           |j                            |j        j        j                   |                                }	|                    d          }
|                    |
           |                     |
           |	                    d|!                    t          j"        | j                  z             | j#        r| j$        | j$        }|tJ          j&        u rd}n4|tJ          j'        u rd	}n#|tJ          j(        u rd
}ntS          d|z            |	                    t          j        d|d|!                    t          j        | j                             |*                    t          j        tV                     | ,                    ||           |j        j        j        j-        r|	                    |j        j        .                    t          j/                  d|j        j        0                    dt          j1        z            d           |	                    dt          j/        z             |s|rd|j        _        |                    | j                   |	                    d           |	                    d           | j#        sa| j        j2        sU| j3        r-|j        4                    tk          j6        dd                     |	                    d| j3        rdndz             |7                    |j8                  rH| j        j2        s|9                    |j:                   |                     |j8                   | j#        r,| j$        %|;                    t          j        tV                     tx          j=        |>                                j?        j@        v rW|j        4                    tk          j6        dd                     |	                    dt          | j3                  z             |j        B                                D ]\  }}|C                    ||           |D                    | j        j                   |                     |j:                   | j#        r&|E                    t          j        tV                     n%|;                    t          j        tV                     |	                    d           |	                    dt          j1        z             |	                    d           |	                    dt          j1        z             |	                    dt          j1        z             |s|r,|F                    t          j        |j        jG                    |H                                 |	                    d t          j        z             |	                    d!           |I                    |j                   |s|r2|	J                    | j        j        | j        |j        jG                    |		                    d"t          j1        z             |		                    d#|
z             |jK        D ]\  }}|		                    d$||fz              |		                    d%           |s|r"|	F                    d&|j        jG                    |	H                                 |		                    d'           |		                    d!           |L                                 d S )(Nr   zPyObject *%s = NULL;rN  rO  T	first_runrk  zPyList_New(0)zPySet_New(NULL)zPyDict_New()z)invalid type of inlined comprehension: %sr4  rp  z%s->closurer5  zCYTHON_MAYBE_UNUSED_VAR(%s);Frd  StopAsyncIterationr  zPyErr_SetNone(%s);__Pyx_PyExc_StopAsyncIterationPyExc_StopIterationpep479z*__Pyx_Generator_Replace_StopIteration(%d);z#if !CYTHON_USE_EXC_INFO_STACKz+__Pyx_Coroutine_ResetAndClearException(%s);r  z%s->resume_label = -1;z%__Pyx_Coroutine_clear((PyObject*)%s);r_  rz  r]  zswitch (%s->resume_label) {zcase 0: goto %s;zcase %d: goto %s;z2default: /* CPython raises the right error here */r[  zreturn NULL;)MrE  r   r   r  r  r  r  r3   r	  rP   r  rL   r
   r  r  r  r  rk   r  r   r   r  r  r  r  r  r  init_closure_tempsr  r]  r  	use_labelr  r  r  
is_inlinedinlined_comprehension_typer   	list_typeset_type	dict_typer   r  r   rI  r  rY  r~  r.  r  r   r  ry  r   r  r  r  r  r  put_xdecref_clearr#   generator_stopr  contextfuture_directivesrq  r  r  r  r  r  rl  r  r  r  yield_labelsr  )r   r   rU   r=  closure_init_coder  rN  rO  r  resume_codefirst_run_labeltarget_type	comp_initr  r]  r  labels                    r4   r   z2GeneratorBodyDefNode.generate_function_definitions  s    		//d;;; 	t$$$/3~~/?/?, 	dh++D$777

2%%d+++ 0022

)F,??@@@//11))+++''
(T4:;TUUU"-i8$/<	 	3i 	333555'+DN$JNJZd$*@@FFF`dK%%k222 	))$*:*?*EFFF**,,..55''''''

4++F,CTXNNP 	Q 	Q 	Q ? 	At>J9Kg///+		 000-		 111*		#?+MO O OJJ###YYY''(;TXFFFH I I I OOF/@@@ 	##C... &2 	P## %66v7MNNNN %//060F1G H H H H%I J J J
 JJ58NNOOO 	-i 	-',DN$dh

2

-...  	hty'> 	h% R 11+,@-PPR R RJJ+484Je00Peg h h h ??4+,, 	>9* 1d/000NN4+,,, L4#B#N&&v':NKKK$(8(8(:(:(B(TTT 11+2I(Ta2b2bccc

G$tOeJfJffggg#~??AA . .t  ----""4:#<=== 	t()))? 	Hf1>BBBB""6#6GGG

3444

@6CYYZZZ

8

+f.DDEEE

:V=SSTTT 	Fi 	F!!&"5,0N,D(D " F F F((***

<&"55666

3 	..t~>>> 	Ki 	K&&tz'@$(151I-I ' K K K7-/ 	0 	0 	0 	,>???) 	@ 	@HAu1QJ>????NOOO 	Mi 	M((37>3K/K ) M M M//111.)))#r6   )NNNFrM  )rK   rp   rq   r  r  r  r  r   r  r   r  r   rr   rs   s   @r4   r  r  x  s         J!%A A A A A A
  ) ) )	> 	> 	> 	>J  J  J  J  J  J  J r6   r  c                   $    e Zd ZdgZdZd Zd ZdS )rA  r   Nc                 B    |j          _         j        j        rd}nd}ddlm                      j        t                     _	        
                     j         j	         fd j        |d          D                       }|j        j        s|j        j        rFt           j        t           j        |          t!           j        d           g           _        nt!           j        |           _         j                            |           _         S )	Nr   r   rF  c                 R    g | ]#}                     j        |j                   $S rK  )r  r3   rk   )r   r  r  r   s     r4   r   z9OverrideCheckNode.analyse_expressions.<locals>.<listcomp>H  s@     4 4 4 $$TXCH$== 4 4 4r6   rM  rR   )exprr   r  )r  rR   r  r  r   r  RawCNameExprNoder3   r   	func_noderP  r  rX  is_returncoder  ExprStatNoderQ  r   rw   )r   r   	first_arg	call_noder  s   `   @r4   rw   z%OverrideCheckNode.analyse_expressions>  s@   O	<' 	III"33DHnMM,,Ht~4 4 4 4 4!Yyzz24 4 4 - 5 5	 ?" 	Bco&C 	B$TXTXI666txt44466 7 7 7DII 'txyAAADII11#66	r6   c                    | j         j        r| j         j        j        n| j         j        }|                    |j                  }| j         j        rdt          j        z  }nd| j        d         j	        z  }|
                    d           |
                    dt          j        z             |
                    d           | j         j        r|
                    d           n|
                    d|d|d	           |
                    d
           |j                            t          j        dd                     |
                    dt          j        dt          j        d           |
                    d|dt          j        dt          j        d           |
                    dt          j        d|d           |
                    d           |j                            t*          d          }| j                            |           |j                            t          j        dd                     |
                    |d|d|d|                    || j                             |                    |t*                     |
                    d|d|j        d           | j                            |           |
                    d           |
                    d
           |
                    t          j        d|d           |
                    t          j        d |d           |
                    d!t          j        d"t          j        d           |
                    t          j        d#t          j        d           |
                    d           |
                    d           |                    |t>          j                   |j                             |           |
                    d
           |
                    d           |
                    d           |
                    d           d S )$Nr  r   z /* Check if called by wrapper */zif (unlikely(%s)) ;z#/* Check if overridden in Python */r  zelse if (unlikely((Py_TYPE(z:)->tp_dictoffset != 0) || __Pyx_PyType_HasFeature(Py_TYPE(z6), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))) {zQ#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTSPyDictVersioningObjectHandling.czstatic PY_UINT64_T z = __PYX_DICT_VERSION_INIT, z = __PYX_DICT_VERSION_INIT;z0if (unlikely(!__Pyx_object_dict_version_matches(r   z))) {zPY_UINT64_T z = __Pyx_get_tp_dict_version(r^  r  Tr  PyObjectGetAttrStrz = __Pyx_PyObject_GetAttrStr(r  zif (!__Pyx_IsSameCFunction(z
, (void*) )) {r]  z! = __Pyx_get_object_dict_version(rx   != r4  )!r  r#  r  r}  rk   r  r
   module_cnamerR   r  rP   rh  r   ry  r   r  tp_dict_version_tempobj_dict_version_temptype_dict_guard_tempr  r  r   r  	set_cnamer  r3   r  rj  r   r   r  r   r  )r   rU   method_entryinterned_attr_cnamer  func_node_temps         r4   r   z)OverrideCheckNode.generate_execution_codeS  s}   ;?<;Umt|177[_[g[m"44\5FGG <' 	?)F,??HH)DIaL,>>H

5666

(6+EEFFF

8999<' 	%JJx    JJJ((($ % % % 	

fggg))#$68JKK	M 	M 	M 	


''')E)E)EG 	H 	H 	H


HHf11163O3O3OQ 	R 	R 	R


'''3 	4 	4 	4

855nQU5VV  000))#$8:LMM	O 	O 	O

NNHHH&9&9&9##NDH===? 	@ 	@ 	@ 	777


nnnVbVmVmVmnooo	))$///

3
 	

fggg

'''3 	4 	4 	4

((((((4 	5 	5 	5 	


''')D)D)DF 	G 	G 	G

''')E)E)EG 	H 	H 	H

3

8nj.GHHH##N333

fggg

3

8

3r6   )rK   rp   rq   r   r   rw   r   r\   r6   r4   rA  rA  0  sE         (KD  *L L L L Lr6   rA  c                       e Zd ZdS )ClassDefNodeNrK   rp   rq   r\   r6   r4   r2  r2            Dr6   r2  c                       e Zd Zg dZdZdZdZdZdZdZ	dZ
	 	 ddZd Zd Zd Z ej        ej         ej        dej        d          g          Zd	 Zd
 Zd ZdS )PyClassDefNode)doc_noder   rf   	metaclassmkwrl   class_resultr;  
class_cellr  
orig_basesNFc	           	      .   t                               | |           || _        || _        || _        || _        || _        ddlm}	 | j        rmt          j
        rat          | j        | j                  }|	                    ||          }
|	                    t          d          t           |          | _        nd }
| }|rd}d| _        |j        r|j        rxt+          t-          |j                            d d d         D ]E\  }}|j        j        d	k    r0| j        t5          |j        d
           |j        | _        |j        |= F|| _        n$| j        J n|	                    |          | _        |s| j        s| j        s| j        r| j        M|r|j        s| j        }nd }|s| j        j        r| j        j        sn|	                    ||           | _        d}nd}|	                     |||
|           | _!        |	"                    ||| |
|||          | _#        n:|	$                    |g           | _!        |	%                    ||| |
          | _#        |	                    ||          | _&        |	'                    | j                  | _(        d S )Nr   rF  r  r   )rk   r]  r3   FTr   r8  z2keyword argument 'metaclass' passed multiple times)class_def_node)rk   r?   r>  )rk   r>  r?   calculate_metaclassallow_py2_metaclass
force_typer  )rk   r>  r?   rM  ))r&  r   rk   r?   r   r  rl   r   r  r$   r  r@   r3   
StringNoder  r   r   r7  is_py3_style_classis_dict_literalr  r   r  r   r   r8  r   r9  	ProxyNodeis_sequence_constructorrR   PyClassMetaclassNodePyClassNamespaceNoderf   Py3ClassNodeclassobjDictNode	ClassNoder;  ClassCellInjectorNoder;  )r   r3   rk   rl   r?   r   r  r  force_py3_semanticsr  r7  r@  r  r   mkdictneeds_metaclass_calculations                   r4   r   zPyClassDefNode.__init__  s   $$$$		$
8 	* 	 4844C ++Cs+;;H%..M)4L4LSagj.kkDMMH"55 	="'&*D#+ =/ 6#'	,2N(O(O#P#PQUQUSUQU#V @ @48>[88#~9 %dh0d e e e .2ZDN , <Q ?+DHH>5555 %..|<< 	C$* 	C 	CDN 	C~% "(D "!XFF!F 2
:2 JO2 %.%C%CD &D &2 &2DN.3++.2+!66$HT 7 C CDI%22$t$?$7.	 3  DMM "**3*CCDI%//$t 0 C CDM  ((4(88#99$(CCr6   c                     | j         rt          | j        j        d           dS ddlm} t          | j        dd| j        | j        p|	                    | j        g           | j
        | j        d| j        	  	        S )	zO
        Return this node as if it were declared as an extension class
        z7Python3 style class could not be represented as C classNr   rF  rc  rR   F)r`  r  
class_namerl   r  r   ra  r?   )rD  r   rK  r3   r   r  CClassDefNoderk   rl   r  r  r   r?   r   r  s     r4   	as_cclasszPyClassDefNode.as_cclass  s     " 	$-#%^___FTX(1)-(,	#':#W1D1DTXTV1D1W1W(,"&)$)!%+ + + 	+r6   c                     |}|j         s|j        r|j        }|j         |j        t          | j        |          x}| _        |S )N)rk   r  )rB  r  r  r   rk   r  )r   r   rF  r  s       r4   create_scopezPyClassDefNode.create_scope   s[    $ 	$(= 	$#D $ 	$(= 	$(diTJJJJtzr6   c                    | j         x}}| j        r9ddlm} | j        d d d         D ]} ||j        |j        |g          }d | _        || _        | j        r| j                            |           | j	        r| j	                            |           | j                            |           | j
                            |           |                     |          }|j        |_        | j
        j        j        |_        | j        r| j                            |           | j                            |           |                    |           d S )Nr   )rP  r   r  )rK  r  r  rP  r3   r8  r:  rl   r   r9  r;  analyse_target_declarationrY  r   r  r  class_obj_cnamer7  r   r6  )r   r   unwrapped_class_resultr:  rP  r8  r  s          r4   r   z#PyClassDefNode.analyse_declarations'  si   04=? 	#111111!_TTrT2 ) )	-~M&0& )  )  ) #DO(: 	1J++C0008 	/H))#.....s333..s333  %%.#{06= 	;M44T:::	&&t,,,22488888r6   rl   c           	      d   | j         r| j         j        rt          | j         j                  dk    seddlm}m} | j                             |          } ||j        d| j	        t          j        dd           ||          g          | _         || _        | j         r| j                             |          | _         | j        r| j                            |          | _        | j        r| j                            |          | _        | j                            |          | _        | j                            |          | _        | j        }| j                            |          | _        | j                            || j                  | _        | j                            |          | _        | S )Nr   r   )PythonCapiCallNode	CloneNode__Pyx_PEP560_update_basesPy3UpdateBasesr%  )function_namer  utility_coderR   )rl   rG  rG   rR   r  r_  r`  rw   r3   update_bases_functyper   r  r<  r9  r8  rf   r:  r  r   r;  analyse_target_expressionrK  r;  )r   r   r_  r`  r<  r  s         r4   rw   z"PyClassDefNode.analyse_expressionsE  s   : 		)tzA 		)c$*/FZFZ^_F_F_@@@@@@@@77<<J++JN94(45EGYZZi
++,	. . .DJ
 )DO: 	=77<<DJ8 	9x33C88DH> 	E!^??DDDNI11#66	 -AA#FFzI11$77	k;;COO/==dCCr6   c                 |    |                      | j        |           | j                            | j        |           d S r   )r  r  r   r   r(  s      r4   r   z,PyClassDefNode.generate_function_definitions^  s:    ((T:::	//
DAAAAAr6   c           	         |                     | j                   |j                            |            | j        }| j        r| j                            |           | j        r| j                            |           | j        r| j                            |           | j	        r| j	                            |           | j
                            |           | j        r|                    d| j                                        d| j                                        d           |                    |                    d| j
                                        d| j                                        d| j                             |                    d           | j                            |           | j                            |           | j
                                        x|_        |_        | j        }|	|j        sd }||                    |           | j                            |           | j                            |           |-|                    || j                                                   |*|                    |           |                    |           | j                                        x|_        |_        | j                            | j        |           | j
                            |           | j
                            |           | j	        r4| j	                            |           | j	                            |           | j        r4| j                            |           | j                            |           | j        r4| j                            |           | j                            |           |j                                         d S )Nr{  r(  r|  zPyDict_SetItemString(z, "__orig_bases__", rW  r]  )r  r3   pyclass_stackr  r  r<  r-  rl   r9  r8  rf   rP   r   error_goto_if_neggenerate_disposal_coder:  namespace_cnamer\  r;  	is_activer   r   r:  generate_injection_coderK  r;  r=  pop)r   rU   r  r;  s       r4   r   z&PyClassDefNode.generate_execution_codeb  s   dh!!$'''z? 	;O44T:::: 	6J//5558 	4H--d333> 	:N33D999	**4000? 
	-JJJDJ,=,=,?,?,?,?AWAWAYAYAYAYZ[[[JJ&&&I$$&&&&(>(>(@(@(@(@(BH   
 JJsOOOO224888O&&t,,,6:i6F6F6H6HHt3_
!**>!J!//555	))$///224888!..d'..002 2 2!--d333!!$'''6:m6J6J6L6LLt3,,T->EEE	((...	T"""> 	,N11$777N%%d+++8 	&H++D111H%%%: 	(J--d333J!!$'''     r6   )NNF)rK   rp   rq   r   r  r:  rD  r8  r9  r7  r<  r   rW  rY  r   r   r  r   r  re  rw   r   r   r\   r6   r4   r6  r6    s       (G G GKJLI
CHJ?C8=GD GD GD GDR+ + +&  9 9 92 1J0!#J#Gj.GNN$
 
  2B B B6! 6! 6! 6! 6!r6   r6  c                       e Zd ZdgZdZdZdZdZdZdZ	dZ
dZdZed             Zd Zd Zd Zd Zd	 Zd
 Zd Zedd            Zd ZdS )rU  r   NFc                 *    t          | j                  S r   )r!   rT  r   s    r4   punycode_class_namez!CClassDefNode.punycode_class_name  s    t///r6   c                     t          | d          s>ddlm} | j        r*|                    | j        |g | j        d          | _        nd | _        | j        S )N_buffer_defaultsr   r  F)need_complete)r)  r   r  buffer_defaults_noder  buffer_defaults_posrt  )r   r   r  s      r4   r  zCClassDefNode.buffer_defaults  sy    t/00 	-      ( -(.(E(E,T6"' )F )) ))%%
 )-%$$r6   c                    | j         rE| j        dk    r:| j                             d          }|                    || j                  }|sd S n|}|                    | j        | j        dd| j         d | j        | j        | j        | j	        | j
        | j        |                     |          | j                  | _        | j        r0t!          | j        j                  dk    rd| j        j        _        d S d S d S )Nr  rD   r   )rk   r3   r%  implementingr  r^  objstruct_cnametypeobj_cnamer`  r  
check_sizer  r  shadowr   T)r  r`  splitr[  r3   declare_c_classrT  objstruct_nametypeobj_namer  r|  r  r  r}  r  rl   rG   rR   r]  multiple_bases)r   r   rV  
home_scopes       r4   r  zCClassDefNode.declare  s    	8 ; ;*0055K11+txHHJ t J//( /+* 0055; 0    
 : 	2#djo..22-1DJO***	2 	222r6   c                 $   i }| j         s|S ddlm} g }| j         D ]}|j        }d }t	          ||j                  r	|}|j        }t          j        ||          }|dk    r|rt          |j
        d           d|d<   a|dk    rTd }	i }
|rFt	          ||j                  r|j        }	n)|j        j        }	|j        }|r|                                }
|	|
f||<   |                    |           |rt          |d         j
        d	           || _         |S )
Nr   rF  zfunctools.total_orderingz total_ordering cannot be called.Ttotal_orderingdataclasses.dataclassr   z8Cdef functions/classes cannot take arbitrary decorators.)r  r   r  r8  rH   CallNoderM  r   'exprnode_to_known_standard_library_namer   r3   rP  rR   r  r  as_python_dictr  )r   r   extra_directivesr  remaining_decoratorsoriginal_decoratorr8  decorator_call
known_namerR   rS   kwds_s               r4   _handle_cclass_decoratorsz'CClassDefNode._handle_cclass_decorators  s    	$##!"&/ 	< 	<*4I "N)Y%788 /!*%.	 HTWXXJ777! R.,.PQQQ59 !12666! :!.)2JKK :-2-=B . ;  :#(#7#7#9#9D04d| , ''(:;;;; 	k&q)-/ijjj.r6   c                 b    j         r j        st           j        d                                          }d  _         j        rud  _        j        D ]}|j	         j        k    r| _         j        Ft           j        d j                   _        d j        _                             j                    j        j        rʉ j        j        d         }|                              }|t"          j        t"          j        t"          j        fv r,                    |                                          j        }|t          |j        d j        z             n|t"          j        k    rd }n|j        s'|j        r|j        st          |j        d|z             n|                                s't          |j        d|j	        d j        d           nq|j        r5|j        j        r)|j         r"t          |j        d|d j        d	           n5|j        r'|j	        d
v rt          |j        d|j	        z             n| _        j        !                    dd          dk    r&|t"          j        k    rtE           j        dd            j#        d u}|r8 j        r1 j        j        s% j        j$        %                     fd           d S  j        rE j&        dk    r: j        '                    d          }(                    | j                  }	|	sd S n}	 j&        dk    rO j        dk    rD j        tR          j*        v r1j+        d d         dk    rtE           j        d j        z  d           |	,                     j         j        |o j-        |o j-          j         j         j         j.         j/         j&         j0         j1         2                               j3                   _4         j        r.tk           j        j                  dk    rd j4        j        _6         j3        r$ j4        |	                     j                  _7        |	ur1 j&        dk    r&8                     j         j4         j                    j4        j        j        x _        }
|
|r9j        9                                |
_        |
j        :                    |           nj        |
_        d|
j        v rId}|
j        d         }|r-|d         }|!                    d          }|o|j;        o|j<        }|rdnd|
_=         j>        r+t~          j@        rt           j         j>                  |
_>        |r j#        B                    |
            j        C                    d          }|rZ|jD        rS|
jE        sL|
jF        sE j        G                    d          |_H         j        I                    d|j>        |j                    j-        rd|
_E        nd|
_F        tk           j        j                  dk    r|r j-        r%t           j        j        d         j        d            j        j        dd          D ],}|                              rt          |j        d           -d j4        j        _J        ddlKmL} |M                     j        |N                     j         j                   j        |O                     j        g            g!           _P        nN j        r/ j        jQ        p j        jJ         j4        j        _J        d  _P        nd j4        j        _J        d  _P        R                     j4                    j4        j        j$        D ]} |             d S )"NzTObject struct name specification required for C class defined in 'extern from' blockr   r   z+First base of '%s' is not an extension typez'%s' is not an extension typezBase class 'z' of type 'z' is incompletez
' is final)r  byteszGinheritance from PyVarObject types like '%s' is not currently supportedfreelistzIfreelists cannot be used on subtypes, only the base class can manage themc                  .                                    S r   )r   )r   r   s   r4   <lambda>z4CClassDefNode.analyse_declarations.<locals>.<lambda>I  s    @Y@YZ]@^@^ r6   r  rD   __builtin__   zcpython.z %s already a builtin Cython type)rk   r3   r%  ry  r  r^  rz  r{  r|  r`  r  r  r  r}  Tr  Ffrozenr   __dict__getterz'Only declare first base in declaration.z+Only one extension type base class allowed.rF  r  rB  rS  )Sr1  r  r   r3   r  r^  r  modulecimported_modulesrk   r   r  has_extern_classadd_imported_modulerl   rR   r  r   r  c_long_typec_float_typerW  sign_and_namer]  rT  r   r  r  rz  r  r  r   r  r'  r	   r   defered_declarationsr  r`  r~  r[  r   builtin_typesr  r  ra  r  r|  r  r  r  r}  r  rG   r  r<  add_imported_entryr   r   r   r   is_c_dataclass_scoper?   r$   r  r@   r   r  is_variabledefinedimplementedmangle_internalgetter_cnamedeclare_property
early_initr   r  r  IdentifierStringNoderL  type_init_argsis_externalallocate_vtable_names)r   r   r  r  rf  r^  base_class_scopehas_bodyrV  r  r  	is_frozendataclass_configdecorator_kwargsfrozen_flag
dict_entry
other_baser  thunks   ``                 r4   r   z"CClassDefNode.analyse_declarations  s$   
 ? 	t4#6 	t$(rsss99#>>  	5DK/ ) );$"222"(DK{")$*:D#+NN/0,''444:? 	r:?1%D,,S11IZ2J4JJLcdddJJy'>'>'@'@AAF	 dh MPTP_ _````j777#'  0 +#3+8A8Q+dh ?) KLLLL**,, +dhhNNNDOOO!5 6 6 6 6 
+Y_%? 
+,
+dhhIIt!0 1 1 1 1* +^'999dh i!!' ( ( ( ( "+~!!*a00144jF_9_9_"mopqqq9D( 	 	t~/C 	 N/667^7^7^7^7^___F 	8 ; ;*0055K11+txHHJ  J?h&& M11Ow'<<<&rr*j88"Dt"VXYZZZ//-$+!5$+o(n /+* 0055; 0    
 : 	2#djo..22-1DJO*; 	H=AZJdo..:S  T_%@%@""4?DJIII!Z_22
U 2#&>#6#6#8#8  ''(89999#&> &%*:::!	#(#34K#L # ]'7':$"2"6"6x"@"@K + \0F \;K\I9B-LXX*8 	;* 	;&tx::EI 		&I**5111//
;;J Xj4 Xem XTYTe X*.**D*DEU*V*V
'
++J

WWW{ & !$%!tz!## Yt{ Ydjoa(,.WXXX #joabb1 Y Y
--c22 Y*.*WXXX)*DJO&######"+"5"544TXT_4UUj((2(FFH #6 #I #ID
 ^ 	')-)C)`t~G`DJO&"&D)*DJO&"&D!!$*---Z_9 	 	EEGGGG	 	r6   c                     | j         r0| j        j        j        }| j                             |          | _         | j        r| j                            |           | S r   )r   r  r]  r  rw   r  r  s      r4   rw   z!CClassDefNode.analyse_expressions  sV    9 	=JO)E	55e<<DI 	933C888r6   c                     | j         r=|                     | j        |           | j                             | j        |           d S d S r   )r   r  r  r   r(  s      r4   r   z+CClassDefNode.generate_function_definitions  sQ    9 	F,,TZ>>>I33DJEEEEE	F 	Fr6   c                    |                     | j                   | j        j        j        sd }| j        r|j                            t          j	        d          }| j        
                    |           |                    |d| j                                        d           |                    |t          j	                   d|z  }|j                            t          j	        d          }|                    |d| j                                        d           |                    |                    || j                             |                    |t                     |                    d|d	|d
           d|z  }|                    d|z             |                    d|z             |                    d           |                    d           |                    d           |                    d           |                    |                    | j                             |                    d           |                    |t          j	                   |j                            |           | j                            |           | j                            |           |                     | j        ||d           |:|                    |t          j	                   |j                            |           | j        r| j                            |           d S d S )NTr  z = PyTuple_GET_ITEM(z, 1);z(((PyTypeObject*)PyTuple_GET_ITEM(%s, 0))zE = __Pyx_PyType_GetSlot(&PyType_Type, tp_new, newfunc)(&PyType_Type, rY  z)if (__Pyx_PyType_GetSlot((PyTypeObject*) z, tp_base, PyTypeObject*) != r|  z@__Pyx_PyType_GetSlot((PyTypeObject*) %s, tp_base, PyTypeObject*)z4__Pyx_TypeName base_name = __Pyx_PyType_GetName(%s);z4__Pyx_TypeName type_name = __Pyx_PyType_GetName(%s);zxPyErr_Format(PyExc_TypeError, "best base '" __Pyx_FMT_TYPENAME "' must be equal to first base '" __Pyx_FMT_TYPENAME "'",z#             base_name, type_name);z!__Pyx_DECREF_TypeName(base_name);z!__Pyx_DECREF_TypeName(type_name);r]  )bases_tuple_cnamecheck_heap_type_bases)r  r3   r  r]  r  r  r  r  r   r   r-  rP   r   r  r  r  r  r  r  rk  r:  generate_type_ready_coder   r   )r   rU   rl   
first_base
trial_typetrial_type_bases         r4   r   z%CClassDefNode.generate_execution_code  s    	dhz) '	3E"  544Z5N[_4``#<<TBBB

eeeTEXE_E_EaEaEaEabcccz'@AAAG%O
!^99*:S`d9ee


JJ 3 : : < < < <> ? ? ?

422:txHHIII
N;;;


JJ


, - - -"dgq"q

QTccddd

QT^^___

 w x x x

@AAA

>???

>???

4??4844555

3%%j*2KLLL++J777#::4@@@#..t444))$*deko)ppp %%eZ-FGGG++E2229 	4I--d33333	4 	4r6   c                    | j         }|j        }|j        }|sd S | j        dk    r7|j        r.|j        rJ |                    |j        d|j        d           d S |sJ |j        sJ d|j        z  }|                    d           d }|s|j        j        r|j        	                    t          d          }|                    |d|j        j        j        d	|                    || j                             |                    |t                     |s|r|r|j                            t!          j        d
d                     |                    | j        d|dt'          j        d|j                                      |          d|p|d           |                    |dt.          j        d|d|p|d           |r6|                    |t                     |j                            |           |                    |                    || j                             nC|                    |dt.          j        d|d|                    || j                             t'          j        d|j        j                  }	|	                    |          s|                    d           |                    |d|	j        d|	                    |          d           dD ]}
t'          j        |j        j                                      |
          }	|	                    |          dk    rt'          j        ||	          so|                    d|d|	j        d|d|d |	j        d!           |                    |d|	j        d|d |	j        d           |                    d"           |                    d#           |                    d$           |                    d%           |                    d&           |                    d'           |                    d(           |                    d)           |j                            t!          j        d*d                     |                    | j        d+|d|d           |                    d'           |rV|                     |t                     |!                    |t                     |                    |j        d,|d           |                    |d|j        d           |                    d)           |j        }|r|j"        r|j#        d-k    s|                    d.|j$        rd/nd0|j#        d1|j$        rd/nd0|j#        d2           |j                            t!          j        d3d                     |                    | j        d4|j        j        z             |                    d"           n	|j        }||                    d           t'          j        |j        j                  D ]}|%                    ||           |                    d)           |                    d5           |j                            t!          j        d6d                     |                    | j        d7|z             |                    d)           |                    d8           |                    d9|z             |                    d)           t'          j&        |d:          }t'          j&        |d          }|dk    r|dk    r|                    d           |j'        rd;}d<}nd=}d>}|j                            t!          j        |d?                     |                    d@|dA|dB           |                    |dC|d           |                    d"           |                    d)           | j         j        j(        D ]}|j)        dv }|j*        rtV          j,        r|j-        r|st'          j        | j         j        j                                      |j)                  }|r|.                                nd }|r|                    |           |                    dD           |                    dE           |                    dF|dG|j)        dH|                    dI| j                             |                    dJ           |                    dK|j-        z             |                    |j-        dL|j/        d           |                    dM|j-        z             |                    d"           |                    d"           |                    d)           |r|                    d)           |j0        r|j                            t!          j        dNdO                     |                    | j        dP|d|j1        d           |                    d           |j                            t!          j        dQdO                     |                    | j        dR|z             |                    d)           |j        j2        sf|j        j        3                    dS          sG|                    | j        dTt.          j        d|4                    |j5                  dU|d           |j6        s|7                    dV          nd }|ri|j         t          u rFdW|z  }|j$        r|j#        }n
dX|j#        z  }|                    dY|dZ|d[|d|j8        d	           nts          |j        d\           |j6        s|7                    d]          rznd S |j                            t!          j        d^d                     |                    d           |                    | j        d_|z             |                    d)           d S d S )`Nr  z = &r5  z%s_specz#if CYTHON_USE_TYPE_SPECSTr  z = PyTuple_Pack(1, (PyObject *)r  ValidateBasesTuplezExtensionTypes.cz__Pyx_validate_bases_tuple(z.name, tp_dictoffsetr   rW  z3 = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(, &r^  rL  z	, NULL); tp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIrF   r4  r  r  zif (!z->tp_as_buffer-> && z->tp_base->tp_as_buffer && z->tp_base->tp_as_buffer->r|  r]  z>#elif defined(Py_bf_getbuffer) && defined(Py_bf_releasebuffer)zB/* PY_VERSION_HEX >= 0x03090000 || Py_LIMITED_API >= 0x030B0000 */z#elif defined(_MSC_VER)zU#pragma message ("The buffer protocol is not supported in the Limited C-API < 3.11.")rU  zL#warning "The buffer protocol is not supported in the Limited C-API < 3.11."r  FixUpExtensionTypez'__Pyx_fix_up_extension_type_from_spec(&z.tp_bases = PyTypeObjectzif (sizeof(r   zstruct z) != sizeof(r'  ValidateExternBasez__Pyx_validate_extern_base(%s)z#if !CYTHON_USE_TYPE_SPECSPyType_Readyz__Pyx_PyType_Ready(%s)z#if PY_MAJOR_VERSION < 3z%s->tp_print = 0;tp_getattro#__Pyx_PyObject_GenericGetAttrNoDictPyObject_GenericGetAttrNoDict__Pyx_PyObject_GenericGetAttrPyObject_GenericGetAttrr%  zCif ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!z->tp_dictoffset && z,->tp_getattro == PyObject_GenericGetAttr)) {z->tp_getattro = rA  rw  z7PyObject *wrapper = PyObject_GetAttrString((PyObject *)r  z"); wrapperz3if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {z0%s = *((PyWrapperDescrObject *)wrapper)->d_base;z.doc = z0((PyWrapperDescrObject *)wrapper)->d_base = &%s;	SetVTableImportExport.cz__Pyx_SetVtable(MergeVTablesz__Pyx_MergeVtables(%s)internalzPyObject_SetAttr(r  __weakref__z%s->tp_weaklistoffsetz	struct %sr{  z == 0) z = offsetof(z)__weakref__ slot must be of type 'object'__reduce_cython__SetupReducez#__Pyx_setup_reduce((PyObject *) %s)):r]  r  r  r`  r{  rP   r  r^  r  r  r   r  r3   r  r   ry  r   r  put_error_if_negr   get_slot_by_namer   	slot_coder
   r)  r  r  is_empty	slot_namer  r  get_base_slot_functionr  r8  r  rz  r  generate_dynamic_init_codeget_slot_code_by_namer  pyfunc_entriesrk   r  r$   r  r  r  r  vtable_cnamevtabptr_cnameis_internalr'  r}  rT  is_closure_class_scoper  r  r   )r  rU   r  r  r]  r  r  typespec_cname
tuple_tempbuffer_slotbuffer_method_namer^  r  getattr_slot_funcdictoffset_slot_funcpy_cfuncutility_funcrZ   rW  r  weakref_entrytp_weaklistoffset	objstructs                          r4   r  z&CClassDefNode.generate_type_ready_code  s     z*
 	Fx'' ! ----

&&&&&&    F !   %%%%&);;NJJ2333J$ <):)D <!^99.UY9ZZ


JJ%/===++J	BBB   
 
N;;;  J ( $55#/0DFXYY[ [ [))%))&!2?EDTUU__`effff)7Z776    

!MM'''"NN%333	     <**:N*KKKN//
;;;

422=%)LLMMMM

%+++&//uyIII	   $4^TEUE`aaK''.. %

ABBB

!MM)))))%0000    +Q ( (&"+":(3#5 #55L5LM_5`5`  ",,U33s::9CcdikvCwCw:


 *MM;+@+@+@)MM)MM;+@+@+@$    

)MM;+@+@+@)MM;+@+@+@$    

3

[\\\

_```

4555

tuuu

7###

klll

8$$$--'(<>PQQS S S!!%))./ 0 0 0 JJw  Z 1>BBB  !2NCCC

$2D2D2DFWFWFWXYYYJJ"""    JJx   I 0( 1Jn1\1\ JJJ"/>Y>@T@T@T'4C)CYE^E^E^ ` a a a $55#/0DFXYY[ [ [))%)5U466 7 7 7JJsOOO%/	  0 JJ=>>>!01A1LMM = =//t<<<<JJx   JJ3444--'8JKKM M M!!%)-E-UVVVJJx   
 JJ1222JJ*]:;;;JJx    !* ?} U U#,#B5/#Z#Z  C'',@C,G,G

ABBB% =DH#BLL>H#<L 11+2I,Xj2k2klll


!MM===2 3 3 3 

!MM888- . . .

3

8$$$
 
(7 - - I)OO	O -(: -.-7@-$3
(35 55L5LTY5W5W KO)Y)E)E)G)G)GUY&) 7

#5666JJABBBJJsOOOJJJ)MM III 33IuyIIIKL L L
 JJMO O OJJJ 245 5 5 JJ*.*@*@*@$...QS S SJJJ 245 5 5 JJsOOOJJsOOOJJx((() -

8,,,  % 11+K9IJJL L L%%eii!MM&&&2   
 

ABBB 11+N<LMMO O O%%ei1IM1YZZZ

8$$$:) $*2G2K2KJ2W2W  %%eii'''**5+;<<<<!MM2    EJD`jE--m<<<fjM Z %77(?-(O%( G$($8		$/$2F$F	JJJ))))))!		%+++	 - . . . . -+-XYYY=B=Y %u  !455 % % % %  11+M;MNNP P P

ABBB%%ei1VYf1fggg

8$$$$$% %r6   c                     | j         r| j                             |           | j        r| j                            |           d S d S r   )r  r   r   r   s     r4   r   zCClassDefNode.annotate  sT     	/((...9 	%It$$$$$	% 	%r6   r>  )rK   rp   rq   r   rv  rw  r  r  r  r  r|  r  r}  rE  rr  r  r  r  r   rw   r   r   r$  r  r   r\   r6   r4   rU  rU    s       , (KL
CNLJJF0 0 X0
% 
% 
%2 2 26)  )  ) VV V Vp  F F F
.4 .4 .4b |% |% |% \|%|% % % % %r6   rU  c                   2    e Zd ZdgZd Zd Zd Zd Zd ZdS )PropertyNoder   c                     |                     | j        | j        | j                  | _        | j                            | j        j                   d S r   )r  rk   r?   r3   r  r   r   r  r   s     r4   r   z!PropertyNode.analyse_declarations  sB    ))$)TXtxHH
	&&tz'788888r6   c                 D    | j                             |          | _         | S r   r9  r   s     r4   rw   z PropertyNode.analyse_expressions      I11#66	r6   c                 <    | j                             ||           d S r   r;  r(  s      r4   r   z*PropertyNode.generate_function_definitions   r<  r6   c                     d S r   r\   r   s     r4   r   z$PropertyNode.generate_execution_code  r   r6   c                 :    | j                             |           d S r   r?  r   s     r4   r   zPropertyNode.annotate  r@  r6   NrA  r\   r6   r4   r  r    sh         (K9 9 9  ; ; ;  ! ! ! ! !r6   r  c                   P    e Zd ZdZdgZdZed             Zd Zd Z	d Z
d Zd	 Zd
S )CPropertyNodezADefinition of a C property, backed by a CFuncDefNode getter.
    r   Tc                 x    | j         j        }|rt          |d         t                    s
J |            |d         S r;  )r   r  rH   r  )r   r  s     r4   rT  zCPropertyNode.cfunc  s;    	BE!Hl;;BBUBBBQxr6   c                    t          | j        |          }| j                            |           |                    | j        | j        | j        | j        j        |          x}| _	        | j        j	        j
        |_        d S )N)class_scope)ctypeproperty_scope)r   rk   r   r   r  r?   r3   rT  r  r  r  r  )r   r   r  r  s       r4   r   z"CPropertyNode.analyse_declarations  s    diS999	&&u--- 11Itx1GX] 2 _ _ 	_
!Z-3r6   c                 D    | j                             |          | _         | S r   r9  r   s     r4   rw   z!CPropertyNode.analyse_expressions"  r  r6   c                 <    | j                             ||           d S r   r;  r(  s      r4   r   z+CPropertyNode.generate_function_definitions&  r<  r6   c                     d S r   r\   r   s     r4   r   z%CPropertyNode.generate_execution_code)  r   r6   c                 :    | j                             |           d S r   r?  r   s     r4   r   zCPropertyNode.annotate,  r@  r6   N)rK   rp   rq   r   r   r   rE  rT  r   rw   r   r   r   r\   r6   r4   r  r  
  s          (KL  X
4 4 4  ; ; ;  ! ! ! ! !r6   r  c                   $    e Zd Zg Zd Zd Zd ZdS )
GlobalNodec                 P    | j         D ]}|                    || j                   d S r   )namesdeclare_globalr3   r   r   rk   s      r4   r   zGlobalNode.analyse_declarations7  s8    J 	/ 	/DtTX....	/ 	/r6   c                     | S r   r\   r   s     r4   rw   zGlobalNode.analyse_expressions;  r  r6   c                     d S r   r\   r   s     r4   r   z"GlobalNode.generate_execution_code>  r   r6   Nr-  r\   r6   r4   r  r  0  sH        
 K/ / /      r6   r  c                   $    e Zd Zg Zd Zd Zd ZdS )NonlocalNodec                 P    | j         D ]}|                    || j                   d S r   )r  declare_nonlocalr3   r
  s      r4   r   z!NonlocalNode.analyse_declarationsI  s8    J 	1 	1D  tx0000	1 	1r6   c                     | S r   r\   r   s     r4   rw   z NonlocalNode.analyse_expressionsM  r  r6   c                     d S r   r\   r   s     r4   r   z$NonlocalNode.generate_execution_codeP  r   r6   Nr-  r\   r6   r4   r  r  B  sH        
 K1 1 1      r6   r  c                   <    e Zd ZdgZd Zd Zd ZdZd Zd Z	d Z
d	S )
r   r  c                    ddl m} | j        }t          ||j                  r|j                                        }|dk    r|                                \  }}t          |          rt          |j
        d           |j        D ]U\  }}|                    |          }	|	t          |j
        d           2|                    |j        |	|j
        d           Vt          | _        d S d S t#          |dd           F|j        r#|                    |           t          | _        d S |j        s|j        rt          | _        d S d S d S )	Nr   rF  r  z!Variable names must be specified.Unknown typeT)r  r  )r   r  r  rH   GeneralCallNoderM  r  explicit_args_kwdsrG   r   r3   r  r  r  r   PassStatNoderJ   r   r   declare_from_annotationr$  is_subscript)
r   r   r  r  rZ   rR   rS   varr  r]  s
             r4   r   z!ExprStatNode.analyse_declarations[  sm   ydI566 	.=4466Dz!!!4466
dt99 I$($GHHH&*&: P PNC$44S99D|im^<<<<	4$OOOO!- "! T<..:| .,,S111!-" .d&7 .!- ;:
. .r6   c                 t    d| j         _        | j                             |          | _         d| j         _        | S r>  )r  result_is_usedrw   r   s     r4   rw   z ExprStatNode.analyse_expressionst  s2    #(	 I11#66	#(	 r6   c                 p    | j         j        j        r"| j         j        r|                                  d S d S d S r   )r  r]  ro  is_tempr   r   s     r4   r   zExprStatNode.nogil_check{  sG    9>% 	$)*; 	NN	 	 	 	r6   zDiscarding owned Python objectc                    |                     | j                   d| j        _        | j                            |           | j        j        s`| j                                        rG| j                                        }| j        j        j        sd|z  }|	                    d|z             | j        
                    |           | j                            |           d S )NFz
(void)(%s)r  )r  r3   r  r  r-  r  r   r]  rX  rP   rk  r:  )r   rU   r   s      r4   r   z$ExprStatNode.generate_execution_code  s    dh#(	 	**4000y  	'TY%5%5%7%7 	'Y%%''F9>) /%.JJuv~&&&	((...	T"""""r6   c                 <    | j                             ||           d S r   )r  r   r(  s      r4   r   z*ExprStatNode.generate_function_definitions  r<  r6   c                 :    | j                             |           d S r   )r  r   r   s     r4   r   zExprStatNode.annotate  r@  r6   N)rK   rp   rq   r   r   rw   r   r   r   r   r   r\   r6   r4   r   r   T  s~        
 (K. . .2     3K
# 
# 
#; ; ;! ! ! ! !r6   r   c                   &    e Zd Zd Zd Zd Zd ZdS )AssignmentNodec                     |j         }|j         }|j        rL|j        j        rB|j        r=|j        j        s3t	          | j        d                    ||          d           d S d S d S d S d S )Nz4Assigning to '{}' from '{}' discards const qualifierr   r  )r]  rU  r^  r  r	   r3   r  )r   r  rhsrhs_tlhs_ts        r4   _warn_on_const_assignmentz(AssignmentNode._warn_on_const_assignment  s    < 	tEO4 	t 	teoNf 	tDHT[[\achiiqrssssss	t 	t 	t 	t 	t 	t 	t 	tr6   c                 t    t          |t                    r"|                     |j        |j                   d S d S r   )rH   r$  r)  r  r&  )r   rT   s     r4   _check_const_assignmentz&AssignmentNode._check_const_assignment  s>    dN++ 	?**48TX>>>>>	? 	?r6   c                 ,   |                      |          }|                     |           t          |t                    rTt          |t                    s?|j        j        j        r.|j                                        rt          | j
        d           |S )Nz9Storing unsafe C derivative of temporary Python reference)rv   r+  rH   r$  ParallelAssignmentNoder&  r]  rU  is_ephemeralr   r3   )r   r   rT   s      r4   rw   z"AssignmentNode.analyse_expressions  s    !!#&&$$T***dN++ 	]JtE[4\4\ 	]x}# ](=(=(?(? ]dh [\\\r6   c                     |                     | j                   |                     |           |                     |           d S r   )r  r3   generate_rhs_evaluation_coder=  r   s     r4   r   z&AssignmentNode.generate_execution_code  sD    dh))$///%%d+++++r6   N)rK   rp   rq   r)  r+  rw   r   r\   r6   r4   r$  r$    sS        t t t? ? ?  , , , , ,r6   r$  c                   f    e Zd ZddgZdZdZdZdZd ZddZ	d Z
d Zd	 Zd
 Zd ZddZd Zd ZdS )SingleAssignmentNoder  r&  Fc                 &	   ddl m} t          | j        |j                  r| j        j                                        }|r| j                                        \  }}|dv rt          |          dk    rt          |d         j
        d           d S |?|                    d           }|dk    sd|vrt          |j
        d           d S |d         }nd	}|d
                             |          }|t          |d
         j
        d           d S | j        }	|dk    rt          |	|j                  r|	j        |	j
        fg}
n>t          |	|j                  rd |	j        D             }
nt          |	j
        d           d S |
D ]\  }}|                    |||d|            t          |          dk    r|d         | _        nd| _        nd| _        t          |	|j                  st          |	j
        d           |                    |	j        || j
        d	           n|dv rPd| _        t          |          d
k    s|t          | j        j
        d           d S g }|j        D ]T\  }}|                    |          }|t          |j
        d           2|                    |j        ||j
        f           Ut          |          t          |j                  k     rd S t          | j        |j                  st          | j        j
        d           | j        j        }t1          |          }|                    |||d| j        j
                   |D ]\  }}}|                    |||           ni|dk    rcd| _        |rt          | j        j        j
        d           t5          | j        j
        | j        j        |          }|                    |           | j        rd S | j        r| j                            |           d S | j                            |           | j        j        s| j        j         rM| j        j!        r?| j        j!        j"        s2| j        #                                }|r|| j        j!        _"        d S d S d S d S d S )Nr   rF  )r  typedefr)   zInvalid positional argument.r4  r`  zInvalid keyword argument.rc  r   r  r  c                 *    g | ]}|j         |j        fS r\   )rk   r3   r   r  s     r4   r   z=SingleAssignmentNode.analyse_declarations.<locals>.<listcomp>  s!    #L#L#LCSXsw$7#L#L#Lr6   zInvalid declarationT)r  r`  zInvalid declaration.)r`  )r  unionz.Struct or union members must be given by name.F
fused_typez*fused_type does not take keyword arguments)rk   rd   )$r   r  rH   r&  r  rM  r  r  rG   r   r3   compile_time_valuer  r  r  rk   r  rR   r  declaration_onlyr  r  r  r   r   r  r  r   is_assignment_expression0analyse_assignment_expression_target_declarationr[  r$  r   r  rZ  !get_known_standard_library_import)r   r   r  	func_namerR   rS   kwdictr`  r]  r  varsr  r3   membersmemberr  rk   r  	fusednodestdlib_import_names                       r4   r   z)SingleAssignmentNode.analyse_declarations  s(    dh	 233 I	8)==??I G8!X88::
d 6664yy1}}d1gk+IJJJ'!%!8!8!>!>$	11\5O5O!$(,GHHH"F%+L%9

%.
722377D|d1gk>:::(C I--%c9+=>> #%(Xsw$7#8DD'Y-@AA ##L#L38#L#L#LDD!#'+@AAA"F(, a aHCOOCsDU_O````t99>>'+AwDHH48D1104-)#y/ABB C!#'+ABBB++CHdDHQZ+[[[["555,0D)4yy1}}dhl,\]]] G-1-A M M)	(88==<!)-@@@@#NNFL$
+KLLLL7||c$*>&?&???%dh	0BCC Ddhl,BCCC8=D.t44E//itx|\\\-4 = =)c))&$<<<<= ,..,0D) Ldh/3JL L L !.dhl378=!N !N !NI223777  	ZF, 
ZII#NNNNN33C888 H) ZTX-= Z48> ZZ^ZbZh  [G Z)-)S)S)U)U&) ZGYDDDZ Z Z Z Z ZZ Zr6   r   c                 t   ddl m} | j                            |          | _        |                     |          }|r|S | j                            |          | _        | j                            |           |                     |          }|r|S t          | j        |j
                  rD| j                            | j                   | j                            | j                  | _        nm| j        j        j        r\t          | j        |j                  sB|                    | j        j        | j        d d           }|                    |          | _        | j        j        j        r|                    | j        d| j        j        | j        j        g          }|rk| j        }d| _        |j        j        | _        |j        j        | _        | j        dk    r/| j        (|                    t/          j        dd                     nK| j                            | j        j        |          }n%| j                            | j        j        |          }|s!|j        s|j        s)|j        s"|j        j        r|                    |          }n!|j        j        r|                    |          }|| _        | S )	Nr   rF  )rf  rW   stop=Tr  CppExceptionConversionr7  ) r   r  r&  rv   
unroll_rhsr  rx   gil_assignment_check
unroll_lhsrH   MemoryViewIndexNodeanalyse_broadcast_operation$analyse_as_memview_scalar_assignmentr]  rV  SliceIndexNoder3   r  lookup_operator_for_typesis_overloaded_assignmentr  r  ry  r   r  r  r$  r   r   ro  coerce_to_tempcoerce_to_simple)r   r   use_tempr  unrolled_assignmentr  opr&  s           r4   rv   z"SingleAssignmentNode.analyse_types*  s   8))#.."ooc22 	'&&80055%%c***"ooc22 	'&&dh	 =>> 	9H00:::xDDTXNNDHHX]# 	9dh	(@AA 9..tx|$(RV]a.bb33C888=% 	9..txtx}dhm>\]]B =h04-')w'>$')w'>$'3..43G3O(()@AY[k)l)lmmmh((<<($$TX]C88C 	,s' 	,K	,(+	,$	, $$S))CCX! 	,&&s++Cr6   c           
      2	   ddl m}m} |}d x}x}x}	}
|j        j        r|j        j        }n|j        j        s|j        j        rt          ||j	                  r:|j
        s3|j        s,|j        x}}t          ||j	                  r|j
        s|j        ,t          ||j	                  rc|j        }|j
        }|r |                    t          j        |          }|j        }|r!|                    t          j        |          }n|j        j        rq|j        j        re|                    | j        t%          |j        j                  t          |j        j        t&                    r|j        j        n|j                  }nt+          | j        d           d S d }	|	r |	                    t          j        |          }	d }	  ||d            ||d          z
   ||	d          z  }nZ# t,          $ r t+          | j        d           Y d S w xY w|j        j        r$|j        j        }t          |t&                    sd S nd S d S ||k    rt+          | j        d|d	|           d S g }|                    |          }|g}|r1|j        s*|                    |          }|                    |           |r1|j        s*|                    |          }|                    |           |	r1|	j        s*|                    |	          }	|                    |	           t5          |          D ]k}|                    | j        t%          |          |t          j        
          }|	l|	                                r:|j        |	j        z  }|                    | j        t%          |          |          }n|                    | j        d|	|          }||                                rN|                                r:|j        |j        z   }|                    | j        t%          |          |          }n|                    | j        d||          }|                    |                    | j        ||                     |                               m|
||fS )Nr   )r  	UtilNodes)r   r  z*C array iteration requires known end indexc                 ^    | |S |                                  r| j        S t          d          )NzNot a constant.)r  r  r  )rT   
none_values     r4   	get_constz.SingleAssignmentNode.unroll.<locals>.get_const|  s9    |))1133 <#33():;;;r6   r   z5C array assignment currently requires known endpointsz3Assignment to/from slice of wrong length, expected z, got )r   r  r]  r  )operatoroperand1operand2r  )rf  r  )!r   r  rX  r]  	is_ctupler  rU  rV  rH   rO  rW   rF  rf  r  r   rs  IntNoder3   strr   constant_value_not_setr   r  
LetRefNoder   r  r  r  r  MulNodeAddNode	IndexNoderv   )r   rT   target_sizer   r  rX  rf  
start_node	stop_node	step_node
check_node
slice_sizer[  rg   refsr  ix_node
step_valueindex_values                      r4   unrollzSingleAssignmentNode.unrollZ  s+   ********:>>
>Y>Z9 2	JJY /	!3 /	T9#;<< (dj (TXT] ("i't T9#;<< (dj (TXT] ($	 899 )y!Z
 Y!+!5!5j6RTW!X!XJ I	 
 ) 3 3J4PRU V VIIy) din $-$5$5 HC	,?,??I$).Zg?h?h .STY^^2;2R %6 %U %U		
 dh(TUUU 	 W ) 3 3J4PRU V VI< < <"+)It"<"<yyUV?W?W"W[d[denpq[r[r!rJJ!   $($[\\\FF # !Y^
!*m<< F  F$$$((

KK) * * *F##D))v 	$j3 	$"--j99JKK
### 	#Y1 	#!,,Y77IKK	""" 	#Y1 	#!,,Y77IKK	"""$$ 	e 	eB''BQSZdZv'wwG$0022 n!(!89;T!TJ'//Jak/llGG'//3QZel/mmG%1133 W8S8S8U8U W")"9J<V"VK'//K@P@Pbm/nnGG'//3g 0 W WGLL,,TXDH]H]^aHbHb,ccdddd4&&s   &G( (H
Hc           	      p   ddl m} g }t          ||          D ]5\  }}	|                    t	          | j        ||	| j                             6t          | j        |                              |          }
|rt          | j        ||
g          }
|d d d         D ]}|
                    ||
          }
|
S )Nr   )rX  )r  r&  first)r3   r  r   )r   rX  r+  r  r2  r3   rs  r-  rw   r  LetNode)r   rm  rk  lhs_listrhs_listr   rX  assignmentsr  r&  rT   refs               r4   unroll_assignmentsz'SingleAssignmentNode.unroll_assignments  s    Hh// 	c 	cHC3DH#3VZV`aaabbbb%$(+FFFZZ[^__ 	HDHZ4FGGGD": 	0 	0C$$S$//DDr6   c                 P   ddl m} t          | j        |j                  sd S t          d | j        j        D                       rd S |                     | j        t          | j        j                  |          }|sd S |\  }}}| 
                    ||| j        j        ||          S )Nr   rF  c              3   $   K   | ]}|j         V  d S r   )
is_starredrH  s     r4   r0  z2SingleAssignmentNode.unroll_rhs.<locals>.<genexpr>  s$      77#s~777777r6   )r   r  rH   r  r  anyrR   rq  r&  rG   ry  )r   r   r  unrolledrk  rm  r&  s          r4   rI  zSingleAssignmentNode.unroll_rhs  s    $(I$788 	F7777777 	F;;txTX]););SAA 	F (
D#&&tZSQQQr6   c                 ,   | j         j        j        rd S ddlm} t          | j        |j                  sd S |                     | j         t          | j        j
                  |          }|sd S |\  }}}|                     |||| j        j
        |          S Nr   rF  )r  r]  r_  r   r  rH   r&  r  rq  rG   rR   ry  )r   r   r  r~  rk  rm  r  s          r4   rK  zSingleAssignmentNode.unroll_lhs  s    8=" 	F$(I$788 	F;;txTX]););SAA 	F (
D#&&tZdhmSQQQr6   c                 :    | j                             |           d S r   r&  r-  r   s     r4   r0  z1SingleAssignmentNode.generate_rhs_evaluation_code      ))$/////r6   c                     | j         r5| j                            | j        || j         | j        | j                   d S | j                            | j        |           d S )N)r<  r  r  )rQ  r  r=  r&  r  r  )r   rU   r<  s      r4   r=  z-SingleAssignmentNode.generate_assignment_code  sr    ( 	>H--&*&C $ 4 $ 4 . 6 6 6 6 6 H--dh=====r6   c                 <    | j                             ||           d S r   r&  r   r(  s      r4   r   z2SingleAssignmentNode.generate_function_definitions       ..sD99999r6   c                 n    | j                             |           | j                            |           d S r   r  r   r&  r   s     r4   r   zSingleAssignmentNode.annotate  4    $$r6   Nr  rM  )rK   rp   rq   r   rs  rQ  r;  r:  r   rv   rq  ry  rI  rK  r0  r=  r   r   r\   r6   r4   r2  r2    s         %.KE$$\Z \Z \Z|. . . .`\' \' \'|
 
 
R R RR R R0 0 0	> 	> 	> 	>: : :         r6   r2  c                   P    e Zd Zg dZdZdZdZd Zd ZddZ	d Z
dd	Zd
 Zd ZdS )CascadedAssignmentNode)ru  r&  coerced_valuescloned_valuesNc                 ~    t          |t                    r%|j        D ]}|                     ||j                   d S d S r   )rH   r  ru  r)  r&  )r   rT   r  s      r4   r+  z.CascadedAssignmentNode._check_const_assignment  sU    d233 	>} > >..sDH====	> 	>> >r6   c                 D    | j         D ]}|                    |           d S r   )ru  r[  )r   r   r  s      r4   r   z+CascadedAssignmentNode.analyse_declarations  s4    = 	0 	0C**3////	0 	0r6   r   c                    ddl m}m} t                      }t	          | j                  D ]S\  }}|                    |          x}| j        |<   |                    |           |                    |j	                   T| j
                            |          }t          |          dk    rt          t          |                    j        rH|                    d|| j
        g          }	|	s(|                    |                                |          }n(|                    |                                |          }|j        s2|j        s+|s|j        s|j	        j        r|                    |          }n|                    |          }|j        r ||          n|| _
        g | _        i }
g | _        | j        D ]}|j	        j        o|                    d|| j
        g          }| j                            |           |j	        |
vra|j	        |j	        k    rQ || j
                  }|s|                    |j	        |          }| j                            |           ||
|j	        <   g | _        | j        D ]E}|
                    |j	        | j
                  }| j                             ||                     F| S )Nr   )r`  rF  rG  )r  r`  rF  r   r  ru  rx   rJ  r   r]  r&  rv   rG   nextiterr  lookup_operatorr  ro  r   r   r$  ro  rR  rS  r  r  assignment_overloadsr  r  r'  )r   r   rT  r`  rF  	lhs_typesr  r  r&  rV  r  
overloadeds               r4   rv   z$CascadedAssignmentNode.analyse_types  s   33333333 EE	.. 	$ 	$FAs%(%=%=c%B%BBC$-"$$S)))MM#(####h$$S))y>>QDOO$$1 :((sDHo>> >--	==CmmIMMOOS99{ 	,3> 	,	,,	,030D	,$$S))CC&&s++C%([999S>>>c !$&!= 	/ 	/C.\33F3FsSRVRZO3\3\J%,,Z888x~--#(ch2F2Fi))! 7--#66C#**3///+.sx(  = 	6 	6C $$SXtx88C%%iinn5555r6   c                 :    | j                             |           d S r   r  r   s     r4   r0  z3CascadedAssignmentNode.generate_rhs_evaluation_codeB  r  r6   Fc                    | j         D ]}|                    |           t          | j        | j        | j                  D ]3\  }}}|                    |           |                    |||           4| j         D ],}|                    |           |                    |           -| j	                            |           | j	                            |           d S )N)r<  )
r  r-  r+  ru  r  r  r=  rk  r:  r&  )r   rU   r<  r&  r  overload	rhs_values          r4   r=  z/CascadedAssignmentNode.generate_assignment_codeE  s    & 	/ 	/C((...."%dmT5GIb"c"c 	T 	TCh((...((d((SSSS, 	' 	'I,,T222  &&&&''---D!!!!!r6   c                 <    | j                             ||           d S r   r  r(  s      r4   r   z4CascadedAssignmentNode.generate_function_definitionsT  r  r6   c                    | j         D ]}|                    |           t          | j        | j                  D ]/\  }}|                    |           |                    |           0| j                            |           d S r   )r  r   r+  ru  r  r&  )r   rU   r&  r  s       r4   r   zCascadedAssignmentNode.annotateW  s    & 	 	CLLDM4+=>> 	 	HCLLLL$r6   r  rM  )rK   rp   rq   r   r  r  r  r+  r   rv   r0  r=  r   r   r\   r6   r4   r  r    s         IHHKMN> > >
0 0 0/ / / /b0 0 0" " " ": : :         r6   r  c                   2    e Zd ZdgZd Zd Zd Zd Zd ZdS )r-  r  c                 D    | j         D ]}|                    |           d S r   r  r  s      r4   r   z+ParallelAssignmentNode.analyse_declarationsp  s4    J 	+ 	+D%%c****	+ 	+r6   c                 v    fd| j         D             | _         | j         D ]}|                    |           | S )Nc                 >    g | ]}|                     d           S )r   )rT  )rv   r  s     r4   r   z>ParallelAssignmentNode.analyse_expressions.<locals>.<listcomp>u  s<     . . . ((q(99 . . .r6   )r  r+  r  s    ` r4   rw   z*ParallelAssignmentNode.analyse_expressionst  s^    . . . ."&*. . .
 J 	/ 	/D((....r6   c                     |                     | j                   | j        D ]}|                    |           | j        D ]}|                    |           d S r   )r  r3   r  r0  r=  r   s      r4   r   z.ParallelAssignmentNode.generate_execution_code  sp    dhJ 	4 	4D--d3333J 	0 	0D))$////	0 	0r6   c                 F    | j         D ]}|                    ||           d S r   r  r  s       r4   r   z4ParallelAssignmentNode.generate_function_definitions  s6    J 	: 	:D..sD9999	: 	:r6   c                 D    | j         D ]}|                    |           d S r   r"  r   s      r4   r   zParallelAssignmentNode.annotate  r#  r6   N	rK   rp   rq   r   r   rw   r   r   r   r\   r6   r4   r-  r-  `  sh         )K+ + +  0 0 0: : :         r6   r-  c                   4    e Zd ZddgZd Zd Zd Zd Zd ZdS )	InPlaceAssignmentNoder  r&  c                 :    | j                             |           d S r   r  r[  r   s     r4   r   z*InPlaceAssignmentNode.analyse_declarations      ++C00000r6   c                    | j                             |          | _         | j                            |          | _        | j        j        s| j        j        r+| j                             | j        j        |          | _         nD| j        j        j        r3| j	        dv r*| j                             t          j        |          | _         | S )Nz+-)r&  rv   r  rx   is_memview_indexis_buffer_accessr  r]  	is_stringr\  r   rs  r   s     r4   rv   z#InPlaceAssignmentNode.analyse_types  s    8))#..80055 8$ 	M(A 	Mx))$(-==DHHX]$ 	M$)>)>x))**FLLDHr6   c                 b   |                     | j                   | j        | j        }}|                    |           |                    |           | j        }|dk    rd}n|dk    rt          | j        d           |j        s|j	        rp|j
        j        rt          | j        d           |dv r3|j
        j        r'|j        j        d         st          | j        d           |                    |||           n_|j        rt          | j        d	           nB|                    |                                d
|d|                                d           |                    |           |                    |           |                    |           |                    |           d S )Nz///z**zNo C inplace power operatorzAIn-place operators not allowed on object buffers in this release.)r  %	cdivisionz;In-place non-c divide operators not allowed on int buffers.z4Inplace operators not supported on memoryview slicesrC   z= r5  )r  r3   r  r&  r-   generate_subexpr_evaluation_coder\  r   r  r  r]  ro  r  r   r   generate_buffer_setitem_codeis_memview_slicerP   r   generate_subexpr_disposal_codefree_subexpr_tempsrk  r:  )r   rU   r  r&  c_ops        r4   r   z-InPlaceAssignmentNode.generate_execution_code  s   dh8TXS$$T***,,T222}4<<DDT\\$(9::: 	J3#7 	Jx# edh cdddz!!cho!d>N>YZe>f!dh ]^^^,,S$====! 	J$(RSSSS JJszz||||TTT3::<<<<HIII**4000t$$$""4(((tr6   c                 n    | j                             |           | j                            |           d S r   r  r   s     r4   r   zInPlaceAssignmentNode.annotate  r  r6   c                 f    ddl m} |                    | j        | j        | j        | j                  S r  )r   r  
binop_noder3   r\  r  r&  rV  s     r4   create_binop_nodez'InPlaceAssignmentNode.create_binop_node  s6    ##DHdmTXtxPPPr6   N)	rK   rp   rq   r   r   rv   r   r   r  r\   r6   r4   r  r    so        $ %.K1 1 1
 
 
  6     Q Q Q Q Qr6   r  c                   @    e Zd ZddgZd Zej        ZdZd Z	d Z
d ZdS )	PrintStatNode	arg_tuplerN   c                    | j         r4| j                             |          }|                    |          | _         | j                            |          }|                    |          | _        |                    t
                     t          | j        j                  dk    r!| j        r|                    t                     | S )Nr   )
rN   rw   coerce_to_pyobjectr  ry  printing_utility_coderG   rR   append_newlineprinting_one_utility_code)r   r   rN   r  s       r4   rw   z!PrintStatNode.analyse_expressions  s    ; 	9[44S99F 33C88DKN66s;;	"55c::2333t~"##q((T-@(  !:;;;r6   zPython print statementc           
         |                     | j                   | j        r4| j                            |           | j                                        }nd}t          | j        j                  dk    r| j        r| j        j        d         }|                    |           |	                    d|d|                                d|
                    | j                             |                    |           |                    |           n| j                            |           |	                    d|| j                                        | j        |
                    | j                  fz             | j                            |           | j                            |           | j        r6| j                            |           | j                            |           d S d S )Nr  r   r   zif (__Pyx_PrintOne(r   r  z#if (__Pyx_Print(%s, %s, %d) < 0) %s)r  r3   rN   r-  	py_resultrG   r  rR   r  rP   r  rk  r:  )r   rU   stream_resultr  s       r4   r   z%PrintStatNode.generate_execution_code  s   dh; 	 K00666 K1133MMMt~"##q((T-@(.%a(C((...JJJ!MMMMOOOOOODH---/0 0 0
 &&t,,,NN4    N33D999JJ5!N,,..'OODH--	9/ /0 0 0 N11$777N%%d+++; 	)K..t444K""4(((((	) 	)r6   c                     | j         r| j                             ||           | j                            ||           d S r   )rN   r   r  r(  s      r4   r   z+PrintStatNode.generate_function_definitions  sC    ; 	AK55c4@@@44S$?????r6   c                 |    | j         r| j                             |           | j                            |           d S r   )rN   r   r  r   s     r4   r   zPrintStatNode.annotate  s>    ; 	'K  &&&%%%%%r6   N)rK   rp   rq   r   rw   r   r   r   r   r   r   r   r\   r6   r4   r  r    sn         )K	 	 	 .K*K) ) )B@ @ @
& & & & &r6   r  c                   8    e Zd ZdgZd Zej        ZdZd Z	d Z
dS )ExecStatNoderR   c                     t          | j                  D ]9\  }}|                    |          }|                    |          }|| j        |<   :|                    t
          j                   | S r   )r  rR   rw   r  ry  r   pyexec_utility_coder   r   r  r  s       r4   rw   z ExecStatNode.analyse_expressions#  sn    	** 	 	FAs))#..C((--CDIaLLW8999r6   zPython exec statementc           	      
   |                     | j                   g }| j        D ]>}|                    |           |                    |                                           ?t          |ddgd dt          |          z
           z             }|j        	                    t          j        d          }|                    d|f|z   z             | j        D ],}|                    |           |                    |           -|                    |                    || j                             |                    |t                     |                    |t                     |j                            |           d S )Nr  r,   Tr  z%s = __Pyx_PyExec3(%s, %s, %s);)r  r3   rR   r-  r  r  r  rG   r  r  r   r   rP   rk  r:  r  r  r  r  )r   rU   rR   r  temp_results        r4   r   z$ExecStatNode.generate_execution_code.  sn   dh9 	) 	)C((...KK((((TS#J|#d))|4455n22:3LY]2^^

48MNOOO9 	! 	!C&&t,,,NN4    

##K::	< 	< 	<^444k>:::##K00000r6   c                 D    | j         D ]}|                    |           d S r   rR   r   r  s      r4   r   zExecStatNode.annotate@  2    9 	 	CLL	 	r6   N)rK   rp   rq   r   rw   r   r   r   r   r   r   r\   r6   r4   r  r    sX        
 (K   .K)K1 1 1$    r6   r  c                   :    e Zd ZdgZdZd Zd Zd ZdZd Z	d Z
d	S )
DelStatNoderR   Fc                 D    | j         D ]}|                    |           d S r   )rR   r[  r5  s      r4   r   z DelStatNode.analyse_declarationsM  s4    9 	0 	0C**3////	0 	0r6   c                    t          | j                  D ]\  }}|                    |d           x}| j        |<   |j        j        s|j        r5|j        j        r)|j        r!|j        j        rt          |j
        d           m|j        j        r'|j        j        j        r|                     |           |j        j        rt          |j
        d           |j        r|j        j        t"          j        u rt          |j
        d           | S )NzDeletion of global C variablezDeletion of non-heap C++ objectz&Deletion of non-Python, non-C++ object)r  rR   rf  r]  ro  r   r  r  
is_cglobalr   r3   rU  r^  r  r   r  rf  r   bytearray_typer  s       r4   rw   zDelStatNode.analyse_expressionsQ  s#   	** 	I 	IFAs!$!>!>sD!I!IIC$)A,x# 
I 
I8S 
I; D39#7 D#'#BCCC ISX%7%D Is####& Icg@AAAA! Ichmw7M&M&McgGHHHHr6   c                 Z    | j         D ]"}|j        j        r|                                  #d S r   )rR   r]  ro  r   r5  s      r4   r   zDelStatNode.nogil_checkb  s;    9 	! 	!Cx# !   	! 	!r6   zDeleting Python objectc                    |                     | j                   | j        D ]}|j        j        s+|j        j        s|j        r5|j        j        t          j	        u r|
                    || j                   V|j        j        rz|j        j        j        ri|                    |           |                    d|                                z             |                    |           |                    |           d S )N)ignore_nonexistingz
delete %s;)r  r3   rR   r]  ro  r  r  rf  r   r  generate_deletion_coder  rU  r^  r  r-  rP   r   rk  r:  r  s      r4   r   z#DelStatNode.generate_execution_codei  s   dh9 
	% 
	%C$ 	%H/	%$	%),':P)P)P**T-D + F F F F %SX%7%D %,,T222

<#**,,6777**4000t$$$
	% 
	%r6   c                 D    | j         D ]}|                    |           d S r   r  r  s      r4   r   zDelStatNode.annotatex  r  r6   N)rK   rp   rq   r   r  r   rw   r   r   r   r   r\   r6   r4   r  r  E  su        
 (K0 0 0  "! ! !
 +K% % %    r6   r  c                       e Zd Zg Zd Zd ZdS )r  c                     | S r   r\   r   s     r4   rw   z PassStatNode.analyse_expressions  r  r6   c                     d S r   r\   r   s     r4   r   z$PassStatNode.generate_execution_code  r   r6   N)rK   rp   rq   r   rw   r   r\   r6   r4   r  r  }  s9         K      r6   r  c                   "     e Zd ZdZ fdZ xZS )IndirectionNodez
    This adds an indirection so that the node can be shared and a subtree can
    be removed at any time by clearing self.stats.
    c                 r    t          t          |                               |d         j        |           d S )Nr   r  )rh   r  r   r3   )r   r  rJ   s     r4   r   zIndirectionNode.__init__  s2    ot$$--eAhl%-HHHHHr6   )rK   rp   rq   r   r   rr   rs   s   @r4   r  r    sK         
I I I I I I I I Ir6   r  c                   "    e Zd Zg ZdZd Zd ZdS )BreakStatNodeTc                     | S r   r\   r   s     r4   rw   z!BreakStatNode.analyse_expressions  r  r6   c                     |                     | j                   |j        st          | j        d           d S |                    |j                   d S )Nzbreak statement not inside loop)r  r3   break_labelr   r  r   s     r4   r   z%BreakStatNode.generate_execution_code  sU    dh 	,$(=>>>>>MM$*+++++r6   NrK   rp   rq   r   r   rw   r   r\   r6   r4   r  r    s<        KM  , , , , ,r6   r  c                   "    e Zd Zg ZdZd Zd ZdS )ContinueStatNodeTc                     | S r   r\   r   s     r4   rw   z$ContinueStatNode.analyse_expressions  r  r6   c                     |j         st          | j        d           d S |                    | j                   |                    |j                    d S )Nz"continue statement not inside loop)continue_labelr   r3   r  r  r   s     r4   r   z(ContinueStatNode.generate_execution_code  sT    " 	$(@AAAFdhd)*****r6   Nr  r\   r6   r4   r  r    s<        KM  + + + + +r6   r  c                   L    e Zd ZdgZdZdZdZdZd Zd Z	dZ
d Zd Zd	 Zd
 ZdS )rQ  r   TFc                    |j         }|| _         |st          | j        d           | S | j        r| j        rt          | j        d           | j                            |          | _        |j        s|j        rt          | j        j        d           nP| j                            |j         |          | _        n*|j        s#|j	        s|j        st          | j        d           | S )Nz!Return not inside a function bodyz$Return with value in async generatorz"Return with value in void functionzReturn value required)
r  r   r3   r   in_async_genrv   rX  r  r  ro  )r   r   r  s      r4   rw   z"ReturnStatNode.analyse_expressions  s    o& 	$(?@@@K: 	9  Hdh FGGG11#66DJ" Hk&? Hdjn&JKKKK!Z11#/3GG

' 9'39'59 dh 7888r6   c                 J    | j         j        r|                                  d S d S r   )r  ro  r   r   s     r4   r   zReturnStatNode.nogil_check  s0    ' 	NN	 	r6   zReturning Python objectc                    |                     | j                   | j        sd S | j        }| j        j        r0|                    t          j        | j                   |r	|j        rd }|ro|	                    |           | j        j
        rPddlm} |                    t          j        | j        |j        ||| j                   |                    |           n| j        rz|j                            t'          j        dd                     |                    t          j        d|                                d           |                    |           ng|                    |           |                    t          j        d|                    | j                  d	           |                    |           |                    |           n| j        j        r| j        rl| j        rB|j                            t'          j        d
d                     |                    d           |                    dt          j        z             nR|                    t          j        | j                   n,| j        j        r |                     || j        j                    |j!        "                                D ]\  }}|#                    ||           |$                    |j%                   d S )Nr   rl  )	lhs_cnamelhs_typelhs_posr&  rU   ra  ReturnWithStopIterationr  z' = NULL; __Pyx_ReturnWithStopIteration(r^  r4  r5  r  z/PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration); z
%s = NULL;)&r  r3   r  r   ro  r  r
   r  r   r-  r  r   rm  put_acquire_memoryviewslicer   r9  in_generatorr   ry  r   r  rP   r  rk  r6  r7  r:  r  r  r  r  
put_returnr  r  temps_holding_referencer  r  r  )r   rU   r   rm  r  r]  s         r4   r   z&ReturnStatNode.generate_execution_code  s-   dh 	F
' 	V0$2BCCC   &	F**40002 :((((((66$1!-!I!2 7 4 4 4 33D9999" : 11+,E}UUW W W

'''OO%%%%' ( ( ( ,,T2222**4000

'''OOD$455557 8 8 8 33D999T""""+ 
F$ T( T(99'34H-XXZ Z Z!RSSSJJ|f.AABBBB,,V-@$BRSSSS!/ Fd&6&DEEE>AACC 	/ 	/KE4!!%....d'(((((r6   c                     | j         r|                    d           |                    t          j        d|d           d S )Nz%#pragma omp critical(__pyx_returning)r4  r5  )in_parallelputln_openmprP   r
   r  )r   rU   r   s      r4   r  zReturnStatNode.put_return  sM     	GEFFF

!4!4!4eee<=====r6   c                 N    | j         | j                             ||           d S d S r   )r   r   r(  s      r4   r   z,ReturnStatNode.generate_function_definitions  s0    :!J44S$????? "!r6   c                 L    | j         r| j                             |           d S d S r   )r   r   r   s     r4   r   zReturnStatNode.annotate!  s2    : 	&J%%%%%	& 	&r6   N)rK   rp   rq   r   r   r  r  r  rw   r   r   r   r  r   r   r\   r6   r4   rQ  rQ    s         )KMLL K  *   ,K8) 8) 8)t> > >
@ @ @& & & & &r6   rQ  c                   P    e Zd Zg dZdZdZdZdZd Ze	j
        ZdZd Zd Zd	 ZdS )
RaiseStatNode)exc_type	exc_valueexc_tbcauseTNFc                 N   | j         r4| j                             |          }|                    |          | _         | j        r| j                            |          }| j        rc|j        t          j        u s|j        j        sDddl	m
}  ||j        |                    |          gd          }|                    |d          }|                    |          | _        | j        r4| j                            |          }|                    |          | _        | j        r4| j                            |          }|                    |          | _        | j         r| j        s| j        s| j         }ddlm	} t          ||j                  r!|j        s|j        |j        j        s|j        }|j        ro|j        j        rcddlm}	 |j        | _        | j        dk    rd | _         n>| j        d	k    r3|j        r,|j        d
k    r!|j        r|j        j        r| j        sd | _         | S )Nr   r  T)rR   slow)skip_childrenrF  )SymtabMemoryErrorStopIteration__next__)r  rv   r  r  wrap_tuple_valuer]  r   
tuple_typer  r  r  r3   r  r  r   rH   rP  rR   r  rM  r   r  
is_builtinr  rk   builtin_exc_nameis_local_scoper@  r  in_try_block)
r   r   r  r  r  r  r  excr  r  s
             r4   rw   z!RaiseStatNode.analyse_expressions7  s^   = 	=}22377H$77<<DM> 	?44S99I$ Q>W%777y~?]7444444 )	)-y?[?[\_?`?`>ahl m m mI ) 7 74 7 P PI&99#>>DN; 	9[..s33F 33C88DK: 	7J,,S11E11#66DJ= 	) 	) 	)-C######3	 899 ##&)m&?CMDV&?l{ )sy3 )$$$$$$(+%(M99$(DMM+>>* ?/2x:/E/E( 0F-0-=-N 0F - 0F %)DMr6   Raising exceptionc                 D   |                     | j                   | j        dk    r2|                    d|                    | j                  z             d S | j        dk    rb| j        s[|                    dt          j        z             |                    d|                    d           z             d|j        _	        d S | j        rd| j        
                    |           | j                                        }| j        j        r$|j                            | j        j                   nd}| j        r4| j        
                    |           | j                                        }nd}| j        r4| j        
                    |           | j                                        }nd}| j        r4| j        
                    |           | j                                        }nd}|j                            t(                     |                    d|d	|d	|d	|d
	           | j        | j        | j        | j        fD ].}|r*|                    |           |                    |           /|                    |                    | j                             d S )Nr  zPyErr_NoMemory(); %sr  z%s = 1;r  Tr  z__Pyx_Raise(r   r^  )r  r3   r  rP   r  r  r
   r  r  r  r-  r  r   r   use_entry_utility_coder  r  r  r  ry  raise_utility_coderk  r:  )r   rU   	type_code
value_codetb_code
cause_coder   s          r4   r   z%RaiseStatNode.generate_execution_coded  s   dh M11JJ-0I0IIJJJF"o55dm5JJy6#GGHHHJJutt44455559DN2F= 	M224888//11I}$ M 778KLLLI> 	N33D9991133JJJ; 	K00666k++--GGG: 	J//555--//JJJ))*<===


		



		 	 	 M4>4;
K 	% 	%C %**4000t$$$

OODH%%	' 	' 	' 	' 	'r6   c                    | j         | j                             ||           | j        | j                            ||           | j        | j                            ||           | j        | j                            ||           d S d S r   )r  r   r  r  r  r(  s      r4   r   z+RaiseStatNode.generate_function_definitions  s    =$M77TBBB>%N88dCCC;"K55c4@@@:!J44S$????? "!r6   c                    | j         r| j                             |           | j        r| j                            |           | j        r| j                            |           | j        r| j                            |           d S d S r   )r  r   r  r  r  r   s     r4   r   zRaiseStatNode.annotate  s    = 	)M""4(((> 	*N##D))); 	'K  &&&: 	&J%%%%%	& 	&r6   )rK   rp   rq   r   r   r  r  r  rw   r   r   r   r   r   r   r   r\   r6   r4   r  r  &  s         ?>>KML( ( (T .K%K-' -' -'^@ @ @& & & & &r6   r  c                   4    e Zd Zg ZdZd Zej        ZdZ	d Z
dS )ReraiseStatNodeTc                     | S r   r\   r   s     r4   rw   z#ReraiseStatNode.analyse_expressions  r  r6   r  c                     |                     | j                   |j        j        }|r|j                            t                     |                    |d         t                     |                    |d         t                     |	                    |d         t                     |
                    dt          |          z             |D ]}|                    d|z             |
                                 |
                    |                    | j                             d S |j                            t          j        dd                     |
                    d|                    | j                  z             d S )	Nr   r   r)   &__Pyx_ErrRestoreWithState(%s, %s, %s);z%s = 0; ReRaiseExceptionExceptions.cz__Pyx_ReraiseException(); %s)r  r3   r  exc_varsr   ry  r  r8  r   r  rP   r  r  r  r   r  )r   rU   r@  varnames       r4   r   z'ReraiseStatNode.generate_execution_code  sd   dh~& 	S--.LMMMT!Wn555T!Wn555d1g~666JJ?%++MNNN / /g-....JJLLLJJttx0011111--'(:NKKM M MJJ58Q8QQRRRRRr6   N)rK   rp   rq   r   r   rw   r   r   r   r   r   r\   r6   r4   r!  r!    sO        KM   .K%KS S S S Sr6   r!  c                   8    e Zd Zg dZdZd Zd Zd Zd Zd Z	dS )AssertStatNode)	conditionr   	exceptionNc                 ~    | j         
J d            | j        
J d            | j                            |           d S )Nz0Message should have been replaced in PostParse())r   r,  r   r   s     r4   r   z#AssertStatNode.analyse_declarations  sL    z!!#U!!!~))+])))++C00000r6   c                     | j                             |          | _         | j                            |          | _        | S r   )r+  analyse_temp_boolean_expressionr,  rw   r   s     r4   rw   z"AssertStatNode.analyse_expressions  s5    GGLL;;C@@r6   c                 "   |j                             t          j        dd                     |                    d           |                    d           |                    | j                   | j                            |           |                    d| j        	                                z             | j
                            |           |                    d           | j                            |           | j                            |           |                    d           |                    d           |                    d|                    | j        d	
          z             |                    d           d S )NAssertionsEnabledr&  z!#ifndef CYTHON_WITHOUT_ASSERTIONSz+if (unlikely(__pyx_assertions_enabled())) {rZ  r]  rU  zif ((1)); else %sFrU  r  )r   ry  r   r  rP   r  r3   r+  r-  r   r,  r   rk  r:  r  r   s     r4   r   z&AssertStatNode.generate_execution_code  su   ))#$7HH	J 	J 	J

6777

@AAAdh//555

"T^%:%:%<%<<	> 	> 	>..t444

	 	 	--d333!!$'''

	 	 	

7

&)N)NNOOO

8r6   c                 r    | j                             ||           | j                            ||           d S r   )r+  r   r,  r(  s      r4   r   z,AssertStatNode.generate_function_definitions  s8    44S$???44S$?????r6   c                 n    | j                             |           | j                            |           d S r   )r+  r   r,  r   s     r4   r   zAssertStatNode.annotate  s4    %%%%%%%%r6   )
rK   rp   rq   r   r,  r   rw   r   r   r   r\   r6   r4   r*  r*    st         655KI1 1 1
  
  *@ @ @& & & & &r6   r*  c                   4    e Zd ZddgZd Zd Zd Zd Zd ZdS )	
IfStatNode
if_clauseselse_clausec                     | j         D ]}|                    |           | j        r| j                            |           d S d S r   )r6  r   r7  )r   r   	if_clauses      r4   r   zIfStatNode.analyse_declarations  s\     	0 	0I**3//// 	711#66666	7 	7r6   c                     fd| j         D             | _         | j        r| j                                      | _        | S )Nc                 :    g | ]}|                               S r\   r  )r   r9  r   s     r4   r   z2IfStatNode.analyse_expressions.<locals>.<listcomp>  s'    ___)988==___r6   )r6  r7  rw   r   s    `r4   rw   zIfStatNode.analyse_expressions  sJ    ____t___ 	I#/CCCHHDr6   c                    |                     | j                   |                                }t          | j                  }| j        s|dz  }t          | j                  D ]!\  }}|                    ||||k               "| j        rc|                     | j        j                   |                    d           | j                            |           |                    d           |	                    |           d S )Nr   )is_last
/*else*/ {r]  )
r  r3   r  rG   r6  r7  r  r   rP   r  )r   rU   rb  lastr  r9  s         r4   r   z"IfStatNode.generate_execution_code  s    dhNN$$	4?## 	AID%do66 	R 	RLAy--dIqDy-QQQQ 	MM$*.///JJ|$$$44T:::JJsOOOy!!!!!r6   c                     | j         D ]}|                    ||           | j        | j                            ||           d S d S r   )r6  r   r7  )r   r   rU   clauses       r4   r   z(IfStatNode.generate_function_definitions  s\    o 	< 	<F00d;;;;'::3EEEEE ('r6   c                     | j         D ]}|                    |           | j        r| j                            |           d S d S r   )r6  r   r7  )r   rU   r9  s      r4   r   zIfStatNode.annotate"  s\     	% 	%It$$$$ 	,%%d+++++	, 	,r6   Nr  r\   r6   r4   r5  r5    sn          /K7 7 7  " " "F F F, , , , ,r6   r5  c                   8    e Zd ZddgZdZd Zd Zd Zd Zd Z	dS )	IfClauseNoder+  r   Nc                 :    | j                             |           d S r   )r   r   r   s     r4   r   z!IfClauseNode.analyse_declarations2  s    	&&s+++++r6   c                     | j                             |          | _         | j                            |          | _        | S r   )r+  r/  r   rw   r   s     r4   rw   z IfClauseNode.analyse_expressions5  s5    GGLLI11#66	r6   c                 <   | j                             |           |                    | j                   | j                                         }| j        r| j        d|d}|                    d|z             | j                             |           | j                             |           | j	        
                    |           |                    | j        d           |s!| j	        j        s|                    |           |                    d           d S )NrX  rW  rv  Frb  r]  )r+  r-  r  r3   r   branch_hintrP   rk  r:  r   r   r   r  )r   rU   rb  r=  r+  s        r4   r   z$IfClauseNode.generate_execution_code:  s   //555dhN))++	 	A$($4$4$4iii@I

;*+++--d333!!$'''	))$///dhe,,, 	%492 	%MM)$$$

3r6   c                 r    | j                             ||           | j                            ||           d S r   )r+  r   r   r(  s      r4   r   z*IfClauseNode.generate_function_definitionsI  s8    44S$???	//T:::::r6   c                 n    | j                             |           | j                            |           d S r   )r+  r   r   r   s     r4   r   zIfClauseNode.annotateM  s4    %%%	4     r6   )
rK   rp   rq   r   rH  r   rw   r   r   r   r\   r6   r4   rD  rD  )  sp         'KK, , ,  
  ; ; ;! ! ! ! !r6   rD  c                   .    e Zd ZddgZd Zd Zd Zd ZdS )SwitchCaseNode
conditionsr   c                 D    | j         D ]}|                    |           d S r   )rM  r-  r   rU   r  s      r4   "generate_condition_evaluation_codez1SwitchCaseNode.generate_condition_evaluation_codeZ  s4    O 	0 	0D))$////	0 	0r6   c                    t          | j                  }|j        j        d         }t	          | j        d          D ]f\  }}|                    d|                                z             |                    |j                   |r||k     r|                    d           g| j	        
                    |           |                    | j        d           |                    d           d S )NrO  r   zcase %s:r  Frb  r  )rG   rM  r   r   r  rP   r   r  r3   r   r   )r   rU   num_conditionsline_tracing_enabledr  r  s         r4   r   z&SwitchCaseNode.generate_execution_code^  s    T_--#/:;G !44 	2 	2GAtJJzDKKMM1222MM$(#### 2N(:(:

0111	))$///dhe,,,

8r6   c                 |    | j         D ]}|                    ||           | j                            ||           d S r   )rM  r   r   )r   r   rU   r  s       r4   r   z,SwitchCaseNode.generate_function_definitionsk  sJ    O 	: 	:D..sD9999	//T:::::r6   c                 x    | j         D ]}|                    |           | j                            |           d S r   )rM  r   r   rO  s      r4   r   zSwitchCaseNode.annotatep  sD    O 	  	 DMM$	4     r6   N)rK   rp   rq   r   rP  r   r   r   r\   r6   r4   rL  rL  R  s\          (K0 0 0  ; ; ;
! ! ! ! !r6   rL  c                   (    e Zd Zg dZd Zd Zd ZdS )SwitchStatNode)testcasesr7  c                    | j                             |           | j        D ]}|                    |           |                    | j                   |                    d| j                                         z             | j        D ]}|                    |           | j	        E|                    d           | j	                            |           |                    d           n|                    d           |                    d           | j         
                    |           | j                             |           d S )Nr  r  r  zdefault: break;r]  )rX  r-  rY  rP  r  r3   rP   r   r   r7  rk  r:  r   rU   cases      r4   r   z&SwitchStatNode.generate_execution_code  s@   	**4000 J 	: 	:D33D9999dh

?TY%5%5%7%77888J 	/ 	/D((....'JJz"""44T:::JJx    
 JJ()))

3	((...	T"""""r6   c                     | j                             ||           | j        D ]}|                    ||           | j        | j                            ||           d S d S r   )rX  r   rY  r7  )r   r   rU   r\  s       r4   r   z,SwitchStatNode.generate_function_definitions  st    	//T:::J 	: 	:D..sD9999'::3EEEEE ('r6   c                     | j                             |           | j        D ]}|                    |           | j        | j                            |           d S d S r   )rX  r   rY  r7  r[  s      r4   r   zSwitchStatNode.annotate  sl    	4   J 	  	 DMM$'%%d+++++ ('r6   N)rK   rp   rq   r   r   r   r   r\   r6   r4   rW  rW  v  sQ         322K# # #.F F F, , , , ,r6   rW  c                       e Zd ZdS )LoopNodeNr3  r\   r6   r4   r`  r`    r4  r6   r`  c                   4    e Zd Zg dZd Zd Zd Zd Zd ZdS )WhileStatNode)r+  r   r7  c                     | j                             |           | j        r| j                            |           d S d S r   )r   r   r7  r   s     r4   r   z"WhileStatNode.analyse_declarations  sJ    	&&s+++ 	711#66666	7 	7r6   c                     | j         r| j                             |          | _         | j                            |          | _        | j        r| j                            |          | _        | S r   )r+  r/  r   rw   r7  r   s     r4   rw   z!WhileStatNode.analyse_expressions  se    > 	Q!^KKCPPDNI11#66	 	I#/CCCHHDr6   c                 \   |                     | j                   |                                }|                    d           | j        r}| j                            |           | j                            |           |                    d| j                                        z             | j                            |           | j	        
                    |           |                    |j                   |                    d           |j        }|                    |           | j        rc|                     | j        j                   |                    d           | j        
                    |           |                    d           |                    |           d S )Nzwhile (1) {zif (!%s) break;r]  r>  )r  r3   new_loop_labelsrP   r+  r-  rk  r   r:  r   r   r  r  r  set_loop_labelsr7  )r   rU   old_loop_labelsr  s       r4   r   z%WhileStatNode.generate_execution_code  s   dh..00

	 	 	> 	,N33D999N11$777JJ!DN$9$9$;$;;= = =N%%d+++	))$///t*+++

3&_--- 	MM$*.///JJ|$$$44T:::JJsOOO{#####r6   c                     | j         r| j                             ||           | j                            ||           | j        | j                            ||           d S d S r   )r+  r   r   r7  r(  s      r4   r   z+WhileStatNode.generate_function_definitions  sm    > 	DN88dCCC	//T:::'::3EEEEE ('r6   c                     | j         r| j                             |           | j                            |           | j        r| j                            |           d S d S r   )r+  r   r   r7  r   s     r4   r   zWhileStatNode.annotate  sj    > 	*N##D)))	4    	,%%d+++++	, 	,r6   Nr  r\   r6   r4   rb  rb    so         766K7 7 7
  $ $ $.F F F, , , , ,r6   rb  c                   F    e Zd Zg dZdxZZdxZZdxZZ	d Z
d Zd Zd ZdS )DictIterationNextNode)
dict_objexpected_sizepos_index_varcoerced_key_varcoerced_value_varcoerced_tuple_var
key_targetvalue_targettuple_targetis_dict_flagNc                 n    t                               | |j        |||||||dt          j                   d S )NT)	rm  rn  ro  rs  rt  ru  rv  r  r]  r   r   r3   r   c_bint_type)r   rm  rn  ro  rs  rt  ru  rv  s           r4   r   zDictIterationNextNode.__init__  sL    (,''!%%%' 	 
	) 
	) 
	) 
	) 
	)r6   c                    ddl m} | j                            |          | _        | j                            |          | _        | j        r| j                            |          | _        | j        rx| j                            |          | _        |                    | j        j	        t          j                  | _        | j                            | j        j        |          | _        | j        ry| j                            |          | _        |                    | j        j	        t          j                  | _        | j                            | j        j        |          | _        | j        rx| j                            |          | _        |                    | j        j	        t          j                  | _        | j                            | j        j        |          | _        | j                            |          | _        | S Nr   rF  rL  )r   r  rm  rv   rn  ro  rs  rx   TempNoder3   r   r   key_refr  r]  rp  rt  	value_refrq  ru  	tuple_refrr  rv  r   r   r  s      r4   rw   z)DictIterationNextNode.analyse_expressions  s   33C88!/==cBB 	G!%!3!A!A#!F!FD? 	U"oBB3GGDO$--do.A:C\]]DL#'<#9#9$/:NPS#T#TD  	[ $ 1 F Fs K KD&//0A0EJLe/ffDN%)^%=%=d>O>TVY%Z%ZD" 	[ $ 1 F Fs K KD&//0A0EzG`aaDN%)^%=%=d>O>TVY%Z%ZD" -;;C@@r6   c                 <    | j                             ||           d S r   )rm  r   r(  s      r4   r   z3DictIterationNextNode.generate_function_definitions  s     33C>>>>>r6   c                    |j                             t          j        dd                     | j                            |           g }g }| j        | j        | j        f| j	        | j
        | j        f| j        | j        | j        ffD ]d\  }}}|d}nD|                    |||f           |                    |           d|                                z  }|                    |           e|j                            t(          j        d          }|                    |d| j                                        d| j                                        d| j                                        d|d	         d|d
         d|d         d| j                                        d           |                    d|z             |                    |                    d|z  | j                             |j                            |           |D ]\  }}}|                    |           |D ]\  }}}|                    |           |D ]1\  }}}|                    ||           |                     |           2d S )N	dict_iter
Optimize.cr  r|  Fz = __Pyx_dict_iter_next(r   r  r   r   r)   r^  if (unlikely(%s == 0)) break;%s == -1)!r   ry  r   r  rm  r-  r}  rp  rs  r~  rq  rt  r  rr  ru  r  allocater   r  r  r   r  rP   r  rn  ro  rv  error_goto_ifr3   r  generate_gotrefr=  release)	r   rU   rw  temp_addressesr  r   r;  addrresult_temps	            r4   r   z-DictIterationNextNode.generate_execution_code  s   ))+*A+|*\*\]]]..t444%)\43G$Y%)^T5KTM^$_%)^T5KTM^$_$a 		( 		(C ~""C#8999T"""szz||+!!$''''n22:3H%PP

KKM##%%%%%%''''%%''''111$$&&&&	
 		 		 		 	

2[@AAA

4%%j;&>IIJJJ##K000 $/ 	& 	&C%%%%#. 	2 	2C++D1111#. 	 	C++FD999KK	 	r6   )rK   rp   rq   r   rp  r}  rq  r~  rr  r  r   rw   r   r   r\   r6   r4   rl  rl    s        Q Q QK !%$Og$((	$((	) ) )  *? ? ?' ' ' ' 'r6   rl  c                   6    e Zd Zg dZdxZZd Zd Zd Zd Z	dS )SetIterationNextNode)set_objrn  ro  rq  rt  is_set_flagNc                 j    t                               | |j        |||||dt          j        	  	         d S )NT)r  rn  ro  rt  r  r  r]  rx  )r   r  rn  ro  rt  r  s         r4   r   zSetIterationNextNode.__init__I  sF    '+''%#' 	 	) 	) 	) 	) 	)r6   c                    ddl m} | j                            |          | _        | j                            |          | _        | j                            |          | _        | j                            |          | _        |                    | j        j	        t          j                  | _        | j                            | j        j        |          | _        | j                            |          | _        | S r{  )r   r  r  rv   rn  ro  rt  rx   r|  r3   r   r   r~  r  r]  rq  r  r  s      r4   rw   z(SetIterationNextNode.analyse_expressionsT  s    |11#66!/==cBB!/==cBB -BB3GG"++D,=,A
Ha+bb!%!9!9$:K:PRU!V!V+99#>>r6   c                 <    | j                             ||           d S r   )r  r   r(  s      r4   r   z2SetIterationNextNode.generate_function_definitions_  s     223=====r6   c                    |j                             t          j        dd                     | j                            |           | j        }|                    |           |j        	                    t          j        d          }|                    |d| j                                        d| j                                        d| j                                        d|                                d| j                                        d           |                    d|z             |                    |                    d	|z  | j                             |j                            |           |                    |           | j                            |           | j                            | j        |           |                    |           d S )
Nset_iterr  Fz = __Pyx_set_iter_next(r   r  r^  r  r  )r   ry  r   r  r  r-  r~  r  r  r  r   r  rP   r  rn  r   ro  r  r  r3   r  r  rq  rt  r=  r  )r   rU   r~  r  s       r4   r   z,SetIterationNextNode.generate_execution_codeb  s   ))+*A*l*[*[\\\--d333N	4   n22:3H%PP

KKL""$$$$%%''''%%''''##%%%%
 	 	 	 	

2[@AAA

4%%j;&>IIJJJ##K000 	!!$'''77===2243I4PPP$r6   )
rK   rp   rq   r   rq  r~  r   rw   r   r   r\   r6   r4   r  r  A  sq        G G GK %)(		) 	) 	)	 	 	> > >         r6   r  c                 r    d|v r'|d         j         rt          | fi |S t          | fi |S t          | fi |S )Niterator)is_asyncAsyncForStatNodeForInStatNodeForFromStatNode)r3   r   s     r4   ForStatNoder  }  s^    Rj>" 	,#C..2... +++++s))b)))r6   c                   B    e Zd Zg dZdZdZd Zd Zd Zd Z	d Z
d	 ZdS )
_ForInStatNode)r;  r   r  r   r7  NFc                      t          d          )Nz!must be implemented by subclasses)NotImplementedErrorr   s    r4   _create_item_nodez _ForInStatNode._create_item_node  s    !"EFFFr6   c                     | j                             |           | j                            |           | j        r| j                            |           |                                  d S r   )r;  r[  r   r   r7  r  r   s     r4   r   z#_ForInStatNode.analyse_declarations  sh    ..s333	&&s+++ 	711#666     r6   c                 l   | j                             |          | _         | j                            |          | _        |                                  | j                            |          | _        | j        sL| j        j        j        s| j        j        j	        r*| j         j        
                    | j        j                  rn*| j                            | j         j        |          | _        | j                            |          | _        | j        r| j                            |          | _        | S r   )r;  rx   r  rw   r  r   r  r]  rU  rV  r  r  r   r7  r   s     r4   rw   z"_ForInStatNode.analyse_expressions  s   k66s;;99#>>   I11#66	 	C#*	C.2m.@.I	C 001CDD	C 	++DK,<cBBDII11#66	 	I#/CCCHHDr6   c                    |                     | j                   |                                }| j                            |           |                    d           | j                            |           | j                            | j        |           | j	        
                    |           |                     | j                   |                    |j                   |                    d           | j                            |           | j        r|                    d          nd }|                    d          }|                    |j        g|g|p|| j                  }|                     | j                   |D ]}| j                            |           |                    |           | j                            |           | j        rY|                    d           |                    |           | j        
                    |           |                    d           |                    |           d S )Nz
for (;;) {r]  for_elsefor_end)skip_to_labelr3   r>  )r  r3   rf  r  r-  rP   r   r;  r=  r   r   r  r  rk  r7  r  label_interceptorr  rg  r:  )r   rU   rh  
else_labelrb  label_interceptsr  s          r4   r   z&_ForInStatNode.generate_execution_code  s   dh..00..t444

<   	**4000,,TY===	))$///dht*+++

3 	,,T222373CMT^^J///
NN9--	11K$1		 2 
 
 	dh! 	7 	7AM006666_---  &&& 	JJ|$$$NN:&&&44T:::JJsOOOy!!!!!r6   c                     | j                             ||           | j                            ||           | j                            ||           | j        | j                            ||           d S d S r   )r;  r   r  r   r7  r(  s      r4   r   z,_ForInStatNode.generate_function_definitions  sz    11#t<<<33C>>>	//T:::'::3EEEEE ('r6   c                    | j                             |           | j                            |           | j                            |           | j        r| j                            |           | j                            |           d S r   )r;  r   r  r   r7  r   r   s     r4   r   z_ForInStatNode.annotate  s    T"""t$$$	4    	,%%d+++	4     r6   )rK   rp   rq   r   r   r  r  r   rw   r   r   r   r\   r6   r4   r  r    s         HGGKDHG G G! ! !  "%" %" %"NF F F! ! ! ! !r6   r  c                       e Zd ZdZd ZdS )r  Fc                 <    ddl m}  || j                  | _        d S )Nr   )NextNode)r  r  r  r   )r   r  s     r4   r  zForInStatNode._create_item_node  s+    ''''''HT]++			r6   N)rK   rp   rq   r  r  r\   r6   r4   r  r    s*         H, , , , ,r6   r  c                       e Zd ZdZd Zd ZdS )r  Tc                     d|vsJ ddl m} |                    |d         j        d           |d<   t	          j        | |fi | d S )Nr   r   rF  r  )r  )r   r  AwaitIterNextExprNoder3   r  r   )r   r3   r   r  s       r4   r   zAsyncForStatNode.__init__  si    R44R
^5GT4RR6
c00R00000r6   c                 Z    ddl m} |                    | j                  | j        _        d S r  )r   r  AsyncNextNoder  r   r  rV  s     r4   r  z"AsyncForStatNode._create_item_node   s1    !//>>	r6   N)rK   rp   rq   r  r   r  r\   r6   r4   r  r    s9         H1 1 1? ? ? ? ?r6   r  c                   b    e Zd Zg dZdZdZdZdZdZd Z	d Z
d Zd Zd	 Zd
ddddZd Zd ZdS )r  )r;  bound1bound2stepr   r7  FNz&For-loop using object bounds or targetc                 t    | j         | j        | j        fD ]"}|j        j        r|                                  #d S r   )r;  r  r  r]  ro  r   )r   r   r   s      r4   r   zForFromStatNode.nogil_check   sF    +t{DK8 	! 	!Av! !   	! 	!r6   c                     | j                             |           | j                            |           | j        r| j                            |           d S d S r   )r;  r[  r   r   r7  r   s     r4   r   z$ForFromStatNode.analyse_declarations%  s`    ..s333	&&s+++ 	711#66666	7 	7r6   c                    ddl m} | j                            |          | _        | j                            |          | _        | j                            |          | _        | j        Tt          | j        |j	                  rt          | j        j        dd           | j                            |          | _        |                     |           | j        j        }|j        s!|j        st!          | j        j        d           | j                            |          | _        | j        r| j                            |          | _        | S )Nr   rF  zdProbable infinite loop in for-from-by statement. Consider switching the directions of the relations.r)   z>for-from loop variable must be c numeric type or Python object)r   r  r;  rx   r  rv   r  r  rH   UnaryMinusNoder	   r3   set_up_loopr]  ro  r^  r   r   rw   r7  )r   r   r  r  s       r4   rw   z#ForFromStatNode.analyse_expressions+  s?   k66s;;k//44k//449 $)Y%=>> R	 (NOPR R R	//44DIk&' 	e;+A 	e$+/#cdddI11#66	 	I#/CCCHHDr6   c                    ddl m} | j        j        }|j        r|}n|j        rt          | j        j        d           |j        rt          j
        nt          j        }| j        j        j        st          j        || j        j                  }| j        j        j        st          j        || j        j                  }| j        0| j        j        j        st          j        || j        j                  }| j                            ||          | _        | j                            ||          | _        | j        j        s| j                            |          | _        | j        K| j                            ||          | _        | j        j        s| j                            |          | _        |j        s|j        rKd| _        t)          | j        |j                  rt-          | j        d          | j        | _        d | _        d S d| _        |                    | j        ||          }|| _        |                    |                              |          | _        d S )Nr   rF  zWInteger loops over enum values are fragile. Please cast to a safe integer type instead.FzEBuffer or memoryview slicing/indexing not allowed as for-loop target.T)r   r  r;  r]  r^  is_enumr	   r3   ro  r   r  r  r  widest_numeric_typer  r  r  r   rR  is_py_targetrH   BufferIndexNoder   loopvar_nodepy_loopvar_noder|  r`  r  )r   r   r  r  	loop_typec_loopvar_nodes         r4   r  zForFromStatNode.set_up_loop@  s>   k&! 	V#II" sqs s s2=2Id
..zOdI;#/ X&:9dkFVWW	;#/ X&:9dkFVWW	y$TY^-G$&:9dinUU	k++Is;;k++Is;;{% 	:+44S99DK9 	++Is;;DI9' : I44S99	! 
	_[%8 
	_ %D$+y'@AA oDH&mnnn $D#'D    $D&//)SIIN .D#,#6#6~#F#F#Y#YZ]#^#^D   r6   c                    |                     | j                   |                                }| j        }| j                            |           | j                            |           | j        | j                 \  }}| j	        A| j	                            |           | j	        
                                }|d         d|}nd}ddlm} t          | j        |j                  r| j                            |           t          | j        |j                  r| j                            |           | j        j        j        rt*          j        n| j        j        }|r#| j        s|j                            |d          }	n| j        
                                }	|j        r~|j        sw| j        d         dk    rf|                    d|	d	| j        
                                |d
|d|	d| j        d| j        
                                d
|d|	|d           n_|                    d|	d	| j        
                                |d|	d| j        d| j        
                                d|	|d           | j        }
|
#|r!|                    | j        j        ||	          }
|
0|
                    |           | j                            |
|           | j         !                    |           |"                    |j#                   |s(| j        r | j        j$        j%        rh|&                    | j        j        d           }|                    |           |'                    | j        j$        j(                  }| j        j$        j)        j*        r0|j+        ,                    t[          j.        dd                     d}nV|j+        ,                    t[          j.        dd                     d/                    | j        j$        j)        j0                  }|                    ||
                                ||1                    |
                                | j        j                  fz             |2                    |           n| j        }|3                    | j        j        || j        j$        j)                  }|	|_4        |5                    |           | j        j$        j%        rB|6                    |
                                |j                   |7                    |           |                    d           |sA| j        r:| j                            |           | j                            | j        |           |r!| j        s|j        8                    |	           |j9        }|:                    |           | j;        rD|                    d           | j;        !                    |           |                    d           |"                    |           | j        <                    |           | j        =                    |           | j        <                    |           | j        =                    |           t          | j        |j                  r| j        7                    |           t          | j        |j                  r| j        7                    |           | j	        6| j	        <                    |           | j	        =                    |           d S d S )Nr   rG  1r   rF  F>rn  r4  z + rp  rC   z; ) { r5  r|  GetModuleGlobalNamer%  z%__Pyx_GetModuleGlobalName(%s, %s); %sGetNameInClassz$__Pyx_GetNameInClass(%s, {}, %s); %sr]  r>  )>r  r3   rf  
from_ranger  r-  r  relation_table	relation1r  r   r   r  rH   r  r|  r  r  r;  r]  r  r   r  r  r  r  r  rT  	relation2rP   r  r=  r   r   r  r  r  is_pyglobal
PyTempNoder}  rk   r  r  r   ry  r   r  r  rl  r  r  CoerceFromPyTypeNode	temp_codegenerate_result_coder  r  r  r  rg  r7  rk  r:  )r   rU   rh  r  offsetincopr  r  loopvar_typeloopvar_namecoerced_loopvar_nodetarget_nodeinterned_cnamelookup_funcfrom_py_noder  s                   r4   r   z'ForFromStatNode.generate_execution_codef  s/   dh..00_
,,T222,,T222+DN;9 I..t4449##%%D$Qxxx.EEDd');<< 	-&&t,,,d*I,>?? 	0 ))$///151A1I_z--t{O_ 	6d/ 	6>77eLLLL,3355L 	&|': 	&t~a?PTW?W?W JJJ""$$$fffddddnnndk.@.@.B.B.B.BDDDeee	% & & & & JJJ""$$$fffdnnndk.@.@.B.B.B.Beee	% & & &  $3'J'#,#=#=dko|]i#j#j + 99$???K001EtLLL	))$///t*+++ 	*d2 	* { , *'224;?DII$$T***!%!7!78I8N!O!O;$*: A$55#/0EGYZZ\ \ \"IKK$55#/0@BTUUW W W"H"O"O)/?#A #AK

;&&(("++K,>,>,@,@$+/RR*T T U U U ++D1111"k$99!&T[5F5LN NL%1L"--d333{ , * 2 2 4 4k6FGGG##D)))

3 	Md2 	M  99$???K001EtLLL 	6d/ 	6N''555&_--- 	JJ|$$$44T:::JJsOOO{###**4000t$$$**4000t$$$d');<< 	,%%d+++d*I,>?? 	/ ((...9 I,,T222I  &&&&& ! r6   )r   ++)z+1r  )r   --)z-1r  )z<=r  z>=r  c                 j   | j                             ||           | j                            ||           | j                            ||           | j        | j                            ||           | j                            ||           | j        | j                            ||           d S d S r   )r;  r   r  r  r  r   r7  r(  s      r4   r   z-ForFromStatNode.generate_function_definitions  s    11#t<<<11#t<<<11#t<<<9 I33C>>>	//T:::'::3EEEEE ('r6   c                 ^   | j                             |           | j                            |           | j                            |           | j        r| j                            |           | j                            |           | j        r| j                            |           d S d S r   )r;  r   r  r  r  r   r7  r   s     r4   r   zForFromStatNode.annotate  s    T"""T"""T"""9 	%It$$$	4    	,%%d+++++	, 	,r6   )rK   rp   rq   r   r  r  r  r  r   r   r   rw   r  r   r  r   r   r\   r6   r4   r  r    s        $ POOKLLOJ:K! ! !
7 7 7  *$_ $_ $_Lo' o' o'f  NF F F, , , , ,r6   r  c                   :    e Zd ZdZg dZdZdZd Zd Zd Z	d Z
dS )WithStatNodea  
    Represents a Python with statement.

    Implemented by the WithTransform as follows:

        MGR = EXPR
        EXIT = MGR.__exit__
        VALUE = MGR.__enter__()
        EXC = True
        try:
            try:
                TARGET = VALUE  # optional
                BODY
            except:
                EXC = False
                if not EXIT(*EXCINFO):
                    raise
        finally:
            if EXC:
                EXIT(None, None, None)
            MGR = EXIT = VALUE = None
    )manager
enter_callr;  r   Nc                     | j                             |           | j                            |           | j                            |           d S r   )r  r   r  r   r   s     r4   r   z!WithStatNode.analyse_declarations  sJ    ))#...,,S111	&&s+++++r6   c                 $   | j                             |          | _         | j                            |          | _        | j        r+ddlm}  || j        j        | j        j                  | _        | j	        
                    |          | _	        | S )Nr   )r|  )r  rv   r  r;  r  r|  r3   r]  target_tempr   rw   )r   r   r|  s      r4   rw   z WithStatNode.analyse_expressions  s    |11#66/77<<; 	S++++++'x(;T_=QRRDI11#66	r6   c                     | j                             ||           | j                            ||           | j                            ||           d S r   )r  r   r  r   r(  s      r4   r   z*WithStatNode.generate_function_definitions%  sP    223===55c4@@@	//T:::::r6   c                    |                     | j                   |                    d           | j                            |           |j                            t          d          | _        |j	        
                    t          j        dd                     |                    | j        d| j                                        d|                    t          | j        rdnd	                    d
|                    | j        | j                             |                    | j        t                     |                                }|j        }| j                            |           | j        r| j                            |           | j                            |           |                    | j                                        d| j                                        d           | j                            |           n| j                            |           | j                            |           | j                            |           | j                            |           ||_        | j                            |           |                     |          r|!                                }|"                    |           |#                    |           |$                    | j        t                     |"                    |           |#                    |           |j        %                    | j                   |                    d           d S )Nz/*with:*/ {Fr  PyObjectLookupSpecialr%  z  = __Pyx_PyObject_LookupSpecial(r   	__aexit____exit__r  r4  r5  r]  )&r  r3   rP   r  r-  r  r  r   exit_varr   ry  r   r  r  r}  r   r  r  r  rW  r  r  r;  r  r  r6  r   r9  rk  r:  r   r   r  r  r  r  r  r  )r   rU   r`  intermediate_error_labelstep_over_labels        r4   r   z$WithStatNode.generate_execution_code*  s   dh

=!!!--d33344^PU4VV))#$;=OPP	R 	R 	R

MMML""$$$$""=1]S]#^#^____##DM48<<<	 	 	 	 	~666 ..00#'#3 00666; 	9 %%d+++O00666JJT%5%<%<%>%>%>%>@V@V@X@X@X@XYZZZO99$????O224888""4(((++D111%%%*	))$///??344 	,"nn..OMM/***NN3444!!$-@@@MM/***NN?+++##DM222

3r6   )rK   rp   rq   r   r   r  r  r   rw   r   r   r\   r6   r4   r  r    sq         8 >==KJK, , ,
  ; ; ;
. . . . .r6   r  c                   6    e Zd ZddgZdZdZd Zd Zd Zd Z	dS )WithTargetAssignmentStatNoder&  r  Nc                 :    | j                             |           d S r   r  r   s     r4   r   z1WithTargetAssignmentStatNode.analyse_declarationsi  r  r6   c                     | j                             |          | _         | j                             |           | j        j                            | j         j        |          | _        | S r   )r  rx   rJ  	with_noder  r  r]  r&  r   s     r4   rw   z0WithTargetAssignmentStatNode.analyse_expressionsl  sT    80055%%c***>-77sKKr6   c                     | j                             |           | j                            | j         |           | j        j                            |           d S r   )r&  r-  r  r=  r  r  r  r   s     r4   r   z4WithTargetAssignmentStatNode.generate_execution_coder  sQ    ))$///))$(D999"**400000r6   c                 n    | j                             |           | j                            |           d S r   r  r   s     r4   r   z%WithTargetAssignmentStatNode.annotatew  r  r6   )
rK   rp   rq   r   r  r&  r   rw   r   r   r\   r6   r4   r  r  [  se         %.KI
C1 1 1  1 1 1
         r6   r  c                   J    e Zd Zg dZdZd Zd Zej        Z	dZ
d Zd Zd Zd	S )
TryExceptStatNode)r   except_clausesr7  Fc                     | j                             |           | j        D ]}|                    |           | j        r| j                            |           d S d S r   )r   r   r  r7  )r   r   except_clauses      r4   r   z&TryExceptStatNode.analyse_declarations  ss    	&&s+++!0 	4 	4M..s3333 	711#66666	7 	7r6   c                 T   | j                             |          | _         d}t          | j                  D ]D\  }}|                    |          x}| j        |<   |rt	          |j        d           |j        sd}E|| _        | j        r| j                            |          | _        | S )Nr   zdefault 'except:' must be lastr   )	r   rw   r  r  r   r3   patternhas_default_clauser7  )r   r   default_clause_seenr  r  s        r4   rw   z%TryExceptStatNode.analyse_expressions  s    I11#66	 )$*= > > 	( 	(A}5B5V5VWZ5[5[[MD/2" Km')IJJJ ( (&'#"5 	I#/CCCHHDr6   zTry-except statementc                 
                        | j                                       d           j        }j        }j        }                                }j        }                    d          }                    d          }                    d          }	                    d          }
|r                    d          nd }|r                    d          nd }                    d          }fd	t          d
          D             
                                }                    d           |
_        |_        |_        | j                                                            | j        d                               d           j                                        }                    |          }|rj                            t$                     | j        s*|                    d           |                    d           |                    dd                    d D                       z             D ]}|                    |t,                     fd}n:d D             }|                    dd                    |          z             d }|_        |	_        | j        j        }| j        rq                     | j        j                                       d           | j                                                           d           |s| j        j        }|r|s5D ]}                    |t,                                         |                               |           |D ]\  }}                    ||           j        j        }| j        _        | j        D ]}|                    |           |j        _        | j        s                    |                                ||||
|	g|||||g|s                    |          s|nd | j        d          }|D ]}|r
 |                                 |          rM|s*                    |          s                    |                               |           |r
 |                                 |          r                    |                               d           D ]}j        !                    |           |_        |_        |_        |_        d S )Nrw  exception_handledexcept_errorexcept_return
try_return	try_breaktry_continuetry_endc                 P    g | ]"}j                             t          d           #S rM  r  r  r   r   r  rU   s     r4   r   z=TryExceptStatNode.generate_execution_code.<locals>.<listcomp>  s;     , , , 55neLL , , ,r6   r,   
/*try:*/ {Frb  r]  ro  rp  z__Pyx_ExceptionSave(%s);r   c                     g | ]}d |z  S r{  r\   r6  s     r4   r   z=TryExceptStatNode.generate_execution_code.<locals>.<listcomp>  s    @@@353;@@@r6   c                      D ]}                      | t                                         dd                              z             d S )Nz__Pyx_ExceptionReset(%s);r   )r  r   rP   r   )rk   rU   exc_save_varss    r4   restore_saved_exceptionzJTryExceptStatNode.generate_execution_code.<locals>.restore_saved_exception  sb    ) < <D%%dN;;;;

699]334 5 5 5 5 5r6   c                     g | ]}d |z  S )z	(void)%s;r\   r6  s     r4   r   z=TryExceptStatNode.generate_execution_code.<locals>.<listcomp>  s    IIICkC/IIIr6   z%s /* mark used */rC   c                      d S r   r\   r\   r6   r4   r	  zJTryExceptStatNode.generate_execution_code.<locals>.restore_saved_exception  s    r6   z/*else:*/ {)r  r3   rc  )"r  r3   rP   r  r  r  rW  r  r  r  rL   r   r   r  all_free_managed_tempsr  r   ry  reset_exception_utility_coder  r   put_xgotrefr   r   r7  r  r  r  current_exceptr  generate_handling_coder 	  r  r  )r   rU   old_return_labelold_break_labelold_continue_labelr`  ra  except_end_labelexcept_error_labelexcept_return_labeltry_return_labeltry_break_labeltry_continue_labeltry_end_labelsave_exctemps_to_clean_up	can_raiser  r	  mark_vars_usednormal_case_terminates	temp_name	temp_typeouter_exceptr  r  r  r  r	  s    `                          @r4   r   z)TryExceptStatNode.generate_execution_code  s   dh

3,*!0..00*>>*=>>!^^N;;"nn_==>>,779HR$..555d?Q[T^^N;;;W[y11, , , ,"'((, , ,''))

	 	 	,*0	))$///dhe,,,

	 	 	 NAACCOOO44	 	--.JKKK$ =<===;<<<NN5		@@-@@@AAC D D D$ : :$$S.99995 5 5 5 5 5 5 JI=IIINNN/#((>2J2JJKKK   ./!%!8 	HMM$*.///JJ  44T:::JJ  ) H)-)9)G& 	2) -( @ @C**3????m,,,NN?+++(9 = =$	9&&y)<<<<>8L,0DN)!%!4 M M44T;KLLLL,8DN)* 20111112DFVXklo/ACSUef/Evdoo^kNlNlv--rv 2 
 
 " 	* 	*A *'')))??+,, 	*) -$//-2P2P -m,,,NN+,,, *'')))??=)) 	*NN=)))

3" 	/ 	/EN''....,*0*r6   c                     | j                             ||           | j        D ]}|                    ||           | j        | j                            ||           d S d S r   )r   r   r  r7  )r   r   rU   r  s       r4   r   z/TryExceptStatNode.generate_function_definitions   sw    	//T:::!0 	C 	CM77TBBBB'::3EEEEE ('r6   c                     | j                             |           | j        D ]}|                    |           | j        r| j                            |           d S d S r   )r   r   r  r7  )r   rU   except_nodes      r4   r   zTryExceptStatNode.annotate   ss    	4   . 	' 	'K  &&&& 	,%%d+++++	, 	,r6   N)rK   rp   rq   r   r  r   rw   r   r   r   r   r   r   r   r\   r6   r4   r  r  |  s         <;;KL7 7 7   .K(Ku+ u+ u+nF F F, , , , ,r6   r  c                   @    e Zd Zg dZdZdZdZd Zd Zd Z	d Z
d ZdS )	ExceptClauseNode)r  r;  r   r  NFc                 |    | j         r| j                             |           | j                            |           d S r   )r;  r[  r   r   r   s     r4   r   z%ExceptClauseNode.analyse_declarations;   s>    ; 	8K223777	&&s+++++r6   c                    |j         | _        | j        rLt          | j                  D ]7\  }}|                    |          }|                    |          | j        |<   8| j        rJddlm} |	                    | j
                  | _        | j                            || j                  | _        | j                            |          | _        | S r  )r  rc  r  r  rw   r  r;  r   r  ExcValueNoder3   r  rf  r   )r   r   r  r  r  s        r4   rw   z$ExceptClauseNode.analyse_expressions@   s     /< 	B'55 B B
7!55c::")"<"<S"A"AQ; 	U######&33DH==DN+??T^TTDKI11#66	r6   c           	      R                        | j                   | j        rEt          d | j        D                        }|rvfdt	          d          D             }j                            t          j        dd                     	                    dt          |          z             |d         nd x}| j        D ]}|                               d | j        D             }g }rj                            t          j        d	d
                     t          |          dk    r,|                    dd|d         d|d         d           n|                    fd|D                        nt          |          dk    rVj                            t          j        d	d
                     |                    d|d         d|d         d           nLj                            t          j        dd                     |                    d |D                        j                            t"          j        d          }	                    |dd                    |          d           | j        D ],}|                               |                               -|rv	                    dt          |          z             	                    d                    d |D                                  |D ]}	j                            |	           	                    d|z             j                            |           n	                    d           t/          | j        dd          s|| j        u| j        nj                            t          j        dd                     	                    d                                |           	                    d!           d S fd"t	          d          D             }                    | j                   j                            t<                     d#t          |          z  }
	                    d$|
d%                    | j                             |D ]}                     |tB                     | j        rZ| j"        #                    |d                    | j"                                       | j        $                    | j"                   | j        5tK          || j        j&                  D ]\  }}|#                    |           '                    d&          }j        j(        }|j        _(        | j        )                               |j        _(        | j        j*        s5|D ]}+                    |tB                                         |           ,                    -                                |          D ]:}t]          |          D ](\  }} |dk     rj/        nj+        |tB                     );0                    |           |D ]}	j                            |	           	                    d!           d S )'Nc              3   \   K   | ]'}|j         p|                                o|j         V  (d S r   )r   	is_simpler  r   r  s     r4   r0  z:ExceptClauseNode.generate_handling_code.<locals>.<genexpr>T   sT       '- '- "Qg&7&7&9&9&Q'/>Q'- '- '- '- '- '-r6   c                 R    g | ]#}j                             t          d           $S Tr  r	  r	  s     r4   r   z;ExceptClauseNode.generate_handling_code.<locals>.<listcomp>Z   s?     / / / ! !N88TX8YY / / /r6   r,   PyErrFetchRestorer&  z__Pyx_ErrFetch(&%s, &%s, &%s);r   c                 6    g | ]}|                                 S r\   )r  r6	  s     r4   r   z;ExceptClauseNode.generate_handling_code.<locals>.<listcomp>d   s$    HHH))++HHHr6   FastTypeChecksModuleSetupCode.cr)   z#__Pyx_PyErr_GivenExceptionMatches2(r   r   rW  c              3   *   K   | ]}d d|dV  dS )z"__Pyx_PyErr_GivenExceptionMatches(r   rW  Nr\   )r   r  r  s     r4   r0  z:ExceptClauseNode.generate_handling_code.<locals>.<genexpr>o   sK       % %#G HPxxQXQXQXY% % % % % %r6   z__Pyx_PyErr_ExceptionMatches2(PyErrExceptionMatchesc              3       K   | ]	}d |z  V  
dS )z __Pyx_PyErr_ExceptionMatches(%s)Nr\   r6	  s     r4   r0  z:ExceptClauseNode.generate_handling_code.<locals>.<genexpr>|   s;       ! ! 7@! ! ! ! ! !r6   Fr  r4  z || r5  __Pyx_ErrRestore(%s, %s, %s);rC   c                     g | ]}d |z  S %s = 0;r\   r6  s     r4   r   z;ExceptClauseNode.generate_handling_code.<locals>.<listcomp>   s    $I$I$IY_$I$I$Ir6   rv  z/*except:*/ {r  Tz__Pyx_ErrRestore(0,0,0);r]  c                 R    g | ]#}j                             t          d           $S r8	  r	  r	  s     r4   r   z;ExceptClauseNode.generate_handling_code.<locals>.<listcomp>   s>     ' ' ' N00D0QQ ' ' 'r6   z&%s, &%s, &%szif (__Pyx_GetException(r  except_)1r  r3   r  r4  r  r   ry  r   r  rP   r  r-  rG   r  extendr  r  r   r  r   rk  r:  r  r   r   excinfo_targetr;  r  r  rc  get_exception_utility_coder  r	  r   r  set_varr=  r+  rR   rf  r'  r   r   r  r  get_loop_labelsr  r  rg  )r   rU   rb  has_non_literalsr'  r  patterns	exc_tests
match_flagr  exc_argsr  tempvarrT   rh  old_exc_varsr  r  r  s    `                @r4   r	  z'ExceptClauseNode.generate_handling_codeP   s   dh< ?	(#& '- '-#|'- '- '- $- $-  -   +/ / / /%*1XX/ / / 11+2IJ]_m2n2nooo

;eHooMNNN#A;&**8< 7 7006666HH4<HHHHI  11+,<>QRRT T Tx==A%%$$$ (1+++x{{{&     $$ % % % %'/% % %     X!## 11+,<>QRRT T T   QKKK!"      11+,C^TTV V V   ! !#+! ! !   
 55j6KX]5^^JJJZZZY1G1G1G1GHIII< ) )..t444""4(((( 6

:U8__LMMM

388$I$I$I$I$IJJKKK$ 6 6DN//5555JJ      N''
3333JJ'''	7D11 		'/K' --k.EFY[i.j.jkkkJJ1222MM)$$$JJsOOOF' ' ' '"1XX' ' 't1222 	))*DEEE"U8__4


HHdoodh///1 	2 	2 	2 	2 	2CS.1111; 	GN""8A;///N33D999K00FFF*!$Xt/B/G!H!H & &W%%%%..y99~."*	))$///".y& 	% < < &&sN;;;;MM)$$$''(<(<(>(>PP 	b 	bA#H-- b b3K!a%%&&T5KSR`aaaab 	_--- 	. 	.DN''----

	 	 	 	 	r6   c                     | j         | j                             ||           | j                            ||           d S r   )r;  r   r   r(  s      r4   r   z.ExceptClauseNode.generate_function_definitions   s@    ;"K55c4@@@	//T:::::r6   c                     | j         r| j         D ]}|                    |           | j        r| j                            |           | j                            |           d S r   )r  r   r;  r   )r   rU   r  s      r4   r   zExceptClauseNode.annotate   sp    < 	'< ' '  &&&&; 	'K  &&&	4     r6   )rK   rp   rq   r   r  rG	  is_except_asr   rw   r	  r   r   r\   r6   r4   r/	  r/	  $   s        " =<<KINL, , ,
   | | ||; ; ;
! ! ! ! !r6   r/	  c                       e Zd Zg dZdZdZdZdZdZdZ	e
d             Zd Zd Zej        Zd	Zd
 Zd Z	 ddZddZd Zd ZdS )TryFinallyStatNode)r   finally_clausefinally_except_clauser   TNFc                 *    t          | ||          }|S )Nr   rW	  )rV	  )r3   r   r   rW	  rT   s        r4   r  z"TryFinallyStatNode.create_analysed   s    !#DPPPr6   c                     | j                             |           t          j        | j                  | _        | j                            |           | j                            |           d S r   )r   r   r   deepcopyrW	  rX	  r   s     r4   r   z'TryFinallyStatNode.analyse_declarations   sa    	&&s+++%)]43F%G%G""77<<<0055555r6   c                     | j                             |          | _         | j                            |          | _        | j                            |          | _        |j        r|j        j        s|j        | _        | S r   )r   rw   rW	  rX	  r  rX  func_return_typer   s     r4   rw   z&TryFinallyStatNode.analyse_expressions!  sq    I11#66	"1EEcJJ%)%?%S%STW%X%X"? 	43?#: 	4$'OD!r6   zTry-finally statementc                 
                          j                                       d           j        }                                }                                }j        } j        s|_                                        }j        j	        }dj        _	         j
                                       |j        _	                            d           j                                        }                      j        j                                       d                               |            j        gf fd	}	 j        o                    |          }
 j        j         } j
        j        sh                    d            |	                                            j        j        s                    |                               d           |
r                    |                               d            j        s                    d            j        r                                 |rst/          fd	t1          d
          D                       }j                            t5          j        t5          j        t4          j                            d          }nd x}}t/          fdt1          d          D                       }                     ||||                                           }                    d           j        j        }|d d         j        _         j                                        |j        _                            d           |rj !                    |||           |r|D ]}j        "                    |           |rj        "                    |                               |           #                                                    |          D ]} $                    |           |D ]}j        "                    |                               d                               |           j%        }d}tM          tO          ||                    D ]0\  }\  }}                    |          s||k    r|
r(                    d|z             d }||k    r j        r?t/          fdt1          d          D                       }                     g |            j        j        s j(        r j        stS           j        tT                    stj                             j(        d          }                    |dtV          j,        d            j(        j-        r"                    dtV          j,        z              |	                                           ||k    r|rc                    tV          j,        d|d            j(        j-        r                    d|z             j        "                    |            j        r5 !                    |           |D ]}j        "                    |            j        j        s                    |                               d           2                    |                               d           d S )Nr	  r   r]  z/*finally:*/ {c                 b    | d         }t          j        |          }|j        u r|| d<   n|}|S r;  )r   r\	  rW	  )_nextrT   	node_copyr   s      r4   fresh_finally_clausezHTryFinallyStatNode.generate_execution_code.<locals>.fresh_finally_clause'!  s>    8Dd++It***$a Kr6   z/*normal exit:*/{z/*exception exit:*/{ro  c                 \    g | ](}j                             t          j        d           )S Fr  )r  r  r   r  r	  s     r4   r   z>TryFinallyStatNode.generate_execution_code.<locals>.<listcomp>C!  sB     +' +' +' N001FSX0YY+' +' +'r6   r)   Fr  c                 R    g | ]#}j                             t          d           $S re	  r	  r	  s     r4   r   z>TryFinallyStatNode.generate_execution_code.<locals>.<listcomp>K!  s>     # # # ,,^,NN# # #r6      rw  r,   r\   z%s: {c                 R    g | ]#}j                             t          d           $S re	  r	  r	  s     r4   r   z>TryFinallyStatNode.generate_execution_code.<locals>.<listcomp>y!  s?     &+ &+ &+ 44^PU4VV&+ &+ &+r6   r4  r5  rC	  ).r  r3   rP   r  all_new_labelsget_all_labelshandle_error_caser  r  in_try_finallyr   r   r	  rW	  set_all_labelspreserve_exceptionr  r   r  r  r  is_try_finally_in_nogilri  r  r  r  r   CPtrTyper  r  put_error_catcherr'  rX	  put_error_uncatcherr  r  put_error_cleanerr  r  r+  r^	  rH   GILExitNoder
   r  ro  )r   rU   r`  
old_labels
new_labelsrW  catch_labelwas_in_try_finallyr$	  rc	  preserve_errorneeds_success_cleanupexc_lineno_cnamesexc_filename_cnamer'  finally_old_labelsrQ	  r  r  r  r  r  	old_labelret_temps   ``                      r4   r   z*TryFinallyStatNode.generate_execution_code!  s   dh

<   *((**
((**
*% 	/.Dnn&&!^:()%	))$///(:%

3 NAACCd)-...

#$$$ 	J'''(,(;'< 	 	 	 	 	 	 0UT___5U5U$($7$E Ey& 	JJ*+++  ""::4@@@&4 +k***JJsOOO ,	NN?+++JJ-...$ :

8999+ (%%'''$ >$) +' +' +' +'"1XX+' +' +' %( %(! &*^%A%A'
(?
@V(W(WXX$ &B && &&"" :>=!$6 # # # #q# # # $ $H ""'3DFXZ Z Z!%!4!4!6!6JJsOOO>2L&.rrlDN#&>>tDDD&2DN#JJsOOO$ /((x9JL^___$ ;!2 ; ;33E::::% DN//0BCCCo...++D,?,?,A,ACUVV 7 7&&tX6666! 3 3++E2222JJsOOOJ'''( *33z:3N3N)O)O )	 )	%A%	9??9-- O+++JJw*+++HL(($ ?$ &+ &+ &+ &+!&q&+ &+ &+  ,  ,H **4X>>>*8 	H- H $ <H *4+> L LH $(>#?#? 1e $@ $E $E

6;N;N;N#OPPP0< H JJy63F'FGGG  ""::4@@@L(( :JJV-@-@-@(((KLLL,8 9

9x#7888N//999$ ;,,T8<<<!) ; ;33E::::&4 )i(((JJsOOOO 	{###

	 	 	 	 	r6   c                     | j                             ||           | j                            ||           | j        r| j                            ||           d S d S r   )r   r   rW	  rX	  r(  s      r4   r   z0TryFinallyStatNode.generate_function_definitions!  sj    	//T:::99#tDDD% 	P&DDS$OOOOO	P 	Pr6   c                 j   |j                             t                     |j                             t                     |j                             t                     | j        r|                    d           |                    d           |                    d                    d |D                                  |D ]\  }}|	                    ||           |                    d|dd          z             |                    d|d d         d	z  z             |D ]}|
                    |t                     |rQ|                    |d
         dt          j        d|d         dt          j        d|dt          j        d           | j        r|                                 d S d S )NFrh  rp  rC   c                     g | ]}d |z  S rB	  r\   r6  s     r4   r   z8TryFinallyStatNode.put_error_catcher.<locals>.<listcomp>!      AAAY_AAAr6   z>if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&%s, &%s, &%s);r,   zmif ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&%s, &%s, &%s) < 0)) __Pyx_ErrFetch(&%s, &%s, &%s);r)   r   r4  rp  r   r5  )r   ry  r  rH	  swap_exception_utility_codero	  rj  rP   r   r  r	  r   r
   lineno_cnameclineno_cnamefilename_cnamers  )	r   rU   r$	  r'  r{	  r|	  r(	  r]  r  s	            r4   rq	  z$TryFinallyStatNode.put_error_catcher!  s   ))*HIII))*DEEE))*EFFF' 	8777

/000

388AAAAABBCCC0 	4 	4OIt""9d3333 	

 :<DQRRLI 	J 	J 	J

 4 8@|a7G	I 	J 	J 	J
  	2 	2CS.1111 	<JJ!!$$$f&9&9&9!!$$$f&:&:&:"""F$9$9$9; < < <
 ' 	+((*****	+ 	+r6   c                    |j                             t                     |j                             t                     | j        r+|                    d           |                    d           |                    d           |dd          D ]}|                    |t                     |                    d|dd          z             |                    d           |d d         D ]}|                    |t                     |                    d|d d         z             | j        r|	                                 |                    d	
                    d
 |D                                  |rS|                    t          j        d|d         dt          j        d|d         dt          j        d|d           d S d S )NFrh  rp  if (PY_MAJOR_VERSION >= 3) {r,   !__Pyx_ExceptionReset(%s, %s, %s);r]  r@	  rC   c                     g | ]}d |z  S rB	  r\   r6  s     r4   r   z:TryFinallyStatNode.put_error_uncatcher.<locals>.<listcomp>!  r	  r6   r4  r   rp  r   r5  )r   ry  r  r	  ro	  rj  rP   r  r   rs  r   r
   r	  r	  r	  )r   rU   r'  r{	  r|	  r  s         r4   rr	  z&TryFinallyStatNode.put_error_uncatcher!  s   ))*HIII))*FGGG' 	5777JJ3444 	

1222ABB< 	3 	3Cc>2222

6!""EFFF

3BQB< 	3 	3Cc>2222

2Xbqb\ABBB' 	+((***

388AAAAABBCCC 	<JJ###%6q%9%9%9$$$&7&:&:&:%%%'9'9'9; < < < < <	< 	<r6   c                    |j                             t                     | j        r+|                    d           |                    d           |                    d           |dd          D ]}|                    |t                     |                    d|dd          z             |                    d           |d d         D ]}|                    |t                     | j        r|	                                 |                    d
                    d	gdz            |dd          z             d S )
NFrh  rp  r	  r,   r	  r]  rC   rC	  )r   ry  r	  ro	  rj  rP   r  r   r  rs  r   )r   rU   r'  r  s       r4   rs	  z$TryFinallyStatNode.put_error_cleaner!  sG   ))*FGGG' 	5777JJ3444 	

1222ABB< 	3 	3Cc>2222

6!""EFFF

3BQB< 	8 	8C""37777' 	+((***

388YKM**Xabb\9:::::r6   c                 n    | j                             |           | j                            |           d S r   )r   r   rW	  r   s     r4   r   zTryFinallyStatNode.annotate!  s5    	4   $$T*****r6   )NN)rK   rp   rq   r   rn	  rk	  r^	  rX	  ro	  r  r$  r  r   rw   r   r   r   r   r   r   rq	  rr	  rs	  r   r\   r6   r4   rV	  rV	     s         FEEK  #L  \6 6 6   .K)KP P PdP P P FJ +  +  +  +D< < < <<; ; ;(+ + + + +r6   rV	  c                       e Zd ZdZdZdZdS )NogilTryFinallyStatNodezJ
    A try/finally statement that may be used in nogil code sections.
    FN)rK   rp   rq   r   rn	  r   r\   r6   r4   r	  r	  !  s%          KKKr6   r	  c                   V     e Zd Zdgej        z   ZdZdZd	dZd Z fdZ	d Z
d Z xZS )
GILStatNoder+  NTc           
          || _         || _        |                     |||           t                              | ||t          ||| j                             d S )N)state
state_temprZ	  )r	  r+  create_state_temp_if_neededrV	  r   rt	  r	  )r   r3   r	  r   r+  s        r4   r   zGILStatNode.__init__"  sr    
"((eT:::###&5T_> > > 	$ 	? 	? 	? 	? 	?r6   c                     ddl m}  |            }|                    |           |j        sd S |dk    rt          j        }nt          j        }ddlm} |	                    ||          | _
        d S )Nr   )YieldNodeCollectorgilrF  )ParseTreeTransformsr	  visitchildrenyieldsr   c_gilstate_typec_threadstate_ptr_typer   r  r|  r	  )r   r3   r	  r   r	  	collectorr)	  r  s           r4   r	  z'GILStatNode.create_state_temp_if_needed"  s    ;;;;;;&&((	%%% 	FE>>"2II"9I#,,S)<<r6   c                     | j         dk    |_        | j         dk    rd|_        | j        | j                            |           t          t          |                               |          S )Nr	  T)r	  _in_with_gil_blockhas_with_gil_blockr+  r   rh   r	  r  s     r4   r   z GILStatNode.analyse_declarations)"  sc    "&*"5:%)C">%N//444[$''<<SAAAr6   c                    |                     t          j        dd                     | j        | j                            |          | _        |j        }| j        dk    |_        t                              | |          }||_        |S )NForceInitThreadsr<	  r  )ry  r   r  r+  rw   r  r	  rV	  )r   r   	was_nogilrT   s       r4   rw   zGILStatNode.analyse_expressions3"  s    #$68KLL	N 	N 	N >%!^??DDDNI	J')	!55dC@@	r6   c                 Z   |                     | j                   |                                 | j        r4| j                            |           | j                                        }nd }|j        j        }| j        dk    r#|	                    |           d|j        _        n)|
                    || j                    d|j        _        t                              | |           | j        r| j                            |           ||j        _        |                                 d S )Nr	  )variableT)r	  unknown_gil_stateF)r  r3   begin_blockr	  r  r   r  rl  r	  rj  put_release_gilscope_gil_state_knownrV	  r   r  	end_block)r   rU   r	  old_gil_configs       r4   r   z#GILStatNode.generate_execution_code@"  s   dh? 	O$$T***--//HHH1:222'+DN$$  ($JdFd eee',DN$224>>>? 	*O##D)))#1 r6   r   )rK   rp   rq   r	  r   r	  r	  r   r	  r   rw   r   rr   rs   s   @r4   r	  r	  "  s         -"9"EEKJ ? ? ? ?= = =B B B B B        r6   r	  c                   *    e Zd ZdZg ZdZdZd Zd ZdS )rt	  a  
    Used as the 'finally' block in a GILStatNode

    state   string   'gil' or 'nogil'
    #   scope_gil_state_known  bool  For nogil functions this can be False, since they can also be run with gil
    #                           set to False by GilCheck transform
    NTc                     | S r   r\   r   s     r4   rw   zGILExitNode.analyse_expressionsg"  r  r6   c                     | j         r| j                                         }nd }| j        dk    r|                    |           d S |                    || j                    d S )Nr	  )r	  )r	  r   r	  rs  put_acquire_gilr	  )r   rU   r	  s      r4   r   z#GILExitNode.generate_execution_codej"  sr    ? 	--//HHH:((22222  A[=[ \\\\\r6   )	rK   rp   rq   r   r   r	  r	  rw   r   r\   r6   r4   rt	  rt	  Z"  sS          KJ   	] 	] 	] 	] 	]r6   rt	  c                       e Zd ZdZd ZdS )EnsureGILNodezI
    Ensure the GIL in nogil functions for cleanup before returning.
    c                 2    |                     d           d S )NFrh  )rj  r   s     r4   r   z%EnsureGILNode.generate_execution_code{"  s    U33333r6   N)rK   rp   rq   r   r   r\   r6   r4   r	  r	  v"  s-         4 4 4 4 4r6   r	  c                      ddl m}  | j        S rk  )r   rm  rz  rl  s    r4   cython_view_utility_coder	  "  s    ''r6   c                  ,    t          j        dd          S NArrayAPIzarrayarray.hr   r  r\   r6   r4   r  r  "      {'>z>'Z'Z r6   c                  ,    t          j        dd          S r	  r	  r\   r6   r4   r  r  "  r	  r6   )zcpython.arrayzcpython.array.arrayzcython.view)__Pyx_patch_asyncioPatchAsyncIOr  )__Pyx_patch_inspectPatchInspectr  )asyncioinspectc                    |j         j        j        j        D ]}|j        | j        k    r|                    d          }|                    d          }|r|j        p|o|j        }|s|rV|sT|rR|j        j	        rFt          | j        dd           |j                             t          j        dd                      d S d S )Nimport_array_import_arrayzx'numpy.import_array()' has been added automatically since 'numpy' was cimported but 'numpy.import_array' was not called.r   NumpyImportArrayzNumpyImportArray.c)r   module_noder  r  rk   r  r  r  r]  r  r	   r3   ry  r   r  )rT   rU   modr	  r	  r  s         r4   cimport_numpy_checkr	  "  s    +1C  8t''' ~66882!2]8\-J\ 
	] 
	
	  !3!@  #_`ac c c 11$01CEYZZ   ' r6   c                   (    e Zd Zg ZdZd Zd Zd ZdS )CImportStatNodeFc                 T   |j         st          | j        d           d S |                    | j        | j        | j        rdnd          }d| j        v rd | j                            d          D             }|d         }|j                            |          }|}|dd          D ]5}|                    |          }|	                    ||| j                   |}6| j
        r"|	                    | j
        || j                   nh|                    |           |	                    ||| j                   n6| j
        p| j        }|	                    ||| j                  }| j        |_        | j        t          v r.|                    t          | j                                        d S d S )N$cimport only allowed at module levelr   r   relative_levelrD   c                 ,    g | ]}t          |          S r\   r"   )r   rk   s     r4   r   z8CImportStatNode.analyse_declarations.<locals>.<listcomp>"  s     QQQT]4((QQQr6   r   )r  r   r3   find_moduler  is_absoluter~  r  find_submoduledeclare_moduleas_namer  rZ  utility_code_for_cimportsry  )	r   r   module_scoper  top_nametop_module_scoperk   submodule_scoper  s	            r4   r   z$CImportStatNode.analyse_declarations"  s   " 	$(BCCCFdhD<L7TqqRT ' V V$"""QQT5E5K5KC5P5PQQQEQxH"{99(CC+Labb	 / /"."="=d"C"C++D/48LLL.| I""4<txHHHH''555""8-=txHHHH<34#3D&&t\48DDE262BE/888  !:4;K!L!N!NOOOOO 98r6   c                     | S r   r\   r   s     r4   rw   z#CImportStatNode.analyse_expressions"  r  r6   c                 @    | j         dk    rt          | |           d S d S Nnumpyr  r	  r   s     r4   r   z'CImportStatNode.generate_execution_code"  .    w&&d+++++ '&r6   N)rK   rp   rq   r   r	  r   rw   r   r\   r6   r4   r	  r	  "  sP         KKP P P6  , , , , ,r6   r	  c                   6    e Zd Zg ZdZdZdZd Zd Zd Z	d Z
dS )FromCImportStatNodeNc           	         |j         st          | j        d           d S |j                            d          dz   }| j        rK| j        |k    rt          | j        d           d S | j        |k    r|j        st          | j        d           d S |                    | j        | j        | j                  }|sd S |j        }|	                    |           | j
        D ]\  }}}|dk    rDt          |j                                                  D ]\  }}	|                    ||	|           Q|                    |          }	|	rd|	_        nz| j        d uo
| j        dk    }
|j                            ||| j        d	|

          }|s|j        |u r|                    |p||| j                   nt          |d|d|d           |	r|p|}|                    ||	|           	|                    d          s|                    d          ru|t*          v r'|                    t+          |                                | j
        D ]?\  }}}|d|}|t*          v r'|                    t+          |                                >d S d S )Nr	  rD   r   z3relative cimport beyond main package is not allowedz:relative cimport from non-package directory is not allowedr	  r  r   F)from_moduler3   absolute_fallbackrelative_importzName 'z' not declared in module 'r~  cpythoncython)r  r   r3   r  countr	  
is_packager	  r  r  imported_namesr   r  rg   r  rW  r  r  parent_moduler	  r  r	  ry  )r   r   qualified_name_componentsr	  r  r3   rk   r	  
local_namer  is_relative_importr	  r  fqnames                 r4   r   z(FromCImportStatNode.analyse_declarations"  s   " 	$(BCCCF$'$6$<$<S$A$AA$E! 	"%>>>dh UVVV$(AAA#.Adh \]]]t'7RVReff 	F"1---"&"5 	C 	CCws{{)-l.B.H.H.J.J)K)K C C%J**:ucBBBBC %++D11 b!"EJJ)-)<D)H)dTM`cdMd&&)k&=&=,DHX]  pB '> 'C 'CO* ! &4DD**7?dOTXVVVVccdddT_T_T_#`aaa C!(DJ**:ucBBB!!),, 	N0F0Fx0P0P 	N777$$%>{%K%M%MNNN"1 N N
4$/KK6666(()B6)J)L)LMMM	N 	NN Nr6   c                 r    |j         sdS |j        }|dk    r
|j        sdS n|j        sdS ||j        k    rdS dS )Nr   classr   )rX  r]  r  is_struct_or_unionr  )r   r  r  r]  s       r4   declaration_matchesz'FromCImportStatNode.declaration_matches#  s_    } 	1z7??) q * qty  qqr6   c                     | S r   r\   r   s     r4   rw   z'FromCImportStatNode.analyse_expressions&#  r  r6   c                 @    | j         dk    rt          | |           d S d S r	  r	  r   s     r4   r   z+FromCImportStatNode.generate_execution_code)#  r	  r6   )rK   rp   rq   r   r  r	  r	  r   r	  rw   r   r\   r6   r4   r	  r	  "  sj         KKNN0N 0N 0Nd    , , , , ,r6   r	  c                   *    e Zd ZdgZdZd Zd Zd ZdS )FromImportStatNoder  r   c                 \   | j         D ]\  }}|dk    r.|j        st          | j        d            d S d|_        d| _        9|                    |           |j        rB|                                -t          | j
        j        j        d|          |j        _        d|j        _        d S )Nr  z%import * only allowed at module levelr   rD   r   )rg   r  r   r3   has_import_starimport_starr[  r  r=  r   r  r  r   rZ  )r   r   rk   r;  s       r4   r   z'FromImportStatNode.analyse_declarations:#  s     J 	D 	DLD&s{{* $($KLLLFF&'##$  11#666< D??AAIER'+{'>'D'D'DddKFM FMB BDFL>>	D 	Dr6   c                    ddl m} | j                            |          | _        |                    | j        t                    | _        g | _        | j	        D ]\  }}|dk    r]|j
        	                                D ]B\  }}|j        s6|j        j        r*|                    t          j        dd                      nCi|                    |j                  }|j        r|j        j        |k    rt'          |j        d          r|j        j        | j        j        j        k    r	 |                    | j        j        j        | j        | j        j                  }|j        j        |j        k    rn# t2          $ r Y nw xY w|                    |d           }|j        t          u rd }n | j                            |j        |          }| j                            |||f           | S )Nr   rF  r  ExtTypeTestr%  r  )r3   r	  )r   r  r  rw   r  r3   r   r   interned_itemsrg   r  rX  r]  r  ry  r   r  rW  rk   r)  r  r   r	  r   r  r   rf  r  r  )	r   r   r  rk   r;  r  r  r  coerced_items	            r4   rw   z&FromImportStatNode.analyse_expressionsM#  s   k55c::..txHH	  J 	I 	ILD&s{{ # 1 1 3 3  HAu = UZ-I ,,[-D]Tf-g-ghhh

6;//M ejo&=&=#EJ>> '>z-1H1NNN !$1H1NTXT\@D@Q "1 "S "S :1V5JJJ$ K)   99#tDD;.00#'LL#'9#6#6v{C#H#HL#**D&,+GHHHHs   )AE77
FFc                    |                     | j                   | j                            |           | j        rX|                    dt          j        d| j                                        d|                    | j                  d           |j	        
                    t          d          }| j                            |           | j        r-|j                            t#          j        dd                     | j        D ]\  }}}|                    |d	| j                                        d
|                    |          d|                    || j                             |                    |t                     ||                    | j        |           n@|                    |           |                    |           |                    ||           |                    |t                     |j	                            |           | j                            |           | j                            |           d S )Nr{  rX  r  r5  Tr  
ImportFromr  z = __Pyx_ImportFrom(r   r  )r  r3   r  r-  r	  rP   r
   r  r  r  r  r   r   r-  r	  r   ry  r   r  r}  r  r  r=  allocate_temp_resultr  r  r  rk  r:  )r   rU   	item_temprk   r;  r	  s         r4   r   z*FromImportStatNode.generate_execution_codep#  sV   dh,,T222 	0JJJ&&&K))++++OODH----/0 0 0
 N00D0QQ		I&&& 	I--'6FGGI I I*.*= 	= 	=&D&,JJIIK))++++**40000++Itx@@@	BC C C OOI~666#//	4@@@@11$77711$777//dCCC!!)^<<<<##I...**4000t$$$$$r6   N)rK   rp   rq   r   r	  r   rw   r   r\   r6   r4   r	  r	  .#  sS         *KKD D D&! ! !F% % % % %r6   r	  c                       e Zd ZdZdZdS )ParallelNodez4
    Base class for cython.parallel constructs.
    N)rK   rp   rq   r   r   r\   r6   r4   r
  r
  #  s          KKKr6   r
  c                   l    e Zd ZdZddgZdZdZdZdZdZ	dZ
ej        ej        ej        fZej        ej        ej        fZej        ej        ej        fZdZ fdZd Zd	 Zd
 Zd Zd Zd%dZd Z d Z!d Z"d Z#d&dZ$d Z%d Z&d Z'd Z(d'dZ)d Z*d Z+d Z,d Z-	 d(dZ.dZ/dZ0d e/d!e0d"Z1d# Z2d$ Z3 xZ4S ))ParallelStatNodea  
    Base class for 'with cython.parallel.parallel():' and 'for i in prange():'.

    assignments     { Entry(var) : (var.pos, inplace_operator_or_None) }
                    assignments to variables in this parallel section

    parent          parent ParallelStatNode or None
    is_parallel     indicates whether this node is OpenMP parallel
                    (true for #pragma omp parallel for and
                              #pragma omp parallel)

    is_parallel is true for:

        #pragma omp parallel
        #pragma omp parallel for

    sections, but NOT for

        #pragma omp for

    We need this to determine the sharing attributes.

    privatization_insertion_point   a code insertion point used to make temps
                                    private (esp. the "nsteps" temp)

    args         tuple          the arguments passed to the parallel construct
    kwargs       DictNode       the keyword arguments passed to the parallel
                                construct (replaced by its compile time value)
    r   num_threadsNFr   c                      t          t          |           j        |fi | |                    d          pi | _        t                      | _        i | _        g | _        d S )Nrw  )	rh   r
  r   r'  rw  r   seen_closure_varsprivatesassigned_nodesr  s      r4   r   zParallelStatNode.__init__#  sk    .%%.s==f=== "::m44: "%
  !r6   c                 ~   | j                             |           d | _        | j        r:g }t	                      }| j        j        D ]}|j        j        |v r"t          | j	        d|j        j        z             |
                    |j        j                   |j        j        dk    r|j        j        s|j        | _        z| j        r)|j        j        dk    r|j        j        s|j        | _        |                    |           || j        _        	 | j                            |          | _        n8# t           $ r$}t          | j        j	        d           Y d }~nd }~ww xY wi | _        | j                                        D ]8\  }}|| j        vrt          | j	        d|z             't'          | ||           9d S )Nz$Duplicate keyword argument found: %sr
  	chunksizez=Only compile-time values may be supplied as keyword argumentszInvalid keyword argument: %s)r   r   r
  r}   r   r  r   r   r   r3   r   r   	is_pranger
  r  r9  	Exceptionrg   valid_keyword_argumentsr   )r   r   pairsseendictitemrw  r   r  s           r4   r   z%ParallelStatNode.analyse_declarations#  s   	&&s+++; 	E55D K7 + +<%--$($JX\M_$_```+,,,<%66#>1 :+3>(^ +(:k(I(I#>1 8)1LL*****/DK'H"k<<SAA H H Hdko (G H H H H H H H HH DK{((** 	' 	'GB555dh > CDDDDb#&&&&		' 	's   D3 3
E!=EE!c                 @   | j         r| j                             |          | _         | j        r| j                            |          | _        | j                            |          | _        |                     |           | j         | j        r.| j        j         "| j        j        st          | j        d           ny| j        r"| j        j        st          | j        d           nP| j         j	        j
        r?| j         j        r3| j                             |          dk    rt          | j        d           | j                                         r| j         j	        j        r=| j                             t           j        |                              |          | _         | S )Nz-num_threads already declared in outer sectionz;num_threads must be declared in the parent parallel sectionr   z.argument to num_threads must be greater than 0)r
  rw   r
  r   analyse_sharing_attributesparentr
  r   r3   r]  r  r   r9  r5	  ro  r  r   r  rR  r   s     r4   rw   z$ParallelStatNode.analyse_expressions$  s    	I#/CCCHHD> 	E!^??DDDNI11#66	'',,,'{ Rt{6B4;K`Bdh OPPPP RT[%: Rdh ]^^^^"'. R$/R$77<<AAdh PQQQ#--// D43C3H3T D#'#3#=#=)3$0 $00>s0C0C  r6   c                    | j                                         D ]i\  }\  }}| j        r&| j        s|| j        j         v rt          |d           5| j        s|rt          |d           Od}|                     ||||           jdS )z
        Analyse the privates for this block and set them in self.privates.
        This should be called in a post-order fashion during the
        analyse_expressions phase
        z0Cannot assign to private of outer parallel blockz*Reductions not allowed for parallel blocksTN)rw  rg   r
  is_parallelr
  r   propagate_var_privatization)r   r   r  r3   rV  lastprivates         r4   r
  z+ParallelStatNode.analyse_sharing_attributes)$  s     !% 0 6 6 8 8 	J 	JE9C~ d&6  DK333#QRRR> b cGHHH K,,UC[IIII%	J 	Jr6   c                    ||f| j         |<   |j        j        rt          |d           dS | j        rI| j        s|| j        j        vr| j        j        }n| j        }|r |s|r|                    ||||           dS dS dS dS )a
  
        Propagate the sharing attributes of a variable. If the privatization is
        determined by a parent scope, done propagate further.

        If we are a prange, we propagate our sharing attributes outwards to
        other pranges. If we are a prange in parallel block and the parallel
        block does not determine the variable private, we propagate to the
        parent of the parent. Recursion stops at parallel blocks, as they have
        no concept of lastprivate or reduction.

        So the following cases propagate:

            sum is a reduction for all loops:

                for i in prange(n):
                    for j in prange(n):
                        for k in prange(n):
                            sum += i * j * k

            sum is a reduction for both loops, local_var is private to the
            parallel with block:

                for i in prange(n):
                    with parallel:
                        local_var = ... # private to the parallel
                        for j in prange(n):
                            sum += i * j

        Nested with parallel blocks are disallowed, because they wouldn't
        allow you to propagate lastprivates or reductions:

            #pragma omp parallel for lastprivate(i)
            for i in prange(n):

                sum = 0

                #pragma omp parallel private(j, sum)
                with parallel:

                    #pragma omp parallel
                    with parallel:

                        #pragma omp for lastprivate(j) reduction(+:sum)
                        for j in prange(n):
                            sum += i

                    # sum and j are well-defined here

                # sum and j are undefined here

            # sum and j are undefined here
        z9Memoryview slices can only be shared in parallel sectionsN)	r

  r]  r  r   r
  r
  r
  rw  r
  )r   r  r3   rV  r
  r
  s         r4   r
  z,ParallelStatNode.propagate_var_privatizationC$  s    j !#K0e:( 	#RSSSF> 
	P# %T[5L(L(L+  P2 P P225#r;OOOOO
	P 
	PP P P Pr6   c                    | j         r| j                             ||          S |j        | j        v r|j        S |j                            |j        d          }| j                            |j                   | j                            |           | j        	                    ||j        f           |
                    |d|j        d           ||_        dS )zo
        Helper function that allocate a temporary for a closure variable that
        is assigned to.
        Tr4  r5  N)r
  _allocate_closure_tempr  r	
  r  r  r]  r   modified_entriesr  rP   )r   rU   r  r  s       r4   r
  z'ParallelStatNode._allocate_closure_temp$  s    
 ; 	C;55dEBBB;$000;,,UZ>> 	""5;///""5)))$$eU[%9:::

4555r6   c                 T   d}t          | j                                                  D ]~\  }\  }}|st|r||k    rl|j                                        }|rQ|r|                    d           d}|                    |j        d|j                            |          d           d S )NTz4/* Initialize private variables to invalid values */Fr4  r5  )sortedr

  rg   r]  invalid_valuerP   r  r.  )r   rU   excluders  r  rV  r
  r!
  s           r4   initialize_privates_to_nanz+ParallelStatNode.initialize_privates_to_nan$  s    (.t}/B/B/D/D(E(E 
	S 
	S$E$B 	Sw 	S%7*:*: %
 8 8 : :  S &

 $7 8 8 8 %JJU[[[-2Z-A-A--P-P-P-P R S S S
	S 
	Sr6   c                     | j         }|j        j        }||j        _        |                    |           ||j        _        |                                S r   )1begin_of_parallel_control_block_point_after_declsr  ownerr-  r   )r   rU   r  r   r&
  s        r4   evaluate_before_blockz&ParallelStatNode.evaluate_before_block$  sL    B !%%a(((!{{}}r6   c                 z    | j         3|                    d|                     || j                   z             dS dS )zS
        Write self.num_threads if set as the num_threads OpenMP directive
        Nz num_threads(%s))r
  r  r'
  r   s     r4   put_num_threadsz ParallelStatNode.put_num_threads$  sF     'HH'$*D*DT4K[*\*\\]]]]] ('r6   c                     g | _         t          | j                  D ]&}|j        s|j        r|                     ||           'dS )a  
        If a variable is in a scope object, we need to allocate a temp and
        assign the value from the temp to the variable in the scope object
        after the parallel section. This kind of copying should be done only
        in the outermost parallel section.
        N)r
  r 
  rw  from_closurer  r
  )r   rU   r  s      r4   declare_closure_privatesz)ParallelStatNode.declare_closure_privates$  s\     !#D,-- 	9 	9E! 9U%5 9++D%888	9 	9r6   c                     | j         D ]K\  }}|                    |d|j        d           |j                            |j                   ||_        LdS )z
        Release any temps used for variables in scope objects. As this is the
        outermost parallel block, we don't need to delete the cnames from
        self.seen_closure_vars.
        r4  r5  N)r
  rP   r  r  r  )r   rU   r  r~  s       r4   release_closure_privatesz)ParallelStatNode.release_closure_privates$  sg     &*%: 	) 	)!E>JJ^^^U[[[ABBBN''444(EKK	) 	)r6   r\   c                    | j         }d| _         | j        rK|j                                        x| _        }g g }}t          |          D ]>\  }}|j        s|j        r|                    |           )|                    |           ?|r+|	                    dd
                    |          z             |r+|	                    dd
                    |          z             | j        rzt          j        g}	| j        r7|	                    | j                   |	                    d| j        z             |	                    dd
                    |	          z             dS dS dS )z
        Make any used temporaries private. Before the relevant code block
        code.start_collecting_temps() should have been called.
        Nz private(%s)r    firstprivate(%s)z private(%s, %s, %s)z shared(%s))privatization_insertion_pointr
  r  stop_collecting_tempsr   r 
  ro  r  r  r  r   breaking_label_usedr
   parallel_whyerror_label_usedrF	  parallel_excpos_info)
r   rU   exclude_tempsr   r   r

  firstprivatesr  r]  shared_varss
             r4   privatize_tempsz ParallelStatNode.privatize_temps$  s   
 .-1* 	>!%!E!E!G!GGDJ&("mH$Umm * *
d# *t'> *!((....OOD)))) <ntyy':'::;;; F)DIIm,D,DDEEE' >%23( B&&t'8999EE04=@AAAmdii&<&<<=====)	> 	>> >r6   c                     | j         rN| j        sI|                    d           t          | j                  D ]!\  }}|                    ||d           d S d S d S )Nz/* Clean up any temporaries */Fr`  )r
  is_nested_prangerP   r 
  r   r  )r   rU   r  r]  s       r4   cleanup_tempszParallelStatNode.cleanup_temps$  s     	CD$9 	CJJ7888$TZ00 C C
d&&tTE&BBBB	C 	C 	C 	CC Cr6   c                 n   |                                 | _        |                                | _        |j        | _        |                    d          |_        |                                 |                                | _	        |                                | _
        |                     |           dS )a  
        Sets up a block that surrounds the parallel block to determine
        how the parallel section was exited. Any kind of return is
        trapped (break, continue, return, exceptions). This is the idea:

        {
            int why = 0;

            #pragma omp parallel
            {
                return # -> goto new_return_label;
                goto end_parallel;

            new_return_label:
                why = 3;
                goto end_parallel;

            end_parallel:;
                #pragma omp flush(why) # we need to flush for every iteration
            }

            if (why == 3)
                goto old_return_label;
        }
        returnrM  N)rf  rh  rW  r`  r  r	  r  r	  rL   %begin_of_parallel_control_block_pointr%
  "undef_builtin_expect_apple_gcc_bugr   s     r4   !setup_parallel_control_flow_blockz2ParallelStatNode.setup_parallel_control_flow_block %  s    4  $3355#3355 $ 1 NNN99595I5I5K5K2AEAUAUAWAW>//55555r6   c                 8    |                                 | _        dS )a  
        Each OpenMP thread in a parallel section that contains a with gil block
        must have the thread-state initialized. The call to
        PyGILState_Release() then deallocates our threadstate. If we wouldn't
        do this, each with gil block would allocate and deallocate one, thereby
        losing exception information before it can be saved before leaving the
        parallel section.
        N)rL   begin_of_parallel_blockr   s     r4   begin_parallel_blockz%ParallelStatNode.begin_parallel_block%%  s     (,';';'='=$$$r6   c                    | j         }d| _         | j        r>|}|                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d           |                    d	           |                                 |                    d           |                     |           |                                 |                    d
           |                    d           |                    d           dS dS )a  
        To ensure all OpenMP threads have thread states, we ensure the GIL
        in each thread (which creates a thread state if it doesn't exist),
        after which we release the GIL.
        On exit, reacquire the GIL and release the thread state.

        If compiled without OpenMP support (at the C level), then we still have
        to acquire the GIL to decref any object temporaries.
        N#ifdef _OPENMPTrh  Py_BEGIN_ALLOW_THREADS#endif /* _OPENMP */Py_END_ALLOW_THREADSrU  z{
z#ifndef _OPENMPz}
)rE
  r5
  rP   rj  put_safer>
  rs  )r   rU   
begin_codeend_codes       r4   end_parallel_blockz#ParallelStatNode.end_parallel_block0%  s[    1
'+$  	3H-...%%t%<<<56663444NN+,,,NN1222NN7###e$$$##%%%NN1222x(((,,...NN,---e$$$NN122222%	3 	3r6   c                    |                                 }|                                 }d| _        d| _        d| _        g | _        |                                }|D ]5}|                    |          r| j        p
||j        k    | _        d| _        6| j        r|                    |           t          |          D ]\  }}|                    |          s||j        k    }|
                    |           |r|sN||j        k    rd| _        |                     |           |                    dt          j        |dz   fz             | j        r| j        r|s|                    |           |                    |           | j        rz| j        r1| j        r*|
                    |           |                     |           |
                    |           |r-| j        r(|                    dt          j        z             dS dS dS dS )a  
        Trap any kind of return inside a parallel construct. 'should_flush'
        indicates whether the variable should be flushed, which is needed by
        prange to skip the loop. It also indicates whether we need to register
        a continue (we need this for parallel blocks, but not for prange
        loops, as it is a direct jump there).

        It uses the same mechanism as try/finally:
            1 continue
            2 break
            3 return
            4 error
        FTz%s = %d;r   #pragma omp flush(%s)N)r  any_label_usedr3
  r5
  parallel_private_tempsrj	  r  r  r  r  r  r  fetch_parallel_exceptionrP   r
   r4
  r
  save_parallel_varsr  )	r   rU   should_flushsave_lastprivates_labeldont_return_label
all_labelsr  r  is_continue_labels	            r4   trap_parallel_exitz#ParallelStatNode.trap_parallel_exitQ%  sn    #'.."2"2 NN,,##(  %&(#((**
   	+ 	+Eu%% +,0,D -I,1T5H,H (&*# 	-MM+,,,!*-- 	1 	1HAu??5))  %)< <NN5!!!  F%6 FD,,,,0D)11$777

:)<a!e(DDEEE( 1T^ 1%156666/0000 		Q~ .$": .6777''---NN,--- Q 8 Q!!"9F<O"OPPPPP		Q 		QQ Q Q Qr6   c                    d| j         z  }|                    d|z             t          xj         dz  c_         |                                 | j        }d}t          | j                                                  D ]Z\  }\  }}|r|j        j	        r|j        j
        r9|j        j        s-|j        j        d         r|j                            d          }n|j                                        }d|z  }	|j        }
|dz  }|j                                        }|rd|j                            |          z   }nd}|                    |d	|	|d
           | j                            |	|
|j        f           |j        j
        r2|j                            t/          j        dd                     d|
z  }
|                    |	d|
d
           \|                                 dS )a  
        The following shenanigans are instated when we break, return or
        propagate errors from a prange. In this case we cannot rely on
        lastprivate() to do its job, as no iterations may have executed yet
        in the last thread, leaving the values undefined. It is most likely
        that the breaking thread has well-defined values of the lastprivate
        variables, so we keep those values.
        z__pyx_parallel_lastprivates%dz#pragma omp critical(%s)r   r   
cpp_localsr   z__pyx_parallel_temp%dr4  rC   r5  r6  r7  r8  N)critical_section_counterr  r
  r	  rA
  r 
  r

  rg   r]  ro  r  is_fake_referencer   r   cpp_optional_declaration_coder  r  r!
  r.  rP   rS
  r  ry  r   r  r	  )r   rU   section_namer   
temp_countr  rV  r
  	type_decl
temp_cnameprivate_cnamer!
  r  s                r4   rU
  z#ParallelStatNode.save_parallel_vars%  s    79VV4|CDDD11Q6116
(.t}/B/B/D/D(E(E 	A 	A$E$B %*"8 z& @uz/K @PTP`PklxPy @!JDDRHH		!J==??	0:=J!KM!OJ!J4466M uz33MBBBGG)))ZZ>???'..
M5:/VWWWz& R 11+,=?OPPR R R AM QJJZZZ?@@@@ 	r6   c                    |                                  |                    d           |                    dt          j        z             |                    dt          j        z             |                    d| j        z             t          t          | j	        | j
                   }d|j        _        |                    dt          |          z             |                    t          j        t                     |                    d           |                                 |                                 dS )	a^  
        As each OpenMP thread may raise an exception, we need to fetch that
        exception from the threadstate and save it for after the parallel
        section where it can be re-raised in the master thread.

        Although it would seem that __pyx_filename, __pyx_lineno and
        __pyx_clineno are only assigned to under exception conditions (i.e.,
        when we have the GIL), and thus should be allowed to be shared without
        any race condition, they are in fact subject to the same race
        conditions that they were previously when they were global variables
        and functions were allowed to release the GIL:

            thread A                thread B
                acquire
                set lineno
                release
                                        acquire
                                        set lineno
                                        release
                acquire
                fetch exception
                release
                                        skip the fetch

                deallocate threadstate  deallocate threadstate
        Trh  rQ
  rq  z'__Pyx_ErrFetchWithState(&%s, &%s, &%s);%s = %s; %s = %s; %s = %s;r]  N)r	  rj  r  r
   parallel_exc_typerP   r6
  r   r+  parallel_pos_infor7
  r  uses_error_indicatorr  r  r   rs  r	  r   rU   r7
  s      r4   rT
  z)ParallelStatNode.fetch_parallel_exception%  s#   6 	T2221F4LLMMM

633	5 	5 	5 	

<t?PPQQQ#d4dmDDE.2+

/%//ABBB0.AAA

	 	 	 	$$&&&r6   c                    |                                  |                    d           |                    t          j        t
                     |                    d| j        z             t          t          | j
        | j                   }|                    dt          |          z             |                                 |                                 dS )zRe-raise a parallel exceptionTrh  r$  rg
  N)r	  rj  r8  r
   rh
  r   rP   r6
  r   r+  r7
  ri
  r  rs  r	  rk
  s      r4   restore_parallel_exceptionz+ParallelStatNode.restore_parallel_exception%  s    T2221>BBB

;d>OOPPP#dmT-CDDE

/%//ABBB$$&&&r6   c                 X    |                     | j        | j        | j        fz              dS )z
        Restore all old labels. Call this before the 'else' clause to for
        loops and always before ending the parallel control flow block.
        N)rm	  rh  r	  r`  r   s     r4   restore_labelszParallelStatNode.restore_labels&  sG    
 	D0D4I484H4J J 	K 	K 	K 	K 	Kr6   c                 F   | j         }d| _         d| _        | j        4| j                            |           | j                            |           | j        r|                    d| j        z             |                    d| j        z             |                    dt          j
        z             |                    d           |                    dt          j        z             |                    d           |r| j        }n| j        }|r|                    dt          j        z             |                    d	t          j        z             |                    dt          j        z             | j        D ]-\  }}}	|	j        rd
|z  }|                    |d|d           .|                    dt          j        z             |r/|                    d           |                    |j                   |r/|                    d           |                    |j                   |r/|                    d           |                    |j                   | j        rc|j                            t.                     |                    d           |                     |           |                    |j                   |                    d           |                    d           |                                 |                     |           dS )a  
        This ends the parallel control flow block and based on how the parallel
        section was exited, takes the corresponding action. The break_ and
        continue_ parameters indicate whether these should be propagated
        outwards:

            for i in prange(...):
                with cython.parallel.parallel():
                    continue

        Here break should be trapped in the parallel block, and propagated to
        the for loop.
        Nz*const char *%s = NULL; int %s = 0, %s = 0;z,PyObject *%s = NULL, *%s = NULL, *%s = NULL;rv  zg/* This may have been overridden by a continue, break or return in another thread. Prefer the error. */z%s = 4;r]  zint %s;rC	  r8  r4  r5  r  z    case 1: z    case 2: z    case 3: z    case 4:)rA
  r%
  r
  rk  r:  r5
  rP   ri
  r6
  r
   rh
  r4
  rR
  r3
  rS
  r  r  r  r  r  r  r   ry  r  rm
  r  r	  "redef_builtin_expect_apple_gcc_bug)
r   rU   break_	continue_return_r   rR
  rd
  re
  r)	  s
             r4   end_parallel_control_flow_blockz0ParallelStatNode.end_parallel_control_flow_block&  s0    6592AE>'33D999''---   
	GG@4CYYZZZGGBTEVVWWWJJf668 8 8JJ Q R R RJJy6#66777JJ    	6!0NN!5N #	GGI 33444GGI 33444JJf113 3 3 9=8S E E4
M9) P!BZ!OJ




CDDDDJJ)<<=== 3(((d1222 0(((d./// 1(((d/000$ 0 112PQQQ

=)))//555d.///JJsOOOJJ   	//55555r6   z((defined(__APPLE__) || defined(__OSX__))zQ(defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))rX  r  rW  c                 L    | j         s|                    | j                   dS dS )z]
        A bug on OS X Lion disallows __builtin_expect macros. This code avoids them
        N)r
  undef_builtin_expectredef_conditionr   s     r4   rB
  z3ParallelStatNode.undef_builtin_expect_apple_gcc_bugd&  s5     { 	<%%d&:;;;;;	< 	<r6   c                 L    | j         s|                    | j                   d S d S r   )r
  redef_builtin_expectrx
  r   s     r4   rq
  z3ParallelStatNode.redef_builtin_expect_apple_gcc_bugk&  s3    { 	<%%d&:;;;;;	< 	<r6   r   )r\   rM  )FFF)5rK   rp   rq   r   r   r   r
  r=
  r5
  r
  r
  r
   rh
  parallel_exc_valueparallel_exc_tbr6
  parallel_filenameparallel_linenoparallel_clinenori
  r	  r	  r	  r7
  r^
  r   r   rw   r
  r
  r
  r#
  r'
  r)
  r,
  r.
  r;
  r>
  rC
  rF
  rO
  r[
  rU
  rT
  rm
  ro
  ru
  buggy_platform_macro_conditionhave_expect_conditionrx
  rB
  rq
  rr   rs   s   @r4   r
  r
  #  s        < =)KDIKI 	 !L 	  	H  !! ! ! ! !"$' $' $'L  2J J J4EP EP EPN  ,S S S S
 
 
^ ^ ^9 9 9	) 	) 	)> > > ><C C C#6 #6 #6J	> 	> 	>3 3 3BAQ AQ AQ AQF3 3 3j, , ,\  K K K @EP6 P6 P6 P6f &P"[&D&D&DF[F[F[\O< < << < < < < < <r6   r
  c                   2     e Zd ZdZdgZdZ fdZd Z xZS )ParallelWithBlockNodezI
    This node represents a 'with cython.parallel.parallel():' block
    r
  Nc                     t          t          |                               |           | j        rt	          | j        d           d S d S )Nz=cython.parallel.parallel() does not take positional arguments)rh   r
  r   rR   r   r3   r  s     r4   r   z*ParallelWithBlockNode.analyse_declarationsy&  s[    #T**??DDD9 	4$( 3 4 4 4 4 4	4 	4r6   c                    |                      |           |                     |           |                    d           |                    d           | j        rId | j        D             }|                    dd                    t          |                    z             |                                | _        | 	                    |           |                    d           |                    d           |
                                 |                     |           |                     |           |j                                         | j                            |           |                     |           |                     |           |                     |           |                                 |                    |j                  }|                    |j                  }|                    |j                  }|                     |           |                     ||||           |                     |           d S )	NrH
  z#pragma omp parallel c                 4    g | ]}|j         j        |j        S r\   )r]  ro  r  )r   rw  s     r4   r   zAParallelWithBlockNode.generate_execution_code.<locals>.<listcomp>&  s3     3 3 3A v13 3 3 3r6   zprivate(%s)r   r   rJ
  )rr
  rs
  rt
  )r,
  rC
  rP   r  r

  r   r 
  rL   r1
  r)
  r	  rF
  r#
  r  start_collecting_tempsr   r   r[
  r;
  rO
  r	  r  r  r  r  ro
  ru
  r.
  )r   rU   r

  rs
  rr
  rt
  s         r4   r   z-ParallelWithBlockNode.generate_execution_code&  s2   %%d+++..t444

#$$$()))= 	B3 3 3 3 3HHH]TYYvh/?/?%@%@@AAA-1-A-A-C-C*T"""

2

)***!!$'''''-----///	))$///%%%T"""%%%OOD$788	!122//$"344D!!!,,T&7@5< 	- 	> 	> 	> 	%%d+++++r6   )	rK   rp   rq   r   r
  r
  r   r   rr   rs   s   @r4   r
  r
  p&  s`           -oK4 4 4 4 4$, $, $, $, $, $, $,r6   r
  c                        e Zd ZdZg dZdxZxZxZZdxZ	xZ
ZdZdZdZg dZ fdZ fdZ fdZd	 Zd
 Zd Z xZS )ParallelRangeNodez
    This node represents a 'for i in cython.parallel.prange():' construct.

    target       NameNode       the target iteration variable
    else_clause  Node or None   the else clause of this loop
    )r   r;  r7  rR   r
  r
  NT)scheduler  r
  r
  c                 r     t          t          |           j        |fi | t          |          | _        d S r   )rh   r
  r   r  r  )r   r3   rS   rJ   s      r4   r   zParallelRangeNode.__init__&  s<    /&&/<<t<<<$S))r6   c                 f   t          t          |                               |           | j                            |           | j        | j                            |           | j        rt          | j                  dk    rt          | j	        d           d S t          | j                  dk    r| j        \  | _
        nGt          | j                  dk    r| j        \  | _        | _
        n| j        \  | _        | _
        | _        | j        dvrt          | j	        d| j                   d S d S )Nr,   z0Invalid number of positional arguments to pranger   r)   )Nstaticdynamicguidedruntimez%Invalid schedule argument to prange: )rh   r
  r   r;  r[  r7  rR   rG   r   r3   rF  rW   r  r
  r  s     r4   r   z&ParallelRangeNode.analyse_declarations&  s   &&;;C@@@..s333'11#666y 	C	NNQ..$(NOOOFty>>QJDII^^q  $(I!DJ		/3y,DJ	49= PPP$((XYYYYY QPr6   c                 J   |j         }| j         rd|_         | j        t          | j        d           | S | j                            |          | _        | j        j        j        sJ| j        j        j        s't          | j        j        d| j        j        z             t          j	        | _
        n| j        j        | _
        d| _        | j        | j        | j        f}t          || j                  D ]\  }}||                    |           |j        j        st          |j        d|z             A|j        s&|                    |          }t'          | ||           t          j        | j
        |j                  | _
        | j        | j                            |          | _        t/          | j        dd           }|r | j        j        d f| j        | j        j        <   t5          t6          |                               |          }|j        r|j        st          |j        j        d           n{|j        dk    rt          |j        j        d	           nU|j        j        j        rD|j        j        r8|j                            |          d
k    rt          |j        j        d           |j                             t          j!        |                              |          |_        |j         r||_         |j"        o|j"        j#        |_$        |j$        r|}|j"        r&|j"        j#        r|j"        }|j"        r|j"        j#        |j        %                    |j                   |j&        %                    |j&                   |j'        (                    |j'                   |S )NTz/prange() can only be used as part of a for loopzMust be of numeric type, not %s)rW   rF  r  z%s argument must be numericr  z$Must provide schedule with chunksizer
  z,Chunksize not valid for the schedule runtimer   zChunksize must not be negative))r  r;  r   r3   rx   r]  r^  ro  r   rs  
index_typer  rW   rF  r  r+  rv   r   rR  r   r  r7  rw   r   rw  r  rh   r
  r
  r
  r  r9  r  r  r
  r
  r=
  r   r

  r
  rF	  )	r   r   r	  start_stop_steprT   rk   r*  r
  rJ   s	           r4   rw   z%ParallelRangeNode.analyse_expressions&  s   I	: 	CI;$(MNNNKk66s;;{* 
	/ ;#/ Ldko7$+:JJL L L ):DOO"k.DO -
*di:otz:: 	0 	0JD$""3'''y+ $($AD$HIII ...s33DD$--- #-"@OTY#0 #0 '#/CCCHHD t{GT:: 	H26+/42GDT[./&--AA#FF> 	@= 	Ldn(<> > > >)++dn(DF F F F.%, L.+L.33C88A==dn(*JKKK!^55%s, ,,:N3,?,? N : 	"!CI $ E0E  	>F- 'FM$; ' - 'FM$; ' %%d&6777O""4=111!(()<===r6   c                     d}| j         | j        | j        | j        f}t	          ||          D ]+\  }}|$|j        j        rt          |j        d|z             ,d S )N)rW   rF  r  r;  z6%s may not be a Python object as we don't have the GIL)	rW   rF  r  r;  r+  r]  ro  r   r3   )r   r   r  nodesrk   rT   s         r4   r   zParallelRangeNode.nogil_check+'  s    1
DIty$+=eU++ 	C 	CJD$DI$9dh !;=A!B C C C	C 	Cr6   c                    |                      |           | j        j        j        }|| j        j                                        d}| j        | j        | j        f}d}t          || j
        |          D ]U\  }}}||}	nE|j        r|                                }	n)|                    |           |                                }	|	||<   V|j                            | j        d          |d<   |j                            | j        d          |d<   | j        ?| j                                        r&| j        j        dk    rt)          |j        d           nK|d	                                         rt/          |d	                   dk    r|                    d
|z             |                     |           |                    d|z             |                    d|z             |                                 |                     ||           |                                 |                     |           | j        r| j        r"|                     dtB          j"        z             |                                 |                    d           | j        #                    |           |                                 | $                    |           || j%        fz   D ].}
|
*|
&                    |           |
'                    |           /|j        (                    |d                    |j        (                    |d                    | )                    |           dS )a,  
        Generate code in the following steps

            1)  copy any closure variables determined thread-private
                into temporaries

            2)  allocate temps for start, stop and step

            3)  generate a loop that calculates the total number of steps,
                which then computes the target iteration variable for every step:

                    for i in prange(start, stop, step):
                        ...

                becomes

                    nsteps = (stop - start) / step;
                    i = start;

                    #pragma omp parallel for lastprivate(i)
                    for (temp = 0; temp < nsteps; temp++) {
                        i = start + step * temp;
                        ...
                    }

                Note that accumulation of 'i' would have a data dependency
                between iterations.

                Also, you can't do this

                    for (i = start; i < stop; i += step)
                        ...

                as the '<' operator should become '>' for descending loops.
                'for i from x < i < y:' does not suffer from this problem
                as the relational operator is known at compile time!

            4) release our temps and write back any private closure variables
        )r;  r  )r  r  r  NFr  nstepsr   z!Iteration with step 0 is invalid.r  zif (((%(step)s) == 0)) abort();zS%(nsteps)s = (%(stop)s - %(start)s + %(step)s - %(step)s/abs(%(step)s)) / %(step)s;zif (%(nsteps)s > 0)if (%s < 2)z
/* else */)*r,
  r;  r  r  r]  r  rW   rF  r  r+  r  r   r  r-  r   r  r  r
  r  r  r   r3   isdigitr  rP   rC
  r	  generate_loopr	  ro
  r7  r3
  r  r
   r4
  r   ru
  r
  rk  r:  r  r.
  )r   rU   target_index_cnamefmt_dictr
  defaultsrT   rk   rK  r   r  s              r4   r   z)ParallelRangeNode.generate_execution_code3'  sd   P 	%%d+++ "[.4
 );+BBDD
 
 *di: #&
H#M#M 		$ 		$D$|  '88::--d333#HTNN44T_eLL!^99$/5QQ 9 TY%B%B%D%D IbfgIgIg$(?@@@@&!))++ 	Es8F3C/D/D/I/IJJ88CDDD..t444 	

hkssttt 	

(834444***D!!! 	' >)<<===JJ|$$$44T:::NN 	,,T222 $t~&77 	& 	&D++D111%%%##HSM222##HX$6777%%d+++++r6   c                    | j         r|                    d           n|                    d           | j        s;|                    d           |                                | _        | j        j        }n|                    d           |                                | _        | j        }|                    d           |                    d           |                                 |                     |           | j         r|                    d           n|                    d           |                    d           t          | j
                                                  D ]\  }\  }}|rX|dv rT|| j        j        k    rD|j        j        rt!          | j        d           @|                    d	|d
|j        d           b|| j        j        k    r;|                    d|j        z             |                    d|j        z             |j        j        s(|rd}nd}|                    d|d|j        d           | j        rH| j        rd|                     || j                  z  }nd}|                    d| j        |d           |                     |           |                    d           |                    d           |                    d|z             |                                 |                                }	|                                 |                    d|z             |                     || j        j                   | j        r | j         s|j                                         | j                            |           |                     |d           | j        r| j         s|                     |           | j        r"|	                    dt>          j         z             |!                                 |!                                 | j        r+| "                    |           |!                                 d S d S )Nz#if 0rH
  z#pragma omp forz#pragma omp parallelr   rJ
  z+*-&^|z#Python objects cannot be reductionsz reduction(:rW  r0
  z lastprivate(%s)r
  rc  rC   rX  z, %sz
 schedule(z,for (%(i)s = 0; %(i)s < %(nsteps)s; %(i)s++)z=%(target)s = (%(target_type)s)(%(start)s + %(step)s * %(i)s);)r"
  T)rV
  r
  )#r=
  rP   r
  r  rL   r1
  r
  r	  rF
  r 
  r

  rg   r;  r  r]  ro  r   r3   r  r
  r
  r'
  r)
  r#
  r  r
  r   r   r[
  r;
  r3
  r
   r4
  r	  rO
  )
r   rU   r
  reduction_codepointr  rV  r
  rc  r
  guard_around_body_codepoints
             r4   r
  zParallelRangeNode.generate_loop'  s     	)JJwJJ'((( 	(HH&'''151E1E1G1GD."&+"KHH+,,,151E1E1G1GD."&"DJJrNNNJJ-... %%d+++$ -

7####

+,,,HH&'''(.t}/B/B/D/D(E(E 	A 	A$E$B AbHnn$+2C)C)C:) I$($IJJJJ (+++79rr5;;; GI I I I DK---HH05;>???HH/%+=>>>z- A" ,"/"+HHH'''5;;;?@@@= 	E~ "T%?%?dn%U%UU			HHH$--CDDD0111

2

)***?(JKKK&*&:&:&<&<# 	

RU]]^^^''dk6G'HHH 	4D$9 	4N11333	))$///4888 	'D$9 	'  &&&# 	S (--mf>Q.QRRR 	##D)))NN	 	r6   )rK   rp   rq   r   r   r   r;  r7  rR   rW   rF  r  r
  r  r
  r
  r   r   rw   r   r   r
  rr   rs   s   @r4   r
  r
  &  s             K *.-D-6-K$ED4IEHOOO* * * * *
Z Z Z Z Z(T T T T TlC C Ct, t, t,lb b b b b b br6   r
  c                   6    e Zd ZdZdgZd Zd Zd Zd Zd Z	dS )	CnameDecoratorNodea?  
    This node is for the cname decorator in CythonUtilityCode:

        @cname('the_cname')
        cdef func(...):
            ...

    In case of a cdef class the cname specifies the objstruct_cname.

    node        the node to which the cname decorator is applied
    cname       the cname the node should get
    rT   c                    | j                             |           | j         }t          |t                    r|j        j        d         }t          |t                    | _        t          |t          t          f          }|j
        }| j        rT| j        |_        | j        |_        d|_        |j        r*d|j        v r#|                     |j                  |_        d S d S d S |r| j        x|_        |j        _        d S |j        }| j        |_        | j        dz   |j        _        t&          j        | j        z   |j        _        | j        dz   |j        _        |j        j        |j        j        _        |j        j        |j        _        | j        dz   |_        |j                                        D ]Q\  }}|j        r|                     |j                  |_        |j        r|                     |j                  |_        Rd S )Nr   TrD   _obj_typer  )rT   r   rH   r   r   r  r/  is_functionr  r  r  r  rj  r  r  r  r]  r  rz  r
   typeobj_prefixr{  r  rl  r<  r  r  rg   )r   r   rT   is_struct_or_enumrw  r  rk   r  s           r4   r   z'CnameDecoratorNode.analyse_declarations(  s   	&&s+++yd233 	&9?1%D%dK88&t.C\-RSSJ 	IjAG:ALAF~ =#"7"7!%Q^!<!<= ="7"7 	I%)Z/AGaflllJEjAG%)Z&%8AF"#)#84:#EAF #':#7AF +,6+?AFL("#&"6AM!%c!1E$}2244 I Ie# @'+{{5;'?'?E$% I)-U5G)H)HE&	I Ir6   c                 X    d|v r|                     d          d         }| j        d|S )NrD   r   r  )r~  r  )r   r  s     r4   r  zCnameDecoratorNode.mangleD(  s4    %<<KK$$R(E***ee,,r6   c                 D    | j                             |          | _         | S r   )rT   rw   r   s     r4   rw   z&CnameDecoratorNode.analyse_expressionsJ(  r  r6   c                    | j         r|j        r|j        d         }t          | j        t
                    r| j                            |dd           nWddlm} | j        j	        }|j
        }|j        |_
        |                    ||                                |d           ||_
        | j                            ||           dS )	z=Ensure a prototype for every @cname method in the right placeutility_code_protoFTrQ  r   )
ModuleNode)
definitionN)r
  r  r   rH   rT   r;  r  r   r
  r  r  rj  generate_cfunction_declarationr  r   )r   r   rU   h_coder
  r  r  s          r4   r   z0CnameDecoratorNode.generate_function_definitionsN(  s     	$ 4 	$%&:;F$)W-- $	225T 3 C C C C )(((((	#.99$$&&#	 : % % % $	//T:::::r6   c                 :    | j                             |           d S r   )rT   r   r   s     r4   r   z*CnameDecoratorNode.generate_execution_codeg(  r  r6   N)
rK   rp   rq   r   r   r   r  rw   r   r   r\   r6   r4   r
  r
  (  sv          (K$I $I $IL- - -  ; ; ;20 0 0 0 0r6   r
  aC  
/* Test for GCC > 2.95 */
#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
  #define likely(x)   __builtin_expect(!!(x), 1)
  #define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
  #define likely(x)   (x)
  #define unlikely(x) (x)
#endif /* __GNUC__ */
z1
#define likely(x)   (x)
#define unlikely(x) (x)
Printz
Printing.cPrintOner9	  r&  RaiseExceptionGetExceptionSwapExceptionSaveResetExceptionAddTracebackzR
static PyObject *__Pyx_GetExceptionTuple(PyThreadState *__pyx_tstate); /*proto*/
a1  
static PyObject *__Pyx_GetExceptionTuple(CYTHON_UNUSED PyThreadState *__pyx_tstate) {
    PyObject *type = NULL, *value = NULL, *tb = NULL;
    if (__Pyx_GetException(&type, &value, &tb) == 0) {
        PyObject* exc_info = PyTuple_New(3);
        if (exc_info) {
            Py_INCREF(type);
            Py_INCREF(value);
            Py_INCREF(tb);
            PyTuple_SET_ITEM(exc_info, 0, type);
            PyTuple_SET_ITEM(exc_info, 1, value);
            PyTuple_SET_ITEM(exc_info, 2, tb);
            return exc_info;
        }
    }
    return NULL;
}
)r  implrequiresr\   )
__future__r   r	  r  rQ  r   r   	itertoolsr   r   r   Errorsr   r	   r   r   r   r
   r   r   r   r   r  r   r   r   r   r   r   r   r   r   r    r!   re   r   StringEncodingr   r#   r$   r%   Pythranr&   r'   r(   Utilsr*   r+   r  r  r   longr  r5   r@   r]   r]  r_   ru   r   r   r   r   r  r&  r+  rC  rJ  re  rs  rw  r  r  r  r  r  rG  r%  rO  rf  r|  r  r  r  r  r  r/  r  r  r  r  r)  r/  r  r  r:  r;  r  r  r  r  r  r  rA  r2  r6  rU  r  r  r  r  r   r$  r2  r  r-  r  r  r  r  r  r  r  r  rQ  r  r!  r*  r5  rD  rL  rW  r`  rb  rl  r  r  r  r  r  r  r  r  r  r/	  rV	  r	  r	  rt	  r	  r	  r	  utility_code_for_importsr	  r	  r	  r	  r
  r
  r
  r
  r
  gcc_branch_hintsbranch_prediction_macrosr  r  r  r  r  rH	  r	  r	  traceback_utility_code get_exception_tuple_utility_coder\   r6   r4   <module>r
     s  
 ' & & & & &   8 8 866 8ff 866 8v8%+V85;V8DJF8W]W]8$f828&8EKV8Z`Z`8 #)&8 8>v8 $V	8 28	8 HNv	8
 !&8
 178 8                     Q Q Q Q Q Q Q Q Q Q Q Q Q Q                   2 2 2 2 2 2 2 2: : : : : : : : : : : : : : : : : : : : : : : : : :       ) ) ) ) ) )                   D D D D D D D D D D 0 0 0 0 0 0 0 0 A!MM$KM -.AB 6 6 6  4  4
N 
N 
N 
N 
N 
N 
N 
NK K K K KT K K K4   kO kO kO kO kO6 kO kO kO\(* (* (* (* (*T (* (* (*V: : : : : : : :"  "  "  "  " 4 "  "  " J% % % % %t % % %*%! %! %! %! %!X %! %! %!P    d   2         /      Fi i i i i i i i$- - - - -O - - -i i i i i< i i ii i i i i'D i i i+k +k +k +k +k? +k +k +k\oM oM oM oM oM/ oM oM oMd
f 
f 
f 
f 
f? 
f 
f 
fe! e! e! e! e!4 e! e! e!P	! 	! 	! 	! 	!D 	! 	! 	!    D   e e e e e- e e eN; ; ; ; ;m ; ; ;B    -   ,z z z z z z z zz	 	 	 	 	= 	 	 	       $$; $; $; $; $;M $; $; $;NZ Z Z Z Z} Z Z ZpH pH pH pH pH( pH pH pHf* * * * *H * * *ZX! X! X! X! X!() X! X! X!vR. R. R. R. R.8 R. R. R.j(6 (6 (6 (6 (6x (6 (6 (6V    8   BY. Y. Y. Y. Y.(I Y. Y. Y.xi i i i i; i i iX< < < < <D < < <         D      @	 @	 @	 @	 @	k @	 @	 @	FT* T* T* T* T*[ T* T* T*n 3< 3< 3< 3< 3<w 3< 3< 3<l    #   
! ! ! ! !< ! ! !
    <   
u  u  u  u  u 7 u  u  u po o o o o o o od	 	 	 	 	8Y 	 	 	r! r! r! r! r!\ r! r! r!jP	% P	% P	% P	% P	%L P	% P	% P	%f! ! ! ! !8 ! ! !8#! #! #! #! #!H #! #! #!L       $    8   $=! =! =! =! =!8 =! =! =!@", ", ", ", ",X ", ", ",Jy  y  y  y  y > y  y  y x	h  h  h  h  h ^ h  h  h V/  /  /  /  / ^ /  /  / dDQ DQ DQ DQ DQN DQ DQ DQN@& @& @& @& @&H @& @& @&F& & & & &8 & & &R5 5 5 5 5( 5 5 5p	 	 	 	 	8 	 	 	I I I I Il I I I, , , , ,H , , , + + + + +x + + + p& p& p& p& p&X p& p& p&f& & & & &H & & &DS S S S Sh S S S>/& /& /& /& /&X /& /& /&d-, -, -, -, -, -, -, -,`&! &! &! &! &!4 &! &! &!R!! !! !! !! !!X !! !! !!H,, ,, ,, ,, ,,X ,, ,, ,,^	 	 	 	 	v 	 	 	9, 9, 9, 9, 9,Hh 9, 9, 9,xY Y Y Y YD Y Y Yx9  9  9  9  9 4 9  9  9 x* * *]! ]! ]! ]! ]!Xx ]! ]! ]!@, , , , ,N , , ,? ? ? ? ?~ ? ? ?(l, l, l, l, l,h l, l, l,^d d d d d8 d d dN         >      Be, e, e, e, e, e, e, e,Pu! u! u! u! u!t u! u! u!p^+ ^+ ^+ ^+ ^+ ^+ ^+ ^+B	    0   Q Q Q Q Q) Q Q Qh] ] ] ] ]( ] ] ]84 4 4 4 4K 4 4 4( ( ( [ZZZ6   FE	    4*, *, *, *, *,h *, *, *,ZQ, Q, Q, Q, Q,( Q, Q, Q,ha% a% a% a% a% a% a% a%H    4   S< S< S< S< S<x S< S< S<l3, 3, 3, 3, 3,, 3, 3, 3,le e e e e( e e ePZ0 Z0 Z0 Z0 Z0 Z0 Z0 Z0F  
   0/FF 3K3JMM  "9!89Ln!]!] ,[,-=~NN 4[4^^TT 5k5o~VV 6{67K^\\ 00PP  $/;$ ))5$+ $+ $+      r6   