
    h                       S SK r \ R                  " GS0 S\_S\_S\_S\_S\_S\_S\_S	\_S
\_S\_S\_S\_S\_S\_S\_S\_S\_S\_6  S SKrS SKJr  S SKrSSKJr  SSK	J
r
JrJrJrJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SSKJrJrJrJrJrJrJrJrJrJrJr  SSK J!r!  SSK"J#r#  SSKJ$r$  SS KJ%r%  SS!KJ&r&  SS"K'J(r(J)r)J*r*  S#S$K+J,r,J-r-  S%S&1r. " S' S(\R^                  5      r0S) r1S* r2S+ r3 " S, S-\45      r5 " S. S/\45      r6S0 r7\7 " S1 S25      5       r8 " S3 S4\85      r9 " S5 S65      r: " S7 S8\85      r; " S9 S:\85      r< " S; S<\<5      r= " S= S>\85      r> " S? S@\>5      r? " SA SB\>5      r@ " SC SD\>5      rA " SE SF\A5      rB " SG SH\A5      rC " SI SJ\>5      rD " SK SL\>5      rE " SM SN\>5      rF " SO SP\85      rG " SQ SR\85      rH " SS ST\85      rI " SU SV\H5      rJ " SW SX\H5      rK " SY SZ\H5      rL " S[ S\\H5      rM " S] S^\H5      rN " S_ S`\H5      rO " Sa Sb\H5      rP " Sc Sd\H5      rQ " Se Sf\<5      rR " Sg Sh\<5      rS " Si Sj\S\:5      rT " Sk Sl\<5      rU " Sm Sn\<5      rV " So Sp\<5      rW " Sq Sr\<\:5      rX " Ss St\X5      rY " Su Sv\85      rZ " Sw Sx\85      r[ " Sy Sz\X5      r\ " S{ S|\X5      r] " S} S~\\5      r^ " S S\^5      r_ " S S\_5      r` " S S\_5      ra " S S\\5      rb " S S\<5      rc " S S\<\:5      rd " S S\d5      re " S S\d5      rf " S S\<5      rg " S S\<5      rh " S S\<5      ri " S S\<5      rj " S S\<5      rk " S S\<5      rl " S S\l5      rm " S S\l5      rn " S S\l5      ro " S S\l5      rp " S S\<5      rq " S S\<5      rr " S S\<5      rs " S S\<5      rt " S S\;5      ru " S S\<5      rv " S S\<5      rw " S S\<5      rx " S S\<5      ry " S S\<5      rz " S S\<5      r{ " S S\<5      r| " S S\85      r} " S S\<5      r~ " S S\<5      r " S S5      r " S S\\<5      r " S S\85      r " S S\85      rS r " S S\\<5      r " S S\5      r " S S\5      r " S S\\<5      r " S S\<5      r " S S\l5      r " S S\<5      r " S S\85      r " S S\<5      r " S S\5      r " S S\5      r " S S\<5      r " S S\5      r " S S\5      r " S S\<5      r " S S\5      r " S S\<5      rS rS S \S.rS r " S S\<5      r " S S\<5      r " S S\<5      r " S S\85      r " S S\<\5      r " S S\5      r " S S\5      r " S GS \<5      r " GS GS\85      r\%GRD                  (       a  GSrOGSr\!GRH                  " GSGS5      r\!GRH                  " GSGS5      r\!GRH                  " GSGS	5      r\!GRH                  " GS
GS	5      r\!GRH                  " GSGS	5      r\!GRH                  " GSGS	5      r\!GRH                  " GSGS	5      r\!GRH                  " GSGS	5      rg(      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                        \ rS rSrSrSrSrSrg)
NoGilState(   r   r   r%    N)__name__
__module____qualname____firstlineno__HasGilNoGil
NoGilScope__static_attributes__r-       O/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/Nodes.pyr+   r+   (   s    FE Jr6   r+   c                 2    U S   R                  5       U S   4$ Nr   r   )get_filenametable_entryposs    r7   relative_positionr=   0   s    F**,c!f55r6   c                 &   [         R                  (       d  U$ S[        U 5      -  nUc  [        U5      $ UR                  nUb   UR                  U5        U(       d  [        U5      nO[        US-   U-   5      nX4l        U$ ! [         a    S n N:f = f)NzFile: %s (starting at line %s)
)r    embed_pos_in_docstringr=   r   encodingencodeUnicodeEncodeError)r<   	docstringpos_linerA   docs        r7   embed_positionrG   4   s    ))/2CC2HHHX&& !!H	OOH% H%HtOi78LJ " 	H	s   B BBc                    ^ ^ UU 4S jnU$ )Nc            
        > [        U 5      S:  Ga)  [        U S   T5      (       Ga  U S S u  p#SSUR                  -  < SUR                  R                  < ST	R                  < SUR
                  SS  < S3	nUR                  5       nUR                  R                  R                  5       nU=R                  S-  sl        T	" U 0 UD6nU=R                  S-  sl        XcR                  R                  R                  5       :w  a3  UR                  UR                  S	S
S5      5        UR                  U5        U$ T	" U 0 UD6$ )Nr   r%   z                    /*  z -> .z */   ->z<-)len
isinstance
call_level	__class__r.   r<   insertion_pointbufferstreamtellputlnreplace)
argskwdsnodecodemarkerrR   startrescodewriter_classfuncs
           r7   fwrite_func_call.<locals>.fO   s   t9q=ZQ1ABB bqJD$doo%''	F #224OKK&&++-EOOq O%%COOq O**//11

6>>$a89%%f-J&&&r6   r-   )r`   r_   ra   s   `` r7   write_func_callrc   N   s    ', Hr6   c                   (   ^  \ rS rSrU 4S jrSrU =r$ )VerboseCodeWriterh   c                    > SSK Jn  SSKJn  [	        U5      nUR                  5        H$  u  pg[        Xt5      (       d  M  [        Xu5      X6'   M&     [        TU ]%  XX#5      $ )Nr   FunctionTyper   )CCodeWriter)
typesri   Coderj   dictitemsrO   rc   super__new__)	clsnamebasesattrsri   rj   mnamemrQ   s	           r7   rp   VerboseCodeWriter.__new__k   sN    &%UHE!**.q> & ws%77r6   r-   )r.   r/   r0   r1   rp   r5   __classcell__rQ   s   @r7   re   re   h   s    8 8r6   re   c                   @   ^  \ rS rSrSr\" 1 Sk5      rU 4S jrSrU =r	$ )CheckAnalysersu   zCMetaclass to check that type analysis functions return a node.
    >   analyse_typesanalyse_expressionsanalyse_target_typesc                    > SSK Jn  S n[        U5      nUR                  5        H2  u  pg[	        Xt5      (       d  M  X`R
                  ;   d  M(  U" Xg5      X6'   M4     [        TU ]  XX#5      $ )Nr   rh   c                    ^ ^ UU 4S jnU$ )Nc                  J   > T" U 0 UD6nUc  [        T< SU < SU< 35        U$ )NrJ   )print)rX   kwargsretvalr`   rr   s      r7   call3CheckAnalysers.__new__.<locals>.check.<locals>.call   s+    t.v.>dF;<r6   r-   )rr   r`   r   s   `` r7   check%CheckAnalysers.__new__.<locals>.check   s    
 Kr6   )rk   ri   rm   rn   rO   methodsro   rp   )	rq   rr   rs   rt   ri   r   ru   rv   rQ   s	           r7   rp   CheckAnalysers.__new__~   sZ    &	 UHE!**u/C$U & ws%77r6   r-   )
r.   r/   r0   r1   __doc__	frozensetr   rp   r5   rx   ry   s   @r7   r{   r{   u   s!      G8 8r6   r{   c                 Z    [         R                  (       a  [        [        5      " U 5      $ U $ N)r!   debug_trace_code_generationr&   re   )rq   s    r7   _with_metaclassr      s!    --./44Jr6   c                       \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSrS rSrSrSrSS jrSrS rS	 rS
 rS rS rS rS rS rSS jrSS jr Sr!g)Node   r   FNc                 F    Xl         U R                  R                  U5        g r   )r<   __dict__update)selfr<   kws      r7   __init__Node.__init__   s    R r6   	Operationc                 J    [        U R                  SU R                  -  5        g )Nz%s not allowed without gil)r   r<   gil_messager   envs     r7   	gil_errorNode.gil_error   s    dhh4t7G7GGHr6   c                 P    UR                  5       (       d  U R                  5         g g r   )is_cpp	cpp_errorr   s     r7   	cpp_checkNode.cpp_check   s    zz||NN r6   c                 J    [        U R                  SU R                  -  5        g )Nz%s only allowed in c++)r   r<   cpp_messager   s    r7   r   Node.cpp_error   s    dhh043C3CCDr6   c           	          [         R                   " U 5      nUR                   HA  n[        X5      n[        U[        5      (       d  M%  [        XU Vs/ s H  oDPM     sn5        MC     U$ s  snf )a7  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getattrrO   listsetattr)r   resultattrnamevaluexs        r7   
clone_nodeNode.clone_node   s]     4**HF-E%&&e*<e1e*<= +  +=s   A*c                     g r   r-   r   s     r7   analyse_declarationsNode.analyse_declarations       r6   c                 F    [        SU R                  R                  -  5      e)Nz*analyse_expressions not implemented for %sr   rQ   r.   r   s     r7   r~   Node.analyse_expressions   s$    HNN##$ % 	%r6   c                 F    [        SU R                  R                  -  5      e)Nz$generate_code not implemented for %sr   r   r[   s     r7   generate_codeNode.generate_code   s$    BNN##$ % 	%r6   c                 f    [        U [        5      (       a  U R                  R                  U5        g g r   )rO   	BlockNodebodyannotater   s     r7   r   Node.annotate   s&    dI&&IIt$ 'r6   c                     U R                   $ ! [         a    U R                  nU R                  (       d
  Xl         Us $ U R                   He  n[	        X5      nUc  M  [        U[        5      (       a$  U H  n[        XR                  5       5      nM     ML  [        XR                  5       5      nMg     Xl         Us $ f = fr   )	_end_posAttributeErrorr<   r   r   rO   r   maxend_pos)r   r<   attrchildcs        r7   r   Node.end_pos   s    	==  	((C## #
((+=t,,"!#yy{3 # c==?3C )  MJ!	s    /B?A=B?>B?c                 l  ^^^^
 TS:X  a  gTc
  [        5       m[        U 5      T;   a$  SU R                  R                  [        U 5      4-  $ TR	                  [        U 5      5        UU
UU4S jm
U R
                  R                  5        VVs/ s H  u  pVUT;  d  M  XV4PM     nnn[        U5      S:X  a$  SU R                  R                  [        U 5      4-  $ SU-  nSU R                  R                  [        U 5      4-  n	U H  u  pVX< SU< ST
" XaS	-   5      < S
3-  n	M      U	SU-  -  n	U	$ s  snnf )zYDebug helper method that returns a recursive string representation of this node.
        r   z<...nesting level cutoff...>z<%s (0x%x) -- already output>c           
         > [        U [        5      (       a  U R                  UTTS-
  T5      $ [        U [        5      (       a+  SSR	                  U  Vs/ s H  nT" X!5      PM     sn5      -  $ [        U 5      $ s  snf )Nr   z[%s], )rO   r   dumpr   joinrepr)r   levelitemcutoff
dump_childencountered
filter_outs      r7   r   Node.dump.<locals>.dump_child   sm    !T""vveZ;GGAt$$		q*Qqt:d+Bq*Q RRRAw +Rs   A9
z<%s (0x%x)>z  z<%s (0x%x)
: r   r?   z%s>)setidrQ   r.   addr   rn   rN   )r   r   r   r   r   keyr   rt   indentr^   r   s     ```     @r7   r   	Node.dump  s#    Q;1%Kd8{"2dnn6M6MrRVx5XXX4!	 	 150C0C0E_0E*#T^I^#0E_u:? DNN$;$;RX#FFFE\F DNN$;$;RX#FFC#
jPQ	6RSS $56>!CJ `s   D0D0c                 B   U R                   (       d  gU R                   u  p4nUR                  SSS9nU[        SUS-
  5      U nUS   nU(       a  USU U-   XS -   nUR                  5       S	-   US'   XvXDS
-    -  nSUR	                  5       XESR                  U5      4-  $ )z[Debug helper method that returns the source code context of this node as a string.
         ASCIIignore)rA   error_handlingr      Nz             # <<<<<<<<<<<<<<
r%   z"%s":%d:%d
%s
)r<   	get_linesr   rstripget_escaped_descriptionr   )	r   mark_columnr\   source_desclinecolcontentslinescurrents	            r7   dump_posNode.dump_pos3  s     xx!%3(('((SQQ-)dsmf,wt}<GNN$'HHb	$Av&&!//14bggen%N N 	Nr6   )r   r<   r   )r   r;   d   N)Fz(#))"r.   r/   r0   r1   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   r~   r   r   r   r   r   r5   r-   r6   r7   r   r      s     GGLJMJL"E
 K KH M! KKI KEJ%%%
*<Nr6   r   c                   \    \ rS rSrSrS/r\S 5       r\S 5       rS r	S r
S rS	 rS
 rSrg)CompilerDirectivesNodeiE  z1
Sets compiler directives for the children nodes
r   c                 |    [         R                  " UR                  40 UD6nU " UR                  XUR                  S9$ N)r   
directivesr   )r    copy_inherited_directivesr
  r<   r   )rq   r   r   r
  new_directivess        r7   for_directives%CompilerDirectivesNode.for_directivesN  s5     ::3>>XZX488$QUQcQcddr6   c                 z    [         R                  " UR                  5      nU " UR                  XUR                  S9$ r	  )r    copy_for_internalr
  r<   r   )rq   r   r   r  s       r7   for_internal#CompilerDirectivesNode.for_internalS  s0     223>>B488$QUQcQcddr6   c                     UR                   nU R                   Ul         U R                  R                  U5        X!l         g r   )r
  r   r   r   r   olds      r7   r   +CompilerDirectivesNode.analyse_declarationsX  s-    nn		&&s+r6   c                     UR                   nU R                   Ul         U R                  R                  U5      U l        X!l         U $ r   )r
  r   r~   r  s      r7   r~   *CompilerDirectivesNode.analyse_expressions^  s6    nnII11#6	r6   c                     UR                   nUR                  R                   nU R                   UR                  l         U R                  R                  X5        X1l         XBR                  l         g r   )r
  globalstater   generate_function_definitions)r   r   r[   env_oldcode_olds        r7   r  4CompilerDirectivesNode.generate_function_definitionse  sQ    ..##..&*oo#		//: &.#r6   c                     UR                   R                  nU R                  UR                   l        U R                  R                  U5        X!R                   l        g r   )r  r
  r   generate_execution_coder   r[   r  s      r7   r   .CompilerDirectivesNode.generate_execution_codem  sC    ))&*oo#		))$/&)#r6   c                     UR                   R                  nU R                  UR                   l        U R                  R                  U5        X!R                   l        g r   )r  r
  r   r   r!  s      r7   r   CompilerDirectivesNode.annotates  sC    ))&*oo#		4 &)#r6   r   N)r.   r/   r0   r1   r   r   classmethodr  r  r   r~   r  r   r   r5   r-   r6   r7   r  r  E  sS     (Ke e e e/**r6   r  c                        \ rS rSrS rS rSrg)r   iz  c                     UR                  5       R                  nU H  nUR                  R                  U5        M      US S 2	 g r   )global_scopeundeclared_cached_builtinsr  add_cached_builtin_decl)r   r   r[   entriesentrys        r7   generate_cached_builtins_decls(BlockNode.generate_cached_builtins_decls}  s;    ""$??E44U; AJr6   c                 L    UR                    H  nUR                  X5        M     g r   )lambda_defsr  )r   r   r[   rZ   s       r7   generate_lambda_definitions%BlockNode.generate_lambda_definitions  s    OOD..s9 $r6   r-   N)r.   r/   r0   r1   r.  r2  r5   r-   r6   r7   r   r   z  s    :r6   r   c                   H    \ rS rSrS/r\S 5       rS rS rS r	S r
S rS	rg
)StatListNodei  statsc                     [        U 40 UD6nU$ r   )r5  )r<   r   r   rZ   s       r7   create_analysedStatListNode.create_analysed  s    C&2&r6   c                 L    U R                    H  nUR                  U5        M     g r   r6  r   r   r   stats      r7   r   !StatListNode.analyse_declarations  s    JJD%%c* r6   c                 r    U R                    Vs/ s H  nUR                  U5      PM     snU l         U $ s  snf r   )r6  r~   r<  s      r7   r~    StatListNode.analyse_expressions  s<     #'**.",$ ..s3",.
.s   4c                 L    U R                    H  nUR                  X5        M     g r   r6  r  r   r   r[   r=  s       r7   r  *StatListNode.generate_function_definitions  s    JJD..s9 r6   c                     U R                    H/  nUR                  UR                  5        UR                  U5        M1     g r   )r6  mark_posr<   r   r   r[   r=  s      r7   r   $StatListNode.generate_execution_code  s.    JJDMM$((#((. r6   c                 L    U R                    H  nUR                  U5        M     g r   r6  r   rG  s      r7   r   StatListNode.annotate      JJDMM$ r6   r6  N)r.   r/   r0   r1   r   staticmethodr8  r   r~   r  r   r   r5   r-   r6   r7   r5  r5    s6     )K +
:
/ r6   r5  c                        \ rS rSrS rS rSrg)StatNodei  c                     g r   r-   r   r   r[   s      r7   r  &StatNode.generate_function_definitions  r   r6   c                 F    [        SU R                  R                  -  5      e)Nz.generate_execution_code not implemented for %sr   r   s     r7   r    StatNode.generate_execution_code  s$    LNN##$ % 	%r6   r-   N)r.   r/   r0   r1   r  r   r5   r-   r6   r7   rP  rP    s    %r6   rP  c                   8    \ rS rSrS/rS rS rS rS rS r	Sr
g	)
CDefExternNodei  r   c                    UR                   nSUl         U R                  R                  U5        X!l         U R                  (       d  U R                  (       aq  U R                  R
                  nUR                  S   (       d  SnOU(       d  SnO[        S U 5       5      nUR                  U R                  U R                  U5        g g )Nr   preliminary_late_includes_cy28Fc              3   B   #    U  H  n[        U[        5      v   M     g 7fr   )rO   CVarDefNode).0rZ   s     r7   	<genexpr>6CDefExternNode.analyse_declarations.<locals>.<genexpr>  s     KUT:dK88Us   )	in_cincluder   r   include_fileverbatim_includer6  r
  alladd_include_file)r   r   old_cinclude_flagr6  lates        r7   r   #CDefExternNode.analyse_declarations  s    OO		&&s++ 5 5IIOOE>>"BCKUKK  !2!2D4I4I4P !6r6   c                 F    U R                   R                  U5      U l         U $ r   r   r~   r   s     r7   r~   "CDefExternNode.analyse_expressions  s    II11#6	r6   c                 :    U R                   R                  X5        g r   r   r  rR  s      r7   r  ,CDefExternNode.generate_function_definitions      		//:r6   c                     g r   r-   r   s     r7   r   &CDefExternNode.generate_execution_code  r   r6   c                 :    U R                   R                  U5        g r   r   r   r   s     r7   r   CDefExternNode.annotate      		4 r6   r%  Nr.   r/   r0   r1   r   r   r~   r  r   r   r5   r-   r6   r7   rW  rW    s%    
 (KQ$
;!r6   rW  c                   (    \ rS rSr/ rSrS rS rSrg)CDeclaratorNodei  r   c                     g r   r-   r   s    r7   declared_nameCDeclaratorNode.declared_name  s    r6   c                     g r   r-   r   s    r7   analyse_templates!CDeclaratorNode.analyse_templates  s    r6   r-   N)	r.   r/   r0   r1   r   calling_conventionrx  r{  r5   r-   r6   r7   rv  rv    s     Kr6   rv  c                   .    \ rS rSrS/rSrS rSS jrSrg)CNameDeclaratorNodei  defaultNc                     U R                   $ r   rr   r   s    r7   rx  !CNameDeclaratorNode.declared_name      yyr6   c                 @   U(       a  U R                   S:X  a  UR                  (       d"  UR                  (       d  UR                  (       a  [	        U R
                  S5        ODUR                  (       a  [	        U R
                  S5        OUR                  SSSS9U l         [        nUR                  (       a-  UR                  (       a   UR                  UR                  5      nXl        X4$ ! [         a&    [	        U R
                  SU R                   -  5         N8f = f)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)rr   is_ptris_array	is_bufferr   r<   is_voiddeclaration_coder   is_fusedfused_to_specific
specializer   type)r   	base_typer   nonempty
visibilityin_pxds         r7   analyseCNameDeclaratorNode.analyse  s    		R9#5#59L9Ldhh 78""dhh lm%66rqPQ6R	*	#"7"7!%001F1FG	 	 $ !dhhjii !!s   	C- --DD)rr   r  r   NF)	r.   r/   r0   r1   r   r  rx  r  r5   r-   r6   r7   r  r    s    
 +KGr6   r  c                   0    \ rS rSrS/rS rS rSS jrSrg)	CPtrDeclaratorNodei&  basec                 6    U R                   R                  5       $ r   r  rx  r   s    r7   rx   CPtrDeclaratorNode.declared_name+      yy&&((r6   c                 6    U R                   R                  5       $ r   r  r{  r   s    r7   r{  $CPtrDeclaratorNode.analyse_templates.      yy**,,r6   Nc                     UR                   (       a  [        U R                  S5        [        R                  " U5      nU R
                  R                  XbX4US9$ )Nz+Pointer base type cannot be a Python objectr  r  r  )is_pyobjectr   r<   r
   
c_ptr_typer  r  )r   r  r   r  r  r  ptr_types          r7   r  CPtrDeclaratorNode.analyse1  sG      $((IJ((3yy  ag hhr6   r-   r  )	r.   r/   r0   r1   r   rx  r{  r  r5   r-   r6   r7   r  r  &  s     (K)-ir6   r  c                   &    \ rS rSrS/rS rS rSrg)_CReferenceDeclaratorBaseNodei8  r  c                 6    U R                   R                  5       $ r   r  r   s    r7   rx  +_CReferenceDeclaratorBaseNode.declared_name;  r  r6   c                 6    U R                   R                  5       $ r   r  r   s    r7   r{  /_CReferenceDeclaratorBaseNode.analyse_templates>  r  r6   r-   N)r.   r/   r0   r1   r   rx  r{  r5   r-   r6   r7   r  r  8  s    (K)-r6   r  c                       \ rS rSrSS jrSrg)CReferenceDeclaratorNodeiB  Nc                     UR                   (       a  [        U R                  S5        [        R                  " U5      nU R
                  R                  XbX4US9$ )Nz-Reference base type cannot be a Python objectr  )r  r   r<   r
   
c_ref_typer  r  r   r  r   r  r  r  ref_types          r7   r   CReferenceDeclaratorNode.analyseC  sG      $((KL((3yy  ag hhr6   r-   r  r.   r/   r0   r1   r  r5   r-   r6   r7   r  r  B      ir6   r  c                       \ rS rSrSS jrSrg) CppRvalueReferenceDeclaratorNodeiJ  Nc                     UR                   (       a  [        U R                  S5        [        R                  " U5      nU R
                  R                  XbX4US9$ )Nz4Rvalue-reference base type cannot be a Python objectr  )r  r   r<   r
   cpp_rvalue_ref_typer  r  r  s          r7   r  (CppRvalueReferenceDeclaratorNode.analyseK  sG      $((RS11)<yy  ag hhr6   r-   r  r  r-   r6   r7   r  r  J  r  r6   r  c                   &    \ rS rSrSS/rSS jrSrg)CArrayDeclaratorNodeiR  r  	dimensionNc                    UR                   (       a  UR                  5       (       d"  UR                  (       d  UR                  (       a  SSKJn  [        U R                  U5      (       a  U R                  R                  nOU R                  4nU Vs/ s H  oR                  U5      PM     n	nS U	;   a0  U	R                  S 5      n
[        Xz   R                  S5        [        nOUR                  U R                  X)5      nU R                  R!                  XX4US9$ U R                  (       a  U R                  R#                  U5      U l        U R                  R$                  R&                  (       d   [        U R                  R                  S5        U R                  R$                  R(                  (       aD  U R                  R*                  R,                  S:w  a   [        U R                  R                  S5        U R                  R/                  5       nUb   [1        U5      nOOS nUR5                  5       (       d  [        U R                  SU-  5        UR6                  (       a  [        U R                  S	5        UR                  (       a  [        U R                  S
5        [8        R:                  " X5      nU R                  R!                  XX4US9$ s  snf ! [2         a     Nf = f)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  rO   r  rX   analyse_as_typeindexr   r<   r   specialize_herer  r  analyse_const_expressionr  is_intis_constr-  r  get_constant_c_result_codeint
ValueErroris_completer  r
   c_array_type)r   r  r   r  r  r  r  rX   vvaluesixsize
array_types                r7   r  CArrayDeclaratorNode.analyseX  s$   ##	(B(B(D(D&&66,$..)44~~**~~6:;d'',dF;v~\\$'dhll$CD&	%55dhhL	99$$Yhfl$mm>>!^^DDSIDN>>&&--dnn((*GH~~""++0D0D0O0OS[0[dnn((*TU>><<>Dt9D   D$$&&$((CiOP  $((EF!!$((@A,,Y=
yy  8ci jj? <& " s   KK 
K&%K&)r  r  r.   r/   r0   r1   r   r  r5   r-   r6   r7   r  r  R  s     ;'K(kr6   r  c                   L    \ rS rSr/ SQrSrSrSrSrS r	S r
S
S jrSS jrS	rg)CFuncDeclaratorNodei  )r  rX   exception_valuer   Nc                 6    U R                   R                  5       $ r   r  r   s    r7   rx  !CFuncDeclaratorNode.declared_name  r  r6   c                 >   [        U R                  [        5      (       a  SSKJnJn  U R                  R                  n[        X15      (       a  UR                  nO+[        X25      (       a  U/nO[        UR                  S5        g / U l
        U Hd  n[        XR5      (       a;  U R                  R                  [        R                  " UR                  5      5        MN  [        UR                  S5        Mf     U R                  R                  U l        U R                  $ g )Nr   )r  NameNodez*Template arguments must be a list of names)rO   r  r  r  r  r  r  rX   r   r<   	templatesappendr
   TemplatePlaceholderTyperr   )r   r  r  template_nodetemplate_nodestemplates         r7   r{  %CFuncDeclaratorNode.analyse_templates  s    dii!5666 II//M-33!.!3!3M44"/m'')UVDN*h11NN))**L*LX]]*[\(,,(TU	 +
 		DI>>!r6   c                 R  ^ ^ Uc  0 nU(       a  US-  n/ n[        T R                  5       GHO  u  pU	R                  TUUS:H  =(       a"    TR                  =(       a    STR                  ;  S9u  pU
R
                  nX;   a  XL   nUR                  T5      nUc  [        UR                  S5        ObU[        R                  LaM  UR                  U5      (       d7  [        T R                  R                  S5        [        UR                  S5        OUnU
R                  (       a  [        T R                  S5        US:X  a.  TR                  (       a  UR                  (       a  TR                  nUR                   (       a   [        R"                  " UR$                  5      nUR&                  (       a  [        U	R                  S	5        [        R(                  " XU	R                  5      nU	R*                  (       a  S
Ul        U	R,                  (       a  S
Ul        UR/                  U5        U	R0                  (       a  T =R2                  S-  sl        GM%  T R2                  (       d  GM9  [        T R                  S5        GMR     S nSnTR                  S   (       aU  UR4                  (       dD  T R6                  (       d3  T R8                  (       a"  US:w  a  ST l        [;        T R                  SSS9  T R8                  S:X  aE  TR=                  S5        TR=                  S5        TR=                  S5        TR=                  S5        O)UR4                  (       a  T R8                  (       a  ST l        UR4                  (       aJ  T R>                  (       d  T R8                  (       a(  T R8                  S:w  a  [        T R                  S5        GOqUR4                  (       aA  T R8                  (       d0  US:w  a*  T R6                  (       a  [;        T R                  SS5        GOT R>                  c  T R8                  (       a  T R8                  S:w  a  UR>                  b  US:w  a{  U(       dt  TR                  (       dc  [A        T R                  [B        5      (       dD  SSK"J#n  URI                  T R                  [K        UR>                  5      UUR>                  S9T l        T R>                  GbI  T R8                  S:X  a  T R>                  RM                  T5      T l        T R>                  RN                  nURP                  (       d  UR4                  (       d  URR                  (       a,  URT                  R4                  (       d  UR                  (       aN  U[        RV                  :X  a  T R>                  RX                  S:X  d   [        T R>                  R                  S5        T R>                  nGOHT R>                  R[                  T5      R]                  UT5      RM                  T5      T l        T R>                  R_                  T5      nURa                  T R>                  RN                  5      (       d   [        T R>                  R                  S5        US:w  a  URb                  (       d  URd                  (       a|  T R>                  Rg                  5       (       a]   [i        URj                  5      nT R>                  Rl                  U:X  a-  [;        T R                  ST R>                  Rl                  -  5        T R8                  nURR                  (       a  [        T R                  S5        [        Rp                  " XT Rr                  T R2                  UUT R                  Rt                  T Rv                  T Rx                  T Rz                  T R|                  T R~                  S 9nT R2                  (       a2  UR                  (       a  UU 4S! jnUUlA        OT R                  UT5        TR                  S"   nU(       a?  URt                  nU(       a%  UU:w  a  [        T R                  S#U< S$U< S%35        UUl:        URT                  R                  (       a  [;        T R                  S&S5        UR                   HN  nURN                  R                  (       d  M   UR                  5       (       a  M7  [;        T R                  S'S5        MP     T R                  R                  UTXVS(9$ ! [n         a     GNf = f))Nr   r   rN  r  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   r  constant_result*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_checkr}  nogilwith_gilis_overridableis_const_methodr  c                 ,   > TR                  U TU5        g r   )declare_optional_arg_struct)	func_typefused_cnamer   r   s     r7   declare_opt_arg_struct;CFuncDeclaratorNode.analyse.<locals>.declare_opt_arg_struct>  s    44Y[Qr6   callspeczcannot have both 'z' and 'z' calling conventionsz6Rvalue-reference as function return type not supportedz3Rvalue-reference as function argument not supportedr  r  )E	enumeraterX   r  is_c_class_scoper
  rr   r  r   r<   r
   r   same_asr  cnameis_unspecifiedparent_typer  r  r  r  CFuncTypeArgnot_noneor_noner  r  r  r  has_explicit_exc_clauser  r   rc  r  rO   r  r  r  for_typestrr  r  is_errorr  return_typec_char_typer   r}   	coerce_toas_exception_valueassignable_fromr  is_floathas_constant_resultfloatdefault_valuer  r  	CFuncTypehas_varargsr}  r   r  overridabler  r  r  r  r  is_rvalue_referenceis_forwarding_reference)r   r  r   r  directive_localsr  r  func_type_argsiarg_nodename_declaratorr  rr   	type_node
other_typefunc_argexc_val	exc_checkr  exc_val_typetype_default_valuer  r  r
  r   args   ` `                       r7   r  CFuncDeclaratorNode.analyse  s   #!MH$TYY/KA$,$4$4h!Ve(<(<eWZWeWeAe %5 %h!O #''D',2	&66s;
%)--6*";";;"ll:66$))--)]^)--)DE%D$$dhh TUAv#..43F3F}}!,,T^^<||hll$pq!..t8<<HH  $(!#' !!(+''1,''(((dhh OPI 0L 	NN56#//44(((*#(D DHHO
 3&  '  '  -  ,$$)=)= $)D ##))T-A-A((C/$((_`$$T-A-AjT\F\aea}a}DHH_abc##+0D0DI]I]adId  //;xAW`f //
499N`8a8a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Qd2266VX"h.!,!3!3{7K7K $ 4 4 H H J 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+++C4O4O4Q4Q"WYZ[ " yy  CJ VVY  * ! !s   d 
d&%d&c           	         [        5       nS[        R                  -  nUR                  U[        R
                  U R                  5        UR                  [        UR                  5      U R                  -
  S  H4  nUR                  UR                  UR                  UR                  SSS9  M6     UR                  [        R                  U R                  R                  5      nUb  [        R                  " X75      nUR!                  5       R#                  USUSU R                  US9nSUl        SUl        [        R(                  " UR                  5      Ul        g)	z
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   )rr   kindscopetypedef_flagr<   r  r   )r   r	   pyrex_prefixdeclare_varr
   
c_int_typer<   rX   rN   r  rr   r  mangleopt_arg_prefixr  get_fused_cnamer)  declare_struct_or_uniondefined_in_pxdusedr  op_arg_struct)	r   r  r   r  r:  arg_count_memberr3  struct_cnameop_args_structs	            r7   r  /CFuncDeclaratorNode.declare_optional_arg_structU  s!    #$ 6#6#66*J,A,A488L>>#inn"58O8O"O"PQCchh#''$aef R zz&"7"7H"%55kPL))+CC D   )*%","7"78K8K"L	r6   )r  r  r  r  )r   NNFr   )r.   r/   r0   r1   r   r$  r  r  r  rx  r{  r  r  r5   r-   r6   r7   r  r    s6     6KKOI),dWLMr6   r  c                   $    \ rS rSrS/rSS jrSrg)CConstDeclaratorNodeiv  r  Nc                     UR                   (       a  [        U R                  S5        [        R                  " U5      nU R
                  R                  XbX4US9$ )Nz)Const base type cannot be a Python objectr  )r  r   r<   r
   c_const_typer  r  )r   r  r   r  r  r  consts          r7   r  CConstDeclaratorNode.analyse{  sI      $((=?''	2yy  h^d eer6   r-   r  r  r-   r6   r7   rK  rK  v  s     (Kfr6   rK  c                       \ rS rSr/ SQrSS/rSrSrSrSr	Sr
SrSrSrSrSrSrSrSrSrSrS	 r\S
 5       r\S 5       rSS jrS rS rS rSS jrSrg)CArgDeclNodei  )r  
declaratorr  
annotationr  rS  r   r   FNc                 6    U R                   R                  5       $ r   rR  rx  r   s    r7   rx  CArgDeclNode.declared_name      ,,..r6   c                 6    U R                   R                  5       $ r   )rr   as_c_string_literalr   s    r7   name_cstringCArgDeclNode.name_cstring  s    yy,,..r6   c                     U R                   (       a0  [        [        R                  U R                  R
                  -   5      $ [        [        R                  U R                  R
                  -   5      $ r   )needs_conversionr   r	   
arg_prefixr-  rr   
var_prefixr   s    r7   	hdr_cnameCArgDeclNode.hdr_cname  sI       "6#4#4tzz#FGG"6#4#4tzz#FGGr6   c                 x   U(       a  U=U R                   l        U l        U R                  b  U R                  U R                  4$ [	        U R
                  [        5      (       a  U R
                  R                  S:X  a  U(       a  U R                   R                  (       a+  U R                   R                  USS9nUR                  5       nOU R                   R                  n[        U5      U R
                  l        S U R                   l        SU R                   l        SnOSnSU R                   l        U R                   R                  XS9n[        U R                   SS 5      nU(       a  XR
                  l        UR                  (       a  [	        U R                   [        5      (       a  [	        U R
                  [         5      (       a  U R
                  n	[	        U	R"                  [         5      (       a-  U	R"                  n	[	        U	R"                  [         5      (       a  M-  U R                   R$                  U	l        UR                   nU R&                  (       aI  U(       aB  UR(                  S   (       a.  [        U R                   SS 5      c  U R+                  U5      n
U
b  U
nU R
                  R                  XqUS9$ )	Nr   T)could_be_nameFarg_nameannotation_typingrr   r  )r  r  r  r+  rO   rR  r  rr   is_basic_c_typer  empty_declaration_coder   is_argr   r  TemplatedTypeNoder  r  array_declaratorrS  r
  inject_type_from_annotations)r   r   r  r  r  rd  rc  r  base_arg_namerR  arg_types              r7   r  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**3*L	
DA#0OO 
 t~~/@AAt0DEEJZ__.BCC'__
 Z__.BCC"nn==JO!++I OO7J(K DNNFD9A88=H#$	&&y&IIr6   c                     U R                   nU(       d  g UR                  XR                  S9u  p4Ub  [        UR                  USS9U l        U(       Ga  SU;   a5  UR                  5       nU(       a  UR                  5       (       d  OSU l        OU[        L a  SU l        OU R                  (       a  U R                  R                  (       av  UR                  5       (       d  UR                  (       aP  UR                  5       (       d  UR                  nU R                  (       d  [        U R                  S5        SU l        O-U R                  (       d  UR                  5       (       a  SU l        U(       a  SU l        U$ )N)assigned_valueT)r  ri  ztyping.OptionalzIPEP-484 recommends 'typing.Optional[...]' for arguments that can be None.)rS  analyse_type_annotationr  CAnalysedBaseTypeNoder<   r  resolvecan_be_optionalr  r   r   equivalent_typer   r  type_from_annotation)r   r   rS  	modifiersrn  s        r7   rl  )CArgDeclNode.inject_type_from_annotations  s   __
(@@UaUa@b	2Xd<DN  I-#++-H$<$<$>$> #'DL^+#$,,"6"6H<T<T<V<VZbZrZr//11'77H||DHH&qr#'DL\\h&>&>&@&@ $(,D%r6   c                 h   U R                   c  U R                  (       a  U R                  R                  (       aN  U R                  R                  U5        U R                  R                  U R                  R                  5       5      $ UR                  U R                  5      U l         U R                   $ r   )r!  r  r   generate_evaluation_coder  	cast_coder   get_argument_default_constr   s     r7   calculate_default_value_code)CArgDeclNode.calculate_default_value_code  sy    %||<<**LL99$?99..t||/B/B/DEE%)%D%DTYY%O"!!!r6   c                 ^    U R                   (       a  U R                   R                  U5        g g r   )r  r   r   s     r7   r   CArgDeclNode.annotate  s     <<LL!!$' r6   c                    U R                   nUb  UR                  (       a  g Uc  U R                  U5      nUR                  U5        UR	                  U5        U(       a  UR                  5       OUR                  U R                  5      nUR                  U< SU< S35        UR                  UR                  5       U R                  5        UR                  U5        UR                  U5        g N = ;)r  r   r~  r{  make_owned_referencer   	result_asr  rV   put_giverefgenerate_post_assignment_code
free_temps)r   r[   targetoverloaded_assignmentr  r   s         r7   generate_assignment_code%CArgDeclNode.generate_assignment_code"  s    ,,?g00>66t<F((.$$T*%:!@Q@QRVR[R[@\

01)4995--d34 r6   )r  r!  r  r  r  rw  )r   FNF)r.   r/   r0   r1   r   r  r  is_type_arg
is_genericis_special_method_optionalkw_onlypos_onlyr  r  r  r+  r!  rS  
is_dynamicdefaults_class_keyrw  rx  propertyrZ  r`  r  rl  r~  r   r  r5   r-   r6   r7   rQ  rQ    s    , GKl+KKKJ!&GHHGDOMJJ / / / H H0Jd#J"(!r6   rQ  c                       \ rS rSrS rSrg)CBaseTypeNodei1  c                 $    U R                  U5      $ r   )r  r   s     r7   r  CBaseTypeNode.analyse_as_type9  s    ||C  r6   r-   N)r.   r/   r0   r1   r  r5   r-   r6   r7   r  r  1  s    !r6   r  c                   "    \ rS rSr/ rSS jrSrg)rs  i=  c                     U R                   $ r   r  )r   r   rc  s      r7   r  CAnalysedBaseTypeNode.analyseB  r  r6   r-   NFr  r-   r6   r7   rs  rs  =  s     Kr6   rs  c                   6    \ rS rSr/ rSr/ rSrSrSr	SS jr
Srg)CSimpleBaseTypeNodeiF  NFc                    S nU R                   (       aU  [        R                  " U R                  U R                  U R
                  5      nU(       d  [        U R                  S5        GOU R
                  S:X  a  U R                  (       d  [        nGOU R
                  c8  U R                  (       a  UR                  (       a  UR                  nGO[        nGO|UnU R                  (       Ga7  U R                   H  nUR                  U5      nUbU  UR                  (       d,  UR                  (       a3  UR                   R                  (       a  UR                   R"                  nMl  U(       a  UR$                  (       a  UR$                  nM  S n  O   Ucg  ['        U R                  5      S:X  aN  SSKJn  UR                  U R                  S   5      nU(       a#  UR,                  (       a  U" UR,                  5      nUc&  UR/                  U R                  U R                  5      nU(       Ga)  UR                  (       a  UR1                  5       nUR3                  U R
                  5      nUb  OU(       aP  U R                  (       a  UR                  (       a  UR                  nO[        n[5        U R
                  5      U l        OU R8                  (       a^  U R
                  U R8                  ;  a#  [        U R                  SU R
                  -  5        [        R:                  " U R
                  5      nO#[        U R                  SU R
                  -  5        U(       a=  UR<                  (       a,  UR>                  (       a  URA                  UR>                  5      nU RB                  (       a`  URD                  (       a  URF                  (       a  [        U R                  S5        [        RH                  " U5      nURK                  U5        O;U[(        RL                  L a(  [        RN                  nURK                  U5        SU l!        U(       d  [        RP                  nU$ )	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))rg  r
   simple_c_typesignedlongnessrr   r   r<   module_pathr   r  r  r  lookupr  is_typer  r:  	as_modulerN   r   r  known_standard_library_importfind_imported_moduler)  lookup_typer   rd  r  r  r  r  r  complex
is_numeric
is_complexCComplexTypecreate_declaration_utility_codecomplex_typec_double_complex_typer   )	r   r   rc  r  r:  r   r-  r  found_entrys	            r7   r  CSimpleBaseTypeNode.analyseW  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r6   )rd  r  r  )r.   r/   r0   r1   r   rd  r  rg  r  r  r  r5   r-   r6   r7   r  r  F  s(     KHKOGKTr6   r  c                   0    \ rS rSrSrSS/rS	S jrS rSrg)
MemoryViewSliceTypeNodei  
memoryviewbase_type_nodeaxesc                    U R                   R                  U5      nUR                  (       a  U$ SSKJn   UR                  XR                  5      nUR                  U R                  U5      (       d  [         U l        U R                  $ [        R"                  " X55      U l        U R                  R%                  U R                  5        U R'                  U5        U R                  $ ! [         aP  n[        UR                  UR                  5        [        R                  " 5       U l        U R                  s S nA$ S nAff = fNr   
MemoryView)r  r  r  r   r  get_axes_specsr  r   r   positionmessage_onlyr
   	ErrorTyper  validate_axesr<   r   MemoryViewSliceTypevalidate_memslice_dtypeuse_memview_utilities)r   r   rc  r  r  
axes_specses          r7   r  MemoryViewSliceTypeNode.analyse  s    ''//4	i/ 	#223		BJ ''*=="DI yy	 #66yMDIII--dhh7&&s+yy  	!**ann-",,.DI99	s   C& &
E 0AD;5E ;E c                 x    SSK Jn  UR                  UR                  UR                  R
                  5      5        g r  )r   r  use_utility_codeget_view_utility_codecontextshared_utility_qualified_name)r   r   r  s      r7   r  -MemoryViewSliceTypeNode.use_memview_utilities  s.     ,,99	
r6   r  Nr  )	r.   r/   r0   r1   rr   r   r  r  r5   r-   r6   r7   r  r    s    D#V,K.
r6   r  c                   $    \ rS rSrS/rSS jrSrg)CNestedBaseTypeNodei  r  Nc                    U R                   R                  U5      nU[        R                  L a  [        R                  $ UR                  (       d)  [        U R                  SU-  5        [        R                  $ UR                  R                  U R                  5      nU(       a  UR                  (       d9  [        U R                  SU< SU R                  < S35        [        R                  $ UR                  $ )Nz'%s' is not a valid type scope'rK   z' is not a type identifier)r  r  r
   r   r  r   r<   r:  lookup_hererr   r  r  )r   r   rc  r  
type_entrys        r7   r  CNestedBaseTypeNode.analyse  s    NN**3/	
---(((%%$((<yHI(((__00;
!3!3$(()TYYWX(((r6   r-   r   r  r-   r6   r7   r  r    s     -Kr6   r  c                   >    \ rS rSr/ SQrSrSrSrS rS	S jr	S r
Srg)
rj  i  )r  positional_argskeyword_args
dtype_nodeTNc                    UR                   S:H  nUR                  =(       a    U(       + n/ nU R                   H  nUR                  (       a  M  UR	                  U=(       d    [        U[        5      5         UR                  U5      nS S S 5        Wc-  UR                  (       a  [        UR                  S5        [        nUR                  U5        M     UR                   (       aB  UR                   S:X  a!  [        S U R                   5       5      Ul        UR                  5       nOSn[!        U5       H  u  pUc  M
  U(       a  UR"                  (       a   U(       d  M+  UR%                  5       (       a  MB  UR&                  (       a%  WR)                  5       (       d  UR&                  XY'   Mx  [        WR                  UR                   < SU< 35        [        XY'   M     U$ ! , (       d  f       GNa= f)Nzdataclasses.ClassVarz!unknown type in template argumentztyping.Unionc              3   8   #    U  H  oR                   v   M     g 7fr   )r   )r\  r   s     r7   r]  <TemplatedTypeNode._analyse_template_types.<locals>.<genexpr>  s     -VAUAiiAU   Fz [...] cannot be applied to type )r  in_c_type_contextr  r   new_c_type_contextrO   r  r  r  r   r<   r   r  anycontains_noneallows_noner  r  ru  rv  as_cython_attribute)
r   r   r  require_python_typesr  template_typesr  ttyperequire_optional_typesr)  s
             r7   _analyse_template_types)TemplatedTypeNode._analyse_template_types  s   (EEI__11N:N6N!11M$$''(9(eZWd=ef%55c: g}))-++-PQ&E!!%( 2 1155G*--VAUAU-V*V	'%.%:%:%<"%*"!.1HA}#E,=,=AWAW`e`u`u`w`w((1R1R1T1T(-(=(=N%-++!>>.  )3N% 2 = gfs   6G""
G1	c                    Uc  U R                   R                  U5      nUR                  (       a  U$ UR                  (       a  UR	                  5       (       d  UR
                  (       a  U R                  (       aj  U R                  R                  (       aO  UR                  (       a  SOSn[        U R                  SU-  5        [        R                  U l        U R                  $ U R                  X5      nUR                  U R                  X5      U l        GOUR                  (       a  SSKJn  UR%                  U R                  UU R&                  U R                  UR(                  5      n[        R*                  " U40 UD6U l        [-        U5      (       aS  [/        U R                  5      (       a9  [        R0                  " [3        U R                  5      U R                  5      U l        O[5        U R                  SS S9n[7        U R&                  5      S:  d  U R                  R                  (       a,  [        U R                  S5        [        R                  U l        O`U R&                  (       d  S n	OU R&                  S	   n	[9        U R                  UU	S
9U l        U R:                  R                  X15      S   U l        U R                  (       ac  U R                  R<                  (       aH  UR>                  (       a7   U R                  RA                  UR>                  5      U l        U R                  $ U R                  $ ! [B         a1    [        U R                  SU RD                  -  5         U R                  $ f = f)Nzc++ templateszindexed typesz %s cannot take keyword argumentsr   Bufferr   rr   r  zinvalid array declarationr   )r  r  r  )#r  r  r  r  r  r  r  key_value_pairsr   r<   r
   r   r  r  r  r  r   r  analyse_buffer_optionsr  buffer_defaults
BufferTyper"   r$   PythranExprr#   r  rN   r  rk  r  r  r  r   rr   )
r   r   rc  r  tpr  r  optionsempty_declaratorr  s
             r7   r  TemplatedTypeNode.analyse"  s   ++33C8Ii/##	(B(B(D(D66  T%6%6%F%F(1(>(>_Odhh BR GH&11	yy !99#IN!11$((CPDI"" 33$$!!))+G #--iC7CDIc""'8'C'C&22<		3JDIIV	  3488"DQ4''(1,0A0A0Q0Qdhh ;<&11	 ++ $I $ 4 4Q 7I(<HH)'))% !1199)I!L	99++0E0E! II001F1FG	 yytyy $ !dhhjii ! yy!s   ?*M -M<;M<c                    / nU nUR                   (       a  UR                  (       a  [        UR                  5      S:X  a  U R                  R	                  U5      nUR
                  (       a,  UR                  (       a  UR                  UR                  5        UR                  S   nUR                   (       a,  UR                  (       a  [        UR                  5      S:X  a  M  U$ Nr   r   )r   r  rN   r  r  r  modifier_namer  )r   r   rx  modifier_nodemodifier_types        r7   analyse_pytyping_modifiers,TemplatedTypeNode.analyse_pytyping_modifiers_  s     	22}7S7SX[\i\y\yXz~X //??DM99m>Y>Y  !<!<=)99!<M	 22}7S7SX[\i\y\yXz~X r6   )rk  r  )FN)r.   r/   r0   r1   r   r   r  rr   r  r  r   r5   r-   r6   r7   rj  rj    s,    1K "JD(T;zr6   rj  c                   &    \ rS rSrSS/rSS jrSrg)CComplexBaseTypeNodeim  r  rR  c                 v    U R                   R                  X5      nU R                  R                  X15      u  pEU$ r   )r  r  rR  )r   r   rc  r  _r  s         r7   r  CComplexBaseTypeNode.analyses  s1    ~~%%c9//))$4r6   r-   Nr  r  r-   r6   r7   r  r  m  s     -Kr6   r  c                   $    \ rS rSrS/rSS jrSrg)CTupleBaseTypeNodeiy  
componentsc                 ,   / nU R                    HT  nUR                  U5      nUR                  (       a  [        UR                  S5        [
        s  $ UR                  U5        MV     UR                  U R                  U5      nSUl        UR                  $ )Nz/Tuple types can't (yet) contain Python objects.T)
r	  r  r  r   r<   r   r  declare_tuple_typerD  r  )r   r   rc  component_typesr   r  r-  s          r7   r  CTupleBaseTypeNode.analyse~  sw    A99S>DaeeNO!!""4( ! &&txxA
zzr6   r-   Nr  r  r-   r6   r7   r  r  y  s      .K
r6   r  c                   ,    \ rS rSrSr/ rS rSS jrSrg)FusedTypeNodei  z
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                     U R                  U5      nUR                  U R                  X R                  5      nSUl        g )NT)r  declare_typedefrr   r<   r_  )r   r   r  r-  s       r7   r   "FusedTypeNode.analyse_declarations  s4    ||C ##DIItXX> !r6   c                 $   / nU R                    Ha  nUR                  U5      nU(       d  [        UR                  S5        M3  XS;   a  [        UR                  S5        MP  UR	                  U5        Mc     [
        R                  " X0R                  S9$ )Nr  zType specified multiple timesr  )rk   r  r   r<   r  r
   	FusedTyperr   )r   r   rc  rk   r,  r  s         r7   r  FusedTypeNode.analyse  sp    I,,S1Dimm\2}imm%DET" $ ##E		::r6   r-   Nr  )	r.   r/   r0   r1   r   r   r   r  r5   r-   r6   r7   r  r    s     K!;r6   r  c                   $    \ rS rSrS/rSS jrSrg)CConstOrVolatileTypeNodei  r  c                     U R                   R                  X5      nUR                  (       a  [        U R                  S5        [
        R                  " X0R                  U R                  5      $ )Nz2Const/volatile base type cannot be a Python object)	r  r  r  r   r<   r
   c_const_or_volatile_typer  is_volatile)r   r   rc  r  s       r7   r   CConstOrVolatileTypeNode.analyse  sN    ~~%%c9$((FH224HXHXYYr6   r-   Nr  r  r-   r6   r7   r  r    s    
 -KZr6   r  c                   .    \ rS rSrSS/rSrSrSS jrSrg)r[  i  r  declaratorsNc                    U R                   c  0 U l         U(       d  UnX l        U R                  (       a  U R                  S   R                  5       nOS nUb  U R                  S:w  a  [        U R                  S5        [        U R                  5      S:  a#  [        U R                  S   R                  S5        [        SU5      nUR                  R                  Ul
        U H)  nUR                  UR                  X@R                  5        M+     U R                  R                  U5      nS nU R                  R                  (       a  U R                  R!                  U5      nUR"                  (       aO  U R$                  (       d>  UR&                  (       d  UR(                  (       a  [        U R                  S5        [*        $ S U l        U R                  nU R                   GH  n[        U R                  5      S:  a@  [/        U[0        5      (       d+  UR                  S   (       a  [3        UR                  S	S5        U R4                  =(       a"    U R                  S:H  =(       a    UR(                  n	U	(       a  S
Ul        [/        U[6        5      (       a(  UR                  XQU R                   XpR$                  S9u  pOUR                  XQXpR$                  S9u  pUR9                  5       (       dK  U R                  S:X  a  UR:                  (       d*  UR<                  (       d  [        UR                  SU-  5        U R                  S:X  a'  UR>                  (       a  [        UR                  S5        U
R                  nU
R@                  nUS:X  a  [        UR                  S5          g URB                  (       a&  U R                  S:w  a  [        UR                  S5        URD                  (       a&  U R                  S:w  a  [        UR                  S5        URF                  (       a  SUR                  ;   a  SUl$        URK                  XUR                  XR                  U R$                  U RL                  U RN                  U R4                  S9	U l        U R,                  b/  [P        RP                  " U R                   5      U R,                  l         U	(       a9  U R,                  RR                  RU                  U5        SU R,                  l+        GM.  GM1  U R4                  (       a  [        U R                  S5        U R                   (       a  [        U R                  S5        URY                  XUR                  XU R$                  U RL                  SUS9	U l        [Z        R\                  (       d  GM  [_        U R                  U R`                  5      U R,                  l0        GM     g )Nr   r  zOnly extern functions allowedr   z%Can't multiply declare template typesfunc_templatezFused types not allowed herezwarn.multiple_declaratorszNon-trivial type declarators in shared declaration (e.g. mix of pointers and values). Each pointer declaration should be on its own line.F)r'  r  r  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 declaredrN  T)r  r  r  apirx  r$  z>Variables cannot be declared with 'cpdef'. Use 'cdef' instead.z,Decorators can only be followed by functions)r  r  r  r   is_cdefpytyping_modifiers)1r'  
dest_scoper  r{  r  r   r<   rN   r   outer_scoper
  declare_typerr   r  r  r   r   r  r  r  is_module_scoper   r-  rO   r  r   r$  r  r  r  is_memoryviewslicer  r  is_referencer%  r  is_static_methoddeclare_cfunctionr   rx  r   r  create_to_py_utility_codecreate_wrapperr=  r    
docstringsrG   rF   )r   r   r#  r  template_paramr  rx  r  rR  create_extern_wrapperr+  r  rr   r  s                 r7   r    CVarDefNode.analyse_declarations  sh     ($&D!J$((+==?II (*dhh ?@4##$q(d&&q)--/VW5C __77CN"+  !4!4nhhO #, NN**3/	 	>>00AA#FIdkks7K7K7:7J7J$((:;
__
**JD$$%)&z3FGG'BCNNJKLN
 &*%5%5 &=)-H)D&=),)<)< " %).
&*&9::(2(:(:T5J5JWajuju ); )w% )3(:(:z++ ); )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
OODKKDNNHXHX : Z
 ::)26))D<Q<Q2RDJJ/(JJOO==cB04DJJ- ) ##$(($de(($(($RS'33
t{{$9 4 N
 %%%%3DHHdhh%GDJJNs +r6   )r#  r'  r-  r   )	r.   r/   r0   r1   r   
decoratorsr'  r   r5   r-   r6   r7   r[  r[    s      .KJ]Hr6   r[  c                   6    \ rS rSrS/rS	S jrS rS rS rSr	g)
CStructOrUnionDefNodei4  
attributesNc                     UR                  U R                  U R                  X R                  U R                  U R
                  U R                  U R                  U R                  S9	U l	        g )N)r  r   packed)
rB  rr   r9  r;  r<   r  r  r   r6  r-  r   r   r:  s      r7   declareCStructOrUnionDefNode.declareB  sN    00IItyy%):):DHHJJ4??;; 1  
r6   c                 Z   S nU R                   b  [        U R                  5      nU R                  X5        U R                   b  U R                  (       a"  UR
                  (       d  SU R                  l        U R                    H  nUR                  X5        M     U R                  S:w  a  UR                   Hp  nUR                  nUR                  (       a  UR                  nUR                  (       a  M  X@R                  R                  :X  d  MZ  [        UR                  S5        Mr     g g g )Nr   r  z)Struct cannot contain itself as a member.)r4  r   rr   r8  r  r_  r-  rC  r   r  var_entriesr  r  r  r   r<   )r   r   r:  r   r  s        r7   r   *CStructOrUnionDefNode.analyse_declarationsH  s    ??&&tyy1ES ??&{{3??,-

)))#5 ((*!--D99D--#~~ ---zz.dhh(ST . + 'r6   c                     U $ r   r-   r   s     r7   r~   )CStructOrUnionDefNode.analyse_expressionsZ      r6   c                     g r   r-   r   s     r7   r   -CStructOrUnionDefNode.generate_execution_code]  r   r6   r-  r   )
r.   r/   r0   r1   r   r8  r   r~   r   r5   r-   r6   r7   r3  r3  4  s       .K U$r6   r3  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg)
CppClassNodeia  Nc           
         U R                   c  S nOU R                    VVs/ s H   u  p4[        R                  " X4(       + 5      PM"     nnn[        S U R                    5       5      nU(       a;  [	        S U R                   S U*   5       5      (       d  [        U R                  S5        UR                  U R                  S U R                  U R                  / U R                  US9U l        g s  snnf )Nc              3   4   #    U  H  u  pU(       + v   M     g 7fr   r-   r\  r  requireds      r7   r]  'CppClassNode.declare.<locals>.<genexpr>u  s     (X+!Xs   c              3   *   #    U  H	  u  pUv   M     g 7fr   r-   rG  s      r7   r]  rI  v  s     1wNv{q(Nvs   zGRequired template parameters must precede optional template parameters.)base_classesr  r  )r  r
   r  sumrb  r   r<   declare_cpp_classrr   r  r  r-  )r   r   r  template_namerH  num_optional_templatess         r7   r8  CppClassNode.declareo  s    >>!!N >B^^M=K"9- )@@P\]=K  M%((X(X%X"%c1wdnn]u_u^uNv1w.w.wdhh ij**IItTXXtzz> + S
Ms   'C+c           
      $  ^ ^ UR                  5       (       d  [        T R                  SSS9  T R                  c  S =p#OYT R                   VVs/ s H  u  pEUPM	     nnnT R                   VVs/ s H   u  pF[        R
                  " XF(       + 5      PM"     nnnS nT R                  b  [        T R                  XS9nU 4S jn[        UT R                   V	s/ s H  oR                  U=(       d    U5      PM     sn	5      n
UR                  T R                  UT R                  T R                  U
T R                  US9T l        T R                  c  g ST R                  l        Ub  T R                  R"                  Ul        / nU4S jmT R                  b  T R$                  (       a"  UR&                  (       d  ST R                  l        T R                   H9  n[+        USS 5      nU(       a  UR-                  U5        UR/                  U5        M;     T" T R                  5       H<  nUR1                  U5        T R                  c  M#  S	S
R3                  U5      -  Ul        M>     [7        T R                  US9T l        UT l        g s  snnf s  snnf s  sn	f )Nz0Using 'cppclass' while Cython is not in c++ moder   r  )r  c                 ~   > U R                   (       d  U R                  (       a  g[        TR                  SU -  5        g )NTz&Base class '%s' not a struct or class.)r  	is_structr   r<   )
base_classr   s    r7   base_ok2CppClassNode.analyse_declarations.<locals>.base_ok  s+    &&**>*>dhh H: UVr6   )r  r  c              3   T  >#    U  H  n[        U[        5      (       a  Uv   M  [        U[        5      (       a&  T" UR                  R                  5       S h  vN   MY  [        U[
        5      (       d  Mp  UR                  c  M  T" UR                  5       S h  vN   M     g  NK N7fr   )rO   CFuncDefNoder  r   r6  rD  r4  )r4  r   func_attributess     r7   rY  :CppClassNode.analyse_declarations.<locals>.func_attributes  sw     "dL11J&<==.tyy???l338S.t??? # @?s0   AB(B$B(6B(B(B&
B(&B(r8  ztemplate <typename %s>z, typename rM  )r   r   r<   r  r
   r  r4  r   rr   filterrK  r  rM  r  r  r-  r  r  r  r_  rC  r   r8  r   r  r   template_declarationr5  r   r:  )r   r   r  template_namesrN  r  rH  r:  rU  bbase_class_typesdefined_funcsr   r8  r`   rY  s   `              @r7   r   !CppClassNode.analyse_declarations|  s'   zz||DHHF >>!.22N^DHNNSN0@mNNS=A^^M=K"9- )@@P\]=K  M??&!$))SKE	W
 "'TM^M^+_M^IIels,CM^+_`**IIudhhJJ(T__P^ + `
 ::"#

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

)!$	48LL'))%0	 (
 (8$$T*>>-0H=K]K]^lKm0mD- 9 !?	
U TM ,`s   J-'J#J
c                     U R                   R                  U R                  R                  R                  5      U l         U $ r   )r   r~   r-  r  r:  r   s     r7   r~    CppClassNode.analyse_expressions  s+    II11$**//2G2GH	r6   c                 x    U R                   R                  U R                  R                  R                  U5        g r   )r   r  r-  r  r:  rR  s      r7   r  *CppClassNode.generate_function_definitions  s$    		//

0E0EtLr6   c                 :    U R                   R                  U5        g r   r   r   r   s     r7   r   $CppClassNode.generate_execution_code      		))$/r6   c                 :    U R                   R                  U5        g r   rq  r   s     r7   r   CppClassNode.annotate  rs  r6   )r   r-  r:  )r.   r/   r0   r1   r1  r8  r   r~   r  r   r   r5   r-   r6   r7   rD  rD  a  s*     JS2hM0!r6   rD  c                   8    \ rS rSrSS/rSrS rS rS rS r	S	r
g)
CEnumDefNodei  rn   underlying_typeNc                 J   S n[         R                  (       a   [        U R                  U R                  5      nUR                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  US9	U l        g )N)r  scopedr;  r  r   r,  rF   )r    r-  rG   r<   rF   declare_enumrr   r  rp  r;  r  r   r,  r-  )r   r   rF   s      r7   r8  CEnumDefNode.declare  sw     4884C%%IItxx**;;**DHH..C & 9
r6   c                 $   S nU R                   R                  U5      nUR                  (       d   [        U R                   R                  S5        X0R
                  R                  l         U R                  (       aP  U R                  bC  [        U R                  U5      nU R
                  R                  Ul        UR                  Ul        OUnU R                  b  U R                  (       a"  UR                  (       d  SU R
                  l        U R                  S:g  nU(       a  SOS nU R                   HZ  nUR!                  X R
                  U5        U(       d  M(  SUR
                  R"                  b  UR
                  R"                  OU-   nM\     g g )Nz'underlying type is not an integral typer   r  r   )rn  r  r  r   r<   r-  r  rp  rn   r   rr   r
  r  r_  rC  r  analyse_enum_declarationsenum_int_value)r   r   r:  rn  is_declared_enumnext_int_enum_valuer   s          r7   r   !CEnumDefNode.analyse_declarations  s"   ..66s;%%$&&**,UV*9

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

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

..ujjBUV##*+59ZZ5N5N5Z

11`s+u' # "r6   c                     U $ r   r-   r   s     r7   r~    CEnumDefNode.analyse_expressions  r?  r6   c                 `   U R                   (       a  g U R                  (       d"  U R                  (       d  U R                  S:X  d  g UR	                  U R
                  5        UR                  R                  [        R                  SS9nU R                  R                   H  nUR                  U< SUR                  < SUR                  X#R
                  5      < 35        UR                  U[        R                  5        UR                  SUR!                  ["        R$                  5      < SUR                  R'                  5       < SU< SUR)                  UR
                  5      < 35        UR+                  U[        R                  5        M     UR                  R-                  U5        g )	NpublicT
manage_refz = PyLong_FromLong(); zif (PyDict_SetItemString(r   ) < 0) )rp  r   rr   r  rF  r<   	funcstateallocate_tempr
   r   r-  enum_valuesrV   r  error_goto_if_null
put_gotrefname_in_module_stater	   moddict_cnamerY  
error_gotoput_decref_clearrelease_temp)r   r[   tempr   s       r7   r   $CEnumDefNode.generate_execution_code  s&   ;;xxdoo.I  	dhh~~++J,E,ERV+WJJ**DJJ

''hh79 : OOD*";";<JJ))&*>*>?		--/)	+ ,
 !!$
(A(AB + 	##D)r6   rB  )r.   r/   r0   r1   r   rF   r8  r   r~   r   r5   r-   r6   r7   rm  rm    s)     -.K
C9u>*r6   rm  c                        \ rS rSrS/rS rSrg)CEnumDefItemNodei  r   c                    U R                   (       a  U R                   R                  U5      U l         U R                   R                  R                  (       dO  U R                   R	                  [
        R                  U5      U l         U R                   R                  U5      U l         UR                  R                  (       a  UR                  < SU R                  < 3nOU R                  nUR                  U R                  UR                  U R                   U R                  UUR                  UR                  UR                  =(       a    UR                  S L S9=U l        nUnU R                   (       a  U R                   R                   (       a   [#        U R                   R                   5      nOtU R                   R$                  (       d  U R                   R&                  (       a<  U R                   R                  (       a!  U R                   R                  R(                  nOS nUb  Xel        UR*                  R-                  U5        UR                  (       a0  UR                  R.                  R-                  UR                  5        g g )N::)r  r  r   r,  )r   r  r  r  r  r
   r>  is_cpp_enumr  rr   declare_constr<   r  r   r,  r-  r   r'   r   is_attributeru  r  r  r  )r   r   
enum_entryincremental_int_valuer  r-  
enum_values          r7   rt  *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,??OO""))%**5 r6   )r-  r   N)r.   r/   r0   r1   r   rt  r5   r-   r6   r7   r  r    s    
 )K!6r6   r  c                   .    \ rS rSrSS/rS rS rS rSrg)	CTypeDefNodeiD  r  rR  c           	         U R                   R                  U5      nU R                  R                  X!U R                  U R                  S9u  p4UR
                  nUR                  nUR                  XTU R                  X`R                  U R                  S9nUR                  (       a  SUl        U R                  (       a  UR                  (       d  SUl        g g g )Nr  )r  r  r   Tr   )r  r  rR  r  r  rr   r  r  r<   r   r  r_  rC  )r   r   r  r+  r  rr   r  r-  s           r7   r   !CTypeDefNode.analyse_declarationsM  s    ~~%%c* $ 7 7$//$++ !8 !G##%%##OO $ C == $E;;s#$E   /;r6   c                     U $ r   r-   r   s     r7   r~    CTypeDefNode.analyse_expressions^  r?  r6   c                     g r   r-   r   s     r7   r   $CTypeDefNode.generate_execution_codea  r   r6   r-   N	r.   r/   r0   r1   r   r   r~   r   r5   r-   r6   r7   r  r  D  s     -K%"r6   r  c                       \ rS rSrSrSrSrSrSrSr	Sr
SrSrSr/ rSrSrSrSrSrSrSrS rS rS rS rS rS	 rS
 rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'Sr(g)FuncDefNodeie  NFc                 T   SnU R                    GH  nUR                  (       a  SnUR                  (       aM  UR                  R                  U5      Ul        UR                  R	                  UR
                  U5      Ul        Mu  UR                  (       a<  UR                  R                  (       d  [        UR                  S5        S Ul        M  M  [        UR                  S5        S Ul        M  UR                  (       a  SnM  U(       d  M  [        UR                  S5        GM     g )Nr   r   z2This argument cannot have a non-None default valuez)This argument cannot have a default valuez/Non-default argument following default argument)rX   r  r  r}   r  r  r  r   r   r<   r  )r   r   default_seenr3  s       r7   analyse_default_values"FuncDefNode.analyse_default_values  s    99C{{ >>"%++";";C"@CK"%++"7"7#"FCK33;;..cgg'[\&* / #''#NO"&CK cggPQ! r6   c                     U R                    H6  nUR                  (       d  M  UR                  R                  U5      Ul        M8     U R                  (       a!  U R                  R                  U5      U l        g g r   )rX   rS  r}   return_type_annotationr   r   r3  s      r7   analyse_annotationsFuncDefNode.analyse_annotations  sY    99C~~~!$!=!=c!B  &&*.*E*E*S*STW*XD' 'r6   c                    U R                   nUR                  nUR                  U;   a   X2R                     nUR                  U5      nO_[	        U[
        5      (       aH  UR                  (       a7  UR                  S   (       a#  UR                  nUR                  U5      nUc  U$ OU$ Uc  [        UR                  S5        U$ U[        LaN  UR                  U5      (       d8  [        UR                  R                  S5        [        UR                  S5        U$ Xbl        UR                  R                  (       a  UR                  R                  U5        U$ )Nre  r  r  r  )r'  r  rr   r  rO   rQ  rS  r
  rl  r   r<   r   r  r  r  r  )r   r   r3  r'  	orig_typer,  r-  s          r7   align_argument_typeFuncDefNode.align_argument_type  s   00HH	88''(2I"2237J\**s~~#..QdBeI99#>J!
 " J)--. 
 n,Y5F5Fz5R5R#--##%YZ)--!<= 
	 "Hxx""88=
r6   c                     gNr   r-   r   lenvs     r7   need_gil_acquisition FuncDefNode.need_gil_acquisition  s    r6   c                    UnUR                   (       d  UR                  (       a2  UR                  nUR                   (       a  M  UR                  (       a  M2  U R                  (       aO  U R                  (       a  [
        O[        nU" U R                  R                  UUU R                  R                  S9nO[        U R                  R                  UUS9nU R                  Ul        U R                  R                  nUR                  (       a)  UR                  =(       a    UR                  (       + Ul        X@l        UR"                  Ul        U$ )N)rr   r$  parent_scope
scope_name)rr   r$  r  )is_py_class_scoper  r$  needs_closureis_generator_expressionr   r   r-  rr   r  r   r  r  r  r   r  local_scoper
  )r   r   genvrq   r  r  s         r7   create_local_scopeFuncDefNode.create_local_scope  s    $$(=(=##D $$$(=(=(=.2.J.J*P\CDJJOO,0-0+/::+;+;=D
 4::??*.+.0D  ++zz9DMM(9DJ..r6   c                 :    U R                   R                  U5        g r   rg  rR  s      r7   generate_function_body"FuncDefNode.generate_function_body  ri  r6   c                 5  ^ ^'^(^) SSK Jn  T R                  nUR                  (       a7  UR                  (       d&  [
        R                  < S[
        R                  < 3nO[
        R                  nUR                  U5        T R                  R                  XB5        T R                  XB5        T R                  R                  S:H  =(       a     T R                  R                  R                  nT R                  R                  S:H  =(       a     T R                  R                  R                  nU=(       d    UnU(       a%  ST R                   ;  a  T R                   S/-   T l        T R#                  5       n	T R$                  (       a  Sn
OuUR'                  5       n
U
(       a^  UR(                  R+                  [,        R.                  " SS	5      5        UR(                  R0                  S
   (       a  UR3                  5         UR5                  U5        UR7                  5       Ul        UR:                  (       + UR<                  l        URA                  T RB                  5        T RE                  XB5        URG                  S5        U	(       a  URG                  U	5        T RI                  X5      =(       d    T RJ                  nT RL                  (       a  T RL                  RO                  X+SS9  T RO                  X+S9  UnURP                  (       d  UR                  (       a2  URR                  nURP                  (       a  M  UR                  (       a  M2  T RT                  (       aT  URW                  URX                  RZ                  R]                  [
        R                  5      5        URG                  S5        OT R^                  (       a  UR                  (       aS  URW                  URX                  RZ                  R]                  [
        R                  5      5        URG                  S5        URW                  URX                  RZ                  R]                  [
        R                  5      5        URG                  S5        T Ra                  XB5        URb                   H:  nURd                  (       a  M  URf                  (       a  M)  URi                  U5        M<     SnT Rj                  nURl                  (       a  URn                  (       a  URp                  nURr                  (       dx  URt                  (       a  SnO/URv                  (       a  SURy                  URz                  5      -   nURG                  UR]                  [
        R|                  5      < U< S35        UR                  5       nT R                  U5        T R                  nUR                   Vs/ s H  oR                  (       d  M  UPM     nnUR:                  =(       a    T RT                  =(       d    T R^                  nS m)SnU(       d  U(       a$  UR                  5         SUR<                  l        SnOUR                  5       m)U
(       ai  UR                  5         S nT R                  (       a5  T R                  R                  U5        T R                  R                  5       nUR                  U5        U(       a  T R                  U5        UR                  5       nUR                  5       nUR<                  R>                  (       + nU(       a  T R                  U5        T RT                  (       Ga&  [        R                  " SS5      n[        R                  " URX                  RZ                  R                  U5      nU(       d2  SUR                  URX                  RZ                  R                  5      -  nURG                  [
        R                  < SURX                  RZ                  R                  5       < SU< SUR                  URX                  RZ                  R                  5      < SUR                  [
        R                  5      < S3
5        URG                  S[
        R                  -  5        URG                  [
        R                  < SURX                  RZ                  R                  S5      < S35        UR                  S[        5        URG                  UR                  T RB                  5      5        URG                  S5        UR                  [
        R                  URX                  RZ                  5        URG                  S5        T R^                  (       Ga@  T R                  (       aN  URG                  U< SURX                  RZ                  R                  5       < S[
        R                  < S35        OMURG                  U< SURX                  RZ                  R                  5       < S [
        R                  < S35        UR                  (       a(  URG                  [
        R                  < SU< S35        O[T RT                  (       aJ  UR                  X\RX                  RZ                  5        UR                  X\RX                  RZ                  5        U
(       a  T R                  (       a#  [        T R                  R                  S!-   5      nOT R                  R                  nUR                  UT RB                  UR<                  R>                  (       + T RL                  S LS"9  SUR<                  l^        T R                  X5        UR                   H  nURZ                  Rv                  (       d@  U(       d  UR                  (       a&  URd                  (       d  UR                  U5        MZ  M\  M^  UR                  (       d  Mq  URd                  (       a  M  UR                  UUR<                  R>                  S#9  M     URb                   H  nURf                  (       a  UR                  (       a  URd                  (       ds  URZ                  Rv                  (       a$  UR                  UUR<                  R>                  S#9  UR                  (       a  UR                  U5        OUR                  U5        URZ                  R                  U5      (       d  M  URZ                  R                  X-5        M     URb                  UR                  -    HX  nURZ                  R                  (       d  M   UR                  R                  R                  (       d  MG  UR                  X5        MZ     T R                  U5        UR                   H<  nURZ                  R                  (       d  M   UR                  XT RB                  5        M>     UR<                  R                  (       a  SnU(       aX  UR:                  (       aG  T)b#  T)R                  5         S m)SUR<                  l        UR                  5         SUR<                  l        T R                  X5        URA                  T RB                  SS$9  URG                  S5        URG                  S%5        UR<                  R>                  UR<                  R>                  T)S L S&.m(U4U(U)4S' jjm'T Rj                  nT R                  R                  (       d  URt                  (       a+  [
        R|                  nT'" S(5        UR                  UU5        OURv                  (       dn  URz                  nU(       a(  URG                  [
        R|                  < SU< S35        O3URr                  (       d"  URG                  S)[
        R|                  -  5        U
(       a2  UR                  [
        R|                  T RB                  UT(S(   (       + S*9  UR                  UR                  5      (       Ga  T R                  R                  (       d  UR                  UR                  5        UR                  UR                  5        UR<                  R                  5        H"  u  nnT'" S+5        UR                  UUT(S+   S#9  M$     [        U5      S,:  n U (       a  UR(                  R+                  [        5        URG                  S-5        URG                  S.5        T'" S+5        URG                  S/5        URG                  S05        U H  nUR                  X-5        M     URG                  S15        URv                  (       a7  SS2K J~n!  U!R                  [
        R|                  U5        [
        R|                  n"OT GR                  5       n"U
(       a  T'" S+5        UGR                  5         URG                  S35        UGR                  T RB                  5        URG                  S45        UR                  S5T RB                  T(S(   (       + S69  URG                  S75        T GR                  5       n#U"c  U#(       a  T'" S+5        UR<                  GR                  (       aF  URG                  S8[
        GR
                  -  5        URG                  S9[
        GR
                  -  5        UGR                  T R                  GR                  5        UR<                  GR                  (       a  URG                  S5        OiG[        T R                  RB                  S:T R                  GR                  -  S,5        T'" S+5        UGR                  T R                  GR                  5        URz                  n$U"c	  U$(       a  U$n"U"b<  U"[
        R|                  :w  a'  URG                  [
        R|                  < SU"< S35        O3URr                  (       d"  URG                  S)[
        R|                  -  5        U(       a  T'" S+5        T GR                  U5        UR                  5       4U'U(U 4S; jjn%U (       d  U(       d  URv                  (       a9  T(S+   (       d  URv                  (       d   eUR                  UR8                  5        OU%" 5         OS< n%UR                  UR                  5      (       d!  UR                  UR                  5      (       Gd	  UR                  UR                  5        U H  nT'" S(5        UR                  X-5        M     U(       a  T'" S(5        T GR                  U5        URv                  (       a  UGR                  UGR                  [
        R|                  5      5      n&URG                  S=U&-  5        T(S(   (       d  UR                  5         URG                  S>5        T(S(   (       d  UR                  5         URG                  S5        UR                  UR8                  5      (       a"  U%" 5         UR                  UR8                  5        URb                   H  nUR                  (       a  URd                  (       a  M'  URZ                  GR                  (       aI  URf                  (       a  UR                  (       d  Mg  URZ                  GR                  (       a  T'" S(5        O=URZ                  GR!                  U5      (       a  URZ                  GR#                  X-5        UGR%                  UT(S(   S#9  M     UR                   H  nURd                  (       a  M  URZ                  Rv                  (       a  UR                  (       d  MD  O>U(       d  UR                  (       d  M_  URZ                  GR                  (       a  T'" S(5        UGR%                  UT(S(   S#9  M     T RT                  (       a=  T'" S(5        UGR'                  [
        R                  URX                  RZ                  5        UR:                  (       dJ  URz                  n$T GR                  5       n"U"c	  U$(       a  U$n"UGR)                  [
        R|                  U5        T R                  GR*                  (       aX  T R                  R                  S?:X  a>  T'" S(5        URG                  S@[
        R|                  < SA[
        R|                  < SB35        U
(       a:  SUR<                  l^        UGR-                  UR<                  R>                  (       + S69  UR<                  R                  (       aN  UGR/                  5         UGR1                  T R                  R                  USC9  UGR3                  T(S(   (       + S69  U(       d  UR:                  (       a+  T(S(   (       a!  UR                  5         SUR<                  l        URr                  (       d"  URG                  SD[
        R|                  -  5        URG                  S5        U	(       a  URG                  SEU	-  5        UGR5                  UR<                  5        UGR7                  5         T RL                  (       a  T RL                  R                  X5        T GR9                  U5        g s  snf )FNr   r  rM   __getbuffer____releasebuffer__cython_unusedFProfilez	Profile.c	linetracer   Twith_pymethdef
proto_only)r  r  z = NULLr  tp_newrp   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U    (       d4  TS   (       d  TR                  5         STS'   UR                  SS9  STU '   g g )Nr  TFdeclare_gilstate)r  put_ensure_gil)	code_pathr[   	gil_ownedgilstate_decls     r7   
assure_gil=FuncDefNode.generate_function_definitions.<locals>.assure_gil  sK    Y' !56!2246:I23##U#;'+	)$ (r6   r  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                    > TS   (       a  T" SU S9  OTS   (       a  U R                  5         STS'   TS   TS   :X  d"   TR                  < STS   < STS   < 35       eg )Nr  r   )r[   Fz: error path z != success path )put_release_ensured_gilr<   )r[   r  r  r   s    r7   $align_error_path_gil_to_success_pathWFuncDefNode.generate_function_definitions.<locals>.align_error_path_gil_to_success_pathD	  sp    Y'wT2w'002).Ig& )Yy-AA HHHi0)I2FDH HAr6   c                      g r   r-   r-   r6   r7   r  r  Z	  s    r6   	if (%s) {zOPyErr_SetString(PyExc_TypeError, "Memoryview return value is not initialized");__hash__if (unlikely(z == -1) && !PyErr_Occurred()) z = -2;)acquire_gil
return %s;#endif /*!(%s)*/)r   r  r  is_closure_scopeis_passthroughr	   cur_scope_cnameouter_scope_cnamemangle_closure_cnamesr   r  r2  r-  rr   r:  r  rx  get_preprocessor_guardis_generator
is_tracingr  r  r   load_cachedr
  use_fast_gil_utility_codeenter_cfunc_scope	new_labelreturn_from_error_cleanup_labelr   r  r  rF  r<   r.  rV   needs_assignment_synthesispymethdef_requiredpy_funcgenerate_function_headerr  r$  r  putscope_classr  r  needs_outer_scopegenerate_argument_declarationsr;  
in_closureri  put_var_declarationr  is_cv_qualifiedr  cv_base_typer  r  r'  literal_coder!  retval_cnamerR   generate_keyword_listr  buffer_entriesrD  r  put_trace_declarationscode_objectgenerate_result_code	py_resultput_trace_frame_initgetbuffer_checkgetbuffer_initr   ConstructorSlotget_slot_functionr  typeptr_cnamerh  empty_tupler|  
put_increfr   r  r  is_cyfunction
self_cnamer  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_constructionr  
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_xdecrefrN   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   r[   r  r  r  is_getbuffer_slotis_releasebuffer_slotis_buffer_slotpreprocessor_guardtracingr  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  r  buffers_presentr  err_valr0  default_retvalr  condr  r  r  s*   `                                      @@@r7   r  )FuncDefNode.generate_function_definitions  sZ     )<)<,2,B,B,2,D,D!F !' 8 8""#45		//;((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#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%%E$$$((/ &
 &&&&;+?+? &22K""&& //{778Q8QRRJJ,,V-@-@A   //1""4( &&262E2ET2Eu2E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## 13C3C3H3HI  !24D4D4I4IJ *4::??\+IJ
!ZZ__
  DHH0H0H,HX\XdXdlpXp ! r'+DNN$++C6 %%E::005#9#95CSCS''. DT#9 '''0@0@0@33E-1^^-E-E 4 G & %%E|| 6 6u?O?O::0077151I1I 8 K((((/''.zz55d;;

99$F & %%(8(88Ezz###(8(8(H(H(M(M(M$$U1 9
 	))$/%%Ezz###--e488D & >>(( "&$**(,,. $+/(((*',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t7#  y7I J  B ""56:O  112PQ

MN

897#

78

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

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

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

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

8$99;I"i7#>>999$**9F<`<`` JJ|f.R.RRS&&tzz'@'@A>>9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 H "3{7U7U )[-K-KKKdBBC 56 = ??4,,--T__TEUEU5V5VNN4,,-,9%..t; - !9%--d3-- }}[%@%@ATAT%UV

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

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

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

88E  91E F & %%Ezz,, -- . #5+A+A::///y)   91E F &  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6sA''-Q Us   Ak	+Ak	c                     UR                   R                  (       a  [        UR                  S5        OxUR                   R	                  5       (       dY  UR                   R
                  (       d>  UR                   R                  (       d#  [        UR                  SUR                   -  5        UR                  UR                  UR                   UR                  5      nUR                  (       a  UR                  Ul	        U$ )NzInvalid use of 'void'z Argument type '%s' is incomplete)
r  r  r   r<   r  r  r'  declare_argrr   rS  )r   r   r3  r-  s       r7   declare_argumentFuncDefNode.declare_argument	  s    88#''23%%''1B1BchhFaFa#''=HI#((CGG<>>"~~Er6   c                 `   UR                   R                  5       (       a  UR                  R                  [        R
                  " SS5      5        UR                  UR                   5      nSUR                  R                  -  nSnUR                   R                  (       a0  UR                   R                  (       a  UR                  (       a  SOSnUR                  SUUUR                  UR                  UUR                  UR                   5      4-  5        g [#        UR                   S5        g )	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)r  typeobj_is_availabler  r  r   r   typeptr_cname_in_module_stater-  r  is_builtin_typerequire_exactrw  rV   accept_nonerZ  r  r<   r   )r   r3  r[   r  arg_codeexacts         r7   generate_arg_type_test"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gr6   c           	         UR                   R                  (       a  SUR                  R                  -  nOUR                  R                  nUR	                  SU-  5        UR	                  S[        S[        UR                  5      5      UR                  UR                  UR                  5      4-  5        UR	                  S5        g )Nz
%s.memviewz,if (unlikely(((PyObject *)%s) == Py_None)) {zKPyErr_Format(PyExc_TypeError, "Argument '%%.%ds' must not be None", %s); %s   r  )
r  r'  r-  r  rV   r   rN   rZ  r  r<   )r   r3  r[   r  s       r7   generate_arg_none_check#FuncDefNode.generate_arg_none_check	  s    88&& 399??2EIIOOE

AEIJ

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

3r6   c                     g r   r-   r   s     r7   r[  &FuncDefNode.generate_wrapper_functions	  r   r6   c                     UR                  U R                  5        U R                  (       d8  U R                   H'  nUR                  (       a  M  UR                  U5        M)     g g r   )rF  r<   r   rX   r  r  r   r[   r3  s      r7   r   #FuncDefNode.generate_execution_code	  sE    dhh yy~~~006 ! r6   c                     U R                   R                  S   n UR                  R                  R                  R
                  S   R                  nX4$ ! [        [        4 a    S n X4$ f = f)Nr   obj)r  r&  r  r  r:  r,  r   KeyError)r   	py_bufferobj_types      r7   _get_py_buffer_infoFuncDefNode._get_py_buffer_info
  sr    $$003		 ~~//55==eDIIH "" ) 	H""	s   7A A,+A,c                     U R                  5       u  p#UR                  nUR                  SU-  5        UR                  S5        UR                  S5        UR                  S5        g )Nzif (unlikely(%s == NULL)) {zZPyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");z
return -1;r  )r  r  rV   )r   r[   r  r  views        r7   r  FuncDefNode.getbuffer_check
  sW    //1	

0478

 O 	P

< 

3r6   c                     U R                  5       u  p#UR                  nU(       a<  UR                  (       a+  UR                  SU-  U5        UR	                  SU-  U5        g UR                  SU-  5        g )N%s->objz%s->obj = NULL;)r  r  r  r4  r  rV   r   r[   r  r  r  s        r7   r  FuncDefNode.getbuffer_init$
  sc    "668	,,$$Y%5x@Y-x8JJ(4/0r6   c                 8   U R                  5       u  p#UR                  nU(       aa  UR                  (       aP  UR                  SU-  5        UR	                  SU-  U5        UR                  SU-  U5        UR                  S5        g UR                  SU-  5        g )Nzif (%s->obj != NULL) {r  r  zPy_CLEAR(%s->obj);r  r  r  rV   r  r  r  s        r7   rI  #FuncDefNode.getbuffer_error_cleanup-
  s~    "668	,,JJ/$67OOI,h7!!)d"2H=JJsOJJ+d23r6   c                    U R                  5       u  p#UR                  nU(       ab  UR                  (       aP  UR                  SU-  5        UR	                  SU-  U5        UR                  SU-  U5        UR                  S5        g g g )Nzif (%s->obj == Py_None) {r  r  r  r  s        r7   rJ  $FuncDefNode.getbuffer_normal_cleanup8
  ss    "668	,,JJ2T9:OOI,h7!!)d"2H=JJsO	 -8r6   c                    U R                   R                  (       d  g U R                   R                  n[        R                  " U R
                  R                  5      R                  U5      nU(       d  g US:X  a+  U R                   R                  R                  S5      (       d  g US;   a&  U R                   R                  R                  (       a  g UR                  5       $ )N__long____int__r  r  )r-  rT  rr   r   get_slot_tabler  r
  get_slot_by_method_namer:  r  r  preprocessor_guard_code)r   rr   slots      r7   r  "FuncDefNode.get_preprocessor_guardA
  s    zz$$zz''(8(8(C(CD\\]ab:djj&6&6&B&B9&M&M99djj>N>N>_>_++--r6   )r  rx  r  ))r.   r/   r0   r1   r  r  r  r  r  r  is_coroutineis_asyncgenis_generator_bodyis_async_defrx  has_fused_argumentsstar_argstarstar_argr!  r  r  r  r  r  r  r  r  r  r  rv  r  r  r[  r   r  r  r  rI  rJ  r  r5   r-   r6   r7   r  r  e  s    * GML#LKLIHLMK!KR(Y4,0m.^h.7# 1	4.r6   r  c                      ^  \ rS rSr/ SQrSS/rSrSrSrSr	Sr
SrSrSrSrS rS r\S	 5       r\R&                  S
 5       rS rS rS rS S jrS rS rS rS rS!S jrS"S jrS rS rS r S r!S r"U 4S jr#S r$S r%S r&U 4S jr'Sr(U =r)$ )#rX  iO
  )r  rR  r   r1  py_func_statr1  r  FNc                 .    U R                   R                  $ r   )r-  rr   r   s    r7   unqualified_nameCFuncDefNode.unqualified_namet
  s    zzr6   c                 6    U R                   R                  5       $ r   rU  r   s    r7   rx  CFuncDefNode.declared_namew
  rW  r6   c                 h    U R                   (       a  U R                   R                  $ U R                  $ r   )r  r  _code_objectr   s    r7   r  CFuncDefNode.code_objectz
  s%     ,0<<t||''NT=N=NNr6   c                     Xl         g r   )r  )r   r  s     r7   r  r  
  s    'r6   c                 2   UR                   S   U l        UR                  U l        U R                  c  0 U l        U R                  R                  UR                   R                  S0 5      5        U R                  bO  U R                  R                  U5      nUc0  [        U R                  R                  S5        [        R                  nOU R                  R                  U5      nSUR                   ;   =(       a    UR                  S5      (       + U l        [#        U R$                  [&        5      (       aB  U R$                  R                  X!SU R(                  S L-  U R                  U R*                  S9u  p4O6U R$                  R                  X!SU R(                  S L-  U R*                  S9u  p4UR,                  (       d  [        U R                  S5        X@l        U R0                  Ul        U R$                  n[5        US	5      (       d  UR6                  n[5        US	5      (       d  M  XPl        UR:                  U l        U R8                  R<                  nU R*                  S
:X  d  U R>                  (       a'  U(       a   [        U R8                  R                  S5        UR@                  S:X  af  U R*                  S:w  aV  URB                  b2  URB                  RD                  (       a  [        U R                  S5        O[G        U R                  SS5        [I        U R:                  UR:                  5       GHl  u  pxU RK                  X5        UR.                  Ul        URL                  Ul&        URN                  Ul'        U RQ                  UR.                  UR                  U5        UR.                  RR                  (       a  SU l*        UR.                  RV                  (       a'  SU RX                  ;   a  [G        UR                  SS5        UR.                  RV                  (       d  UR.                  RZ                  (       d  GM  U R.                  R\                  (       a  [        UR                  S5        GMB  SU RX                  ;   d  GMU  [G        UR                  SS5        GMo     U RQ                  UR^                  U R                  U5        URL                  n	URN                  n
U R`                  Ul0        U R                   Ul        URc                  XU R                  XR*                  U R>                  U R(                  S LU RX                  U R0                  U Rd                  S9
U l3        UR^                  U l/        U R^                  Rh                  (       a&  U R*                  S:w  a  [        U R                  S5        U R^                  Rj                  (       a&  U R^                  Rm                  U R                  S5        U R0                  (       aj  URn                  (       dY  U R                   (       dH  [q        U R:                  5      S:  d(  U R:                  S   R.                  Rr                  (       d  SU l        U Ru                  U5        U Rw                  U5        g )Nc_compile_guardlocalsr  rN  r%   )r  r'  r  )r  r  z*Suite attached to non-function declarationrX   r|  zBFunction with optional arguments may not be declared public or apir  r  z/Only extern functions can throw C++ exceptions.Tinlinez$Buffer unpacking not optimized away.r   zUBuffer may not be acquired without the GIL. Consider using memoryview slices instead.)r  r  r   definingrx  r$  r  zFunction cannot return an arrayzused as a return valuer   F)<r
  r  r  is_c_class_methodr'  r   getdirective_returnsr  r   r<   r
   r   r  r  r  r)  rO   rR  r  r   r  r  r  r$  r  hasattrr  cfunc_declaratorrX   r  r   r  r  r   r   zipr  rr   r  _validate_type_visibilityr  r  r  rx  is_pythran_exprr   r  r  r*  inline_in_pxdr-  r  r  check_nullary_constructorr&  rN   r  declare_cpdef_wrapperr  )r   r   r  r+  typrR  opt_arg_count
formal_argtype_argrr   r  s              r7   r   !CFuncDefNode.analyse_declarations
  s   "~~.?@!$!5!5  ($&D!$$S^^%7%7"%EF!!-..>>sCI d,,00,?&11	..s3I .#.. @ hYgIhEhdoo':;;#'??#:#:diit.C)D!%!6!64?? $; $T OS $(??#:#:diit.C)DQUQ`Q` $; $b O$((HI
 	!--__
*f--#J *f-- !+OO	--@@OOx'488$''++VX #%$//X*E"".33F3F3N3N dhhEG EqJ %(		388$< J$$S3&mmJO&mmJO'~~J**8==(,,L}}%%+/(}}&&8t~~+E
(NPQR}}&&(--*G*G*G99??*..qs/JNN,RTUV' %=* 	&&s#F##%%"22#44**txxOOYYd*dnn((1C1C	 + E

 ??$$H)D$((=>((66txxAYZC$7$7@U@U499~!1):):)F)F#( ""3'$r6   c                 8   U R                   (       d  g U R                  (       a  [        U R                  S5        U R	                  UR
                  S9n[        R                  X!SSS9nU R                  (       aR  SSKJ	n  [        U R                  U" U R                  [        S5      S9S	9/nUS
   R                  R                  U5        O/ nU R                  R                  n[!        U R                  U R                  R                  U R"                  S S U R$                  ['        U R                  U/S9USS9	U l        UR
                  U R(                  l        U R(                  R+                  U5        SU R(                  R                  l        ['        U R                  U R(                  /S9U l        [0        R2                  U R(                  l        U R(                  R                  U R                  l        S=U R                  l        U R                  R6                  l        U R                  UR:                  U'   U R                  R<                  (       d  UR
                  (       a  [>        R@                  (       a  U RB                  (       a9  U R                  RD                  (       d   eU R(                  U RB                  l        g [G        U R                  U R(                  S9U l!        ['        U R                  U RB                  U RH                  /S9U l$        g g g )Nz&static cpdef methods not yet supported)r&  F)profiler  r   r  rN  r  	decoratorr   rM  )	r<   rr   rX   r  r  rF   r   r1  r   T)r  )%r$  r)  r   r<   call_self_noder&  r  r  r  r  DecoratorNoder   r  r}   r-  rr   DefNoderX   rF   r5  r  r   r  r  r
   r   r  as_variablerD  r,  is_final_cmethodr    lookup_module_cpdefoverrideis_fused_specializedOverrideCheckNoder   )r   r   py_func_bodyr  r1  rr   s         r7   r  "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6(,% 1$((DLL Q($--9ST	 -H ,r6   c                 (   U R                   S:H  =(       d    U R                  n[        USS5      nU(       a\  U(       aT  UR                  (       aB  UR                   S;   d1  UR                  (       d  UR                  (       d  [        US5        ggggggg)zW
Ensure that types used in cdef functions are public or api, or
defined in a C header.
r|  r-  N)r|  r  z:Function declared public or api may not have private types)r  r   r   r&  r_  r   )r   r  r<   r   public_or_apir-  s         r7   r  &CFuncDefNode._validate_type_visibility  st    
 H4@gt,Us':':$$(<<II!2!2cWX "3I = (;U=r6   c                    SSK Jn  U R                  R                  nU(       a%  US [	        U5      U R                  R
                  -
   nU Vs/ s H  oUR                  PM     nnU(       a2  UR                  U R                  U R                  R                  S9nUnGO#U R                  R                  (       a  U R                  R                  R                  R                  n	UR                  U R                  U	R                  S9n
Xl	        UR                  U R                  XR                  R                  S9nOU R                  R                  S   R                  R                  nUR                  U R                  UR                  S9nXl	        UR                  U R                  XR                  R                  S9nU=(       a    [        R                  (       + nUR!                  U R                  UU Vs/ s H  oR                  U R                  US9PM     snUS9n[#        U R                  [$        R&                  US9$ s  snf s  snf )Nr   r  r  )r  	attributer   )functionrX   wrapper_call)r<   r  r   )r   r  r  rX   rN   r  rr   r  r<   r-  r)  r:  r  AttributeNoder    r  SimpleCallNodeReturnStatNoder
   r   )r   omit_optional_argsr&  r  rX   r3  	arg_namescfunccall_arg_namesclass_entry
class_noder  r  skip_dispatchnc_calls                   r7   r  CFuncDefNode.call_self_node$  s   yy~~ATTYY%A%AABD)-.#XX	.&&txxdjjoo&FE&NYY''****66<<K"++DHH;;K;K+LJ*++DHH*PZPZP_P_+`E*//55J ))$(()IH'N++DHH(jjoo+^E,L1L1LM))HH@IJ	1$$TXXA$6	J&	 * (
 $((
8Q8QY_``+ /& Ks   I9#I
c                     U R                   R                   H;  nUR                  (       d  [        UR                  S5        U R                  X5        M=     g )Nr  )r  rX   rr   r   r<   rv  r  s      r7   declare_argumentsCFuncDefNode.declare_arguments@  s8    99>>C88cgg67!!#+ "r6   c                 .    U R                   R                  $ r   )r  r  r  s     r7   r  !CFuncDefNode.need_gil_acquisitionF  s    yy!!!r6   c                    U R                   nUR                  nUR                  (       a  U(       d  UR                  R                  (       a  [        U R                  S5        U R                  R                   HI  nUR                   R                  (       d  M   UR                  (       a  M3  [        U R                  S5        MK     g g g )Nz9Function with Python return type cannot be declared nogilz8Function declared nogil has Python locals or temporaries)
r  r  r   r  r  r   r<   r  r;  in_with_gil_block)r   r   r  r  r-  s        r7   r  CFuncDefNode.nogil_checkI  s    yy==::h++dhhQS))55::)))%2I2I2I$(($^_ 6	 ':r6   c                 x   UR                   U R                  l         U R                  b!  U R                  R                  U5      U l        OPU R                  b!  U R                  R                  U5      U l        O"U R                  U5        U R                  U5        U R                  U R                  5      U l        U $ r   )	r
  r  r  r~   r  r  r  r  r  r   s     r7   r~    CFuncDefNode.analyse_expressionsT  s    &)nn#( $ 1 1 E Ec JD\\%<<;;C@DL'',$$S)44T5E5EFr6   c                     gr  r-   rR  s      r7   r  'CFuncDefNode.needs_assignment_synthesisb  s    r6   c                    U R                   n/ nU R                  nUR                  S [        UR                  5      UR                  -
    HU  n	U	R                  5       n
UR                  U	R                  5      nUR                  (       d  SU
-  n
UR                  U
5        MW     U(       au  U R                  (       ad  [        R                  R                  [        R                  5      nU R                  (       a  UR                  U5        OUR                  SU-  5        UR                  (       a?  U(       a8  UR                  UR                   R                  [        R"                  5      5        UR$                  (       a  UR                  S5        U(       d  S/nUc  U R&                  R(                  nUR+                  USR-                  U5      5      nU R&                  R.                  S:X  a	  SU;  a  SnOSnS nUR1                  U R&                  R2                  5      nU R4                  R                  XS	9nU R6                  =(       d    U R&                  R8                  nU R:                  (       aT  U(       a2  UR<                  R>                  S
   RA                  U R:                  5        URA                  U R:                  5        U(       a  U RC                  5       nU(       a(  UR<                  R>                  S
   RA                  U5        UR<                  R>                  S
   RA                  U< U< U< S35        U(       a(  UR<                  R>                  S
   RA                  S5        URA                  U< U< U< S35        g )NzCYTHON_UNUSED %sz...voidr   privater  static r   )dll_linkagemodule_declarationsz; /* proto*/r  z {)"r  r  rX   rN   r  r  r  rr   cf_usedr  r$  r
   r>  r	   skip_dispatch_cnamer  rE  optional_args_cnamer#  r-  
func_cnamefunction_header_coder   r  build_function_modifiersfunc_modifiersr  r  r   r\  r  partsrV   r  )r   r[   r  with_opt_argswith_dispatchr  r:  	arg_declsr  r3  arg_declr-  dispatch_argentitystorage_classr  rx  headerneeds_protor_  s                       r7   r  %CFuncDefNode.generate_function_headere  s     	yy99Dc$))nT-D-DDEC++-HLL*E==-8X& F 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Cr6   c                    U R                   nU R                   H  nUR                  (       d  M  UR                  UR                  5      nU R
                  (       d  UR                  (       d  MU  UR                  U5      nUR                  UR                  R                  UR                  5      < SU< S35        M     g r  )r  rX   r  r  rr   r  r  r~  rV   r  r  r  )r   r   r[   r:  r3  r-  r   s          r7   r  +CFuncDefNode.generate_argument_declarations  s      99C{{{SXX.==EMMM ==dCFJJ11#))<f F G r6   c                     g r   r-   r   s     r7   r  "CFuncDefNode.generate_keyword_list  r   r6   c           
        ^^
 SnSnU R                   nU R                  R                  (       Ga  TR                  S[        R
                  -  5        U R                   GH,  m
T
R                  (       d  M  UR                  T
R                  5      nU R                  (       d  UR                  (       a  TR                  S[        R
                  < S[        R                  < SU< S35        T
R                  n[        US5      (       d  UR                  n[        US5      (       d  M  TR                  T
R                   < S[        R
                  < SU R                  R#                  UR                  5      < S	35        US
-  nUS
-  nGM/     [%        U5       H  nTR                  S5        M     TR                  S5        U
U4S jn	U R                   H$  m
U	" UR'                  T
R                  5      5        M&     g )Nr   r  if (rM   zn > ) {rr   r  r  r   r  c                 r  > U R                   (       a  TR                  (       d  TR                  U R                  < SU R                  < S35        U R
                  R                  (       a(  U R
                  R                  TU R                  S5        g TR                  U 5        TR                  U 5        g g g )Nr  r  T)
r  r  rV   r  original_cnamer  r'  generate_incref_memoryviewslicer(  put_var_giveref)r-  r3  r[   s    r7   put_into_closureECFuncDefNode.generate_argument_parsing_code.<locals>.put_into_closure  sy    

e6J6JKL::00JJ>>tU[[RVW''.((/ )4r6   )r  r  r  rV   r	   r
  rX   r  r  rr   r  r  r<  rR  r  r  r  opt_arg_cnameranger  )r   r   r[   r)  rD  r:  r-  rR  r  r%  r3  s     `       @r7   r%  +CFuncDefNode.generate_argument_parsing_code  sh     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 99CU..sxx89 r6   c                     g r   r-   r   s     r7   !generate_argument_conversion_code.CFuncDefNode.generate_argument_conversion_code  r   r6   c                    U R                   R                   Hh  nUR                  (       a  U R                  X!5        M'  UR                   R                  (       d  MD  UR
                  (       a  MW  U R                  X!5        Mj     g r   )r  rX   needs_type_testr  r  r  r  r  s      r7   r1  )CFuncDefNode.generate_argument_type_tests  sS     99>>C""++C6%%%cooo,,S7	 "r6   c                   > UR                   R                  S   (       a,  UR                  U R                  5        UR	                  S5        [
        TU ]  U5        U R                  (       a  U R                  R                  U5        g g )Nr  r   )r  r
  rF  r<   rV   ro   r   r  )r   r[   rQ   s     r7   r   $CFuncDefNode.generate_execution_code  sa    &&{3MM$((#JJrN'-55d; r6   c                 z    U R                   R                  (       a  gU R                  R                  R                  $ )N0)r  r  r-  r  r  r   s    r7   r@  CFuncDefNode.error_value  s(    ''::??222r6   c                 B    U R                   R                  R                  $ r   )r-  r  r  r   s    r7   rC  )CFuncDefNode.caller_will_check_exceptions  s    zz...r6   c                    SnU R                   nUR                  nUR                  Gb1  US-  nUR                  nU R                   R                  < [        R
                  < SU< 3Ul        UR                  5         U R                  USUR                  R                  UR                  R                  UR                  S9  U R                  R                  (       d  UR                  S5        U R                  R                  nUS [        U5      U R                  R                  -
    Vs/ s H  ofR                  PM     nnUR                  R                  (       a   UR!                  [        R"                  5        O"UR                  (       a  UR!                  S5        UR                  R                  (       a   UR!                  [        R$                  5        O"UR                  (       a  UR!                  S5        UR                  U R                   R                  < SS	R'                  U5      < S
35        UR                  S5        UR                  b  GM0  g g s  snf )Nr   r   wrap_)r  r  r  return r3  r  r  r   r  r  )r-  r  
prev_entryr  r	   r<  rV   r  r  r  r  r  r	  rX   rN   r  r  r	  r
  r   )r   r[   kr-  r  rX   r3  arglists           r7   r[  'CFuncDefNode.generate_wrapper_functions  s    

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

0E0EvGZGZ\]^EJJL))a#jj77#jj;;&&	 * (
 ##++#99>>D,01X#d)DII<X<X2X,YZ,YSyy,YGZzz((v99:))s#zz,,v99:--v&JJDJJ$9$9499W;MNOJJsO/ * [s   +Ic                 v   > [         TU ]  5       nU R                  (       a  U(       a   eSU R                   3$ U$ )Nz#if )ro   r  r  )r   super_guardrQ   s     r7   r  #CFuncDefNode.get_preprocessor_guard  s;    g46""?$../00r6   )r  r  rX   r   r  r  r'  r-  r  r  r)  r$  r  r  r  r  r  )r   r   r   )r   r   N)*r.   r/   r0   r1   r   r  r  r1  r'  r  r  r\  r  r  r  r  rx  r  r  setterr   r  r  r  r  r  r  r~   r  r  r  r  r%  r+  r1  r   r@  rC  r[  r  r5   rx   ry   s   @r7   rX  rX  O
  s    0 TK0KMJHOLL/ O O ( (d%L-U^
Ya8,"	`0DdG#:L8<3/> r6   rX  c                   &    \ rS rSr/ rSrSrS rSrg)PyArgDeclNodei  Fc                 :    U R                   R                  X5        g r   )r-  r  rR  s      r7   r  +PyArgDeclNode.generate_function_definitions  s    

00;r6   r-   N)	r.   r/   r0   r1   r   r  r  r  r5   r-   r6   r7   rC  rC    s     KKK<r6   rC  c                       \ rS rSrS/rSrg)r  i  r  r-   N)r.   r/   r0   r1   r   r5   r-   r6   r7   r  r    s     -Kr6   r  c                      \ rS rSr/ SQrSS/rSrSrSrSr	Sr
SrSrSrSrSrSrSrSrSrSrSrSrSrS	rSrSrS
 r  S S jrS rS rS rS r S r!S r"S r#S r$S r%S r&S!S jr'S r(S r)S r*S"S jr+S r,S r-S r.S r/Sr0g)#r  i$  )rX   r  r  r   r1  r  r1  r  FNr3  r   Tc                 J   [         R                  " X40 UD6  S=n=n=pVU R                   H]  nUR                  (       a  US-  nUR                  (       a  US-  nUR
                  (       d  US-  nUR
                  (       a  MX  US-  nM_     X0l        X@l        XPl        X`l	        g r9   )
r  r   rX   r  r  r  num_posonly_argsnum_kwonly_argsnum_required_kw_argsnum_required_args)r   r<   rY   pr;  rkrr3  s           r7   r   DefNode.__init__V  s    T/$/A99C||Q{{Q{{!GB;;;Q  !" $&!!"r6   c
                    U R                   (       a   [        U R                   R                  S5        U R                  (       a   [        U R                  R                  S5        U=(       d    Su  pU=(       d    U	nUc  / nU R                   H^  nUR                  USS9u  pUR                  [        R                  " UR                  S UR                  [        UR                  S95        M`     [        R                  " [        USS UUU	US9n[        U R                  US	9nGO%Uc  UR                  nUR                  nUR                   (       a  S
n[#        U R                  5      [#        UR                  5      :w  d  UR$                  (       a,  [        U R                  S5        [        UR                  S5        ['        [)        U R                  UR                  5      5       Ha  u  nu  nnUR                  USUS:H  =(       a    UR*                  S9u  pUb  U[        R                  L d  MJ  UR                  Ul        Xl        Mc     U
cV  UR.                  bI  SSKJn  UR5                  U R                  [7        UR.                  5      UR8                  UR.                  S9n
[;        U R                  [=        U R                  U R                  S S9U R                  SUR                   U
UUR>                  UR@                  S9	n[C        U R                  U=(       d    / [E        U R                  UR8                  S	9UU RF                  U RH                  URJ                  UUR>                  UR@                  SS[M        US0 5      US9$ )Nz'cdef function cannot have star argumentz+cdef function cannot have starstar argumentr  r   rf  )rr   r  rS  r  r<   F)r  rX   r#  r  r  r   r  r  r  Tzwrong number of argumentszprevious declaration herer   r  r  r  r  )r  rX   r#  r  r  r  r  r   r  r'  )rx  r  rR  r   rF   r$  r  r  r   r  r   r'  r  )'r  r   r<   r  rX   r  r  r
   r  rr   rS  r   r"  r[  r:  r  r  rN   r#  r  r  r  r+  r  r  r  r  r  r  r  r  r  r   rX  rs  r   rF   r  r   )r   r  r:  r$  returns
except_valr  rx  r   r  r  r  
cfunc_argsr  r+  r  
cfunc_typer)  r  r  rR  s                        r7   as_cfunctionDefNode.as_cfunctionh  s   ==$--##%NO$##'')VW+5+F(!=J"ii
(2(:(:51(:(M%!!*"9"9?S?S@DEOEZEZ?M>Hnn	#N O ( $--.3=:?>B>M497?=HJJ  z:E}J)) +/'499~Z__!559O9Odhh ;<eii!<=-6s499joo7V-W))J(2(:(:51HIQHiSXSiSi ); )l%<4:+D+D#D&.mmJO1@. .X "z'A'A'M,'00J$>$> ?jF\F\ * : : 1 <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 	7r6   c                 n    U R                   (       a  gU R                  (       d  U R                  (       a  gg)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)r  r  r  r   s    r7   is_cdef_func_compatibleDefNode.is_cdef_func_compatible  s%    
 ==D--r6   c                    U R                   (       av  U R                    Hf  nUR                  nUR                  (       d  M"  U =R                  UR                  S:H  -  sl        U =R
                  UR                  S:H  -  sl        Mh     U R                  (       a  UR                  S5      (       a  SU l        U R
                  (       a  UR                  S5      (       a  SU l        UR                  (       d  UR                  (       a  U R                  S:X  a  UR                  (       a  SU l        OU R                  S:X  a(  UR                  (       a  [        U R                  S5        OU R                  [        ;   a~  U R                  (       dm  SU l        SS	KJn  U R                   =(       d    / U l         U R                   R                  S
[        U R                  U" U R                  [!        S5      S9S95        U R#                  U5        U R                  S:X  a  U R%                  U5        OU R'                  U5        U R)                  U5        U R*                  R,                  R/                  5       U l        U R.                  [0        L a{  U R2                  (       aj  UR4                  S   (       aV  U R*                  R6                  (       d;  U R2                  R9                  U5      u  pVU(       a  UR:                  (       a  X`l        U R=                  U5        [?        U R                  U U R*                  R                  U R@                  U RB                  U RD                  U R.                  S9U l#        U RF                  RI                  U5        g )Nr&  rN  Frp   Tr(   z7'__init_subclass__' is not supported by extension classr   r  r   r  r  z<lambda>re  )r  rr   rX   r  r  r  )%r1  r  r   is_classmethodrr   is_staticmethodr  r  r  r   r<   IMPLICIT_CLASSMETHODSr  r  insertr  r   analyse_argument_typesdeclare_lambda_functiondeclare_pyfunctionanalyse_signaturer-  	signaturer  r   r  r
  rT  rr  r  r  DefNodeWrapperrX   r  r  
py_wrapperr   )r   r   r  r`   r  r  r  s          r7   r   DefNode.analyse_declarations  ss   ??!__	 **<<<''499+EE'((DII,GG(	 - 3??=#A#A"'DCOON$C$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;#:#:'2$$(HH]]**((* 	,,S1r6   c                 ^   UR                   R                  S0 5      U l        UR                   S   nUR                  nS Ul        U R                   GH  n[        US5      (       a  S nOUR                  R                  U5      n[        U5      (       a3  UR                  (       a"  [        R                  " UUR                  /5      nUR                  R                  Xa5      u  pWUR                  Ul        Xtl        U R!                  X5        U(       a'  UR"                  (       a  [%        U R&                  S5        UR                  R)                  5       Ul        S Ul        SUl        SUl        SUl        UR                  R2                  (       d6  UR                  R4                  (       d  UR                  R6                  (       a  UR8                  (       a	  SUl        GO5UR<                  (       a	  SUl        GOUR                  R>                  (       dQ  UR                  R@                  (       d6  UR                  R4                  (       d  UR                  R6                  (       a7  URB                  (       a  URB                  RD                  c  SUl        OX$l        OxSUl        OpUR                  RF                  (       dU  SUl        UR<                  (       a  [%        UR&                  S	5        UR8                  (       a  [%        UR&                  S
5        UR                  RH                  (       d  GM  SU l%        GM     X1l        [        U5      (       aM  [M        U R                  5       VV	s/ s H$  u  pU	R                  RN                  (       d  M"  UPM&     sn	nU l(        g / U l(        g s  sn	nf )Nr  allow_none_for_extension_argsrr   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'  r  rX   r  r  r  r"   r  r
   r  
org_bufferrR  rr   r  r  r  r   r<   as_argument_typehdr_typer]  r.  r  r  r  r'  r  r  r  is_extension_typer~  r  r  r  r  r  r  is_numpy_buffernp_args_idx)
r   r   ri  f2sr3  r+  r  r  r)  as
             r7   r`  DefNode.analyse_argument_types  s{    # 2 28R @(+7V(W%## $99CsF##"&MM11#6	 "#&&9+D+D * 4 4!!,,6. !/I
 NN**9: &*//$$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 d !$#-6tyy-A\-AcaQVVE[E[-A\D!D  ]s   ,!N)N)c                 J   U R                   R                  (       a{  U R                  (       a  [        U R                  S5        [        U R                  5      S:H  =(       a$    U R                  =(       d    U R                  (       + U R                   l	        GOU R                  (       Gd  U R                  (       Gd  UR                  S   (       a5  [        U R                   Vs/ s H  o"R                  PM     sn5      (       Ga  U R                   R                  [        R                  L a  [        U R                  5      S:X  a!  [        R                   U R                   l        GOA[        U R                  5      S:X  aW  U R                  S   R"                  c=  U R                  S   R$                  (       d  [        R&                  U R                   l        OU R                   R                  [        R(                  L a  [        U R                  5      S:X  a   [        R*                  U R                   l        Op[        U R                  5      S:X  aW  U R                  S   R"                  c=  U R                  S   R$                  (       d  [        R,                  U R                   l        U R                   R                  nUR/                  5       nUR1                  5       nU[        R(                  L aZ  US:X  aT  [        U R                  5      S:X  a;  U R                  (       a*  [        R                  =o0R                   l        SU l        S=pEU R4                  (       aW  UR6                  (       aF  S=pESU l        [8        R8                  " U5      =U R                   l        nSUl        SUl        SUl        U R>                  (       d  U R4                  (       a;  U R@                  (       a*  UR6                  (       a  U RB                  RD                  S S 2	 [G        [I        U[        U R                  5      5      5       GH3  nU R                  U   nSUl%        Xe:  a  SUl&        URO                  U5      (       an  U R4                  (       d]  U R>                  (       a$  SUl(        [R        RT                  =Ul+        Ul,        OSUl'        URZ                  =Ul+        Ul,        SUl.        M  UR_                  U5      Ul+        URX                  Ra                  URV                  5      (       a  M  URV                  Rb                  (       a%  URX                  Rb                  (       a
  SUl2        GM,  SUl.        GM6     U[        U R                  5      :  a  U Rg                  5         g U[        U R                  5      :  a  UR<                  (       d  U Rg                  5         U R                   HU  nURJ                  (       d  M  URX                  Rh                  (       d  URX                  Rj                  (       d  MN  SUl2        MW     URm                  5       nU(       a  [        Rn                  U;   a  U R                   R                  (       d  U R                  (       ad  SnU R                   HQ  nURJ                  (       d  M  UR$                  (       a  M)  URN                  (       a  M<  URP                  (       a  MO  SnMS     OSnU(       d!  URq                  5       =o0R                   l        g g g g g s  snf )	Nz8special functions of cdef classes cannot have decoratorsr   always_allow_keywordsr   r%   Tr  F)9r-  rT  r1  r   r<   rN   rX   r  r  trivial_signaturer
  rb  r  rd  r   pyfunction_signaturepyfunction_noargsr  r  pyfunction_oneargpymethod_signature	unaryfuncibinaryfuncmax_num_fixed_argsmin_num_fixed_argsself_in_starargr]  r  r   fixed_arg_formathas_generic_argsr\  r  decorator_indirectionr6  r(  minr  r  r  r  r   	type_typerl  r  r  r]  fixed_arg_typer  r  r.  bad_signaturerm  r~  method_flagsmethod_varargswith_fastcall)	r   r   r3  signfixed
min_nfixedr)  mfuses_args_tuples	            r7   rc  DefNode.analyse_signature5  s   ::  dhh Z[+.tyy>Q+>+kHjY]YjYjCkDJJ(---4#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 "##FC$8$8"##F#'D )-37DJJ 3#&C "&C#'C   D$8$8((S-A-A**003s63tyy>23A))A,CCN15.q!!$*>*>&&&'CO.5.?.??CL38&'CO.1oo=CL38'($"11!4xx''55||//CHH4H4H./+/0,' 4* DII& c$))n$''""$yy>>>sxx'A'ASXXE]E]E]*+C' ! )**b09N9N }}"&99Cs{{{ #*/	 % #("-0->->-@@jj* #! :O02[ ;s   "\ c           	         U R                   R                  nSUR                  5       -  nUR                  (       a  US-  nO'UR                  (       a  USUR                  5       -  -  nU R                  nU R                   R                  (       a  SnOSn[        U R                  SX@R                  [        U R                  5      U4-  5        g )Nz%dz or morez to %dzSpecial methodMethodz>%s %s has wrong number of arguments (%d declared, %s expected))r-  rd  r}  r  optional_object_arg_countr|  rr   rT  r   r<   rN   rX   )r   r  expected_strrr   descs        r7   r  DefNode.bad_signature  s    jj""c4466J&L**Hs'='='???Lyy::  #DDdhhX))S^\\; ; 	<r6   c                 V   U R                   nUR                  U5      nU(       a  UR                  (       a1  UR                  R                  (       d  [        U R                  S5        UR                  R                  (       a9  UR                  (       d(  U R                  (       d  [        U R                  SS5        UR                  X R                  U R                  (       + S9nX0l        UR                  UR                  5      n[!        ["        R$                  U-   U-   5      U R                  l        [(        R*                  (       a  [-        U R                  U R.                  5      Ul        [!        ["        R0                  U-   U-   5      Ul        UR4                  (       a  UR                   [6        R8                  ;   d5  UR.                  (       a$  UR                   S;   a  UR:                  S   (       a  S Ul        g [!        ["        R>                  U-   U-   5      Ul        g g S Ul        g )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) rr   r  r  r  is_final_typer   r<   r  r  is_builtin_cmethodr   r   rb  r-  next_idscope_prefixr   r	   pyfunc_prefixpyfunc_cnamer    r-  rG   rF   funcdoc_prefix	doc_cnamerT  r   	invisibler
  wrapperbase_cnamewrapperbase_prefix)r   r   rr   r-  prefixs        r7   rb  DefNode.declare_pyfunction  s{   yy%%%coo.K.Kdhh \]zz&&u/G/GPTP_P_ #PQRT &&tXX$//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+   EIr6   c                     UR                  U R                  U R                  5      nS Ul        X l        UR
                  U R                  l        g r   )ra  lambda_namer<   rF   r-  r  r  )r   r   r-  s      r7   ra  DefNode.declare_lambda_function  s:    ++D,<,<dhhG	
"'++

r6   c                 r   U R                    H  nUR                  (       d  [        UR                  S5        UR                  (       ac  UR                  UR                  UR                  UR                  5      Ul        UR                  R                  (       a  SUR                  l	        OU R                  X5      Ul        SUR                  l        SUR                  l        UR                  UR                  l        M     U R                  XR                  5        U R                  XR                   5        g )Nr  r3  r   )rX   rr   r   r<   r]  r=  r  r-  r  rb  rv  ri  rD  r  declare_python_argr  r  r  s      r7   r  DefNode.declare_arguments  s    99C88cgg67##OOCHHchhH	88''%(CIIN 11#;	 CIICIIN$'OOCII!  	]]3%6%67r6   c                     U(       as  UR                   S   S:w  a  [        R                  nO[        nUR	                  UR
                  X2R                  5      nSUl        SUl        SUl	        SUl
        XBl        g g )Ninfer_typesFr   r3  )r
  r
   unspecified_typer   r=  rr   r<   ri  rD  rb  r*  r-  )r   r   r3  r  r-  s        r7   r  DefNode.declare_python_arg  se    ~~m,5!22%OOCHHdGG<EELEJEJ$%E!I r6   c                 v   UR                   U R                  l         U R                  U5        U R                  U5        U R	                  U5      (       dJ  U R
                  (       a9  U R
                  S S S2    H#  nUR                  R                  U5      Ul        M%     U R                  R                  U5        U $ )Nr   )
r
  r  r  r  r  r1  r  r~   rf  prepare_argument_coercion)r   r   r  s      r7   r~   DefNode.analyse_expressions  s    &)nn###C(  %..s33!__TrT2	&/&9&9&M&Mc&R	# 3 	11#6r6   c                     U R                   (       a  gU R                  (       d  U R                  R                  (       a  gU R                  (       a  gU R                  R
                  (       a  gU R                  R                  (       a  gUR                  (       d  UR                  (       a5  Uc  U R                  R                  S   $ UR                  R                  S   $ UR                  =(       d    UR                  $ )NTFbinding)r]  specialized_cpdefsr-  r  no_assignment_synthesisrT  is_anonymousr&  r  r  r
  r  r  r  rR  s      r7   r  "DefNode.needs_assignment_synthesis  s    ""djj&E&E''::  ::""#"6"6|''229==''229==$$<(<(<<r6   c                 B    U R                   R                  R                  $ r   )r-  rd  r@  r   s    r7   r@  DefNode.error_value  s    zz##///r6   c                 B    U R                   R                  R                  $ r   )r-  rd  r  r   s    r7   rC  $DefNode.caller_will_check_exceptions
  s    zz##333r6   c                 v   U R                   (       aA  UR                  5       n[        R                  U R                   U5      nUR	                  X25        U R
                  (       a@  U R                  R                  U R                  l        U R                  R	                  X5        [        R	                  XU5        g r   )
defaults_getterr)  r  r  r  py_wrapper_requiredr-  r  rf  r  )r   r   r[   module_scopedirectives_nodes        r7   r  %DefNode.generate_function_definitions  s    ++-L4AA$BVBVXdeO99,M ##)-)>)>DOO&OO99#D11$TBr6   c                    U(       a.  U R                   (       a  U R                  R                  XS5        g / nU R                  R                  R
                  (       a:  S[        R                  -  nU R                  (       d  SU-   nUR                  U5        S nU R                   H  nUR                  U" U5      5        M     U R                  (       a!  UR                  U" U R                  5      5        U R                  (       a!  UR                  U" U R                  5      5        U(       a  SR                  U5      nOSnU R                  R                  U R                  R                   5      n	UR"                  S   n
U R%                  5       nU(       a  U
R'                  U5        U
R'                  SU	< S	U< S
35        U(       a  U
R'                  S5        UR'                  SU	< S	U< S35        g )NTPyObject *%sCYTHON_UNUSED c                     U R                   nUR                  (       a  UR                  nOUR                  nUR                  R                  U5      nUR                  (       d  SU-   nU$ )Nr  )r-  r  r"  r  r  r  r  )r3  r-  r  decls       r7   arg_decl_code7DefNode.generate_function_header.<locals>.arg_decl_code(  sR    IIE,,::..u5D=='$.Kr6   r   r  declsr  r  z); /* proto */r  r   )r  rf  r  r-  rd  has_dummy_argr	   r"  r  r  rX   r  r  r   r  r  r  r  r  rV   )r   r[   r  r  arg_code_listself_argr  r3  r  dc
decls_coder_  s               r7   r   DefNode.generate_function_header  sx   ''88$0::--%(9(99H))+h6  *		 99C  s!34 ==  t}}!=>  t/@/@!AByy/HH..tzz/F/FG%%g.
!88:/0,.9	;X&

H56r6   c                     g r   r-   rR  s      r7   r  &DefNode.generate_argument_declarationsI  r   r6   c                     g r   r-   r   s     r7   r  DefNode.generate_keyword_listL  r   r6   c                    ^ U4S jnU R                    H  nU" UR                  5        M     U R                  U R                  4 H  nU(       d  M  U" UR                  5        M      g )Nc                   > U R                   (       Gaa  U R                  R                  (       a  U R                  R                  c   eTR                  R                  [        R                  " SS5      5        TR                  SR                  U R                  U R                  5      5        O-TR                  U R                  < SU R                  < S35        U R                  R                  (       a(  U R                  R                  TU R                  S5        g U R                  (       a#  TR                  U 5        TR!                  U 5        g TR#                  U 5        TR%                  U 5        g g )NIncludeStringHzStringTools.czmemcpy({0}, {1}, sizeof({0}));r  r  T)r  r  r  r  r  r  r   r   rV   formatr  r"  r'  r#  r*  r+  put_var_xgiverefr(  r$  )r-  r[   s    r7   r%  @DefNode.generate_argument_parsing_code.<locals>.put_into_closureQ  s   ::&& !::??666$$55k6M6MN^`o6pqJJ?FFu{{TYThThijJJU[[%:N:NOP::00 JJ>>tU[[RVW** ((/))%0''.((/+  r6   )rX   r-  r  r  )r   r   r[   r%  r3  s     `  r7   r%  &DefNode.generate_argument_parsing_codeO  sN    	0. 99CSYY' ==$"3"33Cs + 4r6   c                     g r   r-   r   s     r7   r1  $DefNode.generate_argument_type_testsn  r   r6   )r1  r'  r-  r  r\  r]  ro  rJ  rI  rL  rK  rf  r  r~  )	NNTNNFNFFr   r   )1r.   r/   r0   r1   r   r  r]  r\  r  reqd_kw_flags_cnamer   r  r1  r  r-  r  r~  py_cfunc_noderequires_classobjdefaults_structrF   fused_py_funcr  rf  r  r  r  r   rV  rY  r   r`  rc  r  rb  ra  r  r  r~   r  r@  rC  r  r  r  r  r%  r1  r5   r-   r6   r7   r  r  $  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\,>r6   r  c                       \ rS rSrSrSrSrS rS rS r	S r
S rS	 rS
 rS S jrS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS r S r!Sr"g)!re  ir  NFc                 T   [         R                  " U /UQ70 UD6  U R                  R                  U l        U R                  R                  U l        U R                  R
                  U l        U R                  R                  U l        U R                  R                  U l        S U l        g r   )	r  r   r  rI  rJ  rK  rL  r~  rd  )r   rX   r   s      r7   r   DefNodeWrapper.__init__y  s{    T3D3F3 $ < <#{{::$(KK$D$D!!%!>!>#{{::r6   c                 f   U R                   R                  nU R                  nUR                  UR                  5      n[        [        R                  U-   U-   5      Ul        [        [        R                  U-   U-   5      Ul
        UR                  U l        U R                   R                  U l        g r   )r  r-  rr   r  r  r   r	   pywrap_prefixr  pymethdef_prefixpymethdef_cnamerd  ro  )r   r   target_entryrr   r  s        r7   r   #DefNodeWrapper.analyse_declarations  s    {{((yyS--."1&2F2F2ORV2V"W'6v7N7NQW7WZ^7^'_$%//;;22r6   c                    U R                    H  nUR                  R                  (       d$  UR                  R                  U5      (       d  M@  MB  UR                  (       d  MU  UR                  R                  (       a  Mr  UR                  R                  U5      (       a  M  M     U R                  (       a  U R                  R                  R                  (       dr  U R                  R                  nSUl	        UR                   HD  nUR                  (       a  M  UR                  R                  (       d  M3  SUR                  l        MF     g g g )Nr   T)rX   r  r  create_from_py_utility_coderl  r+  r  r-  r  r*  cf_assignmentsri  rm  r   cf_maybe_null)r   r   r3  r-  asss        r7   r  (DefNodeWrapper.prepare_argument_coercion  s    
 99C88''xx;;C@@ Acll&>&>&>||==cBB  T%6%6%<%<%D%D %%++E$%E!++zzzcggooo,0CGG) , &Er6   c                     [        U R                  5      nUS:X  dB  US:X  a=  U R                  S   R                  (       d  U R                  S   R                  (       a  ggr9   )rN   rX   r  r  )r   argcounts     r7   signature_has_nongeneric_args,DefNodeWrapper.signature_has_nongeneric_args  sD    tyy>q=A499Q<#;#;#'99Q<#;#;r6   c                 .    U R                   R                  $ r   )rd  r  r   s    r7   signature_has_generic_args)DefNodeWrapper.signature_has_generic_args  s    ~~...r6   c                 *   / nU R                   R                  (       a  UR                  [        R                  5        U R
                   GHA  nUR                  R                  (       aZ  UR                  R                  [        R                  " SS5      5        UR                  SUR                  R                  -  5        My  UR                  (       a  UR                  R                  (       dw  UR                  R                   (       d\  UR                  R"                  (       dA  UR                  UR                  R%                  UR                  R                  5      5        GM  UR                  UR                  R                  5        GMD     U R&                  (       a/  UR                  U R&                  R                  R                  5        U R(                  (       a/  UR                  U R(                  R                  R                  5        SR+                  U5      nU R,                  R.                  (       d"  UR1                  S[        R2                  -  5        UR5                  U R6                  R                  R8                  < SU< S35        g )NMoveIfSupportedCppSupport.cpp__PYX_STD_MOVE_IF_SUPPORTED(%s)r   z%s = r  r  )rd  r  r  r	   r"  rX   r  r  r  r  r   r   r-  r  rl  r'  rS  r  r|  r  r  r   r  r  r	  r  rV   r  r  )r   r[   rX   r3  s       r7   r  %DefNodeWrapper.generate_function_body  s   >>''KK))*99C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 	3r6   c                 .
   U R                   R                  nUR                  U R                  5        UR	                  S5        UR	                  S5        U R                   R                  5       nU(       a  UR	                  U5        UR                  U5        UR                  5       Ul        U R                   R                  X5      =(       d    U R                   R                  nU R                  X%5        U R                  X25        UR                  5       nU R                  R                  (       a  SnOSnU R                  R                   (       d?  UR	                  U R                  R#                  [$        R&                  5      < U< S35        UR)                  5         UR+                  [-        SU R.                  -  5      5        U R1                  X2U5        U R3                  U5        U R5                  U5        UR7                  UR8                  5        UR                  U R                  5        UR	                  S5        UR	                  S5        UR                  S5      nUR;                  UR<                  5      (       a  UR?                  UR@                  5        URC                  UR<                  5        UR8                  RE                  5        H  u  pURG                  X5        M     U RI                  5       nUb'  UR	                  [$        R&                  < SU< S35        U RK                  U5        UR?                  U5        URC                  UR@                  5        U RK                  U5        URC                  U5        URL                   HK  nURN                  (       d  M  URP                  (       a  URS                  U5        M:  URU                  U5        MM     [W        URL                  5      nU RX                   H  nURZ                  R                  (       a  M   UR\                  U;  d  M2  UR\                  RP                  (       a  URS                  UR\                  5        Mj  URU                  UR\                  5        M     UR_                  5         U R                  R                   (       d"  UR	                  S	[$        R&                  -  5        UR	                  S
5        URa                  5         U(       a  UR	                  SU-  5        g g )Nr   z/* Python wrapper */z = 0r  z%s (wrapper)r  
cleaned_upr  r  r  r  )1r  r  rF  r<   rV   r  r  r  r  r  r  r  r  rR   r  r  r  r  r	   r  rV  rW  r   rr   r%  r1  r  rY  r  r6  r7  r8  r9  r:  r;  r<  r@  %generate_argument_values_cleanup_coder;  ri  r*  rQ  put_var_decrefr   rX   r  r-  rX  rZ  )r   r   r[   r  r_  r  rc  retval_initvalues_cleaned_up_labelr  r  rp  r-  var_entries_setr3  s                  r7   r  ,DefNodeWrapper.generate_function_definitions  s   {{&&dhh

2

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

2

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

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

3JJ),>>? r6   c                 
   / nU R                   nUR                  (       d  U R                  (       a:  S[        R                  -  nUR                  (       d  SU-   nUR                  U5        U R                   H  nUR                  (       a  M  UR                  (       d  UR                  (       a   UR                  SUR                  -  5        MX  UR                  UR                  R                  UR                  5      5        M     U R                  R                  nUR                  (       d4  UR!                  5       ["        R$                  /:X  a  UR                  S5        UR&                  (       a  S[        R(                  < S[        R*                  < 3n	UR,                  (       aS  S[        R(                  < S[        R.                  < S[        R*                  < 3n
UR                  SU
< S	U	< S
35        OUR                  U	5        UR                  (       aH  [1        [3        U R                  5      UR5                  5       5       H  nUR                  SU-  5        M     SR7                  U5      nSnUR8                  S;   a  UR:                  R<                  (       a  SnSnU R>                  R                  UR@                  5      nU< SU< SU< S3nURC                  SU-  5        U(       a@  U R                  RD                  (       a$  U R                  RD                  RG                  XSS9  g [H        RJ                  (       Ga<  URL                  (       Ga*  U R                  RD                  (       Gd  UR:                  RN                  (       d  UR                  (       a  URP                  (       a  URL                  nURR                  (       a  URU                  5       nUR                  (       a  UR8                  S;   d2  URC                  SURV                  < SURY                  5       < S35        UR                  (       a@  URC                  S5        URC                  SURP                  -  5        URC                  S5        U(       d  U R                  RD                  (       aC  UR[                  SUR\                  -  5        UR_                  U R                  R                  SSS9  URC                  SU-  5        g )Nr  r  zCYTHON_UNUSED PyObject *unusedz
PyObject *, PyObject *zPyObject *const *z, Py_ssize_t z
#if CYTHON_METH_FASTCALL
z
#else
z
#endif
z%CYTHON_UNUSED PyObject *unused_arg_%sr   r   r  Fr  r  r  z%s; /*proto*/T)r  zPyDoc_STRVAR(r   #if CYTHON_UPDATE_DESCRIPTOR_DOCzstruct wrapperbase %s;r  zstatic PyMethodDef %s = r  )
allow_skipz%s {)0rd  r  r~  r	   r"  r  rX   r  r  r  r`  rl  r  r  r-  rT  r  r   method_noargsr  
args_cname
kwds_cnameuse_fastcallnargs_cnamer(  rN   r|  r   rr   r:  r  r  r  rV   r  r  r    r-  rF   is_property_scoper  
is_unicodeas_utf8_stringr  rY  r	  r  put_pymethoddef)r   r[   r  r  r  r  r  r3  r-  varargs_argsfastcall_argsr  r  r  r  docstrs                   r7   r  'DefNodeWrapper.generate_function_header   s   nn 4 4%(9(99H$$+h6  *99C>>>??coo!((#--)GH!((55cmmD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$$%Lq%PQ E99]+ JJ@@KK00!B"N..u/?/?@&("h7

?V+,{{(( ))BBT C ;5999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?#r6   c                    U R                    Hb  nUR                  (       d  M  UR                  (       a   UR                  SUR                  -  5        MG  UR                  UR                  5        Md     UR                   H'  nUR                  (       d  M  UR                  U5        M)     U R                  5       (       as  S[        R                  -  nU R                  R                  (       a4  UR                  S5        UR                  U5        UR                  S5        OUR                  U5        UR                  S[        R                  -  5        g )NzPyObject *%s = 0;zCYTHON_UNUSED Py_ssize_t %s;#if !CYTHON_METH_FASTCALLr  z"CYTHON_UNUSED PyObject *const *%s;)rX   r  r]  rV   r`  r  r-  r;  ri  r  r	   r  rd  r  kwvalues_cname)r   r   r[   r3  r-  
nargs_codes         r7   r  -DefNodeWrapper.generate_argument_declarationss  s    99C~~~''JJ2S]]BC,,SYY7  __E|||((/ %
 **,,7&:L:LLJ~~**

67

:&

8$

:& 	

7&:O:OOPr6   c           
      	   UR                  5       nUR                  nUR                  S5      nU R                  S:  nU R                  S L=(       d    U R
                  S L=(       d    UnU R                   HB  n	U	R                  R                  (       a  M   U	R                  R                  U5      (       a  MB  MD     U R                  5       (       Ga+  U R                  R                  (       a  UR                  S5        UR                  S5        UR                  [        R                  < S[        R                   < S35        UR                  S5        UR                  [        R                  < S[        R                   < S	UR#                  S
[        R                  -  5      < SU R%                  5       < S35        UR                  S5        U R                  R                  (       a  UR                  S5        UR&                  R)                  [*        R,                  " SS5      5        UR                  [        R.                  < SU R                  R0                  < S[        R                   < S[        R                  < S35        U R                  5       (       d/  U(       a  [3        U R4                  S5        U R7                  U5        OJU R9                  5       (       d  U R;                  U5        O#U R=                  U R                  X#5        SU l        XBl        URA                  U5      (       Ga  URC                  U5        URE                  U5        U RG                  U5        U(       a  U RI                  U R                  U5        U R
                  (       ap  U R
                  RJ                  RL                  (       a&  URO                  U R
                  RJ                  5        O%URQ                  U R
                  RJ                  5        U R                   HX  n	U	R                  R                  (       a  M   U	R                  RR                  (       d  M=  URU                  U	RJ                  5        MZ     URW                  U RX                  RJ                  RZ                  5        UR]                  5         UR                  SU R%                  5       -  5        URE                  U5        g )Nargument_unpacking_doner   r  z#if CYTHON_ASSUME_SAFE_SIZEz = PyTuple_GET_SIZE(r  r  z = PyTuple_Size(z); if (z%s < 0z	) return r  r  fastcallrz  z = __Pyx_KwValues_r  r   z.This method cannot have * or keyword argumentsTr  )/new_error_labelr7  r  rJ  r  r  rX   r  r  r  r  rd  r  rV   r	   r  r  rK  r@  r  r  r   r   r  fastvarr   r<   r+  r  generate_stararg_copy_code'generate_tuple_and_keyword_parsing_codeneeds_values_cleanupr6  r8  r:  r  generate_arg_decrefr-  r*  put_var_xdecref_clearput_var_decref_clearrM  rQ  rF  r  rG  rX  )
r   r   r[   	decl_codeold_error_labelour_error_label	end_labelhas_kwonly_argshas_star_or_kw_argsr3  s
             r7   r%  -DefNodeWrapper.generate_argument_parsing_code  sz    ..0**NN#<=	..2"mm47 @  ,@0? 	 99C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0"dhh PQ22483355 ++D1 88DT(,D%*???++MM)$NN?+66t<"((=$$((..>>2243D3D3J3JK11$2C2C2I2IJyyxx+++0J0J0J ((3	 !
 ""4;;#4#4#C#CD,,.JJ|d&6&6&889y!r6   c                 J    U(       a  UR                  UR                  5        g g r   )r'  r-  r   r3  r[   s      r7   generate_arg_xdecref#DefNodeWrapper.generate_arg_xdecref  s    &&syy1 r6   c                 J    U(       a  UR                  UR                  5        g g r   )r(  r-  r1  s      r7   r&  "DefNodeWrapper.generate_arg_decref  s    %%cii0 r6   c                    SU R                  5        S3nU R                  R                  5       nU R                  (       dj  UR                  R                  [        R                  " SS5      5        UR                  S[        R                   SU S[        R                   SU S	3	5        UR                  S
[        R                   SU R                  (       a  SOS S[        R                   SU R                  R                   S[        R                   S35        UR                  S[        R                   SU 35        U R                  (       Ga  UR                  S[        R                   S35        UR                  R                  [        R                  " SS5      5        UR                  SU S[        R                   SU 35        U R                  R                   R"                  (       Ga%  SU R                  R                   l        U R                  R                   R&                  nUR                  U SU R                  R                   S[        R                   S[        R(                   S35        UR                  SU SU 35        UR+                  U R                  R                   5        UR                  S5        UR                  U S35        UR                  SU SU 35        UR+                  U R                  R                   5        UR                  S5        OjUR                  R                  [        R                  " S S5      5        UR                  S[        R                   S!U S[        R                   SU S3	5        U R,                  (       Ga  U R.                  R0                  (       Gd  U R                  R2                  (       a   eU R                  R                   R&                  nUR                  U S"[        R                   S#UR5                  XPR6                  5       35        UR+                  U R                  R                   5        UR9                  [        R:                  [<        5        UR?                  [        R:                  [<        5        UR                  URA                  S$U S%[        R:                   S&3U R6                  5      5        URB                  RE                  [F        RH                  SS'9nUR                  S(U S)U S*[        R                   S+U S,3	5        UR                  S-[        RJ                   SU S35        UR                  S.5        UR                  UR5                  S/U R6                  5      5        UR                  S05        UR9                  S/[<        5        UR?                  S/[<        5        UR                  URA                  S$U SU S13U R6                  5      5        UR                  S5        URB                  RM                  U5        S2U R                  R                   l        g U R                  (       a  U R                  R2                  (       a   eU R                  R                   R&                  nUR9                  [        RJ                  [<        5        UR                  U S[        RJ                   S35        S2U R                  R                   l        g g )3Nr9  r  RaiseArgTupleInvalidrz  r  z$ > 0)) { __Pyx_RaiseArgtupleInvalid(z, 1, 0, 0, r   }const Py_ssize_t r  r   rK  r  ) ? __Pyx_NumKwargs_) : 0;z < 0)) r  z > 0) {KeywordStringCheckz'if (unlikely(__Pyx_CheckKeywordStrings(r   z
) == -1)) Fz = __Pyx_KwargsAsDict_r  if (unlikely(!z)) r  z = PyDict_New();r  RejectKeywordsz > 0)) {__Pyx_RejectKeywords(z = PyTuple_New(z + 1); z__Pyx_PyTuple_SET_ITEM(z, 0, r  r}  for (=0; z < ; z++) {z(PyObject* item = __Pyx_PyTuple_GET_ITEM(z#if !CYTHON_ASSUME_SAFE_MACROSr   r  z	+1, item)r   )'r@  rr   rY  r  r  r  r   r   rV   r	   r  kwds_len_cnamer  r  rd  r"  r-  r  r*  r  r  put_var_gotrefr~  r  r]  r  r  r<   r   r"  r   r  error_goto_if_negr  r  r
   c_py_ssize_t_typer  r  )r   r[   
goto_errorfunction_namestarstar_arg_cnamestar_arg_cnamer  s          r7   r#  )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(C~~2222!]]0066NJJ!"/&2D2D1EW**>88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2!]]0066NOOF--~>JJ!"#f&7&7%8:<23DMM/ r6   c                    UR                   R                  [        R                  " SS5      5        U R                  R                  5       nUR                  S5      nUR                  U R                  5      n/ n/ n/ n	S=pU H  nUR                  (       d  M  UR                  (       d  UR                  (       a  M:  UR                  (       a&  UR                  (       a  U	OUR                  U5        Mq  UR                  U5        UR                  (       d  M  U
S-  n
UR                  (       a  M  US-  nM     X-   nU R                   U R"                  -
  n[%        U5      S:  a-  US   R                  (       d  US   R                  (       a  US-  n[%        U5      nU R&                  (       + =(       a    X:H  n[)        U5      nU R*                  (       d  U R&                  (       a  U R-                  X5        [/        U5      [/        U5      -   nU Vs/ s H  oR                  (       a  M  UPM     nnU=(       d    U R*                  nUR1                  S5        U(       at  SR3                  U Vs/ s H+  nSUR5                  UR6                  R                  5       3PM-     snS	/-   5      nUR1                  S
[8        R:                  < SU< S35        U R=                  UX#5        UR1                  S[8        R>                   SU(       a  SOS S[8        R@                   SU RB                  RD                   S[8        R@                   S35        UR1                  S[8        R>                   SU 35        [8        R>                   S3nU R"                  S:  a  SU-  nUR1                  SU-  5        U(       dZ  UR                   R                  [        R                  " SS5      5        UR1                  SU S[8        R@                   SU 35        GOlU RG                  XUUUXR5        U RI                  UUU5        U RK                  UU5        X:  a  UR                   R                  [        R                  " SS5      5        UR1                  S[8        RL                   SU S 35        UR1                  S!U SUS" SUS" SUS" S#U S$35        UR1                  S%5        U R"                  (       a  UR                   R                  [        R                  " S&S5      5        UR1                  SU SXR"                  -    S 35        UR1                  S'U S([8        R:                   S)U
 S*U S$3	5        UR1                  S%5        U R"                  (       a  US:  d  X:X  aQ  X:X  a  U R&                  (       d  S+nOS,nUR1                  S-[8        RL                  UU4-  5        URO                  U5        U R"                  (       a  X:  aF  U R&                  (       d5  UR1                  S.[8        RL                  U4-  5        URO                  U5        UR1                  S/5        U H  nUR                  (       a  M  UR                   R                  [        R                  " S&S5      5        UR5                  UR6                  R                  5      nUR1                  S0U SU SU 35          GO^   GOZUR1                  S/5        X:X  an  [Q        U5       H]  u  nnUR1                  S1U S2U RB                  RD                   S[8        RR                   SU S33	5        UR1                  S4U S5U 35        M_     GOUR1                  S6[8        RL                   S735        U R&                  (       a  UR1                  S85        [U        [Q        U5      5      S S S92   nU H  u  nnUUS-
  :  a6  UUS   S   :w  a  UR1                  S:5        UR1                  S;US-   S< S=35        UR1                  S1U S2U RB                  RD                   S[8        RR                   SU S33	5        UR1                  S4U S5U 35        M     US:X  a"  UR1                  S:5        URW                  S>5        UR1                  S?5        U R&                  (       aF  U(       a>  [Y        US-
  S9S95       H  nUR1                  S;US< S=35        M     URO                  U5        O"URW                  S@5        URO                  U5        UR1                  S%5        U RK                  UU5        UR1                  S%5        [Q        U5       H  u  nnU R[                  US1U SA3U5        M     UR1                  S%5        UR]                  U5      (       a  UR                  SB5      nURO                  U5        UR_                  U5        UR                   R                  [        R                  " SS5      5        UR1                  SCUUX[8        RL                  U4-  5        UR_                  U5        g g s  snf s  snf )DNr   rz  argtuple_errorr   r   {,&r3  zPyObject ** const z[] = {z};r9  r  r   rK  r  r:  r;  r  r  z > 0z
likely(%s)r  r>  z__Pyx_RejectKeywords(r   r  r7  zfor (Py_ssize_t i = z; i < z; i++) {z7if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid(dz, i); r8  r  RaiseKeywordRequiredz7if (unlikely(!values[i])) { __Pyx_RaiseKeywordRequired(z, *(z[i - z])); z!=<z } else if (unlikely(%s %s %d)) {z} else if (unlikely(%s > %d)) {r  z__Pyx_RaiseKeywordRequired(values[] = __Pyx_ArgRef_r  3if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[])) zswitch (r   default:r   CYTHON_FALLTHROUGH;case 2d:	case  0: break;	default: ]skipz2__Pyx_RaiseArgtupleInvalid(%s, %d, %d, %d, %s); %s)0r  r  r   r   rr   rY  r  r  r<   r  r  r  r  r  r  r  rL  rK  rN   r  boolr  generate_stararg_init_codetuplerV   r   intern_identifierr-  r	   pykwdlist_cname#generate_argument_values_setup_coderB  r  rd  r"  generate_posargs_unpacking_codegenerate_keyword_unpacking_code*generate_argument_defaults_assignment_coder  r8  r  r  r   r	  r(  generate_arg_assignmentr6  r:  )r   rX   r[   r)  self_name_csafeargtuple_error_labelrF  r  required_kw_only_argsoptional_kw_only_argsnum_pos_only_argsnum_required_pos_only_argsr3  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                               r7   r$  6DefNodeWrapper.generate_tuple_and_keyword_parsing_codeH  s	   ))##J0EF	H ))779#~~.>?__TXX.
 " "9::C>>#//{{*-++&;PXXY\]&&s+<<<%*%;;;2a72 " -D"44t7P7PPt9q=d1g11T!W5H5H1$!/2)-%6 &76 	#-++,?F)E,,??+3H8C<<C8H*?d.?.?

3!hh+(+C 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#*,<hH\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`c|c|M|L}  ~G  H  I

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

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

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

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

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

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

3 ;;HdK

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

3??/00"&.."8MM-.NN/0--''(>@UVXJJK!;#""	O   NN./ 1_ I
(s   h=)h=-2ic                    UR                   R                  (       aq  UR                  (       a0  [        R                  " UR                   [        R
                  U5      nUR                  nUR                  UR                  < SU< S35        g UR                   R                  (       Ga  UR                  (       a  UR                  SU-  5        UR                  UR                   R                  X!R                  R                  UR                  U5      5        UR                  (       a  UR                  S5        UR                  UR                  R                  < SUR                  U5      < S35        UR                   R                  (       a  UR                  UR                  SS9  UR                  S5        g g [!        UR                  SUR                   -  5        g )	Nr  r  r  r  Tr  r  2Cannot convert Python object argument to type '%s')r  r  r  r
   typecastr   r-  rV   r  from_py_functionr  from_py_call_coder<   r~  r'  r)  r   )r   r3  r   r[   r-  s        r7   rj  &DefNodeWrapper.generate_arg_assignment2  s>   88~~!**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^^_r6   c                    U R                   (       a  U R                   R                  R                  (       a  SU R                   R                  l        UR	                  U R                   R                  R
                  < SU R                   R                  R
                  < SU R                  5       < S35        UR                  U R                   R                  5        U R                  (       Ga  SU R                  R                  l        US:X  a  U R                  R                  (       a   eUR                  [        R                  [        5        UR	                  U R                  R                  R
                  < S[        R                  < S35        g UR	                  U R                  R                  R
                   SU R                  R                   S[        R                   SU S[        R                    S	3
5        UR	                  S
U R                  R                  R"                  R%                  U R                  R                  R
                  5       S35        U R                   (       a%  UR'                  U R                   R                  5        UR)                  5         UR	                  SU R                  5        S35        UR	                  S5        UR                  U R                  R                  5        g g )Nr   z = PyDict_New(); if (unlikely(!z
)) return r  r  z = __Pyx_ArgsSlice_r  r   r  r=  )) {r9  r  )r  r-  r  r*  rV   r  r@  rC  r  rd  r  r   r	   r  r   r"  r  r  nullcheck_stringr(  rX  )r   rs  r[   s      r7   rb  )DefNodeWrapper.generate_stararg_init_codeK  s)   !2!2!8!8!@!@67D##3JJ!!''--!!''--  "$ %  1 1 7 78===23DMM/"a'  >>6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 r6   c                 n   [        U5      nUR                  SUSR                  SU-  5      4-  5        U R                  R                  (       ag  UR                  SU R                  R                  < S[
        R                  < SU R                  R                  < S[
        R                  < S3	5        g g )	NzPyObject* values[%d] = {%s};rN  r3  struct z *z$ = __Pyx_CyFunction_Defaults(struct r   r  )rN   rV   r   r  r  r	   dynamic_args_cnamer"  )r   rX   r[   r)  max_argss        r7   rf  2DefNodeWrapper.generate_argument_values_setup_coden  s    t9 	6chhs8|,:. . 	/ ;;&&JJ++V-F-F++V->->@ A 'r6   c                    [        U5       Hz  u  p4UR                  (       d  M  UR                  R                  (       d  M5  UR	                  U5      nUR                  SU SU SUR                  R                  U5       S35        M|     g )Nzif (!values[z
]) values[z] = __Pyx_NewRef(r  )r  r  r  r  r~  rV   as_pyobject)r   rX   r[   r)  r3  r!  s         r7   ri  9DefNodeWrapper.generate_argument_defaults_assignment_code{  sn    oFA{{{sxx333 # @ @ F

\!Jqc9J388K_K_`mKnJooqrs &r6   c           	          U R                   (       d  g [        R                  nUR                  SU SU SU S35        UR                  SU S35        UR                  S5        g )Nzfor (Py_ssize_t r@  z5 < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++r   zPy_XDECREF(values[z]);r  )r%  r	   quick_temp_cnamerV   )r   r[   loop_vars      r7   r  4DefNodeWrapper.generate_argument_values_cleanup_code  sj    ((**

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

'z56

3r6   c                 F   SnU H.  n	U	R                   (       d  M  U	R                  (       a  M)  US-  nM0     UR                  S[        R                  -  5        U R
                  (       a  UR                  S5        [        US-
  US-
  S5       H  n
UR                  SU
S-   S S35        UR                  S	U
 S
U R                  R                   S[        R                   SU
 S3	5        UR                  SU
 SUR                  U R                  5       35        UR                  S5        M     US:  a  UR                  SUS S35        [        US-
  SS5       Hs  n
UR                  S	U
 S
U R                  R                   S[        R                   SU
 S3	5        UR                  SU
 SUR                  U R                  5       35        Mu     UR                  S5        [        US-
  SS5       H-  n
UR                  SU
S-   S S35        UR                  S5        M/     UR                  S5        US:X  a  UR                  S5        OUR                  U5        U R
                  (       d"  UR                  S5        UR                  U5        UR                  S5        g )Nr   r   switch (%s) {rW  r   rY  rZ  r[  rS  rT  r  r   r  rU  rV  rX  r   r]  r%   r\  r^  r  )r  r  rV   r	   r  r  r(  rd  r"  r  r  r<   r	  r8  )r   rr  rs  rt  ru  rv  rl  r[   num_required_posonly_argsr3  r)  s              r7   rg  .DefNodeWrapper.generate_posargs_unpacking_code  si    %&!C|||CKKK)Q.) 
 	

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

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

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

3r6   c                    SnU H  nUR                   (       d  M  US-  nM     US:  a5  UR                  S[        R                  U[        R                  U4-  5        O(US:  a"  UR                  S[        R                  -  5        US:X  a  SnO2U R                  (       a  X-
  nUR                  SU SU S35        S	nOS
nSUs=:  a  [        U5      :  a	  O  OSU 3nOSnU R                  R                  5       n	UR                  R                  [        R                  " SS5      5        UR                  U R                  S[        R                   S[        R                   S[        R                    SU R"                  (       a   U R"                  R$                  R&                  OS SU SU S[        R(                   SU	 SU R"                  S LS S35        g )Nr   r   zBconst Py_ssize_t kwd_pos_args = (unlikely(%s < %d)) ? 0 : %s - %d;z#const Py_ssize_t kwd_pos_args = %s;r3  z1const Py_ssize_t used_pos_args = (kwd_pos_args < z) ? kwd_pos_args : r  used_pos_argskwd_pos_argsz	values + r  ParseKeywordsrz  z__Pyx_ParseKeywords(r   rP  r  )r  rV   r	   r  r  rN   rr   rY  r  r  r   r   put_error_if_negr<   r  r  re  r  r-  r  rB  )
r   rs  rv  r[   ro  r3  pos_arg_count
max_kwargsvalues_arrayrk  s
             r7   rh  .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	
r6   c                 r    U R                    H'  nUR                  (       d  M  U R                  X!5        M)     g r   )rX   r]  generate_arg_conversionr  s      r7   r+  0DefNodeWrapper.generate_argument_conversion_code  s,     99C###,,S7 r6   c                 X   UR                   nUR                  nUR                  (       aq  UR                  (       a  UR	                  SUR
                  -  5        OUR	                  SUR
                  -  5        U R                  X5        UR	                  S5        g UR                  (       a  U R                  X5        g UR                  U5      (       a8  UR	                  UR                  R                  < SUR
                  < S35        g [        UR                  SU< SU< S35        g )	Nr  zassert(%s); {r  r  r  z Cannot convert 1 argument from 'z' to 'r  )rl  r  r  r  rV   r`  %generate_arg_conversion_from_pyobject#generate_arg_conversion_to_pyobjectr  r-  r  r   r<   )r   r3  r[   old_typenew_types        r7   r  &DefNodeWrapper.generate_arg_conversion  s    <<88{{

;67

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

#--HIcggPXZbcdr6   c                    UR                   nUR                  (       aL  UR                  UR                  UR                  UR
                  R                  UR                  U5      5        g [        UR                  SU-  5        g )Nr  )	r  r  rV   r  r`  r-  r  r<   r   )r   r3  r[   r  s       r7   r  4DefNodeWrapper.generate_arg_conversion_from_pyobject  s`    88$$JJx11			  #''ORZZ[r6   c                    UR                   nUR                  nU(       a  UR                  UR                  R                  < SU< SUR
                  < SUR                  UR                  R                  UR                  5      < 35        UR                  UR                  5        g [        UR                  SU-  5        g )Nr  r  r  z5Cannot convert argument of type '%s' to Python object)
rl  to_py_functionrV   r-  r  r`  r  r<   rC  r   )r   r3  r[   r  r`   s        r7   r  2DefNodeWrapper.generate_arg_conversion_to_pyobject  s    <<&&JJ		''		A	C D
 		*#''RU]]^r6   c           
         U R                    H  nUR                  (       a  U R                  X!5        M'  UR                  (       a  M:  UR                  R
                  (       d8  UR                  R                  (       d  UR                  R                  (       d  M  U R                  X!5        M     U R                  R                  R                  (       Ga  [        [        [        U R                   5      U R                  R!                  5       5      5       GH  nU R                  R                  R"                  S:X  a  UR%                  S5        UR%                  SU-  5        UR%                  SU R                  R                  R&                  < SU R                  R!                  5       < SU< S35        UR%                  SUR)                  U R*                  5      -  5        UR%                  S	5        U R                  R                  R"                  S:X  d  GM  UR%                  S
5        GM     U R                  R                  R"                  S:X  a  [        U R                   5      S:w  a  UR%                  S5        UR%                  SU R                  R                  R&                  -  5        UR%                  SUR)                  U R*                  5      -  5        UR%                  S	5        g g g g )N__ipow__z #if PY_VERSION_HEX >= 0x03080000z)if (unlikely(unused_arg_%s != Py_None)) {z"PyErr_SetString(PyExc_TypeError, "z	() takes z arguments but z were given");%s;r  z'#endif /*PY_VERSION_HEX >= 0x03080000*/r%   z$if ((PY_VERSION_HEX < 0x03080000)) {zYPyErr_SetString(PyExc_NotImplementedError, "3-argument %s cannot be used in Python<3.8");)rX   r.  r  r  r  r  r  r'  r  r  r-  rT  reversedr(  rN   rd  r|  rr   rV   rG  r  r<   )r   r[   r3  r  s       r7   r1  +DefNodeWrapper.generate_argument_type_tests%  s    99C""++C6___#((*>*>*-((*<*<*-((*E*E*E,,S7  ;;'''eC		NDNN4U4U4WXY ;;$$))Z7 JJAB

FJK

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

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

3;;$$))Z7JJHI! Z" {{  %%3DII!8K
 

AB

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

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

3 9L3% (r6   c                 .    U R                   R                  $ r   )rd  r@  r   s    r7   r@  DefNodeWrapper.error_valueP  s    ~~)))r6   )r%  ro  rJ  rI  rL  rK  r~  rd  r  )#r.   r/   r0   r1   defnoder  r%  r   r   r  r  r  r  r  r  r  r%  r2  r&  r#  r$  rj  rb  rf  ri  r  rg  rh  r+  r  r  r  r1  r@  r5   r-   r6   r7   re  re  r  s     GF 	31,/36U@nQ$fQ2M"^21c4Jh0T`2!9FAt&P;
z8e&\_) V*r6   re  c                   v   ^  \ rS rSrSrSrSrSr\R                  S/-   r	U 4S jr
U 4S jrS rU 4S	 jrS
rU =r$ )GeneratorDefNodeiT  TF	Generatorgbodyc                 D   > [        U/ SS9US'   [        TU ]  " U40 UD6  g )NT)r6  r   r   )r5  ro   r   r   r<   r   rQ   s      r7   r   GeneratorDefNode.__init__a  s'    %c4Hv''r6   c                    > [         TU ]  U5        U R                  U R                  l        U R                  R                  U5        g r   )ro   r   r  r  r   r   rQ   s     r7   r   %GeneratorDefNode.analyse_declarationsf  s4    $S)!%!1!1



'',r6   c                    U R                   R                  R                  nUR                  U R                  5      nUR                  U R
                  5      nUR                  U R                  5      nU R                  R                  U5        UR                  S5        UR                  SU R                   SU SU R                  R                  5        S[        R                   SU SU SU SUR                  SU R                  5       35        UR!                  [        R                  ["        5        U R$                  (       aU  SnUR                  U< S	[        R&                  < S
35        UR)                  U["        5        UR+                  U["        5        UR-                  5         UR                  S5        UR                  S5        g )NrM  z#__pyx_CoroutineObject *gen = __Pyx_z_New((__pyx_coroutine_body_t) r   , (PyObject *) r  genzgen->classobjz  = __Pyx_CyFunction_GetClassObj(r  zreturn (PyObject *) gen;r  )r  r-  r  rd  rr   qualnamemodule_namer  r  rV   gen_type_namer  r	   r  r  r<   rR  r   r  r"  r   r  rX  )r   r   r[   
body_cnamerr   r  r  classobj_cnames           r7   r  'GeneratorDefNode.generate_function_bodyk  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r6   c                    > UR                  [        R                  " U R                  S5      5        U R                  R                  USS9  [        TU ]  X5        U R                  R                  X5        g )NCoroutine.cT)proto)r  r   r   r  r  r  ro   r  )r   r   r[   rQ   s      r7   r  .GeneratorDefNode.generate_function_definitions  sZ    [44T5G5GWX

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

00;r6   r-   )r.   r/   r0   r1   r  is_iterable_coroutiner  r  r  r   r   r   r  r  r5   rx   ry   s   @r7   r  r  T  sE     L!MM%%	1K(
-
:< <r6   r  c                       \ rS rSrSrSrSrg)AsyncDefNodei  	CoroutineTr-   N)r.   r/   r0   r1   r  r  r5   r-   r6   r7   r  r    s    MLr6   r  c                       \ rS rSrSrSrSrg)IterableAsyncDefNodei  IterableCoroutineTr-   N)r.   r/   r0   r1   r  r  r5   r-   r6   r7   r  r    s    'M r6   r  c                       \ rS rSrSrSrSrg)AsyncGenNodei  AsyncGenTr-   N)r.   r/   r0   r1   r  r  r5   r-   r6   r7   r  r    s    MKr6   r  c                   \   ^  \ rS rSrSrSrSrSrSrSU 4S jjr	S r
S rSS jrS	 rS
rU =r$ )GeneratorBodyDefNodei  TFNc                 .   > [         TU ]  XUUUS / S S S9	  g )N)	r<   r   rr   is_coroutine_bodyis_async_gen_bodyrF   rX   r  r  )ro   r   )r   r<   rr   r   r  r  rQ   s         r7   r   GeneratorBodyDefNode.__init__  s*    T//24	 	 	Ar6   c                 $   UR                  UR                  5      nUR                  S5      n[        R                  U-   U-   nUR	                  S [
        U R                  USS9nXEl        [        U R                  5      Ul
        SUl        XPl        g )N	generatorr  )r  r  T)r  r  r	   genbody_prefixr=  r   r<   r  r   rr   rG  rD  r-  )r   r   r  rr   r  r-  s         r7   declare_generator_body+GeneratorBodyDefNode.declare_generator_body  s    S--.{{;'%%.5ndhh&+	   C ,TYY7 

r6   c                 H    U R                  U5        U R                  U5        g r   )r`  r  r   s     r7   r   )GeneratorBodyDefNode.analyse_declarations  s    ##C(##C(r6   c           	         SU R                   R                  < S[        R                  < S[        R                  < S[        R
                  < S3	nU(       a  UR                  SU-  5        g UR                  SU-  5        g )Nzstatic PyObject *z(__pyx_CoroutineObject *z, CYTHON_UNUSED PyThreadState *r	  r  z%s; /* proto */z%s /* generator body */
{)r-  r  r	   generator_cnamelocal_tstate_cnamesent_value_cnamerV   )r   r[   r  r  s       r7   r  -GeneratorBodyDefNode.generate_function_header  sZ    JJ!!""%%##	%
 JJ(612JJ3f<=r6   c           
      6   U R                   nU R                  R                  X25        UR                  U5        UR	                  5       Ul        UR                  U R                  5        U R                  X25        UR                  S5        U R                  U5        UR                  5       nUR                  S[        R                  -  5        UR                  5       nUR                  5         UR                  U R                   R"                  =(       d    U R                   R$                  5        UR'                  5       nU(       a   UR)                  SS9  SUR*                  l        U R.                  R1                  U5        UR*                  R3                  UR4                  R6                  R8                  5        UR                  5       nUR	                  S5      nUR;                  U5        UR=                  U5        U(       aL  UR*                  R>                  (       d   eURA                  U R                   R$                  U R                  SS9  U RB                  (       a:  UR                  URE                  [        RF                  U R                  5      5        OUR                  S[        RF                   S35        U RH                  (       a  Sn	OU RJ                  (       a  S	n	OS
n	UR                  S[        RF                   SU	 S35        UR                  URM                  U R                  5      5        UR                  S5        U RB                  (       a  U RN                  b  U RN                  n
U
[P        RR                  L a  SnO:U
[P        RT                  L a  SnO$U
[P        RV                  L a  SnO[Y        SU
-  5      eUR                  [        R                  < SU< SURE                  [        R                  U R                  5      < 35        UR[                  [        R                  [\        5        U R_                  X5        UR4                  R6                  R8                  R`                  (       a  UR                  UR4                  R6                  Rc                  [        Rd                  5      < SUR4                  R6                  Rg                  S[        Rh                  -  5      < S35        UR                  S[        Rd                  -  5        U(       aF  U R                  Rj                  (       d+  SUR*                  l        URm                  SU R                  S9  UR                  U R                  5        UR                  S5        UR                  S5        U RB                  (       d?  U R                  Rj                  (       d$  URo                  [        R                  [\        5        URq                  URr                  5      (       Ga  U R                  Rj                  (       d  URu                  URv                  5        UR=                  URr                  5        U RB                  (       a1  U RN                  b$  URy                  [        R                  [\        5        UR*                  R{                  5        H  u  pUR}                  X5        M     UR                  S5        U(       a  UR                  5         [        R                  UR                  R                  ;   aW  UR                  R                  [        R                  " SS5      5        UR                  S[        U RH                  5      -  5        UR                  U R                   R$                  5        U(       a  UR                  U R                  5        UR                  S5        UR=                  URv                  5        UR                  [        R                  [\        5        U(       a  UR                  5         UR                  S5        UR                  S [        Rh                  -  5        UR                  S!5        UR                  S"[        Rh                  -  5        UR                  S#[        Rh                  -  5        UR                  5         UR                  S$[        R                  -  5        UR                  S5        UR                  UR*                  5        UR                  S%[        Rh                  -  5        UR                  S&U-  5        UR                   H  u  pUR                  S'X4-  5        M     UR                  S(5        U(       aI  URA                  U R                   R$                  U R                  SS9  URm                  SU R                  S9  UR                  5         UR                  S)5        UR                  S5        UR                  5         g )*Nr   zPyObject *%s = NULL;T)r  	first_runr  z != Py_None)) {zasync generator	coroutiner  zQ)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started z");r  zPyList_New(0)zPySet_New(NULL)zPyDict_New()z)invalid type of inlined comprehension: %sr  rA  z%s->closurer  zCYTHON_MAYBE_UNUSED_VAR(%s);Fr  r;   r  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;)Qr  r   r  r  r  r  rF  r<   r.  rV   r  rR   r	   r  rV  rW  r-  rr   rG  r  r  r  r$  r  r  init_closure_tempsr
  r  r:  	use_labelr:  r  r#  
is_inlinedr  r  r  r  r  inlined_comprehension_typer   	list_typeset_type	dict_typer   r  r   r  r;  r  r  r|  r  r   r5  r4  r6  r7  r8  r9  put_xdecref_clearr;  r<  rA  r   generator_stopr  future_directivesr  r  r   r   ra  rF  rB  rS  rU  rX  rY  yield_labelsrZ  )r   r   r[   r  closure_init_coderc  r`  resume_codefirst_run_label	coro_typetarget_type	comp_initr  r  r)  labels                   r7   r  2GeneratorBodyDefNode.generate_function_definitions  s\    			//; 	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  -  B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 	,>?))HA1QJ>? *NO''

(A(A488Z^'_(((A//1.)#r6   rB  )NNNFFr  )r.   r/   r0   r1   r  r  r  r  r  r   r  r   r  r  r5   rx   ry   s   @r7   r  r    sC     J!%A)	>_  _ r6   r  c                   *    \ rS rSrS/rSrS rS rSrg)r  in  r   Nc                    UR                   U l        U R                  R                  (       a  SnOSnSSKJn  UR                  U R                  [        5      U l	        UR                  U R                  U R                  U R                  US   Vs/ s H'  nUR                  U R                  UR                  S9PM)     snS9nUR                  R                  (       d  UR                  R                  (       a@  [!        U R                  [#        U R                  US9[%        U R                  S S9/S9U l        O[%        U R                  US9U l        U R&                  R)                  U5      U l        U $ s  snf )	Nr   r   r  r  r  rX   )exprr   rM  )r&  rX   r  r&  r   r  RawCNameExprNoder<   r   	func_noder  r  rr   r  r  is_returncoder5  ExprStatNoder  r   r~   )r   r   	first_argr  r3  	call_nodes         r7   r~   %OverrideCheckNode.analyse_expressions|  s!   OO	<<''II"33DHHnM,,HHt~~!YYyz242c $$TXXCHH$=24 - 5	 ??""coo&C&C$TXXTXXI6txxt466 7DI 'txxyADIII11#6	4s   .E3c                 0   U R                   R                  (       a   U R                   R                  R                  OU R                   R                  nUR                  UR                  5      nU R                   R
                  (       a  S[        R                  -  nOSU R                  S   R                  -  nUR                  S5        UR                  S[        R                  -  5        UR                  S5        U R                   R
                  (       d4  U R                   R                  R                  R                  S5      (       a  UR                  S5        OUR                  S5        UR                  S	5        UR                  U R                   R                  R                  R                  R                   5      nUR                  S
U SU S35        UR                  SU S35        UR                  S5        UR                  S
U SU S35        UR                  S5        UR                  S5        UR                  S5        UR"                  R%                  [&        R(                  " SS5      5        UR                  S[        R*                  < S[        R,                  < S35        UR                  SU< S[        R*                  < S[        R,                  < S35        UR                  S[        R.                  < SU< S35        UR                  S5        UR0                  R3                  [4        S S!9nU R6                  R9                  U5        UR"                  R%                  [&        R(                  " S"S5      5        UR                  U< S#U< SU< S$UR;                  X`R<                  5      < 35        UR?                  U[4        5        UR                  S%U< S&UR@                  < S'35        U RB                  RE                  U5        UR                  S(5        UR                  S5        UR                  [        R*                  < SU< S35        UR                  [        R,                  < S)U< S35        UR                  S*[        R.                  < S+[        R*                  < S'35        UR                  [        R*                  < S,[        R,                  < S35        UR                  S(5        UR                  S5        URG                  U[H        R4                  5        UR0                  RK                  U5        UR                  S5        UR                  S(5        UR                  S5        UR                  S(5        g )-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(r  Tr}  PyObjectGetAttrStrz = __Pyx_PyObject_GetAttrStr(r  zif (!__Pyx_IsSameCFunction(z, (void(*)(void)) r  r  z! = __Pyx_get_object_dict_version(r   != r  )&r  r  r-  rd  rr   r&  r	   module_cnamerX   r  rV   r	  r:  r  r  r  r  r  r  r   r   tp_dict_version_tempobj_dict_version_temptype_dict_guard_tempr  r  r   r	  	set_cnamer  r<   r  r  r   r   r  r
   r  )r   r[   method_entryinterned_attr_cnamer  r  func_node_temps          r7   r   )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##NHH=? 	@ 	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r6   )rX   r   r	  )	r.   r/   r0   r1   r   r   r~   r   r5   r-   r6   r7   r  r  n  s     (KD*Xr6   r  c                       \ rS rSrSrg)ClassDefNodei  r-   Nr.   r/   r0   r1   r5   r-   r6   r7   r  r        r6   r  c                       \ rS rSr/ SQrSrSrSrSrSr	Sr
Sr  SS jrS rS rS r\R"                  " \R$                  \R&                  " S	\R$                  S5      /5      rS
 rS rS rSrg)PyClassDefNodei  )doc_noder   rm   	metaclassmkwrs   class_resultr  
class_cellr1  
orig_basesNFc	           
         [         R                  X5        X l        X@l        XPl        X`l        X0l        SSKJn	  U R                  (       ah  [        R                  (       aS  [        U R                  U R                  5      nU	R                  XS9n
U	R                  [        S5      [         US9U l        OS n
U(       + nU(       a  SnSU l        UR&                  (       a  UR(                  (       a  [+        [-        UR(                  5      5      S S S2    Hb  u  pUR.                  R0                  S	:X  d  M!  U R2                  b  [5        UR                  S
5        UR0                  U l        UR(                  U	 Md     Xpl        O&U R2                  c   eOU	R9                  U5      U l        U(       d3  U R                  (       d"  U R6                  (       d  U R2                  (       a  U R2                  c|  U(       a  UR&                  (       d  U R6                  nOS nU(       d7  U R                  R:                  (       a  U R                  R<                  (       d  OU	R?                  XS9U l        SnOSnU	RA                  XXS9U l!        U	RE                  XX
UUUS9U l#        O*U	RI                  U/ S9U l!        U	RK                  XX
S9U l#        U	R                  XS9U l&        U	RO                  U R                  5      U l(        g )Nr   r  r  r   )rr   r  r<   FTr   r$  z2keyword argument 'metaclass' passed multiple times)class_def_node)rr   rF   r*  )rr   r*  rF   calculate_metaclassallow_py2_metaclass
force_typer  )rr   r*  rF   r  ))rP  r   rr   rF   r   r1  rs   r   r  r    r-  rG   r<   UnicodeNoder  r   r   r#  is_py3_style_classis_dict_literalr  r   r  r   r   r$  r   r%  	ProxyNodeis_sequence_constructorrX   PyClassMetaclassNodePyClassNamespaceNoderm   Py3ClassNodeclassobjDictNode	ClassNoder  ClassCellInjectorNoder'  )r   r<   rr   rs   rF   r   r1  r  force_py3_semanticsr  r#  r,  r)  r   mkdictneeds_metaclass_calculations                   r7   r   PyClassDefNode.__init__  sm   $$		$
88** 4884C ,,S,<H%..M)4LSagj.kDMH"55"'&*D#++//#'	,2N2N(O#PQUSUQU#V88>>[8#~~9 %dhh0d e .2ZZDN , < <Q ? $W  ,H>>555 %..|<$**DNN~~%(D(D!XXF!F

:: JJOO%.%C%C &D &2DN.3+.2+!66H 7 CDI%22t$?$7.	 3 DM "**3*CDI%//t 0 CDM  (((8#99$((Cr6   c                 N   U R                   (       a!  [        U R                  R                  S5        gSSKJn  [        U R                  SSU R                  U R                  =(       d    UR                  U R                  / S9U R                  U R                  SU R                  S9	$ )	z?
Return this node as if it were declared as an extension class
z7Python3 style class could not be represented as C classNr   r  r  rX   F)r  r  
class_namers   r1  r   r  rF   )r0  r   r7  r<   r   r  CClassDefNoderr   rs   r  r1  r   rF   r   r  s     r7   	as_cclassPyClassDefNode.as_cclassW  s     ""$--##%^_TXX(1)-(,		#'::#W1D1DTXXTV1D1W(,"&))$)!%+ 	+r6   c                     UnUR                   (       d  UR                  (       a2  UR                  nUR                   (       a  M  UR                  (       a  M2  [        U R                  US9=o0l        U$ )N)rr   r$  )r  r  r$  r   rr   r:  )r   r   r  ra  s       r7   create_scopePyClassDefNode.create_scopej  sV    $$(=(=##D $$$(=(=(=(diiTJJzr6   c                 ,   U R                   =p#U R                  (       aC  SSKJn  U R                  S S S2    H   nU" UR                  UR
                  U/S9nM"     S U l        X0l        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  R                  U5        U R                  R                  U5        U R                  U5      nUR                  Ul        U R                  R                  R                  Ul        U R"                  (       a  U R"                  R                  U5        U R$                  R                  U5        UR'                  U5        g )Nr   )r  r   r  )r7  r1  r  r  r<   r  r&  rs   r   r%  r  analyse_target_declarationrG  r
  r-  r  class_obj_cnamer#  r   r  )r   r   unwrapped_class_resultr&  r  r  ra  s          r7   r   #PyClassDefNode.analyse_declarationsq  s"   04=??1!__TrT2	-MM&00& ) 3
 #DO(::JJ++C088HH))#...s3..s3  %..#{{0066==MM44T:		&&t,2248r6   rs   c           	         U R                   (       a  U R                   R                  (       a#  [        U R                   R                  5      S:X  dh  SSKJnJn  U R                   R                  U5      nU" UR                  SU R                  [        R                  " SS5      U" U5      /S9U l         X@l        U R                   (       a   U R                   R                  U5      U l         U R                  (       a   U R                  R                  U5      U l        U R                  (       a   U R                  R                  U5      U l        U R                  R                  U5      U l        U R                   R                  U5      U l        U R"                  nU R$                  R                  U5      U l        U R&                  R)                  XR*                  5      U l        U R,                  R                  U5      U l        U $ )Nr   r   )PythonCapiCallNode	CloneNode__Pyx_PEP560_update_basesPy3UpdateBasesr  )rG  r  utility_coderX   )rs   r3  rN   rX   r  rO  rP  r~   r<   update_bases_functyper   r   r(  r%  r$  rm   r&  r:  r   r  analyse_target_expressionr7  r'  )r   r   rO  rP  r(  ra  s         r7   r~   "PyClassDefNode.analyse_expressions  s]   ::tzzAAc$**//FZ^_F_@77<J+JNN944(445EGYZ
+,	.DJ
 )O::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r6   c                     U R                  U R                  U5        U R                  R                  U R                  U5        g r   )r2  r:  r   r  rR  s      r7   r  ,PyClassDefNode.generate_function_definitions  s.    ((T:		//

DAr6   c           	         UR                  U R                  5        UR                  R                  U 5        U R                  nU R
                  (       a  U R
                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  R                  U5        U R
                  (       a  UR                  SU R                  R                  5       < SU R
                  R                  5       < S35        UR                  UR                  SU R                  R                  5       < SU R
                  R                  5       < S3U R                  5      5        UR                  S5        U R
                  R                  U5        U R
                  R                  U5        U R                  R                  5       =Ul        Ul        U R$                  nUb  UR&                  (       d  S nUb  UR                  U5        U R(                  R+                  U5        U R,                  R                  U5        Ub)  UR/                  XR,                  R                  5       5        Ub"  UR                  U5        UR                  U5        U R0                  R                  5       =Ul        Ul        U R2                  R5                  U R,                  U5        U R                  R                  U5        U R                  R                  U5        U R                  (       a6  U R                  R                  U5        U R                  R                  U5        U R                  (       a6  U R                  R                  U5        U R                  R                  U5        U R                  (       a6  U R                  R                  U5        U R                  R                  U5        UR                  R7                  5         g )Nr  r  r   zPyDict_SetItemString(z, "__orig_bases__", r  r  )rF  r<   pyclass_stackr  r:  r(  r{  rs   r%  r$  rm   rV   r   rD  generate_disposal_coder  namespace_cnamerK  r'  	is_activer   r   r&  generate_injection_coder7  r  r  pop)r   r[   ra  r'  s       r7   r   &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!..''..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!!$' r6   )rs   r   r'  r&  r7  r1  rm   rF   r#  r0  r$  r%  rr   r(  r:  r  )NNF)r.   r/   r0   r1   r   r1  r&  r0  r$  r%  r#  r(  r   rD  rG  r   r
   r"  r   r  rT  r~   r  r   r5   r-   r6   r7   r"  r"    s    (GKJLI
CHJ?C8=GDR+&92 '00!!##Gj.G.GN$

2B6!r6   r"  c                       \ rS rSrS/rSrSrSrSrSr	Sr
SrSrSr\S 5       rS rS rS rS	 rS
 rS rS r\SS j5       rS rSrg)rB  i  r   NFc                 ,    [        U R                  5      $ r   )r   rA  r   s    r7   punycode_class_name!CClassDefNode.punycode_class_name  s    t//r6   c                     [        U S5      (       dV  SSKJn  U R                  (       a8  UR	                  U R
                  U/ U R                  SS9U l        U R                  $ S U l        U R                  $ )N_buffer_defaultsr   r  F)need_complete)r  r   r  buffer_defaults_noder  buffer_defaults_posrf  )r   r   r  s      r7   r  CClassDefNode.buffer_defaults
  sr    t/00 (((.(E(E,,T66"' )F ))% $$$ )-%$$$r6   c                    U R                   (       aO  U R                  S:w  a?  U R                   R                  S5      nUR                  X R                  5      nU(       d  g OUnUR                  U R                  U R                  SSU R                   S U R                  U R                  U R                  U R                  U R                  U R                  U R                  U5      U R                  S9U l        U R                  (       a@  [!        U R                  R"                  5      S:  a  SU R                  R$                  l        g g g )Nr  rK   r   )rr   r<   r  implementingr  r  objstruct_cnametypeobj_cnamer  r;  
check_sizer   r  shadowr   T)r  r  splitr  r<   declare_c_classrA  objstruct_nametypeobj_namer;  ro  r   r  rp  r-  rs   rN   rX   r  multiple_bases)r   r   r  
home_scopes       r7   r8  CClassDefNode.declare  s   8 ;**005K11+xxHJ  J//(( //++** 005;; 0  
 ::#djjoo.2-1DJJOO* 3:r6   c                    0 nU R                   (       d  U$ SSKJn  / nU R                    GH  nUR                  nS n[	        XcR
                  5      (       a  UnUR                  n[        R                  " Xa5      nUS:X  a$  U(       a  [        UR                  S5        SUS'   Mz  US:X  ar  S n	0 n
U(       a`  [	        XsR                  5      (       a  UR                  n	O9UR                  R                  n	UR                  nU(       a  UR                  5       n
X4X('   M  UR!                  U5        GM     U(       a  [        US   R                  S	5        X@l         U$ )
Nr   r  zfunctools.total_orderingz total_ordering cannot be called.Ttotal_orderingdataclasses.dataclassr   z8Cdef functions/classes cannot take arbitrary decorators.)r1  r   r  r  rO   CallNoder  r   'exprnode_to_known_standard_library_namer   r<   r  rX   r  r  as_python_dictr  )r   r   extra_directivesr  remaining_decoratorsoriginal_decoratorr  decorator_call
known_namerX   rY   kwds_s               r7   _handle_cclass_decorators'CClassDefNode._handle_cclass_decorators1  s?   ##!"&//*44I "N)%7%788!*%..	 HHXJ77!.,,.PQ59 !1266!!.2J2JKK-22-==BB . ; ; #(#7#7#9D04| , ''(:;9 #2:  &q)--/ij.r6   c                 \  ^ ^ TR                   (       a'  T R                  (       d  [        T R                  S5        T R	                  T5      nS T l        T R                  (       a  S T l        TR                   H&  nUR                  T R                  :X  d  M  UT l        M(     T R                  cR  [        T R                  S TR                  5      T l        ST R                  l        TR                  T R                  5        T R                  R                  (       Ga  T R                  R                  S   nUR!                  T5      nU["        R$                  L a  TR'                  S5      R(                  nO]U["        R*                  L a  TR'                  S5      R(                  nO.U["        R,                  L a  TR'                  S5      R(                  nUc%  [        UR                  ST R.                  -  5        GOVU[0        L a  S nGOIUR2                  (       d<  UR4                  (       a  UR6                  (       d  [        UR                  SU-  5        OUR9                  5       (       d4  [        UR                  S	UR                  < S
T R.                  < S35        OUR:                  (       aV  UR:                  R<                  (       a;  UR>                  (       a*  [        UR                  S	U< S
T R.                  < S35        OLUR4                  (       a4  UR                  S;   a$  [        UR                  SUR                  -  5        OUT l        TR<                  RA                  SS5      S:  a+  U["        R0                  :w  a  [C        T R                  SS5        T RD                  S LnU(       aW  T R
                  (       aF  T R
                  R:                  (       d+  T R
                  RF                  RI                  UU 4S j5        g T R                  (       aP  T RJ                  S:w  a@  T R                  RM                  S5      nTRO                  UT R                  5      n	U	(       d  g OTn	T RJ                  S:X  ae  T R                  S:X  aU  T R.                  [P        RR                  ;   a7  TRT                  S S S:w  a$  [C        T R                  ST R.                  -  S5        U	RW                  T R.                  T R                  U=(       a    T RX                  U=(       a    T RX                  (       + T R                  T R
                  T R                  T RZ                  T R\                  T RJ                  T R^                  T R`                  T Rc                  T5      T Rd                  S9T l3        T R                  (       a>  [i        T R                  R                  5      S:  a  ST Rf                  R(                  l5        T Rd                  (       a*  T Rf                  U	R'                  T R.                  5      l6        U	TLaA  T RJ                  S:X  a1  TRo                  T R.                  T Rf                  T R                  5        T Rf                  R(                  R:                  =T l        n
U
b  U(       a;  TR<                  Rq                  5       U
l        U
R<                  Rs                  U5        OTR<                  U
l        SU
R<                  ;   af  SnU
R<                  S   nU(       a>  US   nURA                  S5      nU=(       a    URt                  =(       a    URv                  nU(       a  SOSU
l<        T Rz                  (       a:  [|        R~                  (       a%  [        T R                  T Rz                  5      U
l=        U(       a  T RD                  R                  U
5        T R:                  R                  S5      nU(       a  UR                  (       as  U
R                  (       db  U
R                  (       dQ  T R:                  R                  S5      UlG        T R:                  R                  SURz                  UR                  5        T RX                  (       a  SU
lD        OSU
lE        [i        T R                  R                  5      S:  Ga  U(       a  T RX                  (       a-  [        T R                  R                  S   R                  S5        T R                  R                  SS   H1  nUR!                  T5      (       d  M  [        UR                  S 5        M3     ST Rf                  R(                  lI        SS!KJJKn  UR                  T R                  UR                  T R                  T R.                  S"9T R                  UR                  T R                  / S#9/S$9T lO        OT R
                  (       aT  T R
                  R                  =(       d    T R
                  R                  T Rf                  R(                  lI        S T lO        O"ST Rf                  R(                  lI        S T lO        TR                  T Rf                  5        T Rf                  R(                  RF                   H
  nU" 5         M     g )%NzTObject struct name specification required for C class defined in 'extern from' blockr   r   r  r   r  z+First base of '%s' is not an extension typez'%s' is not an extension typezBase class 'z' of type 'z' is incompletez
' is final)rc  byteszGinheritance from PyVarObject types like '%s' is not currently supportedfreelistzIfreelists cannot be used on subtypes, only the base class can manage themc                  &   > TR                  T 5      $ r   )r   )r   r   s   r7   <lambda>4CClassDefNode.analyse_declarations.<locals>.<lambda>  s    @Y@YZ]@^r6   r  rK   __builtin__   zcpython.z %s already a builtin Cython type)rr   r<   r  rl  r  r  rm  rn  ro  r  r;  r   r  rp  Trz  Ffrozenr   __dict__getterz'Only declare first base in declaration.z+Only one extension type base class allowed.r  r  r.  r@  )Rr_  rs  r   r<   r  r  r  modulecimported_modulesrr   r   r  has_extern_classadd_imported_modulers   rX   r  r
   r>  r  r  c_float_typer  rA  r   rm  r~  rm  r  r:  r
  r  r  r   r   defered_declarationsr  r  rq  r  r   builtin_typesrG  rr  r  rt  ro  r;  r   r  rp  r-  rN   ru  r  add_imported_entryr   r   r   r   is_c_dataclass_scoperF   r    r-  rG   r   r  is_variabledefinedimplementedmangle_internalgetter_cnamedeclare_property
early_initr   r  r  IdentifierStringNoder8  type_init_argsis_externalallocate_vtable_names)r   r   r~  r  r  r  base_class_scopehas_bodyr  rv  r:  	is_frozendataclass_configdecorator_kwargsfrozen_flag
dict_entry
other_baser  thunks   ``                 r7   r   "CClassDefNode.analyse_declarations\  so   
 ??4#6#6$((rs99#> DK//;;$"2"22"(DK 0 {{")$*:*: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
--c22*..*WX 2 *+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9EG :r6   c                     U R                   (       a@  U R                  R                  R                  nU R                   R	                  U5      U l         U R
                  (       a  U R
                  R	                  U5        U $ r   )r   r-  r  r:  r~   r  r7  s      r7   r~   !CClassDefNode.analyse_expressions  sT    99JJOO))E		55e<DI33C8r6   c                     U R                   (       aC  U R                  U R                  U5        U R                   R                  U R                  U5        g g r   )r   r2  r:  r  rR  s      r7   r  +CClassDefNode.generate_function_definitions  s:    99,,TZZ>II33DJJE r6   c                    UR                  U R                  5        U R                  R                  R                  (       Gd  S nU R
                  (       Gad  UR                  R                  [        R                  SS9nU R
                  R                  U5        UR                  U< SU R
                  R                  5       < S35        UR                  UR                  SU 3U R                  5      5        UR                  U[        R                  5        UR                  R                  [        R                   SS9nUR                  U SU S35        UR                  UR                  SU 3U R                  5      5        UR                  R                  [        R                  SS9nUR                  S	5        UR                  S
5        UR                  R                  [        R                  SS9nUR                  U S35        UR                  UR#                  XPR                  5      5        UR%                  U[        5        UR                  R                  [        R                  SS9nUR                  U S35        UR                  UR#                  X`R                  5      5        UR%                  U[        5        UR                  R                  [        R                  SS9nUR                  U SU SU R
                  R                  5        S35        UR                  UR#                  XpR                  5      5        UR%                  U[        5        UR                  U SU SU S35        XVU4 H>  nUR'                  U[        R                  5        UR                  R)                  U5        M@     UR                  S5        UR                  S5        UR                  U< SU R
                  R                  5       < S35        UR                  UR#                  X@R                  5      5        UR%                  U[        5        UR                  SU< SU< S35        SU-  n	UR                  SU	-  5        UR                  SU-  5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  UR+                  U R                  5      5        UR                  S5        UR                  U S 35        UR                  R)                  U5        UR'                  U[        R                  5        UR                  R)                  U5        U R
                  R-                  U5        U R
                  R/                  U5        U R1                  U R                  XSS!9  Ub;  UR'                  U[        R                  5        UR                  R)                  U5        U R2                  (       a  U R2                  R5                  U5        g g )"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   r  z = PyObject_Call(r  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);r  z = NULL;)bases_tuple_cnamecheck_heap_type_bases)rF  r<   r-  r  r  r  r  r  r
   r   r{  rV   r   error_goto_ifr   r   r  r  r  r  r  r  r[  r  generate_type_ready_coder   r   )
r   r[   rs   
first_base
trial_typetype_new
type_tuple
args_tupler  trial_type_bases
             r7   r   %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28XXFG.9!^^99*:S:S`d9e


j\)UVW

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

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

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

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

8$

8$

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

422:xx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))$**dko)p %%eZ-F-FG++E299II--d3 r6   c                    U R                   n[        R                   SUR                   3nUR                  nU(       d  g U R
                  S:X  aR  UR                  (       a@  UR                  (       a   eUR                  UR                  < SUR                  < S35        g U(       d   eUR                  (       d   eSUR                  -  nUR                  S5        S nU(       d  UR                  R                  (       a  UR                  R                  [        SS9nUR                  U< S	UR                  UR                  R                  5      < S
UR                  XR                  5      < 35        UR!                  U[        5        U(       d  U(       Ga0  U(       a  UR"                  R%                  [&        R(                  " SS5      5        UR+                  U R                  SU< S[,        R.                  " SUR0                  5      R3                  U5      < SU=(       d    U< S35        UR                  U< S[        R4                  < SU< SU=(       d    U< S35        U(       a/  UR7                  U[        S9  UR                  R9                  U5        UR                  UR                  XPR                  5      5        OGUR                  U< S[        R4                  < SU< SUR                  XPR                  5      < 35        [,        R.                  " SUR"                  R0                  5      n	U	R;                  U5      (       Gd  UR                  S5        UR                  U< SU	R<                  < SU	R3                  U5      < S35        S H  n
[,        R>                  " UR"                  R0                  5      RA                  U
5      n	U	R3                  U5      S:X  d  MS  [,        RB                  " Xi5      (       a  Mp  UR                  SU< SU	R<                  < SU< SU< S U	R<                  < S!35        UR                  U< SU	R<                  < SU< S U	R<                  < S35        UR                  S"5        M     UR                  S#5        UR                  S$5        UR                  S%5        UR                  S&5        UR                  S'5        UR                  S(5        UR                  S)5        UR"                  R%                  [&        R(                  " S*S5      5        UR+                  U R                  S+U< SU< S35        UR                  S'5        U(       aO  URE                  U[        5        URG                  U[        5        UR                  UR                  < S,U< S35        UR                  U< SUR                  < S35        UR                  S)5        UR                  nU(       Ga  URH                  (       a  URJ                  S-:w  a  UR                  S.URL                  (       a  S/OS0< URJ                  < S1URL                  (       a  S/OS0< URJ                  < S235        UR"                  R%                  [&        R(                  " S3S5      5        UR                  UR                  5      nUR+                  U R                  S4U-  5        UR                  S"5        OUR                  nU(       a  GM  UR                  S5        [,        R>                  " UR"                  R0                  5       H  nURO                  Xa5        M     UR                  S)5        UR                  S55        UR"                  R%                  [&        R(                  " S6S5      5        UR+                  U R                  S7U-  5        UR                  S)5        [,        RP                  " US85      n[,        RP                  " US5      nUS:X  ag  US:X  aa  UR                  S5        UR                  S9U< S:U< S;35        UR                  S<U-  5        UR                  S"5        UR                  S)5        U R                   R                  RR                   GH  nURT                  S;   nURV                  (       d  M&  [X        RZ                  (       d  M=  UR\                  (       d  MP  U(       a  MY  [,        R>                  " U R                   R                  R0                  5      RA                  URT                  5      nU(       a  UR_                  5       OS nU(       a  UR                  U5        UR                  S=5        UR                  S>5        UR                  S?U< S@URT                  < SAUR                  SBU R                  5      < 35        UR                  SC5        UR                  SDUR\                  -  5        UR                  UR\                  < SEUR`                  < S35        UR                  SFUR\                  -  5        UR                  S"5        UR                  S"5        UR                  S)5        U(       d  GM  UR                  S)5        GM     URb                  (       a  UR"                  R%                  [&        R(                  " SGSH5      5        UR+                  U R                  SIU< SURd                  < S35        UR"                  R%                  [&        R(                  " SJSH5      5        UR+                  U R                  SKU-  5        UR                  Rf                  (       dz  UR                  R0                  Ri                  SL5      (       dP  UR+                  U R                  SM[        R4                  < SURk                  URl                  5      < SNU< S35        URn                  (       d  URq                  SO5      OS nU(       a  UR                   [        L a  SPU-  nURL                  (       a  URJ                  nOSQURJ                  -  nUR                  SR5        UR                  SSU< STU< SUU< SURr                  < S3	5        UR                  S)5        O[u        UR                  SV5        URn                  (       d  URq                  SW5      (       aS  OOPUR"                  R%                  [&        R(                  " SXS5      5        UR+                  U R                  SYU-  5        g g g )ZNrM   r   = &r  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   r  z3 = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(, &r  r  z	, NULL); tp_as_bufferz$#if !CYTHON_COMPILING_IN_LIMITED_APIr  r  r3  zif (!z->tp_as_buffer-> && z->tp_base->tp_as_buffer && z->tp_base->tp_as_buffer->r   r  z>#elif defined(Py_bf_getbuffer) && defined(Py_bf_releasebuffer)zB/* PY_VERSION_HEX >= 0x03090000 || Py_LIMITED_API >= 0x030B0000 */z#elif defined(_MSC_VER)zU#pragma message ("The buffer protocol is not supported in the Limited C-API < 3.11.")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)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;r
  rM  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));r  r	   modulestatevalue_cnamer  r:  r  rn  rV   r  r  r  r  r   r}  r  r<   r  r  r  r   r   r  r   get_slot_by_namer
  	slot_coder  r  r  is_empty	slot_namer  r  get_base_slot_functionr   r  r  rm  r;  generate_dynamic_init_codeget_slot_code_by_namepyfunc_entriesrr   rT  r    r-  r  r  r  vtable_cnamevtabptr_cnameis_internalr  rd  rA  is_closure_class_scoper  r  r   )r-  r[   r  r  r  r  r:  typespec_cname
tuple_tempbuffer_slotbuffer_method_namer  base_typeptr_cnamer  getattr_slot_funcdictoffset_slot_funcr`   r  r_  weakref_entrytp_weaklistoffset	objstructs                         r7   r  &CClassDefNode.generate_type_ready_codeV  sV
    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

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

AB

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

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

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

3 +Q  

[\

_`

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//< NJJx JJ34--''8JKM!!%))-E-UVJJx  !* ? ?} U#,#B#B5/#Z  C',@C,G

AB

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

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

3

8$
 

((77 II)OO	OOO(:(:(:...yy$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,= 8@     11++K9IJL%%eii!&&2    11++N<LMO%%eii1IM1YZ::))$**2G2G2K2KJ2W2W %%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5_c   11++M;MNP%%eii1VYf1fg `d5r6   c                     U R                   (       a  U R                   R                  U5        U R                  (       a  U R                  R                  U5        g g r   )r  r   r   r   s     r7   r   CClassDefNode.annotateE  s=    ((.99IIt$ r6   )rf  r  r   r1  r-  r  r:  r  r  )r.   r/   r0   r1   r   rh  ri  r;  r   rs  rt  ro  r1  rp  r  rc  r  r8  r  r   r~   r  r   rN  r  r   r5   r-   r6   r7   rB  rB    s    , (KL
CNLJJF0 0
%26) V]~F
K4\ lh lh\%r6   rB  c                   8    \ rS rSrS/rS rS rS rS rS r	Sr
g	)
PropertyNodeiL  r   c                     UR                  U R                  U R                  U R                  5      U l        U R
                  R                  U R                  R                  5        g r   )r  rr   rF   r<   r-  r   r   r:  r   s     r7   r   !PropertyNode.analyse_declarationsV  s@    ))$))TXXtxxH
		&&tzz'7'78r6   c                 F    U R                   R                  U5      U l         U $ r   rh  r   s     r7   r~    PropertyNode.analyse_expressionsZ      II11#6	r6   c                 :    U R                   R                  X5        g r   rk  rR  s      r7   r  *PropertyNode.generate_function_definitions^  rm  r6   c                     g r   r-   r   s     r7   r   $PropertyNode.generate_execution_codea  r   r6   c                 :    U R                   R                  U5        g r   rq  r   s     r7   r   PropertyNode.annotated  rs  r6   r   r-  Nrt  r-   r6   r7   r  r  L  s$     (K9;!r6   r  c                   P    \ rS rSrSrS/rSr\S 5       rS r	S r
S rS	 rS
 rSrg)CPropertyNodeih  zADefinition of a C property, backed by a CFuncDefNode getter.
    r   Tc                     U R                   R                  nU(       a  [        US   [        5      (       d   U5       eUS   $ r  )r   r6  rO   rX  )r   r6  s     r7   r  CPropertyNode.cfuncs  s6    		E!Hl;;BUB;Qxr6   c                 B   [        U R                  US9nU R                  R                  U5        UR	                  U R                  U R
                  U R                  U R                  R                  US9=o0l	        U R                  R                  R                  Ul        g )N)class_scope)ctypeproperty_scope)r   rr   r   r   r  rF   r<   r  r  r-  r  r  )r   r   r:  r-  s       r7   r   "CPropertyNode.analyse_declarationsy  s|    diiS9		&&u- 11IItxx1G1GX] 2 _ 	_
!ZZ--33r6   c                 F    U R                   R                  U5      U l         U $ r   rh  r   s     r7   r~   !CPropertyNode.analyse_expressions  r  r6   c                 :    U R                   R                  X5        g r   rk  rR  s      r7   r  +CPropertyNode.generate_function_definitions  rm  r6   c                     g r   r-   r   s     r7   r   %CPropertyNode.generate_execution_code  r   r6   c                 :    U R                   R                  U5        g r   rq  r   s     r7   r   CPropertyNode.annotate  rs  r6   r  N)r.   r/   r0   r1   r   r   r   r  r  r   r~   r  r   r   r5   r-   r6   r7   r  r  h  s@     (KL 
4;!r6   r  c                   *    \ rS rSr/ rS rS rS rSrg)
GlobalNodei  c                 `    U R                    H  nUR                  X R                  5        M      g r   )namesdeclare_globalr<   r   r   rr   s      r7   r   GlobalNode.analyse_declarations  s"    JJDtXX. r6   c                     U $ r   r-   r   s     r7   r~   GlobalNode.analyse_expressions  r?  r6   c                     g r   r-   r   s     r7   r   "GlobalNode.generate_execution_code  r   r6   r-   Nr  r-   r6   r7   r  r    s    
 K/r6   r  c                   *    \ rS rSr/ rS rS rS rSrg)NonlocalNodei  c                 `    U R                    H  nUR                  X R                  5        M      g r   )r  declare_nonlocalr<   r  s      r7   r   !NonlocalNode.analyse_declarations  s"    JJD  xx0 r6   c                     U $ r   r-   r   s     r7   r~    NonlocalNode.analyse_expressions  r?  r6   c                     g r   r-   r   s     r7   r   $NonlocalNode.generate_execution_code  r   r6   r-   Nr  r-   r6   r7   r  r    s    
 K1r6   r  c                   B    \ rS rSrS/rS rS rS rSrS r	S r
S	 rS
rg)r  i  r  c                    SSK Jn  U R                  n[        X2R                  5      (       a  UR
                  R                  5       nUS:X  a  UR                  5       u  pV[        U5      (       a  [        UR                  S5        UR                   HV  u  pxUR                  U5      n	U	c  [        UR                  S5        M1  UR                  UR                  XR                  SS9  MX     [        U l        g g [#        USS 5      b]  UR$                  (       a  UR'                  U5        [        U l        g UR(                  (       d  UR*                  (       a  [        U l        g g g )	Nr   r  r8  z!Variable names must be specified.Unknown typeT)r!  rS  )r   r  r  rO   GeneralCallNoder  r  explicit_args_kwdsrN   r   r<   r  r  r=  r   PassStatNoderQ   r   r   declare_from_annotationr  is_subscript)
r   r   r  r  r`   rX   rY   varr,  r  s
             r7   r   !ExprStatNode.analyse_declarations  s   yyd5566==446Dy !446
t99$(($GH&*&:&:NC$44S9D|imm^<		4$O '; ". ! T<.:||,,S1!-""d&7&7!- '8 ;r6   c                     SU R                   l        U R                   R                  U5      U l         SU R                   l        U $ r  )r  result_is_usedr~   r   s     r7   r~    ExprStatNode.analyse_expressions  s5    #(		 II11#6	#(		 r6   c                     U R                   R                  R                  (       a1  U R                   R                  5       (       a  U R	                  5         g g g r   )r  r  r  result_in_tempr   r   s     r7   r  ExprStatNode.nogil_check  s8    99>>%%$))*B*B*D*DNN +E%r6   zDiscarding owned Python objectc                 *   UR                  U R                  5        SU R                  l        U R                  R	                  U5        U R                  R                  5       (       dw  U R                  R                  5       (       aX  U R                  R                  5       nU R                  R                  R                  (       d  SU-  nUR                  SU-  5        U R                  R                  U5        U R                  R                  U5        g )NFz
(void)(%s)r  )rF  r<   r  r*  r{  r-  r   r  r  rV   r[  r  )r   r[   r   s      r7   r   $ExprStatNode.generate_execution_code  s    dhh#(		 		**40yy''))dii.>.>.@.@YY%%'F99>>))%.JJuv~&		((.		T"r6   c                 :    U R                   R                  X5        g r   )r  r  rR  s      r7   r  *ExprStatNode.generate_function_definitions  rm  r6   c                 :    U R                   R                  U5        g r   )r  r   r   s     r7   r   ExprStatNode.annotate  rs  r6   )rQ   r  N)r.   r/   r0   r1   r   r   r~   r  r   r   r  r   r5   r-   r6   r7   r  r    s0    
 (K.2 3K
#;!r6   r  c                   ,    \ rS rSrS rS rS rS rSrg)AssignmentNodei  c                 4   UR                   nUR                   nUR                  (       ao  UR                  R                  (       aS  UR                  (       aA  UR                  R                  (       d%  [	        U R
                  SR                  XC5      SS9  g g g g g )Nz4Assigning to '{}' from '{}' discards const qualifierr   r  )r  r  r  r  r   r<   r  )r   rm  rhsrhs_tlhs_ts        r7   _warn_on_const_assignment(AssignmentNode._warn_on_const_assignment  se    <<EOO44eooNfNfDHHT[[\aiqrs Og4<r6   c                 |    [        U[        5      (       a'  U R                  UR                  UR                  5        g g r   )rO   r6  r;  rm  r8  )r   rZ   s     r7   _check_const_assignment&AssignmentNode._check_const_assignment  s,    dN++**488TXX> ,r6   c                 R   U R                  U5      nU R                  U5        [        U[        5      (       ao  [        U[        5      (       dZ  UR
                  R                  R                  (       a5  UR
                  R                  5       (       a  [        U R                  S5        U$ )Nz9Storing unsafe C derivative of temporary Python reference)r}   r>  rO   r6  ParallelAssignmentNoder8  r  r  is_ephemeralr   r<   )r   r   rZ   s      r7   r~   "AssignmentNode.analyse_expressions  sq    !!#&$$T*dN++JtE[4\4\xx}}##(=(=(?(?dhh [\r6   c                 ~    UR                  U R                  5        U R                  U5        U R                  U5        g r   )rF  r<   generate_rhs_evaluation_coder  r   s     r7   r   &AssignmentNode.generate_execution_code  s.    dhh))$/%%d+r6   r-   N)	r.   r/   r0   r1   r;  r>  r~   r   r5   r-   r6   r7   r6  r6    s    t?,r6   r6  c                   p    \ rS rSrSS/rSrSrSrSrS r	SS jr
S rS rS	 rS
 rS rSS jrS rS rSrg)SingleAssignmentNodei  rm  r8  Fc           	      
   SSK Jn  [        U R                  UR                  5      (       Ga.  U R                  R
                  R                  5       nU(       Ga  U R                  R                  5       u  pEUS;   Ga  [        U5      S:  a  [        US   R                  S5        g Ub:  UR                  S 5      nUS:X  d  SU;  a  [        UR                  S5        g US   nOS	nUS
   R                  U5      nUc  [        US
   R                  S5        g U R                  n	US:X  a  [        XR                  5      (       a  U	R                  U	R                  4/n
Oc[        XR                   5      (       a2  U	R"                   Vs/ s H  oR                  UR                  4PM     n
nO[        U	R                  S5        g U
 H  u  pUR%                  XUSUS9  M     [        U5      S:X  a  US   U l        GOeSU l        GO\SU l        [        XR                  5      (       d  [        U	R                  S5        UR)                  U	R                  XR                  S	S9  GOUS;   Gau  SU l        [        U5      S
:  d  Uc!  [        U R                  R                  S5        g / nUR*                   HX  u  pUR                  U5      nUc  [        UR                  S5        M1  UR-                  UR.                  XR                  45        MZ     [        U5      [        UR*                  5      :  a  g [        U R                  UR                  5      (       d   [        U R                  R                  S5        U R                  R                  n[1        U5      nUR3                  UUUSU R                  R                  5        U H  u  pnUR%                  XU5        M     OUS:X  a|  SU l        U(       a*  [        U R                  R
                  R                  S5        [5        U R                  R                  U R                  R                  US9nUR7                  U5        U R&                  (       a  g U R8                  (       a  U R                  R;                  U5        g U R                  R=                  U5        U R                  R>                  (       d  U R                  R@                  (       a  U R                  RB                  (       ad  U R                  RB                  RD                  (       d>  U R                  RG                  5       nU(       a  UU R                  RB                  l"        g g g g g s  snf )Nr   r  )r8  typedefr%   zInvalid positional argument.rJ  r  zInvalid keyword argument.r  r   r!  r8  zInvalid declarationT)r!  r  zInvalid declaration.)r  )r8  unionz.Struct or union members must be given by name.F
fused_typez*fused_type does not take keyword arguments)rr   rk   )$r   r  rO   r8  r{  r  r  r#  rN   r   r<   compile_time_valuer  rm  r  rr   r  rX   r=  declaration_onlyr  r  r  r   r   rB  r  r   is_assignment_expression0analyse_assignment_expression_target_declarationrJ  r  r   r-  r  !get_known_standard_library_import)r   r   r  	func_namerX   rY   kwdictr  r  rm  varsr'  r<   membersmemberr,  rr   r:  	fusednodestdlib_import_names                       r7   r   )SingleAssignmentNode.analyse_declarations*  s2    dhh	 2 233))==?I!XX88:
 664y1}d1gkk+IJ'!%!8!8!>$	1\5O!$((,GH"%+L%9
%.
72237D|d1gkk>:((C I-%c+=+=>>%(XXsww$7#8D'-@-@AACF88#L8CXXsww$78D#LD!#''+@A"(,HCOOCsDU_O` )-t9>'+AwDH48D104-)#/A/ABB!#''+AB++CHHdHHQZ+["55,0D)4y1}dhhll,\] G-1-A-A)(88=<!)--@#NNFLL$

+KL .B 7|c$*>*>&??%dhh	0B0BCCdhhll,BC88==D.t4E//itxx||\-4)c))&< .5 ,.,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   !U,c                 "	   SSK Jn  U R                  R                  U5      U l        U R                  R
                  (       a  U R                  R                  R                  R                  (       a  UR                  (       ap  U R                  R                  R                  cO  U R                  R                  5       (       a0  U R                  R                  U R                  R                  l
        O.[        U R                  SU R                  R                   S35        U R!                  U5      nU(       a  U$ U R                  R#                  U5      U l        U R                  R%                  U5        U R'                  U5      nU(       a  U$ [)        U R                  UR*                  5      (       aP  U R                  R-                  U R                  5        U R                  R/                  U R                  5      U l        OU R                  R                  R0                  (       ak  [)        U R                  UR2                  5      (       dF  UR3                  U R                  R                  U R                  S S S9nUR#                  U5      U l        U R                  R                  R4                  (       Ga  UR7                  U R                  SU R                  R                  U R                  R                  /5      nU(       a  U R                  nSU l        UR                  R:                  U l        UR                  R<                  U l        U R:                  S:X  a3  U R<                  c&  UR?                  [@        RB                  " S	S
5      5        OaU R                  RE                  U R                  R                  U5      nO0U R                  RE                  U R                  R                  U5      nU(       dN  URF                  (       d=  UR
                  (       d>  URH                  (       d-  UR                  RJ                  (       a  URM                  U5      nO,UR                  RJ                  (       a  URO                  U5      nXpl        U $ )Nr   r  zAssignment to const 'r  )r  r]   stop=Tr  CppExceptionConversionr  )(r   r  r8  r}   rm  r   r-  r  r  r&  rb  r  r  r   r<   rr   
unroll_rhsr   gil_assignment_check
unroll_lhsrO   MemoryViewIndexNodeanalyse_broadcast_operation$analyse_as_memview_scalar_assignmentr  SliceIndexNoder  lookup_operator_for_typesis_overloaded_assignmentr  r  r  r   r   r  r  r   r  coerce_to_tempcoerce_to_simple)r   r   use_tempr  unrolled_assignmentrm  opr8  s           r7   r}   "SingleAssignmentNode.analyse_types  s   88))#.88 3 3 < <""txx~~':':'BtxxGcGcGeGe&*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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r6   c           
          SSK JnJn  UnS =n=n=pUR                  R                  (       a  UR                  R
                  nGOUR                  R                  (       d  UR                  R                  (       Gax  [        XR                  5      (       am  UR                  (       d\  UR                  (       dK  UR                  =pa[        XR                  5      (       a$  UR                  (       d  UR                  (       d  MK  [        XR                  5      (       Ga  UR                  nUR                  nU(       a   UR                  [        R                  U5      nUR                  nU(       a!  UR                  [        R                  U5      nOUR                  R                  (       a  UR                  R
                  (       a  UR!                  U R"                  [%        UR                  R
                  5      [        UR                  R
                  [&        5      (       a  UR                  R
                  OUR(                  S9nO[+        U R"                  S5        g S n	U	(       a   U	R                  [        R                  U5      n	S n U" US 5      U" US5      -
  U" U	S5      -  nOJUR                  R                  (       a-  UR                  R
                  n[        U[&        5      (       d  g Og g X:w  a  [+        U R"                  SU< S	U< 35        g / nUR/                  U5      nU/nU(       a3  UR0                  (       d"  UR/                  U5      nUR3                  U5        U(       a3  UR0                  (       d"  UR/                  U5      nUR3                  U5        U	(       a3  U	R0                  (       d"  UR/                  U	5      n	UR3                  U	5        [5        U5       GHi  nUR!                  U R"                  [%        U5      U[        R                  S
9nU	bo  U	R7                  5       (       a>  UR8                  U	R8                  -  nUR!                  U R"                  [%        U5      US9nOUR;                  U R"                  SU	US9nUb  UR7                  5       (       aS  UR7                  5       (       a>  UR8                  UR8                  -   nUR!                  U R"                  [%        U5      US9nOUR=                  U R"                  SUUS9nUR3                  UR?                  U R"                  UURA                  U5      S95        GMl     XU4$ ! [,         a    [+        U R"                  S5         g f = f)Nr   )r  	UtilNodes)r   r  z*C array iteration requires known end indexc                 d    U c  U$ U R                  5       (       a  U R                  $ [        S5      e)NzNot a constant.)r  r  r  )rZ   
none_values     r7   	get_const.SingleAssignmentNode.unroll.<locals>.get_const  s4    |))1133#333():;;r6   r   z5C array assignment currently requires known endpointsz3Assignment to/from slice of wrong length, expected z, got )r   r  r  r  )operatoroperand1operand2r  )r  r  )!r   r  rn  r  	is_ctupler  r  r  rO   rd  r]   r[  r  r  r
   rE  IntNoder<   r  r  constant_value_not_setr   r  
LetRefNoder   r  r(  r  r  MulNodeAddNode	IndexNoder}   )r   rZ   target_sizer   r  rn  r  
start_node	stop_node	step_node
check_node
slice_sizerq  rn   refsr  ix_node
step_valueindex_values                      r7   unrollSingleAssignmentNode.unroll  sE   *:>>
>Y>99JYY!3!3!3T#;#;<<djjTXT]T]"ii' T#;#;<<djjTXT]T]T]$ 8 89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2 3  $$((K) *##D)vj33"--j9JKK
#Y11!,,Y7IKK	"Y11!,,Y7IKK	"$B''BQSZdZvZv'wG$0022!(!8!89;T;T!TJ'//Jak/lG'//3QZel/mG%11338S8S8U8U")"9"9J<V<V"VK'//K@Pbm/nG'//3g 0 WGLL,,TXXDH]H]^aHb,cd %  &&a " $(($[\s   U  U=<U=c           
      X   SSK Jn  / n[        X45       H3  u  pUR                  [	        U R
                  XU R                  S95        M5     [        U R
                  US9R                  U5      n
U(       a  [        U R
                  X*/S9n
US S S2    H  nUR                  X5      n
M     U
$ )Nr   )rn  )rm  r8  first)r<   r6  r   )r   rn  r  r  rH  r<   r  rA  r~   r5  LetNode)r   r  r  lhs_listrhs_listr   rn  assignmentsrm  r8  rZ   refs               r7   unroll_assignments'SingleAssignmentNode.unroll_assignments  s    H/HC3DHH#VZV`V`ab 0%$((+FZZ[^_DHHZ4FGD":C$$S/D r6   c                    SSK Jn  [        U R                  UR                  5      (       d  g [        S U R                  R                   5       5      (       a  g U R                  U R                  [        U R                  R                  5      U5      nU(       d  g Uu  pEnU R                  XTU R                  R                  Xa5      $ )Nr   r  c              3   8   #    U  H  oR                   v   M     g 7fr   )
is_starred)r\  r3  s     r7   r]  2SingleAssignmentNode.unroll_rhs.<locals>.<genexpr>,  s     7#~~r  )r   r  rO   rm  r  r  rX   r  r8  rN   r  )r   r   r  unrolledr  r  r8  s          r7   r^  SingleAssignmentNode.unroll_rhs(  s    $((I$7$7887777;;txxTXX]]);SA (
#&&tQQr6   c                    U R                   R                  R                  (       a  g SSKJn  [        U R                  UR                  5      (       d  g U R                  U R                   [        U R                  R                  5      U5      nU(       d  g Uu  pEnU R                  XTX`R                  R                  U5      $ Nr   r  )rm  r  rv  r   r  rO   r8  r  r  rN   rX   r  )r   r   r  r  r  r  rm  s          r7   r`  SingleAssignmentNode.unroll_lhs5  s    88==""$((I$7$788;;txxTXX]]);SA (
#&&thhmmSQQr6   c                 :    U R                   R                  U5        g r   r8  r{  r   s     r7   rE  1SingleAssignmentNode.generate_rhs_evaluation_codeC      ))$/r6   c                     U R                   (       aF  U R                  R                  U R                  UU R                   U R                  U R
                  S9  g U R                  R                  U R                  U5        g )N)r  r  r  )rf  rm  r  r8  r  r  )r   r[   r  s      r7   r  -SingleAssignmentNode.generate_assignment_codeF  sa    ((HH--&*&C&C $ 4 4 $ 4 4 . 6 HH--dhh=r6   c                 :    U R                   R                  X5        g r   r8  r  rR  s      r7   r  2SingleAssignmentNode.generate_function_definitionsQ      ..s9r6   c                 p    U R                   R                  U5        U R                  R                  U5        g r   rm  r   r8  r   s     r7   r   SingleAssignmentNode.annotateT  &    $$r6   )rN  r  r  rf  rm  r8  Nr  r  )r.   r/   r0   r1   r   r  rf  rO  rN  r   r}   r  r  r^  r`  rE  r  r  r   r5   r-   r6   r7   rH  rH    s^     %.KE$$\Z|4l\'|
RR0	>: r6   rH  c                   Z    \ rS rSr/ SQrSrSrSrS rS r	SS jr
S rSS jrS	 rS
 rSrg)CascadedAssignmentNodeiY  )r  r8  coerced_valuescloned_valuesNc                     [        U[        5      (       a/  UR                   H  nU R                  X!R                  5        M      g g r   )rO   r  r  r;  r8  )r   rZ   rm  s      r7   r>  .CascadedAssignmentNode._check_const_assignmentl  s5    d233}}..sHH= % 4r6   c                 L    U R                    H  nUR                  U5        M     g r   )r  rJ  )r   r   rm  s      r7   r   +CascadedAssignmentNode.analyse_declarationsq  s    ==C**3/ !r6   c                 d   SSK JnJn  [        5       n[	        U R
                  5       HP  u  pgUR                  U5      =opR
                  U'   UR                  U5        UR                  UR                  5        MR     U R                  R                  U5      n[        U5      S:X  a  [        [        U5      5      R                  (       aF  UR!                  SWU R                  /5      n	U	(       d   UR#                  UR%                  5       U5      nO UR#                  UR%                  5       U5      nUR&                  (       dV  UR(                  (       dE  U(       d,  UR*                  (       d  UR                  R,                  (       a  UR/                  U5      nOUR1                  U5      nUR3                  5       (       a  U" U5      OUU l
        / U l        0 n
/ U l        U R
                   H  nUR                  R                  =(       a    UR!                  SXpR                  /5      nU R6                  R9                  U5        UR                  U
;  d  Mj  UR                  UR                  :w  d  M  U" U R                  5      nU(       d  UR#                  UR                  U5      nU R4                  R9                  U5        XUR                  '   M     / U l        U R
                   HJ  nU
R=                  UR                  U R                  5      nU R:                  R9                  U" U5      5        ML     U $ )Nr   )rP  r2  r\  )r  rP  r2  r   r  r  r   r_  r   r  r8  r}   rN   nextiterr  lookup_operatorr  r_  r   r   r  r  rg  rh  r-  r  assignment_overloadsr  r  r  )r   r   ri  rP  r2  	lhs_typesr)  rm  r8  rk  r  
overloadeds               r7   r}   $CascadedAssignmentNode.analyse_typesu  sM   3 E	.FA%(%=%=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%9%99S>s !$&!==C..\33F3FsSRZRZO3\J%%,,Z8xx~-#((chh2F)!--#6C##**3/+.sxx( !  ==C $$SXXtxx8C%%in5 ! r6   c                 :    U R                   R                  U5        g r   r  r   s     r7   rE  3CascadedAssignmentNode.generate_rhs_evaluation_code  r  r6   c                    U R                    H  nUR                  U5        M     [        U R                  U R                  U R
                  5       H'  u  pCnUR                  U5        UR                  X1US9  M)     U R                    H%  nUR                  U5        UR                  U5        M'     U R                  R                  U5        U R                  R                  U5        g )N)r  )
r  r{  r  r  r  r  r  r[  r  r8  )r   r[   r  r8  rm  overload	rhs_values          r7   r  /CascadedAssignmentNode.generate_assignment_code  s    &&C((. ' #&dmmT5G5GIbIb"cCh((.((((S #d ,,I,,T2  & - 	''-D!r6   c                 :    U R                   R                  X5        g r   r  rR  s      r7   r  4CascadedAssignmentNode.generate_function_definitions  r  r6   c                    U R                    H  nUR                  U5        M     [        U R                  U R                  5       H'  u  p2UR                  U5        UR                  U5        M)     U R
                  R                  U5        g r   )r  r   r  r  r  r8  )r   r[   r8  rm  s       r7   r   CascadedAssignmentNode.annotate  sg    &&CLL 'DMM4+=+=>HCLLLL ? 	$r6   )r  r  r  r8  r  r  )r.   r/   r0   r1   r   r  r  r  r>  r   r}   rE  r  r  r   r5   r-   r6   r7   r  r  Y  s>     IKMN>
0/b0": r6   r  c                   8    \ rS rSrS/rS rS rS rS rS r	Sr
g	)
rA  i  r6  c                 L    U R                    H  nUR                  U5        M     g r   r;  r<  s      r7   r   +ParallelAssignmentNode.analyse_declarations  s    JJD%%c* r6   c                     U R                    Vs/ s H  nUR                  USS9PM     snU l         U R                    H  nUR                  U5        M     U $ s  snf )Nr   )ri  )r6  r}   r>  r<  s      r7   r~   *ParallelAssignmentNode.analyse_expressions  s]    "&**.",$ ((q(9",.
 JJD((. .s   Ac                     UR                  U R                  5        U R                   H  nUR                  U5        M     U R                   H  nUR	                  U5        M     g r   )rF  r<   r6  rE  r  rG  s      r7   r   .ParallelAssignmentNode.generate_execution_code  sJ    dhhJJD--d3 JJD))$/ r6   c                 L    U R                    H  nUR                  X5        M     g r   rB  rC  s       r7   r  4ParallelAssignmentNode.generate_function_definitions  s    JJD..s9 r6   c                 L    U R                    H  nUR                  U5        M     g r   rJ  rG  s      r7   r   ParallelAssignmentNode.annotate  rL  r6   rM  Nr.   r/   r0   r1   r   r   r~   r   r  r   r5   r-   r6   r7   rA  rA    s$     )K+0: r6   rA  c                   :    \ rS rSrSS/rS rS rS rS rS r	S	r
g
)InPlaceAssignmentNodei  rm  r8  c                 :    U R                   R                  U5        g r   rm  rJ  r   s     r7   r   *InPlaceAssignmentNode.analyse_declarations
      ++C0r6   c                 (   U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  R                  (       d  U R                  R
                  (       a7  U R                   R                  U R                  R                  U5      U l         U $ U R                  R                  R                  (       a?  U R                  S;   a/  U R                   R                  [        R                  U5      U l         U $ )Nz+-)r8  r}   rm  r   is_memview_indexis_buffer_accessr  r  	is_stringrs  r
   rE  r   s     r7   r}   #InPlaceAssignmentNode.analyse_types  s    88))#.88005 88$$(A(Axx))$((--=DH  XX]]$$$)>xx))**F*FLDHr6   c                    UR                  U R                  5        U R                  U R                  p2UR	                  U5        UR                  U5        U R                  nUS:X  a  SnOUS:X  a  [        U R                  S5        UR                  (       d  UR                  (       a  UR                  R                  (       a  [        U R                  S5        US;   aO  UR                  R                  (       a4  UR                  R                  S   (       d  [        U R                  S5        UR                  X1U5        OaUR                   (       a  [        U R                  S	5        O9UR#                  UR%                  5       < S
U< SUR%                  5       < S35        UR'                  U5        UR)                  U5        UR+                  U5        UR-                  U5        g )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 slicesrJ   z= r  )rF  r<   rm  r8  r{   generate_subexpr_evaluation_coders  r   r  r  r  r  r  r  r
  generate_buffer_setitem_codeis_memview_slicerV   r   generate_subexpr_disposal_codefree_subexpr_tempsr[  r  )r   r[   rm  r8  c_ops        r7   r   -InPlaceAssignmentNode.generate_execution_code  sI   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r6   c                 p    U R                   R                  U5        U R                  R                  U5        g r   r  r   s     r7   r   InPlaceAssignmentNode.annotate4  r  r6   c                     SSK Jn  UR                  U R                  U R                  U R
                  U R                  5      $ r  )r   r  
binop_noder<   rs  rm  r8  rC  s     r7   create_binop_node'InPlaceAssignmentNode.create_binop_node8  s,    ##DHHdmmTXXtxxPPr6   rm  r8  N)r.   r/   r0   r1   r   r   r}   r   r   r  r5   r-   r6   r7   r  r    s'    $ %.K1
6 Qr6   r  c                   P    \ rS rSrSS/rS r\R                  rSr	S r
S rS rS	rg
)PrintStatNodei=  	arg_tuplerT   c                    U R                   (       a1  U R                   R                  U5      nUR                  U5      U l         U R                  R                  U5      nUR                  U5      U l        UR	                  [
        5        [        U R                  R                  5      S:X  a&  U R                  (       a  UR	                  [        5        U $ )Nr   )
rT   r~   coerce_to_pyobjectr  r  printing_utility_coderN   rX   append_newlineprinting_one_utility_code)r   r   rT   r  s       r7   r~   !PrintStatNode.analyse_expressionsF  s    ;;[[44S9F 33C8DKNN66s;	"55c:23t~~""#q(T-@-@  !:;r6   zPython print statementc           
      .   UR                  U R                  5        U R                  (       a6  U R                  R                  U5        U R                  R	                  5       nOSn[        U R                  R                  5      S:X  a  U R                  (       a  U R                  R                  S   nUR                  U5        UR                  SU< SUR	                  5       < SUR                  U R                  5      < 35        UR                  U5        UR                  U5        OU R                  R                  U5        UR                  SUU R                  R	                  5       U R                  UR                  U R                  5      4-  5        U R                  R                  U5        U R                  R                  U5        U R                  (       a7  U R                  R                  U5        U R                  R                  U5        g g )Nr3  r   r   zif (__Pyx_PrintOne(r   r  z#if (__Pyx_Print(%s, %s, %d) < 0) %s)rF  r<   rT   r{  r  rN   r  rX   r  rV   r  r[  r  )r   r[   stream_resultr3  s       r7   r   %PrintStatNode.generate_execution_codeT  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( r6   c                     U R                   (       a  U R                   R                  X5        U R                  R                  X5        g r   )rT   r  r  rR  s      r7   r  +PrintStatNode.generate_function_definitionsu  s-    ;;KK55c@44S?r6   c                     U R                   (       a  U R                   R                  U5        U R                  R                  U5        g r   )rT   r   r  r   s     r7   r   PrintStatNode.annotatez  s-    ;;KK  &%r6   )r  rT   N)r.   r/   r0   r1   r   r~   r   r   r  r   r   r  r   r5   r-   r6   r7   r  r  =  s4     )K	 ..K*K)B@
&r6   r  c                   H    \ rS rSrS/rS r\R                  rSr	S r
S rSrg)	ExecStatNodei  rX   c                     [        U R                  5       H5  u  p#UR                  U5      nUR                  U5      nX0R                  U'   M7     UR	                  [
        R                  5        U $ r   )r  rX   r~   r  r  r   pyexec_utility_coder   r   r)  r3  s       r7   r~    ExecStatNode.analyse_expressions  s]    		*FA))#.C((-CIIaL + 	W889r6   zPython exec statementc           	         UR                  U R                  5        / nU R                   H3  nUR                  U5        UR	                  UR                  5       5        M5     [        USS/S S[        U5      -
   -   5      nUR                  R                  [        R                  SS9nUR                  SU4U-   -  5        U R                   H%  nUR                  U5        UR                  U5        M'     UR                  UR                  X@R                  5      5        UR!                  U[        5        UR#                  U[        5        UR                  R%                  U5        g )Nr3  r   Tr}  z%s = __Pyx_PyExec3(%s, %s, %s);)rF  r<   rX   r{  r  r  rc  rN   r  r  r
   r   rV   r[  r  r  r  r  r  )r   r[   rX   r3  temp_results        r7   r   $ExecStatNode.generate_execution_code  s   dhh99C((.KK(  TS#J|#d)445nn22:3L3LY]2^

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

##K:	<^4k>:##K0r6   c                 L    U R                    H  nUR                  U5        M     g r   rX   r   r  s      r7   r   ExecStatNode.annotate      99CLL r6   r-   N)r.   r/   r0   r1   r   r~   r   r   r  r   r   r   r5   r-   r6   r7   r  r    s*    
 (K ..K)K1$r6   r  c                   @    \ rS rSrS/rSrS rS rS rSr	S r
S	 rS
rg)DelStatNodei  rX   Fc                 L    U R                    H  nUR                  U5        M     g r   )rX   rJ  r  s      r7   r    DelStatNode.analyse_declarations  s    99C**3/ r6   c                 V   [        U R                  5       GH  u  p#UR                  US 5      =o0R                  U'   UR                  R                  (       d,  UR
                  (       ac  UR                  R                  (       aH  UR
                  (       a5  UR                  R                  (       a  [        UR                  S5        M  M  M  UR                  R                  (       a9  UR                  R                  R                  (       a  U R                  U5        GM	  UR                  R                  (       a  [        UR                  S5        GM=  UR                  (       a*  UR                   R                  ["        R$                  L a  GMx  [        UR                  S5        GM     U $ )NzDeletion of global C variablezDeletion of non-heap C++ objectz&Deletion of non-Python, non-C++ object)r  rX   rU  r  r  r   r'  r-  
is_cglobalr   r<   r  r  r  r   r&  r  r   bytearray_typer 	  s       r7   r~   DelStatNode.analyse_expressions  s    		*FA!$!>!>sD!IIC))A,xx##8S8S;;399#7#7#''#BC $8;SXX%7%7%D%Ds#&&cgg@A!!chhmmw7M7M&McggGH + r6   c                     U R                    H0  nUR                  R                  (       d  M   U R                  5         M2     g r   )rX   r  r  r   r  s      r7   r  DelStatNode.nogil_check  s*    99Cxx###  r6   zDeleting Python objectc                    UR                  U R                  5        U R                   GH&  nUR                  R                  (       dS  UR                  R
                  (       d8  UR                  (       aB  UR                  R                  [        R                  L a  UR                  XR                  S9  M  UR                  R                  (       d  M  UR                  R                  R                  (       d  M  UR                  U5        UR!                  SUR#                  5       -  5        UR%                  U5        UR'                  U5        GM)     g )N)ignore_nonexistingz
delete %s;)rF  r<   rX   r  r  r'  r&  r  r   r	  generate_deletion_coder	  r  r  r  r{  rV   r   r[  r  r  s      r7   r   #DelStatNode.generate_execution_code  s    dhh99C$$HH//$$':P:P)P**-D-D + FSXX%7%7%D%D%D,,T2

<#**,67**40t$ r6   c                 L    U R                    H  nUR                  U5        M     g r   r	  r  s      r7   r   DelStatNode.annotate  r	  r6   r-   N)r.   r/   r0   r1   r   r	  r   r~   r  r   r   r   r5   r-   r6   r7   r
	  r
	    s1    
 (K0"!
 +K%r6   r
	  c                   $    \ rS rSr/ rS rS rSrg)r$  i  c                     U $ r   r-   r   s     r7   r~    PassStatNode.analyse_expressions  r?  r6   c                 x    UR                   R                  S   (       a  UR                  U R                  5        g g )Nr  )r  r
  rF  r<   r   s     r7   r   $PassStatNode.generate_execution_code  s+    &&{3MM$((# 4r6   r-   N)r.   r/   r0   r1   r   r~   r   r5   r-   r6   r7   r$  r$    s     K$r6   r$  c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )IndirectionNodei  zz
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                 <   > [         TU ]  US   R                  US9  g )Nr   rM  )ro   r   r<   )r   r6  rQ   s     r7   r   IndirectionNode.__init__  s    qU3r6   r-   )r.   r/   r0   r1   r   r   r5   rx   ry   s   @r7   r	  r	    s    
4 4r6   r	  c                   (    \ rS rSr/ rSrS rS rSrg)BreakStatNodei  Tc                     U $ r   r-   r   s     r7   r~   !BreakStatNode.analyse_expressions  r?  r6   c                     UR                  U R                  5        UR                  (       d  [        U R                  S5        g UR	                  UR                  5        g )Nzbreak statement not inside loop)rF  r<   break_labelr   r8  r   s     r7   r   %BreakStatNode.generate_execution_code   s<    dhh$((=>MM$**+r6   r-   N	r.   r/   r0   r1   r   r   r~   r   r5   r-   r6   r7   r#	  r#	    s    KM,r6   r#	  c                   (    \ rS rSr/ rSrS rS rSrg)ContinueStatNodei  Tc                     U $ r   r-   r   s     r7   r~   $ContinueStatNode.analyse_expressions  r?  r6   c                     UR                   (       d  [        U R                  S5        g UR                  U R                  5        UR	                  UR                   5        g )Nz"continue statement not inside loop)continue_labelr   r<   rF  r8  r   s     r7   r   (ContinueStatNode.generate_execution_code  s?    ""$((@Adhhd))*r6   r-   Nr)	  r-   r6   r7   r+	  r+	    s    KM+r6   r+	  c                   R    \ rS rSrS/rSrSrSrSrS r	S r
SrS rS	 rS
 rS rSrg)r  i  r   TFc                 N   UR                   nX l         U(       d  [        U R                  S5        U $ U R                  (       Ga  U R                  (       a  [        U R                  S5        U R                  R                  U5      U l        UR                  (       d  UR                  (       a"  [        U R                  R                  S5        U $ U R                  R                  UR                   U5      U l        UR                  S   (       d  UR                  S   (       a8  UR                  (       d'  UR                  U5      (       a  UR                  U5        U $ UR                  (       d8  UR                  (       d'  UR                  (       d  [        U R                  S5        U $ )Nz!Return not inside a function bodyz$Return with value in async generatorz"Return with value in void functionr  r  zReturn value required)r  r   r<   r   in_async_genr}   r  r
  r  r
  r  can_coerce_to_pyobjectr+  )r   r   r  s      r7   r~   "ReturnStatNode.analyse_expressions(  s   oo&$((?@K:::  dhh FG11#6DJ""k&?&?djjnn&JK  "ZZ11#//3G
>>),{0K&22{7Y7YZ]7^7^#==cB 	  '''33'55dhh 78r6   c                 \    U R                   R                  (       a  U R                  5         g g r   )r  r  r   r   s     r7   r  ReturnStatNode.nogil_check@  s     ''NN (r6   zReturning Python objectc           	         UR                  U R                  5        U R                  (       d  g U R                  nU R                  R                  (       aD  UR                  [        R                  U R                  5        U(       a  UR                  (       a  S nU(       Ga  UR                  U5        U R                  R                  (       aX  SSKJn  UR                  [        R                  U R                  UR                  UUU R                  S9  UR                  U5        OUR!                  U5        UR#                  [        R                  < SUR%                  U R                  5      < S35        UR                  U5        UR&                  R(                  S   (       d  UR&                  R(                  S   (       aM  UR+                  [        R                  U R                  U R                  UR,                  R.                  (       + S9  UR1                  U5        OU R                  R                  (       a+  UR3                  [        R                  U R                  5        O@U R                  R4                  (       a%  U R7                  XR                  R8                  5        UR,                  R;                  5        H  u  pEUR=                  XE5        M     UR?                  UR@                  5        g )	Nr   r  )	lhs_cnamelhs_typelhs_posr8  r[   r  r  r  r  r  r  )!rF  r<   r  r   r  r<  r	   r  r   r{  r'  r   r  put_acquire_memoryviewslicer  r  r  rV   r  r  r
  r5  r  r  r  r4  r
  
put_returnr!  temps_holding_referencer  r8  r9  )r   r[   r   r  r  r  s         r7   r   &ReturnStatNode.generate_execution_codeF  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##..y9T=M=M=X=XYd=e))++$($4$4"&..":"::	 *  T"++(()<)<d>N>NO!!//&6&6&D&DE>>AACKE!!%. D 	d''(r6   c                     U R                   (       a  UR                  S5        UR                  [        R                  < SU< S35        g )Nz%#pragma omp critical(__pyx_returning)r  r  )in_parallelputln_openmprV   r	   r  )r   r[   r   s      r7   r=	  ReturnStatNode.put_returnx  s1    EF

!4!4e<=r6   c                 V    U R                   b  U R                   R                  X5        g g r   )r   r  rR  s      r7   r  ,ReturnStatNode.generate_function_definitions}  s#    ::!JJ44S? "r6   c                 ^    U R                   (       a  U R                   R                  U5        g g r   )r   r   r   s     r7   r   ReturnStatNode.annotate  s     ::JJ% r6   )r  r   N)r.   r/   r0   r1   r   r   in_generatorr3	  rA	  r~   r  r   r   r=	  r  r   r5   r-   r6   r7   r  r    sH     )KMLL K0 ,K0)d>
@&r6   r  c                   `    \ rS rSr/ SQrSrSrSrSrS r	\
R                  rSrS rS	 rS
 rSrg)RaiseStatNodei  )exc_type	exc_valueexc_tbcauseTNFc                    U R                   (       a1  U R                   R                  U5      nUR                  U5      U l         U R                  (       a  U R                  R                  U5      nU R                  (       ap  UR
                  [        R                  L d  UR
                  R                  (       d8  SSK	J
n  U" UR                  UR                  U5      /SS9nUR                  USS9nUR                  U5      U l        U R                  (       a1  U R                  R                  U5      nUR                  U5      U l        U R                  (       a1  U R                  R                  U5      nUR                  U5      U l        U R                   (       Gaf  U R                  (       GdT  U R                  (       GdB  U R                   nSSKJ	n  [        XxR                   5      (       aE  UR"                  (       d4  UR$                  b  UR$                  R"                  (       d  UR&                  nUR(                  (       a  UR*                  R,                  (       a  SSKJn	  UR0                  U l        U R2                  S:X  a	  S U l         U $ U R2                  S	:X  ae  UR4                  (       aT  UR0                  S
:X  aD  UR6                  (       a3  UR6                  R8                  (       a  U R:                  (       d  S U l         U $ )Nr   r  T)rX   slow)skip_childrenr  )SymtabMemoryErrorStopIteration__next__)rK	  r}   r  rL	  wrap_tuple_valuer  r   
tuple_typer~  r  r  r<   rM	  rN	  r   rO   r  rX   r  r  r   r-  
is_builtinrR	  rr   builtin_exc_nameis_local_scoper  r  in_try_block)
r   r   rK	  rL	  r  rM	  rN	  excr  rR	  s
             r7   r~   !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9cmm&?CMMDVDVll{{syy33$(+%((M9$(DM  ++>**sxx:/E((S-=-=-N-N -- %)DMr6   Raising exceptionc                    UR                  U R                  5        U R                  S:X  a.  UR                  SUR	                  U R                  5      -  5        g U R                  S:X  ah  U R
                  (       dW  UR                  S[        R                  -  5        UR                  SUR	                  S 5      -  5        SUR                  l	        g U R
                  (       a  U R
                  R                  U5        U R
                  R                  5       nU R
                  R                  (       a/  UR                  R                  U R
                  R                  5        OSnU R                   (       a6  U R                   R                  U5        U R                   R                  5       nOSnU R"                  (       a6  U R"                  R                  U5        U R"                  R                  5       nOSnU R$                  (       a6  U R$                  R                  U5        U R$                  R                  5       nOSnUR                  R'                  [(        5        UR                  SU< S	U< S	U< S	U< S
3	5        U R
                  U R                   U R"                  U R$                  4 H.  nU(       d  M  UR+                  U5        UR-                  U5        M0     UR                  UR	                  U R                  5      5        g )NrS	  zPyErr_NoMemory(); %srT	  z%s = 1;r  Tr3  z__Pyx_Raise(r   r  )rF  r<   rY	  rV   r  rK	  r	   rE  r  rD  r{  r  r   r  use_entry_utility_coder-  rL	  rM	  rN	  r  raise_utility_coder[  r  )r   r[   	type_code
value_codetb_code
cause_coder  s          r7   r   %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;;

KCs**40t$ L 	

OODHH%	'r6   c                 F   U R                   b  U R                   R                  X5        U R                  b  U R                  R                  X5        U R                  b  U R                  R                  X5        U R                  b  U R                  R                  X5        g g r   )rK	  r  rL	  rM	  rN	  rR  s      r7   r  +RaiseStatNode.generate_function_definitions  sw    ==$MM77B>>%NN88C;;"KK55c@::!JJ44S? "r6   c                 f   U R                   (       a  U R                   R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        g g r   )rK	  r   rL	  rM	  rN	  r   s     r7   r   RaiseStatNode.annotate  sk    ==MM""4(>>NN##D);;KK  &::JJ% r6   )rY	  rN	  rM	  rK	  rL	  )r.   r/   r0   r1   r   r   rY	  rV	  r[	  r~   r   r   r  r   r   r  r   r5   r-   r6   r7   rJ	  rJ	    sF     ?KML(T ..K%K.'`@&r6   rJ	  c                   D    \ rS rSr/ rSrS r\R                  r	Sr
S rSrg)ReraiseStatNodei	  Tc                     U $ r   r-   r   s     r7   r~   #ReraiseStatNode.analyse_expressions  r?  r6   r^	  c           	      (   UR                  U R                  5        UR                  R                  nU(       a  UR                  R                  [        5        UR                  US   [        5        UR                  US   [        5        UR                  US   [        5        UR                  S[        U5      -  5        UR                  SR                  U Vs/ s H  o3 S3PM	     sn5      5        OAUR                  R                  [        R                  " SS5      5        UR                  S	5        UR                  5       (       a  UR!                  U R                  S
S9  UR                  UR#                  U R                  5      5        g s  snf )Nr   r   r%   &__Pyx_ErrRestoreWithState(%s, %s, %s);rJ   z = 0; ReRaiseExceptionExceptions.cz__Pyx_ReraiseException();Treraise)rF  r<   r  exc_varsr  r  r=  r  r   rS  rV   rc  r   r   r   r  put_trace_exceptionr  )r   r[   rT  varnames       r7   r   'ReraiseStatNode.generate_execution_code  s*   dhh~~&&--.LMT!Wn5T!Wn5d1g~6JJ?%+MNJJsxx4 H49F!34 HIJ--''(:NKMJJ23??$$TXXt$<

4??488,- !Is   Fr-   N)r.   r/   r0   r1   r   r   r~   r   r   r  r   r   r5   r-   r6   r7   rl	  rl	  	  s&    KM ..K%K.r6   rl	  c                   >    \ rS rSr/ SQrSrS rS rS rS r	S r
S	rg)
AssertStatNodei(  )	conditionr   	exceptionNc                     U R                   b   S5       eU R                  c   S5       eU R                  R                  U5        g )Nz0Message should have been replaced in PostParse())r   r|	  r   r   s     r7   r   #AssertStatNode.analyse_declarations2  s@    zz!U#UU!~~)]+]])++C0r6   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U $ r   )r{	  analyse_temp_boolean_expressionr|	  r~   r   s     r7   r~   "AssertStatNode.analyse_expressions7  s3    GGL;;C@r6   c                    UR                   R                  [        R                  " SS5      5        UR	                  S5        UR	                  S5        UR                  U R                  5        U R                  R                  U5        UR	                  SU R                  R                  5       -  5        U R                  R                  U5        UR	                  S5        U R                  R                  U5        U R                  R                  U5        UR	                  S5        UR	                  S5        UR	                  SUR                  U R                  S	S
9-  5        UR	                  S5        g )NAssertionsEnabledrr	  z!#ifndef CYTHON_WITHOUT_ASSERTIONSz+if (unlikely(__pyx_assertions_enabled())) {r  r  r  zif ((1)); else %sF)rD  r  )r  r  r   r   rV   rF  r<   r{	  r{  r   r|	  r   r[  r  r  r   s     r7   r   &AssertStatNode.generate_execution_code<  s   ))##$7H	J

67

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

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

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

	

7

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

8r6   c                 p    U R                   R                  X5        U R                  R                  X5        g r   )r{	  r  r|	  rR  s      r7   r  ,AssertStatNode.generate_function_definitionsQ  s&    44S?44S?r6   c                 p    U R                   R                  U5        U R                  R                  U5        g r   )r{	  r   r|	  r   s     r7   r   AssertStatNode.annotateU  s&    %%r6   )r{	  r|	  )r.   r/   r0   r1   r   r|	  r   r~   r   r  r   r5   r-   r6   r7   rz	  rz	  (  s(     6KI1

*@&r6   rz	  c                   :    \ rS rSrSS/rS rS rS rS rS r	S	r
g
)
IfStatNodeiZ  
if_clauseselse_clausec                     U R                    H  nUR                  U5        M     U R                  (       a  U R                  R                  U5        g g r   )r	  r   r	  r   r   	if_clauses      r7   r   IfStatNode.analyse_declarationsb  s@    I**3/ )11#6 r6   c                     U R                    Vs/ s H  o"R                  U5      PM     snU l         U R                  (       a   U R                  R                  U5      U l        U $ s  snf r   )r	  r~   r	  r	  s      r7   r~   IfStatNode.analyse_expressionsh  sR    OS_)88=_#//CCCHD `s   A$c                    UR                  U R                  5        UR                  5       n[        U R                  5      nU R
                  (       d  US-  n[        U R                  5       H  u  pEUR                  XXC:H  S9  M     U R
                  (       ab  UR                  U R
                  R                  5        UR                  S5        U R
                  R                  U5        UR                  S5        UR                  U5        g )Nr   )is_last
/*else*/ {r  )
rF  r<   r  rN   r	  r	  r  r   rV   r:  )r   r[   r,  lastr)  r	  s         r7   r   "IfStatNode.generate_execution_coden  s    dhhNN$	4??#AID%doo6LA--dqy-Q 7MM$**../JJ|$44T:JJsOy!r6   c                     U R                    H  nUR                  X5        M     U R                  b  U R                  R                  X5        g g r   )r	  r  r	  )r   r   r[   clauses       r7   r  (IfStatNode.generate_function_definitions}  sC    ooF00; &'::3E (r6   c                     U R                    H  nUR                  U5        M     U R                  (       a  U R                  R                  U5        g g r   )r	  r   r	  )r   r[   r	  s      r7   r   IfStatNode.annotate  s@    It$ )%%d+ r6   )r	  r	  Nr  r-   r6   r7   r	  r	  Z  s(      /K7"F,r6   r	  c                   >    \ rS rSrSS/rSrS rS rS rS r	S	 r
S
rg)IfClauseNodei  r{	  r   Nc                 :    U R                   R                  U5        g r   )r   r   r   s     r7   r   !IfClauseNode.analyse_declarations  s    		&&s+r6   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U $ r   )r{	  r	  r   r~   r   s     r7   r~    IfClauseNode.analyse_expressions  s3    GGLII11#6	r6   c                 t   U R                   R                  U5        UR                  U R                  5        U R                   R	                  5       nU R
                  (       a  U R
                  < SU< S3nUR                  SU-  5        U R                   R                  U5        U R                   R                  U5        U R                  R                  U5        UR                  U R                  SS9  U(       d,  U R                  R                  (       d  UR                  U5        UR                  S5        g )Nr  r  r  Fr  r  )r{	  r{  rF  r<   r   branch_hintrV   r[  r  r   r   r   r8  )r   r[   r,  r	  r{	  s        r7   r   $IfClauseNode.generate_execution_code  s    //5dhhNN))+	$($4$4i@I

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

3r6   c                 p    U R                   R                  X5        U R                  R                  X5        g r   )r{	  r  r   rR  s      r7   r  *IfClauseNode.generate_function_definitions  s&    44S?		//:r6   c                 p    U R                   R                  U5        U R                  R                  U5        g r   )r{	  r   r   r   s     r7   r   IfClauseNode.annotate  s&    %		4 r6   )r   r{	  )r.   r/   r0   r1   r   r	  r   r~   r   r  r   r5   r-   r6   r7   r	  r	    s,     'KK,
;!r6   r	  c                   4    \ rS rSrSS/rS rS rS rS rSr	g	)
SwitchCaseNodei  
conditionsr   c                 L    U R                    H  nUR                  U5        M     g r   )r	  r{  r   r[   rr  s      r7   "generate_condition_evaluation_code1SwitchCaseNode.generate_condition_evaluation_code  s    OOD))$/ $r6   c                    [        U R                  5      nUR                  R                  S   n[	        U R                  S5       Hc  u  pEUR                  SUR                  5       -  5        UR                  UR                  5        U(       d  MK  XB:  d  MR  UR                  S5        Me     U R                  R                  U5        UR                  U R                  SS9  UR                  S5        g )Nr  r   zcase %s:rX  Fr  r]  )rN   r	  r  r
  r  rV   r   rF  r<   r   r   )r   r[   num_conditionsline_tracing_enabledr)  rr  s         r7   r   &SwitchCaseNode.generate_execution_code  s    T__-#//::;G !4GAJJzDKKM12MM$((###(:

01 5 			))$/dhhe,

8r6   c                     U R                    H  nUR                  X5        M     U R                  R                  X5        g r   )r	  r  r   )r   r   r[   rr  s       r7   r  ,SwitchCaseNode.generate_function_definitions  s0    OOD..s9 $		//:r6   c                     U R                    H  nUR                  U5        M     U R                  R                  U5        g r   )r	  r   r   r	  s      r7   r   SwitchCaseNode.annotate  s.    OODMM$ $		4 r6   r-   N)
r.   r/   r0   r1   r   r	  r   r  r   r5   r-   r6   r7   r	  r	    s"      (K0;
!r6   r	  c                   .    \ rS rSr/ SQrS rS rS rSrg)SwitchStatNodei  )testcasesr	  c                    U R                   R                  U5        U R                   H  nUR                  U5        M     UR	                  U R
                  5        UR                  SU R                   R                  5       -  5        U R                   H  nUR                  U5        M     U R                  b>  UR                  S5        U R                  R                  U5        UR                  S5        OUR                  S5        UR                  S5        U R                   R                  U5        U R                   R                  U5        g )Nr  rW  r]  zdefault: break;r  )r	  r{  r	  r	  rF  r<   rV   r   r   r	  r[  r  r   r[   cases      r7   r   &SwitchStatNode.generate_execution_code  s    		**40 JJD33D9 dhh

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

3		((.		T"r6   c                     U R                   R                  X5        U R                   H  nUR                  X5        M     U R                  b  U R                  R                  X5        g g r   )r	  r  r	  r	  )r   r   r[   r	  s       r7   r  ,SwitchStatNode.generate_function_definitions  sU    		//:JJD..s9 '::3E (r6   c                     U R                   R                  U5        U R                   H  nUR                  U5        M     U R                  b  U R                  R                  U5        g g r   )r	  r   r	  r	  r	  s      r7   r   SwitchStatNode.annotate  sS    		4 JJDMM$ '%%d+ (r6   r-   N)	r.   r/   r0   r1   r   r   r  r   r5   r-   r6   r7   r	  r	    s     3K#.F,r6   r	  c                       \ rS rSrSrg)LoopNodei  r-   Nr  r-   r6   r7   r	  r	    r   r6   r	  c                   :    \ rS rSr/ SQrS rS rS rS rS r	Sr
g	)
WhileStatNodei
  )r{	  r   r	  c                     U R                   R                  U5        U R                  (       a  U R                  R                  U5        g g r   )r   r   r	  r   s     r7   r   "WhileStatNode.analyse_declarations  s6    		&&s+11#6 r6   c                 
   U R                   (       a   U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  (       a   U R                  R                  U5      U l        U $ r   )r{	  r	  r   r~   r	  r   s     r7   r~   !WhileStatNode.analyse_expressions  s\    >>!^^KKCPDNII11#6	#//CCCHDr6   c                 h   UR                  U R                  5        UR                  5       nUR                  S5        U R                  (       a}  U R                  R                  U5        U R                  R                  U5        UR                  SU R                  R                  5       -  5        U R                  R                  U5        U R                  R                  U5        UR                  UR                  5        UR                  S5        UR                  nUR                  U5        U R                  (       ab  UR                  U R                  R                  5        UR                  S5        U R                  R                  U5        UR                  S5        UR                  U5        g )Nzwhile (1) {zif (!%s) break;r  r	  )rF  r<   new_loop_labelsrV   r{	  r{  r[  r   r  r   r   r:  r/	  r'	  set_loop_labelsr	  )r   r[   old_loop_labelsr'	  s       r7   r   %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{#r6   c                     U R                   (       a  U R                   R                  X5        U R                  R                  X5        U R                  b  U R                  R                  X5        g g r   )r{	  r  r   r	  rR  s      r7   r  +WhileStatNode.generate_function_definitions7  sR    >>NN88C		//:'::3E (r6   c                     U R                   (       a  U R                   R                  U5        U R                  R                  U5        U R                  (       a  U R                  R                  U5        g g r   )r{	  r   r   r	  r   s     r7   r   WhileStatNode.annotate>  sO    >>NN##D)		4 %%d+ r6   )r   r{	  r	  Nr  r-   r6   r7   r	  r	  
  s#     7K7
$.F,r6   r	  c                   L    \ rS rSr/ SQrS=rrS=rrS=r	r
S rS rS rS rSrg)	DictIterationNextNodeiF  )
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                 l    [         R                  XR                  UUUUUUUS[        R                  S9  g )NT)	r	  r	  r	  r	  r	  r	  r	  is_tempr  r   r   r<   r
   c_bint_type)r   r	  r	  r	  r	  r	  r	  r	  s           r7   r   DictIterationNextNode.__init__R  s;    ,,''!%%%'' 	 
	)r6   c                    SSK Jn  U R                  R                  U5      U l        U R                  R                  U5      U l        U R
                  (       a   U R
                  R                  U5      U l        U R                  (       a  U R                  R                  U5      U l        UR                  U R                  R                  [        R                  5      U l        U R                  R                  U R                  R                  U5      U l        U R                   (       a  U R                   R                  U5      U l        UR                  U R                   R                  [        R                  S9U l        U R"                  R                  U R                   R                  U5      U l        U R&                  (       a  U R&                  R                  U5      U l        UR                  U R&                  R                  [        R                  5      U l        U R(                  R                  U R&                  R                  U5      U l        U R,                  R                  U5      U l        U $ Nr   r  r  )r   r  r	  r}   r	  r	  r	  r   TempNoder<   r
   r   key_refr  r  r	  r	  	value_refr	  r	  	tuple_refr	  r	  r   r   r  s      r7   r~   )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@r6   c                 :    U R                   R                  X5        g r   )r	  r  rR  s      r7   r  3DictIterationNextNode.generate_function_definitionsu  s    33C>r6   c                 4   UR                   R                  [        R                  " SS5      5        U R                  R                  U5        / n/ nU R                  U R                  U R                  4U R                  U R                  U R                  4U R                  U R                  U R                  44 HT  u  pEnUc  SnO7UR                  XEU45        UR!                  U5        SUR#                  5       -  nUR                  U5        MV     UR$                  R'                  [(        R*                  S5      nUR-                  U< SU R                  R/                  5       < SU R0                  R#                  5       < SU R2                  R#                  5       < SUS	   < SUS
   < SUS   < SU R4                  R#                  5       < S35        UR-                  SU-  5        UR-                  UR7                  SU-  U R8                  5      5        UR$                  R;                  U5        U H  u  pEnUR=                  U5        M     U H  u  pEnUR                  U5        M     U H(  u  pEnUR?                  XQ5        URA                  U5        M*     g )N	dict_iter
Optimize.cr  &%sFz = __Pyx_dict_iter_next(r   r  r   r   r%   r  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>  rV   r  r	  r	  r	  r  r<   r  generate_gotrefr  release)	r   r[   r  temp_addressesr'  r   r  addrresult_temps	            r7   r   -DictIterationNextNode.generate_execution_codex  s$   ))+*A*A+|*\]..t4%)\\43G3G$Y%)^^T5K5KTM^M^$_%)^^T5K5KTM^M^$_$aC ~""C#89T"szz|+!!$'$a nn22:3H3H%P

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

2[@A

4%%j;&>IJ##K0 $/C% $/#.C++D1 $/#.C++F9KK $/r6   )r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  r	  )r.   r/   r0   r1   r   r	  r	  r	  r	  r	  r	  r   r~   r  r   r5   r-   r6   r7   r	  r	  F  s@    QK !%$Og$((	$((	)*?'r6   r	  c                   <    \ rS rSr/ SQrS=rrS rS rS r	S r
Srg)	SetIterationNextNodei  )set_objr	  r	  r	  r	  is_set_flagNc                 h    [         R                  XR                  UUUUUS[        R                  S9	  g )NT)r 
  r	  r	  r	  r
  r	  r  r	  )r   r 
  r	  r	  r	  r
  s         r7   r   SetIterationNextNode.__init__  s5    ++''%#'' 	 	)r6   c                 *   SSK Jn  U R                  R                  U5      U l        U R                  R                  U5      U l        U R
                  R                  U5      U l        U R                  R                  U5      U l        UR                  U R                  R                  [        R                  S9U l        U R                  R                  U R                  R                  U5      U l        U R                   R                  U5      U l        U $ r	  )r   r  r 
  r}   r	  r	  r	  r   r	  r<   r
   r   r	  r  r  r	  r
  r	  s      r7   r~   (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#>r6   c                 :    U R                   R                  X5        g r   )r 
  r  rR  s      r7   r  2SetIterationNextNode.generate_function_definitions  s    223=r6   c                    UR                   R                  [        R                  " SS5      5        U R                  R                  U5        U R                  nUR                  U5        UR                  R                  [        R                  S5      nUR                  U< SU R                  R                  5       < SU R                  R                  5       < SU R                   R                  5       < SUR                  5       < SU R"                  R                  5       < S35        UR                  SU-  5        UR                  UR%                  S	U-  U R&                  5      5        UR                  R)                  U5        UR+                  U5        U R,                  R                  U5        U R.                  R1                  U R,                  U5        UR3                  U5        g )
Nset_iterr	  Fz = __Pyx_set_iter_next(r   r  r  r	  r	  )r  r  r   r   r 
  r{  r	  r	  r  r  r
   r>  rV   r  r	  r   r	  r
  r  r<   r  r	  r	  r	  r  r	  )r   r[   r	  r	  s       r7   r   ,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$r6   )r	  r	  r
  r	  r 
  r	  r	  )r.   r/   r0   r1   r   r	  r	  r   r~   r  r   r5   r-   r6   r7   r	  r	    s+    GK %)(		)	> r6   r	  c                 ~    SU;   a,  US   R                   (       a  [        U 40 UD6$ [        U 40 UD6$ [        U 40 UD6$ )Niterator)is_asyncAsyncForStatNodeForInStatNodeForFromStatNode)r<   r   s     r7   ForStatNoder
    sG    Rj>""#C.2.. +++s)b))r6   c                   H    \ rS rSr/ SQrSrSrS rS rS r	S r
S	 rS
 rSrg)_ForInStatNodei  )r  r   r
  r   r	  NFc                     [        S5      e)Nz!must be implemented by subclasses)NotImplementedErrorr   s    r7   _create_item_node _ForInStatNode._create_item_node  s    !"EFFr6   c                     U R                   R                  U5        U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  5         g r   )r  rJ  r   r   r	  r
  r   s     r7   r   #_ForInStatNode.analyse_declarations  sO    ..s3		&&s+11#6 r6   c                 &   U R                   R                  U5      U l         U R                  R                  U5      U l        U R	                  5         U R
                  R                  U5      U l        U R                  (       d  U R                  R                  R                  (       d%  U R                  R                  R                  (       a?  U R                   R                  R                  U R                  R                  5      (       a  O5U R
                  R                  U R                   R                  U5      U l        U R                  R                  U5      U l        U R                  (       a   U R                  R                  U5      U l        U $ r   )r  r   r
  r~   r
  r   r
  r  r  r  r  r  r   r	  r   s     r7   r~   "_ForInStatNode.analyse_expressions   s   kk66s;99#> II11#6	##**dmm.@.@.I.I  001C1CDD		++DKK,<,<cBDIII11#6	#//CCCHDr6   c                 >   UR                  U R                  5        UR                  5       nU R                  R	                  U5        UR                  S5        U R                  R                  U5        UR                  S5        U R                  R	                  U5        U R                  R                  U R                  U5        UR                  U R                  5        U R                  R                  U5        UR                  U R                  5        UR                  UR                  5        UR                  S5        U R                  R!                  U5        U R"                  (       a  UR%                  S5      OS nUR%                  S5      nUR'                  UR(                  /U/U=(       d    UU R                  S9nUR                  U R                  5        U H  nU R                  R!                  U5        M      UR+                  U5        U R                  R-                  U5        U R"                  (       aN  UR                  S5        UR                  U5        U R"                  R                  U5        UR                  S5        UR                  U5        g )Nr?  r   r  for_elsefor_end)skip_to_labelr<   r	  )rF  r<   r	  r
  r{  r	  generate_for_loop_headerrV   r   r  r  write_trace_liner   r   r:  r/	  r[  r	  r  label_interceptorr'	  r	  r  )r   r[   r	  
else_labelr,  label_interceptsr  s          r7   r   &_ForInStatNode.generate_execution_code  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!AMM006 " 	_-  &JJ|$NN:&44T:JJsOy!r6   c                     U R                   R                  X5        U R                  R                  X5        U R                  R                  X5        U R                  b  U R                  R                  X5        g g r   )r  r  r
  r   r	  rR  s      r7   r  ,_ForInStatNode.generate_function_definitions;  s]    11#<33C>		//:'::3E (r6   c                 4   U R                   R                  U5        U R                  R                  U5        U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R
                  R                  U5        g r   )r  r   r
  r   r	  r   r   s     r7   r   _ForInStatNode.annotateB  sg    T"t$		4 %%d+		4 r6   )r   r	  r   r
  r  )r.   r/   r0   r1   r   r   r
  r
  r   r~   r   r  r   r5   r-   r6   r7   r
  r
    s5     HKDHG!"("TF!r6   r
  c                       \ rS rSrSrS rSrg)r
  iK  Fc                 >    SSK Jn  U" U R                  5      U l        g )Nr   )NextNode)r  r,
  r
  r   )r   r,
  s     r7   r
  ForInStatNode._create_item_nodeP  s    'T]]+	r6   )r   N)r.   r/   r0   r1   r
  r
  r5   r-   r6   r7   r
  r
  K  s     H,r6   r
  c                   $    \ rS rSrSrS rS rSrg)r
  iU  Tc                     SU;  d   eSSK Jn  UR                  US   R                  S S9US'   [        R
                  " X40 UD6  g )Nr   r   r  r
  r3  )r   r  AwaitIterNextExprNoder<   r
  r   )r   r<   r   r  s       r7   r   AsyncForStatNode.__init__]  sI    R44R
^5G5GT4R6
0R0r6   c                 d    SSK Jn  UR                  U R                  5      U R                  l        g r  )r   r  AsyncNextNoder
  r   r3  rC  s     r7   r
  "AsyncForStatNode._create_item_noded  s    !//>		r6   r-   N)r.   r/   r0   r1   r
  r   r
  r5   r-   r6   r7   r
  r
  U  s     H1?r6   r
  c                   h    \ rS rSr/ SQrSrSrSrSrSr	S r
S rS rS	 rS
 rSSSSS.rS rS rSrg)r
  ii  )r  bound1bound2stepr   r	  FNz&For-loop using object bounds or targetc                     U R                   U R                  U R                  4 H0  nUR                  R                  (       d  M   U R                  5         M2     g r   )r  r7
  r8
  r  r  r   )r   r   r   s      r7   r  ForFromStatNode.nogil_check  s9    ++t{{DKK8Avv!!!  9r6   c                     U R                   R                  U5        U R                  R                  U5        U R                  (       a  U R                  R                  U5        g g r   )r  rJ  r   r   r	  r   s     r7   r   $ForFromStatNode.analyse_declarations  sH    ..s3		&&s+11#6 r6   c                 ,   SSK Jn  U R                  R                  U5      U l        U R                  R                  U5      U l        U R                  R                  U5      U l        U R                  bf  [        U R                  UR                  5      (       a!  [        U R                  R                  SS5        U R                  R                  U5      U l        U R                  U5        U R                  R                  nUR                  (       d1  UR                  (       d   [!        U R                  R                  S5        U R"                  R%                  U5      U l        U R&                  (       a   U R&                  R%                  U5      U l        U $ )Nr   r  zdProbable infinite loop in for-from-by statement. Consider switching the directions of the relations.r%   z>for-from loop variable must be c numeric type or Python object)r   r  r  r   r7
  r}   r8
  r9
  rO   UnaryMinusNoder   r<   set_up_loopr  r  r  r   r   r~   r	  )r   r   r  r  s       r7   r~   #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r6   c                 z   SSK Jn  U R                  R                  nUR                  (       a  UnGO\UR
                  (       a   [        U R                  R                  S5        UR                  (       a  [        R                  O[        R                  nU R                  R                  R                  (       d*  [        R                  " X@R                  R                  5      nU R                  R                  R                  (       d*  [        R                  " X@R                  R                  5      nU R                  bO  U R                  R                  R                  (       d*  [        R                  " X@R                  R                  5      nU R                  R!                  XA5      U l        U R                  R!                  XA5      U l        U R                  R"                  (       d   U R                  R%                  U5      U l        U R                  b[  U R                  R!                  XA5      U l        U R                  R"                  (       d   U R                  R%                  U5      U l        UR                  (       d  UR
                  (       a[  SU l        [)        U R                  UR*                  5      (       a  [-        U R                  S5      eU R                  U l        S U l        g SU l        UR3                  U R                  XA5      nXPl        UR5                  U5      R7                  U5      U l        g )Nr   r  zWInteger loops over enum values are fragile. Please cast to a safe integer type instead.FzEBuffer or memoryview slicing/indexing not allowed as for-loop target.T)r   r  r  r  r  is_enumr   r<   r  r
   c_long_typer>  r7
  widest_numeric_typer8
  r9
  r  r   rg  is_py_targetrO   BufferIndexNoder   loopvar_nodepy_loopvar_noder	  rP  r  )r   r   r  r  	loop_typec_loopvar_nodes         r7   r@
  ForFromStatNode.set_up_loop  s   kk&&!!#I""qs2=2I2I
..zOdOdI;;##//&::9kkFVFVW	;;##//&::9kkFVFVW	yy$TYY^^-G-G&::9iinnU	kk++I;kk++I;{{%%++44S9DK99 		++I;DI99'' II44S9	!![%8%8 %D$++y'@'@AADHH&mnn $D#'D  $D&//)IN .#,#6#6~#F#Y#YZ]#^D r6   c                 f   UR                  U R                  5        UR                  5       nU R                  nU R                  R                  U5        U R                  R                  U5        U R                  U R                     u  pEU R                  bB  U R                  R                  U5        U R                  R                  5       nUS   < SU< 3nOSnSSKJn  [        U R                  UR                  5      (       a  U R                  R!                  U5        [        U R"                  UR                  5      (       a  U R"                  R!                  U5        U R$                  R&                  R(                  (       a  [*        R,                  OU R$                  R&                  nU(       a.  U R.                  (       d  UR0                  R3                  US5      n	OU R                  R                  5       n	UR4                  (       a  UR6                  (       d  U R8                  S   S:X  as  UR;                  SU	< S	U R                  R                  5       < U< S
U< SU	< SU R8                  < SU R                  R                  5       < S
U< SU	< U< S35        OjUR;                  SU	< S	U R                  R                  5       < U< SU	< SU R8                  < SU R                  R                  5       < SU	< U< S35        U R"                  n
U
c-  U(       a&  UR=                  U R$                  R                  X5      n
U
b,  U
R                  U5        U R$                  R?                  X5        URA                  U R                  5        U RB                  RE                  U5        URG                  URH                  5        U(       Gd  U R"                  (       Ga  U R$                  RJ                  RL                  (       Ga  URO                  U R$                  R                  S 5      nUR!                  U5        URQ                  U R$                  RJ                  RR                  5      nU R$                  RJ                  RT                  RV                  (       a3  URX                  R[                  [\        R^                  " SS5      5        SnOiURX                  R[                  [\        R^                  " SS5      5        SRa                  U R$                  RJ                  RT                  Rb                  5      nUR;                  UUR                  5       UURe                  UR                  5       U R$                  R                  5      4-  5        URg                  U5        OU R$                  nURi                  U R                  R&                  XR$                  RJ                  RT                  5      nXl5        URm                  U5        U R$                  RJ                  RL                  (       a;  URo                  UR                  5       UR&                  5        URq                  U5        UR;                  S5        U(       dR  U R"                  (       aA  U R"                  R                  U5        U R$                  R?                  U R"                  U5        U(       a,  U R.                  (       d  UR0                  Rs                  U	5        URt                  nURw                  U5        U Rx                  (       a=  UR;                  S5        U Rx                  RE                  U5        UR;                  S5        URG                  U5        U R                  R{                  U5        U R                  R}                  U5        U R                  R{                  U5        U R                  R}                  U5        [        U R                  UR                  5      (       a  U R                  Rq                  U5        [        U R"                  UR                  5      (       a  U R"                  Rq                  U5        U R                  b7  U R                  R{                  U5        U R                  R}                  U5        g g )Nr   r\  1r   r  F>r?  r  z + rA  rJ   z; ) { r  r   GetModuleGlobalNamer  z%__Pyx_GetModuleGlobalName(%s, %s); %sGetNameInClassz$__Pyx_GetNameInClass(%s, {}, %s); %sr  r	  )?rF  r<   r	  
from_ranger7
  r{  r8
  relation_table	relation1r9
  r   r   r  rO   rH
  r	  r	  rI
  r  r  rC
  r
   rD
  rF
  r  r  r  r  	relation2rV   r  r  r!
  r   r   r:  r/	  r-  is_pyglobal
PyTempNoderd  rr   r:  r&  r  r  r   r   r  r\  r  r	  CoerceFromPyTypeNode	temp_coder  rR  r	  r  r'	  r	  r	  r[  r  )r   r[   r	  rR
  offsetincopr9
  r  loopvar_typeloopvar_namecoerced_loopvar_nodetarget_nodeinterned_cnamelookup_funcfrom_py_noder'	  s                   r7   r   '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|#j + 99$?KK001ELdhh'		))$/t**+d2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!!&&[[5F5F5L5LNL%1"--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  & !r6   )r   ++)z+1rd
  )r   --)z-1re
  )z<=rR  z>=rO
  c                 ~   U R                   R                  X5        U R                  R                  X5        U R                  R                  X5        U R                  b  U R                  R                  X5        U R
                  R                  X5        U R                  b  U R                  R                  X5        g g r   )r  r  r7
  r8
  r9
  r   r	  rR  s      r7   r  -ForFromStatNode.generate_function_definitionsD  s    11#<11#<11#<99 II33C>		//:'::3E (r6   c                    U R                   R                  U5        U R                  R                  U5        U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R
                  R                  U5        U R                  (       a  U R                  R                  U5        g g r   )r  r   r7
  r8
  r9
  r   r	  r   s     r7   r   ForFromStatNode.annotateN  s    T"T"T"99IIt$		4 %%d+ r6   )	r   r7
  r8
  r	  rF
  rH
  rI
  r9
  r  )r.   r/   r0   r1   r   rF
  rH
  rI
  rR
  r   r  r   r~   r@
  r   rS
  r  r   r5   r-   r6   r7   r
  r
  i  s`    $ PKLLOJ:K!
7*$_Lp'h NF,r6   r
  c                   @    \ rS rSrSr/ SQrSrSrS rS r	S r
S rS	rg)
WithStatNodeiY  a  
Represents a Python with statement.

Implemented by the WithTransform as follows:

    MGR = EXPR
    EXIT = MGR.__exit__
    VALUE = MGR.__enter__()
    EXC = True
    try:
        try:
            TARGET = VALUE  # optional
            BODY
        except:
            EXC = False
            if not EXIT(*EXCINFO):
                raise
    finally:
        if EXC:
            EXIT(None, None, None)
        MGR = EXIT = VALUE = None
)manager
enter_callr  r   Nc                     U R                   R                  U5        U R                  R                  U5        U R                  R                  U5        g r   )rl
  r   rm
  r   r   s     r7   r   !WithStatNode.analyse_declarations{  s8    ))#.,,S1		&&s+r6   c                    U R                   R                  U5      U l         U R                   R                  R                  (       a$  [        R                  U 5      R                  U5      $ U R                  R                  U5      U l        U R                  (       a<  SSK	J
n  U" U R                  R                  U R                  R                  5      U l        U R                  R                  U5      U l        U $ )Nr   )r	  )rl
  r}   r  is_cython_lock_typeCythonLockStatNodefrom_withstatr~   rm
  r  r  r	  r<   target_tempr   )r   r   r	  s      r7   r~    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	r6   c                     U R                   R                  X5        U R                  R                  X5        U R                  R                  X5        g r   )rl
  r  rm
  r   rR  s      r7   r  *WithStatNode.generate_function_definitions  s8    223=55c@		//:r6   c                    UR                  U R                  5        UR                  S5        U R                  R	                  U5        UR
                  R                  [        SS9U l        UR                  R                  [        R                  " SS5      5        UR                  U R                  < SU R                  R                  5       < SUR                  [        U R                   (       a  SOS	5      5      < S
UR#                  U R                  U R                  5      < 35        UR%                  U R                  [        5        UR'                  5       nUR(                  nU R*                  R	                  U5        U R,                  (       a  U R.                  R1                  U5        U R*                  R3                  U5        UR                  U R.                  R5                  5       < SU R*                  R5                  5       < S35        U R*                  R7                  U5        OU R*                  R9                  U5        U R*                  R;                  U5        U R                  R9                  U5        U R                  R;                  U5        X!l        U R<                  R?                  U5        URA                  U5      (       at  URC                  5       nURE                  U5        URG                  U5        URI                  U R                  [        5        URE                  U5        URG                  U5        UR
                  RK                  U R                  5        UR                  S5        g )Nz/*with:*/ {Fr}  PyObjectLookupSpecialr  z  = __Pyx_PyObject_LookupSpecial(r   	__aexit____exit__r  r  r  r  )&rF  r<   rV   rl
  r{  r  r  r   exit_varr  r  r   r   r  rd  r   r
  r  r  r!  r7  rm
  r  rt
  r	  r  r   r  r[  r  r   r   r6  r  r8  r:  r  r  )r   r[   r*  intermediate_error_labelstep_over_labels        r7   r   $WithStatNode.generate_execution_code  sa   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4"nn.OMM/*NN34!!$--@MM/*NN?+##DMM2

3r6   )r   rm
  r|
  rl
  rt
  )r.   r/   r0   r1   r   r   rm
  rt
  r   r~   r  r   r5   r-   r6   r7   rk
  rk
  Y  s,    8 >KJK,

;
.r6   rk
  c                   <    \ rS rSrSS/rSrSrS rS rS r	S r
S	rg)
WithTargetAssignmentStatNodei  r8  rm  Nc                 :    U R                   R                  U5        g r   r  r   s     r7   r   1WithTargetAssignmentStatNode.analyse_declarations  r  r6   c                     U R                   R                  U5      U l         U R                   R                  U5        U R                  R                  R                  U R                   R                  U5      U l        U $ r   )rm  r   r_  	with_nodert
  r  r  r8  r   s     r7   r~   0WithTargetAssignmentStatNode.analyse_expressions  sU    88005%%c*>>--77sKr6   c                     U R                   R                  U5        U R                  R                  U R                   U5        U R                  R
                  R                  U5        g r   )r8  r{  rm  r  r
  rt
  r	  r   s     r7   r   4WithTargetAssignmentStatNode.generate_execution_code  sD    ))$/))$((D9""**40r6   c                 p    U R                   R                  U5        U R                  R                  U5        g r   r  r   s     r7   r   %WithTargetAssignmentStatNode.annotate  r  r6   r  )r.   r/   r0   r1   r   r
  r8  r   r~   r   r   r5   r-   r6   r7   r
  r
    s+     %.KI
C11
 r6   r
  c                   Z    \ rS rSr/ SQrSrS rS r\R                  r
SrS rS rS	 rS
rg)TryExceptStatNodei  )r   except_clausesr	  Fc                     U R                   R                  U5        U R                   H  nUR                  U5        M     U R                  (       a  U R                  R                  U5        g g r   )r   r   r
  r	  )r   r   except_clauses      r7   r   &TryExceptStatNode.analyse_declarations  sT    		&&s+!00M..s3 111#6 r6   c                    U R                   R                  U5      U l         Sn[        U R                  5       HV  u  p4UR                  U5      =o@R                  U'   U(       a  [	        UR
                  S5        UR                  (       a  MT  SnMX     X l        U R                  (       a   U R                  R                  U5      U l        U $ )Nr   zdefault 'except:' must be lastr   )	r   r~   r  r
  r   r<   patternhas_default_clauser	  )r   r   default_clause_seenr)  r
  s        r7   r~   %TryExceptStatNode.analyse_expressions  s    II11#6	 )$*=*= >A5B5V5VWZ5[[M//2"m'')IJ (((&'# !? #6#//CCCHDr6   zTry-except statementc           
        ^^ TR                  U R                  5        TR                  S5        TR                  nTR                  nTR
                  nTR                  5       nTR                  nTR                  S5      nTR                  S5      nTR                  S5      n	TR                  S5      n
U(       a  TR                  S5      OS nU(       a  TR                  S5      OS nTR                  S5      n[        S	5       Vs/ s H#  nTR                  R                  [        S
5      PM%     snmTR                  5       nTR                  S5        U
Tl        UTl        UTl        U R                  R                  T5        TR                  U R                  S
S9  TR                  S5        TR                  R!                  5       nTR#                  U5      nU(       a  TR$                  R'                  [(        5        U R*                  (       d"  UR                  S5        UR                  S5        UR                  SSR-                  T Vs/ s H  nSU-  PM
     sn5      -  5        T H  nUR/                  U[        5        M     UU4S jnO;T Vs/ s H  nSU-  PM
     nnUR                  SSR-                  U5      -  5        S nUTl        U	Tl        U R                  R0                  nU R2                  (       a  TR                  U R2                  R                  5        TR                  S5        U R2                  R                  T5        TR                  S5        U(       d  U R2                  R0                  nU(       Ga
  U(       d0  T H  nTR5                  U[        5        M     TR7                  U5        TR9                  U5        U H  u  nnTR5                  UU5        M     TR;                  5       (       a  TR=                  5         TR                  R>                  nU TR                  l        U R@                   H  nURC                  TU5        M     UTR                  l        U RD                  (       d  TR7                  U5        TRG                  XXU	/XSXBU/U(       d  TR#                  U5      (       d  UOS U R                  S
S9nU H  nU(       d  M  U" 5         M     TR#                  U5      (       aM  U(       d'  TR#                  U5      (       d  TR7                  U5        TR9                  U5        U(       a  U" 5         TR#                  U5      (       a  TR9                  U5        TR                  S5        T H  nTR                  RI                  U5        M      UTl        UTl        UTl        UTl        g s  snf s  snf s  snf )NrM  exception_handledexcept_errorexcept_return
try_return	try_breaktry_continuetry_endr   F
/*try:*/ {r  r  r  r  z__Pyx_ExceptionSave(%s);r   r	  c                     > T H  n TR                  U [        5        M     TR                  SSR                  T5      -  5        g )Nz__Pyx_ExceptionReset(%s);r   )rS  r   rV   r   )rr   r[   exc_save_varss    r7   restore_saved_exceptionJTryExceptStatNode.generate_execution_code.<locals>.restore_saved_exception0   s=    )D%%dN; *

699]34 5r6   z	(void)%s;z%s /* mark used */rJ   c                      g r   r-   r-   r6   r7   r
  r
  ;   s    r6   z/*else:*/ {)r
  r<   r  )%rF  r<   rV   r9  r'	  r/	  r!  r7  r  r(  r  r  r   rR   r   r   all_free_managed_tempsr6  r  r  reset_exception_utility_coderH	  r   put_xgotrefr   r	  r  r8  r:  r  rA  current_exceptr
  generate_handling_coder
  r"
  r  )r   r[   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'  r
  mark_vars_usednormal_case_terminates	temp_name	temp_typeouter_exceptr
  r$
  r  r
  s    `                          @r7   r   )TryExceptStatNode.generate_execution_code   s   dhh

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

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

	 NNAACOOO4	--.JK$$<=;<NN5		-@-353;-@AC D$$$S.9 %5 <II=CkC/=N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44T;KL "5,8DNN)**01112DXkl/AUef/Edoo^kNlNl-rv 2 
 "Ay') " ??+,,)$//-2P2Pm,NN+,')??=))NN=)

3"ENN''. # -*0*O,, A Js   *WWWc                     U R                   R                  X5        U R                   H  nUR                  X5        M     U R                  b  U R                  R                  X5        g g r   )r   r  r
  r	  )r   r   r[   r
  s       r7   r  /TryExceptStatNode.generate_function_definitions   sW    		//:!00M77B 1'::3E (r6   c                     U R                   R                  U5        U R                   H  nUR                  U5        M     U R                  (       a  U R                  R                  U5        g g r   )r   r   r
  r	  )r   r[   except_nodes      r7   r   TryExceptStatNode.annotate   sT    		4 ..K  & /%%d+ r6   )r   r	  r
  N)r.   r/   r0   r1   r   rH	  r   r~   r   r   r  r   r   r  r   r5   r-   r6   r7   r
  r
    s:     <KL7 ..K(Kx+tF,r6   r
  c                   L    \ rS rSr/ SQrSrSrSrS rS r	S r
S rS	 rS
 rSrg)ExceptClauseNodei   )r
  r  r   rL	  NFc                     U R                   (       a  U R                   R                  U5        U R                  R                  U5        g r   )r  rJ  r   r   r   s     r7   r   %ExceptClauseNode.analyse_declarations   s-    ;;KK2237		&&s+r6   c                    UR                   U l        U R                  (       aM  [        U R                  5       H4  u  p#UR	                  U5      nUR                  U5      U R                  U'   M6     U R                  (       aP  SSKJn  UR                  U R                  5      U l        U R                  R                  XR                  5      U l        U R                  R	                  U5      U l        U $ r  )rG  rG  r
  r  r~   r  r  r   r  ExcValueNoder<   rL	  rU  r   )r   r   r)  r
  r  s        r7   r~   $ExceptClauseNode.analyse_expressions   s     //<<'5
!55c:")"<"<S"AQ 6 ;;#&33DHH=DN++??^^TDKII11#6	r6   c                 :   U R                   n[        U[        5      (       aD  UR                   H3  n[        U[        5      (       a  M  [        U[
        5      (       a  Un  O  g   g[        U[
        5      (       a!  UR                  nUb  UR                  (       a  gg)NTF)r   rO   r5  r6  r$  r  r   r   )r   r   rZ   r   s       r7   body_may_need_exception(ExceptClauseNode.body_may_need_exception   s~    yydL))

dL11n55D # dN++JJE} 0 0 r6   c           	      @  ^ UR                  U R                  5        U R                  (       Gae  [        S U R                   5       5      (       + nU(       a  [	        S5       Vs/ s H!  nUR
                  R                  [        SS9PM#     nnUR                  R                  [        R                  " SS5      5        UR                  S[        U5      -  5        US   mOS =nmU R                   H  nUR                  U5        M     U R                   Vs/ s H  ofR                  5       PM     nn/ nT(       a  UR                  R                  [        R                  " S	S
5      5        [!        U5      S:X  a%  UR#                  ST< SUS   < SUS   < S35        OUR%                  U4S jU 5       5        O[!        U5      S:X  aQ  UR                  R                  [        R                  " S	S
5      5        UR#                  SUS   < SUS   < S35        OHUR                  R                  [        R                  " SS5      5        UR%                  S U 5       5        UR
                  R                  [&        R(                  SS9n	UR                  U	< SSR+                  U5      < S35        U R                   H%  nUR-                  U5        UR/                  U5        M'     U(       au  UR                  S[        U5      -  5        UR                  SR+                  U V
s/ s H  n
SU
-  PM
     sn
5      5        U H  nUR
                  R1                  U5        M      UR                  SU	-  5        UR
                  R1                  U	5        OUR                  S5        UR3                  5       nU R4                  S L=(       d%    U R6                  S L=(       d    U R9                  5       nU(       d  U(       a  UR;                  U R<                  5        U(       a  UR?                  U R                  5        U(       a  UR                  R                  [@        5        [	        S5       Vs/ s H!  nUR
                  R                  [        SS9PM#     nnS[        U5      -  nUR                  SU< SURC                  U R                  5      < 35        U H  n
URE                  U
[        5        M     OAUR                  R                  [        R                  " SS5      5        UR                  S 5        U(       a  UR                  S!5        U R4                  (       a_  U RF                  RI                  WS   5        U RF                  R                  U5        U R4                  RK                  U RF                  U5        U R6                  b;  [M        WU R6                  RN                  5       H  u  nnURI                  U5        M     URQ                  S"5      nU(       a'  UR
                  RR                  nWUR
                  l)        U RT                  RW                  U5        U(       a  WUR
                  l)        U RT                  RX                  (       d7  U(       a  W H  n
UR[                  U
[        5        M     UR]                  U5        U(       a  UR_                  URa                  5       U5       HN  nURc                  WS   [        5        URc                  US   [        5        UR[                  US   [        5        MP     W H  nUR
                  R1                  U5        M      URe                  U5        UR                  S#5        g s  snf s  snf s  sn
f s  snf )$Nc              3      #    U  HD  nUR                   =(       d,    UR                  5       =(       a    UR                  5       (       + v   MF     g 7fr   )r   	is_simpler-  r\  r
  s     r7   r]  :ExceptClauseNode.generate_handling_code.<locals>.<genexpr>   s?      '-+G ""Zg&7&7&9&Z'BXBXBZ>ZZ+s   AAr   Tr}  PyErrFetchRestorerr	  z__Pyx_ErrFetch(&%s, &%s, &%s);r   FastTypeChecksModuleSetupCode.cr%   z#__Pyx_PyErr_GivenExceptionMatches2(r   r   r  c              3   :   >#    U  H  nS T< SU< S3v   M     g7f)z"__Pyx_PyErr_GivenExceptionMatches(r   r  Nr-   )r\  r
  rK	  s     r7   r]  r
     s       %'/G HPQXY'/s   z__Pyx_PyErr_ExceptionMatches2(PyErrExceptionMatchesc              3   ,   #    U  H
  nS U-  v   M     g7f)z __Pyx_PyErr_ExceptionMatches(%s)Nr-   r
  s     r7   r]  r
     s      !#+ 7@#+s   Fr  z || r  __Pyx_ErrRestore(%s, %s, %s);rJ   %s = 0;r  z/*except:*/ {z&%s, &%s, &%szif (__Pyx_GetException(r  z__Pyx_ErrRestore(0,0,0);z__Pyx_TraceExceptionDone();except_r  )3rF  r<   r
  rb  r(  r  r  r   r  r  r   r   rV   rc  r{  r  rN   r  extendr
   r>  r   r[  r  r  r  r  excinfo_targetr
  rF  rG  put_trace_exception_handledget_exception_utility_coder  r
  rL	  set_varr  r  rX   r	  ru	  r   r   r   r  r8  r"
  get_loop_labelsr  r	  )r   r[   r,  has_non_literalsr  ru	  r
  patterns	exc_tests
match_flagr'  r  r`  needs_exceptionexc_argstempvarrZ   r	  old_exc_varsrK	  s                      @r7   r
  'ExceptClauseNode.generate_handling_code   s&   dhh<<<#& '-#||'- $-  -   &+1X/%- !NN88TX8Y%-  /  11+2I2IJ]_m2no

;eHoMN#A;&**8<<006 (;?<<H<))+<H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$DNN//5 % JJ  NN''
3JJ'//#KKt# +t++((* 	 g""4#5#56,,TXX6 --.HI!&q+!)A 44^PT4U!)  +&x8HJJ$//$((35 6  n5   --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% "I ..y9>>22L&.DNN#		))$/&2DNN#yy&&#C **3? $ MM)$++D,@,@,BOT%%hqk>B%%hqk>B&&x{NC	 U !++D1 ! 	_-

	E/ IJ %J:+s   $(^^&^-(^c                     U R                   b  U R                   R                  X5        U R                  R                  X5        g r   )r  r  r   rR  s      r7   r  .ExceptClauseNode.generate_function_definitionsa!  s0    ;;"KK55c@		//:r6   c                     U R                   (       a$  U R                    H  nUR                  U5        M     U R                  (       a  U R                  R                  U5        U R                  R                  U5        g r   )r
  r   r  r   )r   r[   r
  s      r7   r   ExceptClauseNode.annotatef!  sP    <<<<  & (;;KK  &		4 r6   )r   rL	  rG  r  )r.   r/   r0   r1   r   rL	  r
  is_except_asr   r~   r
  r
  r  r   r5   r-   r6   r7   r
  r
     s8    " =KINL,
 0M^;
!r6   r
  c                       \ rS rSr/ SQrSrSrSrSrSr	Sr
\S 5       rS rS	 r\R                   rS
rS rS r SS jrSS jrS rS rSrg)TryFinallyStatNodeio!  )r   finally_clausefinally_except_clauser   TNFc                     [        XUS9nU$ )Nr   r
  )r
  )r<   r   r   r
  rZ   s        r7   r8  "TryFinallyStatNode.create_analysed!  s    !#Pr6   c                     U R                   R                  U5        [        R                  " U R                  5      U l        U R
                  R                  U5        U R                  R                  U5        g r   )r   r   r   deepcopyr
  r
  r   s     r7   r   'TryFinallyStatNode.analyse_declarations!  sS    		&&s+%)]]43F3F%G"""77<005r6   c                 @   U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  R                  U5      U l        UR                  (       a,  UR                  R
                  (       d  UR                  U l        U $ r   )r   r~   r
  r
  r  r  func_return_typer   s     r7   r~   &TryFinallyStatNode.analyse_expressions!  so    II11#6	"11EEcJ%)%?%?%S%STW%X"??3??#:#:$'OOD!r6   zTry-finally statementc           
      *  ^  UR                  T R                  5        UR                  S5        UR                  nUR	                  5       nUR                  5       nUR                  nT R                  (       d  X!l        UR                  5       nT R                  R                  U5        UR                  S5        UR                  R                  5       nUR                  T R                  R                  5        UR                  S5        UR                  U5        T R                  /4U 4S jjnT R                  =(       a    UR                  U5      n	T R                  R                   (       + n
T R                  R                   (       dd  UR                  S5        U" 5       R                  U5        T R                  R                   (       d  UR#                  U5        UR                  S5        U	(       Ga:  UR%                  U5        UR                  S5        T R&                  (       d  UR                  S5        T R(                  (       a  UR+                  5         U
(       a  [-        [/        S5       Vs/ s H+  nUR                  R1                  [2        R4                  S	S
9PM-     sn5      nUR                  R1                  [2        R6                  " [2        R8                  " [2        R:                  5      5      S	S
9nOS =p[-        [/        S5       Vs/ s H!  nUR                  R1                  [<        S	S
9PM#     sn5      nUR?                  5       (       a+  URA                  5         URC                  T R                  5        T RE                  XXU5        UR	                  5       nUR                  S5        UR                  RF                  nUS S UR                  l#        T RH                  R                  U5        UUR                  l#        UR                  S5        U
(       a  T RK                  XX5        U(       a$  U H  nUR                  RM                  U5        M      U(       a  UR                  RM                  U5        UR?                  5       (       a  URO                  T R                  SS9  UR#                  U5        URQ                  UR                  5       U5       H  nT RS                  X5        M     U H  nUR                  RM                  U5        M      UR                  S5        UR                  U5        URT                  nSn[W        [Y        XC5      5       GH  u  nu  nnUR                  U5      (       d  M"  UU:X  a	  U	(       a  M1  UR                  SU-  5        S nUU:X  a  T R                  R                   (       d  T RZ                  (       a  T R(                  (       d  []        T R                  [^        5      (       d  UR                  R1                  T RZ                  S	S
9nUR                  U< S[`        Rb                  < S35        T RZ                  Rd                  (       a"  UR                  S[`        Rb                  -  5        U" 5       R                  U5        UU:X  ax  U(       aq  UR                  [`        Rb                  < SU< S35        T RZ                  Rd                  (       a  UR                  SU-  5        UR                  RM                  U5        T R                  R                   (       d  UR#                  U5        UR                  S5        GM     UR%                  U5        UR                  S5        g s  snf s  snf )Nr
  r  z/*finally:*/ {c                 l   > U S   n[         R                  " U5      nUTR                  L a  X S'   U$ UnU$ r  )r   r
  r
  )_nextrZ   	node_copyr   s      r7   fresh_finally_clauseHTryFinallyStatNode.generate_execution_code.<locals>.fresh_finally_clause!  sB    8Dd+It***$a K !Kr6   z/*normal exit:*/{z/*exception exit:*/{r  r%   Fr}     rM  r   Trs	  r-   z%s: {r  r  r
  )3rF  r<   rV   r7  all_new_labelsget_all_labelshandle_error_caser  r   r   r  r
  r
  set_all_labelspreserve_exceptionr6  r   r8  r:  rH	  is_try_finally_in_nogilr  rc  r(  r  r
   r>  CPtrTyperM  r  r   r  rA  r
  put_error_catcherru	  r
  put_error_uncatcherr  rv	  r"
  put_error_cleanerr9  r  r  r
  rO   GILExitNoder	   r  r  )r   r[   r*  
old_labels
new_labelsr!  catch_labelr
  r
  preserve_errorneeds_success_cleanupr  exc_lineno_cnamesexc_filename_cnameru	  finally_old_labelsr
  r  r9  r)  r  	old_labelret_temps   `                      r7   r   *TryFinallyStatNode.generate_execution_code!  s   dhh

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

	i+'#s   22^(^c                     U R                   R                  X5        U R                  R                  X5        U R                  (       a  U R                  R                  X5        g g r   )r   r  r
  r
  rR  s      r7   r  0TryFinallyStatNode.generate_function_definitions)"  sJ    		//:99#D%%&&DDSO &r6   c                 n   UR                   R                  [        5        UR                   R                  [        5        UR                   R                  [        5        U R
                  (       a  UR                  SS9  UR                  S5        UR                  SR                  U Vs/ s H  nSU-  PM
     sn5      5        U H  u  pxUR                  Xx5        M     UR                  SUSS  -  5        UR                  SUS S S	-  -  5        U H  nUR                  U[        5        M     U(       aY  UR                  US
   < S[        R                  < SUS   < S[        R                  < SU< S[        R                  < S35        U R
                  (       a  UR!                  5         g g s  snf )NFr  r  rJ   r
  z$ __Pyx_ExceptionSwap(&%s, &%s, &%s);r   zTif ( unlikely(__Pyx_GetException(&%s, &%s, &%s) < 0)) __Pyx_ErrFetch(&%s, &%s, &%s);r%   r   r  rA  r   r  )r  r  r=  r
  swap_exception_utility_coder  r  rV   r   r  r
  r   r	   lineno_cnameclineno_cnamefilename_cnamer  )	r   r[   r
  ru	  r  r  r'  r
  r  s	            r7   r  $TryFinallyStatNode.put_error_catcher/"  sj   ))*HI))*DE))*EF''7

/0

388AY_ABC0OI""93  1
 	

9HQRLHI

 4 8@|a7G	I 	J
 CS.1 JJ!!$f&9&9!!$f&:&:"F$9$9; <
 ''((* () Bs   )F2c                 <   UR                   R                  [        5        UR                   R                  [        5        U R                  (       a   UR                  SS9  UR                  S5        USS   H  nUR                  U[        5        M     UR                  SUSS  -  5        US S  H  nUR                  U[        5        M     UR                  SUS S -  5        U R                  (       a  UR                  5         UR                  SR                  U Vs/ s H  nSU-  PM
     sn5      5        U(       aZ  UR                  [        R                  < S	US
   < S[        R                  < S	US   < S[        R                  < S	U< S35        g g s  snf )NFr  r  r   !__Pyx_ExceptionReset(%s, %s, %s);r
  rJ   r
  r  r   rA  r   r  )r  r  r=  r
  r  r  rV   rS  r   r  r   r	   r  r  r  )r   r[   ru	  r  r  r'  s         r7   r	  &TryFinallyStatNode.put_error_uncatcherP"  sO   ))*HI))*FG''7JJ34 AB<Cc>2  

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

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

388AY_ABCJJ##%6q%9$$&7&:%%'9; <  Bs   Fc                    UR                   R                  [        5        U R                  (       a   UR	                  SS9  UR                  S5        USS   H  nUR                  U[        5        M     UR                  SUSS  -  5        US S  H  nUR                  U[        5        M     U R                  (       a  UR                  5         UR                  SR                  S/S-  5      USS  -  5        g )NFr  r  r   r   rJ   r
  )r  r  r
  r  r  rV   rS  r   r  r  r   )r   r[   ru	  r'  s       r7   r
  $TryFinallyStatNode.put_error_cleanerl"  s    ))*FG''7JJ34 AB<Cc>2  

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

388YKM*Xab\9:r6   c                 p    U R                   R                  U5        U R                  R                  U5        g r   )r   r   r
  r   s     r7   r   TryFinallyStatNode.annotate~"  s(    		4 $$T*r6   )r   r
  r
  r
  )NN)r.   r/   r0   r1   r   r  r  r
  r
  r  rH	  rN  r8  r   r~   r   r   r  r   r   r  r  r	  r
  r   r5   r-   r6   r7   r
  r
  o!  s     FK  #L 6 ..K)KHTP FJ+B<8;$+r6   r
  c                        \ rS rSrSrSrSrSrg)NogilTryFinallyStatNodei"  zB
A try/finally statement that may be used in nogil code sections.
FNr-   )r.   r/   r0   r1   r   r  r  r5   r-   r6   r7   r'  r'  "  s     Kr6   r'  c                   l   ^  \ rS rSrS/\R
                  -   rSrSrSS jrS r	U 4S jr
S rS	 rS
rU =r$ )GILStatNodei"  r{	  NTc                     X l         X@l        U R                  XU5        [        R	                  XU[        XU R                  S9S9  g )N)state
state_tempr
  )r+  r{	  create_state_temp_if_neededr
  r   r  r,  )r   r<   r+  r   r{	  s        r7   r   GILStatNode.__init__"  sF    
"((T:##&T__> 	$ 	?r6   c                     SSK Jn  U" 5       nUR                  U5        UR                  (       d  g US:X  a  [        R
                  nO[        R                  nSSKJn  UR                  X5      U l
        g )Nr   YieldNodeCollectorgilr  )ParseTreeTransformsr1  visitchildrenyieldsr
   c_gilstate_typec_threadstate_ptr_typer   r  r	  r,  )r   r<   r+  r   r1  	collectorr
  r  s           r7   r-  'GILStatNode.create_state_temp_if_needed"  sY    ;&(	%E>"22I"99I#,,S<r6   c                    > U R                   S:H  Ul        U R                   S:X  a  SUl        U R                  b  U R                  R	                  U5        [
        TU ]  U5      $ )Nr2  T)r+  _in_with_gil_blockhas_with_gil_blockr{	  r   ro   r  s     r7   r    GILStatNode.analyse_declarations"  sT    "&**"5::%)C">>%NN//4w+C00r6   c                 "   UR                  [        R                  " SS5      5        U R                  b   U R                  R	                  U5      U l        UR
                  nU R                  S:H  Ul        [        R	                  X5      nX!l        U$ )NForceInitThreadsr
  r   )r  r   r   r{	  r~   r   r+  r
  )r   r   	was_nogilrZ   s       r7   r~   GILStatNode.analyse_expressions"  sx    ##$68KL	N >>%!^^??DDNII	JJ')	!55d@	r6   c                    UR                  U R                  5        UR                  5         U R                  (       a6  U R                  R	                  U5        U R                  R                  5       nOS nUR                  R                  nU R                  S:X  a!  UR                  US9  SUR                  l        O/UR                  X R                  (       + S9  SUR                  l        [        R                  X5        U R                  (       a  U R                  R                  U5        X1R                  l        UR                  5         g )Nr2  )variableT)rC  unknown_gil_stateF)rF  r<   begin_blockr,  r	  r   r  r  r+  r  put_release_gilscope_gil_state_knownr
  r   r	  	end_block)r   r[   rC  old_gil_configs       r7   r   #GILStatNode.generate_execution_code"  s    dhh??OO$$T*--/HH11::2'+DNN$  (JdJdFd e',DNN$224>??OO##D)#1 r6   )r{	  r+  r,  r   )r.   r/   r0   r1   r'  r   r,  rG  r   r-  r   r~   r   r5   rx   ry   s   @r7   r)  r)  "  sA     -"9"E"EEKJ ?=1 r6   r)  c                   0    \ rS rSrSr/ rSrSrS rS r	Sr
g)r  i"  z
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                     U $ r   r-   r   s     r7   r~   GILExitNode.analyse_expressions"  r?  r6   c                     U R                   (       a  U R                   R                  5       nOS nU R                  S:X  a  UR                  U5        g UR	                  X R
                  (       + S9  g )Nr2  )rD  )r,  r   r+  r  put_acquire_gilrG  )r   r[   rC  s      r7   r   #GILExitNode.generate_execution_code"  sT    ??--/HH::((2  A[A[=[ \r6   r-   )r.   r/   r0   r1   r   r   r,  rG  r~   r   r5   r-   r6   r7   r  r  "  s$     KJ 	]r6   r  c                       \ rS rSrSrS rSrg)EnsureGILNodei"  zA
Ensure the GIL in nogil functions for cleanup before returning.
c                 "    UR                  SS9  g )NFr  )r  r   s     r7   r   %EnsureGILNode.generate_execution_code#  s    U3r6   r-   N)r.   r/   r0   r1   r   r   r5   r-   r6   r7   rR  rR  "  s    4r6   rR  c                      ^  \ rS rSrSrS/\R                  -   rSrSrSr	U 4S jr
S rU 4S jrU 4S	 jrS
 rS rSrU =r$ )CriticalSectionStatNodei#  z
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
rX   NFc                   > [        U5      S:  a  [        R                  U l        O[        R                  U l        U R                  X5        [        TU ]  " U4UU[        U[        U5      U S9S.UD6  g )Nr   )rN   critical_section)rX   r   r
  )	rN   r
   c_py_critical_section2_typevar_typec_py_critical_section_typer-  ro   r   CriticalSectionExitNode)r   r<   rX   r   rY   rQ   s        r7   r    CriticalSectionStatNode.__init__#  sn    t9q=&BBDM&AADM((3	
2TT;		
 	
r6   c                     SSK Jn  U" 5       nUR                  U5        UR                  (       d  g SSKJn  UR                  XR                  5      U l        g )Nr   r0  r  )	r3  r1  r4  r5  r   r  r	  rZ  r,  )r   r<   r   r1  r8  r  s         r7   r-  3CriticalSectionStatNode.create_state_temp_if_needed$#  s@    ;&(	%#,,S--@r6   c                 j   > U R                    H  nUR                  U5        M     [        TU ]  U5      $ r   )rX   r   ro   )r   r   r3  rQ   s      r7   r   ,CriticalSectionStatNode.analyse_declarations.#  s/    99C$$S) w+C00r6   c                   > [        U R                  5       Hd  u  p#UR                  U5      R                  U5      nUR                  R
                  (       d  [        UR                  S5        X0R                  U'   Mf     [        TU ]	  U5      $ )Nz<Arguments to cython.critical_section must be Python objects.)	r  rX   r~   rg  r  r  r   r<   ro   )r   r   r)  r3  rQ   s       r7   r~   +CriticalSectionStatNode.analyse_expressions3#  su    		*FA ))#.==cBC 88''GGR IIaL +  w*3//r6   c           
         UR                   R                  [        R                  " SS5      5        UR	                  U R
                  5        UR                  5         U R                  (       a6  U R                  R                  U5        U R                  R                  5       nO=[        R                  nUR                  U R                  R                  U5       S35        U R                   H  nUR!                  U5        M     U R                   Vs/ s H  nSUR                  5        3PM     nnUR                  S[#        U5       SU SSR%                  U5       S35        [&        R)                  X5        U R                   H%  nUR+                  U5        UR-                  U5        M'     U R                  (       a  U R                  R/                  U5        UR1                  5         g s  snf )	NCriticalSectionsSynchronization.cr  z(PyObject*)__Pyx_PyCriticalSection_Begin(&r   r  )r  r  r   r   rF  r<   rE  r,  r	  r   r	   critical_section_variablerV   rZ  r  rX   r{  rN   r   r
  r   r[  r  r	  rH  )r   r[   rC  r3  rX   s        r7   r   /CriticalSectionStatNode.generate_execution_codeF#  sv   ))##$68KL	N 	dhh??OO$$T*--/H77HJJ$--88BC1EF99C((. 9=D#;szz|n-D

+CI;b
"TYYt_DUUWX	
 	224>99C&&t,NN4   ??OO##D) Es   G+c                 0    [        U R                  S5        g )Nz!Critical sections require the GIL)r   r<   r   s     r7   r  #CriticalSectionStatNode.nogil_checke#  s    dhh;<r6   )r,  rZ  )r.   r/   r0   r1   r   r
  r   rZ  r,  r  r   r-  r   r~   r   r  r5   rx   ry   s   @r7   rV  rV  #  sQ     (/;;;KHJ
"A1
0&>= =r6   rV  c                   .    \ rS rSrSr/ rS rS rS rSr	g)r\  ii#  z?
critical_section - the CriticalSectionStatNode that owns this
c                     U $ r   r-   )r   memos     r7   __deepcopy__$CriticalSectionExitNode.__deepcopy__o#  s	    
 r6   c                     U $ r   r-   r   s     r7   r~   +CriticalSectionExitNode.analyse_expressionsv#  r?  r6   c                     U R                   R                  (       a%  U R                   R                  R                  5       nO[        R                  nUR                  SU R                   SU S35        g )N__Pyx_PyCriticalSection_Endrh  r  )rX  r,  r   r	   ri  rV   rN   )r   r[   variable_names      r7   r   /CriticalSectionExitNode.generate_execution_codey#  sX      ++ 11<<CCEM#==M

)$((2m_BG	
r6   r-   N)
r.   r/   r0   r1   r   r   rp  r~   r   r5   r-   r6   r7   r\  r\  i#  s     K
r6   r\  c                      ^  \ rS rSrSrS/\R                  -   rSrSrSr	\
S 5       rS rU 4S jrU 4S	 jrS
 rSrU =r$ )rr
  i#  zo
Represents
    with l:
        ...
where l in a cython.pymutex or cython.pythread_type_lock.

arg    ExprNode
r3  NFc                    SSK Jn  [        UR                  [        5      (       d   e[        UR                  R                  [
        5      (       d   eU " UR                  UR                  UR                  R                  R                  [        UR                  5      UR                  UR                  [        R                  " UR                  R                  5      5      S9nX3R                  l        UR                  Ul        U$ )Nr   r  )r3  r   r
  	lock_temp)r   r  rO   r   r
  r
  r<   rl
  CythonLockExitNoder	  r
   r  r  r
  lock_stat_noder
  )rq   rZ   r  r   s       r7   rs
   CythonLockStatNode.from_withstat#  s    $))%78888$))..*;<<<<HH$$/ "**488Z5H5HIZIZ5[\
 06,'-'<'<$r6   c                    SSK Jn  U" 5       nUR                  U R                  5        UR                  (       aL  U R
                  R                  R                  SS9R                  5       n[        U R                  SU S35        g g )Nr   r0  T)r  z&Cannot use a 'with' statement with a 'zy' in a generator. If you really want to do this (and you are confident that there are no deadlocks) then use try-finally.)r3  r1  r4  r   r5  r3  r  rh  stripr   r<   )r   r1  r8  typenames       r7   check_for_yields#CythonLockStatNode.check_for_yields#  st    ;&(			* xx}};;$;GMMOH8
 C( ( r6   c                 X   > U R                   R                  U5        [        TU ]  U5      $ r   )r3  r   ro   r  s     r7   r   'CythonLockStatNode.analyse_declarations#  s%    %%c*w+C00r6   c                   > U R                   R                  U5      U l         U R                  5         U R                  n[	        U[
        5      (       a(  [        UR                  5      S:  a  UR                  S   n[        TU ]  U5      $ r  )	r3  r~   r  r   rO   r5  rN   r6  ro   )r   r   r   rQ   s      r7   r~   &CythonLockStatNode.analyse_expressions#  sg    88//4yydL))c$**o.B::a=Dw*3//r6   c           	         UR                   R                  U R                  R                  R	                  5       5        UR                  U R                  5        UR                  5         U R                  R                  U5        U R                  R                  5       nU R                  R                  U5        UR                  U SU R                  R                  5        S35        U R                  [        R                  :X  a  SnO#U R                  [        R                   :X  a  SnOSnUR                  SU R                  R                  R"                   SU SU S	35        [$        R'                  X5        U R                  R)                  U5        U R                  R+                  U5        U R                  R-                  U5        UR/                  5         g )
Nr  r  Nogilr   Gil__Pyx_Locks__Lockz(*r  )r  r  r3  r  get_utility_coderF  r<   rE  rz  r	  r   r{  rV   r  r+   r3   r4   
cname_partr
  r   r[  r  r	  rH  )r   r[   r
  gil_strs       r7   r   *CythonLockStatNode.generate_execution_code#  sT   ))$((--*H*H*JKdhh%NN))+	))$/

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

\$((--":":!;5	I;VXYZ224>''-D!t$r6   r0
  )r.   r/   r0   r1   r   r
  r   rz  r  r  r&  rs
  r  r   r~   r   r5   rx   ry   s   @r7   rr
  rr
  #  sX     '.:::KIK $ 10 r6   rr
  c                   (    \ rS rSrSr/ rS rS rSrg)r{  i#  zA
lock_stat_node   CythonLockStatNode   the associated with block
c                     U $ r   r-   r   s     r7   r~   &CythonLockExitNode.analyse_expressions#  r?  r6   c                     U R                   R                  R                  R                  nUR	                  SU SU R                   R
                  R                  5        S35        g )Nr  z	_Unlock(*r  )r|  r3  r  r  rV   rz  r   )r   r[   r  s      r7   r   *CythonLockExitNode.generate_execution_code#  sQ    ((,,11<<


\*Yt7J7J7T7T7[7[7]6^^`abr6   r-   N)	r.   r/   r0   r1   r   r   r~   r   r5   r-   r6   r7   r{  r{  #  s     Kcr6   r{  c                 D    SSK Jn  UR                  U R                  5      $ r  )r   r  r  r  )r  r  s     r7   cython_view_utility_coder  #  s    ++G,Q,QRRr6   c                 0    [         R                  " SS5      $ NArrayAPIzarrayarray.hr   r   r  s    r7   r  r  #      k.E.EjR`.ar6   c                 0    [         R                  " SS5      $ r  r  r  s    r7   r  r  #  r  r6   )zcpython.arrayzcpython.array.arrayzcython.viewc                 P   UR                   R                  R                  R                   H  nUR                  U R
                  :w  a  M  UR                  S5      nUR                  S5      nU=(       a    UR                  =(       d    U=(       a    UR                  nU(       d	  U(       d  M  U(       a  M  U(       d  M  UR                  R                  (       d  M  [        U R                  SS5        UR                   R                  [        R                  " SS5      5          g    g )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  rr   r  r  rD  r  r  r   r<   r  r   r   )rZ   r[   modr  r  rD  s         r7   cimport_numpy_checkr  #  s     ++11CC88t''' ~682!2!2]8\-J\J\]]}!3!3!@!@!@ #_`ac  11$001CEYZ ' Dr6   c                   .    \ rS rSr/ rSrS rS rS rSr	g)CImportStatNodei$  Fc                    UR                   (       d  [        U R                  S5        g UR                  U R                  U R                  U R
                  (       a  SOSS9nSU R                  ;   a  U R                  R                  S5       Vs/ s H  n[        U5      PM     nnUS   nUR                  R                  U5      nUnUSS   H2  nUR                  U5      nUR                  X7U R                  5        UnM4     U R                  (       a'  UR                  U R                  X R                  5        OzUR                  U5        UR                  XVU R                  5        OLU R                  =(       d    U R                  nUR                  X2U R                  5      nU R                  Ul        U R                  [        ;   a=  UR                  [        U R                     " UR                  R                   5      5        g g s  snf )N$cimport only allowed at module levelr   r   relative_levelrK   r   )r&  r   r<   find_moduler  is_absoluterq  r   r  find_submoduledeclare_moduleas_namer  r  utility_code_for_cimportsr  r  )	r   r   r  rr   r  top_nametop_module_scopesubmodule_scoper-  s	            r7   r   $CImportStatNode.analyse_declarations$  s   ""$((BCdhhD<L<LqRT ' V$"""595E5E5K5KC5PQ5PT]4(5PEQQxH"{{99(C+Lab	"."="=d"C++D488L. " ||""4<<xxH''5""8txxH<<34#3#3D&&t488DE262B2BE/88  !:4;K;K!LS[[M`M`!ab 9# Rs   Hc                     U $ r   r-   r   s     r7   r~   #CImportStatNode.analyse_expressions9$  r?  r6   c                 <    U R                   S:X  a  [        X5        g g Nnumpyr  r  r   s     r7   r   'CImportStatNode.generate_execution_code<$      w&+ 'r6   r-   N)
r.   r/   r0   r1   r   r  r   r~   r   r5   r-   r6   r7   r  r  $  s     KKc6,r6   r  c                   <    \ rS rSr/ rSrSrSrS rS r	S r
S rSrg)FromCImportStatNodeiA$  Nc           	      (   UR                   (       d  [        U R                  S5        g UR                  R	                  S5      S-   nU R
                  (       a_  U R
                  U:  a  [        U R                  S5        g U R
                  U:X  a(  UR                  (       d  [        U R                  S5        g UR                  U R                  U R                  U R
                  S9nU(       d  g UR                  nUR                  U5        U R                   GH1  u  pVnUS:X  a@  [        UR                  R                  5       5       H  u  pUR                  XU5        M     MM  UR                  U5      n	U	(       a  SU	l        OU R
                  S L=(       a    U R
                  S:  n
UR"                  R                  XcU R                  S	U
S
9nU(       d  M  UR$                  UL a&  UR'                  U=(       d    UXR                  5        O[        USU< SU< S35        U	(       d  GM  U=(       d    UnUR                  XU5        GM4     UR)                  S5      (       d  UR)                  S5      (       a  U[*        ;   a2  UR-                  [*        U   " UR"                  R.                  5      5        U R                   HM  u  pnU< SU< 3nU[*        ;   d  M  UR-                  [*        U   " UR"                  R.                  5      5        MO     g g )Nr  rK   r   z3relative cimport beyond main package is not allowedz:relative cimport from non-package directory is not allowedr  r  r   F)from_moduler<   absolute_fallbackrelative_importzName 'z' not declared in module 'r  cpythoncython)r&  r   r<   rG  countr  
is_packager  r  r  imported_namesr   r,  rn   r  r  rD  r  parent_moduler  
startswithr  r  r  )r   r   qualified_name_componentsr  r  r<   rr   r  
local_namer-  is_relative_importr  r  fqnames                 r7   r   (FromCImportStatNode.analyse_declarationsM$  s   ""$((BC$'$6$6$<$<S$AA$E!""%>>dhh UV$$(AA#..dhh \]t'7'7RVReRef"11-"&"5"5Cws{)-l.B.B.H.H.J)K%J**:cB *L %++D1!"EJ)-)<)<D)H)dTM`M`cdMd&&)kk&=&=DHHX]  pB '> 'CO* &44D**7?dOXXVcdT_#`a5!(DJ**:cB+ #6. !!),,0F0Fx0P0P77$$%>{%KCKKL_L_%`a"11
$/666(()B6)J3;;K^K^)_` 2 1Qr6   c                     UR                   (       d  gUR                  nUS:X  a  UR                  (       d  g gUR                  (       d  gX#R                  :w  a  gg)Nr   classr   )r  r  rm  is_struct_or_unionr9  )r   r-  r9  r  s       r7   declaration_matches'FromCImportStatNode.declaration_matches$  sP    }}zz7?)) * 	 **yy r6   c                     U $ r   r-   r   s     r7   r~   'FromCImportStatNode.analyse_expressions$  r?  r6   c                 <    U R                   S:X  a  [        X5        g g r  r  r   s     r7   r   +FromCImportStatNode.generate_execution_code$  r  r6   r-   )r.   r/   r0   r1   r   r  r  r  r   r  r~   r   r5   r-   r6   r7   r  r  A$  s.     KKNN0ad,r6   r  c                   0    \ rS rSrS/rSrS rS rS rSr	g)	FromImportStatNodei$  r  r   c                    U R                    H  u  p#US:X  a9  UR                  (       d  [        U R                  S5          g SUl        SU l        MD  UR                  U5        UR                  (       aT  UR                  5       cA  [        U R                  R                  R                  < SU< 35      UR                  l        M  M  SUR                  l        M     g )Nr  z%import * only allowed at module levelr   rK   r   )rn   r&  r   r<   has_import_starimport_starrJ  r-  rQ  r   r  r  r   r  )r   r   rr   r  s       r7   r   'FromImportStatNode.analyse_declarations$  s     JJLDs{**$(($KL&'##$ 11#6<<??AIER'+{{'>'>'D'DdKFMB J
 BDFLL> 'r6   c                    SSK Jn  U R                  R                  U5      U l        UR	                  U R
                  [        5      U l        / U l        U R                   GH  u  p4US:X  a|  UR                  R                  5        H\  u  pVUR                  (       a  M  UR                  R                  (       d  M5  UR                  [        R                   " SS5      5          M     M  UR#                  UR$                  5      nUR                  (       a  UR                  R$                  U:X  a  ['        UR                  S5      (       a  UR                  R(                  U R                  R(                  R*                  :X  a  GM$   UR-                  U R                  R(                  R*                  U R
                  U R                  R.                  S9nUR                  R(                  UR0                  :X  a  GM   UR5                  US 5      nUR                  [        L a  S nO&U R                  R7                  UR                  U5      nU R                  R9                  X4U45        GM     U $ ! [2         a     N~f = f)Nr   r  r  ExtTypeTestr  r  )r<   r  )r   r  r  r~   r  r<   r   r   interned_itemsrn   r,  r  r  rm  r  r   r   r  rr   r  r  r   r  r   rG  r   rU  r  r  )	r   r   r  rr   r  r  r-  r  coerced_items	            r7   r~   &FromImportStatNode.analyse_expressions$  s   kk55c:..txxH	  JJLDs{ # 1 1 3HA ===UZZ-I-I-I,,[-D-D]Tf-gh !4
 

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 '8  * s   A1I++
I87I8c                    UR                  U R                  5        U R                  R                  U5        U R                  (       a]  UR                  S[        R                  < SU R                  R                  5       < SUR                  U R                  5      < S35        UR                  R                  [        SS9nU R                  R                  U5        U R                  (       a0  UR                  R!                  ["        R$                  " SS5      5        U R                   H  u  p4nUR                  U< S	U R                  R                  5       < S
UR'                  U5      < SUR)                  X R                  5      < 35        UR+                  U[        5        Uc  UR-                  U R                  U5        O3UR/                  U5        UR1                  U5        UR-                  XQ5        UR3                  U[        5        M     UR                  R5                  U5        U R                  R7                  U5        U R                  R9                  U5        g )Nr  r  r  r  Tr}  
ImportFromr  z = __Pyx_ImportFrom(r   r  )rF  r<   r  r{  r  rV   r	   r  r  r  r  r   r   r  r  r  r  r   r   rd  r  r  r  allocate_temp_resultr  r  r  r[  r  )r   r[   	item_temprr   r  r  s         r7   r   *FromImportStatNode.generate_execution_code$  s   dhh,,T2JJ&&KK))+OODHH-/0
 NN00D0Q			I&--''6FGI*.*=*=&D,JJKK))+**40++Ixx@	BC OOI~6#//		4@11$711$7//C!!)^< +> 	##I.**40t$r6   )r  r  r   r  N)
r.   r/   r0   r1   r   r  r   r~   r   r5   r-   r6   r7   r  r  $  s!     *KKD&!F%r6   r  c                       \ rS rSrSrSrSrg)ParallelNodei$  z,
Base class for cython.parallel constructs.
Nr-   )r.   r/   r0   r1   r   r  r5   r-   r6   r7   r  r  $  s     Kr6   r  c                     ^  \ rS rSrSr/ SQrSrSrSrSr	Sr
SrSr\R                  \R                  \R                   4r\R$                  \R&                  \R(                  4r\R,                  \R.                  \R0                  4rSrU 4S jrS rS	 rS
 rS rS r S&S jr!S r"S r#S r$S r%S'S jr&S r'S r(S r)S r*S(S jr+S r,S r-S r.S r/ S)S jr0Sr1Sr2S\1< S \2< S!3r3S" r4S# r5S$ r6S%r7U =r8$ )*ParallelStatNodei%  a  
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U ]  " U40 UD6  UR                  S5      =(       d    0 U l        [	        5       U l        0 U l        / U l        g )Nr  )ro   r   r  r  r   seen_closure_varsprivatesassigned_nodesr  s      r7   r   ParallelStatNode.__init__C%  sL    '' "::m4: "%
  !r6   c                 B   U R                   R                  U5        S U l        S U l        U R                  (       Ga  / n[        5       nU R                  R                   GHt  nUR                  R                  U;   a-  [        U R                  SUR                  R                  -  5        UR                  UR                  R                  5        UR                  R                  S:X  a0  UR                  R                  (       d  UR                  U l        M  M  UR                  R                  S:X  a2  UR                  R                  (       d  UR                  U l        GM  GM  U R                  (       aL  UR                  R                  S:X  a2  UR                  R                  (       d  UR                  U l        GM`  GMc  UR                  U5        GMw     X R                  l         U R                  R!                  U5      U l        O0 U l        U R                  R%                  5        H;  u  pgX`R&                  ;  a  [        U R                  SU-  5        M/  [)        XU5        M=     g ! ["         a*  n[        U R                  R                  S5         S nANS nAff = f)Nz$Duplicate keyword argument found: %sr  use_threads_if	chunksizez=Only compile-time values may be supplied as keyword argumentszInvalid keyword argument: %s)r   r   r  r  r   r   r  r   r   r   r<   r   r   	is_pranger  r  rM  	Exceptionrn   valid_keyword_argumentsr   )r   r   pairsseendictitemr  r   rn  s           r7   r   %ParallelStatNode.analyse_declarationsT%  s   		&&s+#' ;;;E5D KK77<<%%-$(($JX\\M_M_$_`++,<<%%6#>>11+3>>( 2\\''+;;#>>113;>>0 2^^(:(:k(I#>>11)1 2 LL* 8  +0KK'H"kk<<SA
 DK{{((*GB555dhh > CD#&	 +  Hdkkoo (G H HHs   ( I* *
J4 JJc                 "   U R                   (       a   U R                   R                  U5      U l         U R                  (       aH  U R                  (       a!  U R                  R                  U5      U l        O[	        U R
                  S5        U R                  (       a   U R                  R                  U5      U l        U R                  R                  U5      U l        U R                  U5        U R                   Gb  U R                  (       aI  U R                  R                   b2  U R                  R                  (       d  [	        U R
                  S5        OU R                  (       a2  U R                  R                  (       d  [	        U R
                  S5        OuU R                   R                  R                  (       aP  U R                   R                  (       a5  U R                   R                  U5      S::  a  [	        U R
                  S5        U R                   R                  5       (       a%  U R                   R                  R                   (       a>  U R                   R#                  [$        R&                  U5      R)                  U5      U l         U $ )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)r  r~   r  is_parallelr   r<   r  r   analyse_sharing_attributesparentr  r  r  r   rM  r
  r  r  r
   r>  rg  r   s     r7   r~   $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  r6   c                 V   U R                   R                  5        H  u  nu  p4U R                  (       a8  U R                  (       d'  X R                  R                   ;   a  [        US5        MQ  U R                  (       d  U(       a  [        US5        Mw  SnU R                  X#XE5        M     g)z
Analyse the privates for this block and set them in self.privates.
This should be called in a post-order fashion during the
analyse_expressions phase
z0Cannot assign to private of outer parallel blockz*Reductions not allowed for parallel blocksTN)r  rn   r  r  r   r   propagate_var_privatization)r   r   r-  r<   rk  lastprivates         r7   r  +ParallelStatNode.analyse_sharing_attributes%  s     !% 0 0 6 6 8E9C~~d&6&6 KK333#QR>>bcGH K,,UI% !9r6   c                    X44U R                   U'   UR                  R                  (       a  [        US5        gU R                  (       aw  U R
                  (       d0  XR                  R                  ;  a  U R                  R                  nOU R                  nU(       a"  U(       d  U(       a  UR                  XX45        gggg)a  
Propagate the sharing attributes of a variable. If the privatization is
determined by a parent scope, done propagate further.

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

So the following cases propagate:

    sum is a reduction for all loops:

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

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

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

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

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

        sum = 0

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

            #pragma omp parallel
            with parallel:

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

            # sum and j are well-defined here

        # sum and j are undefined here

    # sum and j are undefined here
z9Memoryview slices can only be shared in parallel sectionsN)	r  r  r'  r   r  r  r   r  r  )r   r-  r<   rk  r  r   s         r7   r  ,ParallelStatNode.propagate_var_privatization%  s    j !#0e::((#RS>>##[[5L5L(L++ 2225rO "-v r6   c                    U R                   (       a  U R                   R                  X5      $ UR                  U R                  ;   a  UR                  $ UR                  R                  UR                  S5      nU R                  R                  UR                  5        U R                  R                  U5        U R                  R                  X"R                  45        UR                  U< SUR                  < S35        X2l        g)zW
Helper function that allocate a temporary for a closure variable that
is assigned to.
Tr  r  N)r   _allocate_closure_tempr  r  r  r  r  r   modified_entriesr  rV   )r   r[   r-  r  s       r7   r	  'ParallelStatNode._allocate_closure_temp%  s    
 ;;;;55dBB;;$000;;,,UZZ> 	""5;;/""5)$$e[[%9:

45r6   c                    Sn[        U R                  R                  5       5       H  u  nu  pVU(       a  M  U(       a  XB:w  d  M  UR                  R	                  5       nU(       d  MB  U(       a  UR                  S5        SnUR                  UR                  < SUR                  R                  U5      < S35        M     g )NTz4/* Initialize private variables to invalid values */Fr  r  )sortedr  rn   r  invalid_valuerV   r  r|  )r   r[   excluder  r-  rk  r  r  s           r7   initialize_privates_to_nan+ParallelStatNode.initialize_privates_to_nan&  s    (.t}}/B/B/D(E$E$B2w%*: %

 8 8 : =

 $7 8 %JJU[[-2ZZ-A-A--P R S )Fr6   c                     U R                   nUR                  R                  nX3R                  l        UR                  U5        XCR                  l        UR	                  5       $ r   )1begin_of_parallel_control_block_point_after_declsr  ownerr{  r   )r   r[   r  r   r  s        r7   evaluate_before_block&ParallelStatNode.evaluate_before_block#&  sL    BB !!%%a(!{{}r6   c                 z    U R                   b.  UR                  SU R                  XR                   5      -  5        gg)zC
Write self.num_threads if set as the num_threads OpenMP directive
Nz num_threads(%s))r  r	  r  r   s     r7   put_num_threads ParallelStatNode.put_num_threads/&  s8     'HH'$*D*DTK[K[*\\] (r6   c                     / U l         [        U R                  5       H8  nUR                  (       d  UR                  (       d  M'  U R                  X5        M:     g)z
If a variable is in a scope object, we need to allocate a temp and
assign the value from the temp to the variable in the scope object
after the parallel section. This kind of copying should be done only
in the outermost parallel section.
N)r
  r  r  from_closurer  r	  )r   r[   r-  s      r7   declare_closure_privates)ParallelStatNode.declare_closure_privates7&  sC     !#D,,-E!!U%5%5%5++D8 .r6   c                     U R                    HS  u  p#UR                  U< SUR                  < S35        UR                  R	                  UR                  5        X2l        MU     g)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.
r  r  N)r
  rV   r  r  r  )r   r[   r-  r"  s       r7   release_closure_privates)ParallelStatNode.release_closure_privatesD&  sG     &*%:%:!EJJ^U[[ABNN''4(K &;r6   c                    U R                   nSU l         U R                  (       Ga  UR                  R                  5       =U l        n/ / pe[        U5       HK  u  pxUR                  (       d  UR                  (       a  UR                  U5        M:  UR                  U5        MM     U(       a#  UR                  SSR                  U5      -  5        U(       a#  UR                  SSR                  U5      -  5        U R                  (       a  [        R                  /n	U R                  (       a  U	R                  U R                   5        UR"                  R%                  [&        R(                  " SS5      5        UR                  S[        R*                   S35        UR                  S	U R,                  -  5        UR                  S
SR                  U	5      -  5        ggg)zz
Make any used temporaries private. Before the relevant code block
code.start_collecting_temps() should have been called.
Nz private(%s)r    firstprivate(%s)SharedInFreeThreadingrf  z' __Pyx_shared_in_cpython_freethreading(r  z private(%s, %s, %s)z shared(%s))privatization_insertion_pointr  r  stop_collecting_tempsr   r  r  r'  r  r	  r   breaking_label_usedr	   parallel_whyerror_label_usedr
  parallel_excr  r  r   r   parallel_freethreading_mutexpos_info)
r   r[   exclude_tempsr   r   r  firstprivatesr  r  shared_varss
             r7   privatize_temps ParallelStatNode.privatize_tempsO&  so   
 ..-1*!%!E!E!GGDJ&("m$Um
##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&<<= ( r6   c                     U R                   (       aR  U R                  (       d@  UR                  S5        [        U R                  5       H  u  p#UR                  X#SS9  M     g g g )Nz/* Clean up any temporaries */Fr  )r  is_nested_prangerV   r  r   r  )r   r[   r  r  s       r7   cleanup_tempsParallelStatNode.cleanup_tempsr&  sP    D$9$9JJ78$TZZ0
&&tE&B 1 %:r6   c                 8   UR                  5       U l        UR                  5       U l        UR                  U l        UR                  SS9Ul        UR                  5         UR                  5       U l	        UR                  5       U l
        U R                  U5        g)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	  r!  r*  r9  r
  r  rE  rR   %begin_of_parallel_control_block_pointr  "undef_builtin_expect_apple_gcc_bugr   s     r7   !setup_parallel_control_flow_block2ParallelStatNode.setup_parallel_control_flow_blocky&  s    4  $335#335 $ 1 1 NNN9595I5I5K2AEAUAUAW>//5r6   c                 .    UR                  5       U l        g)ad  
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)rR   begin_of_parallel_blockr   s     r7   begin_parallel_block%ParallelStatNode.begin_parallel_block&  s     (,';';'=$r6   c                 H   U R                   nSU l         U R                  (       a  UnUR                  S5        UR                  SS9  UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR	                  S	5        UR                  5         UR                  S5        U R                  U5        UR                  5         UR                  S
5        UR	                  S5        UR                  S5        gg)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 _OPENMPTr  Py_BEGIN_ALLOW_THREADS#endif /* _OPENMP */Py_END_ALLOW_THREADSr  z{
z#ifndef _OPENMPz}
)r<  r(  rV   r  put_safer3  r  )r   r[   
begin_codeend_codes       r7   end_parallel_block#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% !r6   c                    UR                  5       nUR                  5       nSU l        SU l        SU l        / U l        UR                  5       nU HH  nUR                  U5      (       d  M  U R                  =(       d    XaR                  :g  U l        SU l        MJ     U R                  (       a  UR                  U5        [        U5       H  u  pvUR                  U5      (       d  M  XaR                  :H  nUR                  U5        U(       a  U(       dN  XaR                  :X  a  SU l        U R                  U5        UR                  S[        R                  US-   4-  5        U R                  (       a+  U R                   (       a  U(       d  UR                  U5        M  UR                  U5        M     U R                  (       a  U R                   (       a3  U R                  (       a"  UR                  U5        U R#                  U5        UR                  U5        U(       a5  U R                  (       a#  UR%                  S[        R                  -  5        gggg)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  r6  r/	  r8  r  r:  r7  fetch_parallel_exceptionrV   r	   r'  r  save_parallel_varsrB	  )	r   r[   should_flushsave_lastprivates_labeldont_return_label
all_labelsr  r)  is_continue_labels	            r7   trap_parallel_exit#ParallelStatNode.trap_parallel_exit&  s    #'.."2 NN,##(  %&(#((*
  Eu%%,0,D,D -I,15H5H,H (&*#	   MM+,!*-HA??5)) %)<)< <NN5! %6,,,,0D)11$7

:)<)<a!e(DDE((T^^%56/0' .* ~~$":":67''-NN,- 8 8!!"9F<O<O"OP !9| r6   c                    SU R                   -  nUR                  SU-  5        [        =R                   S-  sl         UR                  5         U R                  nSn[        U R                  R                  5       5       GH  u  nu  pgU(       a  UR                  R                  (       a  M-  UR                  R                  (       aU  UR                  R                  (       d:  UR                  R                  S   (       a  UR                  R                  S5      nOUR                  R                  5       nSU-  n	UR                   n
US-  nUR                  R#                  5       nU(       a  SUR                  R%                  U5      -   nOSnUR'                  U< S	U	< U< S
35        U R(                  R+                  XUR                  45        UR                  R                  (       a5  UR                  R-                  [.        R0                  " SS5      5        SU
-  n
UR'                  U	< SU
< S
35        GM     UR3                  5         g)ap  
The following shenanigans are instated when we break, return or
propagate errors from a prange. In this case we cannot rely on
lastprivate() to do its job, as no iterations may have executed yet
in the last thread, leaving the values undefined. It is most likely
that the breaking thread has well-defined values of the lastprivate
variables, so we keep those values.
z__pyx_parallel_lastprivates%dz#pragma omp critical(%s)r   r   
cpp_localsr   z__pyx_parallel_temp%dr  rJ   r  r  r  r  N)critical_section_counterrB	  r  rE  r7  r  r  rn   r  r  r  is_fake_referencer  r
  cpp_optional_declaration_coderh  r  r  r|  rV   rL  r  r  r   r   rH  )r   r[   section_namer   
temp_countr-  rk  r  	type_decl
temp_cnameprivate_cnamer  rb  s                r7   rN  #ParallelStatNode.save_parallel_vars'  s    79V9VV4|CD11Q6166
(.t}}/B/B/D(E$E$B%**"8"8zz&&uzz/K/KPTP`P`PkPklxPy!JJDDRH	!JJ==?	0:=J!KKM!OJ!JJ446Muzz33MBBGG)Z>?''..
5::/VWzz&&  11++,=?OPR AM QJJZ?@; )FB 	r6   c                    UR                  5         UR                  SS9  UR                  5         UR                  S[        R
                  -  5        UR                  S[        R
                  -  5        UR                  SU R                  -  5        [        [        U R                  U R                  5      6 nSUR                  l        UR                  S[        U5      -  5        UR                  [        R
                  [         5        UR                  S5        UR#                  5         UR%                  5         UR'                  5         g)	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
Tr  rJ  r  z'__Pyx_ErrFetchWithState(&%s, &%s, &%s);%s = %s; %s = %s; %s = %s;r  N)rE  r  put_acquire_freethreading_lockrB	  r	   parallel_exc_typerV   r)  r   r  parallel_pos_infor+  r  uses_error_indicatorrc  r  r   put_release_freethreading_lockr  rH  r   r[   r+  s      r7   rM  )ParallelStatNode.fetch_parallel_exceptionB'  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

	 	++-$$&r6   c                    UR                  5         UR                  SS9  UR                  5         UR                  [        R
                  [        5        UR                  SU R                  -  5        [        [        U R                  U R                  5      6 nUR                  S[        U5      -  5        UR                  5         UR                  5         UR!                  5         g)zRe-raise a parallel exceptionTr  rp	  rb  N)rE  r  rc  r  r	   rd  r   rV   r)  r   r  r+  re  rc  rg  r  rH  rh  s      r7   restore_parallel_exception+ParallelStatNode.restore_parallel_exceptionr'  s    T2++-11>B

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

/%/AB++-$$&r6   c                 l    UR                  U R                  U R                  U R                  4-   5        g)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     r7   restore_labelsParallelStatNode.restore_labels'  s8    
 	D00D4I4I484H4H4J J 	Kr6   c                 v   U R                   nSU l         SU l        U R                  b6  U R                  R                  U5        U R                  R	                  U5        UR                  5       (       a  UR                  S5        U R                  (       a  UR                  SU R                  -  5        UR                  SU R                  -  5        UR                  S5        UR                  S[        R                   S35        UR                  S5        UR                  S	[        R                  -  5        UR                  S
5        UR                  S[        R                  -  5        UR                  S5        U(       a  U R                  nOU R                  nU(       Ga  UR                  S[        R                  -  5        UR                  S[        R                  -  5        UR                  S	[        R                  -  5        U R                    H5  u  pxn	U	R"                  (       a  SU-  nUR                  U< SU< S35        M7     UR                  S[        R                  -  5        U(       a,  UR%                  S5        UR'                  UR(                  5        U(       a,  UR%                  S5        UR'                  UR*                  5        U(       a,  UR%                  S5        UR'                  UR,                  5        U R                  (       a\  UR.                  R1                  [2        5        UR                  S5        U R5                  U5        UR'                  UR6                  5        UR                  S5        UR                  S5        UR9                  5         U R;                  U5        g)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;r  zint %s;r
  r  r  r  r  z    case 1: z    case 2: z    case 3: z    case 4:)r7  r  r  r[  r  r  rV   r(  re  r)  r	   r*  rd  r'  rK  r&  rL  r  r	  r8  r/	  r'	  r9  r  r  r=  rk  r7  rH  "redef_builtin_expect_apple_gcc_bug)
r   r[   break_	continue_return_r   rK  r^  r_  r
  s
             r7   end_parallel_control_flow_block0ParallelStatNode.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4
9))!BZ!OJ

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

=)//5d../JJsOJJ 	//5r6   z((defined(__APPLE__) || defined(__OSX__))zQ(defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))))r  r  r  c                 ^    U R                   (       d  UR                  U R                  5        gg)zM
A bug on OS X Lion disallows __builtin_expect macros. This code avoids them
N)r   undef_builtin_expectredef_conditionr   s     r7   r8  3ParallelStatNode.undef_builtin_expect_apple_gcc_bug'  s$     {{%%d&:&:; r6   c                 ^    U R                   (       d  UR                  U R                  5        g g r   )r   redef_builtin_expectrz  r   s     r7   rr  3ParallelStatNode.redef_builtin_expect_apple_gcc_bug'  s"    {{%%d&:&:; r6   c                     [        X#5       H@  u  pEUc  M
  UR                  R                  (       d  M'  [        UR                  SU-  5        MB     g )Nz6%s may not be a Python object as we don't have the GIL)r  r  r  r   r<   )r   r   r  nodesrr   rZ   s         r7   _parameters_nogil_check(ParallelStatNode._parameters_nogil_check'  sE    e+JDDII$9$9$9dhh !;=A!B C ,r6   )rK  r  r  r<  r7  r  r   r&  r  r(  r   r
  r  r*  r	  r
  rL  r  r$  r  r   r  r   )r-   r  )FFF)9r.   r/   r0   r1   r   r   r   r  r2  r(  r  r  r  r	   rd  parallel_exc_valueparallel_exc_tbr)  parallel_filenameparallel_linenoparallel_clinenore  r  r  r  r+  rX  r   r   r~   r  r  r	  r  r  r  r  r  r/  r3  r9  r=  rG  rT  rN  rM  rk  rn  rv  buggy_platform_macro_conditionhave_expect_conditionrz  r8  rr  r  r5   rx   ry   s   @r7   r  r  %  sf   < AKDIKI 	  !!L 	   	H  !!"('T>J4EPN,S
^9	)!>FC#6J	>3BAQF3j.`K @EX6v &P"[&DF[\O<<C Cr6   r  c                   H   ^  \ rS rSrSrSS/rSrSrU 4S jrS r	S r
S	rU =r$ )
ParallelWithBlockNodei'  zA
This node represents a 'with cython.parallel.parallel():' block
r  r  Nc                 t   > [         TU ]  U5        U R                  (       a  [        U R                  S5        g g )Nz=cython.parallel.parallel() does not take positional arguments)ro   r   rX   r   r<   r  s     r7   r   *ParallelWithBlockNode.analyse_declarations(  s/    $S)99$(( 3 4 r6   c                    U R                   b  U R                   R                  U5        U R                  U5        U R                  U5        UR	                  S5        UR                  S5        U R                   b,  UR                  SU R                   R                  5       -  5        U R                  (       av  U R                   Vs/ s H,  nUR                  R                  (       a  M   UR                  PM.     nnU(       a,  UR                  SSR                  [        U5      5      -  5        UR                  5       U l        U R                  U5        UR	                  S5        UR	                  S5        UR!                  5         U R#                  U5        U R%                  U5        UR&                  R)                  5         U R*                  R-                  U5        U R/                  U5        U R1                  U5        U R3                  U5        UR5                  5         UR7                  UR8                  5      nUR7                  UR:                  5      nUR7                  UR<                  5      nU R?                  U5        U RA                  XUUS9  U R                   b6  U R                   RC                  U5        U R                   RE                  U5        U RG                  U5        g s  snf )	Nr@  z#pragma omp parallel zif(%s) zprivate(%s)r   r   rB  )rs  rt  ru  )$r  r{  r  r9  rV   r	  r   r  r  r  r  r   r  rR   r$  r  rE  r=  r  r  start_collecting_tempsr   r   rT  r/  rG  rH  r6  r/	  r'	  r9  rn  rv  r[  r  r  )r   r[   r  r  rt  rs  ru  s          r7   r   -ParallelWithBlockNode.generate_execution_code(  sG   ##/$$==dC%%d+..t4

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

2

)*!!$'''---/		))$/%T"%OOD$7$78	!1!12//$"3"34D! 	,,T7@5< 	- 	> ##/$$;;DA$$//5%%d+I3s   K'(K'c                 B    U R                  US/U R                  /5        g )Nr  )r  r  r   s     r7   r  !ParallelWithBlockNode.nogil_checkB(  s!    $$S+;*<t?W?W>XYr6   )r$  )r.   r/   r0   r1   r   r  r  r  r   r   r  r5   rx   ry   s   @r7   r  r  '  s8      -.>?K44,lZ Zr6   r  c                      ^  \ rS rSrSr/ SQrS=r=r=rr	S=r
=rrSrSrSr/ SQrU 4S jrU 4S jrU 4S	 jrS
 rS rS rSrU =r$ )ParallelRangeNodeiF(  z
This node represents a 'for i in cython.parallel.prange():' construct.

target       NameNode       the target iteration variable
else_clause  Node or None   the else clause of this loop
)r   r  r	  rX   r  r  r  NT)scheduler   r  r  r  c                 H   > [         TU ]  " U40 UD6  [        U5      U l        g r   )ro   r   r$  r
  )r   r<   rY   rQ   s      r7   r   ParallelRangeNode.__init__\(  s!    %%$S)r6   c                   > [         TU ]  U5        U R                  R                  U5        U R                  b  U R                  R                  U5        U R
                  (       a  [        U R
                  5      S:  a  [        U R                  S5        g [        U R
                  5      S:X  a  U R
                  u  U l	        OR[        U R
                  5      S:X  a  U R
                  u  U l
        U l	        OU R
                  u  U l
        U l	        U l        U R                  S;  a%  [        U R                  SU R                  < 35        g g )Nr   z0Invalid number of positional arguments to pranger   r%   )Nstaticdynamicguidedruntimez%Invalid schedule argument to prange: )ro   r   r  rJ  r	  rX   rN   r   r<   r[  r]   r9
  r  r  s     r7   r   &ParallelRangeNode.analyse_declarationsa(  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r6   c                 
  > UR                   nU R                   (       a  SUl         U R                  c  [        U R                  S5        U $ U R                  R	                  U5      U l        U R                  R
                  R                  (       dr  U R                  R
                  R                  (       d7  [        U R                  R                  SU R                  R
                  -  5        [        R                  U l
        OU R                  R
                  U l
        SU l        U R                  U R                  U R                  4n[        X0R                  5       H  u  pEUc  M
  UR!                  U5        UR
                  R                  (       d  [        UR                  SU-  5        MQ  UR"                  (       d  UR%                  U5      n['        XU5        [        R(                  " U R                  UR
                  5      U l
        M     U R*                  b   U R*                  R-                  U5      U l        [/        U R                  SS 5      nU(       a9  U R                  R                  S 4U R0                  U R                  R2                  '   [4        TU ]Y  U5      nUR6                  (       Ga   UR8                  (       d!  [        UR6                  R                  S5        OUR8                  S:X  a!  [        UR6                  R                  S	5        OUR6                  R
                  R:                  (       aZ  UR6                  R"                  (       a?  UR6                  R=                  U5      S
::  a   [        UR6                  R                  S5        UR6                  R?                  [        R@                  U5      R%                  U5      Ul        UR                   (       a  X!l         URB                  =(       a    URB                  RD                  Ul#        URF                  (       a  UnURB                  (       aU  URB                  RD                  (       a:  URB                  nURB                  (       a  URB                  RD                  (       a  M:  UR0                  RI                  UR0                  5        URJ                  RI                  URJ                  5        URL                  RO                  URL                  5        U$ )NTz/prange() can only be used as part of a for loopzMust be of numeric type, not %s)r]   r[  r9
  z%s argument must be numericr-  z$Must provide schedule with chunksizer  z,Chunksize not valid for the schedule runtimer   zChunksize must not be negative)(r   r  r   r<   r   r  r  r  r
   rE  
index_typer  r]   r[  r9
  r  r}   r   rg  r   rE
  r	  r~   r   r  r-  ro   r  r  r  rM  r  r>  r   r  r2  r   r  r  r
  )	r   r   r@  start_stop_steprZ   rr   r  r   rQ   s	           r7   r~   %ParallelRangeNode.analyse_expressionsu(  s`   II	::CI;;$((MNKkk66s;{{** ;;##//dkkoo7$++:J:JJL )::DO"kk..DO -
**dii:ozz:JD""3'yy++$(($AD$HI..s3DD- #-"@"@OOTYY#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 ::!I $ E0E0E  F--FMM$;$; --FMM$;$;$; %%d&6&67OO""4==1!!(()<)<=r6   c                     SnU R                   U R                  U R                  U R                  U R                  4nU R                  XU5        g )N)r]   r[  r9
  r  r  )r]   r[  r9
  r  r  r  )r   r   r  r  s       r7   r  ParallelRangeNode.nogil_check(  s=    C

DIItyy$++t?W?WW$$S7r6   c                    U R                  U5        U R                  R                  R                  nUU R                  R                  R                  5       S.nU R                  U R                  U R                  4nSn[        X@R                  U5       HS  u  pgnUc  Un	OCUR                  (       a  UR                  5       n	O!UR                  U5        UR                  5       n	XU'   MU     U R                  b  U R                  R                  U5        UR                   R#                  U R$                  S5      US'   UR                   R#                  U R$                  S5      US'   U R                  bP  U R                  R'                  5       (       a1  U R                  R(                  S:X  a  [+        WR,                  S5        O>US	   R/                  5       (       a  [1        US	   5      S:X  a  UR3                  S
U-  5        U R5                  U5        UR6                  R9                  [:        R<                  " SS5      5        UR3                  SU-  5        UR3                  SU-  5        UR?                  5         U RA                  X5        URC                  5         U RE                  U5        U RF                  (       a  U RH                  (       a"  URK                  S[L        RN                  -  5        UR?                  5         UR3                  S5        U RF                  RQ                  U5        URC                  5         U RS                  U5        X@RT                  U R                  4-    H*  n
U
c  M  U
RW                  U5        U
RY                  U5        M,     UR                   R[                  US   5        UR                   R[                  US   5        U R]                  U5        g)a\  
Generate code in the following steps

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

    2)  allocate temps for start, stop and step

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

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

        becomes

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

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

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

        Also, you can't do this

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

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

    4) release our temps and write back any private closure variables
)r  r  )r3  r3  rN
  NFr)  nstepsr   z!Iteration with step 0 is invalid.r9
  zif (((%(step)s) == 0)) abort();IncludeStdlibHr
  zS%(nsteps)s = (%(stop)s - %(start)s + %(step)s - %(step)s/abs(%(step)s)) / %(step)s;zif (%(nsteps)s > 0)if (%s < 2)z
/* else */)/r  r  r-  r  r  rh  r]   r[  r9
  r  r  r   r  r{  r   r  r  r  r  r  r  r   r<   isdigitr  rV   r9  r  r  r   r   rE  generate_looprH  rn  r	  r&  r	  r	   r'  r   rv  r  r[  r  r  r  )r   r[   target_index_cnamefmt_dictr  defaultsrZ   rr   r  r   r  s              r7   r   )ParallelRangeNode.generate_execution_code(  s   P 	%%d+ "[[..44
 );;++BBD
 **dii: #&

H#MD| 88:--d3#TN $N ##/$$==dC44T__eL!^^99$//5Q 99 TYY%B%B%D%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 $~~t7O7O&PPD++D1% Q
 	##HSM2##HX$67%%d+r6   c                 	   U R                   (       a  UR                  S5        OUR                  S5        U R                  (       d=  UR                  S5        UR	                  5       U l        U R                  R
                  nOUR                  S5        U R                  b,  UR                  SU R                  R                  5       -  5        UR	                  5       U l        U R
                  nUR                  S5        UR                  S5        UR                  5         U R                  U5        U R                   (       a  UR                  S5        OUR                  S5        UR                  S5        [        U R                  R                  5       5       GH,  u  nu  pVU(       ax  US;   ar  X@R                  R                  :w  aY  UR                   R"                  (       a  [%        U R&                  S	5        Mb  UR                  S
U< SUR(                  < S35        M  X@R                  R                  :X  a>  UR                  SUR(                  -  5        UR                  SUR(                  -  5        M  UR                   R"                  (       a  M  U(       a  SnOSnUR                  SU< SUR(                  < S35        GM/     U R*                  (       aU  U R,                  (       a  SU R/                  XR,                  5      -  nOSnUR                  SU R*                  < U< S35        U R1                  U5        UR                  S5        UR                  S5        UR                  SU-  5        UR                  5         UR	                  5       n	UR                  5         UR                  SU-  5        U R3                  XR                  R                  S9  U R                  (       a+  U R                   (       d  UR4                  R7                  5         U R8                  R;                  U5        U R=                  USS9  U R                  (       a"  U R                   (       d  U R?                  U5        U R@                  (       a"  U	R                  S[B        RD                  -  5        URG                  5         URG                  5         U R                  (       a"  U RI                  U5        URG                  5         g g )Nz#if 0r@  z#pragma omp forz#pragma omp parallelz if(%s)r   rB  z+*-&^|z#Python objects cannot be reductionsz reduction(r[  r  r"  z lastprivate(%s)r  r  rJ   r  z, %sz
 schedule(z,for (%(i)s = 0; %(i)s < %(nsteps)s; %(i)s++)z=%(target)s = (%(target_type)s)(%(start)s + %(step)s * %(i)s);)r  T)rO  r  )%r2  rV   r  r	  rR   r$  r   r  r   rE  r=  r  r  rn   r  r-  r  r  r   r<   r  r  r  r  r  r  r  r  r   r   rT  r/  r&  r	   r'  rH  rG  )
r   r[   r  reduction_codepointr-  rk  r  r  r  guard_around_body_codepoints
             r7   r  ParallelRangeNode.generate_loopJ)  s     JJwJJ'(HH&'151E1E1GD."&++"K"KHH+,''3T%=%=%D%D%FFG151E1E1GD."&"D"DJJrNJJ-. %%d+$$

7#

+,HH&'(.t}}/B/B/D(E$E$BbHn++2C2C)C::))$(($IJ (++795;; GI KK---HH05;;>?HH/%++=>zz---""/"+HH'5;;?@- )F0 ==~~"T%?%?nn%UU		HH$--CD01

2

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

RU]]^''kk6G6G'HD$9$9NN113		))$/48D$9$9  &## (--mf>Q>Q.QR##D)NN r6   )	r	  r  r
  r  r$  r]   r9
  r[  r  )r.   r/   r0   r1   r   r   r   r  r	  rX   r]   r[  r9
  r  r   r  r  r   r   r~   r  r   r  r5   rx   ry   s   @r7   r  r  F(  ss    7K *.-D-6-K$ED4IEHa*
Z(Tl8
x,tf fr6   r  c                   <    \ rS rSrSrS/rS rS rS rS r	S r
S	rg
)CnameDecoratorNodei)  a  
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
rZ   c                 `   U R                   R                  U5        U R                   n[        U[        5      (       a  UR                  R
                  S   n[        U[        [        45      U l        [        U[        [        45      nUR                  nU R                  (       am  U R                  Ul        U R                  Ul        SUl        UR                  (       a2  SUR                  ;   a!  U R!                  UR                  5      Ul        g g g U(       a#  U R                  =Ul        UR"                  l        g UR$                  nU R                  Ul        U R                  S-   UR"                  l        [(        R*                  U R                  -   UR"                  l        U R                  S-   UR"                  l        UR"                  R.                  UR"                  R$                  l        UR"                  R.                  UR2                  l        U R                  S-   Ul        UR6                  R9                  5        Hi  u  pgUR                  (       a   U R!                  UR                  5      Ul        UR                  (       d  MI  U R!                  UR                  5      Ul        Mk     g )Nr   TrK   _obj_typer  )rZ   r   rO   r  r   r6  r  r[  is_functionr3  rm  r-  r  r  rD  r  r?  r  r:  rm  r	   typeobj_prefixrn  r  r\  r  r  r,  rn   )r   r   rZ   is_struct_or_enumr  r:  rr   r-  s           r7   r   'CnameDecoratorNode.analyse_declarations)  s   		&&s+yyd23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##'+{{5;;'?E$%%%)-U5G5G)HE&	  5r6   c                 \    SU;   a  UR                  S5      S   nU R                  < SU< 3$ )NrK   r   r  )rq  r  )r   r  s     r7   r?  CnameDecoratorNode.mangle)  s+    %<KK$R(E**e,,r6   c                 F    U R                   R                  U5      U l         U $ r   )rZ   r~   r   s     r7   r~   &CnameDecoratorNode.analyse_expressions)  r  r6   c                    U R                   (       a  UR                  (       a  UR                  S   n[        U R                  [
        5      (       a  U R                  R                  USSS9  O_SSKJn  U R                  R                  nUR                  nUR                  Ul
        UR                  UUR                  5       USS9  Xel
        U R                  R                  X5        g)	z=Ensure a prototype for every @cname method in the right placeutility_code_protoFTr  r   )
ModuleNode)
definitionN)r  r  r  rO   rZ   r  r  r   r  r-  r  r  generate_cfunction_declarationr)  r  )r   r   r[   h_coder  r-  r  s          r7   r  0CnameDecoratorNode.generate_function_definitions)  s     4 4%%&:;F$))W--		225T 3 C )		#..99$$&#	 : % $		//:r6   c                 :    U R                   R                  U5        g r   )rZ   r   r   s     r7   r   *CnameDecoratorNode.generate_execution_code*  ri  r6   )r  rZ   N)r.   r/   r0   r1   r   r   r   r?  r~   r  r   r5   r-   r6   r7   r  r  )  s+     (K$IL-;20r6   r  c                       \ rS rSrSr/ rSrg)	ErrorNodei*  z
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
r-   N)r.   r/   r0   r1   r   r   r5   r-   r6   r7   r  r  *  s     Kr6   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PrintOner
  rr	  RaiseExceptionGetExceptionSwapExceptionSaveResetExceptionAddTracebackr-   )r  r8  r  r   	itertoolsr   enumr   r   Errorsr   r   r   r   r   r	   r
   r   r   r   rR	  r   r   r   r   r   r   r   r   r   r   r   rl   r   StringEncodingr   r   r    r!   Pythranr"   r#   r$   Utilsr&   r'   r^  IntEnumr+   r=   rG   rc   r  re   r{   r   r   r  r   r5  rP  rW  rv  r  r  r  r  r  r  r  rK  rQ  r  rs  r  r  r  rj  r  r  r  r  r[  r3  rD  rm  r  r  r  rX  rC  r  r  re  r  r  r  r  r  r  r  r"  rB  r  r  r  r  r  r6  rH  r  rA  r  r  r  r
	  r$  r	  r#	  r+	  r  rJ	  rl	  rz	  r	  r	  r	  r	  r	  r	  r	  r	  r
  r
  r
  r
  r
  rk
  r
  r
  r
  r
  r'  r)  r  rR  rV  r\  rr
  r{  r  r  r  r  r  r  r  r  r  r  r  r  gcc_branch_hintsbranch_prediction_macrosr   r  r  r=  ra	  r
  r  r
  traceback_utility_coder-   r6   r7   <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 kN kN kN\2*T 2*j: :" 4 " J%t %*%!X %!Pd 2 /  Fi i$-O -i< ii'D i.k? .kbpM/ pMf
f? 
fk!4 k!\	!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g.(I g.T|; |~<D < D  K	k K	\_*[ _*D8<w 8<v# 
!< !
< 
M 7 M `{ {|	8Y 	r!\ r!jd	%L d	%N!8 !8#!H #!L $8 $=!8 =!@",X ",J >  D
h ^ h V/ ^ / dDQN DQN@&H @&F&8 &R5( 5p
$8 
$4l 4,H , +x + k&X k&\@&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^!t ^!BQ+ Q+h0 Q) Qh]( ]84K 4a=0 a=H
h 
2Z+ Zzc cS ba6 4*,h *,ZQ,( Q,ha% a%H4 wCx wCvGZ, GZTj( jZZ0 Z0z " 
   $//F '33JM  "-!8!89Ln!]  ,,-=~N (44^^T )55o~V *667K^\ $00P r6   