
    ڏDj2                       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 dlZd dlmZ d dl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- d%d&hZ. G d' d(ej^                        Z0d) Z1d* Z2d+ Z3 G d, d-e4      Z5 G d. d/e4      Z6 G d0 d1      Z7d2 Z8e8 G d3 d4             Z9 G d5 d6e9      Z: G d7 d8      Z; G d9 d:e9      Z< G d; d<e9      Z= G d= d>e=      Z> G d? d@e9      Z? G dA dBe?      Z@ G dC dDe?      ZA G dE dFe?      ZB G dG dHeB      ZC G dI dJeB      ZD G dK dLe?      ZE G dM dNe?      ZF G dO dPe?      ZG G dQ dRe9      ZH G dS dTe9      ZI G dU dVe9      ZJ G dW dXeI      ZK G dY dZeI      ZL G d[ d\eI      ZM G d] d^eI      ZN G d_ d`eI      ZO G da dbeI      ZP G dc ddeI      ZQ G de dfeI      ZR G dg dhe=      ZS G di dje=      ZT G dk dleTe;      ZU G dm dne=      ZV G do dpe=      ZW G dq dre=      ZX G ds dte=e;      ZY G du dveY      ZZ G dw dxe9      Z[ G dy dze9      Z\ G d{ d|eY      Z] G d} d~eY      Z^ G d de]      Z_ G d de_      Z` G d de`      Za G d de`      Zb G d de]      Zc G d de=      Zd G d de=e;      Ze G d dee      Zf G d dee      Zg G d de=      Zh G d de=      Zi G d de=      Zj G d de=      Zk G d de=      Zl G d de=      Zm G d dem      Zn G d dem      Zo G d dem      Zp G d dem      Zq G d de=      Zr G d de=      Zs G d de=      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 de9      Z~ G d de=      Z G d de=      Z G dÄ dī      Z G dń dee=      Z G dǄ de9      Z G dɄ de9      Zd˄ Z G d̄ dee=      Z G d΄ de      Z G dЄ de      Z G d҄ dee=      Z G dԄ de=      Z G dք dem      Z G d؄ de=      Z G dڄ de9      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=e7      Zd Zd d edZd Z G d de=      Z G d de=      Z G d de=      Z G d de9      Z G d de=e      Z G d de      Z G d d e      Z G d de=      Z G d de9      Ze%jF                  rdZndZ e!jJ                  dd      Z e!jJ                  d	d      Z e!jJ                  d
d      Z e!jJ                  dd      Z e!jJ                  dd      Z e!jJ                  dd      Z e!jJ                  dd      Z e!jJ                  dd      Zy(      NoscopychainBuiltinerrorwarningNaming
PyrexTypespy_object_typeModuleScope
LocalScopeClosureScopeStructOrUnionScopePyClassScopeCppClassScopeUtilityCodeEncodedString
error_type)r      )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                       e Zd ZdZdZdZy)
NoGilStater   r   r%   N)__name__
__module____qualname__HasGilNoGil
NoGilScope     YC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/Nodes.pyr+   r+   (   s    FE Jr3   r+   c                 2    | d   j                         | d   fS Nr   r   )get_filenametable_entryposs    r4   relative_positionr:   0   s    F**,c!f55r3   c                    t         j                  s|S dt        |       z  }|t        |      S |j                  }|	 |j                  |       |st        |      }nt        |dz   |z         }||_        |S # t        $ r d }Y 5w xY w)NzFile: %s (starting at line %s)
)r    embed_pos_in_docstringr:   r   encodingencodeUnicodeEncodeError)r9   	docstringpos_liner>   docs        r4   embed_positionrD   4   s    ))/2CC2HHHX&& !!H	OOH% H%HtOi78CLJ " 	H	s   A6 6BBc                       fd}|S )Nc            
      t   t        |       dkD  r!t        | d         r| d d \  }}dd|j                  z  d|j                  j                  d	j                  d|j
                  dd  d	}|j                         }|j                  j                  j                         }|xj                  dz  c_         	| i |}|xj                  dz  c_        ||j                  j                  j                         k7  r3|j                  |j                  d	d
d             |j                  |       |S  	| i |S )Nr   r%   z                    /*  z -> .z */   ->z<-)len
isinstance
call_level	__class__r,   r9   insertion_pointbufferstreamtellputlnreplace)
argskwdsnodecodemarkerrO   startrescodewriter_classfuncs
           r4   fzwrite_func_call.<locals>.fO   s   t9q=ZQ1AB bqJD$doo%''	F #224OKK&&++-EOOq O%%COOq O**//11

6>>$a89%%f-J&&&r3   r2   )r]   r\   r^   s   `` r4   write_func_callr_   N   s    ', Hr3   c                        e Zd Z fdZ xZS )VerboseCodeWriterc                     ddl m} ddlm} t	        |      }|j                         D ]!  \  }}t        ||      st        ||      ||<   # t        | %  | |||      S )Nr   FunctionTyper   )CCodeWriter)
typesrd   Codere   dictitemsrL   r_   super__new__)	clsnamebasesattrsrd   re   mnamemrN   s	           r4   rk   zVerboseCodeWriter.__new__k   s\    &%U 	?HE1!\*.q+>e	? wsD%77r3   )r,   r-   r.   rk   __classcell__rN   s   @r4   ra   ra   h   s    8 8r3   ra   c                   6     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        |      }|j                         D ]-  \  }}t	        ||      s|| j
                  v s" |||      ||<   / t        |   | |||      S )Nr   rc   c                       fd}|S )Nc                  B     | i |}|t        d| d|       |S )NrG   )print)rU   kwargsretvalr]   rm   s      r4   callz3CheckAnalysers.__new__.<locals>.check.<locals>.call   s+    t.v.>dF;<r3   r2   )rm   r]   r   s   `` r4   checkz%CheckAnalysers.__new__.<locals>.check   s    
 Kr3   )rf   rd   rh   ri   rL   methodsrj   rk   )	rl   rm   rn   ro   rd   r   rp   rq   rN   s	           r4   rk   zCheckAnalysers.__new__~   sj    &	 U 	/HE1!\*u/C$UAe	/ wsD%77r3   )r,   r-   r.   __doc__	frozensetr   rk   rr   rs   s   @r4   ru   ru   u   s!      G8 8r3   ru   c                       e Zd Zd Zy)CopyWithUpTreeRefsMixinc                    | j                   }|j                  |      }| j                  j                         D ]R  \  }}|| j                  v r|j                  t        |      |      }nt        j                  ||      }t        |||       T |S N)
rN   rk   __dict__ri   uptree_ref_attrsgetidr   deepcopysetattr)selfmemorl   resultkvs         r4   __deepcopy__z$CopyWithUpTreeRefsMixin.__deepcopy__   s     nnS!MM'') 	"DAqD))) HHRUA&MM!T*FAq!	" r3   N)r,   r-   r.   r   r2   r3   r4   r   r      s    r3   r   c                 P    t         j                  r t        t              |       S | S r   )r!   debug_trace_code_generationr&   ra   )rl   s    r4   _with_metaclassr      s#    --/}./44Jr3   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y)Noder   FNc                 H    || _         | j                  j                  |       y r   )r9   r   update)r   r9   kws      r4   __init__zNode.__init__   s    R r3   	Operationc                 J    t        | j                  d| j                  z         y )Nz%s not allowed without gil)r   r9   gil_messager   envs     r4   	gil_errorzNode.gil_error   s    dhh4t7G7GGHr3   c                 F    |j                         s| j                          y y r   )is_cpp	cpp_errorr   s     r4   	cpp_checkzNode.cpp_check   s    zz|NN r3   c                 J    t        | j                  d| j                  z         y )Nz%s only allowed in c++)r   r9   cpp_messager   s    r4   r   zNode.cpp_error   s    dhh043C3CCDr3   c           	          t        j                   |       }|j                  D ]:  }t        ||      }t        |t              s t        |||D cg c]  }| c}       < |S c c}w )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.)r   child_attrsgetattrrL   listr   )r   r   attrnamevaluexs        r4   
clone_nodezNode.clone_node   s_     4** 	>HFH-E%&e*<1*<=	>  +=s   	A!c                      y r   r2   r   s     r4   analyse_declarationszNode.analyse_declarations      r3   c                 F    t        d| j                  j                  z        )Nz*analyse_expressions not implemented for %sr   rN   r,   r   s     r4   rw   zNode.analyse_expressions  s$    HNN##$ % 	%r3   c                 F    t        d| j                  j                  z        )Nz$generate_code not implemented for %sr   r   rX   s     r4   generate_codezNode.generate_code  s$    BNN##$ % 	%r3   c                 \    t        | t              r| j                  j                  |       y y r   )rL   	BlockNodebodyannotater   s     r4   r   zNode.annotate  s#    dI&IIt$ 'r3   c                 j   	 | j                   S # t        $ r | j                  }| j                  s|| _         |cY S | j                  D ]]  }t	        | |      }|t        |t              r"|D ]  }t        ||j                               } Dt        ||j                               }_ || _         |cY S w xY wr   )	_end_posAttributeErrorr9   r   r   rL   r   maxend_pos)r   r9   attrchildcs        r4   r   zNode.end_pos  s    	==  	((C## #
(( 	4d+=t," 4!#qyy{34 c5==?3C	4  DMJ!	s    *B2A5B21B2c                 T  
 dk(  ry
t               t        |       v r$d| j                  j                  t        |       fz  S j	                  t        |              
fd
| j
                  j                         D cg c]  \  }}|vs||f }}}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 c c}}w )zYDebug helper method that returns a recursive string representation of this node.
        r   z<...nesting level cutoff...>z<%s (0x%x) -- already output>c           
          t        | t              r| j                  |dz
        S t        | t              r)ddj	                  | D cg c]  } ||       c}      z  S t        |       S c c}w )Nr   z[%s], )rL   r   dumpr   joinrepr)r   levelitemcutoff
dump_childencountered
filter_outs      r4   r   zNode.dump.<locals>.dump_child4  se    !T"vveZ;GGAt$		q*Qt:dE+B*Q RRRAw +Rs   	A-
z<%s (0x%x)>z  z<%s (0x%x)
: r   r<   z%s>)setr   rN   r,   addr   ri   rK   )r   r   r   r   r   keyr   ro   indentr[   r   s     ```     @r4   r   z	Node.dump)  s(    Q;1%Kd8{"2dnn6M6MrRVx5XXX4!	 150C0C0E_*#uT^I^#u__u:? DNN$;$;RX#FFFE\F DNN$;$;RX#FFC# T
UjPQ	6RSST56>!CJ `s   D$D$c           	      R   | j                   sy| j                   \  }}}|j                  dd      }|t        d|dz
        | }|d   }|r|d| |z   ||d z   }|j                         d	z   |d<   ||||d
z    z  }dj	                  |      }	d|j                          d|dd|dd|	 d	S )z[Debug helper method that returns the source code context of this node as a string.
         ASCIIignore)r>   error_handlingr      Nz             # <<<<<<<<<<<<<<r%   r<   "z":d:)r9   	get_linesr   rstripr   get_escaped_description)
r   mark_columnrY   source_desclinecolcontentslinescurrentrX   s
             r4   dump_poszNode.dump_posG  s     xx!%T3(('((SQQ-)dsmf,wst}<GNN$'FFb	$tAv&&yy;6689D81SG2dVSUVVr3   r   )r   r8   d   N)Fz(#)) r,   r-   r.   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   r2   r3   r4   r   r      s     GGLJMJL"E
 K KH M! KKI KEJ%%%
*<Wr3   r   c                   T    e Zd ZdZdgZed        Zed        Zd Zd Z	d Z
d Zd	 Zy
)CompilerDirectivesNodez9
    Sets compiler directives for the children nodes
    r   c                     t        j                  |j                  fi |} | |j                  |||j                        S N)r   
directivesr   )r    copy_inherited_directivesr   r9   r   )rl   r   r   r   new_directivess        r4   for_directivesz%CompilerDirectivesNode.for_directivesc  s7     ::3>>XZX488$>QUQcQcddr3   c                     t        j                  |j                        } | |j                  |||j                        S r   )r    copy_for_internalr   r9   r   )rl   r   r   r  s       r4   for_internalz#CompilerDirectivesNode.for_internalh  s2     223>>B488$>QUQcQcddr3   c                     |j                   }| j                   |_         | j                  j                  |       ||_         y r   )r   r   r   r   r   olds      r4   r   z+CompilerDirectivesNode.analyse_declarationsm  s/    nn		&&s+r3   c                     |j                   }| j                   |_         | j                  j                  |      | _        ||_         | S r   )r   r   rw   r  s      r4   rw   z*CompilerDirectivesNode.analyse_expressionss  s8    nnII11#6	r3   c                     |j                   }|j                  j                   }| j                   |j                  _         | j                  j                  ||       ||_         ||j                  _         y r   )r   globalstater   generate_function_definitions)r   r   rX   env_oldcode_olds        r4   r  z4CompilerDirectivesNode.generate_function_definitionsz  sW    ..##..&*oo#		//T: &.#r3   c                     |j                   j                  }| j                  |j                   _        | j                  j                  |       ||j                   _        y r   )r  r   r   generate_execution_coder   rX   r  s      r4   r  z.CompilerDirectivesNode.generate_execution_code  sE    ))&*oo#		))$/&)#r3   c                     |j                   j                  }| j                  |j                   _        | j                  j                  |       ||j                   _        y r   )r  r   r   r   r  s      r4   r   zCompilerDirectivesNode.annotate  sE    ))&*oo#		4 &)#r3   N)r,   r-   r.   r   r   classmethodr  r  r   rw   r  r  r   r2   r3   r4   r   r   Z  sS     (Ke e e e/**r3   r   c                       e Zd Zd Zd Zy)r   c                     |j                         j                  }|D ]  }|j                  j                  |        |d d = y r   )global_scopeundeclared_cached_builtinsr  add_cached_builtin_decl)r   r   rX   entriesentrys        r4   generate_cached_builtins_declsz(BlockNode.generate_cached_builtins_decls  s@    ""$?? 	<E44U;	<AJr3   c                 J    |j                   D ]  }|j                  ||        y r   )lambda_defsr  )r   r   rX   rW   s       r4   generate_lambda_definitionsz%BlockNode.generate_lambda_definitions  s%    OO 	:D..sD9	:r3   N)r,   r-   r.   r  r  r2   r3   r4   r   r     s    :r3   r   c                   @    e Zd ZdgZed        Zd Zd Zd Zd Z	d Z
y)	StatListNodestatsc                     t        | fi |}|S r   )r   )r9   r   r   rW   s       r4   create_analysedzStatListNode.create_analysed  s    C&2&r3   c                 H    | j                   D ]  }|j                  |        y r   r!  r   r   r   stats      r4   r   z!StatListNode.analyse_declarations  s#    JJ 	+D%%c*	+r3   c                 l    | j                   D cg c]  }|j                  |       c}| _         | S c c}w r   )r!  rw   r&  s      r4   rw   z StatListNode.analyse_expressions  s7     #'**. ..s3 .
.s   1c                 J    | j                   D ]  }|j                  ||        y r   r!  r  r   r   rX   r'  s       r4   r  z*StatListNode.generate_function_definitions  s%    JJ 	:D..sD9	:r3   c                 ~    | j                   D ].  }|j                  |j                         |j                  |       0 y r   )r!  mark_posr9   r  r   rX   r'  s      r4   r  z$StatListNode.generate_execution_code  s3    JJ 	/DMM$((#((.	/r3   c                 H    | j                   D ]  }|j                  |        y r   r!  r   r.  s      r4   r   zStatListNode.annotate  !    JJ 	 DMM$	 r3   N)r,   r-   r.   r   staticmethodr#  r   rw   r  r  r   r2   r3   r4   r   r     s6     )K +
:
/ r3   r   c                       e Zd Zd Zd Zy)StatNodec                      y r   r2   r   r   rX   s      r4   r  z&StatNode.generate_function_definitions  r   r3   c                 F    t        d| j                  j                  z        )Nz.generate_execution_code not implemented for %sr   r   s     r4   r  z StatNode.generate_execution_code  s$    LNN##$ % 	%r3   N)r,   r-   r.   r  r  r2   r3   r4   r4  r4    s    %r3   r4  c                   0    e Zd ZdgZd Zd Zd Zd Zd Zy)CDefExternNoder   c                 l   |j                   }d|_         | j                  j                  |       ||_         | j                  s| j                  rg| j                  j
                  }|j                  d   sd}n|sd}nt        d |D              }|j                  | j                  | j                  |       y y )Nr   preliminary_late_includes_cy28Fc              3   <   K   | ]  }t        |t                y wr   )rL   CVarDefNode).0rW   s     r4   	<genexpr>z6CDefExternNode.analyse_declarations.<locals>.<genexpr>  s     KT:dK8Ks   )	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    OO		&&s++ 5 5IIOOE>>"BCKUKK  !2!2D4I4I4P !6r3   c                 F    | j                   j                  |      | _         | S r   r   rw   r   s     r4   rw   z"CDefExternNode.analyse_expressions  s    II11#6	r3   c                 <    | j                   j                  ||       y r   r   r  r6  s      r4   r  z,CDefExternNode.generate_function_definitions      		//T:r3   c                      y r   r2   r   s     r4   r  z&CDefExternNode.generate_execution_code  r   r3   c                 :    | j                   j                  |       y r   r   r   r   s     r4   r   zCDefExternNode.annotate      		4 r3   N	r,   r-   r.   r   r   rw   r  r  r   r2   r3   r4   r9  r9    s%    
 (KQ$
;!r3   r9  c                        e Zd Zg ZdZd Zd Zy)CDeclaratorNoder   c                      y r   r2   r   s    r4   declared_namezCDeclaratorNode.declared_name  s    r3   c                      y r   r2   r   s    r4   analyse_templatesz!CDeclaratorNode.analyse_templates  s    r3   N)r,   r-   r.   r   calling_conventionrT  rV  r2   r3   r4   rR  rR    s     Kr3   rR  c                   $    e Zd ZdgZdZd ZddZy)CNameDeclaratorNodedefaultNc                     | j                   S r   rm   r   s    r4   rT  z!CNameDeclaratorNode.declared_name!      yyr3   c                     |r| j                   dk(  r}|j                  s|j                  s|j                  rt	        | j
                  d       nB|j                  rt	        | j
                  d       n|j                  ddd      | _         t        }|j                  r(|j                  r	 |j                  |j                        }|| _        | |fS # t        $ r& t	        | j
                  d| j                   z         Y 9w xY w)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)rm   is_ptris_array	is_bufferr   r9   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#59L9Ldhh 78""dhh lm%66rqPQ6R	*	#"7"7!%001F1FG	 	Y $ !dhhjii !!s   (C ,C=<C=r   NF)r,   r-   r.   r   rZ  rT  rq  r2   r3   r4   rY  rY    s    
 +KGr3   rY  c                   &    e Zd ZdgZd Zd ZddZy)CPtrDeclaratorNodebasec                 6    | j                   j                         S r   ru  rT  r   s    r4   rT  z CPtrDeclaratorNode.declared_name@      yy&&((r3   c                 6    | j                   j                         S r   ru  rV  r   s    r4   rV  z$CPtrDeclaratorNode.analyse_templatesC      yy**,,r3   Nc                     |j                   rt        | j                  d       t        j                  |      }| j
                  j                  |||||      S )Nz+Pointer base type cannot be a Python objectrn  ro  rp  )is_pyobjectr   r9   r
   
c_ptr_typeru  rq  )r   rm  r   rn  ro  rp  ptr_types          r4   rq  zCPtrDeclaratorNode.analyseF  sK      $((IJ((3yy  3jag hhr3   rr  )r,   r-   r.   r   rT  rV  rq  r2   r3   r4   rt  rt  ;  s     (K)-ir3   rt  c                       e Zd ZdgZd Zd Zy)_CReferenceDeclaratorBaseNoderu  c                 6    | j                   j                         S r   rw  r   s    r4   rT  z+_CReferenceDeclaratorBaseNode.declared_nameP  rx  r3   c                 6    | j                   j                         S r   rz  r   s    r4   rV  z/_CReferenceDeclaratorBaseNode.analyse_templatesS  r{  r3   N)r,   r-   r.   r   rT  rV  r2   r3   r4   r  r  M  s    (K)-r3   r  c                       e Zd ZddZy)CReferenceDeclaratorNodeNc                     |j                   rt        | j                  d       t        j                  |      }| j
                  j                  |||||      S )Nz-Reference base type cannot be a Python objectr}  )r~  r   r9   r
   
c_ref_typeru  rq  r   rm  r   rn  ro  rp  ref_types          r4   rq  z CReferenceDeclaratorNode.analyseX  sK      $((KL((3yy  3jag hhr3   rr  r,   r-   r.   rq  r2   r3   r4   r  r  W      ir3   r  c                       e Zd ZddZy) CppRvalueReferenceDeclaratorNodeNc                     |j                   rt        | j                  d       t        j                  |      }| j
                  j                  |||||      S )Nz4Rvalue-reference base type cannot be a Python objectr}  )r~  r   r9   r
   cpp_rvalue_ref_typeru  rq  r  s          r4   rq  z(CppRvalueReferenceDeclaratorNode.analyse`  sK      $((RS11)<yy  3jag hhr3   rr  r  r2   r3   r4   r  r  _  r  r3   r  c                       e Zd ZddgZddZy)CArrayDeclaratorNoderu  	dimensionNc                    |j                   r|j                         s|j                  s|j                  rddlm} t        | j                  |      r| j                  j                  }n| j                  f}|D cg c]  }|j                  |       }	}d |	v r1|	j                  d       }
t        ||
   j                  d       t        }n|j                  | j                  ||	      }| j                  j!                  |||||      S d }| j                  r%| j                  j#                  |      | _        | j                  j$                  j&                  s t        | j                  j                  d       | j                  j$                  j(                  rC| j                  j*                  j,                  dk7  r t        | j                  j                  d       t        | j                  j.                  t0              r| j                  j.                  n| j                  j3                         }|	 t1        |      }|j7                         st        | j                  d|z         |j8                  rt        | j                  d	       |j                  rt        | j                  d
       t;        j<                  ||      }| j                  j!                  |||||      S c c}w # t4        $ r Y w xY w)Nr   	TupleNodezTemplate parameter not a typer}  zArray dimension not integerexternz(Array dimension cannot be const variablez%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  rL   r  rU   analyse_as_typeindexr   r9   r   specialize_hereru  rq  analyse_const_expressionrl  is_intis_constr  ro  constant_resultintget_constant_c_result_code
ValueErroris_completer~  r
   c_array_type)r   rm  r   rn  ro  rp  r  rU   r   valuesixsize
array_types                r4   rq  zCArrayDeclaratorNode.analysem  sL   ##	(B(B(D&&66,$..)4~~**~~6:;a'',;F;v~\\$'d2hll$CD&	%55dhhVL	99$$YhS]fl$mm>>!^^DDSIDN>>&&--dnn((*GH~~""++0D0D0O0OS[0[dnn((*TU6@A_A_ad6eDNN22BBD t9D
 $$&$((CiOP  $((EF!!$((@A,,Y=
yy  S8PZci jjC <, " s   9K.K! !	K-,K-rr  r,   r-   r.   r   rq  r2   r3   r4   r  r  g  s     ;'K*kr3   r  c                   @    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y)
CFuncDeclaratorNode)ru  rU   exception_valuer   Nc                 6    | j                   j                         S r   rw  r   s    r4   rT  z!CFuncDeclaratorNode.declared_name  rx  r3   c                    t        | j                  t              rddlm}m} | j                  j                  }t        ||      r|j                  }n't        ||      r|g}nt        |j                  d       y g | _
        |D ]]  }t        ||      r9| j                  j                  t        j                  |j                               Ht        |j                  d       _ | j                  j                  | _        | j                  S y )Nr   )r  NameNodez*Template arguments must be a list of names)rL   ru  r  r  r  r  r  rU   r   r9   	templatesappendr
   TemplatePlaceholderTyperm   )r   r  r  template_nodetemplate_nodestemplates         r4   rV  z%CFuncDeclaratorNode.analyse_templates  s    dii!566 II//M-3!.!3!3M84"/m'')UVDN* Vh1NN))**L*LX]]*[\(,,(TU	V
 		DI>>!r3   c                     |i }|r|dz  }g }t         j                        D ]  \  }}	|	j                  ||dk(  xr j                  xr dj                  v      \  }
}|
j
                  }||v r||   }|j                        }|t        |j                  d       n\|t        j                  urH|j                  |      s7t         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d
|_        |	j,                  rd
|_        |j/                  |       |	j0                  r xj2                  dz  c_         j2                  st         j                  d        d }d}j                  d   rH|j4                  s< j6                  s0 j8                  r$|dk7  rd _        t;         j                  dd        j8                  dk(  rV j=                         j?                  d       j?                  d       j?                  d       j?                  d       n|j4                  r j8                  rd _        |j4                  r? j@                  s j8                  r' j8                  dk7  rt         j                  d       n|j4                  r6 j8                  s*|dk7  r% j6                  rt;         j                  dd       n؉ j@                   j8                  r j8                  dk7  r|j@                  t|dk7  ro|smj                  satC         j                  tD              sGddl#m$} |jK                   j                  tM        |j@                        ||j@                         _          j@                   j8                  dk(  r։ j@                  jO                         _          j@                  jP                  }|jR                  s|j4                  sz|jT                  r"|jV                  j4                  s|j                  rL|t        jX                  k(  r j@                  jZ                  dk(  s t         j@                  j                  d        j@                  }n3 j@                  j]                        j_                  |      jO                         _          j@                  ja                        }|jc                   j@                  jP                        s t         j@                  j                  d       |dk7  r|jd                  s|jf                  rw j@                  ji                         r]	 tk        |jl                        } j@                  jn                  |k(  r.t;         j                  d j@                  jn                  z         	  j8                  }|jT                  rt         j                  d       t        jr                  || jt                   j2                  || j                  jv                   jx                   jz                   j|                   j~                   j                         } j2                  r,|j                  r fd!}||_B        n j                  |       j                  d"   }|r7|jv                  }|r"||k7  rt         j                  d#|d$|d%       ||_;        |jV                  j                  rt;         j                  d&d       |j                  D ]A  }|jP                  j                  s|j                         r+t;         j                  d'd       C  j                  j                  |||(      S # tp        $ r Y w xY w))Nr   r   r2  rn  is_self_arg
Not a type2Signature does not agree with previous declarationPrevious declaration herez2Function argument cannot have C name specificationr`  Tz-Non-default argument follows default argumentlegacy_implicit_noexceptr  FzdImplicit 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   rl  r  *zTException value must be a Python exception, or C++ function with no arguments, or *.z6Exception value incompatible with function return typez;Ambiguous exception value, same as default return value: %rz!Function cannot return a function)	optional_arg_countr  exception_checkrW  nogilwith_gilis_overridableis_const_methodr  c                 ,    j                  | |       y r   )declare_optional_arg_struct)	func_typefused_cnamer   r   s     r4   declare_opt_arg_structz;CFuncDeclaratorNode.analyse.<locals>.declare_opt_arg_structV  s    44Y[Qr3   callspeczcannot have both 'z' and 'z' calling conventionsz6Rvalue-reference as function return type not supportedz3Rvalue-reference as function argument not supportedro  rp  )F	enumeraterU   rq  is_c_class_scoper   rm   r  r   r9   r
   r   same_asru  cnameis_unspecifiedparent_typere  r  rm  rg  CFuncTypeArgnot_noneor_noner  rZ  r  r~  has_explicit_exc_clauser  r   r   rD  r  rL   rt  r  r  for_typestrr  rl  is_errorr  return_typec_char_typer   rv   	coerce_toas_exception_valueassignable_fromr  is_floathas_constant_resultfloatdefault_valuer  r  	CFuncTypehas_varargsrW  r  r  overridabler  r  ri  r  r  is_rvalue_referenceis_forwarding_reference)r   r  r   rn  directive_localsro  rp  func_type_argsiarg_nodename_declaratorrl  rm   	type_node
other_typefunc_argexc_val	exc_checkr  exc_val_typetype_default_valuer  r  r  r   args   ` `                       r4   rq  zCFuncDeclaratorNode.analyse  s   #!MH$TYY/ $	QKAx$,$4$4h!Ve(<(<eWZWeWeAe %5 %h!OT #''D'',T2	&66s;
%)--6*";";;"ll:6$))--)]^)--)DE%D$$dhh TUAv#..43F3F}}!,,T^^<||hll$pq!..tT8<<HH  $(!#' !!(+''1,'((dhh OPI$	QL 	NN56#//44(((*#(D DHHO
 3&NN3  '  '  -  ,$$)=)= $)D ##))T-A-A((C/$((_`$$T-A-AjT\F\aea}a}DHH_abc##+0D0DI]I]adId  //;xAW`f //
499N`8a8/8/A/A HHC0K0K,LS^,7,G,G 0B 0I, ##/''3.+/+?+?+X+XY\+]D(#'#7#7#<#<L(11$0$<$<%1%>%>-9-E-E-Q-Q-9->->%1Z5K5K%K)-)=)=)C)Cs)Jd2266tv"22G+/+?+?+M+Mc+R+\+\#S,**B*B3*G ("22EEcJG&66t7K7K7P7PQd2266VX"h.!,!3!3{7K7K $ 4 4 H H JN16{7P7P1Q.  $33CCGYY '2o(,(<(<(L(L3M !N,,I##$((?@(()9)9#66#Y#yy;;**t}}TEUEU 00nn&	 ""!!R 4J	000C@>>*-22G7h.dhh/6!B C+3I(  44DHHVXYZ>> 	\Cxx++C4O4O4Q"WYZ[	\ yy  CJv VVY  * ! !s   `6 6	aac                    t               }dt        j                  z  }|j                  |t        j
                  | j                         |j                  t        |j                        | j                  z
  d D ]6  }|j                  |j                  |j                  |j                  dd       8 |j                  t        j                  | j                  j                        }|t	        j                  ||      }|j!                         j#                  |d|d| j                  |      }d|_        d|_        t	        j(                  |j                        |_        y)	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   )rm   kindscopetypedef_flagr9   r  r   )r   r	   pyrex_prefixdeclare_varr
   
c_int_typer9   rU   rK   r  rm   rl  mangleopt_arg_prefixru  get_fused_cnamer  declare_struct_or_uniondefined_in_pxdusedr  op_arg_struct)	r   r  r   r  r  arg_count_memberr  struct_cnameop_args_structs	            r4   r  z/CFuncDeclaratorNode.declare_optional_arg_structm  s)    #$ 6#6#66*J,A,A488L>>#inn"58O8O"O"PQ 	gCchh#''$aef	g zz&"7"7H"%55k<PL))+CC D   )*%","7"78K8K"L	r3   )r   NNFr   )r,   r-   r.   r   r  r  r  r  rT  rV  rq  r  r2   r3   r4   r  r    s6     6KKOI),eWNMr3   r  c                       e Zd ZdgZddZy)CConstDeclaratorNoderu  Nc                     |j                   rt        | j                  d       t        j                  |      }| j
                  j                  |||||      S )Nz)Const base type cannot be a Python objectr}  )r~  r   r9   r
   c_const_typeru  rq  )r   rm  r   rn  ro  rp  consts          r4   rq  zCConstDeclaratorNode.analyse  sM      $((=?''	2yy  h:^d eer3   rr  r  r2   r3   r4   r  r    s     (Kfr3   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ed	        Zed
        ZddZd Zd Zd Z	 	 ddZy)CArgDeclNode)rm  
declaratorrZ  
annotationrZ  r  r   r   FNc                 6    | j                   j                         S r   r  rT  r   s    r4   rT  zCArgDeclNode.declared_name      ,,..r3   c                 6    | j                   j                         S r   )rm   as_c_string_literalr   s    r4   name_cstringzCArgDeclNode.name_cstring  s    yy,,..r3   c                     | j                   r0t        t        j                  | j                  j
                  z         S t        t        j                  | j                  j
                  z         S r   )needs_conversionr   r	   
arg_prefixr  rm   
var_prefixr   s    r4   	hdr_cnamezCArgDeclNode.hdr_cname  sI       "6#4#4tzz#FGG"6#4#4tzz#FGGr3   c                    |r|x| j                   _        | _        | j                  | j                  | j                  fS t	        | j
                  t              r| j
                  j                  dk(  r|r| j                   j                  r.| j                   j                  |d      }|j                         }n| j                   j                  }t        |      | j
                  _        d | j                   _        d| j                   _        d}nd}d| j                   _        | j                   j                  ||      }t        | j                   dd       }|r|| j
                  _        |j                  rt	        | j                   t              rt	        | j
                  t               rt| j
                  }	t	        |	j"                  t               r'|	j"                  }	t	        |	j"                  t               r'| j                   j$                  |	_        |j                   }| j&                  r=|r;|j(                  d   r,t        | j                   dd       | j+                  |      }
|
|
}| j
                  j                  |||      S )	Nr   T)could_be_nameFarg_nameannotation_typingrm   rn  )rm  r  rl  r  rL   r  rY  rm   is_basic_c_typerq  empty_declaration_coder   is_argr   re  TemplatedTypeNoder  ru  array_declaratorr  r   inject_type_from_annotations)r   r   rn  r  rl  r*  r)  rm  base_arg_namer  arg_types              r4   rq  zCArgDeclNode.analyse  s   <GGDNN&)999 ''22 doo':;@T@TXZ@Z>>11>>11#T1JD#::<H#~~22H'4X'>$&*#16. M!M $NN**3m*L	
DA#0DOO 
 t~~/@At0DEJZ__.BC'__
 Z__.BC"nn==JO!++I OO7J(K DNNFD9A88=H#$	&&y#&IIr3   c                    | j                   }|sy |j                  || j                        \  }}|t        |j                  |d      | _        |rd|v r+|j                         }|r|j                         snd| _        n|t        u rd| _        n| j                  rx| j                  j                  rb|j                         s|j                  rF|j                         s|j                  }| j                  sAt        | j                  d       d| _        n#| j                  s|j                         rd| _        |rd| _        |S )N)assigned_valueT)rl  r/  ztyping.OptionalzIPEP-484 recommends 'typing.Optional[...]' for arguments that can be None.)r  analyse_type_annotationrZ  CAnalysedBaseTypeNoder9   rm  resolvecan_be_optionalr  r   r   equivalent_typer   r  type_from_annotation)r   r   r  	modifiersr4  s        r4   r2  z)CArgDeclNode.inject_type_from_annotations  s   __
(@@UYUaUa@b	82Xd<DN  I-#++-H$<$<$> #'DL^+#$,,"6"6H<T<T<VZbZrZr//1'77H||DHH&qr#'DL\\h&>&>&@ $(,D%r3   c                 R   | j                   | j                  r| j                  j                  rN| j                  j                  |       | j                  j                  | j                  j                               S |j                  | j                        | _         | j                   S r   )r  rZ  r   generate_evaluation_coderl  	cast_coder   get_argument_default_constr   s     r4   calculate_default_value_codez)CArgDeclNode.calculate_default_value_code,  sy    %||<<**LL99$?99..t||/B/B/DEE%)%D%DTYY%O"!!!r3   c                 T    | j                   r| j                   j                  |       y y r   )rZ  r   r   s     r4   r   zCArgDeclNode.annotate6  s     <<LL!!$' r3   c                    | j                   }||j                  r|y |xs | j                  |      }|j                  |       |j	                  |       |r|j                         n|j                  | j                        }|j                  |d|d       |j                  |j                         | j                         |j                  |       |j                  |       y N = ;)rZ  r   rB  r?  make_owned_referencer   	result_asrl  rS   put_giverefgenerate_post_assignment_code
free_temps)r   rX   overloaded_assignmentcyfunc_struct_targetrZ  targetr   s          r4   generate_assignment_codez%CArgDeclNode.generate_assignment_code:  s    ,,?w116J6R &P)J)J4)P((.$$T*%:!@Q@QRVR[R[@\

01)4995--d34 r3   )r   FFN)r,   r-   r.   r   r   r  is_type_arg
is_genericis_special_method_optionalkw_onlypos_onlyr  r  rl  r  r  r  
is_dynamicdefaults_class_keyr<  rT  propertyr"  r'  rq  r2  rB  r   rP  r2   r3   r4   r  r    s    , GKl+KKKJ!&GHHGDOMJJ / / / H H0Jd#J"( DI6:!r3   r  c                       e Zd Zd Zy)CBaseTypeNodec                 $    | j                  |      S r   )rq  r   s     r4   r  zCBaseTypeNode.analyse_as_typeS  s    ||C  r3   N)r,   r-   r.   r  r2   r3   r4   r[  r[  K  s    !r3   r[  c                       e Zd Zg ZddZy)r8  c                     | j                   S r   rl  )r   r   r)  s      r4   rq  zCAnalysedBaseTypeNode.analyse\  r]  r3   NFr  r2   r3   r4   r8  r8  W  s     Kr3   r8  c                   ,    e Zd Zg ZdZg ZdZdZdZddZ	y)CSimpleBaseTypeNodeNFc                    d }| j                   rPt        j                  | j                  | j                  | j
                        }|st        | j                  d       n| j
                  dk(  r| j                  st        }ne| j
                  .| j                  r|j                  r|j                  }n3t        }n+|}| j                  r| j                  D ]x  }|j                  |      }|E|j                  s"|j                  r-|j                   j                  r|j                   j"                  }[|r|j$                  r|j$                  }vd } n |\t'        | j                        dk(  rDddlm} |j                  | j                  d         }|r|j,                  r ||j,                        }|&|j/                  | j                  | j                        }|r|j                  r|j1                         }|j3                  | j
                        }|n|rF| j                  r|j                  r|j                  }nt        }t5        | j
                        | _        n| j8                  r[| j
                  | j8                  vr#t        | j                  d| j
                  z         t        j:                  | j
                        }n#t        | j                  d| j
                  z         |r3|j<                  r'|j>                  r|jA                  |j>                        }| jB                  rU|jD                  r|jF                  rt        | j                  d       t        jH                  |      }|jK                  |       n:|t(        jL                  u r(t        jN                  }|jK                  |       d| _!        |st        jP                  }|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longnessrm   r   r9   module_pathr   r  r  r  lookupr  is_typerl  r  	as_modulerK   r   re  known_standard_library_importfind_imported_moduler  lookup_typer   r*  r  r  ri  rj  rk  complex
is_numeric
is_complexCComplexTypecreate_declaration_utility_codecomplex_typec_double_complex_typer   )	r   r   r)  rl  r  r   r  re  found_entrys	            r4   rq  zCSimpleBaseTypeNode.analyseq  s    ++DKK		RDdhh HIYY("4+;+;!DYYC$8$8 &E ,, D!LL.E(**%***A*A %

 0 05?? % $ =S)9)9%:a%? Q"%**T-=-=a-@"AK"{'P'P GHqHq r=44T5E5EtxxPE))!..0E((3#"''C,@,@"  .$1$))$<DM~~99DNN:!$((,Kdii,WX)AA$))Ldhh(G$))(STDMMc&;&;??3#8#89D<<??doodhh EF**40D005W)))
 33D005DL((Dr3   r`  )
r,   r-   r.   r   r*  ri  r-  rp  r  rq  r2   r3   r4   rb  rb  `  s(     KHKOGKTr3   rb  c                   &    e Zd ZdZddgZddZd Zy)MemoryViewSliceTypeNode
memoryviewbase_type_nodeaxesc                 p   | j                   j                  |      }|j                  r|S ddlm} 	 |j                  || j                        }|j                  | j                  |      st         | _        | j                  S t        j"                  ||      | _        | j                  j%                  | j                         | j'                  |       | j                  S # t        $ rO}t        |j                  |j                         t        j                         | _        | j                  cY d }~S d }~ww xY wNr   
MemoryView)r{  rq  r  r   r  get_axes_specsr|  r   r   positionmessage_onlyr
   	ErrorTyperl  validate_axesr9   r   MemoryViewSliceTypevalidate_memslice_dtypeuse_memview_utilities)r   r   r)  rm  r  
axes_specses          r4   rq  zMemoryViewSliceTypeNode.analyse  s    ''//4	i/ 	#223		BJ ''*="DI yy	 #66y*MDIII--dhh7&&s+yy  	!**ann-",,.DI99	s   C 	D5&AD0*D50D5c                 x    ddl m} |j                  |j                  |j                  j
                               y r~  )r   r  use_utility_codeget_view_utility_codecontextshared_utility_qualified_name)r   r   r  s      r4   r  z-MemoryViewSliceTypeNode.use_memview_utilities  s.     ,,99	
r3   Nr`  )r,   r-   r.   rm   r   rq  r  r2   r3   r4   ry  ry    s    D#V,K.
r3   ry  c                       e Zd ZdgZddZy)CNestedBaseTypeNoderm  Nc                    | j                   j                  |      }|t        j                  u rt        j                  S |j                  s)t        | j                  d|z         t        j                  S |j                  j                  | j                        }|r|j                  s7t        | j                  d|d| j                  d       t        j                  S |j                  S )Nz'%s' is not a valid type scope'rH   z' is not a type identifier)rm  rq  r
   r   r  r   r9   r  lookup_hererm   rk  rl  )r   r   r)  rm  
type_entrys        r4   rq  zCNestedBaseTypeNode.analyse  s    NN**3/	
---(((%%$((<yHI(((__00;
!3!3$(()TYYWX(((r3   r   r  r2   r3   r4   r  r    s     -Kr3   r  c                   4    e Zd Zg dZdZdZdZd ZddZd Z	y)r0  )r{  positional_argskeyword_args
dtype_nodeTNc                 R   |j                   dk(  }|j                  xr | }g }| j                  D ]  }|j                  r|j	                  |xs t        |t                    5  |j                  |      }d d d        (|j                  rt        |j                  d       t        }|j                  |        |j                   rA|j                   dk(  r!t        d | j                  D              |_        |j                         }nd}t!        |      D ]  \  }	}|	|r|j"                  r|s|j%                         r+|j&                  r j)                         s|j&                  ||	<   Wt        j                  |j                   d|       t        ||	<    |S # 1 sw Y   *xY w)Nzdataclasses.ClassVarz!unknown type in template argumentztyping.Unionc              3   4   K   | ]  }|j                     y wr   )r   )r>  r   s     r4   r?  z<TemplatedTypeNode._analyse_template_types.<locals>.<genexpr>'  s     -VAaii-V   Fz [...] cannot be applied to type )r  in_c_type_contextr  r   new_c_type_contextrL   r[  r  r  r   r9   r   r  anycontains_noneallows_noner  r~  r:  r;  as_cython_attribute)
r   r   rm  require_python_typesr  template_typesr  ttyperequire_optional_typesr  s
             r4   _analyse_template_typesz)TemplatedTypeNode._analyse_template_types  s   (EEI__11N:N6N!11 	)M$$''(9(eZWd=ef ;%55c:;}))-++-PQ&E!!%(	) 1155G*--VAUAU-V*V	'%.%:%:%<"%*"!.1 	3HAu}#E,=,=AW`e`u`u`w((1R1R1T(-(=(=N1%-++!>>.  )3N1%	3 =; ;s   "FF&	c                 t   || j                   j                  |      }|j                  r|S |j                  r|j	                         s|j
                  r| j                  r`| j                  j                  rJ|j                  rdnd}t        | j                  d|z         t        j                  | _        | j                  S | j                  ||      }|j                  | j                  ||      | _        n|j                  rddlm} |j%                  | j                  || j&                  | j                  |j(                        }t        j*                  |fi || _        t-        |      r t/        | j                        r
t        j0                  t3        | j                        | j                        | _        nt5        | j                  dd       }t7        | j&                        dkD  s| j                  j                  r,t        | j                  d       t        j                  | _        n_| j&                  sd }	n| j&                  d	   }	t9        | j                  ||	
      | _        | j:                  j                  ||      d   | _        | j                  rY| j                  j<                  rC|j>                  r7	 | j                  jA                  |j>                        | _        | j                  S | j                  S # tB        $ r1 t        | j                  d| jD                  z         Y | j                  S w xY w)Nzc++ templateszindexed typesz %s cannot take keyword argumentsr   Bufferr   rm   r  zinvalid array declarationr   )ru  r  rc  )#r{  rq  r  r  r  r  r  key_value_pairsr   r9   r
   r   rl  r  r  r~  r   r  analyse_buffer_optionsr  buffer_defaults
BufferTyper"   r$   PythranExprr#   rY  rK   r  r1  ri  rj  rk  r   rm   )
r   r   r)  rm  tpr  r  optionsempty_declaratorr  s
             r4   rq  zTemplatedTypeNode.analyse<  s   ++33C8Ii/##	(B(B(D66  T%6%6%F%F(1(>(>_Odhh BR GH&11	yy !99#yIN!11$((CPDI"" 33$$!!))+G #--iC7CDIc"'8'C&22<		3JDIIV	  3488"DQ4''(1,0A0A0Q0Qdhh ;<&11	 ++ $I $ 4 4Q 7I(<HH)'))% !1199)SI!L	99++0E0E! II001F1FG	 yytyy $ !dhhjii ! yy!s   ;*K= =,L76L7c                    g }| }|j                   r|j                  rt        |j                        dk(  r| j                  j	                  |      }|j
                  r'|j                  r|j                  |j                         |j                  d   }|j                   r%|j                  rt        |j                        dk(  r|S Nr   r   )r   r{  rK   r  r  r  modifier_namer  )r   r   r=  modifier_nodemodifier_types        r4   analyse_pytyping_modifiersz,TemplatedTypeNode.analyse_pytyping_modifiersy  s     	22}7S7SX[\i\y\yXz~X //??DM99m>Y>Y  !<!<=)99!<M	 22}7S7SX[\i\y\yXz~X r3   rQ  )
r,   r-   r.   r   r   r  rm   r  rq  r  r2   r3   r4   r0  r0    s,    1K "JD(T;zr3   r0  c                       e Zd ZddgZddZy)CComplexBaseTypeNoderm  r  c                 |    | j                   j                  ||      }| j                  j                  ||      \  }}|S r   )rm  rq  r  )r   r   r)  ru  _rl  s         r4   rq  zCComplexBaseTypeNode.analyse  s7    ~~%%c=9//))$44r3   Nr`  r  r2   r3   r4   r  r    s     -Kr3   r  c                       e Zd ZdgZddZy)CTupleBaseTypeNode
componentsc                    g }| j                   D ]N  }|j                  |      }|j                  rt        |j                  d       t
        c S |j                  |       P |j                  | j                  |      }d|_        |j                  S )Nz/Tuple types can't (yet) contain Python objects.T)
r  rq  r~  r   r9   r   r  declare_tuple_typer  rl  )r   r   r)  component_typesr   rl  r  s          r4   rq  zCTupleBaseTypeNode.analyse  s|     	)A99S>DaeeNO!!""4(	) &&txxA
zzr3   Nr`  r  r2   r3   r4   r  r    s      .K
r3   r  c                   "    e Zd ZdZg Zd ZddZy)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                  | j                  || j                        }d|_        y )NT)rq  declare_typedefrm   r9   r@  )r   r   rl  r  s       r4   r   z"FusedTypeNode.analyse_declarations  s6    ||C ##DIItTXX> !r3   c                    g }| j                   D ]X  }|j                  |      }|st        |j                  d       -||v rt        |j                  d       H|j	                  |       Z t        j                  || j                        S )Nr  zType specified multiple timesr\  )rf   r  r   r9   r  r
   	FusedTyperm   )r   r   r)  rf   r  rl  s         r4   rq  zFusedTypeNode.analyse  sy     
	#I,,S1Dimm\2u}imm%DET"
	# ##E		::r3   Nr`  )r,   r-   r.   r   r   r   rq  r2   r3   r4   r  r    s     K!;r3   r  c                       e Zd ZdgZddZy)CConstOrVolatileTypeNoderm  c                     | j                   j                  ||      }|j                  rt        | j                  d       t        j                  || j                  | j                        S )Nz2Const/volatile base type cannot be a Python object)	rm  rq  r~  r   r9   r
   c_const_or_volatile_typer  is_volatile)r   r   r)  ru  s       r4   rq  z CConstOrVolatileTypeNode.analyse  sR    ~~%%c=9$((FH224HXHXYYr3   Nr`  r  r2   r3   r4   r  r    s    
 -KZr3   r  c                   $    e Zd ZddgZdZdZddZy)r=  rm  declaratorsNc                 
   | j                   i | _         |s|}|| _        | j                  r| j                  d   j                         }nd }|| j                  dk7  rt        | j                  d       t        | j                        dkD  r#t        | j                  d   j                  d       t        d|      }|j                  j                  |_
        |D ])  }|j                  |j                  || j                         + | j                  j                  |      }d }| j                  j                  r| j                  j!                  |      }|j"                  r@| j$                  s4|j&                  s|j(                  rt        | j                  d       t*        S d | _        | j                  }| j                  D ]  }t        | j                        dkD  r6t/        |t0              s&|j                  d   rt3        |j                  d	d       | j4                  xr | j                  dk(  xr |j(                  }	|	rd
|_        t/        |t6              r.|j                  ||| j                   || j$                        \  }
}n"|j                  |||| j$                        \  }
}|j9                         s@| 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        y |jB                  r%| j                  dk7  rt        |j                  d       |jD                  r%| j                  dk7  rt        |j                  d       |jF                  rd|j                  v rd|_$        |jK                  |||j                  || j                  | j$                  | jL                  | jN                  | j4                  	      | _        | j,                  .tQ        jP                  | j                         | j,                  _         |	s| j,                  jR                  jU                  |       d| j,                  _+        | j4                  rt        | j                  d       | j                   rt        | j                  d       |jY                  |||j                  ||| j$                  | jL                  d|	      | _        tZ        j\                  st_        | j                  | j`                        | j,                  _0         y )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  ro  rp  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 declaredr2  T)r  ro  rp  apir=  r  z>Variables cannot be declared with 'cpdef'. Use 'cdef' instead.z,Decorators can only be followed by functions)r  ro  rp  r  is_cdefpytyping_modifiers)1r  
dest_scoper  rV  ro  r   r9   rK   r   outer_scoper   declare_typerm   rm  rq  r   r  ri  rp  r  is_module_scoper   r  rL   rY  r   r  r  r  re  is_memoryviewslicer~  r  is_referencer  r  is_static_methoddeclare_cfunctionr  r=  r   rl  create_to_py_utility_codecreate_wrapperr  r    
docstringsrD   rC   )r   r   r  r  template_paramrm  r=  ro  r  create_extern_wrapperr  rl  rm   r  s                 r4   r   z CVarDefNode.analyse_declarations  sz     ($&D!J$((+==?II (*dhh ?@4##$q(d&&q)--/VW5C __77CN"+ P  !4!4ndhhOP NN**3/	 	>>00AA#FIdkks7K7K7:7J7J$((:;
__
** 9	HJD$$%)&z3FG'BCNNJKLN
 &*%5%5 &=)-H)D&=),)<)< " %).
&*&9:(2(:(:sT5J5JWajnjuju ); )w% )3(:(:sz$++ ); )O%##%83I`I`*..*Lt*ST(*t/?/?jnn&OP"''D#))Erzjnn&DE  T__%@jnn&`a''DOOx,Gjnn&PQ  !S^^3,0D)'99$
DOODKKDNNHXHX : Z
 ::)26))D<Q<Q2RDJJ/(JJOO==cB04DJJ-##$(($de(($(($RS'33$
Jt{{$9 4 N
 %%%3DHHdhh%GDJJNs9	Hr3   r   )r,   r-   r.   r   
decoratorsr  r   r2   r3   r4   r=  r=    s      .KJ]Hr3   r=  c                   ,    e Zd ZdgZddZd Zd Zd Zy)CStructOrUnionDefNode
attributesNc                     |j                  | j                  | j                  || j                  | j                  | j
                  | j                  | j                  | j                  	      | _	        y )N)ro  r  packed)
r  rm   r  r  r9   r  ro  r  r  r  r   r   r  s      r4   declarezCStructOrUnionDefNode.declare\  sP    00IItyy%):):DHHJJ4??;; 1  
r3   c                 $   d }| j                   t        | j                        }| j                  ||       | j                   | j                  r|j
                  sd| j                  _        | j                   D ]  }|j                  ||        | j                  dk7  rs|j                  D ]c  }|j                  }|j                  r|j                  }|j                  r|| j                  j                  k(  sNt        |j                  d       e y y y )Nr   r  z)Struct cannot contain itself as a member.)r  r   rm   r  rp  r@  r  r  r   ro  var_entriesrl  re  rm  r   r9   )r   r   r  r   rl  s        r4   r   z*CStructOrUnionDefNode.analyse_declarationsb  s    ??&&tyy1ES% ??&{{3??,-

) 6))#u56(*!-- UD99D--#~~ --tzz.dhh(STU + 'r3   c                     | S r   r2   r   s     r4   rw   z)CStructOrUnionDefNode.analyse_expressionst      r3   c                      y r   r2   r   s     r4   r  z-CStructOrUnionDefNode.generate_execution_codew  r   r3   r   )r,   r-   r.   r   r  r   rw   r  r2   r3   r4   r  r  N  s       .K U$r3   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)CppClassNodeNc           	         | j                   d }n| j                   D cg c]  \  }}t        j                  ||        }}}t        d | j                   D              }|r6t	        d | j                   d |  D              st        | j                  d       |j                  | j                  d | j                  | j                  g | j                  |      | _        y c c}}w )Nc              3   (   K   | ]
  \  }}|   y wr   r2   r>  r  requireds      r4   r?  z'CppClassNode.declare.<locals>.<genexpr>  s     (X+!XX(Xs   c              3   &   K   | ]	  \  }}|  y wr   r2   r  s      r4   r?  z'CppClassNode.declare.<locals>.<genexpr>  s     1w{q((1w   zGRequired template parameters must precede optional template parameters.)base_classesro  r  )r  r
   r  sumrC  r   r9   declare_cpp_classrm   r  ro  r  )r   r   r  template_namer  num_optional_templatess         r4   r  zCppClassNode.declare  s    >>!!N >B^^M"9- )@@T\P\] MN M%((X(X%X"%c1wdnn]u_u^uNv1w.wdhh ij**IItTXXtzz> + S
Ms   !Cc           
          |j                         st         j                  dd        j                  d x}}nQ j                  D cg c]  \  }}|	 }}} j                  D cg c]  \  }}t	        j
                  ||        }}}d } j                  t         j                  ||      } fd}t        | j                  D 	cg c]  }	|	j                  |xs |       c}	      }
|j                   j                  | j                   j                  |
 j                  |       _         j                  y d j                  _        | j                  j"                  |_        g }fd j                   j$                  r|j&                  sd j                  _         j                  D ]3  }t+        |dd       }|r|j-                  |       |j/                  |       5   j                        D ]9  }|j1                  |        j                  !d	d
j3                  |      z  |_        ; t7         j                  |       _        | _        y c c}}w c c}}w c c}	w )Nz0Using 'cppclass' while Cython is not in c++ moder   r  )r  c                 j    | j                   s| j                  ryt        j                  d| z         y )NTz&Base class '%s' not a struct or class.)r  	is_structr   r9   )
base_classr   s    r4   base_okz2CppClassNode.analyse_declarations.<locals>.base_ok  s+    &&**>*>dhh H: UVr3   )ro  r  c              3   (  K   | D ]  }t        |t              r| t        |t              r% |j                  j                        E d {    Mt        |t
              s^|j                  k |j                        E d {     y 7 @7 	wr   )rL   CFuncDefNoder   r   r!  r  r  )r  r   func_attributess     r4   r  z:CppClassNode.analyse_declarations.<locals>.func_attributes  sw     " @dL1J&<=.tyy???l38S.t???@ @?s0   A
BBB$B1BBBBr  ztemplate <typename %s>z, typename r!  )r   r   r9   r  r
   r  r  r   rm   filterr  rq  r  r  ro  r  r  rl  rp  r@  r  r   r  r   r  r   template_declarationr   r   r  )r   r   r  template_namesr  r  r  r  r  bbase_class_typesdefined_funcsr   r  r]   r  s   `              @r4   r   z!CppClassNode.analyse_declarations  s2   zz|DHHF >>!.22N^DHNNS0@qmSNS=A^^M"9- )@@T\P\] MN M??&!$))SNKE	W
 "'TM^M^+_AIIels,C+_`**IIudhhJJ(T__P^ + `
 ::"#

EJ	@ ??&{{3??,-

) 1!$	48LL'))%0	1
 (8 n$$T*>>-0H=K]K]^lKm0mD-n !?	
U TM ,`s   I)!I%I+
c                     | j                   j                  | j                  j                  j                        | _         | S r   )r   rw   r  rl  r  r   s     r4   rw   z CppClassNode.analyse_expressions  s+    II11$**//2G2GH	r3   c                 x    | j                   j                  | j                  j                  j                  |       y r   )r   r  r  rl  r  r6  s      r4   r  z*CppClassNode.generate_function_definitions  s$    		//

0E0EtLr3   c                 :    | j                   j                  |       y r   r   r  r   s     r4   r  z$CppClassNode.generate_execution_code      		))$/r3   c                 :    | j                   j                  |       y r   rN  r   s     r4   r   zCppClassNode.annotate  rO  r3   )
r,   r-   r.   r  r  r   rw   r  r  r   r2   r3   r4   r  r  {  s*     JS2hM0!r3   r  c                   0    e Zd ZddgZdZd Zd Zd Zd Zy)CEnumDefNoderi   underlying_typeNc                 F   d }t         j                  r t        | j                  | j                        }|j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  |	      | _        y )N)r  scopedr  ro  r  r  rC   )r    r  rD   r9   rC   declare_enumrm   r  r  r  ro  r  r  r  )r   r   rC   s      r4   r  zCEnumDefNode.declare  sw     4884C%%IItxx**;;**DHH..C & 9
r3   c                    d }| j                   j                  |      }|j                  s t        | j                   j                  d       || j
                  j                  _         | j                  rO| j                  Ct        | j                  |      }| j
                  j                  |_        |j                  |_        n|}| j                  | j                  r|j                  sd| j
                  _        | j                  dk7  }|rdnd }| j                  D ]S  }|j!                  || j
                  |       |s#d|j
                  j"                  |j
                  j"                  n|z   }U y y )Nz'underlying type is not an integral typer   r  r   )r  rq  r  r   r9   r  rl  r  ri   r   rm   r   rp  r@  r  ro  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;%%$&&**,UV*9

';;4::1&tyy#6EEJ"~~EE::!{{3??,-

)  $(:'7!T

 u..udjjBUV#*+59ZZ5N5N5Z

11`s+u'u "r3   c                     | S r   r2   r   s     r4   rw   z CEnumDefNode.analyse_expressions  r  r3   c                 6   | j                   ry | j                  s| j                  s| j                  dk(  sy |j	                  | j
                         |j                  j                  t        j                  d      }| j                  j                  D ]  }|j                  |d|j                  d|j                  ||j
                               |j                  |t        j                         |j                  d|j!                  t"        j$                        d|j                  j'                         d|d|j)                  |j
                               |j+                  |t        j                          |j                  j-                  |       y )	NpublicT
manage_refz = PyLong_FromLong(); zif (PyDict_SetItemString(r   ) < 0) )r  r  rm   ro  r-  r9   	funcstateallocate_tempr
   r   r  enum_valuesrS   r  error_goto_if_null
put_gotrefname_in_module_stater	   moddict_cnamer!  
error_gotoput_decref_clearrelease_temp)r   rX   tempr   s       r4   r  z$CEnumDefNode.generate_execution_code  s/   ;;xxdoo.I  	dhh~~++J,E,ERV+WJJ** 	CDJJ

''dhh79 : OOD*";";<JJ))&*>*>?		--/)	+ ,
 !!$
(A(AB	C 	##D)r3   )	r,   r-   r.   r   rC   r  r   rw   r  r2   r3   r4   r  r    s)     -.K
C9u>*r3   r  c                       e Zd ZdgZd Zy)CEnumDefItemNoder   c                    | j                   r| j                   j                  |      | _         | j                   j                  j                  sO| j                   j	                  t
        j                  |      | _         | j                   j                  |      | _         |j                  j                  r|j                  d| j                  }n| j                  }|j                  | j                  |j                  | j                   | j                  ||j                  |j                  |j                  xr |j                  d u       x| _        }|}| j                   r| j                   j                   r t#        | j                   j                         }ne| j                   j$                  s| j                   j&                  r7| j                   j                  r!| j                   j                  j(                  }nd }|||_        |j*                  j-                  |       |j                  r0|j                  j.                  j-                  |j                         y y )N::)r  ro  r  r  )r   r  rl  r  r  r
   r	  is_cpp_enumr  rm   declare_constr9   ro  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   ::<<SADJ::??))!ZZ11*2G2GM
!ZZ@@E
??&& * 0 0$))<EJJE ..IIzJJ!,,*..%44PD9P	 / R 	R
U +
::zz$$*4::+;+;<
**$$

(?(?TZZEUEU!ZZ--<<
 "
!#-E %%e,??OO""))%**5 r3   N)r,   r-   r.   r   r  r2   r3   r4   r0  r0  3  s    
 )K!6r3   r0  c                   &    e Zd ZddgZd Zd Zd Zy)CTypeDefNoderm  r  c                    | j                   j                  |      }| j                  j                  ||| j                  | j                        \  }}|j
                  }|j                  }|j                  ||| j                  || j                  | j                        }|j                  rd|_        | j                  r|j                  sd|_        y y y )Nr  )r  ro  r  Tr   )rm  rq  r  ro  rp  rm   r  r  r9   r  ri  r@  r  )r   r   ru  r  rl  rm   r  r  s           r4   r   z!CTypeDefNode.analyse_declarationsg  s    ~~%%c* $ 7 7#$//$++ !8 !G##%%##$DOO $ C == $E;;s#$E   /;r3   c                     | S r   r2   r   s     r4   rw   z CTypeDefNode.analyse_expressionsx  r  r3   c                      y r   r2   r   s     r4   r  z$CTypeDefNode.generate_execution_code{  r   r3   Nr,   r-   r.   r   r   rw   r  r2   r3   r4   r:  r:  ^  s     -K%"r3   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&y)FuncDefNodeNFc                    d}| j                   D ]  }|j                  rd}|j                  rL|j                  j                  |      |_        |j                  j	                  |j
                  |      |_        i|j                  r5|j                  j                  rt        |j                  d       d |_        t        |j                  d       d |_        |j                  rd}|st        |j                  d        y )Nr   r   z2This argument cannot have a non-None default valuez)This argument cannot have a default valuez/Non-default argument following default argument)rU   rZ  rS  rv   r  rl  rT  r   r   r9   rU  )r   r   default_seenr  s       r4   analyse_default_valuesz"FuncDefNode.analyse_default_values  s    99 	RC{{ >>"%++";";C"@CK"%++"7"7#"FCK33;;..cgg'[\&*#''#NO"&CK cggPQ!	Rr3   c                     | j                   D ]/  }|j                  s|j                  j                  |      |_        1 | j                  r!| j                  j                  |      | _        y y r   )rU   r  rv   return_type_annotationr   r   r  s      r4   analyse_annotationszFuncDefNode.analyse_annotations  s^    99 	CC~~!$!=!=c!B	C &&*.*E*E*S*STW*XD' 'r3   c                 v   | j                   }|j                  }|j                  |v r!||j                     }|j                  |      }nNt	        |t
              r<|j                  r0|j                  d   r!|j                  }|j                  |      }||S |S |t        |j                  d       |S |t        urI|j                  |      s8t        |j                  j                  d       t        |j                  d       |S ||_        |j                  j                  r|j                  j                  |       |S )Nr+  r  r  r  )r  rl  rm   r  rL   r  r  r   r2  r   r9   r   r  rm  rr  rt  )r   r   r  r  	orig_typer  r  s          r4   align_argument_typezFuncDefNode.align_argument_type  s   00HH	88''(2I"2237J\*s~~#..QdBeI99#>J!
J)--. 
 n,Y5F5Fz5R#--##%YZ)--!<= 
	 "CHxx""88=
r3   c                      yNr   r2   r   lenvs     r4   need_gil_acquisitionz FuncDefNode.need_gil_acquisition  s    r3   c                    |}|j                   s|j                  r&|j                  }|j                   r|j                  r&| j                  rl| j                  rt
        nt        } || j                  j                  ||| j                  j                        }| j                  s| j                  r*d|_        n"t        | j                  j                  ||      }| j                  |_        | j                  j                  }|j                   r |j"                  xr |j$                   |_        || _        |j(                  |_        |S )N)rm   r  parent_scope
scope_nameT)rm   r  rQ  )is_py_class_scoper  r  needs_closureis_generator_expressionr   r   r  rm   r  is_generator_bodyis_generatoris_generator_scoper   r  rl  r  r  r  local_scoper   )r   r   genvrl   rN  rl  s         r4   create_local_scopezFuncDefNode.create_local_scope  s   $$(=(=##D $$(=(=.2.J.J*P\CDJJOO,0-0+/::+;+;=D %%):):*.'4::??*.+.0D  ++zz9DMM(9DJ..r3   c                 :    | j                   j                  |       y r   r  r6  s      r4   generate_function_bodyz"FuncDefNode.generate_function_body  r  r3   c                 0   '() ddl m}  j                  }|j                  r0|j                  s$t
        j                  dt
        j                  }nt
        j                  }|j                  |        j                  j                  ||        j                  ||        j                  j                  dk(  xr   j                  j                  j                  } j                  j                  dk(  xr   j                  j                  j                  }|xs |}|r#d j                   vr j                   dgz    _         j#                         }	 j$                  rd}
nj|j'                         }
|
rX|j(                  j+                  t-        j.                  dd	             |j(                  j0                  d
   r|j3                          |j5                  |       |j7                         |_        |j:                   |j<                  _        |jA                   jB                          jE                  ||       |jG                  d       |	r|jG                  |	        jI                  ||      xs  jJ                  } jL                  r jL                  jO                  ||d        jO                  ||       |}|jP                  s|j                  r&|jR                  }|jP                  r|j                  r& jT                  rT|jW                  |jX                  jZ                  j]                  t
        j                               |jG                  d       n j^                  r|j                  rS|jW                  |jX                  jZ                  j]                  t
        j                               |jG                  d       |jW                  |jX                  jZ                  j]                  t
        j                               |jG                  d        ja                  ||       |jb                  D ]-  }|jd                  r|jf                  r|ji                  |       / d} jj                  }|jl                  r|jn                  r|jp                  }|jr                  sl|jt                  rd}n*|jv                  rd|jy                  |jz                        z   }|jG                  |j]                  t
        j|                        |d       |j                         } j                  |        j                  }|j                  D cg c]  }|j                  s| }}|j:                  xr  jT                  xs  j^                  }d )d}|s|r$|j                          d|j<                  _        d}n|j                         )|
rd|j                          d } j                  r5 j                  j                  |        j                  j                         }|j                  |       |r j                  |       |j                         }|j                         }|j<                  j>                   }|r j                  |        jT                  rt        j                  dd      }t        j                  |jX                  jZ                  j                  |      }|s2d|j                  |jX                  jZ                  j                        z  }|jG                  t
        j                  d|jX                  jZ                  j                         d|d|j                  |jX                  jZ                  j                        d|j                  t
        j                        d
       |jG                  dt
        j                  z         |jG                  t
        j                  d|jX                  jZ                  j                  d      d       |j                  dt               |jG                  |j                   jB                               |jG                  d       |j                  t
        j                  |jX                  jZ                         |jG                  d        j^                  r+ j                  rK|jG                  |d|jX                  jZ                  j                         dt
        j                  d       nJ|jG                  |d|jX                  jZ                  j                         d t
        j                  d       |j                  r&|jG                  t
        j                  d|d       nX jT                  rL|j                  ||jX                  jZ                         |j                  ||jX                  jZ                         |
r j                  r#t         j                  j                  d!z         }n j                  j                  }|j                  | jB                  |j<                  j>                    jL                  d u"       d|j<                  _^         j                  ||       |j                  D ]  }|jZ                  jv                  s.|s|j                  s(|jd                  r5|j                  |       G|j                  sT|jd                  ra|j                  ||j<                  j>                  #        |jb                  D ]  }|jf                  r|j                  rx|jd                  sl|jZ                  jv                  r'|j                  ||j<                  j>                  #       |j                  r|j                  |       n|j                  |       |jZ                  j                  |      s|jZ                  j                  ||        |jb                  |j                  z   D ]L  }|jZ                  j                  s|j                  j                  j                  s;|j                  ||       N  j                  |       |j                  D ]6  }|jZ                  j                  s|j                  || jB                         8 |j<                  j                  rd}|rR|j:                  rF)#)j                          d )d|j<                  _        |j                          d|j<                  _         j                  ||       |jA                   jB                  d$       |jG                  d       |jG                  d%       |j<                  j>                  |j<                  j>                  )d u d&(|f()fd'	' jj                  } j                  j                  s|jt                  r+t
        j|                  } 'd(       |j                  ||       nn|jv                  sb|jz                  }|r&|jG                  t
        j|                  d|d       n.|jr                  s"|jG                  d)t
        j|                  z         |
r1|j                  t
        j|                   jB                  |(d(    *       |j                  |j                        r: j                  j                  s|j                  |j                         |j                  |j                         |j<                  j                         D ]$  \  }} 'd+       |j                  ||(d+   #       & t        |      d,kD  } | r|j(                  j+                  t               |jG                  d-       |jG                  d.        'd+       |jG                  d/       |jG                  d0       |D ]  }|j                  ||        |jG                  d1       |jv                  r7dd2l m~}! |!j                  t
        j|                  |       t
        j|                  }"n j                         }"|
r 'd+       |j                          |jG                  d3       |j                   jB                         |jG                  d4       |j                  d5 jB                  (d(    6       |jG                  d7        j                         }#|"|#r 'd+       |j<                  j                  rF|jG                  d8t
        j
                  z         |jG                  d9t
        j
                  z         |j                   j                  j                         |j<                  j                  r{|jG                  d       nit         j                  jB                  d: j                  j                  z  d,        'd+       |j                   j                  j                         |jz                  }$|"|$r|$}"|"9|"t
        j|                  k7  rT|jG                  t
        j|                  d|"d       n.|jr                  s"|jG                  d)t
        j|                  z         |r 'd+        j                  |       |j                         f'( fd;	}%| s|s|jv                  r/(d+   s|jv                  sJ |j                  |j8                         n |%        nd< }%|j                  |j                        s|j                  |j                        s|j                  |j                         |D ]  } 'd(       |j                  ||        |r 'd(        j                  |       |jv                  r|j                  |j                  t
        j|                              }&|jG                  d=|&z         (d(   s|j                          |jG                  d>       (d(   s|j                          |jG                  d       |j                  |j8                        r" |%        |j                  |j8                         |jb                  D ]  }|j                  r|jd                  r|jZ                  j                  r9|jf                  r|j                  sL|jZ                  j                  rB 'd(       n9|jZ                  j!                  |      r|jZ                  j#                  ||       |j%                  |(d(   #        |j                  D ]w  }|jd                  r|jZ                  jv                  r|j                  s/3|s|j                  sB|jZ                  j                  r 'd(       |j%                  |(d(   #       y  jT                  r= 'd(       |j'                  t
        j                  |jX                  jZ                         |j:                  sD|jz                  }$ j                         }"|"|$r|$}"|j)                  t
        j|                  |        j                  j*                  rU j                  j                  d?k(  r< 'd(       |jG                  d@t
        j|                  dAt
        j|                  dB       |
r9d|j<                  _^        |j-                  |j<                  j>                   6       |j<                  j                  rP|j/                          |j1                   j                  j                  |C       |j3                  (d(    6       |s|j:                  r&(d(   r!|j                          d|j<                  _        |jr                  s"|jG                  dDt
        j|                  z         |jG                  d       |	r|jG                  dE|	z         |j5                  |j<                         |j7                           jL                  r jL                  j                  ||        j9                  |       y c c}w )FNr   r  rJ   __getbuffer____releasebuffer__cython_unusedFProfilez	Profile.c	linetracer   Twith_pymethdef
proto_only)re  rG  z = NULLrF  tp_newrk   z
%s->tp_newz = ()(r   , NULL);if (unlikely(!%s)) {Py_None} else {}z) __Pyx_CyFunction_GetClosure();z) z
 (wrapper))r  is_cpdef_funchave_giltrace/* function exit code */)successr   gil_state_declaredc                 t    |    s2d   sj                          dd<   |j                  d       d| <   y y )Nrw  TFdeclare_gilstate)rz  put_ensure_gil)	code_pathrX   	gil_ownedgilstate_decls     r4   
assure_gilz=FuncDefNode.generate_function_definitions.<locals>.assure_gil  sK    Y' !56!2246:I23##U#;'+	)$ (r3   rv  z!__Pyx_pretend_to_initialize(&%s);r  r  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);}r  z#if CYTHON_USE_SYS_MONITORING#elseNULL)r  #endifzint %s = 0; /* StopIteration */
if (!%s) {z&Unraisable exception in function '%s'.c                     d   r d|        nd   r| j                          dd<   d   d   k(  sJ j                  dd   dd          y )Nrv  r   )rX   Fz: error path z != success path )put_release_ensured_gilr9   )rX   r  r}  r   s    r4   $align_error_path_gil_to_success_pathzWFuncDefNode.generate_function_definitions.<locals>.align_error_path_gil_to_success_pathb	  sp    Y'wT2w'002).Ig& )Yy-AA HHHi0)I2FDH HAr3   c                       y r   r2   r2   r3   r4   r  zWFuncDefNode.generate_function_definitions.<locals>.align_error_path_gil_to_success_pathx	  s    r3   	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  rY  is_closure_scopeis_passthroughr	   cur_scope_cnameouter_scope_cnamemangle_closure_cnamesr   r  r  r  rm   r  r  r=  get_preprocessor_guardrW  
is_tracingr  r  r   load_cachedr   use_fast_gil_utility_codeenter_cfunc_scope	new_labelreturn_from_error_cleanup_labelr  r$  r}  r-  r9   r  rS   needs_assignment_synthesispymethdef_requiredpy_funcgenerate_function_headerrS  r  rT  putscope_classrl  rh  needs_outer_scopegenerate_argument_declarationsr  
in_closurer/  put_var_declarationr  is_cv_qualifiedr  cv_base_typerg  r~  r  literal_coder  retval_cnamerO   generate_keyword_listr  buffer_entriesr  r{  put_trace_declarationscode_objectgenerate_result_code	py_resultput_trace_frame_initgetbuffer_checkgetbuffer_initr   ConstructorSlotget_slot_functionr)  typeptr_cnamer.  empty_tupler@  
put_increfr   r+  r(  is_cyfunction
self_cnamerJ  r   r   put_trace_start	can_tracegenerate_argument_parsing_codearg_entriescf_is_reassignedput_var_increfput_var_incref_memoryviewslicexdecref_cleanupput_var_xincrefneeds_explicit_constructiongenerate_explicit_constructionrf  
buffer_auxbuflocal_nd_varput_init_varsgenerate_argument_type_testsput_acquire_arg_bufferneeds_refnannyr  r]  r   put_init_to_py_noneput_trace_return
label_usederror_labelput_gotoreturn_label	put_labelall_managed_tempsput_xdecrefrK   restore_exception_utility_codeput_release_buffer_coder  put_init_entryerror_valueput_trace_exception_propagatingput_trace_unwind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needs_explicit_destructiongenerate_explicit_destructionput_var_xdecref
put_decrefput_xgiveref
is_specialput_trace_exitput_declare_refcount_contextput_setup_refcount_contextput_finish_refcount_contextput_temp_declarationsexit_cfunc_scopegenerate_wrapper_functions)*r   r   rX   r  rN  r  is_getbuffer_slotis_releasebuffer_slotis_buffer_slotpreprocessor_guardtracingre  cenvr  initr  tempvardecl_coder  used_buffer_entriesvar_decls_definitely_need_gilvar_decls_need_gilr  refnanny_decl_coderefnanny_setup_coderefnanny_needs_giltp_slotslot_func_cname
trace_namelhsvalr  rl  buffers_presentr  err_valr  default_retvalr  condr  r}  r~  s*   `                                      @@@r4   r  z)FuncDefNode.generate_function_definitions  sV     )<)<,2,B,B,2,D,D!F !' 8 8""#45		//d;((t4!ZZ__? ?!ZZ-->> 	!%4G!G "C!%!1!1!B!B 	*C.Cdnn4!%?2C!C!88:Goo'G  11++I{CE##..{;224 	t$/3~~/?,'+zz>  	dhh++D$7

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

3HHT%%**;;F<T<TUVJJsO++D$7%% 	0E$$((/	0
 &&&&;+?+? &22K""&& //{778Q8QRRJJ,,V-@-@A   //1""4( &&262E2ETuTT )-

(e8J8J8ddNdNd%"7!'+DNN$!% 002M335K  55d;"..88:%%k2   & .==?"224!%!9!99 %//)DG'99$:J:J:O:O:U:UW^_O"".--d.>.>.C.C.Q.QR#TJJ&&  %%<<>))$*:*:*?*?*M*MN))&*<*<=? @ JJ-0F0FFGJJ&&  %%//	:< = OOI~6JJttxx01JJz"OOF22D4D4D4I4IJJJsO!!!!

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

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

)?)?ARST## 143C3C3H3HI  !2D4D4D4I4IJ *4::??\+IJ
!ZZ__
  DHH0H0H,HX\XdXdlpXp ! r'+DNN$++C6 %% 
	GE::005#9#95CSCS''.
 ''0@0@33E-1^^-E-E 4 G
	G %% 
	GE|| 6 6u?O?O::0077151I1I 8 K((((/''.zz55d;

99$F
	G %%(8(88 	2Ezz##(8(8(H(H(M(M$$UD1	2
 	))$/%% 	EEzz##--eT488D	E >>(( "&$**(,,. $+/(((*',DNN$
 	##C.dhhe,

2

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

MN

897#

78

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

RS--())&*=*=tD --**,7#446

:;%%dhh/

7#%%fdhh)IBV>V%W

8$99;I"i7#>>99$**9F<`<`` JJ|f.R.RRS&&tzz'@'@A>>99JJsO

@

112346 7###DJJ$=$=>(66N>("f111JJV-@-@'JK ((

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

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

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

 ??4??@02NN4??@%% 	GE::!1!1zz++<<(>(>::33y)66t<

88uE  91E F	G %% 	GEzz,, --"5+A+A:://y)   91E F	G  y!OOF22D4D4D4I4IJ zz(66N&&(G>(f11;?::  TZZ__
%B y!JJ##V%8%8: ; ',DNN$$..*B*B&BC>>((;;=::4::??Xj:k,,y7K3K,L4::)I*>((*',DNN$""JJ|f&9&99:

3JJ),>>? 	..t~~> 	<<LL66sDA''-Q Us   AaAac                    |j                   j                  rt        |j                  d       ni|j                   j	                         sO|j                   j
                  s9|j                   j                  s#t        |j                  d|j                   z         |j                  |j                  |j                   |j                        }|j                  r|j                  |_	        |S )NzInvalid use of 'void'z Argument type '%s' is incomplete)
rl  rg  r   r9   r  re  r  declare_argrm   r  )r   r   r  r  s       r4   declare_argumentzFuncDefNode.declare_argument	  s    88#''23%%'1B1BchhFaFa#''=HI#((CGG<>>"~~Er3   c                 6   |j                   j                         r|j                  j                  t	        j
                  dd             |j                  |j                         }d|j                  j                  z  }d}|j                   j                  r&|j                   j                  r|j                  rdnd}|j                  d|||j                  |j                  ||j                  |j                         fz         y t#        |j                   d       y )	NArgTypeTestFunctionArguments.c((PyObject *)%s)r   r%   r   z8if (unlikely(!__Pyx_ArgTypeTest(%s, %s, %d, %s, %s))) %szICannot test type of extern C class without type object name specification)rl  typeobj_is_availabler  r  r   r  typeptr_cname_in_module_stater  r  is_builtin_typerequire_exactr<  rS   accept_noner"  r+  r9   r   )r   r  rX   r  arg_codeexacts         r4   generate_arg_type_testz"FuncDefNode.generate_arg_type_test	  s    88((*--''7LMO >>sxxHM)CIIOO;HExx''CHH,B,B !551JJJ!OO$$OOCGG,N. ./ #''fgr3   c           	         |j                   j                  rd|j                  j                  z  }n|j                  j                  }|j	                  d|z         |j	                  dt        dt        |j                              |j                  |j                  |j                        fz         |j	                  d       y )Nz
%s.memviewz,if (unlikely(((PyObject *)%s) == Py_None)) {zKPyErr_Format(PyExc_TypeError, "Argument '%%.%ds' must not be None", %s); %s   rn  )
rl  r  r  r  rS   r   rK   r"  r+  r9   )r   r  rX   r  s       r4   generate_arg_none_checkz#FuncDefNode.generate_arg_none_check
  s    88&& 399??2EIIOOE

AEIJ

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

3r3   c                      y r   r2   r   s     r4   r  z&FuncDefNode.generate_wrapper_functions
  r   r3   c                     |j                  | j                         | j                  s0| j                  D ]   }|j                  r|j                  |       " y y r   )r-  r9   r   rU   rW  rP  r   rX   r  s      r4   r  z#FuncDefNode.generate_execution_code
  sH    dhh yy 7~~0067 r3   c                     | j                   j                  d   }	 |j                  j                  j                  j
                  d   j                  }||fS # t        t        f$ r d }Y ||fS w xY w)Nr   obj)rY  r  rl  rm  r  r  r   KeyError)r   	py_bufferobj_types      r4   _get_py_buffer_infozFuncDefNode._get_py_buffer_info)
  sv    $$003		 ~~//55==eDIIH ("" ) 	H(""	s   7A A-,A-c                     | j                         \  }}|j                  }|j                  d|z         |j                  d       |j                  d       |j                  d       y )Nzif (unlikely(%s == NULL)) {zZPyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");z
return -1;rn  )r%  r  rS   )r   rX   r#  r  views        r4   r  zFuncDefNode.getbuffer_check9
  sY    //1	1

0478

 O 	P

< 

3r3   c                     | j                         \  }}|j                  }|r7|j                  r+|j                  d|z  |       |j	                  d|z  |       y |j                  d|z         y )N%s->objz%s->obj = NULL;)r%  r  r~  r  rJ  rS   r   rX   r#  r$  r'  s        r4   r  zFuncDefNode.getbuffer_initB
  se    "668	8,,$$Y%5x@Y-x8JJ(4/0r3   c                 &   | j                         \  }}|j                  }|r\|j                  rP|j                  d|z         |j	                  d|z  |       |j                  d|z  |       |j                  d       y |j                  d|z         y )Nzif (%s->obj != NULL) {r)  rn  zPy_CLEAR(%s->obj);r%  r  r~  rS   r(  r,  r*  s        r4   r  z#FuncDefNode.getbuffer_error_cleanupK
  s    "668	8,,JJ/$67OOI,h7!!)d"2H=JJsOJJ+d23r3   c                     | j                         \  }}|j                  }|r]|j                  rP|j                  d|z         |j	                  d|z  |       |j                  d|z  |       |j                  d       y y y )Nzif (%s->obj == Py_None) {r)  rn  r,  r*  s        r4   r  z$FuncDefNode.getbuffer_normal_cleanupV
  su    "668	8,,JJ2T9:OOI,h7!!)d"2H=JJsO	 -8r3   c                    | j                   j                  sy | j                   j                  }t        j                  | j
                  j                        j                  |      }|sy |dk(  r&| j                   j                  j                  d      sy |dv r!| j                   j                  j                  ry |j                         S )N__long____int__r_  r`  )r  r  rm   r   get_slot_tablerY  r   get_slot_by_method_namer  r  r  preprocessor_guard_code)r   rm   slots      r4   r  z"FuncDefNode.get_preprocessor_guard_
  s    zz$$zz''(8(8(C(CD\\]ab:djj&6&6&B&B9&M99djj>N>N>_>_++--r3   )'r,   r-   r.   r  rT  r  r  rW  rU  is_coroutineis_asyncgenrV  is_async_defr=  has_fused_argumentsstar_argstarstar_argr  r  rE  r   rC  rG  rJ  rO  r[  r]  r  r  r  r  r  r  r%  r  r  r  r  r  r2   r3   r4   r@  r@    s    * GML#LKLIHLMK!KR(Y440m.^h.7# 1	4.r3   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ed        Zej$                  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% fdZ& xZ'S )!r  )rm  r  r   r  py_func_statr  r=  FNc                 .    | j                   j                  S r   )r  rm   r   s    r4   unqualified_namezCFuncDefNode.unqualified_name
  s    zzr3   c                 6    | j                   j                         S r   r  r   s    r4   rT  zCFuncDefNode.declared_name
  r  r3   c                 ^    | j                   r| j                   j                  S | j                  S r   )r  r  _code_objectr   s    r4   r  zCFuncDefNode.code_object
  s%     ,0<<t||''NT=N=NNr3   c                     || _         y r   )rB  )r   r  s     r4   r  zCFuncDefNode.code_object
  s
    'r3   c                    |j                   d   | _        |j                  | _        | j                  i | _        | j                  j                  |j                   j                  di              | j                  | j                  j                  |      }|~| j                  j                  r| j                  j                  |      }nLt        | j                  j                  d       t        j                  }n| j                  j                  |      }d|j                   v xr |j!                  d       | _        t%        | j&                  t(              rG| j&                  j                  ||d| j*                  d uz  | j                  | j,                        \  }}n;| j&                  j                  ||d| j*                  d uz  | j,                        \  }}|j.                  st        | j                  d       || _        | j2                  |_        | j&                  }t7        |d	      s|j8                  }t7        |d	      s|| _        |j<                  | _        | j:                  j>                  }| j,                  d
k(  s| j@                  r"|r t        | j:                  j                  d       |jB                  dk(  r_| j,                  dk7  rP|jD                  -|jD                  jF                  rt        | j                  d       ntI        | j                  dd       tK        | j<                  |j<                        D ]L  \  }}| jM                  ||       |j0                  |_        |jN                  |_'        |jP                  |_(        | jS                  |j0                  |j                  |       |j0                  jT                  rd| _+        |j0                  jX                  r%d| jZ                  v rtI        |j                  dd       |j0                  jX                  s|j0                  j\                  s| j0                  j^                  rt        |j                  d       &d| jZ                  v s6tI        |j                  dd       O | jS                  |j`                  | j                  |       |jN                  }	|jP                  }
| jb                  |_1        | j"                  |_        |je                  |	|| j                  |
| j,                  | j@                  | j*                  d u| jZ                  | j2                  | jf                  
      | _4        |j`                  | _0        | j`                  jj                  r%| j,                  dk7  rt        | j                  d       | j`                  jl                  r&| j`                  jo                  | j                  d       | j2                  rZ|jp                  sN| j"                  sBts        | j<                        dk  s#| j<                  d   j0                  jt                  sd| _        | jw                  |       | jy                  |       y )Nc_compile_guardlocalsr  r2  r%   )rn  r  ro  )rn  ro  z*Suite attached to non-function declarationrU   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  ro  r  definingr=  r  rp  zFunction cannot return an arrayzused as a return valuer   F)=r   rE  r  is_c_class_methodr  r   r   directive_returnsr  is_annotationrm  rq  r   r9   r
   r   r  r  rL   r  r  r   ro  r  rl  r  r  hasattrru  cfunc_declaratorrU   r  r  r  r  r   r   ziprJ  rm   r  _validate_type_visibilityri  r9  rf  r=  is_pythran_exprr  r  r  r  inline_in_pxdr  re  r  check_nullary_constructorr  rK   r~  declare_cpdef_wrapperr[  )r   r   rm  r  typr  opt_arg_count
formal_argtype_argrm   r  s              r4   r   z!CFuncDefNode.analyse_declarations
  s   "~~.?@!$!5!5  ($&D!$$S^^%7%7"%EF!!-..>>sCI ))77 $ 6 6s ;I$0044lC * 5 5I..s3I .#.. @ hYgIhEhdoo':;#'??#:#:3diit.C)D!%!6!64?? $; $T OS $(??#:#:3diit.C)DQUQ`Q` $; $b OS$((HI
 	!--__
*f-#J *f- !+OO	--@@OOx'488$''++VX #%$//X*E"".33F3F3N3N dhhEG EqJ %(		388$< 	W J$$S(3&mmJO&mmJO'~~J**8==(,,L}}%%+/(}}&&8t~~+E
(NPQR}}&&(--*G*G99??*..qs/JNN,RTUV'	W* 	&&s#F##%%"22#44**#txxDOOYYd*dnn((1C1C	 + E

 ??$$H)D$((=>((66txxAYZC$7$7@U@U499~!1):):)F)F#( ""3'$r3   c                     | j                   sy | j                  rt        | j                  d       | j	                  |j
                        }t        j                  ||dd      }| j                  rXddlm	} t        | j                   || j                  t        d            	      g}|d
   j                  j                  |       ng }| j                  j                  }t!        | j                  | j                  j                  | j"                  d d | j$                  t'        | j                  |g      |d	      | _        |j
                  | j(                  _        | j(                  j+                  |       d| j(                  j                  _        t'        | j                  | j(                  g      | _        t0        j2                  | j(                  _        | j(                  j                  | j                  _        dx| j                  _        | j                  j6                  _        | j                  |j:                  |<   | j                  j<                  s|j
                  rt>        j@                  r| jB                  r4| j                  jD                  sJ | j(                  | jB                  _        y tG        | j                  | j(                        | _!        t'        | j                  | jB                  | jH                  g      | _$        y y y )Nz&static cpdef methods not yet supported)r  F)profilerc  r   r  r2  r\  	decoratorr   r  )	r9   rm   rU   r:  r;  rC   r   r  r   T)r  )%r  r  r   r9   call_self_noder  r   r  r  r  DecoratorNoder   r\  rv   r  rm   DefNoderU   rC   r   r  r   r  r=  r
   r   rl  as_variabler  r  is_final_cmethodr    lookup_module_cpdefoverrideis_fused_specializedOverrideCheckNoder   )r   r   py_func_bodyr  r  rm   s         r4   rS  z"CFuncDefNode.declare_cpdef_wrapper  s.     $((DE**3;N;N*O-<<#u = ?   +'HTXXTabpTq<rstJqM##11#6Jzz488$(JJOO$(II(,,0#'88$0,$P*4*+- (+':':$))#.,0)($,,H&55!%!3!3

8<<

$**005 JJD

++((G,G,G}}zz666(,% 1$((DLL Q($--9ST	 -H ,r3   c                     | j                   dk(  xs | j                  }t        |dd      }|rF|rC|j                  r6|j                   dv s'|j                  s|j                  st        |d       yyyyyyy)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)ro  r  r   r  r@  r   )r   rl  r9   r   public_or_apir  s         r4   rO  z&CFuncDefNode._validate_type_visibility:  st    
 H4@gt,Us':':$$(<<II!2!2cWX "3I = (;U=r3   c                    ddl m} | j                  j                  }|r%|d t	        |      | j                  j
                  z
   }|D cg c]  }|j                   }}|r5|j                  | j                  | j                  j                        }|}n.| j                  j                  r| j                  j                  j                  j                  }	|j                  | j                  |	j                        }
|	|
_	        |j                  | j                  |
| j                  j                        }n| j                  j                  d   j                  j                  }|j                  | j                  |j                        }||_	        |j                  | j                  || j                  j                        }|xr t        j                   }|j!                  | j                  ||D cg c]  }|j                  | j                  |      ! c}|      }t#        | j                  t$        j&                  |      S c c}w c c}w )Nr   r  r\  )r!  	attributer   )functionrU   wrapper_call)r9   r  r   )r   r  rl  rU   rK   r  rm   r  r9   r  r  r  r  AttributeNoder    rb  SimpleCallNodeReturnStatNoder
   r   )r   omit_optional_argsr  r  rU   r  	arg_namescfunccall_arg_namesclass_entry
class_noder  rW  skip_dispatchnc_calls                   r4   r]  zCFuncDefNode.call_self_nodeF  s   yy~~ATTYY%A%AABD)-.#SXX.	.&&txxdjjoo&FE&NYY''****66<<K"++DHH;;K;K+LJ*J++DHH*PTPZPZP_P_+`E*//55J ))$(()IH'HN++DHH(djjoo+^E,L1L1LM))HH@IJ1)$$TXXA$6J&	 * (
 $((
8Q8QY_``+ /& Ks   I2$I
c                     | j                   j                  D ]6  }|j                  st        |j                  d       | j                  ||       8 y )Nr_  )rl  rU   rm   r   r9   r  rF  s      r4   declare_argumentszCFuncDefNode.declare_argumentsb  s?    99>> 	,C88cgg67!!#s+	,r3   c                 .    | j                   j                  S r   )rl  r  rM  s     r4   rO  z!CFuncDefNode.need_gil_acquisitionh  s    yy!!!r3   c                 V   | j                   }|j                  }|j                  r|s|j                  j                  rt        | j                  d       | j                  j                  D ]<  }|j                   j                  s|j                  r't        | j                  d       > y y y )Nz9Function with Python return type cannot be declared nogilz8Function declared nogil has Python locals or temporaries)
rl  r  r  r  r~  r   r9   rY  r  in_with_gil_block)r   r   rl  r  r  s        r4   r   zCFuncDefNode.nogil_checkk  s    yy==::h++dhhQS))55 `::))%2I2I$(($^_`	 ':r3   c                 t   |j                   | j                  _         | j                  !| j                  j                  |      | _        nO| j                  !| j                  j                  |      | _        n"| j                  |       | j                  |       | j                  | j                        | _        | S r   )	r   rY  r=  rw   r  rC  rG  rO  r  r   s     r4   rw   z CFuncDefNode.analyse_expressionsv  s    &)nn#( $ 1 1 E Ec JD\\%<<;;C@DL'',$$S)44T5E5EFr3   c                      yNFr2   r6  s      r4   r  z'CFuncDefNode.needs_assignment_synthesis  s    r3   c                    | j                   }g }| j                  }|j                  d t        |j                        |j                  z
   D ]O  }	|	j                         }
|j                  |	j                        }|j                  sd|
z  }
|j                  |
       Q |rk| j                  r_t        j                  j                  t        j                        }| j                  r|j                  |       n|j                  d|z         |j                  r:|r8|j                  |j                   j                  t        j"                               |j$                  r|j                  d       |sdg}|| j&                  j(                  }|j+                  |dj-                  |            }| j&                  j.                  dk(  rd|vrd}nd}d }|j1                  | j&                  j2                        }| j4                  j                  ||	      }| j6                  xs | j&                  j8                  }| j:                  rO|r2|j<                  j>                  d
   jA                  | j:                         |jA                  | j:                         |r| jC                         }|r(|j<                  j>                  d
   jA                  |       |j<                  j>                  d
   jA                  |||d       |r(|j<                  j>                  d
   jA                  d       |jA                  |||d       |j<                  jE                  | j&                         y )NzCYTHON_UNUSED %sz...voidr   privater2  static r   )dll_linkagemodule_declarationsz; /* proto*/r  z {)#rY  rl  rU   rK   r  rh  rj  rm   cf_usedr  r  r
   r	  r	   skip_dispatch_cnamerc  r  optional_args_cnamer  r  
func_cnamefunction_header_coder   ro  build_function_modifiersfunc_modifiersr  rI  r   r  r  partsrS   r  use_entry_utility_code)r   rX   re  with_opt_argswith_dispatchr  r  	arg_declsrl  r  arg_declr  dispatch_argentitystorage_classr  r=  headerneeds_protor  s                       r4   r  z%CFuncDefNode.generate_function_header  s     	yy99Dc$))nT-D-DDE 	'C++-HLL*E==-8X&	' T--%00AA**,L}}  .  !3l!BC""}T//@@A[A[\]U#I=JJ))E**5$))I2FG::  I-$e2C%MM11$**2K2KL	!!226{2S,,G

0G0G$$  &&'<=CCDD]D]^JJt001!%!<!<!>!  &&'<=CCDVW""#89??(5y&IK!  &&'<=CCHM

	6BC//

;r3   c                 V   | j                   }| j                  D ]  }|j                  s|j                  |j                        }| j
                  s|j                  sD|j                  |      }|j                  |j                  j                  |j                        d|d        y rE  )rY  rU   rZ  rj  rm   rc  r  rB  rS   rl  rh  r  )r   r   rX   r  r  r  r   s          r4   r  z+CFuncDefNode.generate_argument_declarations  s      99 	GC{{SXX.==EMM ==dCFJJ11#))<f F G	Gr3   c                      y r   r2   r   s     r4   r  z"CFuncDefNode.generate_keyword_list  r   r3   c           
        
 d}d}| j                   }| j                  j                  rnj                  dt        j
                  z         | j                  D ]
  

j                  s|j                  
j                        }| j                  s|j                  rj                  dt        j
                  dt        j                  d|d       
j                  }t        |d      s|j                  }t        |d      sj                  
j                   dt        j
                  d| j                  j#                  |j                        d	       |d
z  }|d
z  } t%        |      D ]  }j                  d        j                  d       
fd}	| j                  D ]#  
 |	|j'                  
j                               % y )Nr   r  if (rJ   zn > ) {rm   rF  rG  r   rn  c                 P   | j                   rj                  sj                  | j                  d| j                  d       | j
                  j                  r(| j
                  j                  | j                  d       y j                  |        j                  |        y y y )NrF  rG  T)
r  rZ  rS   r  original_cnamerl  r  generate_incref_memoryviewslicer  put_var_giveref)r  r  rX   s    r4   put_into_closurezECFuncDefNode.generate_argument_parsing_code.<locals>.put_into_closure  sy    

e6J6JKL::00JJ>>tU[[RVW''.((/ )4r3   )rY  rl  r  rS   r	   r  rU   rZ  rj  rm   rc  r  r  r  rL  ru  r  opt_arg_cnameranger  )r   r   rX   r  r  r  r  r  r  r  r  s     `       @r4   r  z+CFuncDefNode.generate_argument_parsing_code  sl     99''JJ{V%?%??@yy ;;!LL2E}}

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

$'IIv/I/I$(II$;$;JOO$L$N O 	FA 4[  

3 JJsO	0 99 	:CU..sxx89	:r3   c                      y r   r2   r   s     r4   !generate_argument_conversion_codez.CFuncDefNode.generate_argument_conversion_code  r   r3   c                     | j                   j                  D ]W  }|j                  r| j                  ||       "|j                   j                  s9|j
                  rF| j                  ||       Y y r   )rl  rU   needs_type_testr  r~  r  r  r  s      r4   r  z)CFuncDefNode.generate_argument_type_tests  sW     99>> 	8C""++C6%%coo,,S$7		8r3   c                     |j                   j                  d   r,|j                  | j                         |j	                  d       t
        |   |       | j                  r| j                  j                  |       y y )Nrc  r   )r  r   r-  r9   rS   rj   r  r=  )r   rX   rN   s     r4   r  z$CFuncDefNode.generate_execution_code  sa    &&{3MM$((#JJrN'-55d; r3   c                 p    | j                   j                  ry| j                  j                  j                  S )N0)r  r~  r  rl  r  r   s    r4   r  zCFuncDefNode.error_value  s(    ''::??222r3   c                 B    | j                   j                  j                  S r   )r  rl  r  r   s    r4   r  z)CFuncDefNode.caller_will_check_exceptions  s    zz...r3   c                    d}| j                   }|j                  }|j                  |dz  }|j                  }| j                   j                  t        j
                  d||_        |j                          | j                  |d|j                  j                  |j                  j                  |j                         | j                  j                  s|j                  d       | j                  j                  }|d t        |      | j                  j                  z
   D cg c]  }|j                   }}|j                  j                  r |j!                  t        j"                         n|j                  r|j!                  d       |j                  j                  r |j!                  t        j$                         n|j                  r|j!                  d       |j                  | j                   j                  dd	j'                  |      d
       |j                  d       |j                  y y c c}w )Nr   r   wrap_)r  r  r  return r  r  ri  r   ro  rn  )r  rl  
prev_entryr  r	   r  rS   r  r  r  r  rg  r  rU   rK   r  r  r  r  r   )r   rX   r   r  r  rU   r  arglists           r4   r  z'CFuncDefNode.generate_wrapper_functions
  s    

JJ	*FA$$E04

0E0EvGZGZ\]^EJJL))a#jj77#jj;;&&	 * (
 ##++#99>>D,01X#d)DII<X<X2X,YZSsyyZGZzz((v99:))s#zz,,v99:--v&JJDJJ$9$9499W;MNOJJsO/ * [s   %H;c                 b    t         |          }| j                  r|rJ d| j                   S |S )Nz#if )rj   r  rE  )r   super_guardrN   s     r4   r  z#CFuncDefNode.get_preprocessor_guard)  s9    g46""$../00r3   )r   r   r   )r   r   N)(r,   r-   r.   r   r   rQ  r  r  rJ  rc  r  r  r=  rB  r?  rT  rY  r  setterr   rS  rO  r]  r{  rO  r   rw   r  r  r  r  r  r  r  r  r  r  r  r  rr   rs   s   @r4   r  r  m
  s    0 TK0KMJHOLL/ O O ( (h%T-U^
Ya8,"	`1<fG#:L8<3/> r3   r  c                       e Zd Zg ZdZdZd Zy)PyArgDeclNodeFc                 <    | j                   j                  ||       y r   )r  r  r6  s      r4   r  z+PyArgDeclNode.generate_function_definitions<  s    

00d;r3   N)r,   r-   r.   r   r  rR  r  r2   r3   r4   r  r  1  s     KKK<r3   r  c                       e Zd ZdgZy)r^  r\  Nr,   r-   r.   r   r2   r3   r4   r^  r^  @  s     -Kr3   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.y)!r_  )rU   r:  r;  r   r  rE  r  rE  FNr  r   Tc                 &   t        j                  | |fi | dx}x}x}}| j                  D ]G  }|j                  r|dz  }|j                  r|dz  }|j
                  s|dz  }|j
                  rC|dz  }I || _        || _        || _        || _	        y r6   )
r@  r   rU   rV  rU  rZ  num_posonly_argsnum_kwonly_argsnum_required_kw_argsnum_required_args)r   r9   rV   pr   rkrr  s           r4   r   zDefNode.__init__y  s    T3/$/AQ99 	C||Q{{Q{{!GB;;Q	 !" $&!!"r3   c
                    | j                   r t        | j                   j                  d       | j                  r t        | j                  j                  d       |xs d\  }
}|xs |	}|g }| j                  D ]c  }|j                  |d      \  }}|j                  t        j                  |j                  d |j                  t        |j                               e t        j                  t        |dd |||	|      }t        | j                  |	      }n||j                  }|j                  }|j                   rd
}t#        | j                        t#        |j                        k7  s|j$                  r,t        | j                  d       t        |j                  d       t'        t)        | j                  |j                              D ]]  \  }\  }}|j                  |d|dk(  xr |j*                        \  }}||t        j                  u sF|j                  |_        ||_        _ |
b|j.                  Vddlm} |j5                  | j                  t7        |j.                        |j8                  |j.                  j:                        }
t=        | j                  t?        | j                  | j                  d       | j                  d|j                   |
||j@                  |jB                  	      }tE        | j                  |xs g tG        | j                  |j8                  	      || jH                  | jJ                  |jL                  ||j@                  |jB                  ddtO        |di       |      S )Nz'cdef function cannot have star argumentz+cdef function cannot have starstar argumentr  r   r,  )rm   r  r  rl  r9   F)r  rU   r  r  r  r  r  r  r_  Tzwrong number of argumentszprevious declaration herer   r  r  r  r  )ru  rU   r  r  r  r  r  r  r  r  )r=  rm  r  r   rC   r  rl  r  r  ro  r  r  rJ  )(r:  r   r9   r;  rU   rq  r  r
   r  rm   r  r   r  r=  r  rl  r  rK   r  r  rN  r  r  r  r  r  r  r  r  python_valuer  rY  r  r  r  r8  r   rC   r  r   )r   rs  r  r  returns
except_valr  r=  r  r  r  r  
cfunc_argsrV  r  rl  
cfunc_typer  rW  r  r  s                        r4   as_cfunctionzDefNode.as_cfunction  s   ==$--##%NO$##'')VW+5+F(!=J"ii O
(2(:(:51(:(M%!!*"9"9?S?S@DEOEZEZ?M>Hnn	#N OO $--.3=:?>B>M497?=HJJ  z:E}J)) +/'499~Z__!559O9Odhh ;<eii!<=-6s499joo7V-W A))J(2(:(:51HIQHiSXSiSi ); )l%<4:+D+D#D&.mmJO1@J.A "z'A'A'M,'00J$>$> ?jF\F\ * : : G G 1 IO ).A$((QUQZQZbf.g.2ii5:9C9S9S9HCZ2<2E2E/9/?/?A
 DHH&/o2&;DHH:KaKa&b'1!% $(2(A(A!+%/%8%8","2"2'0 %-4U<NPR-S.57 	7r3   c                 P    | j                   ry| j                  s| j                  ryy)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)rT  r:  r;  r   s    r4   is_cdef_func_compatiblezDefNode.is_cdef_func_compatible  s%    
 ==D--r3   c                 r   | j                   rn| j                   D ]_  }|j                  }|j                  s| xj                  |j                  dk(  z  c_        | xj
                  |j                  dk(  z  c_        a | j                  r|j                  d      rd| _        | j
                  r|j                  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 rz| j                  snd| _        dd	lm} | j                   xs g | _         | j                   j                  d
t        | j                   || j                  t!        d                         | j#                  |       | j                  dk(  r| j%                  |       n| j'                  |       | j)                  |       | j*                  j,                  j/                         | _        | j.                  t0        u rd| j2                  rX|j4                  d   rI| j*                  j6                  s3| j2                  j9                  |      \  }}|r|j:                  r|| _        | j=                  |       t?        | j                  | | j*                  j                  | j@                  | jB                  | jD                  | j.                        | _#        | jF                  jI                  |       y )Nr  r2  Frk   Tr(   z7'__init_subclass__' is not supported by extension classr   rZ  r   r\  r[  z<lambda>r+  )rO  rm   rU   r:  r;  r  )%r  r\  r   is_classmethodrm   is_staticmethodr  rS  r  r   r9   IMPLICIT_CLASSMETHODSr  r  insertr^  r   analyse_argument_typesdeclare_lambda_functiondeclare_pyfunctionanalyse_signaturer  	signaturer  r   rE  r   r  r7  r~  r[  DefNodeWrapperrU   r:  r;  
py_wrapperr   )r   r   r\  r]   r  r  r  s          r4   r   zDefNode.analyse_declarations  sv   ??!__ H	 **<<''499+EE'((DII,GG(	H 3??=#A"'DCOON$C#(D   C$8$8yyI%#*?*?'+$11c6J6Jdhh YZ33D<O<O&*#/"&//"7R&&q-HHm@\(]+_ ` 	##C(99
"((-##C(s#:://;;=~-$2M2M~~124::;P;P!%!<!<!T!TUX!Y;;#:#:'2D$$(HH]]**((* 	,,S1r3   c                    |j                   j                  di       | _        |j                   d   }|j                  }d |_        | j                  D ]  }t        |d      rd }n|j                  j                  |      }t        |      r-|j                  r!t        j                  ||j                  g      }|j                  j                  ||      \  }}|j                  |_        ||_        | j!                  ||       |r"|j"                  rt%        | j&                  d       |j                  j)                         |_        d |_        d|_        d|_        d|_        |j                  j2                  s,|j                  j4                  s|j                  j6                  r|j8                  r	d|_        n|j<                  rd|_        n|j                  j>                  sB|j                  j@                  s,|j                  j4                  s|j                  j6                  r2|jB                  r|jB                  jD                  d|_        nq||_        nid|_        na|j                  jF                  sKd|_        |j<                  rt%        |j&                  d	       |j8                  rt%        |j&                  d
       |j                  jH                  sd| _%         ||_        t        |      rEtM        | j                        D 	cg c]  \  }}	|	j                  jN                  s|  c}	}| _(        y g | _(        y c c}	}w )NrF  allow_none_for_extension_argsrm   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'))r   r   r  rj  rU   rL  rm  rq  r"   rP  r
   r  
org_bufferr  rm   rl  rJ  r  r   r9   as_argument_typehdr_typer$  r  rS  r~  rf  r  r  r  r  is_extension_typer  rZ  r  r  ri  r9  r  is_numpy_buffernp_args_idx)
r   r   r  f2sr  r  rm  rl  r  as
             r4   r  zDefNode.analyse_argument_types  s|    # 2 28R @(+7V(W%## $99 1	0CsF#"&MM11#6	 "#&9+D+D * 4 4!!,,6. !/I
 NN**9c: &*//$$S#.?#8#8dhh [\xx002CHCL#$C "#CCNxx##sxx'9'9SXX=X=X;;&*CO\\&+COhh00CHH4L4L88--1L1L{{s{{'B'B'J*. +H '+COXX&&"&<<#''#ST;;#''#RSxx  +/(c1	0d !$#-6tyy-A\caQVVE[E[\D!D  ]s   L='L=c                    | j                   j                  rh| j                  rt        | j                  d       t        | j                        dk(  xr | j                  xs | j                   | j                   _	        n| j                  s| j                  s|j                  d   r.t        | j                  D cg c]  }|j                   c}      r| j                   j                  t        j                  u rt        | j                        dk(  r!t        j                   | j                   _        n3t        | j                        dk(  r| j                  d   j"                   | j                  d   j$                  st        j&                  | j                   _        n| j                   j                  t        j(                  u rt        | j                        dk(  r t        j*                  | j                   _        nit        | j                        dk(  rQ| j                  d   j"                  8| j                  d   j$                  st        j,                  | j                   _        | j                   j                  }|j/                         }|j1                         }|t        j(                  u rU|dk(  rPt        | j                        dk(  r8| j                  r,t        j                  x}| j                   _        d| _        dx}}| j4                  rR|j6                  rFdx}}d| _        t9        j8                  |      x| j                   _        }d|_        d|_        d|_        | j>                  s| j4                  r1| j@                  r%|j6                  r| jB                  jD                  d d = tG        tI        |t        | j                                    D ]  }| j                  |   }d|_%        ||k\  rd|_&        |jO                  |      rc| j4                  sW| j>                  r$d|_(        tR        jT                  x|_+        |_,        nd|_'        |jZ                  x|_+        |_,        d|_.        |j_                  |      |_+        |jX                  ja                  |jV                        r|jV                  jb                  r|jX                  jb                  r	d|_2        d|_.         |t        | j                        kD  r| jg                          y |t        | j                        k  rn|j<                  s| jg                          | j                  D ]C  }|jJ                  s|jX                  jh                  s|jX                  jj                  s=d|_2        E |jm                         }|rt        jn                  |v r| j                   j                  s}| j                  rJd}| j                  D ]8  }|jJ                  s|j$                  r|jN                  r*|jP                  r7d}: nd}|s"|jq                         x}| j                   _        y y y y y c c}w )	Nz8special functions of cdef classes cannot have decoratorsr   always_allow_keywordsr   r%   Tr  F)9r  r  r  r   r9   rK   rU   r:  r;  trivial_signaturer   rC  rV  r  r   pyfunction_signaturepyfunction_noargsrZ  rU  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  r9  decorator_indirectionr!  r  minrS  rT  r  rR  r   	type_typer  rl  r  r$  fixed_arg_typer  r~  r  bad_signaturer  r  method_flagsmethod_varargswith_fastcall)	r   r   r  signfixed
min_nfixedr  mfuses_args_tuples	            r4   r  zDefNode.analyse_signatureX  s   ::  dhh Z[+.tyy>Q+>+kHjY]YjYjCkDJJ(--4#4#4NN#:;		::;zz##y'E'EEtyy>Q&+4+F+FDJJ(^q(yy|++3DIIaL<P<P/8/J/J

,%%)E)EEtyy>Q&+4+>+>DJJ(^q(yy|++3DIIaL<P<P/8/D/D

,jj""'')++-
9///FaKtyy>Q&4== *3)G)GGC$**&#$D "##FZC$8$8"##FZ#'D )-37DJJ 3#&C "&C#'C   D$8$8((S-A-A**003s63tyy>23 	1A))A,CCNJ15.q!$*>*>&&&'CO.5.?.??CL38&'CO.1oo=CL38'($"11!4xx''5||//CHH4H4H./+/0,'	1* DII& c$))n$''""$yy ,>>sxx'A'ASXXE]E]*+C', )**b09N9N }}"&99 0Cs{{ #*/	0 #("-0->->-@@djj* #! :O02[ ;s   ;Yc           	         | j                   j                  }d|j                         z  }|j                  r|dz  }n"|j                  r|d|j                         z  z  }| j                  }| j                   j                  rd}nd}t        | j                  d|| j                  t        | j                        |fz         y )Nz%dz or morez to %dzSpecial methodMethodz>%s %s has wrong number of arguments (%d declared, %s expected))r  r  r  r  optional_object_arg_countr  rm   r  r   r9   rK   rU   )r   r  expected_strrm   descs        r4   r  zDefNode.bad_signature  s    jj""c4466J&L**Hs'='='???Lyy::  #DDdhhX$))S^\\; ; 	<r3   c                    | j                   }|j                  |      }|r}|j                  r,|j                  j                  st        | j                  d       |j                  j                  r/|j                  s#| j                  st        | j                  dd       |j                  || j                  | j                         }|| _        |j                  |j                        }t!        t"        j$                  |z   |z         | j                  _        t(        j*                  rt-        | j                  | j.                        |_        t!        t"        j0                  |z   |z         |_        |j4                  rr|j                   t6        j8                  v s)|j.                  r|j                   dv r|j:                  d   rd |_        y t!        t"        j>                  |z   |z         |_        y y d |_        y )Nz:Only final types can have final Python (def/cpdef) methodszOverriding a c(p)def method with a def method. This can lead to different methods being called depending on the call context. Consider using a cpdef method for both.   )allow_redefine__getattr__fast_getattr) rm   r  ra  r  is_final_typer   r9   rl  r  is_builtin_cmethodr   r   r  r  next_idscope_prefixr   r	   pyfunc_prefixpyfunc_cnamer    r  rD   rC   funcdoc_prefix	doc_cnamer  r   	invisibler   wrapperbase_cnamewrapperbase_prefix)r   r   rm   r  prefixs        r4   r  zDefNode.declare_pyfunction  s   yy%%%coo.K.Kdhh \]zz&&u/G/GPTP_P_ #PQRT &&tTXX$//FY&Z
S--."1&2F2F2ORV2V"W

&txx:EI-f.C.Cf.Lt.STEO::!4!44EII

m3~8V.2E+.=f>W>WZ`>`cg>g.hE+   EIr3   c                     |j                  | j                  | j                        }d |_        || _        |j
                  | j                  _        y r   )r  lambda_namer9   rC   r  r  r  )r   r   r  s      r4   r  zDefNode.declare_lambda_function  s<    ++D,<,<dhhG	
"'++

r3   c                 V   | j                   D ]  }|j                  st        |j                  d       |j                  r^|j                  |j                  |j                  |j                        |_        |j                  j                  r)d|j                  _	        n| j                  ||      |_        d|j                  _        d|j                  _        |j                  |j                  _         | j                  || j                         | j                  || j                          y )Nr_  r  r   )rU   rm   r   r9   r$  r  rl  r  r~  r  r  r/  r  r  declare_python_argr:  r;  rF  s      r4   r{  zDefNode.declare_arguments  s    99 	4C88cgg67##OOCHHchhH	88''%(CIIN 11#s;	 CIICIIN$'OOCII!	4 	T]]3T%6%67r3   c                     |rt|j                   d   dk7  rt        j                  }nt        }|j	                  |j
                  ||j                        }d|_        d|_        d|_	        d|_
        ||_        y y )Ninfer_typesFr   r  )r   r
   unspecified_typer   r  rm   r9   r/  r  r  r  r  )r   r   r  rl  r  s        r4   r  zDefNode.declare_python_arg  si    ~~m,5!22%OOCHHdCGG<EELEJEJ$%E!CI r3   c                 ^   |j                   | j                  _         | j                  |       | j                  |       | j	                  |      sC| j
                  r7| j
                  d d d   D ]"  }|j                  j                  |      |_        $ | j                  j                  |       | S )Nr   )
r   rY  rC  rG  r  r  r\  rw   r  prepare_argument_coercion)r   r   r\  s      r4   rw   zDefNode.analyse_expressions  s    &)nn###C(  %..s3!__TrT2 S	&/&9&9&M&Mc&R	#S 	11#6r3   c                    | j                   ry| j                  s| j                  j                  ry| j                  ry| j                  j
                  ry| j                  j                  ry|j                  s|j                  r4|| j                  j                  d   S |j                  j                  d   S |j                  xs |j                  S )NTFbinding)r  specialized_cpdefsr  rd  no_assignment_synthesisr  is_anonymousr  r  rY  r   r  rS  r  r6  s      r4   r  z"DefNode.needs_assignment_synthesis  s    ""djj&E&E''::  ::""#"6"6|''229==''229==$$<(<(<<r3   c                 B    | j                   j                  j                  S r   )r  r  r  r   s    r4   r  zDefNode.error_value*  s    zz##///r3   c                 B    | j                   j                  j                  S r   )r  r  r  r   s    r4   r  z$DefNode.caller_will_check_exceptions-  s    zz##333r3   c                 h   | j                   rB|j                         }t        j                  | j                   |      }|j	                  ||       | j
                  rA| j                  j                  | j                  _        | j                  j	                  ||       t        j	                  | ||       y r   )
defaults_getterr  r   r  r  py_wrapper_requiredr  r  r  r@  )r   r   rX   module_scopedirectives_nodes        r4   r  z%DefNode.generate_function_definitions0  s    ++-L4AA$BVBVXdeO99,M ##)-)>)>DOO&OO99#tD11$TBr3   c                    |r*| j                   r| j                  j                  ||d       y g }| j                  j                  j
                  r5dt        j                  z  }| j                  sd|z   }|j                  |       d }| j                  D ]  }|j                   ||              | j                  r!|j                   || j                               | j                  r!|j                   || j                               |rdj                  |      }nd}| j                  j                  | j                  j                         }	|j"                  d   }
| j%                         }|r|
j'                  |       |
j'                  d|	d	|d
       |r|
j'                  d       |j'                  d|	d	|d       y )NTPyObject *%sCYTHON_UNUSED c                     | j                   }|j                  r|j                  }n|j                  }|j                  j                  |      }|j                  sd|z   }|S )Nr+  )r  r  r  r  rl  rh  r  )r  r  r  decls       r4   arg_decl_codez7DefNode.generate_function_header.<locals>.arg_decl_codeK  sR    IIE,,::..u5D=='$.Kr3   r   r  declsr  ri  z); /* proto */r  r  )r&  r  r  r  r  has_dummy_argr	   r  r  r  rU   r:  r;  r   r  rh  r  r  r  rS   )r   rX   re  rf  arg_code_listself_argr.  r  r  dc
decls_coder  s               r4   r  z DefNode.generate_function_header>  s   ''88.$0::--%(9(99H))+h6  *		 99 	5C  s!34	5==  t}}!=>  t/@/@!AByy/HH..tzz/F/FG%%g.
!88:/0,.9	;X&

H56r3   c                      y r   r2   r6  s      r4   r  z&DefNode.generate_argument_declarationsl  r   r3   c                      y r   r2   r   s     r4   r  zDefNode.generate_keyword_listo  r   r3   c                     fd}| j                   D ]  } ||j                          | j                  | j                  fD ]  }|s ||j                          y )Nc                    | j                   rN| j                  j                  r}| j                  j                  J j                  j                  t        j                  dd             j                  dj                  | j                  | j                               n+j                  | j                  d| j                  d       | j                  j                  r(| j                  j                  | j                  d       y | j                  r#j                  |        j!                  |        y j#                  |        j%                  |        y y )NIncludeStringHzStringTools.czmemcpy({0}, {1}, sizeof({0}));rF  rG  T)r  rl  re  r  r  r  r   r  rS   formatr  r  r  r  r  r  put_var_xgiverefr  r  )r  rX   s    r4   r  z@DefNode.generate_argument_parsing_code.<locals>.put_into_closuret  s   ::&& !::??66$$55k6M6MN^`o6pqJJ?FFu{{TYThThijJJU[[%:N:NOP::00 JJ>>tU[[RVW** ((/))%0''.((/+  r3   )rU   r  r:  r;  )r   r   rX   r  r  s     `  r4   r  z&DefNode.generate_argument_parsing_coder  sV    	0. 99 	(CSYY'	(==$"3"33 	,C +	,r3   c                      y r   r2   r   s     r4   r  z$DefNode.generate_argument_type_tests  r   r3   )	NNTNNFNFFr   r   )/r,   r-   r.   r   r   r  r  r  reqd_kw_flags_cnamer   r   r  rE  r  r  r  py_cfunc_noderequires_classobjdefaults_structrC   fused_py_funcr  r  r&  r  r%  r   r  r  r   r  r  r  r  r  r{  r  rw   r  r  r  r  r  r  r  r  r  r2   r3   r4   r_  r_  G  s    , gK!9:KONKJJ!EKOMO
CMJJO#$ }B;@I7V	52n>"@eAN<6.8 
=$04C,7\,>r3   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 Z y)r  NFc                 R   t        j                  | g|i | | j                  j                  | _        | j                  j                  | _        | j                  j
                  | _        | j                  j                  | _        | j                  j                  | _        d | _        y r   )	r@  r   rO  r  r  r  r  r  r  )r   rU   r}   s      r4   r   zDefNodeWrapper.__init__  s{    T3D3F3 $ < <#{{::$(KK$D$D!!%!>!>#{{::r3   c                 f   | j                   j                  }| j                  }|j                  |j                        }t        t        j                  |z   |z         |_        t        t        j                  |z   |z         |_
        |j                  | _        | j                   j                  | _        y r   )rO  r  rm   r
  r  r   r	   pywrap_prefixr  pymethdef_prefixpymethdef_cnamer  r  )r   r   target_entryrm   r  s        r4   r   z#DefNodeWrapper.analyse_declarations  s    {{((yyS--."1&2F2F2ORV2V"W'6v7N7NQW7WZ^7^'_$%//;;22r3   c                 .   | j                   D ]u  }|j                  j                  s|j                  j                  |      r56|j                  sC|j                  j                  rZ|j                  j                  |      rvw | j                  r| j                  j                  j                  sd| j                  j                  }d|_	        |j                  D ]7  }|j                  r|j                  j                  s'd|j                  _        9 y y y )Nr   T)rU   rl  r~  create_from_py_utility_coder  r  r;  r  r  r  cf_assignmentsr/  r  r   cf_maybe_null)r   r   r  r  asss        r4   r  z(DefNodeWrapper.prepare_argument_coercion  s    
 99 	C88''xx;;C@cll&>&>||==cB	 T%6%6%<%<%D%D %%++E$%E!++ 1zzcggoo,0CGG)1 &Er3   c                     t        | j                        }|dk(  s7|dk(  r3| j                  d   j                  s| j                  d   j                  ryyr6   )rK   rU   r  rR  )r   argcounts     r4   signature_has_nongeneric_argsz,DefNodeWrapper.signature_has_nongeneric_args  sD    tyy>q=A499Q<#;#;#'99Q<#;#;r3   c                 .    | j                   j                  S r   )r  r  r   s    r4   signature_has_generic_argsz)DefNodeWrapper.signature_has_generic_args  s    ~~...r3   c                    g }| j                   j                  r|j                  t        j                         | j
                  D ]#  }|j                  j                  rX|j                  j                  t        j                  dd             |j                  d|j                  j                  z         r|j                  r|j                  j                  sk|j                  j                   sU|j                  j"                  s?|j                  |j                  j%                  |j                  j                               |j                  |j                  j                         & | j&                  r/|j                  | j&                  j                  j                         | j(                  r/|j                  | j(                  j                  j                         dj+                  |      }| j,                  j.                  s"|j1                  dt        j2                  z         |j5                  | j6                  j                  j8                  d|d       y )NMoveIfSupportedCppSupport.cpp__PYX_STD_MOVE_IF_SUPPORTED(%s)r   z%s = ri  ro  )r  r0  r  r	   r  rU   rl  r  r  r  r   r  r  r  r  r  r  rr  r@  r:  r;  r   r  rg  r  r  rS   rO  r  )r   rX   rU   r  s       r4   r]  z%DefNodeWrapper.generate_function_body  s   >>''KK))*99 	-Cxx$$   11++,=?OPR=		OPsxx'B'B%(XX%7%7%(XX%8%8CHH..syy?@CIIOO,	- ==KK++112KK))//556yy''HHWv2223

KK**D2 	3r3   c                 	   | j                   j                  }|j                  | j                         |j	                  d       |j	                  d       | j                   j                         }|r|j	                  |       |j                  |       |j                         |_        | j                   j                  ||      xs | j                   j                  }| j                  ||       | j                  ||       |j                         }| j                  j                  rd}nd}| j                  j                   s=|j	                  | j                  j#                  t$        j&                        |d       |j)                          |j+                  t-        d| j.                  z               | j1                  |||       | j3                  |       | j5                  |       |j7                  |j8                         |j                  | j                         |j	                  d       |j	                  d       |j                  d      }|j;                  |j<                        r|j?                  |j@                         |jC                  |j<                         |j8                  jE                         D ]  \  }	}
|jG                  |	|
        | jI                         }|%|j	                  t$        j&                  d|d       | jK                  |       |j?                  |       |jC                  |j@                         | jK                  |       |jC                  |       |jL                  D ]>  }|jN                  s|jP                  r|jS                  |       .|jU                  |       @ tW        |jL                        }| jX                  D ]u  }|jZ                  j                  r|j\                  |vs)|j\                  jP                  r|jS                  |j\                         [|jU                  |j\                         w |j_                          | j                  j                   s"|j	                  d	t$        j&                  z         |j	                  d
       |ja                          |r|j	                  d|z         y y )Nr   z/* Python wrapper */z = 0rG  z%s (wrapper)ru  
cleaned_uprF  r  rn  r  )1rO  rY  r-  r9   rS   r  r  r  r  r  r  r  r  rO   r  r~  rg  rh  r	   r  r  r  r   rm   r  r  r]  r  r$  r  r  r  r  r  r  r  r  %generate_argument_values_cleanup_coder  r/  r  r  put_var_decrefr   rU   rl  r  r  r  )r   r   rX   rN  r  re  r  retval_initvalues_cleaned_up_labelr  rl  r  r  var_entries_setr  s                  r4   r  z,DefNodeWrapper.generate_function_definitions  s   {{&&dhh

2

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

2

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

)<)<gFG 66t<MM12 	t(()2248./%% 	/E||((((/''.	/ d../99 	3C88''CII_,L 99,,((3''		2	3 	((*''JJ|f&9&99:

3JJ),>>? r3   c                    g }| j                   }|j                  s| j                  r5dt        j                  z  }|j                  sd|z   }|j                  |       | j                  D ]z  }|j                  r|j                  s|j                  r|j                  d|j                  z         G|j                  |j                  j                  |j                               | | j                  j                  }|j                  s3|j!                         t"        j$                  gk(  r|j                  d       |j&                  rdt        j(                  dt        j*                  }	|j,                  rNdt        j(                  dt        j.                  dt        j*                  }
|j                  d|
d	|	d
       n|j                  |	       |j                  rFt1        t3        | j                        |j5                               D ]  }|j                  d|z          dj7                  |      }d}|j8                  dv r|j:                  j<                  rd}d}| j>                  j                  |j@                        }|d|d|d}|jC                  d|z         |r?| j                  jD                  r(| j                  jD                  jG                  ||d       y tH        jJ                  r|jL                  r| j                  jD                  s|j:                  jN                  s|j                  r|jP                  r|jL                  }|jR                  r|jU                         }|j                  r|j8                  dv s0|jC                  d|jV                  d|jY                         d       |j                  r@|jC                  d       |jC                  d|jP                  z         |jC                  d       |s| j                  jD                  rF|j[                  d|j\                  z         |j_                  | j                  j                  dd       |jC                  d|z         y )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   r1  Fr  ri  rh  z%s; /*proto*/T)rf  zPyDoc_STRVAR(ro   #if CYTHON_UPDATE_DESCRIPTOR_DOCzstruct wrapperbase %s;r  zstatic PyMethodDef %s = rG  )
allow_skipz%s {)0r  r0  r  r	   r  r  rU   rS  r  rR  r'  r  rh  rO  r  r  r  r   method_noargsr  
args_cname
kwds_cnameuse_fastcallnargs_cnamer  rK   r  r   rm   r  r  r  r  rS   rB  r  r    r  rC   is_property_scoper  
is_unicodeas_utf8_stringr  r!  r  rH  put_pymethoddef)r   rX   re  rf  r1  r  r  r  r  varargs_argsfastcall_argsrx  r  r3  r  docstrs                   r4   r  z'DefNodeWrapper.generate_function_headerC  s   nn 4 4%(9(99H$$+h6  *99 	FC>>??coo!((#--)GH!((55cmmDF	F !!C$4$4$69;R;R:S$S  !AB%%v'8'8:L))6+=+=v?P?P!R$$%|56 $$\23tyy>3+A+A+CD R$$%Lq%PQR99]+ JJ@@KK00!B"N..u/?/?@&("h7

?V+,{{(( ))BB.T C ;599KK--KK11%%)@)@YYF  ..0$$7])]

OO..02 3 

=>

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

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

6F?#r3   c                 j   | j                   D ]U  }|j                  s|j                  r|j                  d|j                  z         ;|j                  |j                         W |j                  D ]   }|j                  s|j                  |       " | j                         rndt        j                  z  }| j                  j                  r4|j                  d       |j                  |       |j                  d       n|j                  |       |j                  dt        j                  z         y )NzPyObject *%s = 0;zCYTHON_UNUSED Py_ssize_t %s;#if !CYTHON_METH_FASTCALLr  z"CYTHON_UNUSED PyObject *const *%s;)rU   rS  r$  rS   r'  r  r  r  r/  rS  r	   rg  r  rf  kwvalues_cname)r   r   rX   r  r  
nargs_codes         r4   r  z-DefNodeWrapper.generate_argument_declarations  s    99 	8C~~''JJ2S]]BC,,SYY7	8 __ 	0E||((/	0
 **,7&:L:LLJ~~**

67

:&

8$

:& 	

7&:O:OOPr3   c           
      	   |j                         }|j                  }|j                  d      }| j                  dkD  }| j                  d uxs | j
                  d uxs |}| j                  D ]5  }	|	j                  j                  r|	j                  j                  |      r67 | j                         r| j                  j                  r|j                  d       |j                  d       |j                  t        j                  dt        j                   d       |j                  d       |j                  t        j                  dt        j                   d	|j#                  d
t        j                  z        d| j%                         d       |j                  d       | j                  j                  r|j                  d       |j&                  j)                  t+        j,                  dd             |j                  t        j.                  d| j                  j0                  dt        j                   dt        j                  d       | j                         s*|rt3        | j4                  d       | j7                  |       nF| j9                         s| j;                  |       n$| j=                  | j                  ||       d| _        ||_        |jA                  |      r|jC                  |       |jE                  |       | jG                  |       |r| jI                  | j                  |       | j
                  rk| j
                  jJ                  jL                  r&|jO                  | j
                  jJ                         n%|jQ                  | j
                  jJ                         | j                  D ]K  }	|	j                  j                  r|	j                  jR                  s1|jU                  |	jJ                         M |jW                  | jX                  jJ                  jZ                         |j]                          |j                  d| j%                         z         |jE                  |       y )Nargument_unpacking_doner   rp  z#if CYTHON_ASSUME_SAFE_SIZEz = PyTuple_GET_SIZE(ro  r  z = PyTuple_Size(z); if (z%s < 0z	) return rG  r  fastcallr  z = __Pyx_KwValues_ri  r   z.This method cannot have * or keyword argumentsTr  )/new_error_labelr  r  r  r:  r;  rU   rl  r~  rK  rS  r  rf  rS   r	   rg  rd  r  r  r  r  r   r  rq  fastvarr   r9   r  rQ  generate_stararg_copy_code'generate_tuple_and_keyword_parsing_codeneeds_values_cleanupr  r  r  rZ  generate_arg_decrefr  r  put_var_xdecref_clearput_var_decref_clearr  r  r  rO  r  r  )
r   r   rX   	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  sp    ..0**NN#<=	..2"mm47 @  ,@0? 	 99 	C88''xx;;C@	 **,~~**

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

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

!!4>>#9#96;L;LfN`N`b 	c ..0"dhh PQ2248335 ++D1 88D)T(,D%*???+MM)$NN?+66t<"((=$$((..>>2243D3D3J3JK11$2C2C2I2IJyy 4xx++0J0J ((3	4
 ""4;;#4#4#C#CD,,.JJ|d&6&6&889y!r3   c                 @    |r|j                  |j                         y y r   )r|  r  r   r  rX   s      r4   generate_arg_xdecrefz#DefNodeWrapper.generate_arg_xdecref  s    &&syy1 r3   c                 @    |r|j                  |j                         y y r   )r}  r  r  s      r4   r{  z"DefNodeWrapper.generate_arg_decref  s    %%cii0 r3   c                    d| j                          d}| j                  j                         }| j                  si|j                  j                  t        j                  dd             |j                  dt        j                   d| dt        j                   d| d		       |j                  d
t        j                   d| j                  rdnd dt        j                   d| j                  j                   dt        j                   d       |j                  dt        j                   d|        | j                  r|j                  dt        j                   d       |j                  j                  t        j                  dd             |j                  d| dt        j                   d|        | j                  j                   j"                  r%d| j                  j                   _        | j                  j                   j&                  }|j                  | d| j                  j                   dt        j                   dt        j(                   d       |j                  d| d|        |j+                  | j                  j                          |j                  d       |j                  | d       |j                  d| d|        |j+                  | j                  j                          |j                  d       ni|j                  j                  t        j                  d d             |j                  dt        j                   d!| dt        j                   d| d	       | j,                  r| j.                  j0                  s| j                  j2                  rJ | j                  j                   j&                  }|j                  | d"t        j                   d#|j5                  || j6                                |j+                  | j                  j                          |j9                  t        j:                  t<               |j?                  t        j:                  t<               |j                  |jA                  d$| d%t        j:                   d&| j6                               |jB                  jE                  tF        jH                  d'      }|j                  d(| d)| d*t        j                   d+| d,	       |j                  d-t        jJ                   d| d       |j                  d.       |j                  |j5                  d/| j6                               |j                  d0       |j9                  d/t<               |j?                  d/t<               |j                  |jA                  d$| d| d1| j6                               |j                  d       |jB                  jM                  |       d2| j                  j                   _        y | j                  r| j                  j2                  rJ | j                  j                   j&                  }|j9                  t        jJ                  t<               |j                  | dt        jJ                   d       d2| j                  j                   _        y y )3Nr  rG  RaiseArgTupleInvalidr  r  z$ > 0)) { __Pyx_RaiseArgtupleInvalid(z, 1, 0, 0, r"   }const Py_ssize_t rF  r   r  ri  ) ? __Pyx_NumKwargs_) : 0; < 0)) r  z > 0) {KeywordStringCheckz'if (unlikely(__Pyx_CheckKeywordStrings(r   z
) == -1)) Fz = __Pyx_KwargsAsDict_ro  if (unlikely(!z)) rm  z = PyDict_New();rn  RejectKeywordsz > 0)) {__Pyx_RejectKeywords(z = PyTuple_New(z + 1); z__Pyx_PyTuple_SET_ITEM(z, 0, rh  r   for (=0;  < ; ++) {z(PyObject* item = __Pyx_PyTuple_GET_ITEM(z#if !CYTHON_ASSUME_SAFE_MACROSr   r  z	+1, item)r   )'r  rm   r!  r:  r  r  r   r  rS   r	   rg  kwds_len_cnamer;  re  r  rw  r  r  r  r  rq  put_var_gotrefr  rO  r  rf  r'  r9   r  r  r   rJ  error_goto_if_negr$  r%  r
   c_py_ssize_t_typerd  r-  )r   rX   
goto_errorfunction_namestarstar_arg_cnamestar_arg_cnamer.  s          r4   rx  z)DefNodeWrapper.generate_stararg_copy_code  s   t//12!4
		557}}--''(>@UVXJJ 2 23 4//<o[I[I[H\\_,  	

 5 56c&&rJ7q9J9J8K L#~~556a8I8I7J&R	

 	

]6#8#8"9MNJJf334H=>--''(<>STVJJ9-6K\K\J]]ghrgst
   &&..:?!!''7%)%6%6%<%<%B%B"

)**@AWAW@XXY(()F,A,A+B
 

^,>+?s:,OP##D$5$5$;$;<

:&

011ABC

^,>+?s:,OP##D$5$5$;$;<JJsO --''(8:OPRJJ 5 56 7((5b9J9J8K3,	 (C(C~~222!]]0066NJJ!"/&2D2D1EW**>488DEG  3 34OOF--~>V..?JJ&&)@@PPUV\VgVgUhhi'jlpltltuw>>//
0L0LY^/_DJJvT$s6+=+=*>bfMOJJ:6;L;L:MRPTvUWXZJJ78JJt..vtxx@AJJx OOFN3V^4JJ&&)@@PPRSWRXXa'bdhdldlmoJJsONN''-23DMM/]]~~222!]]0066NOOF--~>JJ!"#f&7&7%8:<23DMM/ r3   c                 @   |j                   j                  t        j                  dd             | j                  j                         }|j                  d      }|j                  | j                        }g }g }g }	dx}
}|D ]  }|j                  s|j                  s|j                  r)|j                  r |j                  r|	n|j                  |       U|j                  |       |j                  ss|
dz  }
|j                  r|dz  } ||	z   }| j                   | j"                  z
  }t%        |      dkD  r#|d   j                  s|d   j                  r|dz  }t%        |      }| j&                   xr ||k(  }t)        |      }| j*                  s| j&                  r| j-                  ||       t/        |      t/        |      z   }|D cg c]  }|j                  r| }}|xs | j*                  }|j1                  d       |rodj3                  |D cg c]*  }d|j5                  |j6                  j                         , c}d	gz         }|j1                  d
t8        j:                  d|d       | j=                  |||       |j1                  dt8        j>                   d|rdnd dt8        j@                   d| jB                  jD                   dt8        j@                   d       |j1                  dt8        j>                   d|        t8        j>                   d}| j"                  dkD  rd|z  }|j1                  d|z         |sY|j                   j                  t        j                  dd             |j1                  d| dt8        j@                   d|        nh| jG                  |||||||       | jI                  |||       | jK                  ||       ||kD  r|j                   j                  t        j                  dd             |j1                  dt8        jL                   d| d        |j1                  d!| d|d"d|d"d|d"d#| d$       |j1                  d%       | j"                  r|j                   j                  t        j                  d&d             |j1                  d| d|| j"                  z    d        |j1                  d'| d(t8        j:                   d)|
 d*| d$	       |j1                  d%       | j"                  r|dkD  s||k(  rL||k(  r| j&                  sd+}nd,}|j1                  d-t8        jL                  ||fz         |jO                  |       | j"                  r||kD  rA| j&                  s5|j1                  d.t8        jL                  |fz         |jO                  |       |j1                  d/       |D ]  }|j                  r|j                   j                  t        j                  d&d             |j5                  |j6                  j                        }|j1                  d0| d| d|         nE nB|j1                  d/       ||k(  rltQ        |      D ]\  \  }}|j1                  d1| d2| jB                  jD                   dt8        jR                   d| d3	       |j1                  d4| d5|        ^ n|j1                  d6t8        jL                   d7       | j&                  r|j1                  d8       tU        tQ        |            d d d9   }|D ]  \  }}||dz
  k\  r5||d   d   k7  r|j1                  d:       |j1                  d;|dz   d<d=       |j1                  d1| d2| jB                  jD                   dt8        jR                   d| d3	       |j1                  d4| d5|         |dk(  r"|j1                  d:       |jW                  d>       |j1                  d?       | j&                  r?|r_tY        |dz
  d9d9      D ]  }|j1                  d;|d<d=        |jO                  |       n"|jW                  d@       |jO                  |       |j1                  d%       | jK                  ||       |j1                  d%       tQ        |      D ]  \  }}| j[                  |d1| dA|        |j1                  d%       |j]                  |      r|j                  dB      }|jO                  |       |j_                  |       |j                   j                  t        j                  dd             |j1                  dC||||t8        jL                  |fz         |j_                  |       y y c c}w c c}w )DNru  r  argtuple_errorr   r   {,&r  zPyObject ** const z[] = {};r  rF  r   r  ri  r  r  r  r  z > 0z
likely(%s)r  r  z__Pyx_RejectKeywords(r   r"  r  zfor (Py_ssize_t i = z; i < z; i++) {z7if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid(r   z, i); r  rn  RaiseKeywordRequiredz7if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired(z, *(z[i - z])); z!=<z } else if (unlikely(%s %s %d)) {z} else if (unlikely(%s > %d)) {rm  z__Pyx_RaiseKeywordRequired(values[] = __Pyx_ArgRef_ro  3if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[])) switch (r  default:r   CYTHON_FALLTHROUGH;case 2dr   	case  0: break;	default: ]skipz2__Pyx_RaiseArgtupleInvalid(%s, %d, %d, %d, %s); %s)0r  r  r   r  rm   r!  r  r+  r9   rS  r  rR  rU  rZ  r  rV  r  r  rK   r:  boolr;  generate_stararg_init_codetuplerS   r   intern_identifierr  r	   pykwdlist_cname#generate_argument_values_setup_coder  re  r  rw  generate_posargs_unpacking_codegenerate_keyword_unpacking_code*generate_argument_defaults_assignment_coderg  r  r  rd  r   r  r  generate_arg_assignmentr  r  )r   rU   rX   r~  self_name_csafeargtuple_error_labelr  r  required_kw_only_argsoptional_kw_only_argsnum_pos_only_argsnum_required_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accept_kwd_argsnon_pos_args_idkw_unpacking_conditioncomparepystring_cnamer  reversed_argsskip_error_handlings                               r4   ry  z6DefNodeWrapper.generate_tuple_and_keyword_parsing_codek  s	   ))##J0EF	H ))779#~~.>?__TXX.
 " "9::6 	8C>>#//{{*-++&;PXXY\]&&s+<<%*%;;2a72	8" -/DD"44t7P7PPt9q=d1g11T!W5H5H1$!/2)-%6 &7#66 	#-++,?F)E,,??+3HC3<<CHH*?d.?.?

3!hh+( D**399>>:;<( ( O JJ&&! " 	004K 	

 5 56c$r*5Qv7H7H6I J#~~556a8I8I7J&R	

 	

]6#8#8"9MN$*$9$9#:$!?$$q(%14J%J" 	

;!778--''(8:OPRJJ..?r&BSBSATTWXbWcde 00#%8*,<hH\^bd 00#Xt5 ;;HdK #%??  11++,BDYZ\

1&2D2D1EVL_K``ijk

2&'r1!4B*1-R*1- .!l #
 

3((  11++,BDYZ\

12E1FfM`cgc|c|M|L}  ~G  H  I

2&' (//06G5H I!l # 

3 %%*=*AFY]pFp #&99$--JJ9""G-@=B B CMM./$$"%88

<&&(;@= = >23JJz"# {{$$55#//0FH]^`%)%;%;CIINN%KNJJ!<_<MRP^O__bcmbnop JJz""&99 (8 jFAsJJ!!$5dnn6L6L5MQvO`O`NaacdecffhikJJ!TUVTWW[\f[ghij 

Xf&8&8%9>?==JJz* $Y%? @2 F+ jFAs/11a 0 33 JJ'<=

U1Q3r(!#45JJ!!$5dnn6L6L5MQvO`O`NaacdecffhikJJ!TUVTWW[\f[ghij '!+JJ45HH[)

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

3 ;;HdK

3
  ) 	DFAs((s!ndC	D 	

3??/0"&.."8MM-.NN/0--''(>@UVXJJK!;#%8""	O   NN./ 1_ I
(s   ff/fc                 \   |j                   j                  r|j                   j                  rU|j                   j                  dv r=|j                   j	                  ||j
                  ||j                  |j                         |j                  r/t        j                  |j                   t        j                  |      }|j                  }|j                  |j                  d|d       y |j                   j                  r|j                   r|j                  d|z         |j                  |j                   j#                  ||j                  j                  |j
                  |             |j                   r|j                  d       |j                  |j                  j                  d|j%                  |      d       |j                   j&                  r|j)                  |j                  d       |j                  d       y y t+        |j
                  d	|j                   z         y )
N)r  r  rF  rG  r  rm  Trq  rn  2Cannot convert Python object argument to type '%s')rl  r~  r  rm   convert_to_basetyper9   r  r"  rS  r
   typecastr   r  rS   r  from_py_functionrZ  from_py_call_coderB  r  r  r   )r   r  r   rX   r  s        r4   r  z&DefNodeWrapper.generate_arg_assignmentU  s   88xx''CHHMM=M,M,,T377D#//SVScScd~~!**388Z5N5NPTUIIEJJU[[$78xx((;;JJ{T12

38855#))//377D: ;;;JJz*JJ		88> @ A xx22;;CIIPT;UJJsO  cggSVYV^V^^_r3   c                    | j                   r| j                   j                  j                  rd| j                   j                  _        |j	                  | j                   j                  j
                  d| j                   j                  j
                  d| j                         d       |j                  | j                   j                         | j                  r	d| j                  j                  _        |dk(  r| j                  j                  rJ |j                  t        j                  t               |j	                  | j                  j                  j
                  dt        j                  d       y |j	                  | j                  j                  j
                   d| j                  j                   dt        j                   d| dt        j                    d	
       |j	                  d
| j                  j                  j"                  j%                  | j                  j                  j
                         d       | j                   r%|j'                  | j                   j                         |j)                          |j	                  d| j                          d       |j	                  d       |j                  | j                  j                         y y )Nr   z = PyDict_New(); if (unlikely(!z
)) return rG  rF  z = __Pyx_ArgsSlice_ri  r   ro  r  )) {r  rn  )r;  r  r  r  rS   r  r  r  r:  r  rf  r  r	   rd  r   rw  rg  rl  nullcheck_stringr}  r  )r   r  rX   s      r4   r  z)DefNodeWrapper.generate_stararg_init_codep  s$   !2!2!8!8!@!@67D##3JJ!!''--!!''--  "$ %  1 1 7 78==23DMM/"a'  >>666 1 1>B

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

}}**0011DT^^E[E[D\\]((),?+@6CUCUBV
 

$T]]%8%8%=%=%N%Nt}}ObObOhOh%i$jjopr$$--d.?.?.E.EF002

WT%5%5%7$8:;

3##DMM$7$781 r3   c                 \   t        |      }|j                  d|dj                  d|z        fz         | j                  j                  rc|j                  d| j                  j                  dt
        j                  d| j                  j                  dt
        j                  d	       y y )	NzPyObject* values[%d] = {%s};r  r  struct z *z$ = __Pyx_CyFunction_Defaults(struct r   ro  )rK   rS   r   rO  rA  r	   dynamic_args_cnamer  )r   rU   rX   r~  max_argss        r4   r  z2DefNodeWrapper.generate_argument_values_setup_code  s    t9 	6chhs8|,:. . 	/ ;;&&JJ++V-F-F++V->->@ A 'r3   c                     t        |      D ]n  \  }}|j                  s|j                  j                  s*|j	                  |      }|j                  d| d| d|j                  j                  |       d       p y )Nzif (!values[z
]) values[z] = __Pyx_NewRef(ro  )r  rZ  rl  r~  rB  rS   as_pyobject)r   rU   rX   r  r  r  s         r4   r  z9DefNodeWrapper.generate_argument_defaults_assignment_code  sr    o 	tFAs{{sxx33 # @ @ F

\!Jqc9J388K_K_`mKnJooqrs	tr3   c           	          | j                   sy t        j                  }|j                  d| d| d| d       |j                  d| d       |j                  d       y )Nzfor (Py_ssize_t r  z5 < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++r  zPy_XDECREF(values[z]);rn  )rz  r	   quick_temp_cnamerS   )r   rX   loop_vars      r4   rZ  z4DefNodeWrapper.generate_argument_values_cleanup_code  sj    ((**

%hZtH:=rs{r|  }A  B  	C

'z56

3r3   c                    d}|D ]!  }	|	j                   s|	j                  r|dz  }# |j                  dt        j                  z         | j
                  r|j                  d       t        |dz
  |dz
  d      D ]  }
|j                  d|
dz   dd       |j                  d	|
 d
| j                  j                   dt        j                   d|
 d	       |j                  d|
 d|j                  | j                                |j                  d        |dkD  r|j                  d|dd       t        |dz
  dd      D ]r  }
|j                  d	|
 d
| j                  j                   dt        j                   d|
 d	       |j                  d|
 d|j                  | j                                t |j                  d       t        |dz
  dd      D ],  }
|j                  d|
dz   dd       |j                  d       . |j                  d       |dk(  r|j                  d       n|j                  |       | j
                  s"|j                  d       |j                  |       |j                  d       y )Nr   r   switch (%s) {r  r   r  r  r   r  r  ri  r   ro  r  r  r  r   r  r%   r  r  rn  )rV  rZ  rS   r	   rg  r:  r  r  rw  rd  r+  r9   r  r  )r   r  r  r  r  r  r  rX   num_required_posonly_argsr  r  s              r4   r  z.DefNodeWrapper.generate_posargs_unpacking_code  sy    %&! 	/C||CKK)Q.)	/
 	

?V%7%778==JJz"*1,.G.I2N 	.AJJqs2ha()JJ#4T^^5K5K4LAfN_N_M``bcdbeeghiJJLQCtTXTcTcdhdldlTmSnopJJ,-		.
 %q(HHu6r:"=>4Q6B? u

WQC'89O9O8PPQRXRcRcQddfghfiiklm

PQRPSSWX\XgXghlhphpXqWrstu JJx 02B; 	.AJJqs2ha()JJ,-	. 	$)JJx  MM./}}HH[!MM./

3r3   c                    d}|D ]  }|j                   s|dz  } |dkD  r5|j                  dt        j                  |t        j                  |fz         n'|dkD  r"|j                  dt        j                  z         |dk(  rd}n.| j                  r ||z
  }|j                  d| d| d       d	}nd
}d|cxk  rt        |      k  r	n nd| }nd}| j                  j                         }	|j                  j                  t        j                  dd             |j                  | j                  dt        j                   dt        j                   dt        j                    d| j"                  r | j"                  j$                  j&                  nd d| d| dt        j(                   d|	 d| j"                  d udd       y )Nr   r   zBconst Py_ssize_t kwd_pos_args = (unlikely(%s < %d)) ? 0 : %s - %d;z#const Py_ssize_t kwd_pos_args = %s;r  z1const Py_ssize_t used_pos_args = (kwd_pos_args < z) ? kwd_pos_args : rG  used_pos_argskwd_pos_argsz	values + r  ParseKeywordsr  z__Pyx_ParseKeywords(r   r   rh  )rV  rS   r	   rg  r:  rK   rm   r!  r  r  r   r  put_error_if_negr9   re  rq  r  r;  r  r  r  )
r   r  r  rX   r  r  pos_arg_count
max_kwargsvalues_arrayr  s
             r4   r  z.DefNodeWrapper.generate_keyword_unpacking_code  s     	'C||!Q&!	' q  JJ[""$5""$5_   !1$JJ<v?Q?QQR!#M]] -/@@JJJJ:,Vijtiuuvwx+M*M 03x=0&'8&9:L#L))779))##O5JK	MHH"  !F$9$9#:"V=S=S<TTV040A0At  &&,,sK2nBoR$$%Rr  ,a0	
r3   c                 d    | j                   D ]!  }|j                  s| j                  ||       # y r   )rU   r$  generate_arg_conversionr  s      r4   r  z0DefNodeWrapper.generate_argument_conversion_code  s0     99 	8C##,,S$7	8r3   c                 ,   |j                   }|j                  }|j                  rm|j                  r|j	                  d|j
                  z         n|j	                  d|j
                  z         | j                  ||       |j	                  d       y |j                  r| j                  ||       y |j                  |      r6|j	                  |j                  j                  d|j
                  d       y t        |j                  d|d|d       y )	Nr  zassert(%s); {rn  rF  rG  z Cannot convert 1 argument from 'z' to 'r  )r  rl  r~  rZ  rS   r'  %generate_arg_conversion_from_pyobject#generate_arg_conversion_to_pyobjectr  r  r  r   r9   )r   r  rX   old_typenew_types        r4   r  z&DefNodeWrapper.generate_arg_conversion  s    <<88{{

;67

?S]]:;66sDAJJsO!!44S$?''1

#--HIcggPXZbcdr3   c                     |j                   }|j                  rL|j                  |j                  |j                  |j
                  j                  |j                  |             y t        |j                  d|z         y )Nr  )	rl  r  rS   r  r'  r  r  r9   r   )r   r  rX   r  s       r4   r  z4DefNodeWrapper.generate_arg_conversion_from_pyobject0  s`    88$$JJx11			  #''ORZZ[r3   c                 r   |j                   }|j                  }|r|j                  |j                  j                  d|d|j
                  d|j                  |j                  j                  |j                               |j                  |j                         y t        |j                  d|z         y )NrF  ri  r"  z5Cannot convert argument of type '%s' to Python object)
r  to_py_functionrS   r  r  r'  r'  r9   r  r   )r   r  rX   r  r]   s        r4   r  z2DefNodeWrapper.generate_arg_conversion_to_pyobject=  s    <<&&JJ		''		A	C D
 		*#''RU]]^r3   c                 8   | j                   D ]  }|j                  r| j                  ||       "|j                  r/|j                  j
                  s-|j                  j                  s|j                  j                  sr| j                  ||        | j                  j                  j                  rt        t        t        | j                         | j                  j!                                     D ]  }|j#                  d|dd       |j#                  d| j                  j                  j$                  j'                          d| j                  j!                          d|dd|j)                  | j*                                |j#                  d        y y )Nzif (unlikely(unused_arg_r    != Py_None)) {z_PyErr_Format(PyExc_TypeError, "%.200s() takes %zd arguments but %zd were given", (const char*) z, (Py_ssize_t) r"  rn  )rU   r  r  r  rl  r~  rf  r  r  rO  r  r  reversedr  rK   r  r  rS   r  r!  r+  r9   )r   rX   r  rx  s       r4   r  z+DefNodeWrapper.generate_argument_type_testsJ  sO    99 	8C""++C6__#((*>*>*-((*<*<*-((*E*E,,S$7	8 ;;''eC		NDNN4U4U4WXY   

5aU:JKL

&&*kk&7&7&F&F&Z&Z&\%] ^%%)^^%F%F%H$I J%%&qE$//$((34	6 

3  (r3   c                 .    | j                   j                  S r   )r  r  r   s    r4   r  zDefNodeWrapper.error_valuee  s    ~~)))r3   r=  )!r,   r-   r.   defnoderO  rz  r   r   r  rQ  rS  r]  r  r  r  r  r  r{  rx  ry  r  r  r  r  rZ  r  r  r  r  r  r  r  r  r2   r3   r4   r  r    s     GF 	31,/36U@nQ$fQ2M"^21c4Jh0T`6!9FAt&P;
z8e&\_ 6*r3   r  c                   h     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                 H    t        |g d      |d<   t        |   |fi | y )NT)r!  r   r   )r   rj   r   r   r9   r}   rN   s      r4   r   zGeneratorDefNode.__init__v  s'    %c4Hv''r3   c                     t         |   |       | j                  | j                  _        | j                  j                  |       y r   )rj   r   rY  r  r   r   rN   s     r4   r   z%GeneratorDefNode.analyse_declarations{  s4    $S)!%!1!1



'',r3   c                    | j                   j                  j                  }|j                  | j                        }|j                  | j
                        }|j                  | j                        }| j                  j                  |       |j                  d       |j                  d| j                   d| d| j                  j                          dt        j                   d| d| d| d|j                  d| j                                |j!                  t        j                  t"               | j$                  rSd}|j                  |d	t        j&                  d
       |j)                  |t"               |j+                  |t"               |j-                          |j                  d       |j                  d       y )Nr  z#__pyx_CoroutineObject *gen = __Pyx_z_New((__pyx_coroutine_body_t) r   , (PyObject *) r"  genzgen->classobjz  = __Pyx_CyFunction_GetClassObj(ro  zreturn (PyObject *) gen;rn  )r  r  r  r  rm   qualnamemodule_namer  r  rS   gen_type_namer  r	   r  r'  r9   r  r   r@  r  r  rJ  r  )r   r   rX   
body_cnamerm   r
  r  classobj_cnames           r4   r]  z'GeneratorDefNode.generate_function_body  sz   ZZ%%00
%%dii0))$--8,,T-=-=>--d3

3

1$2D2D1E F((2| 4  **,- .#334 5vRzK=$))%:;=	
 	..?!!,NJJ 1 13 4OONN;^^<((*

-.

3r3   c                     |j                  t        j                  | j                  d             | j                  j                  |d       t        |   ||       | j                  j                  ||       y )NCoroutine.cT)proto)r  r   r  r  r  r  rj   r  )r   r   rX   rN   s      r4   r  z.GeneratorDefNode.generate_function_definitions  s^    [44T5G5GWX

++D+=-c48

00d;r3   )r,   r-   r.   rW  is_iterable_coroutiner  rT  r_  r   r   r   r]  r  rr   rs   s   @r4   r   r   i  sE     L!MM%%	1K(
-
:< <r3   r   c                       e Zd ZdZdZy)AsyncDefNode	CoroutineTN)r,   r-   r.   r  r6  r2   r3   r4   r  r    s    MLr3   r  c                       e Zd ZdZdZy)IterableAsyncDefNodeIterableCoroutineTN)r,   r-   r.   r  r  r2   r3   r4   r  r    s    'M r3   r  c                       e Zd ZdZdZy)AsyncGenNodeAsyncGenTN)r,   r-   r.   r  r7  r2   r3   r4   r  r    s    MKr3   r  c                   N     e Zd 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                 6    t         |   |||||d g d d 	       y )N)	r9   r   rm   is_coroutine_bodyis_async_gen_bodyrC   rU   r:  r;  )rj   r   )r   r9   rm   r   r  r   rN   s         r4   r   zGeneratorBodyDefNode.__init__  s,    $T//24	 	 	Ar3   c                 .   |j                  |j                        }|j                  d      }t        j                  |z   |z   }|j	                  d t
        | j                  |d      }||_        t        | j                        |_
        d|_        || _        y )N	generatorr  )r  ro  T)r
  r  r	   genbody_prefixr  r   r9   r  r   rm   r  r  r  )r   r   r  rm   r  r  s         r4   declare_generator_bodyz+GeneratorBodyDefNode.declare_generator_body  s    S--.{{;'%%.5ndhh&+	   C ,TYY7 

r3   c                 H    | j                  |       | j                  |       y r   )r  r$  r   s     r4   r   z)GeneratorBodyDefNode.analyse_declarations  s    ##C(##C(r3   c           	          d| j                   j                  dt        j                  dt        j                  dt        j
                  d	}|r|j                  d|z         y |j                  d|z         y )Nzstatic PyObject *z(__pyx_CoroutineObject *z, CYTHON_UNUSED PyThreadState *r`  rh  z%s; /* proto */z%s /* generator body */
{)r  r  r	   generator_cnamelocal_tstate_cnamesent_value_cnamerS   )r   rX   r  r  s       r4   r  z-GeneratorBodyDefNode.generate_function_header  sZ    JJ!!""%%##	%
 JJ(612JJ3f<=r3   c           
      x   | j                   }| j                  j                  ||       |j                  |       |j	                         |_        |j                  | j                         | j                  ||       |j                  d       | j                  |       |j                         }|j                  dt        j                  z         |j                         }|j                          |j                  | j                   j"                  xs | j                   j$                         |j'                         }|r#|j)                  d       d|j*                  _        | j.                  j1                  |       |j*                  j3                  |j4                  j6                  j8                         |j                         }|j	                  d      }|j;                  |       |j=                  |       |rJ|j*                  j>                  sJ |jA                  | j                   j$                  | j                  d       | jB                  r:|j                  |jE                  t        jF                  | j                               n|j                  dt        jF                   d       | jH                  rd}	n| jJ                  rd	}	nd
}	|j                  dt        jF                   d|	 d       |j                  |jM                  | j                               |j                  d       | jB                  r| jN                  | jN                  }
|
tP        jR                  u rd}n8|
tP        jT                  u rd}n#|
tP        jV                  u rd}ntY        d|
z        |j                  t        j                  d|d|jE                  t        j                  | j                               |j[                  t        j                  t\               | j_                  ||       |j4                  j6                  j8                  j`                  r|j                  |j4                  j6                  jc                  t        jd                        d|j4                  j6                  jg                  dt        jh                  z        d       |j                  dt        jd                  z         |rD| j                  jj                  s.d|j*                  _        |jm                  d| j                         |j                  | j                         |j                  d       |j                  d       | jB                  s:| j                  jj                  s$|jo                  t        j                  t\               |jq                  |jr                        r| j                  jj                  s|ju                  |jv                         |j=                  |jr                         | jB                  r0| jN                  $|jy                  t        j                  t\               |j*                  j{                         D ]  \  }}|j}                  ||        |j                  d       |r|j                          t        j                  |j                  j                  v rV|j                  j                  t        j                  dd             |j                  dt        | jH                        z         |j                  | j                   j$                         |r|j                  | j                         |j                  d       |j=                  |jv                         |j                  t        j                  t\               |r|j                          |j                  d       |j                  d t        jh                  z         |j                  d!       |j                  d"t        jh                  z         |j                  d#t        jh                  z         |j                          |j                  d$t        j                  z         |j                  d       |j                  |j*                         |j                  d%t        jh                  z         |j                  d&|z         |j                  D ]  \  }}|j                  d'||fz          |j                  d(       |rO|jA                  | j                   j$                  | j                  d       |jm                  d| j                         |j                          |j                  d)       |j                  d       |j                          y )*Nr   zPyObject *%s = NULL;T)rW  	first_runr  r  zasync generator	coroutiner"  zQ)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started z");rn  zPyList_New(0)zPySet_New(NULL)zPyDict_New()z)invalid type of inlined comprehension: %srF  r  z%s->closurerG  zCYTHON_MAYBE_UNUSED_VAR(%s);Frl  r8   ru  zif (__Pyx_PyErr_Occurred()) {pep479r  z*__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  zswitch (%s->resume_label) {zcase 0: goto %s;zcase %d: goto %s;z2default: /* CPython raises the right error here */zreturn NULL;)QrY  r   r  r  r  r  r-  r9   r  rS   r  rO   r	   r  r  r  r  rm   r  r  r  r$  r  r  r  init_closure_tempsr  rl  r  	use_labelr  r}  r  
is_inlinedr'  r)  r   r  r+  inlined_comprehension_typer   	list_typeset_type	dict_typer   r(  r   r]  r  rh  r  r@  r'  r   r  r  r  r  r  r  put_xdecref_clearr  r  r  r   generator_stopr  future_directivesr  r  r   r  r  r  r  r  r  r  r  yield_labelsr  )r   r   rX   rN  closure_init_coder  r  resume_codefirst_run_label	coro_typetarget_type	comp_initr  rl  r  labels                   r4   r  z2GeneratorBodyDefNode.generate_function_definitions  so    			//d; 	t$/3~~/?, 	dhh++D$7

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

)F,?,??@//1))+''

(T4::;T;TU//#333F'+DNN$--d3 	))$*:*:*?*?*E*EF**,..5''>>+++  !:!:DHHSW X??JJt..v/F/FQRJJv'>'>&??OPQ%%-	'''	'	JJ 7 78 9cclbmmpt JJttxx01JJsO ??t>>J99Kg///+	 0 00-	 1 11*	#?+MO OJJ##Y''(;(;TXXFH I OOF//@ 	##C.  &&22##  %%66v7M7MN  %%//060F0F1G H%I J
 JJ58N8NNO49922',DNN$!!)!: 	dhh

2

-. tyy'>'> $$V%8%8.I ??4++,99**d//0NN4++,4#B#B#N&&v':':NK#~~??A .t  -.JJ67446$$(E(EE  11+2I2I(Ta2bc

G$tOeOeJffg""4::#<#<=%%dhh/JJsO 	t(()&--~>! 	

34

@6CYCYYZ

8

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

:V=S=SST((*

<&"5"556

3 	..t~~>7--/ 	0 	,>?)) 	@HAu1QJ>?	@NO''

(A(A488Z^'_(((A//1.)#r3   )NNNFFr`  )r,   r-   r.   rV  r0  r  r   r1  r   r$  r   r  r  rr   rs   s   @r4   r  r    s=     J!%A)	>_ r3   r  c                   "    e Zd ZdgZdZd Zd Zy)re  r   Nc                    |j                   | _        | j                  j                  rd}nd}ddlm} |j                  | j                  t              | _	        |j                  | j                  | j                  | j                  |d  D cg c])  }|j                  | j                  |j                        + c}      }|j                  j                  s|j                  j                  rIt!        | j                  t#        | j                  |      t%        | j                  d       g      | _        nt%        | j                  |      | _        | j&                  j)                  |      | _        | S c c}w )	Nr   r   rj  r\  rl  rU   )exprr   r  )r  rU   r  r  r   r  RawCNameExprNoder9   r   	func_nodero  r  rm   r  rg  is_returncoder   ExprStatNoderp  r   rw   )r   r   	first_argr  r  	call_nodes         r4   rw   z%OverrideCheckNode.analyse_expressions  s   OO	<<''II"33DHHnM,,HHt~~!YYyz24 $$TXXCHH$= 4 - 5	 ??""coo&C&C$TXXTXXI6txxt466 7DI 'txxyADIII11#6	4s   
.E3c                 
   | j                   j                  r | j                   j                  j                  n| j                   j                  }|j                  |j                        }| j                   j
                  rdt        j                  z  }nd| j                  d   j                  z  }|j                  d       |j                  dt        j                  z         |j                  d       | j                   j
                  s/| j                   j                  j                  j                  d      r|j                  d       n|j                  d       |j                  d	       |j                  | j                   j                  j                  j                  j                         }|j                  d
| d| d       |j                  d| d       |j                  d       |j                  d
| d| d       |j                  d       |j                  d       |j                  d       |j"                  j%                  t'        j(                  dd             |j                  dt        j*                  dt        j,                  d       |j                  d|dt        j*                  dt        j,                  d       |j                  dt        j.                  d|d       |j                  d       |j0                  j3                  t4        d !      }| j6                  j9                  |       |j"                  j%                  t'        j(                  d"d             |j                  |d#|d|d$|j;                  || j<                               |j?                  |t4               |j                  d%|d&|j@                  d'       | jB                  jE                  |       |j                  d(       |j                  d       |j                  t        j*                  d|d       |j                  t        j,                  d)|d       |j                  d*t        j.                  d+t        j*                  d'       |j                  t        j*                  d,t        j,                  d       |j                  d(       |j                  d       |jG                  |tH        j4                         |j0                  jK                  |       |j                  d       |j                  d(       |j                  d       |j                  d(       y )-Nr  r   z /* Check if called by wrapper */zif (unlikely(%s)) ;z#/* Check if overridden in Python */r   zelse {z	else if (z#if !CYTHON_USE_TYPE_SLOTSzunlikely(Py_TYPE(z) != z &&z __Pyx_PyType_HasFeature(Py_TYPE(z), Py_TPFLAGS_HAVE_GC))r  z9)->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(z3), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))r  r  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(ro  Tr   PyObjectGetAttrStrz = __Pyx_PyObject_GetAttrStr(r"  zif (!__Pyx_IsSameCFunction(z, (void(*)(void)) r  rn  z! = __Pyx_get_object_dict_version(r   != rF  )&r  rB  r  r  rm   r  r	   module_cnamerU   r  rS   r  r  r  r)  r  r  r  r  r   r  tp_dict_version_tempobj_dict_version_temptype_dict_guard_tempr$  r%  r   rF  	set_cnamer'  r9   r(  r  r   r  r,  r
   r-  )r   rX   method_entryinterned_attr_cnamer2  r  func_node_temps          r4   r  z)OverrideCheckNode.generate_execution_code  s    ;?<<;U;Ut||1177[_[g[g[m[m"44\5F5FG <<'')F,?,??H)DIIaL,>,>>H

56

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

89<<''4<<+=+=+C+C+O+OPZ+[JJx JJ{#JJ34
 !55dll6H6H6N6N6Z6Z6h6hiMJJ*8*E(/. /JJ9(CZ[\JJwJJ*8* 5::BCvx yJJx JJu

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

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

f1163O3OQ 	R

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

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

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

n^j^u^uvw		))$/

3
 	

fg

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

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

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

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

3

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

fg

3

8

3r3   )r,   r-   r.   r   r   rw   r  r2   r3   r4   re  re    s     (KD*Xr3   re  c                       e Zd Zy)ClassDefNodeNr,   r-   r.   r2   r3   r4   rY  rY        r3   rY  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y)PyClassDefNode)doc_noder   rh   	metaclassmkwrn   class_resultrO  
class_cellr  
orig_basesNFc	           	         t         j                  | |       || _        || _        || _        || _        || _        ddlm}	 | j                  rjt        j                  rZt        | j                  | j                        }|	j                  ||      }
|	j                  t        d      t         |      | _        nd }
| }|rd}d| _        |j&                  r|j(                  rt+        t-        |j(                              d d d   D ]_  \  }}|j.                  j0                  d	k(  s | j2                  t5        |j                  d
       |j0                  | _        |j(                  |= a || _        n$| j2                  J |	j9                  |      | _        |s$| j                  s| j6                  s| j2                  r| j2                  g|r|j&                  s| j6                  }nd }|s-| j                  j:                  r| j                  j<                  sn|	j?                  ||       | _        d}nd}|	jA                  |||
|       | _!        |	jE                  ||| |
|||      | _#        n2|	jI                  |g       | _!        |	jK                  ||| |
      | _#        |	j                  ||      | _&        |	jO                  | j                        | _(        y )Nr   rj  rD  r   )rm   rl  r9   FTr   r_  z2keyword argument 'metaclass' passed multiple times)class_def_node)rm   rC   re  )rm   re  rC   calculate_metaclassallow_py2_metaclass
force_typer  )rm   re  rC   r\  ))r4  r   rm   rC   r   r  rn   r   r  r    r  rD   r9   UnicodeNoder  r   r   r^  is_py3_style_classis_dict_literalr  r   r  r   r   r_  r   r`  	ProxyNodeis_sequence_constructorrU   PyClassMetaclassNodePyClassNamespaceNoderh   Py3ClassNodeclassobjDictNode	ClassNoderO  ClassCellInjectorNoderb  )r   r9   rm   rn   rC   r   r  r  force_py3_semanticsr  r^  rg  r  r   mkdictneeds_metaclass_calculations                   r4   r   zPyClassDefNode.__init__#  s   $$		$
88** 4884C ,,S,<H%..M)4LSagj.kDMH"55"'&*D#++//#'	,2N2N(O#PQUSUQU#V @488>>[8#~~9 %dhh0d e .2ZZDN , < <Q ?@  ,DH>>55 %..|<$**DNN~~%(D(D!XXF!F

:: JJOO%.%C%CD &D &2DN.3+.2+!66$HT 7 CDI%22$t$?$7.	 3 DM "**3*CDI%//$t 0 CDM  ((4(8#99$((Cr3   c                 F   | j                   r!t        | j                  j                  d       yddlm} t        | j                  dd| j                  | j                  xs |j                  | 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   rj  r  rU   F)ro  r  
class_namern   r  r   rp  rC   )rk  r   rr  r9   r   r  CClassDefNoderm   rn   r  r  r   rC   r   r  s     r4   	as_cclasszPyClassDefNode.as_cclassl  s     ""$--##%^_TXX(1)-(,		#'::#W1D1DTXXTV1D1W(,"&))$)!%+ 	+r3   c                     |}|j                   s|j                  r&|j                  }|j                   r|j                  r&t        | j                  |      x}| _        |S )N)rm   r  )rS  r  r  r   rm   r  )r   r   rZ  r  s       r4   create_scopezPyClassDefNode.create_scope  sR    $$(=(=##D $$(=(=(diiTJJtzr3   c                 
   | j                   x}}| j                  rDddlm} | j                  d d d   D ]"  } ||j                  |j
                  |g      }$ d | _        || _        | j                  r| j                  j                  |       | j                  r| j                  j                  |       | j                  j                  |       | j                  j                  |       | j                  |      }|j                  |_        | j                  j                  j                  |_        | j"                  r| j"                  j                  |       | j$                  j                  |       |j'                  |       y )Nr   )ro  r   rB  )rr  r  r  ro  r9   r\  ra  rn   r   r`  rO  analyse_target_declarationr  r   r  r  class_obj_cnamer^  r   rG  )r   r   unwrapped_class_resultra  ro  r\  r  s          r4   r   z#PyClassDefNode.analyse_declarations  s+   04=??1!__TrT2 )	-MM&00& ))
 #DO(::JJ++C088HH))#...s3..s3  %..#{{0066==MM44T:		&&t,2248r3   rn   c           	         | j                   r| j                   j                  r"t        | j                   j                        dk(  skddlm}m} | j                   j                  |      } ||j                  d| j                  t        j                  dd       ||      g      | _         || _        | j                   r | j                   j                  |      | _         | j                  r | j                  j                  |      | _        | j                  r | j                  j                  |      | _        | j                  j                  |      | _        | j                   j                  |      | _        | j"                  }| j$                  j                  |      | _        | j&                  j)                  || j*                        | _        | j,                  j                  |      | _        | S )Nr   r   )PythonCapiCallNode	CloneNode__Pyx_PEP560_update_basesPy3UpdateBasesrM  )r  r  utility_coderU   )rn   rn  rK   rU   r  r  r  rw   r9   update_bases_functyper   r  rc  r`  r_  rh   ra  r  r   rO  analyse_target_expressionrr  rb  )r   r   r  r  rc  r  s         r4   rw   z"PyClassDefNode.analyse_expressions  sa   ::tzzAAc$**//FZ^_F_@77<J+JNN944(445EGYZ
+,	.DJ
 )DO::77<DJ88xx33C8DH>>!^^??DDNII11#6	 --AA#FzzII11$7	kk;;CO//==dCr3   c                     | j                  | j                  |       | j                  j                  | j                  |       y r   )r  r  r   r  r6  s      r4   r  z,PyClassDefNode.generate_function_definitions  s.    ((T:		//

DAr3   c           	      j   |j                  | j                         |j                  j                  |        | j                  }| j
                  r| j
                  j                  |       | j                  r| j                  j                  |       | j                  r| j                  j                  |       | j                  r| j                  j                  |       | j                  j                  |       | j
                  r|j                  d| j                  j                         d| j
                  j                         d       |j                  |j                  d| j                  j                         d| j
                  j                         d| j                               |j                  d       | j
                  j                  |       | j
                  j                  |       | j                  j                         x|_        |_        | j$                  }||j&                  sd }||j                  |       | j(                  j+                  |       | j,                  j                  |       |*|j/                  || j,                  j                                |"|j                  |       |j                  |       | j0                  j                         x|_        |_        | j2                  j5                  | j,                  |       | j                  j                  |       | j                  j                  |       | j                  r6| j                  j                  |       | j                  j                  |       | j                  r6| j                  j                  |       | j                  j                  |       | j                  r6| j                  j                  |       | j                  j                  |       |j                  j7                          y )Nr  rO  r  zPyDict_SetItemString(z, "__orig_bases__", rh  rn  )r-  r9   pyclass_stackr  r  rc  r?  rn   r`  r_  rh   rS   r   r  generate_disposal_coderL  namespace_cnamer  rb  	is_activer   r  ra  generate_injection_coderr  rO  rP  pop)r   rX   r  rb  s       r4   r  z&PyClassDefNode.generate_execution_code  s   dhh!!$'zz??OO44T:::JJ//588HH--d3>>NN33D9		**40??JJDJJ,=,=,?AWAWAYZ[JJ&&II$$&(>(>(@(BHH
 JJsOOO2248OO&&t,6:ii6F6F6HHt3__
!**>*>J!//5		))$/2248!..d''..02!--d3!!$'6:mm6J6J6LLt3,,T->->E		((.		T">>NN11$7NN%%d+88HH++D1HH%::JJ--d3JJ!!$' r3   )NNF)r,   r-   r.   r   r  ra  rk  r_  r`  r^  rc  r   r~  r  r   r
   r  r   r  r  rw   r  r  r2   r3   r4   r]  r]    s    (GKJLI
CHJ?C8=GDR+&92 1J00!!#J##Gj.G.GN$

2B6!r3   r]  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y)r|  r   NFc                 ,    t        | j                        S r   )r   r{  r   s    r4   punycode_class_namez!CClassDefNode.punycode_class_name  s    t//r3   c                     t        | d      sTddlm} | j                  r;|j	                  | j
                  |g | j                  d      | _        | j                  S d | _        | j                  S )N_buffer_defaultsr   r  F)need_complete)rL  r   r  buffer_defaults_noder  buffer_defaults_posr  )r   r   r  s      r4   r  zCClassDefNode.buffer_defaults  so    t/0 (((.(E(E,,T66"' )F ))% $$$ )-%$$$r3   c                 v   | j                   rI| j                  dk7  r:| j                   j                  d      }|j                  || j                        }|sy |}|j                  | j                  | j                  dd| j                   d | j                  | j                  | j                  | j                  | j                  | j                  | j                  |      | j                        | _        | j                  r?t!        | j                  j"                        dkD  rd| j                  j$                  _        y y y )Nr  rH   r   )rm   r9   rH  implementingr  rm  objstruct_cnametypeobj_cnamero  r  
check_sizer  r  shadowr   T)r  ro  splitrn  r9   declare_c_classr{  objstruct_nametypeobj_namer  r  r  r  r  r  rn   rK   rU   rl  multiple_bases)r   r   ri  
home_scopes       r4   r  zCClassDefNode.declare+  s    8 ;**005K11+txxHJJ//(( //++** 005;; 0  
 ::#djjoo.2-1DJJOO* 3:r3   c                 h   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<   n|dk(  red }	i }
|rWt	        ||j                        r|j                  }	n4|j                  j                  }	|j                  }|r|j                         }
|	|
f||<   |j!                  |        |rt        |d   j                  d	       || _         |S )
Nr   rj  zfunctools.total_orderingz total_ordering cannot be called.Ttotal_orderingdataclasses.dataclassr   z8Cdef functions/classes cannot take arbitrary decorators.)r  r   r  r\  rL   CallNoderl  r   'exprnode_to_known_standard_library_namer   r9   ro  rU   r  r  as_python_dictr  )r   r   extra_directivesr  remaining_decoratorsoriginal_decoratorr\  decorator_call
known_namerU   rV   kwds_s               r4   _handle_cclass_decoratorsz'CClassDefNode._handle_cclass_decoratorsF  sK   ##!"&// 	<*44I "N)Y%7%78!*%..	 HHTWXJ77!.,,.PQ59 !1266!!.)2J2JK-22-==BB . ; ; #(#7#7#9D04d| , ''(:;9	<:  &q)--/ij.r3   c                     j                   r" j                  st         j                  d        j	                        }d  _         j                  rd  _        j                  D ]#  }|j                   j                  k(  s| _        %  j                  Rt         j                  d j                         _        d j                  _        j                   j                          j                  j                  rJ j                  j                  d   }|j!                        }|t"        j$                  u rj'                  d      j(                  }n[|t"        j*                  u rj'                  d      j(                  }n-|t"        j,                  u rj'                  d      j(                  }|%t        |j                  d j.                  z         n'|t0        u rd }n|j2                  s2|j4                  r|j6                  st        |j                  d|z         n|j9                         s2t        |j                  d	|j                  d
 j.                  d       n|j:                  rJ|j:                  j<                  r4|j>                  r(t        |j                  d	|d
 j.                  d       nE|j4                  r2|j                  dv r$t        |j                  d|j                  z         n| _        j<                  jA                  dd      dkD  r*|t"        j0                  k7  rtC         j                  dd        jD                  d u}|rL j
                  r@ j
                  j:                  s* j
                  jF                  jI                   fd       y  j                  rI jJ                  dk7  r: j                  jM                  d      }jO                  | j                        }	|	sy }	 jJ                  dk(  ra j                  dk(  rR j.                  tP        jR                  v r6jT                  d d dk7  r$tC         j                  d j.                  z  d       |	jW                   j.                   j                  |xr  jX                  |xr  jX                    j                   j
                   j                   jZ                   j\                   jJ                   j^                   j`                   jc                         jd                         _3         j                  r=ti         j                  j                        dkD  rd jf                  j(                  _5         jd                  r* jf                  |	j'                   j.                        _6        |	ur@ jJ                  dk(  r1jo                   j.                   jf                   j                          jf                  j(                  j:                  x _        }
|
|r;j<                  jq                         |
_        |
j<                  js                  |       nj<                  |
_        d|
j<                  v rRd}|
j<                  d   }|r4|d   }|jA                  d      }|xr |jt                  xr |jv                  }|rdnd|
_<         jz                  r5t|        j~                  r%t         j                   jz                        |
_=        |rȉ jD                  j                  |
        j:                  j                  d      }|ru|j                  ri|
j                  s]|
j                  sQ j:                  j                  d      |_G         j:                  j                  d|jz                  |j                          jX                  rd|
_D        nd|
_E        ti         j                  j                        dkD  r|r jX                  r-t         j                  j                  d   j                  d        j                  j                  dd  D ]*  }|j!                        st        |j                  d        , d jf                  j(                  _I        dd!lJmK} |j                   j                  |j                   j                   j.                  "       j                  |j                   j                  g #      g$       _O        n} j
                  rO j
                  j                  xs  j
                  j                   jf                  j(                  _I        d  _O        n"d jf                  j(                  _I        d  _O        j                   jf                          jf                  j(                  jF                  D ]	  } |         y )%NzTObject struct name specification required for C class defined in 'extern from' blockr   r   r  r  rp  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                  &    j                         S r   )r   )r   r   s   r4   <lambda>z4CClassDefNode.analyse_declarations.<locals>.<lambda>  s    @Y@YZ]@^ r3   r  rH   __builtin__   zcpython.z %s already a builtin Cython type)rm   r9   rH  r  r  rm  r  r  r  ro  r  r  r  r  Tr  Ffrozenr   __dict__getterz'Only declare first base in declaration.z+Only one extension type base class allowed.rj  rD  ri  rz  )Rr@  r  r   r9   r  rm  r  modulecimported_modulesrm   r   r  has_extern_classadd_imported_modulern   rU   r  r
   r	  rj  rl  c_float_typerv  r{  r   r  r  r  r  r  r   r  r   r   r   defered_declarationsr  ro  r  rn  r   builtin_typesr  r  rp  r  r  r  r  r  r  r  rK   r  r`  add_imported_entryr   r   r   r   is_c_dataclass_scoperC   r    r  rD   r   r  is_variabledefinedimplementedmangle_internalgetter_cnamedeclare_property
early_initr   r  r  IdentifierStringNoders  type_init_argsis_externalallocate_vtable_names)r   r   r  r  ru  rm  base_class_scopehas_bodyri  r  r  	is_frozendataclass_configdecorator_kwargsfrozen_flag
dict_entry
other_baser  thunks   ``                 r4   r   z"CClassDefNode.analyse_declarationsq  sq   
 ??4#6#6$((rs99#> DK// );;$"2"22"(DK) {{")$*:*:D#++N/0,''4::??::??1%D,,S1I J111JJu-22	j555JJw/44	j>>>JJy166	 dhh MPTP_P_ _`n,#' 00#33	8Q8Qdhh ?) KL**,dhhNNDOO!5 6Y__%?%?,,dhht!0 1**^^'99dhh i!!' ( "+~~!!*a014jF_F_9_"mopq99D(t~~/C/C NN//667^_8 ;**005K11+txxHJJ??h&  M1OOw'<'<<&&r*j8"Dt"VXYZ//-$++!5$++o((nn //++** 005;; 0  
 ::#djjoo.2-1DJJOO*;;=AZZJdoo.:S T__%@""4??DJJI!ZZ__222
U#&>>#6#6#8   ''(89#&>> &%*:*::!	#(#3#34K#L #'7':$"2"6"6x"@K + \0F0F \;K\K\I9BX*88**&txx:EIII**51//
;Jj44emmTYTeTe*.***D*DEU*V
'

++J

W{{ !$%!tzz!#t{{djjooa(,,.WX #jjooab1 Y
--c2*..*WXY *+DJJOO&#"+"5"544TXXT__4Ujj((2(FH #6 #ID
 ^^)-)C)C)`t~~G`G`DJJOO&"&D)*DJJOO&"&D!!$**-ZZ__99 	EG	r3   c                     | j                   r@| j                  j                  j                  }| j                   j	                  |      | _         | j
                  r| j
                  j	                  |       | S r   )r   r  rl  r  rw   r  r  s      r4   rw   z!CClassDefNode.analyse_expressions  sT    99JJOO))E		55e<DI33C8r3   c                     | j                   rC| j                  | j                  |       | j                   j                  | j                  |       y y r   )r   r  r  r  r6  s      r4   r  z+CClassDefNode.generate_function_definitions  s:    99,,TZZ>II33DJJE r3   c                    |j                  | j                         | j                  j                  j                  sd }| j
                  rs|j                  j                  t        j                  d      }| j
                  j                  |       |j                  |d| j
                  j                         d       |j                  |j                  d| | j                               |j                  |t        j                         |j                  j                  t        j                   d      }|j                  | d| d       |j                  |j                  d| | j                               |j                  j                  t        j                  d      }|j                  d	       |j                  d
       |j                  j                  t        j                  d      }|j                  | d       |j                  |j#                  || j                               |j%                  |t               |j                  j                  t        j                  d      }|j                  | d       |j                  |j#                  || j                               |j%                  |t               |j                  j                  t        j                  d      }|j                  | d| d| j
                  j                          d       |j                  |j#                  || j                               |j%                  |t               |j                  | d| d| d       |||fD ]=  }|j'                  |t        j                         |j                  j)                  |       ? |j                  d       |j                  d       |j                  |d| j
                  j                         d       |j                  |j#                  || j                               |j%                  |t               |j                  d|d|d       d|z  }	|j                  d|	z         |j                  d|z         |j                  d       |j                  d       |j                  d       |j                  d       |j                  |j+                  | j                               |j                  d       |j                  | d        |j                  j)                  |       |j'                  |t        j                         |j                  j)                  |       | j
                  j-                  |       | j
                  j/                  |       | j1                  | j                  ||d!       |;|j'                  |t        j                         |j                  j)                  |       | j2                  r| j2                  j5                  |       y y )"NTr   z = __Pyx_PyTuple_GET_ITEM(z, 1);z!CYTHON_ASSUME_SAFE_MACROS && !Fz* = ((PyTypeObject*)__Pyx_PyTuple_GET_ITEM(z, 0));zM#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000z/if (__Pyx_get_runtime_version() < 0x030A0000) {z> = PyObject_GetAttrString((PyObject*)&PyType_Type, "__new__");z, = PyTuple_Pack(1, (PyObject*)&PyType_Type);z = PyNumber_Add(r   ro  z = PyObject_Call(rj  z} elser  zE = __Pyx_PyType_GetSlot(&PyType_Type, tp_new, newfunc)(&PyType_Type, z)if (__Pyx_PyType_GetSlot((PyTypeObject*) z, tp_base, PyTypeObject*) != r  z@__Pyx_PyType_GetSlot((PyTypeObject*) %s, tp_base, PyTypeObject*)zB__Pyx_TypeName base_name = __Pyx_PyType_GetFullyQualifiedName(%s);zB__Pyx_TypeName type_name = __Pyx_PyType_GetFullyQualifiedName(%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);rn  z = NULL;)bases_tuple_cnamecheck_heap_type_bases)r-  r9   r  rl  r  r  r$  r%  r
   r   r?  rS   r   error_goto_ifr  r   r  r'  r(  r,  r-  r+  r  rL  generate_type_ready_coder   r  )
r   rX   rn   
first_base
trial_typetype_new
type_tuple
args_tupler.  trial_type_bases
             r4   r  z%CClassDefNode.generate_execution_code  s    	dhhzz))E""44Z5N5N[_4`##<<TB

E4K^K^KeKeKghi

4--0OPUw.WY]YaYabcz'@'@A!^^99':K:KX]9^


j\)STYSZZ`ab

4--0OPZ|.\^b^f^fgh "^^99*:S:S`d9e


jk

LM>>77
8Q8Q^b7c

hZ'efg

4228TXXFG.9!^^99*:S:S`d9e


j\)UVW

422:txxHI
N;!^^99*:S:S`d9e


j\)9*RH[H[HbHbHdGeeghi

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

j\):8*BzlRZ[\%z:> 6D))$
0I0IJNN//56 

8$

8$

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

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


, - #egq"q

_bqqr

_bllm

 w x

@A

>?

>?

4??48845

3

j\23++J7%%j*2K2KL++J7##::4@##..t4))$**deko)p %%eZ-F-FG++E299II--d3 r3   c                    | j                   }t        j                   d|j                   }|j                  }|sy | j
                  dk(  rF|j                  r9|j                  rJ |j                  |j                  d|j                  d       y |sJ |j                  sJ d|j                  z  }|j                  d       d }|s|j                  j                  r|j                  j                  t        d      }|j                  |d	|j                  |j                  j                        d
|j                  || j                               |j!                  |t               |s|r|r|j"                  j%                  t'        j(                  dd             |j+                  | j                  d|dt-        j.                  d|j0                        j3                  |      d|xs |d       |j                  |dt        j4                  d|d|xs |d       |r2|j7                  |t               |j                  j9                  |       |j                  |j                  || j                               nD|j                  |dt        j4                  d|d|j                  || j                               t-        j.                  d|j"                  j0                        }	|	j;                  |      s|j                  d       |j                  |d|	j<                  d|	j3                  |      d       dD ]  }
t-        j>                  |j"                  j0                        jA                  |
      }	|	j3                  |      dk(  sPt-        jB                  ||	      rg|j                  d|d|	j<                  d|d|d |	j<                  d!       |j                  |d|	j<                  d|d |	j<                  d       |j                  d"        |j                  d#       |j                  d$       |j                  d%       |j                  d&       |j                  d'       |j                  d(       |j                  d)       |j"                  j%                  t'        j(                  d*d             |j+                  | j                  d+|d|d       |j                  d'       |rM|jE                  |t               |jG                  |t               |j                  |j                  d,|d       |j                  |d|j                  d       |j                  d)       |j                  }|r|jH                  r|jJ                  d-k7  r|j                  d.|jL                  rd/nd0|jJ                  d1|jL                  rd/nd0|jJ                  d2       |j"                  j%                  t'        j(                  d3d             |j                  |j                        }|j+                  | j                  d4|z         |j                  d"       n|j                  }|r|j                  d       t-        j>                  |j"                  j0                        D ]  }|jO                  ||        |j                  d)       |j                  d5       |j"                  j%                  t'        j(                  d6d             |j+                  | j                  d7|z         |j                  d)       |jQ                  d8|        t-        jR                  |d9      }t-        jR                  |d      }|dk(  rd|dk(  r_|j                  d       |j                  d:|d;|d<       |j                  d=|z         |j                  d"       |j                  d)       | j                   j                  jT                  D ]  }|jV                  dv }|jX                  stZ        j\                  s0|j^                  s=|r@t-        j>                  | j                   j                  j0                        jA                  |jV                        }|r|ja                         nd }|r|j                  |       |j                  d>       |j                  d?       |j                  d@|dA|jV                  dB|j                  dC| j                               |j                  dD       |j                  dE|j^                  z         |j                  |j^                  dF|jb                  d       |j                  dG|j^                  z         |j                  d"       |j                  d"       |j                  d)       |s|j                  d)        |jd                  r|j"                  j%                  t'        j(                  dHdI             |j+                  | j                  dJ|d|jf                  d       |j"                  j%                  t'        j(                  dKdI             |j+                  | j                  dL|z         |j                  jh                  sr|j                  j0                  jk                  dM      sM|j+                  | j                  dNt        j4                  d|jm                  |jn                        dO|d       |jp                  s|js                  dP      nd }|r|j                   t        u rxdQ|z  }|jL                  r|jJ                  }ndR|jJ                  z  }|j                  dS       |j                  dT|dU|dV|d|jt                  d	       |j                  d)       ntw        |j                  dW       |jp                  s|js                  dX      rQny |j"                  j%                  t'        j(                  dYd             |j+                  | j                  dZ|z         y y )[NrJ   r   = &rG  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   rh  z3 = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(, &ro  r_  z	, NULL); tp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIrF  r1  r  zif (!z->tp_as_buffer-> && z->tp_base->tp_as_buffer && z->tp_base->tp_as_buffer->r  rn  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.")r  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   r  z) != sizeof(r  ValidateExternBasez__Pyx_validate_extern_base(%s)z#if !CYTHON_USE_TYPE_SPECSPyType_Readyz__Pyx_PyType_Ready(%s)(PyObject*)tp_getattrozCif ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!z->tp_dictoffset && z,->tp_getattro == PyObject_GenericGetAttr)) {z*%s->tp_getattro = PyObject_GenericGetAttr;ra  r  z7PyObject *wrapper = PyObject_GetAttrString((PyObject *)z, "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 %sz#if CYTHON_USE_TYPE_SLOTSr  z == 0) z = offsetof(z)__weakref__ slot must be of type 'object'__reduce_cython__SetupReducez#__Pyx_setup_reduce((PyObject *) %s))<rl  r	   modulestatevalue_cnamer  r  ro  r  rS   r  rm  r$  r%  r   r  r'  r9   r(  r  r  r   r  r  r   get_slot_by_namer   	slot_coderP  r5  r-  is_empty	slot_namer2  r3  get_base_slot_functionr  rJ  r  r  r  generate_dynamic_init_codeput_make_object_deferredget_slot_code_by_namepyfunc_entriesrm   r  r    r  r  r4  r  vtable_cnamevtabptr_cnameis_internalr   r  r{  is_closure_class_scoper  r  r   )r  rX   r  r  rl  r  r  typespec_cname
tuple_tempbuffer_slotbuffer_method_namerm  base_typeptr_cnamer5  getattr_slot_funcdictoffset_slot_funcr]   rf  r  weakref_entrytp_weaklistoffset	objstructs                         r4   r  z&CClassDefNode.generate_type_ready_codek  s[
    zz!889D<N<N;OP

x' !!---

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

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

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

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

%++&//uyyI	 $44^TEUEUE`E`aK''.

AB

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

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

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

3(  

[\

_`

45

tu

7#

kl

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

$2D2DFWXYJJ""  JJx I((Y-F-F.-X JJ"//Y>@T@T'44)CYE^E^ ` a $$55#//0DFXY[)-)K)KDNN)[&))%))5U*6, -JJsO%//	   JJ=>!001A1A1L1LM =//t<=JJx JJ34--''8JKM!!%))-E-UVJJx ))K*GH !* ? ?} U#,#B#B5/#Z  C',@C,G

AB

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

G!" #

3

8$
 

((77 - II)OO	OO(:(:..y$33

((3355L5LTYY5W KO)E)E)GUY&)

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

8,=-@     11++K9IJL%%eii!&&2    11++N<LMO%%eii1IM1YZ::))$**2G2G2K2KJ2W %%eii''**5+;+;<!2  EJD`D`E--m<fjM %%7(?-(O%(($($8$8	$/$2F2F$F	JJ:;JJ))!%++	 - .
 JJx(-++-XY=B=Y=Yu  !45_c   11++M;MNP%%eii1VYf1fg 6r3   c                     | j                   r| j                   j                  |       | j                  r| j                  j                  |       y y r   )r  r   r   r   s     r4   r   zCClassDefNode.annotate[  s=    ((.99IIt$ r3   r  )r,   r-   r.   r   r  r  r  r  r  r  r  r  r  rY  r  r  r  r  r   rw   r  r  r2  r  r   r2   r3   r4   r|  r|    s    , (KL
CNLJJF0 0
%26) V]~F
K4\ mh mh^%r3   r|  c                   0    e Zd ZdgZd Zd Zd Zd Zd Zy)PropertyNoder   c                     |j                  | j                  | j                  | j                        | _        | j
                  j                  | j                  j                         y r   )r  rm   rC   r9   r  r   r   r  r   s     r4   r   z!PropertyNode.analyse_declarationsl  s@    ))$))TXXtxxH
		&&tzz'7'78r3   c                 F    | j                   j                  |      | _         | S r   rH  r   s     r4   rw   z PropertyNode.analyse_expressionsp      II11#6	r3   c                 <    | j                   j                  ||       y r   rJ  r6  s      r4   r  z*PropertyNode.generate_function_definitionst  rK  r3   c                      y r   r2   r   s     r4   r  z$PropertyNode.generate_execution_codew  r   r3   c                 :    | j                   j                  |       y r   rN  r   s     r4   r   zPropertyNode.annotatez  rO  r3   NrP  r2   r3   r4   r  r  b  s$     (K9;!r3   r  c                   H    e Zd ZdZdgZdZed        Zd Zd Z	d Z
d Zd	 Zy
)CPropertyNodezADefinition of a C property, backed by a CFuncDefNode getter.
    r   Tc                 p    | j                   j                  }|rt        |d   t              sJ |       |d   S rL  )r   r!  rL   r  )r   r!  s     r4   rs  zCPropertyNode.cfunc  s0    		E!Hl;BUBQxr3   c                 P   t        | j                  |      }| j                  j                  |       |j	                  | j                  | j
                  | j                  | j                  j                  |      x}| _	        | j                  j                  j                  |_        y )N)class_scope)ctypeproperty_scope)r   rm   r   r   r  rC   r9   rs  r  r  r  r  )r   r   r  r  s       r4   r   z"CPropertyNode.analyse_declarations  s~    diiS9		&&u- 11IItxx1G1GX] 2 _ 	_
!ZZ--33r3   c                 F    | j                   j                  |      | _         | S r   rH  r   s     r4   rw   z!CPropertyNode.analyse_expressions  r  r3   c                 <    | j                   j                  ||       y r   rJ  r6  s      r4   r  z+CPropertyNode.generate_function_definitions  rK  r3   c                      y r   r2   r   s     r4   r  z%CPropertyNode.generate_execution_code  r   r3   c                 :    | j                   j                  |       y r   rN  r   s     r4   r   zCPropertyNode.annotate  rO  r3   N)r,   r-   r.   r   r   r   rY  rs  r   rw   r  r  r   r2   r3   r4   r   r   ~  s@     (KL 
4;!r3   r   c                   "    e Zd Zg Zd Zd Zd Zy)
GlobalNodec                 ^    | j                   D ]  }|j                  || j                           y r   )namesdeclare_globalr9   r   r   rm   s      r4   r   zGlobalNode.analyse_declarations  s)    JJ 	/DtTXX.	/r3   c                     | S r   r2   r   s     r4   rw   zGlobalNode.analyse_expressions  r  r3   c                      y r   r2   r   s     r4   r  z"GlobalNode.generate_execution_code  r   r3   Nr>  r2   r3   r4   r+  r+    s    
 K/r3   r+  c                   "    e Zd Zg Zd Zd Zd Zy)NonlocalNodec                 ^    | j                   D ]  }|j                  || j                           y r   )r-  declare_nonlocalr9   r/  s      r4   r   z!NonlocalNode.analyse_declarations  s)    JJ 	1D  txx0	1r3   c                     | S r   r2   r   s     r4   rw   z NonlocalNode.analyse_expressions  r  r3   c                      y r   r2   r   s     r4   r  z$NonlocalNode.generate_execution_code  r   r3   Nr>  r2   r3   r4   r3  r3    s    
 K1r3   r3  c                   :    e Zd ZdgZd Zd Zd ZdZd Zd Z	d Z
y	)
rH  rC  c                    ddl m} | j                  }t        ||j                        r|j
                  j                         }|dk(  r|j                         \  }}t        |      rt        |j                  d       |j                  D ]X  \  }}|j                  |      }	|	t        |j                  d       0|j                  |j                  |	|j                  d       Z t        | _        y y t#        |dd       N|j$                  r|j'                  |       t        | _        y |j(                  s|j*                  rt        | _        y y y )	Nr   rj  r  z!Variable names must be specified.Unknown typeT)r  r  )r   r  rC  rL   GeneralCallNoderl  r  explicit_args_kwdsrK   r   r9   r  r  r  r   PassStatNoderN   r   r   declare_from_annotationr5  is_subscript)
r   r   r  rC  r]   rU   rV   varr  rl  s
             r4   r   z!ExprStatNode.analyse_declarations  s   yydI556==446Dy !446
dt9$(($GH&*&:&: PNC$44S9D|imm^<		4$OP ". ! T<.:||,,S1!-""d&7&7!- '8 ;r3   c                     d| j                   _        | j                   j                  |      | _         d| j                   _        | S r  )rC  result_is_usedrw   r   s     r4   rw   z ExprStatNode.analyse_expressions  s5    #(		 II11#6	#(		 r3   c                     | j                   j                  j                  r,| j                   j                         r| j	                          y y y r   )rC  rl  r~  result_in_tempr   r   s     r4   r   zExprStatNode.nogil_check  s5    99>>%%$))*B*B*DNN +E%r3   zDiscarding owned Python objectc                    |j                  | j                         d| j                  _        | j                  j	                  |       | j                  j                         sm| j                  j                         rS| j                  j                         }| j                  j                  j                  sd|z  }|j                  d|z         | j                  j                  |       | j                  j                  |       y )NFz
(void)(%s)%s;)r-  r9   rC  rB  r?  rD  r   rl  rg  rS   r  rL  )r   rX   r   s      r4   r  z$ExprStatNode.generate_execution_code  s    dhh#(		 		**40yy'')dii.>.>.@YY%%'F99>>))%.JJuv~&		((.		T"r3   c                 <    | j                   j                  ||       y r   )rC  r  r6  s      r4   r  z*ExprStatNode.generate_function_definitions  rK  r3   c                 :    | j                   j                  |       y r   )rC  r   r   s     r4   r   zExprStatNode.annotate  rO  r3   N)r,   r-   r.   r   r   rw   r   r   r  r  r   r2   r3   r4   rH  rH    s0    
 (K.2 3K
#;!r3   rH  c                   $    e Zd Zd Zd Zd Zd Zy)AssignmentNodec                    |j                   }|j                   }|j                  rd|j                  j                  rM|j                  r@|j                  j                  s)t	        | j
                  dj                  ||      d       y y y y y )Nz4Assigning to '{}' from '{}' discards const qualifierr   r  )rl  rd  rm  r  r   r9   r:  )r   r  rhsrhs_tlhs_ts        r4   _warn_on_const_assignmentz(AssignmentNode._warn_on_const_assignment  sh    <<EOO44eooNfNfDHHT[[\achiqrs Og4<r3   c                 r    t        |t              r'| j                  |j                  |j                         y y r   )rL   rJ  rO  r  rL  )r   rW   s     r4   _check_const_assignmentz&AssignmentNode._check_const_assignment  s)    dN+**488TXX> ,r3   c                 *   | j                  |      }| j                  |       t        |t              r`t        |t              sP|j
                  j                  j                  r0|j
                  j                         rt        | j                  d       |S )Nz9Storing unsafe C derivative of temporary Python reference)rv   rQ  rL   rJ  ParallelAssignmentNoderL  rl  is_unowned_viewis_ephemeralr   r9   )r   r   rW   s      r4   rw   z"AssignmentNode.analyse_expressions  sh    !!#&$$T*dN+JtE[4\xx}},,1F1F1Hdhh [\r3   c                 ~    |j                  | j                         | j                  |       | j                  |       y r   )r-  r9   generate_rhs_evaluation_coderP  r   s     r4   r  z&AssignmentNode.generate_execution_code'  s.    dhh))$/%%d+r3   N)r,   r-   r.   rO  rQ  rw   r  r2   r3   r4   rJ  rJ    s    t?,r3   rJ  c                   h    e Zd Zddg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dZd Zd Zy)SingleAssignmentNoder  rL  Fc                 J
   ddl m} t        | j                  |j                        r
| j                  j
                  j                         }|r| j                  j                         \  }}|dv rt        |      dkD  rt        |d   j                  d       y |7|j                  d       }|dk(  sd|vrt        |j                  d       y |d   }nd	}|d
   j                  |      }|t        |d
   j                  d       y | j                  }	|dk(  rt        |	|j                        r|	j                  |	j                  fg}
n]t        |	|j                         r0|	j"                  D cg c]  }|j                  |j                  f }
}nt        |	j                  d       y |
D ]  \  }}|j%                  |||d|        t        |      dk(  r|d   | _        nVd| _        nMd| _        t        |	|j                        st        |	j                  d       |j)                  |	j                  || j                  d	       n|dv rkd| _        t        |      d
kD  s|!t        | j                  j                  d       y g }|j*                  D ]W  \  }}|j                  |      }|t        |j                  d       0|j-                  |j.                  ||j                  f       Y t        |      t        |j*                        k  ry t        | j                  |j                        s t        | j                  j                  d       | j                  j                  }t1        |      }|j3                  |||d| j                  j                         |D ]  \  }}}|j%                  |||        n|dk(  rzd| _        |r*t        | j                  j
                  j                  d       t5        | j                  j                  | j                  j                  |      }|j7                  |       | j&                  ry | j8                  r| j                  j;                  |       y | j                  j=                  |       | j                  j>                  s| j                  j@                  rq| j                  jB                  rZ| j                  jB                  jD                  s9| j                  jG                         }|r|| j                  jB                  _"        y y y y y c c}w )Nr   rj  )r  typedefr%   zInvalid positional argument.r[  ro  zInvalid keyword argument.r  r   r:  r  zInvalid declarationT)r  ro  zInvalid declaration.)ro  )r  unionz.Struct or union members must be given by name.F
fused_typez*fused_type does not take keyword arguments)rm   rf   )$r   r  rL   rL  r  rl  r  r<  rK   r   r9   compile_time_valuer  r  r  rm   r  rU   r  declaration_onlyr  r  r  r   r   r  r  r   is_assignment_expression0analyse_assignment_expression_target_declarationr  r5  r   r  rm  !get_known_standard_library_import)r   r   r  	func_namerU   rV   kwdictro  rl  r  varsr@  r9   membersmemberr  rm   r  	fusednodestdlib_import_names                       r4   r   z)SingleAssignmentNode.analyse_declarationsB  sJ    dhh	 2 23))==?I!XX88:
d 664y1}d1gkk+IJ'!%!8!8!>$	1\5O!$((,GH"%+L%9
%.
72237D|d1gkk>:((C I-%c9+=+=>%(XXsww$7#8D'Y-@-@ACF88#LCSXXsww$7#LD#L!#''+@A"(, aHCOOCsDU_O`at9>'+AwDH48D104-)#y/A/AB!#''+AB++CHHdDHHQZ+["55,0D)4y1}dhhll,\] G-1-A-A M)	(88=<!)--@#NNFLL$

+KLM 7|c$*>*>&??%dhh	0B0BCdhhll,BC88==D.t4E//itxx||\-4 =)c))&$<= ,.,0D)dhh//33JL !.dhhll3788==!NI2237  ,,II#N33C8 HH))TXX-=-=488>>Z^ZbZbZhZh  [G  [G)-)S)S)U&)GYD * [G>-=y $Ms   )T c                    ddl m} | j                  j                  |      | _        | j                  j
                  r| j                  j                  j                  j                  r|j                  rj| j                  j                  j                  J| j                  j                         r0| j                  j                  | j                  j                  _
        n.t        | j                  d| j                  j                   d       | j!                  |      }|r|S | j                  j#                  |      | _        | j                  j%                  |       | j'                  |      }|r|S t)        | j                  |j*                        rP| j                  j-                  | j                         | j                  j/                  | j                        | _        n| j                  j                  j0                  rit)        | j                  |j2                        sI|j3                  | j                  j                  | j                  d d       }|j#                  |      | _        | j                  j                  j4                  r|j7                  | j                  d| j                  j                  | j                  j                  g      }|r| j                  }d| _        |j                  j:                  | _        |j                  j<                  | _        | j:                  dk(  r| j<                  |j?                  tA        jB                  d	d
             na| j                  jE                  | j                  j                  |      }n0| j                  jE                  | j                  j                  |      }|s:|jF                  s.|j
                  s4|jH                  s(|j                  jJ                  r|jM                  |      }n'|j                  jJ                  r|jO                  |      }|| _        | jP                  r7| j                  j                  j                  stS        | j                  dd       | S )Nr   rj  zAssignment to const 'r  )ru  rZ   stop=Tr  CppExceptionConversionrV  zHAssignment in pxd file will not be executed. Suggest declaring as const.r%   )*r   r  rL  rv   r  r   r  rl  r  r  r  r  r  r   r9   rm   
unroll_rhsrx   gil_assignment_check
unroll_lhsrL   MemoryViewIndexNodeanalyse_broadcast_operation$analyse_as_memview_scalar_assignmentre  SliceIndexNoder  lookup_operator_for_typesis_overloaded_assignmentr  r  r  r   r  r  r5  r   r~  coerce_to_tempcoerce_to_simplefrom_pxd_cvardefr   )r   r   use_tempr  unrolled_assignmentr  oprL  s           r4   rv   z"SingleAssignmentNode.analyse_types  s   88))#.88 3 3 < <""txx~~':':'BtxxGcGcGe&*hh&>&>#dhh"7a HI"ooc2&&88005%%c*"ooc2&&dhh	 = =>HH00:xxDDTXXNDHXX]]##dhh	(@(@A..txx||$((RV]a.b33C888==%%..txxtxx}}dhhmm>\]Bhh04-')ww'>'>$')ww'>'>$''3.43G3G3O(()@)@AY[k)lmhh((<(($$TXX]]C8Cs''KK$$$$S)CXX!!&&s+C  )?)?Z r3   c           
      
   ddl m}m} |}d x}x}x}	}
|j                  j                  r|j                  j
                  }n^|j                  j                  s|j                  j                  r0t        ||j                        rU|j                  sI|j                  s=|j                  x}}t        ||j                        r|j                  s|j                  s=t        ||j                        rp|j                  }|j                  }|r |j                  t        j                  |      }|j                  }|r!|j                  t        j                  |      }n|j                  j                  r|j                  j
                  r|j!                  | j"                  t%        |j                  j
                        t        |j                  j
                  t&              r|j                  j
                  n|j(                        }nt+        | j"                  d       y |	r |	j                  t        j                  |      }	d }	  ||d        ||d      z
   ||	d      z  }n?|j                  j                  r'|j                  j
                  }t        |t&              sy y y ||k7  rt+        | j"                  d|d	|       y g }|j/                  |      }|g}|r.|j0                  s"|j/                  |      }|j3                  |       |r.|j0                  s"|j/                  |      }|j3                  |       |	r.|	j0                  s"|j/                  |	      }	|j3                  |	       t5        |      D ]k  }|j                   j7                  | j"                  |      }|	yt        |	j8                  t&              r@|j8                  |	j8                  z  }|j                   j7                  | j"                  |      }n|j;                  | j"                  d
|	|      }|t        |j8                  t&              rP|j=                         r@|j8                  |j8                  z   }|j                   j7                  | j"                  |      }n|j?                  | j"                  d||      }|j3                  |jA                  | j"                  ||jC                  |                   n |
||fS # t,        $ r t+        | j"                  d       Y y w xY w)Nr   )r  	UtilNodes)r   r  z*C array iteration requires known end indexc                 X    | |S | j                         r| j                  S t        d      )NzNot a constant.)r  r  r  )rW   
none_values     r4   	get_constz.SingleAssignmentNode.unroll.<locals>.get_const  s1    |))113#333():;;r3   r   z5C array assignment currently requires known endpointsz3Assignment to/from slice of wrong length, expected z, got r  )operatoroperand1operand2r  )ru  r  )"r   r  r~  rl  	is_ctupler  rd  re  rL   rt  rZ   rk  ru  r  r
   r  IntNoder9   r  r  constant_value_not_setr   r  
LetRefNoder   r  r  for_sizer  MulNoder  AddNode	IndexNoderv   )r   rW   target_sizer   r  r~  ru  
start_node	stop_node	step_node
check_node
slice_sizer  ri   refsr  ix_node
step_valueindex_values                      r4   unrollzSingleAssignmentNode.unroll  s"   *:>>
>Y>Z99JYY!3!3T9#;#;<djjTXT]T]"ii't T9#;#;<djjTXT]T]$	 8 89yy!ZZ
!+!5!5j6R6RTW!XJ II	 ) 3 3J4P4PRU VIyy))diinn$-$5$5 HHC		,??I$))..Z]?^TYY^^2;2R2R %6 %U	
 dhh(TU ) 3 3J4P4PRU VI<"+It"<yUV?W"W[denpq[r!rJ
 ##!YY^^
!*c2 $$((K) *##D)vj33"--j9JKK
#Y11!,,Y7IKK	"Y11!,,Y7IKK	"$ 	eB''002>G$i77=!(!8!89;T;T!TJ'//88:NG'//3QZel/mG%j88#>7C^C^C`")"9"9J<V<V"VK'//88;OG'//3g 0 WGLL,,TXXDH]H]^aHb,cd	e  4&&a " $(($[\s   S& &TTc           	      b   ddl m} g }t        ||      D ]7  \  }}	|j                  t	        | j
                  ||	| j                               9 t        | j
                  |      j                  |      }
|rt        | j
                  ||
g      }
|d d d   D ]  }|j                  ||
      }
 |
S )Nr   )r~  )r  rL  first)r9   r!  r   )r   r~  rN  r  rY  r9   r  rS  rw   r   LetNode)r   r  r  lhs_listrhs_listr   r~  assignmentsr  rL  rW   refs               r4   unroll_assignmentsz'SingleAssignmentNode.unroll_assignments;  s    Hh/ 	cHC3DHH#3VZV`V`ab	c%$((+FZZ[^_DHHZ4FGD": 	0C$$S$/D	0r3   c                 v   ddl m} t        | j                  |j                        sy t        d | j                  j                  D              ry | j                  | j                  t        | j                  j                        |      }|sy |\  }}}| j                  ||| j                  j                  ||      S )Nr   rj  c              3   4   K   | ]  }|j                     y wr   )
is_starred)r>  r  s     r4   r?  z2SingleAssignmentNode.unroll_rhs.<locals>.<genexpr>K  s     7#s~~7r  )r   r  rL   r  r  r  rU   r  rL  rK   r  )r   r   r  unrolledr  r  rL  s          r4   rn  zSingleAssignmentNode.unroll_rhsG  s    $((I$7$78777;;txxTXX]]);SA (
D#&&tZSQQr3   c                 j   | j                   j                  j                  ry ddlm} t        | j                  |j                        sy | j                  | j                   t        | j                  j                        |      }|sy |\  }}}| j                  |||| j                  j                  |      S Nr   rj  )r  rl  r  r   r  rL   rL  r  r  rK   rU   r  )r   r   r  r  r  r  r  s          r4   rp  zSingleAssignmentNode.unroll_lhsT  s    88==""$((I$7$78;;txxTXX]]);SA (
D#&&tZdhhmmSQQr3   c                 :    | j                   j                  |       y r   rL  r?  r   s     r4   rW  z1SingleAssignmentNode.generate_rhs_evaluation_codeb      ))$/r3   c                     | j                   rI| j                  j                  | j                  || j                   | j                  | j
                         y | j                  j                  | j                  |       y )N)rM  r  r  )rv  r  rP  rL  r  r  )r   rX   rM  s      r4   rP  z-SingleAssignmentNode.generate_assignment_codee  sa    ((HH--&*&C&C $ 4 4 $ 4 4 . 6 HH--dhh=r3   c                 <    | j                   j                  ||       y r   rL  r  r6  s      r4   r  z2SingleAssignmentNode.generate_function_definitionsp      ..sD9r3   c                 p    | j                   j                  |       | j                  j                  |       y r   r  r   rL  r   s     r4   r   zSingleAssignmentNode.annotates  &    $$r3   Nr=  r`  )r,   r-   r.   r   r  rv  r`  r_  ry  r   rv   r  r  rn  rp  rW  rP  r  r   r2   r3   r4   rY  rY  -  sd     %.KE$$\Z|<|['z
RR0	>: r3   rY  c                   N    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y)CascadedAssignmentNode)r  rL  coerced_valuescloned_valuesNc                     t        |t              r.|j                  D ]  }| j                  ||j                           y y r   )rL   r  r  rO  rL  )r   rW   r  s      r4   rQ  z.CascadedAssignmentNode._check_const_assignment  s9    d23}} >..sDHH=> 4r3   c                 H    | j                   D ]  }|j                  |        y r   )r  r  )r   r   r  s      r4   r   z+CascadedAssignmentNode.analyse_declarations  s#    == 	0C**3/	0r3   c                    ddl m}m} t               }t	        | j
                        D ]Q  \  }}|j                  |      x}| j
                  |<   |j                  |       |j                  |j                         S | j                  j                  |      }t        |      dk(  rt        t        |            j                  rA|j!                  d| j                  g      }	|	sA|j#                  |j%                         |      }n |j#                  |j%                         |      }|j&                  sB|j(                  s6|s"|j*                  s|j                  j,                  r|j/                  |      }n|j1                  |      }|j3                         r ||      n|| _
        g | _        i }
g | _        | j
                  D ]  }|j                  j                  xr |j!                  d|| j                  g      }| j6                  j9                  |       |j                  |
vsc|j                  |j                  k7  s} || j                        }|s|j#                  |j                  |      }| j4                  j9                  |       ||
|j                  <    g | _        | j
                  D ]I  }|
j=                  |j                  | j                        }| j:                  j9                   ||             K | S )Nr   )r  rm  rl  )r  r  rm  r   r  r  rx   ro  r   rl  rL  rv   rK   nextiterr  lookup_operatorr  r  r   r   r5  r~  rw  rx  rD  r  assignment_overloadsr  r  r   )r   r   rz  r  rm  	lhs_typesr  r  rL  r|  r  
overloadeds               r4   rv   z$CascadedAssignmentNode.analyse_types  sa   3 E	. 	$FAs%(%=%=c%BBC$--"$$S)MM#((#	$
 hh$$S)y>QDO$11((sDHHo>--	=CmmIMMOS9{{3>>C,,0D0D$$S)C&&s+C%(%7%7%99S>s !$&!== 	/C..\33F3FsSRVRZRZO3\J%%,,Z8xx~-#((chh2F)!--#6C##**3/+.sxx(	/  == 	6C $$SXXtxx8C%%in5	6 r3   c                 :    | j                   j                  |       y r   r  r   s     r4   rW  z3CascadedAssignmentNode.generate_rhs_evaluation_code  r  r3   c                    | j                   D ]  }|j                  |        t        | j                  | j                  | j
                        D ]+  \  }}}|j                  |       |j                  |||       - | j                   D ]$  }|j                  |       |j                  |       & | j                  j                  |       | j                  j                  |       y )N)rM  )
r  r?  rN  r  r  r  rP  r  rL  rL  )r   rX   rM  rL  r  overload	rhs_values          r4   rP  z/CascadedAssignmentNode.generate_assignment_code  s    && 	/C((.	/ #&dmmT5G5GIbIb"c 	TCh((.((d((S	T ,, 	'I,,T2  &	' 	''-D!r3   c                 <    | j                   j                  ||       y r   r  r6  s      r4   r  z4CascadedAssignmentNode.generate_function_definitions  r  r3   c                    | j                   D ]  }|j                  |        t        | j                  | j                        D ]'  \  }}|j                  |       |j                  |       ) | j
                  j                  |       y r   )r  r   rN  r  r  rL  )r   rX   rL  r  s       r4   r   zCascadedAssignmentNode.annotate  ss    && 	CLL	DMM4+=+=> 	HCLLLL	 	$r3   r=  r`  )r,   r-   r.   r   r  r  r  rQ  r   rv   rW  rP  r  r   r2   r3   r4   r  r  x  s>     IKMN>
0/b0": r3   r  c                   0    e Zd ZdgZd Zd Zd Zd Zd Zy)rS  r!  c                 H    | j                   D ]  }|j                  |        y r   r%  r&  s      r4   r   z+ParallelAssignmentNode.analyse_declarations  s#    JJ 	+D%%c*	+r3   c                     | j                   D cg c]  }|j                  |d       c}| _         | j                   D ]  }|j                  |        | S c c}w )Nr   )rz  )r!  rv   rQ  r&  s      r4   rw   z*ParallelAssignmentNode.analyse_expressions  s]    "&**. ((q(9 .
 JJ 	/D((.	/.s   Ac                     |j                  | j                         | j                  D ]  }|j                  |        | j                  D ]  }|j	                  |        y r   )r-  r9   r!  rW  rP  r.  s      r4   r  z.ParallelAssignmentNode.generate_execution_code  sT    dhhJJ 	4D--d3	4JJ 	0D))$/	0r3   c                 J    | j                   D ]  }|j                  ||        y r   r*  r+  s       r4   r  z4ParallelAssignmentNode.generate_function_definitions  s%    JJ 	:D..sD9	:r3   c                 H    | j                   D ]  }|j                  |        y r   r0  r.  s      r4   r   zParallelAssignmentNode.annotate  r1  r3   N	r,   r-   r.   r   r   rw   r  r  r   r2   r3   r4   rS  rS    s$     )K+0: r3   rS  c                   2    e Zd ZddgZd Zd Zd Zd Zd Zy)	InPlaceAssignmentNoder  rL  c                 :    | j                   j                  |       y r   r  r  r   s     r4   r   z*InPlaceAssignmentNode.analyse_declarations)      ++C0r3   c                    | j                   j                  |      | _         | j                  j                  |      | _        | j                  j                  s| j                  j
                  r7| j                   j                  | j                  j                  |      | _         | S | j                  j                  j                  r=| j                  dv r/| j                   j                  t        j                  |      | _         | S )Nz+-)rL  rv   r  rx   is_memview_indexis_buffer_accessr  rl  	is_stringr  r
   r  r   s     r4   rv   z#InPlaceAssignmentNode.analyse_types,  s    88))#.88005 88$$(A(Axx))$((--=DH  XX]]$$$)>xx))**F*FLDHr3   c                    |j                  | j                         | j                  | j                  }}|j	                  |       |j                  |       | j                  }|dk(  rd}n|dk(  rt        | j                  d       |j                  s|j                  r|j                  j                  rt        | j                  d       |dv rE|j                  j                  r/|j                  j                  d   st        | j                  d       |j                  |||       nY|j                   rt        | j                  d	       n6|j#                  |j%                         d
|d|j%                         d       |j'                  |       |j)                  |       |j+                  |       |j-                  |       y )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 slicesrG   z= rG  )r-  r9   r  rL  r?   generate_subexpr_evaluation_coder  r   r  r  rl  r~  r  r  r   generate_buffer_setitem_codeis_memview_slicerS   r   generate_subexpr_disposal_codefree_subexpr_tempsr  rL  )r   rX   r  rL  c_ops        r4   r  z-InPlaceAssignmentNode.generate_execution_code8  sM   dhh88TXXS$$T*,,T2}}4<DT\$((9:3#7#7xx##dhh cdz!chhood>N>N>Y>YZe>fdhh ]^,,S$=!!$((RS JJszz|T3::<HI**40t$""4(tr3   c                 p    | j                   j                  |       | j                  j                  |       y r   r  r   s     r4   r   zInPlaceAssignmentNode.annotateS  r  r3   c                     ddl m} |j                  | j                  | j                  | j
                  | j                        S r  )r   r  
binop_noder9   r  r  rL  r}  s     r4   create_binop_nodez'InPlaceAssignmentNode.create_binop_nodeW  s,    ##DHHdmmTXXtxxPPr3   N)	r,   r-   r.   r   r   rv   r  r   r  r2   r3   r4   r  r    s'    $ %.K1
6 Qr3   r  c                   H    e Zd ZddgZd Zej                  ZdZd Z	d Z
d Zy)	PrintStatNode	arg_tuplerQ   c                    | j                   r1| j                   j                  |      }|j                  |      | _         | j                  j                  |      }|j                  |      | _        |j	                  t
               t        | j                  j                        dk(  r!| j                  r|j	                  t               | S )Nr   )
rQ   rw   coerce_to_pyobjectr  r  printing_utility_coderK   rU   append_newlineprinting_one_utility_code)r   r   rQ   r  s       r4   rw   z!PrintStatNode.analyse_expressionse  s    ;;[[44S9F 33C8DKNN66s;	"55c:23t~~""#q(T-@-@  !:;r3   zPython print statementc           
         |j                  | j                         | j                  r6| j                  j                  |       | j                  j	                         }nd}t        | j                  j                        dk(  r| j                  r| j                  j                  d   }|j                  |       |j                  d|d|j	                         d|j                  | j                               |j                  |       |j                  |       n| j                  j                  |       |j                  d|| j                  j	                         | j                  |j                  | j                        fz         | j                  j                  |       | j                  j                  |       | j                  r7| j                  j                  |       | j                  j                  |       y y )Nr  r   r   zif (__Pyx_PrintOne(r   r#  z#if (__Pyx_Print(%s, %s, %d) < 0) %s)r-  r9   rQ   r?  r  rK   r  rU   r  rS   r+  r  rL  )r   rX   stream_resultr  s       r4   r  z%PrintStatNode.generate_execution_codes  sy   dhh;;KK006 KK113MMt~~""#q(T-@-@..%%a(C((.JJ!MMOOODHH-/0
 &&t,NN4 NN33D9JJ5!NN,,.''OODHH-	9/ /0 NN11$7NN%%d+;;KK..t4KK""4( r3   c                     | j                   r| j                   j                  ||       | j                  j                  ||       y r   )rQ   r  r  r6  s      r4   r  z+PrintStatNode.generate_function_definitions  s1    ;;KK55c4@44S$?r3   c                     | j                   r| j                   j                  |       | j                  j                  |       y r   )rQ   r   r  r   s     r4   r   zPrintStatNode.annotate  s-    ;;KK  &%r3   N)r,   r-   r.   r   rw   r   r   r   r   r  r  r   r2   r3   r4   r  r  \  s4     )K	 ..K*K)B@
&r3   r  c                   @    e Zd ZdgZd Zej                  ZdZd Z	d Z
y)ExecStatNoderU   c                     t        | j                        D ]6  \  }}|j                  |      }|j                  |      }|| j                  |<   8 |j	                  t
        j                         | S r   )r  rU   rw   r  r  r   pyexec_utility_coder   r   r  r  s       r4   rw   z ExecStatNode.analyse_expressions  sf    		* 	FAs))#.C((-CDIIaL	 	W889r3   zPython exec statementc           	         |j                  | j                         g }| j                  D ]2  }|j                  |       |j	                  |j                                4 t        |ddgd dt        |      z
   z         }|j                  j                  t        j                  d      }|j                  d|f|z   z         | j                  D ]$  }|j                  |       |j                  |       & |j                  |j                  || j                               |j!                  |t               |j#                  |t               |j                  j%                  |       y )Nr  r   Tr   z%s = __Pyx_PyExec3(%s, %s, %s);)r-  r9   rU   r?  r  r  r  rK   r$  r%  r
   r   rS   r  rL  r'  r(  r,  r-  )r   rX   rU   r  temp_results        r4   r  z$ExecStatNode.generate_execution_code  s&   dhh99 	)C((.KK(	) TS#J|#d)445nn22:3L3LY]2^

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

##K:	<^4k>:##K0r3   c                 H    | j                   D ]  }|j                  |        y r   rU   r   r  s      r4   r   zExecStatNode.annotate  !    99 	CLL	r3   N)r,   r-   r.   r   rw   r   r   r   r   r  r   r2   r3   r4   r  r    s*    
 (K ..K)K1$r3   r  c                   8    e Zd ZdgZdZd Zd Zd ZdZd Z	d Z
y	)
DelStatNoderU   Fc                 H    | j                   D ]  }|j                  |        y r   )rU   r  rF  s      r4   r   z DelStatNode.analyse_declarations  s#    99 	0C**3/	0r3   c                    t        | j                        D ]Z  \  }}|j                  |d       x}| j                  |<   |j                  j                  s"|j
                  rQ|j                  j                  r;|j
                  sm|j                  j                  st        |j                  d       |j                  j                  r2|j                  j                  j                  r| j                  |       |j                  j                  rt        |j                  d       |j                  r(|j                   j                  t"        j$                  u rEt        |j                  d       ] | S )NzDeletion of global C variablezDeletion of non-heap C++ objectz&Deletion of non-Python, non-C++ object)r  rU   r  rl  r~  r   r  r  
is_cglobalr   r9   rd  rm  r  r   r?  ru  r   bytearray_typer  s       r4   rw   zDelStatNode.analyse_expressions  s    		* 	IFAs!$!>!>sD!IIC$))A,xx##8S8S;;399#7#7#''#BCSXX%7%7%D%Ds#&&cgg@A!!chhmmw7M7M&McggGH	I r3   c                 t    | j                   D ])  }|j                  j                  s| j                          + y r   )rU   rl  r~  r   rF  s      r4   r   zDelStatNode.nogil_check  s,    99 	!Cxx## 	!r3   zDeleting Python objectc                 r   |j                  | j                         | j                  D ]  }|j                  j                  sH|j                  j
                  s2|j                  rD|j                  j                  t        j                  u r|j                  || j                         |j                  j                  s|j                  j                  j                  s|j                  |       |j!                  d|j#                         z         |j%                  |       |j'                  |        y )N)ignore_nonexistingz
delete %s;)r-  r9   rU   rl  r~  r  r?  ru  r   r  generate_deletion_coder  rd  rm  r  r?  rS   r   r  rL  r  s      r4   r  z#DelStatNode.generate_execution_code  s    dhh99 
	%C$$HH//$$':P:P)P**T-D-D + FSXX%7%7%D%D,,T2

<#**,67**40t$
	%r3   c                 H    | j                   D ]  }|j                  |        y r   r  r  s      r4   r   zDelStatNode.annotate  r  r3   N)r,   r-   r.   r   r  r   rw   r   r   r  r   r2   r3   r4   r  r    s1    
 (K0"!
 +K%r3   r  c                       e Zd Zg Zd Zd Zy)r=  c                     | S r   r2   r   s     r4   rw   z PassStatNode.analyse_expressions  r  r3   c                 n    |j                   j                  d   r|j                  | j                         y y )Nrc  )r  r   r-  r9   r   s     r4   r  z$PassStatNode.generate_execution_code  s+    &&{3MM$((# 4r3   N)r,   r-   r.   r   rw   r  r2   r3   r4   r=  r=     s     K$r3   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                 B    t         |   |d   j                  |       y )Nr   r  )rj   r   r9   )r   r!  rN   s     r4   r   zIndirectionNode.__init__  s    qU3r3   )r,   r-   r.   r   r   rr   rs   s   @r4   r  r    s    
4 4r3   r  c                        e Zd Zg ZdZd Zd Zy)BreakStatNodeTc                     | S r   r2   r   s     r4   rw   z!BreakStatNode.analyse_expressions  r  r3   c                     |j                  | j                         |j                  st        | j                  d       y |j	                  |j                         y )Nzbreak statement not inside loop)r-  r9   break_labelr   r  r   s     r4   r  z%BreakStatNode.generate_execution_code  s<    dhh$((=>MM$**+r3   Nr,   r-   r.   r   r   rw   r  r2   r3   r4   r	  r	    s    KM,r3   r	  c                        e Zd Zg ZdZd Zd Zy)ContinueStatNodeTc                     | S r   r2   r   s     r4   rw   z$ContinueStatNode.analyse_expressions,  r  r3   c                     |j                   st        | j                  d       y |j                  | j                         |j	                  |j                          y )Nz"continue statement not inside loop)continue_labelr   r9   r-  r  r   s     r4   r  z(ContinueStatNode.generate_execution_code/  s?    ""$((@Adhhd))*r3   Nr  r2   r3   r4   r  r  '  s    KM+r3   r  c                   J    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y)rp  r   TFc                    |j                   }|| _         |st        | j                  d       | S | j                  r| j                  rt        | j                  d       | j                  j                  |      | _        |j                  s|j                  r"t        | j                  j                  d       | S | j                  j                  |j                   |      | _        |j                  d   s|j                  d   r.|j                  s"|j                  |      r|j                  |       | S |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 functionrY  rc  zReturn value required)r  r   r9   r   in_async_genrv   rg  rG  r  r   r~  can_coerce_to_pyobjectr  )r   r   r  s      r4   rw   z"ReturnStatNode.analyse_expressionsG  s   oo&$((?@K::  dhh FG11#6DJ""k&?&?djjnn&JK  "ZZ11#//3G
>>),{0K&22{7Y7YZ]7^#==cB 	  '''33'55dhh 78r3   c                 R    | j                   j                  r| j                          y y r   )r  r~  r   r   s     r4   r   zReturnStatNode.nogil_check_  s     ''NN (r3   zReturning Python objectc                    |j                  | j                         | j                  sy | j                  }| j                  j                  r:|j                  t        j                  | j                         |r|j                  rd }|r|j                  |       | j                  j                  r[ddlm} |j                  t        j                  | j                  |j                  ||| j                         |j                  |       n`|j!                  |       |j#                  t        j                  d|j%                  | j                        d       |j                  |       |j'                  |       n}| j                  j                  r+|j)                  t        j                  | j                         n<| j                  j*                  r&| j-                  || j                  j.                         |j0                  j2                  d   s|j0                  j2                  d   rL|j5                  t        j                  | j                  | j                  |j6                  j8                          |j6                  j;                         D ]  \  }}|j=                  ||        |j?                  |j@                         y )	Nr   r  )	lhs_cnamelhs_typelhs_posrL  rX   rr  rF  rG  rY  rc  r  )!r-  r9   r  r   r~  r  r	   r  r   r?  r  r   r  put_acquire_memoryviewslicer   rK  rH  rS   rI  rL  r  rG  
put_returnr  r  r   r  r$  r}  temps_holding_referencer,  r  r  )r   rX   r   r  r  rl  s         r4   r  z&ReturnStatNode.generate_execution_codee  s$   dhh

''V00$2B2BC**4022(66$11!--!II!22 7 4 33D9**40

''OOD$4$457 8 33D9T"++(()<)<d>N>NO!!//d&6&6&D&DE&&y1T5E5E5P5PQ\5]!!## ,,..222	 "   >>AAC 	/KE4!!%.	/ 	d''(r3   c                     | j                   r|j                  d       |j                  t        j                  d|d       y )Nz%#pragma omp critical(__pyx_returning)rF  rG  )in_parallelputln_openmprS   r	   r  )r   rX   r   s      r4   r  zReturnStatNode.put_return  s1    EF

!4!4e<=r3   c                 V    | j                   | j                   j                  ||       y y r   )r   r  r6  s      r4   r  z,ReturnStatNode.generate_function_definitions  s%    ::!JJ44S$? "r3   c                 T    | j                   r| j                   j                  |       y y r   )r   r   r   s     r4   r   zReturnStatNode.annotate  s     ::JJ% r3   N)r,   r-   r.   r   r   in_generatorr  r   rw   r   r   r  r  r  r   r2   r3   r4   rp  rp  7  sH     )KMLL K0 ,K1)f>
@&r3   rp  c                   X    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y)
RaiseStatNode)exc_type	exc_valueexc_tbcauseTNFc                 X   | j                   r1| j                   j                  |      }|j                  |      | _         | j                  r| j                  j                  |      }| j                  rp|j
                  t        j                  u s|j
                  j                  s>ddl	m
}  ||j                  |j                  |      gd      }|j                  |d      }|j                  |      | _        | j                  r1| j                  j                  |      }|j                  |      | _        | j                  r1| j                  j                  |      }|j                  |      | _        | j                   r,| j                  s| j                  s| j                   }ddlm	} t        ||j                         r:|j"                  s.|j$                  |j$                  j"                  s|j&                  }|j(                  r|j*                  j,                  rddlm}	 |j0                  | _        | j2                  dk(  r	d | _         | S | j2                  d	k(  rP|j4                  rD|j0                  d
k(  r5|j6                  r)|j6                  j8                  r| j:                  sd | _         | S )Nr   r  T)rU   slow)skip_childrenrj  )SymtabMemoryErrorStopIteration__next__)r'  rv   r  r(  wrap_tuple_valuerl  r   
tuple_typer  r  r  r9   r)  r*  r   rL   ro  rU   r  rl  r   r  
is_builtinr.  rm   builtin_exc_nameis_local_scoperQ  r  in_try_block)
r   r   r'  r(  r  r)  r*  excr  r.  s
             r4   rw   z!RaiseStatNode.analyse_expressions  s   ==}}2237H$77<DM>>44S9I$$>>W%7%77y~~?]?]4 ))--y?[?[\_?`>ahl mI ) 7 74 7 PI&99#>DN;;[[..s3F 33C8DK::JJ,,S1E11#6DJ==--C#3	 8 89cmm&?CMMDVDVll{{syy33$(+%((M9$(DM  ++>**sxx:/E((S-=-=-N-N -- %)DMr3   Raising exceptionc                    |j                  | j                         | j                  dk(  r.|j                  d|j	                  | j                        z         y | j                  dk(  rc| j
                  sW|j                  dt        j                  z         |j                  d|j	                  d       z         d|j                  _	        y | j
                  r{| j
                  j                  |       | j
                  j                         }| j
                  j                  r2|j                  j                  | j
                  j                         nd}| j                   r6| j                   j                  |       | j                   j                         }nd}| j"                  r6| j"                  j                  |       | j"                  j                         }nd}| j$                  r6| j$                  j                  |       | j$                  j                         }nd}|j                  j'                  t(               |j                  d|d	|d	|d	|d
	       | j
                  | j                   | j"                  | j$                  fD ]'  }|s|j+                  |       |j-                  |       ) |j                  |j	                  | j                               y )Nr/  zPyErr_NoMemory(); %sr0  z%s = 1;rF  Tr  z__Pyx_Raise(r   ro  )r-  r9   r5  rS   r+  r'  r	   r  r$  r  r?  r  r   r  r  r  r(  r)  r*  r  raise_utility_coder  rL  )r   rX   	type_code
value_codetb_code
cause_coder!  s          r4   r  z%RaiseStatNode.generate_execution_code  s   dhh  M1JJ-0IIJ""o5dmmJJy6#G#GGHJJutt44559DNN2==MM2248//1I}}$$  778K8KLI>>NN33D9113JJ;;KK006kk++-GG::JJ//5--/JJ))*<=

		 MM4>>4;;

K 	%C**40t$	% 	

OODHH%	'r3   c                 F   | j                   | j                   j                  ||       | j                  | j                  j                  ||       | j                  | j                  j                  ||       | j                  | j                  j                  ||       y y r   )r'  r  r(  r)  r*  r6  s      r4   r  z+RaiseStatNode.generate_function_definitions  s    ==$MM77TB>>%NN88dC;;"KK55c4@::!JJ44S$? "r3   c                 >   | j                   r| j                   j                  |       | j                  r| j                  j                  |       | j                  r| j                  j                  |       | j                  r| j                  j                  |       y y r   )r'  r   r(  r)  r*  r   s     r4   r   zRaiseStatNode.annotate  sk    ==MM""4(>>NN##D);;KK  &::JJ% r3   )r,   r-   r.   r   r   r5  r2  r7  rw   r   r   r   r   r  r  r   r2   r3   r4   r&  r&    sF     ?KML(T ..K%K.'`@&r3   r&  c                   <    e Zd Zg ZdZd Zej                  ZdZ	d Z
y)ReraiseStatNodeTc                     | S r   r2   r   s     r4   rw   z#ReraiseStatNode.analyse_expressions.  r  r3   r9  c           	         |j                  | j                         |j                  j                  }|r|j                  j                  t               |j                  |d   t               |j                  |d   t               |j                  |d   t               |j                  dt        |      z         |j                  dj                  |D cg c]  }| d	 c}             n@|j                  j                  t        j                  dd             |j                  d	       |j                         r|j!                  | j                  d
       |j                  |j#                  | j                               y c c}w )Nr   r   r%   &__Pyx_ErrRestoreWithState(%s, %s, %s);rG   z = 0; ReRaiseExceptionExceptions.cz__Pyx_ReraiseException();Treraise)r-  r9   r$  exc_varsr  r  r  rJ  r   r  rS   r  r   r   r  r  put_trace_exceptionr+  )r   rX   re  varnames       r4   r  z'ReraiseStatNode.generate_execution_code4  s%   dhh~~&&--.LMT!Wn5T!Wn5d1g~6JJ?%+MNJJsxx4 HG9F!3 HIJ--''(:NKMJJ23??$$TXXt$<

4??488,- !Is   FN)r,   r-   r.   r   r   rw   r   r   r   r   r  r2   r3   r4   rC  rC  )  s&    KM ..K%K.r3   rC  c                   6    e Zd Zg dZdZd Zd Zd Zd Zd Z	y)AssertStatNode)	conditionr   	exceptionNc                     | j                   J d       | j                  J d       | j                  j                  |       y )Nz0Message should have been replaced in PostParse())r   rQ  r   r   s     r4   r   z#AssertStatNode.analyse_declarationsR  s:    zz!U#UU~~)]+]]++C0r3   c                     | j                   j                  |      | _         | j                  j                  |      | _        | S r   )rP  analyse_temp_boolean_expressionrQ  rw   r   s     r4   rw   z"AssertStatNode.analyse_expressionsW  s3    GGL;;C@r3   c                    |j                   j                  t        j                  dd             |j	                  d       |j	                  d       |j                  | j                         | j                  j                  |       |j	                  d| j                  j                         z         | j                  j                  |       |j	                  d       | j                  j                  |       | j                  j                  |       |j	                  d       |j	                  d       |j	                  d|j                  | j                  d	
      z         |j	                  d       y )NAssertionsEnabledrH  z!#ifndef CYTHON_WITHOUT_ASSERTIONSz+if (unlikely(__pyx_assertions_enabled())) {rk  rn  r  zif ((1)); else %sF)r  r  )r  r  r   r  rS   r-  r9   rP  r?  r   rQ  r  r  rL  r+  r   s     r4   r  z&AssertStatNode.generate_execution_code\  s   ))##$7H	J

67

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

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

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

	

7

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

8r3   c                 t    | j                   j                  ||       | j                  j                  ||       y r   )rP  r  rQ  r6  s      r4   r  z,AssertStatNode.generate_function_definitionsq  s*    44S$?44S$?r3   c                 p    | j                   j                  |       | j                  j                  |       y r   )rP  r   rQ  r   s     r4   r   zAssertStatNode.annotateu  s&    %%r3   )
r,   r-   r.   r   rQ  r   rw   r  r  r   r2   r3   r4   rO  rO  H  s(     6KI1

*@&r3   rO  c                   2    e Zd ZddgZd Zd Zd Zd Zd Zy)	
IfStatNode
if_clauseselse_clausec                     | j                   D ]  }|j                  |        | j                  r| j                  j                  |       y y r   )r[  r   r\  r   r   	if_clauses      r4   r   zIfStatNode.analyse_declarations  sE     	0I**3/	011#6 r3   c                     | j                   D cg c]  }|j                  |       c}| _         | j                  r | j                  j                  |      | _        | S c c}w r   )r[  rw   r\  r^  s      r4   rw   zIfStatNode.analyse_expressions  sP    OS_)988=_#//CCCHD `s   Ac                    |j                  | j                         |j                         }t        | j                        }| j
                  s|dz  }t        | j                        D ]  \  }}|j                  ||||k(          | j
                  rb|j                  | j
                  j                         |j                  d       | j
                  j                  |       |j                  d       |j                  |       y )Nr   )is_last
/*else*/ {rn  )
r-  r9   r  rK   r[  r\  r  r  rS   r  )r   rX   r  lastr  r_  s         r4   r  z"IfStatNode.generate_execution_code  s    dhhNN$	4??#AID%doo6 	RLAy--dIqDy-Q	RMM$**../JJ|$44T:JJsOy!r3   c                     | j                   D ]  }|j                  ||        | j                  | j                  j                  ||       y y r   )r[  r  r\  )r   r   rX   clauses       r4   r  z(IfStatNode.generate_function_definitions  sL    oo 	<F00d;	<'::3E (r3   c                     | j                   D ]  }|j                  |        | j                  r| j                  j                  |       y y r   )r[  r   r\  )r   rX   r_  s      r4   r   zIfStatNode.annotate  sE     	%It$	%%%d+ r3   Nr  r2   r3   r4   rZ  rZ  z  s(      /K7"F,r3   rZ  c                   6    e Zd ZddgZdZd Zd Zd Zd Zd Z	y)	IfClauseNoderP  r   Nc                 :    | j                   j                  |       y r   )r   r   r   s     r4   r   z!IfClauseNode.analyse_declarations  s    		&&s+r3   c                     | j                   j                  |      | _         | j                  j                  |      | _        | S r   )rP  rT  r   rw   r   s     r4   rw   z IfClauseNode.analyse_expressions  s3    GGLII11#6	r3   c                 X   | j                   j                  |       |j                  | j                         | j                   j	                         }| j
                  r| j
                  d|d}|j                  d|z         | j                   j                  |       | j                   j                  |       | j                  j                  |       |j                  | j                  d       |s'| j                  j                  s|j                  |       |j                  d       y )Nri  rh  r  Frs  rn  )rP  r?  r-  r9   r   branch_hintrS   r  rL  r   r  r   r  )r   rX   r  rb  rP  s        r4   r  z$IfClauseNode.generate_execution_code  s    //5dhhNN))+	$($4$4i@I

;*+--d3!!$'		))$/dhhe,49922MM)$

3r3   c                 t    | j                   j                  ||       | j                  j                  ||       y r   )rP  r  r   r6  s      r4   r  z*IfClauseNode.generate_function_definitions  s*    44S$?		//T:r3   c                 p    | j                   j                  |       | j                  j                  |       y r   )rP  r   r   r   s     r4   r   zIfClauseNode.annotate  s&    %		4 r3   )
r,   r-   r.   r   rm  r   rw   r  r  r   r2   r3   r4   ri  ri    s,     'KK,
;!r3   ri  c                   ,    e Zd ZddgZd Zd Zd Zd Zy)SwitchCaseNode
conditionsr   c                 H    | j                   D ]  }|j                  |        y r   )rr  r?  r   rX   r
  s      r4   "generate_condition_evaluation_codez1SwitchCaseNode.generate_condition_evaluation_code  s#    OO 	0D))$/	0r3   c                    t        | j                        }|j                  j                  d   }t	        | j                  d      D ]\  \  }}|j                  d|j                         z         |j                  |j                         |sF||k  sL|j                  d       ^ | j                  j                  |       |j                  | j                  d       |j                  d       y )Nrc  r   zcase %s:r  Frs  r  )rK   rr  r  r   r  rS   r   r-  r9   r   r  )r   rX   num_conditionsline_tracing_enabledr  r
  s         r4   r  z&SwitchCaseNode.generate_execution_code  s    T__-#//::;G !4 	2GAtJJzDKKM12MM$((##N(:

01	2 			))$/dhhe,

8r3   c                     | j                   D ]  }|j                  ||        | j                  j                  ||       y r   )rr  r  r   )r   r   rX   r
  s       r4   r  z,SwitchCaseNode.generate_function_definitions  s9    OO 	:D..sD9	:		//T:r3   c                 ~    | j                   D ]  }|j                  |        | j                  j                  |       y r   )rr  r   r   rt  s      r4   r   zSwitchCaseNode.annotate  s3    OO 	 DMM$	 		4 r3   N)r,   r-   r.   r   ru  r  r  r   r2   r3   r4   rq  rq    s"      (K0;
!r3   rq  c                   &    e Zd Zg dZd Zd Zd Zy)SwitchStatNode)testcasesr\  c                    | j                   j                  |       | j                  D ]  }|j                  |        |j	                  | j
                         |j                  d| j                   j                         z         | j                  D ]  }|j                  |        | j                  >|j                  d       | j                  j                  |       |j                  d       n|j                  d       |j                  d       | j                   j                  |       | j                   j                  |       y )Nr  r  r  zdefault: break;rn  )r}  r?  r~  ru  r-  r9   rS   r   r  r\  r  rL  r   rX   cases      r4   r  z&SwitchStatNode.generate_execution_code   s    		**40 JJ 	:D33D9	:dhh

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

3		((.		T"r3   c                     | j                   j                  ||       | j                  D ]  }|j                  ||        | j                  | j                  j                  ||       y y r   )r}  r  r~  r\  )r   r   rX   r  s       r4   r  z,SwitchStatNode.generate_function_definitions  s`    		//T:JJ 	:D..sD9	:'::3E (r3   c                     | j                   j                  |       | j                  D ]  }|j                  |        | j                  | j                  j                  |       y y r   )r}  r   r~  r\  r  s      r4   r   zSwitchStatNode.annotate  sX    		4 JJ 	 DMM$	 '%%d+ (r3   N)r,   r-   r.   r   r  r  r   r2   r3   r4   r|  r|    s     3K#.F,r3   r|  c                       e Zd Zy)LoopNodeNrZ  r2   r3   r4   r  r  &  r[  r3   r  c                   2    e Zd Zg dZd Zd Zd Zd Zd Zy)WhileStatNode)rP  r   r\  c                     | j                   j                  |       | j                  r| j                  j                  |       y y r   )r   r   r\  r   s     r4   r   z"WhileStatNode.analyse_declarations3  s6    		&&s+11#6 r3   c                     | j                   r | j                   j                  |      | _         | j                  j                  |      | _        | j                  r | j                  j                  |      | _        | S r   )rP  rT  r   rw   r\  r   s     r4   rw   z!WhileStatNode.analyse_expressions8  s\    >>!^^KKCPDNII11#6	#//CCCHDr3   c                 T   |j                  | j                         |j                         }|j                  d       | j                  r}| j                  j                  |       | j                  j                  |       |j                  d| j                  j                         z         | j                  j                  |       | j                  j                  |       |j                  |j                         |j                  d       |j                  }|j                  |       | j                  rb|j                  | j                  j                         |j                  d       | j                  j                  |       |j                  d       |j                  |       y )Nzwhile (1) {zif (!%s) break;rn  rc  )r-  r9   new_loop_labelsrS   rP  r?  r  r   rL  r   r  r  r  r  set_loop_labelsr\  )r   rX   old_loop_labelsr  s       r4   r  z%WhileStatNode.generate_execution_code@  s-   dhh..0

	>>NN33D9NN11$7JJ!DNN$9$9$;;=NN%%d+		))$/t**+

3&&_-MM$**../JJ|$44T:JJsO{#r3   c                     | j                   r| j                   j                  ||       | j                  j                  ||       | j                  | j                  j                  ||       y y r   )rP  r  r   r\  r6  s      r4   r  z+WhileStatNode.generate_function_definitionsW  sX    >>NN88dC		//T:'::3E (r3   c                     | j                   r| j                   j                  |       | j                  j                  |       | j                  r| j                  j                  |       y y r   )rP  r   r   r\  r   s     r4   r   zWhileStatNode.annotate^  sO    >>NN##D)		4 %%d+ r3   Nr  r2   r3   r4   r  r  *  s#     7K7
$.F,r3   r  c                   D    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y)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                 t    t         j                  | |j                  |||||||dt        j                         y )NT)	r  r  r  r  r  r  r  is_temprl  r   r   r9   r
   c_bint_type)r   r  r  r  r  r  r  r  s           r4   r   zDictIterationNextNode.__init__r  s=    (,,''!%%%'' 	 
	)r3   c                    ddl m} | j                  j                  |      | _        | j                  j                  |      | _        | j
                  r | j
                  j                  |      | _        | j                  r| j                  j                  |      | _        |j                  | j                  j                  t        j                        | _        | j                  j                  | j                  j                  |      | _        | j                   r| j                   j                  |      | _        |j                  | j                   j                  t        j                        | _        | j"                  j                  | j                   j                  |      | _        | j&                  r| j&                  j                  |      | _        |j                  | j&                  j                  t        j                        | _        | j(                  j                  | j&                  j                  |      | _        | j,                  j                  |      | _        | S Nr   rj  r_  )r   r  r  rv   r  r  r  rx   TempNoder9   r
   r   key_refr  rl  r  r  	value_refr  r  	tuple_refr  r  r   r   r  s      r4   rw   z)DictIterationNextNode.analyse_expressions  s   33C8!//==cB!%!3!3!A!A#!FD??"ooBB3GDO$--doo.A.A:C\C\]DL#'<<#9#9$//:N:NPS#TD  $ 1 1 F Fs KD&//0A0A0E0EJLeLe/fDN%)^^%=%=d>O>O>T>TVY%ZD" $ 1 1 F Fs KD&//0A0A0E0EzG`G`aDN%)^^%=%=d>O>O>T>TVY%ZD" --;;C@r3   c                 <    | j                   j                  ||       y r   )r  r  r6  s      r4   r  z3DictIterationNextNode.generate_function_definitions  s    33C>r3   c                    |j                   j                  t        j                  dd             | j                  j                  |       g }g }| j                  | j                  | j                  f| j                  | j                  | j                  f| j                  | j                  | j                  ffD ]T  \  }}}|d}n8|j                  |||f       |j!                  |       d|j#                         z  }|j                  |       V |j$                  j'                  t(        j*                  d      }|j-                  |d| j                  j/                         d| j0                  j#                         d| j2                  j#                         d|d	   d|d
   d|d   d| j4                  j#                         d       |j-                  d|z         |j-                  |j7                  d|z  | j8                               |j$                  j;                  |       |D ]  \  }}}|j=                  |        |D ]  \  }}}|j                  |        |D ])  \  }}}|j?                  ||       |jA                  |       + y )N	dict_iter
Optimize.cr  &%sFz = __Pyx_dict_iter_next(r   r  r   r   r%   ro  if (unlikely(%s == 0)) break;%s == -1)!r  r  r   r  r  r?  r  r  r  r  r  r  r  r  r  r  allocater   r$  r%  r
   r	  rS   r  r  r  r  r  r9   r-  generate_gotrefrP  release)	r   rX   r  temp_addressesr@  r   rO  addrresult_temps	            r4   r  z-DictIterationNextNode.generate_execution_code  sC   ))+*A*A+|*\]..t4%)\\43G3G$Y%)^^T5K5KTM^M^$_%)^^T5K5KTM^M^$_$a 		(C ~""C#89T"szz|+!!$'		( nn22:3H3H%P

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

2[@A

4%%j;&>IJ##K0 $/ 	&C%	&#. 	2C++D1	2#. 	C++FD9KK	r3   )r,   r-   r.   r   r  r  r  r  r  r  r   rw   r  r  r2   r3   r4   r  r  f  s@    QK !%$Og$((	$((	)*?'r3   r  c                   4    e Zd Zg dZdxZZd Zd Zd Zd Z	y)SetIterationNextNode)set_objr  r  r  r  is_set_flagNc                 p    t         j                  | |j                  |||||dt        j                  	       y )NT)r  r  r  r  r  r  rl  r  )r   r  r  r  r  r  s         r4   r   zSetIterationNextNode.__init__  s7    '++''%#'' 	 	)r3   c                 0   ddl m} | j                  j                  |      | _        | j                  j                  |      | _        | j
                  j                  |      | _        | j                  j                  |      | _        |j                  | j                  j                  t        j                        | _        | j                  j                  | j                  j                  |      | _        | j                   j                  |      | _        | S r  )r   r  r  rv   r  r  r  rx   r  r9   r
   r   r  r  rl  r  r  r  s      r4   rw   z(SetIterationNextNode.analyse_expressions  s    ||11#6!//==cB!//==cB --BB3G"++D,=,=,A,A
HaHa+b!%!9!9$:K:K:P:PRU!V++99#>r3   c                 <    | j                   j                  ||       y r   )r  r  r6  s      r4   r  z2SetIterationNextNode.generate_function_definitions  s    223=r3   c                    |j                   j                  t        j                  dd             | j                  j                  |       | j                  }|j                  |       |j                  j                  t        j                  d      }|j                  |d| j                  j                         d| j                  j                         d| j                   j                         d|j                         d| j"                  j                         d       |j                  d|z         |j                  |j%                  d	|z  | j&                               |j                  j)                  |       |j+                  |       | j,                  j                  |       | j.                  j1                  | j,                  |       |j3                  |       y )
Nset_iterr  Fz = __Pyx_set_iter_next(r   r  ro  r  r  )r  r  r   r  r  r?  r  r  r$  r%  r
   r	  rS   r  r  r   r  r  r  r9   r-  r  r  r  rP  r  )r   rX   r  r  s       r4   r  z,SetIterationNextNode.generate_execution_code  sd   ))+*A*A*l*[\--d3NN	4 nn22:3H3H%P

LL""$%%'%%'##%
 	 	

2[@A

4%%j;&>IJ##K0 	!!$'77=2243I3I4P$r3   )
r,   r-   r.   r   r  r  r   rw   r  r  r2   r3   r4   r  r    s+    GK %)(		)	> r3   r  c                 p    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)r9   r   s     r4   ForStatNoder    sG    Rj>""#C.2.. +++s)b))r3   c                   @    e Zd Zg dZdZdZd Zd Zd Zd Z	d Z
d	 Zy)
_ForInStatNode)rO  r   r  r   r\  NFc                     t        d      )Nz!must be implemented by subclasses)NotImplementedErrorr   s    r4   _create_item_nodez _ForInStatNode._create_item_node  s    !"EFFr3   c                     | j                   j                  |       | j                  j                  |       | j                  r| j                  j                  |       | j                          y r   )rO  r  r   r   r\  r  r   s     r4   r   z#_ForInStatNode.analyse_declarations  sO    ..s3		&&s+11#6 r3   c                    | j                   j                  |      | _         | j                  j                  |      | _        | j	                          | j
                  j                  |      | _        | j                  sz| j                  j                  j                  s | j                  j                  j                  r:| j                   j                  j                  | j                  j                        rn5| j
                  j                  | j                   j                  |      | _        | j                  j                  |      | _        | j                  r | j                  j                  |      | _        | S r   )rO  rx   r  rw   r  r   r  rl  rd  re  r  r  r   r\  r   s     r4   rw   z"_ForInStatNode.analyse_expressions   s    kk66s;99#> II11#6	##**dmm.@.@.I.I  001C1CD		++DKK,<,<cBDIII11#6	#//CCCHDr3   c                 "   |j                  | j                         |j                         }| j                  j	                  |       |j                  d       | j                  j                  |       |j                  d       | j                  j	                  |       | j                  j                  | j                  |       |j                  | j                         | j                  j                  |       |j                  | j                         |j                  |j                         |j                  d       | j                  j!                  |       | j"                  r|j%                  d      nd }|j%                  d      }|j'                  |j(                  g|g|xs || j                        }|j                  | j                         |D ]  }| j                  j!                  |        |j+                  |       | j                  j-                  |       | j"                  rN|j                  d       |j                  |       | j"                  j                  |       |j                  d       |j                  |       y )Nr  r  rn  for_elsefor_end)skip_to_labelr9   rc  )r-  r9   r  r  r?  r  generate_for_loop_headerrS   r   rO  rP  write_trace_liner   r  r  r  r  r\  r  label_interceptorr  r  rL  )r   rX   r  
else_labelr  label_interceptsr  s          r4   r  z&_ForInStatNode.generate_execution_code1  s   dhh..0..t4..t4

5		**40,,TYY=dhh'		))$/dhht**+

3 	,,T2373C3CT^^J/
NN9-	11K$1		 2 
 	dhh! 	7AMM006	7 	_-  &JJ|$NN:&44T:JJsOy!r3   c                     | j                   j                  ||       | j                  j                  ||       | j                  j                  ||       | j                  | j                  j                  ||       y y r   )rO  r  r  r   r\  r6  s      r4   r  z,_ForInStatNode.generate_function_definitions[  se    11#t<33C>		//T:'::3E (r3   c                 *   | j                   j                  |       | j                  j                  |       | j                  j                  |       | j                  r| j                  j                  |       | j
                  j                  |       y r   )rO  r   r  r   r\  r   r   s     r4   r   z_ForInStatNode.annotateb  sg    T"t$		4 %%d+		4 r3   )r,   r-   r.   r   r   r  r  r   rw   r  r  r   r2   r3   r4   r  r    s5     HKDHG!"("TF!r3   r  c                       e Zd ZdZd Zy)r  Fc                 >    ddl m}  || j                        | _        y )Nr   )NextNode)r  r  r  r   )r   r  s     r4   r  zForInStatNode._create_item_nodep  s    'T]]+	r3   N)r,   r-   r.   r  r  r2   r3   r4   r  r  k  s     H,r3   r  c                       e Zd ZdZd Zd Zy)r  Tc                     d|vsJ ddl m} |j                  |d   j                  d       |d<   t	        j
                  | |fi | y )Nr   r   rj  r  )r  )r   r  AwaitIterNextExprNoder9   r  r   )r   r9   r   r  s       r4   r   zAsyncForStatNode.__init__}  sH    R44R
^5G5GT4R6
c0R0r3   c                 d    ddl m} |j                  | j                        | j                  _        y r  )r   r  AsyncNextNoder  r   r  r}  s     r4   r  z"AsyncForStatNode._create_item_node  s    !//>		r3   N)r,   r-   r.   r  r   r  r2   r3   r4   r  r  u  s     H1?r3   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 Zd	 Zd
ddddZd Zd Zy)r  )rO  bound1bound2stepr   r\  FNz&For-loop using object bounds or targetc                     | j                   | j                  | j                  fD ])  }|j                  j                  s| j                          + y r   )rO  r  r  rl  r~  r   )r   r   r   s      r4   r   zForFromStatNode.nogil_check  s;    ++t{{DKK8 	!Avv!! 	!r3   c                     | j                   j                  |       | j                  j                  |       | j                  r| j                  j                  |       y y r   )rO  r  r   r   r\  r   s     r4   r   z$ForFromStatNode.analyse_declarations  sH    ..s3		&&s+11#6 r3   c                    ddl m} | j                  j                  |      | _        | j                  j                  |      | _        | j                  j                  |      | _        | j                  at        | j                  |j                        r!t        | j                  j                  dd       | j                  j                  |      | _        | j                  |       | j                  j                  }|j                  s,|j                  s t!        | j                  j                  d       | j"                  j%                  |      | _        | j&                  r | j&                  j%                  |      | _        | S )Nr   rj  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  rO  rx   r  rv   r  r  rL   UnaryMinusNoder   r9   set_up_looprl  r~  rq  r   r   rw   r\  )r   r   r  r=  s       r4   rw   z#ForFromStatNode.analyse_expressions  s   kk66s;kk//4kk//499 $))Y%=%=>		 (NOPR		//4DIkk&&'';+A+A$++//#cdII11#6	#//CCCHDr3   c                    ddl m} | j                  j                  }|j                  r|}nB|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                  J| j                  j                  j                  s*t        j                  || j                  j                        }| j                  j!                  ||      | _        | j                  j!                  ||      | _        | j                  j"                  s | j                  j%                  |      | _        | j                  W| j                  j!                  ||      | _        | j                  j"                  s | j                  j%                  |      | _        |j                  s|j
                  rVd| _        t)        | j                  |j*                        rt-        | j                  d      | j                  | _        d | _        y d| _        |j3                  | j                  ||      }|| _        |j5                  |      j7                  |      | _        y )Nr   rj  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  rO  rl  rq  is_enumr   r9   r~  r
   c_long_typer	  r  widest_numeric_typer  r  r  r   rw  is_py_targetrL   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    kk&&!!#I""qs2=2I2I
..zOdOdI;;##//&::9dkkFVFVW	;;##//&::9dkkFVFVW	yy$TYY^^-G-G&::9diinnU	kk++Is;kk++Is;{{%%++44S9DK99 		++Is;DI99'' II44S9	!![%8%8 %D$++y'@'@ADHH&mnn $D#'D  $D&//)SIN .D#,#6#6~#F#Y#YZ]#^D r3   c                 r   |j                  | j                         |j                         }| j                  }| j                  j                  |       | j                  j                  |       | j                  | j                     \  }}| j                  @| j                  j                  |       | j                  j                         }|d   d|}nd}ddlm} t        | j                  |j                        r| j                  j!                  |       t        | j"                  |j                        r| j"                  j!                  |       | j$                  j&                  j(                  rt*        j,                  n| j$                  j&                  }|r)| j.                  s|j0                  j3                  |d      }	n| j                  j                         }	|j4                  r|j6                  s{| j8                  d   dk(  ri|j;                  d|	d	| j                  j                         |d
|d|	d| j8                  d| j                  j                         d
|d|	|d       nb|j;                  d|	d	| j                  j                         |d|	d| j8                  d| j                  j                         d|	|d       | j"                  }
|
)|r'|j=                  | j$                  j                  ||	      }
|
-|
j                  |       | j$                  j?                  |
|       |jA                  | j                         | jB                  jE                  |       |jG                  |jH                         |s| j"                  rx| j$                  jJ                  jL                  r|jO                  | j$                  j                  d       }|j!                  |       |jQ                  | j$                  jJ                  jR                        }| j$                  jJ                  jT                  jV                  r2|jX                  j[                  t]        j^                  dd             d}nh|jX                  j[                  t]        j^                  dd             dja                  | j$                  jJ                  jT                  jb                        }|j;                  ||j                         ||je                  |j                         | j$                  j                        fz         |jg                  |       n| j$                  }|ji                  | j                  j&                  || j$                  jJ                  jT                        }|	|_5        |jm                  |       | j$                  jJ                  jL                  r;|jo                  |j                         |j&                         |jq                  |       |j;                  d       |sM| j"                  rA| j"                  j                  |       | j$                  j?                  | j"                  |       |r'| j.                  s|j0                  js                  |	       |jt                  }|jw                  |       | jx                  r=|j;                  d       | jx                  jE                  |       |j;                  d       |jG                  |       | j                  j{                  |       | j                  j}                  |       | j                  j{                  |       | j                  j}                  |       t        | j                  |j                        r| j                  jq                  |       t        | j"                  |j                        r| j"                  jq                  |       | j                  7| j                  j{                  |       | j                  j}                  |       y y )Nr   rl  1r   rj  F>r  rF  z + r  rG   z; ) { rG  r  GetModuleGlobalNamerM  z%__Pyx_GetModuleGlobalName(%s, %s); %sGetNameInClassz$__Pyx_GetNameInClass(%s, {}, %s); %srn  rc  )?r-  r9   r  
from_ranger  r?  r  relation_table	relation1r  r   r   r  rL   r  r  r  r  rO  rl  r  r
   r  r  r$  r%  r  rg  	relation2rS   rE  rP  r  r   r  r  r  r  is_pyglobal
PyTempNoder  rm   r  r  r  r  r   r  r:  r  r'  r  CoerceFromPyTypeNode	temp_coder  r  r  r-  r  r  r\  r  rL  )r   rX   r  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_code  s   dhh..0__
,,T2,,T2++DNN;99 II..t499##%D$Qx.EDd''););<&&t,d**I,>,>?  ))$/151A1A1I1Iz--t{{O_O_d//>>77eLL,,335L|':':t~~a?PTW?W JJ""$fddnndkk.@.@.BDe	% & JJ""$fdnndkk.@.@.Be	% &  $33'J#,#=#=dkkoo|]i#j + 99$?KK001EtLdhh'		))$/t**+d22 {{  ,,'224;;??DI$$T*!%!7!78I8I8N8N!O;;$$**::$$55#//0EGYZ\"IK$$55#//0@BTUW"H"O"O))//??#AK

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

3d22   99$?KK001E1EtLd//NN''5&&_-JJ|$44T:JJsO{#**40t$**40t$d''););<%%d+d**I,>,>?  ((.99 II,,T2II  & !r3   )r   ++)z+1r	  )r   --)z-1r	  )z<=r  z>=r  c                    | j                   j                  ||       | j                  j                  ||       | j                  j                  ||       | j                  | j                  j                  ||       | j
                  j                  ||       | j                  | j                  j                  ||       y y r   )rO  r  r  r  r  r   r\  r6  s      r4   r  z-ForFromStatNode.generate_function_definitionsd  s    11#t<11#t<11#t<99 II33C>		//T:'::3E (r3   c                 z   | j                   j                  |       | j                  j                  |       | j                  j                  |       | j                  r| j                  j                  |       | j
                  j                  |       | j                  r| j                  j                  |       y y r   )rO  r   r  r  r  r   r\  r   s     r4   r   zForFromStatNode.annotaten  s    T"T"T"99IIt$		4 %%d+ r3   )r,   r-   r.   r   r  r  r  r  r   r   r   rw   r  r  r  r  r   r2   r3   r4   r  r    s`    $ PKLLOJ:K!
7*$_Lp'h NF,r3   r  c                   8    e Zd ZdZg dZdZdZd Zd Zd Z	d Z
y)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_callrO  r   Nc                     | j                   j                  |       | j                  j                  |       | j                  j                  |       y r   )r	  r   r	  r   r   s     r4   r   z!WithStatNode.analyse_declarations  s8    ))#.,,S1		&&s+r3   c                    | j                   j                  |      | _         | j                   j                  j                  r$t        j                  |       j                  |      S | j                  j                  |      | _        | j                  r<ddl	m
}  || j                  j                  | j                  j                        | _        | j                  j                  |      | _        | S )Nr   )r  )r	  rv   rl  is_cython_lock_typeCythonLockStatNodefrom_withstatrw   r	  rO  r  r  r9   target_tempr   )r   r   r  s      r4   rw   z WithStatNode.analyse_expressions  s    ||11#6<<00%33D9MMcRR//77<;;+'(;(;T__=Q=QRDII11#6	r3   c                     | j                   j                  ||       | j                  j                  ||       | j                  j                  ||       y r   )r	  r  r	  r   r6  s      r4   r  z*WithStatNode.generate_function_definitions  s>    223=55c4@		//T:r3   c                    |j                  | j                         |j                  d       | j                  j	                  |       |j
                  j                  t        d      | _        |j                  j                  t        j                  dd             |j                  | j                  d| j                  j                         d|j                  t        | j                   rdnd	            d
|j#                  | j                  | j                               |j%                  | j                  t               |j'                         }|j(                  }| j*                  j	                  |       | j,                  r| j.                  j1                  |       | j*                  j3                  |       |j                  | j.                  j5                         d| j*                  j5                         d       | j*                  j7                  |       n| j*                  j9                  |       | j*                  j;                  |       | j                  j9                  |       | j                  j;                  |       ||_        | j<                  j?                  |       |jA                  |      rt|jC                         }|jE                  |       |jG                  |       |jI                  | j                  t               |jE                  |       |jG                  |       |j
                  jK                  | j                         |j                  d       y )Nz/*with:*/ {Fr   PyObjectLookupSpecialrM  z  = __Pyx_PyObject_LookupSpecial(r   	__aexit____exit__r"  rF  rG  rn  )&r-  r9   rS   r	  r?  r$  r%  r   exit_varr  r  r   r  r  r  r   r  r'  r(  rv  r  r	  rO  r	  r  rH  r   rK  r  rL  r   r  r  r  r  r  r,  r-  )r   rX   r  intermediate_error_labelstep_over_labels        r4   r  z$WithStatNode.generate_execution_code  s`   dhh

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

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

3r3   )r,   r-   r.   r   r   r	  r	  r   rw   r  r  r2   r3   r4   r	  r	  y  s,    8 >KJK,

;
.r3   r	  c                   4    e Zd ZddgZdZdZd Zd Zd Zd Z	y)WithTargetAssignmentStatNoderL  r  Nc                 :    | j                   j                  |       y r   r  r   s     r4   r   z1WithTargetAssignmentStatNode.analyse_declarations  r  r3   c                     | j                   j                  |      | _         | j                   j                  |       | j                  j                  j                  | j                   j                  |      | _        | S r   )r  rx   ro  	with_noder	  r  rl  rL  r   s     r4   rw   z0WithTargetAssignmentStatNode.analyse_expressions  sU    88005%%c*>>--77sKr3   c                     | j                   j                  |       | j                  j                  | j                   |       | j                  j
                  j                  |       y r   )rL  r?  r  rP  r!	  r	  r  r   s     r4   r  z4WithTargetAssignmentStatNode.generate_execution_code  sD    ))$/))$((D9""**40r3   c                 p    | j                   j                  |       | j                  j                  |       y r   r  r   s     r4   r   z%WithTargetAssignmentStatNode.annotate  r  r3   )
r,   r-   r.   r   r!	  rL  r   rw   r  r   r2   r3   r4   r	  r	    s+     %.KI
C11
 r3   r	  c                   R    e Zd Zg dZdZd Zd Zej                  Z	dZ
d Zd Zd Zy	)
TryExceptStatNode)r   except_clausesr\  Fc                     | j                   j                  |       | j                  D ]  }|j                  |        | j                  r| j                  j                  |       y y r   )r   r   r&	  r\  )r   r   except_clauses      r4   r   z&TryExceptStatNode.analyse_declarations   sY    		&&s+!00 	4M..s3	411#6 r3   c                 x   | j                   j                  |      | _         d}t        | j                        D ]L  \  }}|j                  |      x}| j                  |<   |rt	        |j
                  d       |j                  rKd}N || _        | j                  r | j                  j                  |      | _        | S )Nr   zdefault 'except:' must be lastr   )	r   rw   r  r&	  r   r9   patternhas_default_clauser\  )r   r   default_clause_seenr  r(	  s        r4   rw   z%TryExceptStatNode.analyse_expressions   s    II11#6	 )$*=*= > 	(A}5B5V5VWZ5[[MD//2"m'')IJ ((&'#	( #6#//CCCHDr3   zTry-except statementc           
      
   j                  | j                         j                  d       j                  }j                  }j
                  }j                         }j                  }j                  d      }j                  d      }j                  d      }	j                  d      }
|rj                  d      nd }|rj                  d      nd }j                  d      }t        d	      D cg c]"  }j                  j                  t        d
      $ c}j                         }j                  d       |
_        |_        |_        | j                  j                         j                  | j                  d
       j                  d       j                  j!                         }j#                  |      }|rj$                  j'                  t(               | j*                  s"|j                  d       |j                  d       |j                  ddj-                  D cg c]  }d|z  	 c}      z         D ]  }|j/                  |t                fd}n8D cg c]  }d|z  	 }}|j                  ddj-                  |      z         d }|_        |	_        | j                  j0                  }| j2                  rzj                  | j2                  j                         j                  d       | j2                  j                         j                  d       |s| j2                  j0                  }|r|s.D ]  }j5                  |t                j7                  |       j9                  |       |D ]  \  }}j5                  ||        j;                         rj=                          j                  j>                  }| j                  _        | j@                  D ]  }|jC                  |        |j                  _        | jD                  sj7                  |       jG                  ||||
|	g|||||g|sj#                  |      s|nd | j                  d
      }|D ]  }|s |         j#                  |      r>|s"j#                  |      sj7                  |       j9                  |       |r |        j#                  |      rj9                  |       j                  d       D ]  }j                  jI                  |        |_        |_        |_        |_        y c c}w c c}w c c}w )Nr  exception_handledexcept_errorexcept_return
try_return	try_breaktry_continuetry_endr   F
/*try:*/ {rs  rn  r  r  z__Pyx_ExceptionSave(%s);r   r  c                      D ]  } j                  | t                j                  ddj                        z         y )Nz__Pyx_ExceptionReset(%s);r   )r  r   rS   r   )rm   rX   exc_save_varss    r4   restore_saved_exceptionzJTryExceptStatNode.generate_execution_code.<locals>.restore_saved_exceptionP   sB    ) <D%%dN;<

699]34 5r3   z	(void)%s;z%s /* mark used */rG   c                       y r   r2   r2   r3   r4   r8	  zJTryExceptStatNode.generate_execution_code.<locals>.restore_saved_exception[   s    r3   z/*else:*/ {)r  r9   rt  )%r-  r9   rS   r  r  r  rv  r  r  r  r$  r%  r   rO   r   r  all_free_managed_tempsr  r  r  reset_exception_utility_coder$  r   put_xgotrefr   r\  r5  r  r  r  r  current_exceptr&	  generate_handling_coder+	  r  r-  )r   rX   old_return_labelold_break_labelold_continue_labelr  r  except_end_labelexcept_error_labelexcept_return_labeltry_return_labeltry_break_labeltry_continue_labeltry_end_labelr  save_exctemps_to_clean_up	can_raiser@  r8	  mark_vars_usednormal_case_terminates	temp_name	temp_typeouter_exceptr(	  r  r  r7	  s    `                          @r4   r  z)TryExceptStatNode.generate_execution_code%   s   dhh

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

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

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

3" 	/ENN''.	/ -*0*O,, A Js   ;'U 9U%:U*c                     | j                   j                  ||       | j                  D ]  }|j                  ||        | j                  | j                  j                  ||       y y r   )r   r  r&	  r\  )r   r   rX   r(	  s       r4   r  z/TryExceptStatNode.generate_function_definitions   sd    		//T:!00 	CM77TB	C'::3E (r3   c                     | j                   j                  |       | j                  D ]  }|j                  |        | j                  r| j                  j                  |       y y r   )r   r   r&	  r\  )r   rX   except_nodes      r4   r   zTryExceptStatNode.annotate   sY    		4 .. 	'K  &	'%%d+ r3   N)r,   r-   r.   r   r$  r   rw   r   r   r   r   r  r  r   r2   r3   r4   r%	  r%	     s:     <KL7 ..K(Kx+tF,r3   r%	  c                   J    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y)ExceptClauseNode)r*	  rO  r   r(  NFc                     | j                   rH| j                   j                  |       ddlm}  || j                  | j                  |            | _        | j                  j                  |       y )Nr   )ExcValueNode)	rO  r  r  rW	  r9   infer_exception_typer(  r   r   )r   r   rW	  s      r4   r   z%ExceptClauseNode.analyse_declarations   sM    ;;KK2237/)$((D4M4Mc4RSDN		&&s+r3   c                    |j                   | _        | j                  rLt        | j                        D ]4  \  }}|j	                  |      }|j                  |      | j                  |<   6 | j                  r+| j                  j                  || j                        | _        | j                  j	                  |      | _	        | S r   )
r  r  r*	  r  rw   r  rO  r  r(  r   )r   r   r  r*	  s       r4   rw   z$ExceptClauseNode.analyse_expressions   s     //<<'5 B
7!55c:")"<"<S"AQB ;;++??T^^TDKII11#6	r3   c                 <   | j                   r~t        | j                         dk(  rf| j                   d   }|j                  rK|j                  |j                        }|r.|j
                  r"|j                  j                  r|j                  S t        j                  d   S )Nr   r   BaseException)r*	  rK   r   rj  rm   rk  r  is_builtin_scoperl  r   r  )r   r   r*	  r  s       r4   rX	  z%ExceptClauseNode.infer_exception_type   so    <<C-2ll1oG

7<<0U]]u{{/K/K ::%$$_55r3   c                 B    ddl m}  |       } || j                         S )Nr   )HasNoExceptionHandlingVisitor)ParseTreeTransformsr^	  r   )r   r^	  tree_has_no_exceptionss      r4   body_may_need_exceptionz(ExceptClauseNode.body_may_need_exception   s     F!>!@)$))444r3   c           	      F   |j                  | j                         | j                  r<t        d | j                  D               }|rt	        d      D cg c]#  }|j
                  j                  t        d      % }}|j                  j                  t        j                  dd             |j                  dt        |      z         |d   nd x}| j                  D ]  }|j                  |        | j                  D cg c]  }|j                          }}g }rz|j                  j                  t        j                  d	d
             t!        |      dk(  r"|j#                  dd|d   d|d   d       n|j%                  fd|D               nt!        |      dk(  rN|j                  j                  t        j                  d	d
             |j#                  d|d   d|d   d       nG|j                  j                  t        j                  dd             |j%                  d |D               |j
                  j                  t&        j(                  d      }	|j                  |	ddj+                  |      d       | j                  D ]$  }|j-                  |       |j/                  |       & |rp|j                  dt        |      z         |j                  dj+                  |D 
cg c]  }
d|
z  	 c}
             |D ]  }|j
                  j1                  |        |j                  d|	z         |j
                  j1                  |	       n|j                  d       |j3                         }| j4                  d uxs  | j6                  d uxs | j9                         }|s|r|j;                  | j<                         |r|j?                  | j                         |r|j                  j                  t@               t	        d      D cg c]#  }|j
                  j                  t        d      % }}dt        |      z  }|j                  d|d|jC                  | j                               |D ]  }
|jE                  |
t                n@|j                  j                  t        j                  dd             |j                  d        |r|j                  d!       | j4                  r_| jF                  jI                  d          | jF                  j                  |       | j4                  jK                  | jF                  |       | j6                  9tM        | j6                  jN                        D ]  \  }}|jI                  |        |jQ                  d"      }|r'|j
                  jR                  }|j
                  _)        | jT                  jW                  |       |r|j
                  _)        | jT                  jX                  s0|rD ]  }
|j[                  |
t                |j]                  |       |r|j_                  |ja                         |      D ]M  }|jc                  d   t               |jc                  |d   t               |j[                  |d   t               O D ]  }|j
                  j1                  |        |je                  |       |j                  d#       y c c}w c c}w c c}
w c c}w )$Nc              3   ~   K   | ]5  }|j                   xs# |j                         xr |j                           7 y wr   )r   	is_simplerD  r>  r*	  s     r4   r?  z:ExceptClauseNode.generate_handling_code.<locals>.<genexpr>   s@      '- ""Zg&7&7&9&Z'BXBXBZ>ZZ'-s   ;=r   Tr   PyErrFetchRestorerH  z__Pyx_ErrFetch(&%s, &%s, &%s);r   FastTypeChecksModuleSetupCode.cr%   z#__Pyx_PyErr_GivenExceptionMatches2(r   r   rh  c              3   0   K   | ]  }d d|d  yw)z"__Pyx_PyErr_GivenExceptionMatches(r   rh  Nr2   )r>  r*	  r'  s     r4   r?  z:ExceptClauseNode.generate_handling_code.<locals>.<genexpr>!  s!      %# HPQXY%s   z__Pyx_PyErr_ExceptionMatches2(PyErrExceptionMatchesc              3   &   K   | ]	  }d |z    yw)z __Pyx_PyErr_ExceptionMatches(%s)Nr2   re	  s     r4   r?  z:ExceptClauseNode.generate_handling_code.<locals>.<genexpr>!  s      ! 7@!r  FrF  z || rG  __Pyx_ErrRestore(%s, %s, %s);rG   %s = 0;r  z/*except:*/ {z&%s, &%s, &%szif (__Pyx_GetException(r#  z__Pyx_ErrRestore(0,0,0);z__Pyx_TraceExceptionDone();except_rn  )3r-  r9   r*	  rC  r  r$  r%  r   r  r  r   r  rS   r  r?  r  rK   r  extendr
   r	  r   r  rL  r-  r  rO  excinfo_targetra	  r  r  put_trace_exception_handledget_exception_utility_coder+  r<	  r(  set_varrP  rN  rU   r  rK  r   r  r   r5  r  r  get_loop_labelsr,  r  )r   rX   r  has_non_literalsr  rK  r*	  patterns	exc_tests
match_flagr@  r.  r  needs_exceptionexc_argstempvarrW   r  old_exc_varsr'  s                      @r4   r>	  z'ExceptClauseNode.generate_handling_code   sE   dhh<<#& '-#||'- $-  -   &+1X/ ! !NN88TX8Y / /  11+2I2IJ]_m2no

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

:U8_LM

388$IY_$IJK$ 6DNN//56 JJ  NN''
3JJ'//#KKt# +t++((* 	 g""4#5#56,,TXX6 --.HI!&q+ 44^PT4U +H +&x8HJJ$//$((35 6 6  n56 --k.E.EFY[i.jkJJ12JJ45;;NN""8A;/NN33D9KK00F*!$Xt/B/B/G/G!H &W%& ..y9>>22L&.DNN#		))$/&2DNN#yy&&# @C **3?@ MM)$++D,@,@,BOT D%%hqk>B%%hqk>B&&x{NC	D ! 2++D12 	_-

	E/ IJ %J:+s   (\\=\!(\c                     | j                   | j                   j                  ||       | j                  j                  ||       y r   )rO  r  r   r6  s      r4   r  z.ExceptClauseNode.generate_function_definitionsx!  s4    ;;"KK55c4@		//T:r3   c                     | j                   r"| j                   D ]  }|j                  |        | j                  r| j                  j                  |       | j                  j                  |       y r   )r*	  r   rO  r   )r   rX   r*	  s      r4   r   zExceptClauseNode.annotate}!  sU    <<<< '  &';;KK  &		4 r3   )r,   r-   r.   r   r(  rp	  is_except_asr   rw   rX	  ra	  r>	  r  r   r2   r3   r4   rU	  rU	     s=    " =KINL,65
M^;
!r3   rU	  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y)TryFinallyStatNode)r   finally_clausefinally_except_clauser   TNFc                 "    t        | ||      }|S )Nr   r	  )r	  )r9   r   r   r	  rW   s        r4   r#  z"TryFinallyStatNode.create_analysed!  s    !#DPr3   c                     | j                   j                  |       t        j                  | j                        | _        | j
                  j                  |       | j                  j                  |       y r   )r   r   r   r   r	  r	  r   s     r4   r   z'TryFinallyStatNode.analyse_declarations!  sS    		&&s+%)]]43F3F%G"""77<005r3   c                 ,   | j                   j                  |      | _         | j                  j                  |      | _        | j                  j                  |      | _        |j                  r'|j                  j
                  s|j                  | _        | S r   )r   rw   r	  r	  r  rg  func_return_typer   s     r4   rw   z&TryFinallyStatNode.analyse_expressions!  so    II11#6	"11EEcJ%)%?%?%S%STW%X"??3??#:#:$'OOD!r3   zTry-finally statementc           	      4    |j                   j                         |j                  d       |j                  }|j	                         }|j                         }|j                  } j                  s||_        |j                         } j                  j                  |       |j                  d       |j                  j                         }|j                   j                  j                         |j                  d       |j                  |        j                  gf fd	} j                  xr |j                  |      }	 j                  j                    }
 j                  j                   s_|j                  d        |       j                  |        j                  j                   s|j#                  |       |j                  d       |	r|j%                  |       |j                  d        j&                  s|j                  d        j(                  r|j+                          |
rt-        t/        d      D cg c]-  }|j                  j1                  t2        j4                  d	
      / c}      }|j                  j1                  t3        j6                  t3        j8                  t2        j:                              d	
      }nd x}}t-        t/        d      D cg c]#  }|j                  j1                  t<        d	
      % c}      }|j?                         r+|jA                          |jC                   j                          jE                  |||||       |j	                         }|j                  d       |j                  jF                  }|d d |j                  _#         jH                  j                  |       ||j                  _#        |j                  d       |
r jK                  ||||       |r"|D ]  }|j                  jM                  |        |r|j                  jM                  |       |j?                         r|jO                   j                  d       |j#                  |       |jQ                  |j                         |      D ]  } jS                  ||        |D ]  }|j                  jM                  |        |j                  d       |j                  |       |jT                  }d}tW        tY        ||            D ]  \  }\  }}|j                  |      s||k(  r|	r$|j                  d|z         d }||k(  r̉ j                  j                   s jZ                  r j(                  st]         j                  t^              s|j                  j1                   jZ                  d	
      }|j                  |dt`        jb                  d        jZ                  jd                  r"|j                  dt`        jb                  z          |       j                  |       ||k(  rl|rj|j                  t`        jb                  d|d        jZ                  jd                  r|j                  d|z         |j                  jM                  |        j                  j                   s|j#                  |       |j                  d        |j%                  |       |j                  d       y c c}w c c}w )Nr5	  rn  z/*finally:*/ {c                 j    | d   }t        j                  |      }|j                  u r|| d<   |S |}|S rL  )r   r   r	  )_nextrW   	node_copyr   s      r4   fresh_finally_clausezHTryFinallyStatNode.generate_execution_code.<locals>.fresh_finally_clause!  sD    8Dd+It***$a K !Kr3   z/*normal exit:*/{z/*exception exit:*/{r  r%   Fr      r  r   TrI  r2   z%s: {rF  rG  rm	  )3r-  r9   rS   r  all_new_labelsget_all_labelshandle_error_caser  r   r  r$  r:	  r	  set_all_labelspreserve_exceptionr  r   r  r  r$  is_try_finally_in_nogilrz  r  r  r%  r
   r	  CPtrTyper  r  r   r  r  rq	  put_error_catcherrK  r	  put_error_uncatcherr-  rL  r  put_error_cleanerr  r  rN  r	  rL   GILExitNoder	   r  r~  )r   rX   r  
old_labels
new_labelsrv  catch_labelrJ	  r	  preserve_errorneeds_success_cleanupr  exc_lineno_cnamesexc_filename_cnamerK  finally_old_labelsr|	  r  r  r  r  	old_labelret_temps   `                      r4   r  z*TryFinallyStatNode.generate_execution_code!  s   dhh

< **((*
((*
**%%.Dnn&		))$/

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

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

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

6;N;N#OP00<< JJy63F3F'FG "::4@L(JJV-@-@(KL,,88

9x#78NN//9&&44i(JJsO?	D 	{#

	i+'#s   2\&(\c                     | j                   j                  ||       | j                  j                  ||       | j                  r| j                  j                  ||       y y r   )r   r  r	  r	  r6  s      r4   r  z0TryFinallyStatNode.generate_function_definitions@"  sP    		//T:99#tD%%&&DDS$O &r3   c                 @   |j                   j                  t               |j                   j                  t               |j                   j                  t               | j
                  r|j                  d       |j                  d       |j                  dj                  |D cg c]  }d|z  	 c}             |D ]  \  }}|j                  ||        |j                  d|dd  z         |j                  d|d d d	z  z         |D ]  }|j                  |t                |rS|j                  |d
   dt        j                  d|d   dt        j                  d|dt        j                  d       | j
                  r|j!                          y y c c}w )NFry  r  rG   rm	  z$ __Pyx_ExceptionSwap(&%s, &%s, &%s);r   zTif ( unlikely(__Pyx_GetException(&%s, &%s, &%s) < 0)) __Pyx_ErrFetch(&%s, &%s, &%s);r%   r   rF  r  r   rG  )r  r  r  rr	  swap_exception_utility_coder	  r{  rS   r   r5  r<	  r   r	   lineno_cnameclineno_cnamefilename_cnamer  )	r   rX   rJ	  rK  r	  r	  r@  rN	  rl  s	            r4   r	  z$TryFinallyStatNode.put_error_catcherF"  st   ))*HI))*DE))*EF''7

/0

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

9HQRLHI

 4 8@|a7G	I 	J
  	2CS.1	2JJ!!$f&9&9!!$f&:&:"F$9$9; <
 ''((* () Bs   'Fc                 
   |j                   j                  t               |j                   j                  t               | j                  r#|j                  d       |j                  d       |dd  D ]  }|j                  |t                |j                  d|dd  z         |d d D ]  }|j                  |t                |j                  d|d d z         | j                  r|j                          |j                  dj                  |D cg c]  }d|z  	 c}             |rT|j                  t        j                  d	|d
   dt        j                  d	|d   dt        j                  d	|d       y y c c}w )NFry  r  r   !__Pyx_ExceptionReset(%s, %s, %s);rl	  rG   rm	  rF  r   r  r   rG  )r  r  r  r;	  r	  r{  rS   r  r   r  r   r	   r	  r	  r	  )r   rX   rK  r	  r	  r@  s         r4   r	  z&TryFinallyStatNode.put_error_uncatcherg"  sU   ))*HI))*FG''7JJ34 AB< 	3Cc>2	3

6!"EFBQ< 	3Cc>2	3

2Xbq\AB''((*

388AY_ABCJJ##%6q%9$$&7&:%%'9; <  Bs   F c                    |j                   j                  t               | j                  r#|j	                  d       |j                  d       |dd  D ]  }|j                  |t                |j                  d|dd  z         |d d D ]  }|j                  |t                | j                  r|j                          |j                  dj                  dgdz        |dd  z         y )NFry  r  r   r	  rG   rm	  )r  r  r;	  r	  r{  rS   r  r   r5  r  r   )r   rX   rK  r@  s       r4   r	  z$TryFinallyStatNode.put_error_cleaner"  s    ))*FG''7JJ34 AB< 	3Cc>2	3

6!"EFBQ< 	8C""37	8''((*

388YKM*Xab\9:r3   c                 p    | j                   j                  |       | j                  j                  |       y r   )r   r   r	  r   s     r4   r   zTryFinallyStatNode.annotate"  s(    		4 $$T*r3   )NN)r,   r-   r.   r   r	  r	  r	  r	  r	  r$  r2  r#  r   rw   r   r   r   r   r  r  r	  r	  r	  r   r2   r3   r4   r	  r	  !  s     FK  #L 6 ..K)KHTP FJ+B<8;$+r3   r	  c                       e Zd ZdZdZdZy)NogilTryFinallyStatNodezJ
    A try/finally statement that may be used in nogil code sections.
    FN)r,   r-   r.   r   r	  r   r2   r3   r4   r	  r	  "  s     Kr3   r	  c                   `     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 )
GILStatNoderP  NTc           
          || _         || _        | j                  |||       t        j	                  | ||t        ||| j                               y )N)state
state_tempr	  )r	  rP  create_state_temp_if_neededr	  r   r	  r	  )r   r9   r	  r   rP  s        r4   r   zGILStatNode.__init__"  sP    
"((eT:###&5T__> 	$ 	?r3   c                     ddl m}  |       }|j                  |       |j                  sy |dk(  rt        j
                  }nt        j                  }ddlm} |j                  ||      | _
        y )Nr   YieldNodeCollectorgilrj  )r_	  r	  visitchildrenyieldsr
   c_gilstate_typec_threadstate_ptr_typer   r  r  r	  )r   r9   r	  r   r	  	collectorrO	  r  s           r4   r	  z'GILStatNode.create_state_temp_if_needed"  s[    ;&(	%E>"22I"99I#,,S)<r3   c                     | j                   dk(  |_        | j                   dk(  rd|_        | j                  | j                  j	                  |       t
        |   |      S )Nr	  T)r	  _in_with_gil_blockhas_with_gil_blockrP  r   rj   r  s     r4   r   z GILStatNode.analyse_declarations"  sT    "&**"5::%)C">>%NN//4w+C00r3   c                 "   |j                  t        j                  dd             | j                   | j                  j	                  |      | _        |j
                  }| j                  dk(  |_        t        j	                  | |      }||_        |S )NForceInitThreadsrh	  r  )r  r   r  rP  rw   r  r	  r	  )r   r   	was_nogilrW   s       r4   rw   zGILStatNode.analyse_expressions"  s|    ##$68KL	N >>%!^^??DDNII	JJ')	!55dC@	r3   c                    |j                  | j                         |j                          | j                  rD| j                  sJ | j                  j                  |       | j                  j                         }nd }|j                  j                  }| j                  dk(  r$|j                  |       d|j                  _        n/|j                  || j                          d|j                  _        t        j                  | |       | j                  r| j                  j                  |       ||j                  _        |j                          y )Nr	  )variableT)r	  unknown_gil_stateF)r-  r9   begin_blockr	  scope_gil_state_knownr  r   r$  r}  r	  r{  put_release_gilr	  r  r  	end_block)r   rX   r	  old_gil_configs       r4   r  z#GILStatNode.generate_execution_code"  s    dhh?? ---OO$$T*--/HH11::2'+DNN$  ($JdJdFd e',DNN$224>??OO##D)#1 r3   r   )r,   r-   r.   r	  r   r	  r	  r   r	  r   rw   r  rr   rs   s   @r4   r	  r	  "  s<     -"9"E"EEKJ ?=1r3   r	  c                   (    e Zd ZdZg ZdZdZd Zd Zy)r	  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   r2   r   s     r4   rw   zGILExitNode.analyse_expressions#  r  r3   c                     | j                   r| j                   j                         }nd }| j                  dk(  r|j                  |       y |j	                  || j
                          y )Nr	  )r	  )r	  r   r	  r  put_acquire_gilr	  )r   rX   r	  s      r4   r  z#GILExitNode.generate_execution_code#  sV    ??--/HH::((2  A[A[=[ \r3   )	r,   r-   r.   r   r   r	  r	  rw   r  r2   r3   r4   r	  r	  "  s$     KJ 	]r3   r	  c                       e Zd ZdZd Zy)EnsureGILNodezI
    Ensure the GIL in nogil functions for cleanup before returning.
    c                 (    |j                  d       y )NFry  )r{  r   s     r4   r  z%EnsureGILNode.generate_execution_code#  s    U3r3   N)r,   r-   r.   r   r  r2   r3   r4   r	  r	  #  s    4r3   r	  c                   t     e Zd ZdZdgej
                  z   ZdZdZdZ fdZ	d Z
 fdZ fdZd	 Zd
 Z xZS )CriticalSectionStatNodez
    Represents a freethreading Python critical section.
    In non-freethreading Python, this is a no-op.

    args    list of ExprNode    1 or 2 elements, must be object, pymutex or pymutex*
    rU   NFc          	         t        |      dkD  rt        j                  | _        nt        j                  | _        t        |      dkD  rt        t        |            nd| _        t        |    |f||t        || j                        d| y )Nr   r   )
length_tag)rU   r   r	  )
rK   r
   c_py_critical_section2_typevar_typec_py_critical_section_typer  r	  rj   r   CriticalSectionExitNode)r   r9   rU   r   rV   rN   s        r4   r   z CriticalSectionStatNode.__init__.#  sy    t9q=&BBDM&AADM,/IM#c$i.r	
21		
 	
r3   c                     ddl m}  |       }|j                  | j                         |j                  rt        | j                  d       y y )Nr   r	  z0Cannot yield while in a cython.critical_section.)r_	  r	  r	  r   r	  r   r9   )r   r	  r	  s      r4   check_for_yieldsz(CriticalSectionStatNode.check_for_yields?#  s<    ;&(			*$((NP r3   c                 f    | j                   D ]  }|j                  |        t        |   |      S r   )rU   r   rj   )r   r   r  rN   s      r4   r   z,CriticalSectionStatNode.analyse_declarationsF#  s4    99 	*C$$S)	*w+C00r3   c                 `   | j                          t        j                         }d}t        | j                        D ]  \  }}|j                  |      }|j                  |k(  s/|j                  j                  r&|j                  j                  |k(  r|dz  }d| _	        n>|j                  j                  r|j                  |      }nt        |j                  d       || j                  |<    |dk7  r.|t        | j                        k7  rt        | j                  d       t        |   |      S )Nr   r   TzRArguments to cython.critical_section must be Python objects, pymutex, or pymutex*.zHArguments to cython.critical_section must not mix objects and pymutexes.)r	  r
   get_cy_pymutex_typer  rU   rw   rl  rd  rm  is_pymutex_critical_sectionr~  rw  r   r9   rK   rj   )r   r   cy_pymutex_typemutex_countr  r  rN   s         r4   rw   z+CriticalSectionStatNode.analyse_expressionsK#  s   $88:		* 	FAs))#.CO+HHOO(:(:o(Mq 370%% ((-
 GGh DIIaL+	, !s499~ =Z w*3//r3   c                    | j                   r2|j                  j                  t        j                  dd             d}n1|j                  j                  t        j                  dd             d}|j                  | j                         |j                          t        j                  }|j                  | j                  j                  |       d       | j                  D ]  }|j                  |        | j                   rD| j                  D cg c].  }|j                  j                   rdnd |j#                          0 }}n*| j                  D cg c]  }d|j#                           }}|j                  d	| j$                   d
| d| ddj'                  |       d	       t(        j+                  | |       | j                  D ]$  }|j-                  |       |j/                  |       & |j1                          y c c}w c c}w )NCriticalSectionsMutexSynchronization.cMutexCriticalSectionsr   rG  r  r  __Pyx_PyCriticalSection_Beginz(&r   ro  )r	  r  r  r   r  r-  r9   r	  r	   critical_section_variablerS   r	  rh  rU   r?  rl  rd  r   r	  r   r	  r  r  rL  r	  )r   rX   mutexr	  r  rU   s         r4   r  z/CriticalSectionStatNode.generate_execution_codel#  s   ++--''(?ATUWE--''(:<OPREdhh33

dmm44X>?qAB99 	/C((.	/++RVR[R[]3chhoo37

~F]D]=AYYHc{3::<.1HDH

%doo%6fUG2hZrRVR[R[\`RaQbbde	
 	224>99 	!C&&t,NN4 	! 	 ^Hs   3HH
c                 0    t        | j                  d       y )Nz!Critical sections require the GIL)r   r9   r   s     r4   r   z#CriticalSectionStatNode.nogil_check#  s    dhh;<r3   )r,   r-   r.   r   r	  r   r	  r	  r	  r   r	  r   rw   r  r   rr   rs   s   @r4   r	  r	   #  sO     (/;;;KH"'
"Q1
0BB=r3   r	  c                   &    e Zd ZdZg ZdgZd Zd Zy)r	  zG
    critical_section - the CriticalSectionStatNode that owns this
    critical_sectionc                     | S r   r2   r   s     r4   rw   z+CriticalSectionExitNode.analyse_expressions#  r  r3   c                 d    |j                  d| j                   dt        j                   d       y )Nr	  z_End(&ro  )rS   r	  r	   r	  r   s     r4   r  z/CriticalSectionExitNode.generate_execution_code#  s-    

%doo%6ff>^>^<__ab	
r3   Nr,   r-   r.   r   r   r   rw   r  r2   r3   r4   r	  r	  #  s!     K*+
r3   r	  c                   n     e Zd ZdZdgej
                  z   ZdZdZdZe	d        Z
 fdZ fdZd Z xZS )	r	  z
    Represents
        with l:
            ...
    where l in a cython.pymutex or cython.pythread_type_lock.

    arg    ExprNode
    r  NFc                     ddl m} t        |j                  t              sJ t        |j                  j                  t
              sJ  | |j                  |j                  |j                  j                  j                  t        |j                        |j                  |j                  t        j                  |j                  j                                    }||j                  _        |j                  |_        |S )Nr   rj  )r  r   r	  	lock_temp)r   r  rL   r   r	  r%	  r9   r	  CythonLockExitNoder  r
   r	  rl  r	  lock_stat_noder	  )rl   rW   r  r   s       r4   r	  z CythonLockStatNode.from_withstat#  s    $))%788$))..*;<<HH$$/ "**488Z5H5HIZIZ5[\
 06,'-'<'<$r3   c                 X    | j                   j                  |       t        |   |      S r   )r  r   rj   r  s     r4   r   z'CythonLockStatNode.analyse_declarations#  s%    %%c*w+C00r3   c                     | j                   j                  |      | _         | j                  }t        |t              r't        |j                        dk\  r|j                  d   }t        |   |      S r  )r  rw   r   rL   r   rK   r!  rj   )r   r   r   rN   s      r4   rw   z&CythonLockStatNode.analyse_expressions#  sX    88//4yydL)c$**o.B::a=Dw*3//r3   c           	         |j                   j                  | j                  j                  j	                                |j                  | j                         |j                          | j                  j                  |       | j                  j                         }| j                  j                  |       |j                  | d| j                  j                          d       | j                  t        j                  k(  rd}n"| j                  t        j                   k(  rd}nd}|j                  d| j                  j                  j"                   d| d| d	       t$        j'                  | |       | j                  j)                  |       | j                  j+                  |       | j                  j-                  |       |j/                          y )
Nr  rG  Nogilr   Gil__Pyx_Locks__Lockz(*ro  )r  r  r  rl  get_usage_utility_coder-  r9   r	  r	  r  r   r?  rS   r   r+   r0   r1   
cname_partr	  r  r  rL  r  r	  )r   rX   rN	  gil_strs       r4   r  z*CythonLockStatNode.generate_execution_code#  sV   ))$((--*N*N*PQdhh%NN))+	))$/

i[TXX__%6$7q9:  J$4$44G""j&;&;;GG

\$((--":":!;5	I;VXYZ224>''-D!t$r3   )r,   r-   r.   r   r	  r   r	  r	  r   r  r	  r   rw   r  rr   rs   s   @r4   r	  r	  #  sN     '.:::KIK $10r3   r	  c                   &    e Zd ZdZg ZdgZd Zd Zy)r	  zI
    lock_stat_node   CythonLockStatNode   the associated with block
    r	  c                     | S r   r2   r   s     r4   rw   z&CythonLockExitNode.analyse_expressions#  r  r3   c                     | j                   j                  j                  j                  }|j	                  d| d| j                   j
                  j                          d       y )Nr	  z	_Unlock(*ro  )r	  r  rl  r 
  rS   r	  r   )r   rX   r 
  s      r4   r  z*CythonLockExitNode.generate_execution_code#  sQ    ((,,11<<


\*Yt7J7J7T7T7[7[7]6^^`abr3   Nr	  r2   r3   r4   r	  r	  #  s"     K()cr3   r	  c                 D    ddl m} |j                  | j                        S r~  )r   r  r  r  )r  r  s     r4   cython_view_utility_coder
  #  s    ++G,Q,QRRr3   c                 .    t        j                  dd      S NArrayAPIzarrayarray.hr   r  r  s    r4   r  r  $      k.E.EjR`.a r3   c                 .    t        j                  dd      S r
  r

  r
  s    r4   r  r  $  r
  r3   )zcpython.arrayzcpython.array.arrayzcython.viewc                    |j                   j                  j                  j                  D ]  }|j                  | j
                  k7  r|j                  d      }|j                  d      }|xr |j                  xs |xr |j                  }|s|sf|ri|sl|j                  j                  st        | j                  dd       |j                   j                  t        j                  dd              y  y )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  rm   r  r  r  rl  r  r   r9   r  r   r  )rW   rX   modr
  r
  r  s         r4   cimport_numpy_checkr
  $  s     ++11CC 88t''' ~682!2!2]8\-J\J\]!3!3!@!@ #_`ac  11++,>@TU 'r3   c                   &    e Zd Zg ZdZd Zd Zd Zy)CImportStatNodeFc                    |j                   st        | j                  d       y |j                  | j                  | j                  | j
                  rdnd      }d| j                  v r| j                  j                  d      D cg c]  }t        |       }}|d   }|j                  j                  |      }|}|dd  D ]2  }|j                  |      }|j                  ||| j                         |}4 | j                  r(|j                  | j                  || j                         nw|j                  |       |j                  ||| j                         nH| j                  xs | j                  }|j                  ||| j                        }| j                  |_        | j                  t        v r<|j                  t        | j                     |j                  j                                y y c c}w )N$cimport only allowed at module levelr   r   relative_levelrH   r   )r  r   r9   find_moduler  is_absoluter  r   r  find_submoduledeclare_moduleas_namer  rm  utility_code_for_cimportsr  r  )	r   r   r'  rm   r-  top_nametop_module_scopesubmodule_scoper  s	            r4   r   z$CImportStatNode.analyse_declarations+$  s   ""$((BCdhhD<L<LqRT ' V$"""595E5E5K5KC5PQT]4(QEQQxH"{{99(C+Lab	 /"."="=d"C++D/488L./ ||""4<<txxH''5""8-=txxH<<34#3#3D&&t\488DE262B2BE/88  !:4;K;K!LS[[M`M`!ab 9# Rs   G/c                     | S r   r2   r   s     r4   rw   z#CImportStatNode.analyse_expressionsF$  r  r3   c                 <    | j                   dk(  rt        | |       y y Nnumpyr  r
  r   s     r4   r  z'CImportStatNode.generate_execution_codeI$      w&d+ 'r3   N)r,   r-   r.   r   r
  r   rw   r  r2   r3   r4   r
  r
  !$  s     KKc6,r3   r
  c                   4    e Zd Zg ZdZdZdZd Zd Zd Z	d Z
y)FromCImportStatNodeNc           	         |j                   st        | j                  d       y |j                  j	                  d      dz   }| j
                  rX| j
                  |kD  rt        | j                  d       y | j
                  |k(  r#|j                  st        | j                  d       y |j                  | j                  | j                  | j
                        }|sy |j                  }|j                  |       | j                  D ]  \  }}}|dk(  r?t        |j                  j                               D ]  \  }}	|j                  ||	|        L|j                  |      }	|	rd|	_        n| j
                  d uxr | j
                  dkD  }
|j"                  j                  ||| j                  d	|

      }|s|j$                  |u r"|j'                  |xs ||| j                         nt        |d|d|d       |	s|xs |}|j                  ||	|        |j)                  d      s|j)                  d      r|t*        v r1|j-                  t+        |   |j"                  j.                               | j                  D ]G  \  }}}|d|}|t*        v s|j-                  t+        |   |j"                  j.                               I y y )Nr
  rH   r   z3relative cimport beyond main package is not allowedz:relative cimport from non-package directory is not allowedr
  r  r   F)from_moduler9   absolute_fallbackrelative_importzName 'z' not declared in module 'r  cpythoncython)r  r   r9   r  countr
  
is_packager
  r  r  imported_namesr   r  ri   r  rj  r  r  parent_moduler
  
startswithr 
  r  r  )r   r   qualified_name_componentsr'  r  r9   rm   r
  
local_namer  is_relative_importr#
  r  fqnames                 r4   r   z(FromCImportStatNode.analyse_declarationsZ$  s   ""$((BC$'$6$6$<$<S$AA$E!""%>>dhh UV$$(AA#..dhh \]t'7'7RVReRef"11-"&"5"5 	CCws{)-l.B.B.H.H.J)K C%J**:ucBC %++D1!"EJ)-)<)<D)H)dTM`M`cdMd&&)kk&=&=,DHHX]  pB '> 'CO* &44D**7?dOTXXVcdT_#`a!(DJ**:ucB+	C. !!),0F0Fx0P77$$%>{%KCKKL_L_%`a"11 a
4$/666(()B6)J3;;K^K^)_`a 1Qr3   c                     |j                   sy|j                  }|dk(  r|j                  syy|j                  sy||j                  k7  ryy)Nr   classr   )rk  rl  r  is_struct_or_unionr  )r   r  r  rl  s       r4   declaration_matchesz'FromCImportStatNode.declaration_matches$  sM    }}zz7?)) 	 **tyy r3   c                     | S r   r2   r   s     r4   rw   z'FromCImportStatNode.analyse_expressions$  r  r3   c                 <    | j                   dk(  rt        | |       y y r&
  r(
  r   s     r4   r  z+FromCImportStatNode.generate_execution_code$  r)
  r3   )r,   r-   r.   r   r  r
  r4
  r   r>
  rw   r  r2   r3   r4   r+
  r+
  N$  s.     KKNN0ad,r3   r+
  c                   (    e Zd ZdgZdZd Zd Zd Zy)FromImportStatNoder  r   c                    | j                   D ]  \  }}|dk(  r3|j                  st        | j                  d        y d|_        d| _        >|j                  |       |j                  rO|j                         lt        | j                  j                  j                  d|      |j                  _        d|j                  _         y )Nr  z%import * only allowed at module levelr   rH   r   )ri   r  r   r9   has_import_starimport_starr  r  rb  r   r  r  r   rm  )r   r   rm   rO  s       r4   r   z'FromImportStatNode.analyse_declarations$  s     JJ 	DLD&s{**$(($KL&'##$ 11#6<<??AIER'+{{'>'>'D'DdKFMB BDFLL>	Dr3   c                    ddl m} | j                  j                  |      | _        |j	                  | j
                  t              | _        g | _        | j                  D ]  \  }}|dk(  rm|j                  j                         D ]O  \  }}|j                  r|j                  j                  s*|j                  t        j                   dd              w y|j#                  |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(                  |j0                  k(  r~	 |j5                  |d       }|j                  t        u rd }n&| j                  j7                  |j                  |      }| j                  j9                  |||f        | S # t2        $ r Y {w xY w)Nr   rj  r  ExtTypeTestrM  r  )r9   r
  )r   r  r  rw   rE  r9   r   r   interned_itemsri   r  rk  rl  r  r  r   r  rj  rm   rL  r  r   r
  r   r  r   r  r  r  )	r   r   r  rm   rO  r  r  r  coerced_items	            r4   rw   z&FromImportStatNode.analyse_expressions$  s   kk55c:..txxH	  JJ 	ILD&s{ # 1 1 3 HAu ==UZZ-I-I,,[-D-D]Tf-gh
 

6;;/MMejjoo&=#EJJ>zz--1H1H1N1NN !$1H1H1N1NTXT\T\@D@Q@Q "1 "S ::11V5J5JJ$ K  99#tD;;.0#'L#'99#6#6v{{C#HL##**D&,+GH7	I8  * s   (A3I	IIc                 	   |j                  | j                         | j                  j                  |       | j                  rZ|j                  dt        j                  d| j                  j                         d|j                  | j                        d       | j                  r
|j                  d       |j                  j                  t        j                  dd             |j                  j                  t         j"                  d	      }|j                  j                  t$        d
	      }| j&                  j)                  |       | j                  D cg c]  \  }}}|j+                  |       }}}|j                  ddj-                  |       d       g }g }g }	t/        | j                        D ]  \  }
\  }}}||	j1                  |
|||f       "|j2                  rc|j4                  |k(  rT|j6                  rH|j6                  j8                  r2|j6                  j:                  j<                  r|j1                  |
       |j1                  |
||f        t?        |xs |	      }tA        |      dkD  r(|j                  d| d| dtA        |       d| d	       n|j                  | d       |j                  | d| j                  j                          d| d|jC                  || j                                |jE                  |t$               |r|j                  d| d       |D ]H  \  }
}}|j                  d|
 d       |jG                  | j&                  |       |j                  d       J |	D ]P  \  }
}}}|j                  d|
 d       |j                  |       |jG                  ||       |j                  d       R |j                  d       |rE|jI                  t        jJ                        }|jM                  | j                  d| d| d| d        |r|j                  d!       |jO                  |t$               |j                  d!       |j                  jQ                  |       |j                  jQ                  |       |j                  d!       | j                  jS                  |       | j                  jU                  |       y c c}}w )"Nr  ri  r#  rG  r  
ImportFromr  Fr   Tz*PyObject* const __pyx_imported_names[] = {r  r  r   r  r  r  r  r  z = 0; {z = __Pyx_ImportFrom(z, __pyx_imported_names[z]); r  r  r  r   r  z	default:;zPyDict_SetItem(z], rh  rn  )+r-  r9   r  r?  rE
  rS   r	   r  r+  rH
  r  r  r   r  r$  r%  r
   r  r   r   rT  r  r   r  r  r   rm   r  r  r  r  r  rK   r'  r(  rP  r)  r*  r  r,  r-  r  rL  )r   rX   counter_var	item_temprm   r  r4
  simple_pyglobalsdirect_assignmentscoerced_assignmentsr  rO  rI
  needs_specific_assignmentsmodule_dicts                  r4   r  z*FromImportStatNode.generate_execution_code$  sa   dhh,,T2JJ&&KK))+OODHH-/0 JJsO--''6FGI ..66z7S7S`e6fK44^PT4UIII	* #'"5"5D!Q &&t,N  JJDSXXnE]D^^abc  "!#"$3<T=P=P3Q =//D&,+'..4/NO>>fkkT&9||(@(@V\\EWEWEgEg(//2 "))1dF*;<= *..@.WDW)X&>"Q&

U;-tK=CDWCXXZ[fZggmno 

k](34JJ+1$++2G2G2I1JJabmannr**9dhh?@B OOI~6 *

Xk]$78'9 )OAtVJJqc|,33DIItDJJx()
 6I )1AtV\JJqc|, 99$?33L$GJJx(	) 

;'"778L8LM%%HH%k]2I+VYZcYddefh *

3!!)^<JJsONN''	2NN''4JJsO**40t$Ks    S+N)r,   r-   r.   r   rE
  r   rw   r  r2   r3   r4   rB
  rB
  $  s"     *KKD&!FX%r3   rB
  c                       e Zd ZdZdZy)ParallelNodez4
    Base class for cython.parallel constructs.
    N)r,   r-   r.   r   r   r2   r3   r4   rT
  rT
  ?%  s     Kr3   rT
  c                       e Zd ZdZg dZd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 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$dZ-dZ.dZ/de.de/dZ0d 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_threadsthreading_conditionNFr   c                     t        |   |fi | |j                  d      xs i | _        t	               | _        i | _        g | _        y )Nr  )rj   r   r   r  r   seen_closure_varsprivatesassigned_nodesr  s      r4   r   zParallelStatNode.__init__%  sL    '' "::m4: "%
  !r3   c                    | j                   j                  |       d | _        d | _        | j                  rg }t               }| j                  j                  D ]R  }|j                  j                  |v r-t        | j                  d|j                  j                  z         |j                  |j                  j                         |j                  j                  dk(  r)|j                  j                  r|j                  | _        |j                  j                  dk(  r)|j                  j                  r|j                  | _        | j                  rD|j                  j                  dk(  r+|j                  j                  r/|j                  | _        B|j                  |       U || j                  _        	 | j                  j!                  |      | _        ni | _        | j                  j%                         D ]:  \  }}|| j&                  vrt        | j                  d|z         .t)        | ||       < y # t"        $ r*}t        | j                  j                  d       Y d }~d }~ww xY w)Nz$Duplicate keyword argument found: %srW
  use_threads_if	chunksizez=Only compile-time values may be supplied as keyword argumentszInvalid keyword argument: %s)r   r   rW
  rX
  r}   r   r  r   r   r   r9   r   r   	is_pranger_
  r  r^  	Exceptionri   valid_keyword_argumentsr   )r   r   pairsseendictitemr  r   r  s           r4   r   z%ParallelStatNode.analyse_declarations%  s   		&&s+#' ;;E5D KK77 +<<%%-$(($JX\\M_M_$_`++,<<%%6#>>11+3>>(\\''+;;#>>113;>>0^^(:(:k(I#>>11)1LL*+  +0DKK'H"kk<<SA
 DK{{((* 	'GB555dhh > CDb#&		'  Hdkkoo (G H HHs    I 	I4
 I//I4c                    | j                   r | j                   j                  |      | _         | j                  rC| j                  r!| j                  j                  |      | _        nt	        | j
                  d       | j                  r | j                  j                  |      | _        | j                  j                  |      | _        | j                  |       | j                   j| j                  rC| j                  j                   -| j                  j                  st	        | j
                  d       n| j                  r-| j                  j                  st	        | j
                  d       nj| j                   j                  j                  rJ| j                   j                  r4| j                   j                  |      dk  rt	        | j
                  d       | j                   j                         r | j                   j                  j                   r>| j                   j#                  t$        j&                  |      j)                  |      | _         | S )Nz@'use_threads_if' must de declared in the parent parallel sectionz-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)rW
  rw   rX
  is_parallelr   r9   r_
  r   analyse_sharing_attributesparentr`
  rl  r  r   r^  rd	  r~  r  r
   r	  rw  r   s     r4   rw   z$ParallelStatNode.analyse_expressions%  s   #//CCCHD##+/+C+C+W+WX[+\(dhh bc>>!^^??DDNII11#6	'','{{t{{66B4;;K`K`dhh OPT[[%:%:dhh ]^""''..$$//$$77<Adhh PQ##--/43C3C3H3H3T3T#'#3#3#=#=))3$00>s0C  r3   c                 $   | j                   j                         D ]s  \  }\  }}| j                  r1| j                  s%|| j                  j                   v rt        |d       F| j                  s|rt        |d       a| j                  |||       u y)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 blocksN)r  ri   r`
  rg
  ri
  r   propagate_var_privatization)r   r   r  r9   r|  s        r4   rh
  z+ParallelStatNode.analyse_sharing_attributes%  s     !% 0 0 6 6 8 	=E9C~~d&6&6 DKK333#QR>>bcGH ,,UC<#	=r3   c                 <   || j                   |<   |j                  j                  rt        |d       y| j                  r^| j
                  s/|| j                  j                  vr| j                  j                  }n| j                  }|r|j                  |||       yyy)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[
  rl  r  r   r`
  rg
  ri
  r  rk
  )r   r  r9   r|  ri
  s        r4   rk
  z,ParallelStatNode.propagate_var_privatization%  s    j  "e::((#RS>>##T[[5L5L(L++225#rB  r3   c                    | j                   r| j                   j                  ||      S |j                  | j                  v r|j                  S |j                  j                  |j                  d      }| j                  j                  |j                         | j                  j                  |       | j                  j                  ||j                  f       |j                  |d|j                  d       ||_        y)zo
        Helper function that allocate a temporary for a closure variable that
        is assigned to.
        TrF  rG  N)ri
  _allocate_closure_tempr  rZ
  r$  r%  rl  r   modified_entriesr  rS   )r   rX   r  r  s       r4   rn
  z'ParallelStatNode._allocate_closure_tempA&  s    
 ;;;;55dEBB;;$000;;,,UZZ> 	""5;;/""5)$$eU[[%9:

45r3   c                     | j                   }|j                  j                  }||j                  _        |j                  |       ||j                  _        |j	                         S r   )1begin_of_parallel_control_block_point_after_declsr$  ownerr?  r   )r   rX   rC  r   rr
  s        r4   evaluate_before_blockz&ParallelStatNode.evaluate_before_blockW&  sP    BB !!%%a(!{{}r3   c                 z    | j                   /|j                  d| j                  || j                         z         yy)zS
        Write self.num_threads if set as the num_threads OpenMP directive
        Nz num_threads(%s))rW
  r  rs
  r   s     r4   put_num_threadsz ParallelStatNode.put_num_threadsc&  s:     'HH'$*D*DT4K[K[*\\] (r3   c                     g | _         t        | j                        D ]-  }|j                  s|j                  s| j                  ||       / y)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)ro
  sortedr  from_closurer  rn
  )r   rX   r  s      r4   declare_closure_privatesz)ParallelStatNode.declare_closure_privatesk&  sG     !#D,,- 	9E!!U%5%5++D%8	9r3   c                     | j                   D ]R  \  }}|j                  |d|j                  d       |j                  j	                  |j                         ||_        T y)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.
        rF  rG  N)ro
  rS   r  r$  r-  )r   rX   r  r  s       r4   release_closure_privatesz)ParallelStatNode.release_closure_privatesx&  sP     &*%:%: 	)!E>JJ^U[[ABNN''4(EK	)r3   c                 p   | j                   }d| _         | j                  r|j                  j                         x| _        }g g }}t        |      D ]@  \  }}|j                  s|j                  r|j                  |       0|j                  |       B |r#|j                  ddj                  |      z         |r#|j                  ddj                  |      z         | j                  rt        j                  g}	| j                  r|	j                  | j                          |j"                  j%                  t'        j(                  dd             |j                  dt        j*                   d       |j                  d	| j,                  z         |j                  d
dj                  |	      z         yyy)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)SharedInFreeThreadingr	  z' __Pyx_shared_in_cpython_freethreading(rh  z private(%s, %s, %s)z shared(%s))privatization_insertion_pointrg
  r$  stop_collecting_tempsr   rw
  r~  r  r  r  r   breaking_label_usedr	   parallel_whyerror_label_usedro	  parallel_excr  r  r   r  parallel_freethreading_mutexpos_info)
r   rX   exclude_tempsr   r   r[
  firstprivatesr.  rl  shared_varss
             r4   privatize_tempsz ParallelStatNode.privatize_temps&  su   
 ..-1*!%!E!E!GGDJ&("mH$Um *
d##t'>'>!((.OOD)	* ntyy'::;)DIIm,DDE''%223((&&t'8'89MM22#//3/12 EECFDgDgChhijkEE04==@Amdii&<<= ( r3   c                     | j                   rP| j                  sC|j                  d       t        | j                        D ]  \  }}|j                  ||d        y y y )Nz/* Clean up any temporaries */Trq  )rg
  is_nested_prangerS   rw
  r   r5  )r   rX   r.  rl  s       r4   cleanup_tempszParallelStatNode.cleanup_temps&  s[    D$9$9JJ78$TZZ0 B
d&&tTD&AB %:r3   c                 >   |j                         | _        |j                         | _        |j                  | _        |j                  d      |_        |j                          |j                         | _	        |j                         | _
        | j                  |       y)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;
        }
        returnr\  N)r  r  rv  r  r  r?	  r  r	  rO   %begin_of_parallel_control_block_pointrq
  "undef_builtin_expect_apple_gcc_bugr   s     r4   !setup_parallel_control_flow_blockz2ParallelStatNode.setup_parallel_control_flow_block&  s    4  $335#335 $ 1 1 NNN9595I5I5K2AEAUAUAW>//5r3   c                 .    |j                         | _        y)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)rO   begin_of_parallel_blockr   s     r4   begin_parallel_blockz%ParallelStatNode.begin_parallel_block&  s     (,';';'=$r3   c                 F   | j                   }d| _         | j                  r|}|j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j	                  d	       |j                          |j                  d       | j                  |       |j                          |j                  d
       |j	                  d       |j                  d       yy)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 _OPENMPTry  Py_BEGIN_ALLOW_THREADS#endif /* _OPENMP */Py_END_ALLOW_THREADSr  z{
z#ifndef _OPENMPz}
)r
  r
  rS   r{  put_safer
  r  )r   rX   
begin_codeend_codes       r4   end_parallel_blockz#ParallelStatNode.end_parallel_block&  s     11
'+$  H-.%%t%<5634NN+,NN12NN7#e$##%NN12x(,,.NN,-e$NN12% !r3   c                 J   |j                         }|j                         }d| _        d| _        d| _        g | _        |j                         }|D ]=  }|j                  |      s| j                  xs ||j                  k7  | _        d| _        ? | j                  r|j                  |       t        |      D ]  \  }}|j                  |      s||j                  k(  }|j                  |       |r|sN||j                  k(  rd| _        | j                  |       |j                  dt        j                  |dz   fz         |j                  |        | j                  rD|j                  |       |r0| j                  r#|j!                  dt        j                  z         yyyy)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_usedr
  r
  parallel_private_tempsr	  r  r  r  r  r  r  fetch_parallel_exceptionrS   r	   r
  r!  )	r   rX   should_flushsave_lastprivates_labeldont_return_label
all_labelsr?  r  is_continue_labels	            r4   trap_parallel_exitz#ParallelStatNode.trap_parallel_exit&  s    #'.."2 NN,##(  %&(#((*
   	+Eu%,0,D,D -I,1T5H5H,H (&*#		+ MM+,!*- 	-HAu??5) %)<)< <NN5! %6D,,,,0D)11$7

:)<)<a!e(DDEMM+,	-  NN,- 8 8!!"9F<O<O"OP !9| r3   c                    |j                          |j                  d       |j                          |j                  dt        j
                  z         |j                  dt        j
                  z         |j                  d| j                  z         t        t        | j                  | j                         }d|j                  _        |j                  dt        |      z         |j                  t        j
                  t                |j                  d       |j#                          |j%                          |j'                          y)	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
        Try  r
  r  z'__Pyx_ErrFetchWithState(&%s, &%s, &%s);%s = %s; %s = %s; %s = %s;rn  N)r	  r{  put_acquire_freethreading_lockr!  r	   parallel_exc_typerS   r
  r   rN  parallel_pos_infor
  r$  uses_error_indicatorr  r(  r   put_release_freethreading_lockr  r	  r   rX   r
  s      r4   r
  z)ParallelStatNode.fetch_parallel_exception7'  s    6 	T2++-1F4L4LLM

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

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

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

	 	++-$$&r3   c                    |j                          |j                  d       |j                          |j                  t        j
                  t               |j                  d| j                  z         t        t        | j                  | j                         }|j                  dt        |      z         |j                          |j                          |j!                          y)zRe-raise a parallel exceptionTry  rF  r
  N)r	  r{  r
  rJ  r	   r
  r   rS   r
  r   rN  r
  r
  r  r
  r  r	  r
  s      r4   restore_parallel_exceptionz+ParallelStatNode.restore_parallel_exceptiong'  s    T2++-11>B

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

/%/AB++-$$&r3   c                 l    |j                  | j                  | j                  | j                  fz          y)z
        Restore all old labels. Call this before the 'else' clause to for
        loops and always before ending the parallel control flow block.
        N)r	  r  r?	  r  r   s     r4   restore_labelszParallelStatNode.restore_labelsv'  s8    
 	D00D4I4I484H4H4J J 	Kr3   c                    | j                   }d| _         d| _        | j                  6| j                  j                  |       | j                  j	                  |       |j                         r|j                  d       | j                  r|j                  d| j                  z         |j                  d| j                  z         |j                  d       |j                  dt        j                   d       |j                  d       |j                  d	t        j                  z         |j                  d
       |j                  dt        j                  z         |j                  d       |r| j                  }n| j                  }|r|j                  dt        j                  z         |j                  dt        j                  z         |j                  d	t        j                  z         | j                   D ].  \  }}}	|	j"                  rd|z  }|j                  |d|d       0 |j                  dt        j                  z         |r,|j%                  d       |j'                  |j(                         |r,|j%                  d       |j'                  |j*                         |r,|j%                  d       |j'                  |j,                         | j                  r\|j.                  j1                  t2               |j                  d       | j5                  |       |j'                  |j6                         |j                  d       |j                  d       |j9                          | j;                  |       y)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.
        N$__Pyx_TurnOffSysMonitoringInParallelz*const char *%s = NULL; int %s = 0, %s = 0;z,PyObject *%s = NULL, *%s = NULL, *%s = NULL;z-#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADINGzPyMutex z = {0};r  r  zg/* This may have been overridden by a continue, break or return in another thread. Prefer the error. */z%s = 4;rn  zint %s;rm	  rW  rF  rG  r  z    case 1: z    case 2: z    case 3: z    case 4:)r
  rq
  rW
  r  rL  r  rS   r
  r
  r
  r	   r
  r
  r
  r
  r
  r
  r  r  r  r  r  r  r  r  r  r
  r  r	  "redef_builtin_expect_apple_gcc_bug)
r   rX   break_	continue_return_r   r
  
temp_cnameprivate_cnamerO	  s
             r4   end_parallel_control_flow_blockz0ParallelStatNode.end_parallel_control_flow_block~'  s    66592AE>'33D9''-<<> GG:;   GG@4CYCYYZGGBTEVEVVWGGCDGGhvBBC9MNGGHJJf6668JJ Q RJJy6#6#667JJ !00N!55NGGI 3 334GGI 3 334JJf1113 9=8S8S E4
M9))!BZ!OJ

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

=)//5d../JJsOJJ 	//5r3   z((defined(__APPLE__) || defined(__OSX__))zQ(defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))ri  r  rh  c                 T    | j                   s|j                  | j                         yy)z]
        A bug on OS X Lion disallows __builtin_expect macros. This code avoids them
        N)ri
  undef_builtin_expectredef_conditionr   s     r4   r
  z3ParallelStatNode.undef_builtin_expect_apple_gcc_bug'  s$     {{%%d&:&:; r3   c                 T    | j                   s|j                  | j                         y y r   )ri
  redef_builtin_expectr
  r   s     r4   r
  z3ParallelStatNode.redef_builtin_expect_apple_gcc_bug'  s"    {{%%d&:&:; r3   c                     t        ||      D ]8  \  }}|	|j                  j                  s t        |j                  d|z         : y )Nz6%s may not be a Python object as we don't have the GIL)rN  rl  r~  r   r9   )r   r   r-  nodesrm   rW   s         r4   _parameters_nogil_checkz(ParallelStatNode._parameters_nogil_check'  sM    eU+ 	CJD$DII$9$9dhh !;=A!B C	Cr3   )r2   r`  )FFF)5r,   r-   r.   r   r   r   r`
  r
  r
  rW
  r_
  rX
  r	   r
  parallel_exc_valueparallel_exc_tbr
  parallel_filenameparallel_linenoparallel_clinenor
  r	  r	  r	  r
  critical_section_counterr   r   rw   rh
  rk
  rn
  rs
  ru
  ry
  r{
  r
  r
  r
  r
  r
  r
  r
  r
  r
  r
  buggy_platform_macro_conditionhave_expect_conditionr
  r
  r
  r
  rr   rs   s   @r4   rV
  rV
  G%  sR   < AKDIKI 	  !!L 	   	H  !!"('T>=2CCJ,
^9	)!>FB#6J	>3B7Qr.`K @EX6v &P"[&DF[\O<<Cr3   rV
  c                   >     e Zd ZdZddgZdZdZ fdZd Zd Z	 xZ
S )ParallelWithBlockNodezI
    This node represents a 'with cython.parallel.parallel():' block
    rW
  r^
  Nc                 j    t         |   |       | j                  rt        | j                  d       y y )Nz=cython.parallel.parallel() does not take positional arguments)rj   r   rU   r   r9   r  s     r4   r   z*ParallelWithBlockNode.analyse_declarations'  s/    $S)99$(( 3 4 r3   c                    | j                   | j                   j                  |       | j                  |       | j                  |       |j	                  d       |j                  d       | j                   ,|j                  d| j                   j                         z         | j                  rj| j                  D cg c]$  }|j                  j                  s|j                  & }}|r/dj                  t        |            }|j                  d| d       |j                         | _        | j                  |       |j	                  d       |j	                  d       |j!                          | j#                  |       |j$                  j'                          | j(                  j+                  |       | j-                  |       | j/                  |       | j1                  |       |j3                          |j5                  |j6                        }|j5                  |j8                        }|j5                  |j:                        }| j=                  |       | j?                  ||||	       | j                   6| j                   jA                  |       | j                   jC                  |       | jE                  |       y c c}w )
Nr
  z#pragma omp parallel zif(%s) r   zfirstprivate(rh  r   r
  )r
  r
  r
  )#rX
  r?  ry
  r
  rS   r  r   r[
  rl  r~  r  r   rw
  rO   r
  ru
  r	  r
  r$  start_collecting_tempsr   r  r
  r
  r
  r	  r  r  r  r  r
  r
  r  rL  r{
  )r   rX   r  r[
  joined_privatesr
  r
  r
  s           r4   r  z-ParallelWithBlockNode.generate_execution_code(  sD   ##/$$==dC%%d+..t4

#$()##/HHY!9!9!@!@!BBC ==)- 3A vv11  3H 3"&))F8,<"==(9;<-1-A-A-C*T"

2

)*!!$'--/		))$/%T"%OOD$7$78	!1!12//$"3"34D! 	,,T&7@5< 	- 	> ##/$$;;DA$$//5%%d+I3s   >)Kc                 B    | j                  |dg| j                  g       y )Nr^
  )r
  rX
  r   s     r4   r   z!ParallelWithBlockNode.nogil_check7(  s!    $$S+;*<t?W?W>XYr3   )r,   r-   r.   r   rb
  rW
  rX
  r   r  r   rr   rs   s   @r4   r
  r
  '  s2      -.>?K44,lZr3   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 G d de      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   rO  r\  rU   rW
  r_
  rX
  NT)scheduler  rW
  r_
  r^
  c                       e Zd ZdgZy)#ParallelRangeNode.DummyIteratorNoderU   Nr  r2   r3   r4   DummyIteratorNoder
  Q(  s	    hr3   r
  c                 j    t        |   |fi | | j                  || j                        | _        y )Nrz  )rj   r   r
  rU   r  )r   r9   rV   rN   s      r4   r   zParallelRangeNode.__init__T(  s2    %% ..s.Cr3   c                 |   t         |   |       | j                  j                  |       | j                  | j                  j                  |       | j
                  rt        | j
                        dkD  rt        | j                  d       y t        | j
                        dk(  r| j
                  \  | _	        nQt        | j
                        dk(  r| j
                  \  | _
        | _	        n| j
                  \  | _
        | _	        | _        | j                  dvr$t        | j                  d| j                         y y )Nr   z0Invalid number of positional arguments to pranger   r%   )Nstaticdynamicguidedruntimez%Invalid schedule argument to prange: )rj   r   rO  r  r\  rU   rK   r   r9   rk  rZ   r  r
  r  s     r4   r   z&ParallelRangeNode.analyse_declarationsZ(  s    $S)..s3'11#6yyC		NQ.$((NOtyy>QJDI^q $(II!DJ	/3yy,DJ	49== PP$((XY Qr3   c                 N	   |j                   }| j                   rd|_         | j                  t        | j                  d       | S | j                  j	                  |      | _        | j                  j
                  j                  sm| j                  j
                  j                  s7t        | j                  j                  d| j                  j
                  z         t        j                  | _
        n| j                  j
                  | _
        d| _        | j                  | j                  | j                  f}t        || j                        D ]  \  }}|	|j!                  |       |j
                  j                  st        |j                  d|z         J|j"                  s|j%                  |      }t'        | ||       t        j(                  | j                  |j
                        | _
         | j*                   | j*                  j-                  |      | _        t/        | j                  dd       }|r9| j                  j                  d f| j0                  | j                  j2                  <   t4        | Y  |      }|j6                  r|j8                  s!t        |j6                  j                  d       n|j8                  dk(  r!t        |j6                  j                  d	       nt|j6                  j
                  j:                  rT|j6                  j"                  r>|j6                  j=                  |      d
k  r t        |j6                  j                  d       |j6                  j?                  t        j@                  |      j%                  |      |_        |j                   r||_         |jB                  xr |jB                  jD                  |_#        |jF                  r|}|jB                  rE|jB                  jD                  r/|jB                  }|jB                  r|jB                  jD                  r/|j0                  jI                  |j0                         |jJ                  jI                  |jJ                         |jL                  jO                  |jL                         |S )NTz/prange() can only be used as part of a for loopzMust be of numeric type, not %s)rZ   rk  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  rO  r   r9   rx   rl  rq  r~  r
   r  
index_typer-  rZ   rk  r  rN  rv   r   rw  r   r  r\  rw   r   r  r  rj   r_
  r
  r  r^  r  r	  ri
  r`
  r
  r   r[
  r\
  ro	  )	r   r   r	  start_stop_steprW   rm   rI  ri
  rN   s	           r4   rw   z%ParallelRangeNode.analyse_expressionsn(  sh   II	::CI;;$((MNKkk66s;{{** ;;##//dkkoo7$++:J:JJL )::DO"kk..DO -
**dii:otzz: 	0JD$""3'yy++$(($AD$HI..s3DD$- #-"@"@OOTYY#0	0  '#//CCCHD t{{GT:26++//42GDT[[../w*3/>>==dnn((<>)+dnn((DF..%%,,..++..33C8A=dnn((*JK!^^55%%s,,:N3,? N ::!CI $ E0E0E  F--FMM$;$; --FMM$;$; %%d&6&67OO""4==1!!(()<)<=r3   c                     d}| j                   | j                  | j                  | j                  | j                  f}| j                  |||       y )N)rZ   rk  r  rO  r^
  )rZ   rk  r  rO  rX
  r
  )r   r   r-  r
  s       r4   r   zParallelRangeNode.nogil_check(  s?    C

DIItyy$++t?W?WW$$S%7r3   c                    | j                  |       | j                  j                  j                  }|| j                  j                  j                         d}| j                  | j                  | j                  f}d}t        || j                  |      D ]N  \  }}}||}	n>|j                  r|j                         }	n!|j                  |       |j                         }	|	||<   P | j                  | j                  j                  |       |j                   j#                  | j$                  d      |d<   |j                   j#                  | j$                  d      |d<   | j                  J| j                  j'                         r0| j                  j(                  dk(  rt+        j,                  d       n8|d	   j/                         rt1        |d	         dk(  r|j3                  d
|z         | j5                  |       |j6                  j9                  t;        j<                  dd             |j3                  d|z         |j3                  d|z         |j?                          | jA                  ||       |jC                          | jE                  |       | jF                  rz| jH                  r"|jK                  dtL        jN                  z         |j?                          |j3                  d       | jF                  jQ                  |       |jC                          | jS                  |       || jT                  | j                  fz   D ]'  }
|
|
jW                  |       |
jY                  |       ) |j                   j[                  |d          |j                   j[                  |d          | j]                  |       y)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
        )rO  r=  )r  r  r  NFr  nstepsr   z!Iteration with step 0 is invalid.r  zif (((%(step)s) == 0)) abort();IncludeStdlibHrh	  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 */)/ry
  rO  r  r  rl  r.  rZ   rk  r  rN  r-  r   r  r?  r   rX
  r$  r%  r
  r  r  r   r9   isdigitr  rS   r
  r  r  r   r  r	  generate_loopr	  r
  r\  r
  r  r	   r
  r  r
  r_
  r  rL  r-  r{
  )r   rX   target_index_cnamefmt_dictr
  defaultsrW   rm   rZ  r   r.  s              r4   r  z)ParallelRangeNode.generate_execution_code(  s   P 	%%d+ "[[..44
 );;++BBD
 **dii: #&

H#M 		$D$| 88:--d3#HTN		$ ##/$$==dC44T__eL!^^99$//5Q 99 TYY%B%B%DIbIbfgIg$((?@&!))+s8F3C/D/IJJ88CD..t4 	))+*A*ABRTg*hi

hksst 	

(8344*D!'')<)<<=JJ|$44T:NN 	,,T2 $t~~t7O7O&PP 	&D++D1%	&
 	##HSM2##HX$67%%d+r3   c                 ~   | j                   r|j                  d       n|j                  d       | j                  s=|j                  d       |j	                         | _        | j                  j
                  }n|j                  d       | j                  ,|j                  d| j                  j                         z         |j	                         | _        | j
                  }|j                  d       |j                  d       |j                          | j                  |       | j                   r|j                  d       n|j                  d       |j                  d       t        | j                  j                               D ]  \  }}|rm|dv ri|| j                  j                  k7  rP|j                   j"                  rt%        | j&                  d	       R|j                  d
|d|j(                  d       u|j                   j"                  r|j                  d|j(                  z         |j                  d|j(                  z          | j*                  rO| j,                  r d| j/                  || j,                        z  }nd}|j                  d| j*                  |d       | j1                  |       |j                  d       |j                  d       |j                  d|z         |j                          |j	                         }|j                          |j                  d|z         | j                  r&| j                   s|j2                  j5                          | j6                  j9                  |       | j;                  |d       | j                  r| j                   s| j=                  |       | j>                  r"|j                  dt@        jB                  z         |jE                          |jE                          | j                  r"| jG                  |       |jE                          y y )Nz#if 0r
  z#pragma omp forz#pragma omp parallelz if(%s)r   r
  z+*-&^|z#Python objects cannot be reductionsz reduction(r   rh  r}
  z lastprivate(%s)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);T)r
  r
  )$r
  rS   rg
  r  rO   r
  ri
  rX
  r   r	  r
  rw
  r[
  ri   rO  r  rl  r~  r   r9   r  r
  r_
  rs
  ru
  r$  r
  r   r  r
  r
  r
  r	   r
  r	  r
  )r   rX   r
  reduction_codepointr  r|  r_
  guard_around_body_codepoints           r4   r
  zParallelRangeNode.generate_loopC)  sD     JJwJJ'(HH&'151E1E1GD."&++"K"KHH+,''3T%=%=%D%D%FFG151E1E1GD."&"D"DJJrNJJ-. %%d+$$

7#

+,HH&' 3 3 56 	?IE2bHn$++2C2C)C::))$(($IJ (++795;; GI zz--HH05;;>?HH/%++=>	? ==~~"T%?%?dnn%UU		HH$--CD01

2

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

RU]]^D$9$9NN113		))$/48D$9$9  &## (--mf>Q>Q.QR##D)NN r3   )r,   r-   r.   r   r   r   rO  r\  rU   rZ   rk  r  r`
  r  r
  rb
  r   r
  r   r   rw   r   r  r
  rr   rs   s   @r4   r
  r
  ;(  sz    7K *.-D-6-K$ED4IEHaD DZ(Tl8
x,t\r3   r
  c                   4    e Zd ZdZdgZd Zd Zd Zd Zd Z	y)	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
    rW   c                    | j                   j                  |       | j                   }t        |t              r|j                  j
                  d   }t        |t        t        f      | _        t        |t        t        f      }|j                  }| j                  rf| j                  |_        | j                  |_        d|_        |j                  r0d|j                  v r!| j!                  |j                        |_        y y y |r#| j                  x|_        |j"                  _        y |j$                  }| j                  |_        | j                  dz   |j"                  _        t(        j*                  | j                  z   |j"                  _        | j                  dz   |j"                  _        |j"                  j.                  |j"                  j$                  _        |j"                  j.                  |j2                  _        | j                  dz   |_        |j6                  j9                         D ]^  \  }}|j                  r | j!                  |j                        |_        |j                  s?| j!                  |j                        |_        ` y )Nr   TrH   _obj_typer  )rW   r   rL   r   r   r!  r@  r=  is_functionr  r  r  r  r  r  r  r
  rl  r  r  r	   typeobj_prefixr  r  r  r`  r  r  ri   )r   r   rW   is_struct_or_enumr  r  rm   r  s           r4   r   z'CnameDecoratorNode.analyse_declarations)  s   		&&s+yyd2399??1%D%d[+,FG&t.C\-RSJJjjAG::ALAF~~#"7!%Q^^!< #8~%)ZZ/AGafflJJEjjAG%)ZZ&%8AFF"#)#8#84::#EAFF #'::#7AFF +,66+?+?AFFLL("#&&"6"6AMM!%c!1E$}}224 Ie##'+{{5;;'?E$%%)-U5G5G)HE&	Ir3   c                 T    d|v r|j                  d      d   }| j                  d|S )NrH   r   r  )r  r  )r   r  s     r4   r
  zCnameDecoratorNode.mangle)  s+    %<KK$R(E**e,,r3   c                 F    | j                   j                  |      | _         | S r   )rW   rw   r   s     r4   rw   z&CnameDecoratorNode.analyse_expressions)  r  r3   c                    | j                   r|j                  r|j                  d   }t        | j                  t
              r| j                  j                  |dd       ncddlm} | j                  j                  }|j                  }|j                  |_
        |j                  ||j                         |d       ||_
        | j                  j                  ||       y)	z=Ensure a prototype for every @cname method in the right placeutility_code_protoFTrd  r   )
ModuleNode)
definitionN)r
  r  r  rL   rW   r_  r  r   r
  r  r  r  generate_cfunction_declarationr  r  )r   r   rX   h_coder
  r  r  s          r4   r  z0CnameDecoratorNode.generate_function_definitions)  s     4 4%%&:;F$))W-		225T 3 C )		#..99$$&#	 : % $		//T:r3   c                 :    | j                   j                  |       y r   )rW   r  r   s     r4   r  z*CnameDecoratorNode.generate_execution_code)  r  r3   N)
r,   r-   r.   r   r   r   r
  rw   r  r  r2   r3   r4   r
  r
  )  s+     (K$IL-;20r3   r
  c                       e Zd ZdZg Zy)	ErrorNodez
    Node type for things that we want to get through the parser
    (especially for things that are being scanned in "tentative_scan"
    blocks), but should immediately raise and error afterwards.

    what    str
    N)r,   r-   r.   r   r   r2   r3   r4   r  r  )  s     Kr3   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PrintOnerf	  rH  RaiseExceptionGetExceptionSwapExceptionSaveResetExceptionAddTracebackr2   )r1
  r  rd  r   	itertoolsr   enumr   r   Errorsr   r   r   r   r   r	   r
   r   r   r   r.  r   r   r   r   r   r   r   r   r   r   r   rg   r   StringEncodingr   r   r    r!   Pythranr"   r#   r$   Utilsr&   r'   r  IntEnumr+   r:   rD   r_   rl  ra   ru   r   r   r   r   r   r   r4  r9  rR  rY  rt  r  r  r  r  r  r  r  r[  r8  rb  ry  r  r0  r  r  r  r  r=  r  r  r  r0  r:  r@  r  r  r^  r_  r  r   r  r  r  r  re  rY  r]  r|  r  r   r+  r3  rH  rJ  rY  r  rS  r  r  r  r  r=  r  r	  r  rp  r&  rC  rO  rZ  ri  rq  r|  r  r  r  r  r  r  r  r  r  r	  r	  r%	  rU	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r
  r 
  r
  r
  r+
  rB
  rT
  rV
  r
  r
  r
  r  gcc_branch_hintsbranch_prediction_macrosr  r  r  r  r;  rr	  r	  r;	  traceback_utility_coder2   r3   r4   <module>r     s     "& "v "V ""%+"5;"DJ"W]"$"28"EK"Z`" #)" 8>" $	" 28	" HN	"
 !"     Q Q    2: : : :  )    D D 0 -.AB  644
8 
88T 84 ( lW lW lW^2*T 2*j: :" 4 " J%t %*%!X %!Pd 2 /  Fi i$-O -i< ii'D i0k? 0kfqM/ qMh
f? 
fm!4 m!`	!D 	!D e- eN"
m "
J- ,B BJ	= 	 $$;M $;NZ} ZpH( pHf*H *ZZ!() Z!zX*8 X*v(6x (6V8 Bk.(I k.\A; AH<D < D  K	k K	\Q*[ Q*h8<w 8<v# 
!< !
< 
M 7 M `{ {|	8Y 	r!\ r!je	%L e	%P!8 !8#!H #!L $8 $=!8 =!@",X ",JH > H V
h ^ h V/ ^ / dDQN DQN@&H @&F&8 &R5( 5p
$8 
$4l 4,H , +x + l&X l&^@&H @&F.h .>/&X /&d-, -,`&!4 &!R!!X !!H,,X ,,^	 	9,Hh 9,xYD Yx9 4 9 x*`!Xx `!F,N ,?~ ?(m,h m,`f8 fR >  Bh, h,VU!t U!pQ+ Q+h0 U) Up]( ]84K 4n=0 n=b
h 
I+ IXc#: cS ba6 2*,h *,ZQ,( Q,hZ% Z%z4 f
Cx f
CTGZ, GZTd( dNZ0 Z0z " 
   0//F 3K33JM  "9!8!89Ln!] ,[,,-=~N 4[44^^T 5k55o~V 6{667K^\ 000P r3   