+
    VBiQ                       ^ RI t ] P                  ! Rr/ R]bR]bR]bR]bR]bR]bR]bR	]bR
]bR]bR]bR]bR]bR]bR]bR]b  ^ RIt^ RIt^ RIt^ RIHt ^RIH	t	 ^RIH
t
 ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHt ^RIHtHt ^RIHtHtHt ^RIHtHt ^RIHt ^RIHt ^R IHtHtHtH t   ! R! R"4      t! ! R# R$]4      t" ! R% R&]4      t#R't$R(t%R)t& ! R* R+]4      t' ! R, R-]4      t( ! R. R/]4      t)R0 t*R1 t+R2 t,] PZ                  R3 R4 l4       t.] PZ                  R5 R6 l4       t/ ! R7 R8]]!4      t0 ! R9 R:]]!4      t1 ! R; R<]4      t2 ! R= R>]]!4      t3 ! R? R@]]!4      t4 ! RA RB]]!4      t5 ! RC RD]]!4      t6 ! RE RF]]!4      t7 ! RG RH]]!4      t8 ! RI RJ]4      t9 ! RK RL]4      t:RM t; ! RN RO]4      t< ! RP RQ]4      t= ! RR RS]4      t> ! RT RU]4      t? ! RV RW]]!4      t@ ! RX RY]4      tA ! RZ R[]4      tB ! R\ R]]4      tC ! R^ R_]4      tD ! R` Ra]4      tE ! Rb Rc]4      tF ! Rd Re]]!4      tG ! Rf Rg]4      tH ! Rh Ri]]!4      tI ! Rj Rk]4      tJ ! Rl Rm]4      tK ! Rn Ro]4      tL ! Rp Rq]4      tMR# )s    N
PyrexTypesNaming	ExprNodesNodesOptions	UtilNodesLetNode
LetRefNodeTreeFragmentEncodedStringerrorwarningcopyhashlibsys
itemgetter)r   )Code)r   )r   )r   )r   )r   )Builtin)Errors)VisitorTransformTreeVisitor)CythonTransformEnvTransformScopeTrackingTransform)r	   r
   )r   )r   )r   r   CompileErrorInternalErrorc                   N   a  ] tR t^t o RtR tR tR tR tR t	R t
R tR	tV tR
# )SkipDeclarationsa  
Variable and function declarations can often have a deep tree structure,
and yet most transformations don't need to descend to this depth.

Declaration nodes are removed after AnalyseDeclarationsTransform, so there
is no need to use this for transformations after that point.
c                    V# N selfnodes   &&H/usr/lib/python3.14/site-packages/Cython/Compiler/ParseTreeTransforms.pyvisit_CTypeDefNode#SkipDeclarations.visit_CTypeDefNode&           c                    V# r    r!   r"   s   &&r%   visit_CVarDefNode"SkipDeclarations.visit_CVarDefNode)   r(   r)   c                    V# r    r!   r"   s   &&r%   visit_CDeclaratorNode&SkipDeclarations.visit_CDeclaratorNode,   r(   r)   c                    V# r    r!   r"   s   &&r%   visit_CBaseTypeNode$SkipDeclarations.visit_CBaseTypeNode/   r(   r)   c                    V# r    r!   r"   s   &&r%   visit_CEnumDefNode#SkipDeclarations.visit_CEnumDefNode2   r(   r)   c                    V# r    r!   r"   s   &&r%   visit_CStructOrUnionDefNode,SkipDeclarations.visit_CStructOrUnionDefNode5   r(   r)   c                J    VP                   R 8w  d   V P                  V4       V# )extern)
visibilityvisitchildrenr"   s   &&r%   visit_CppClassNode#SkipDeclarations.visit_CppClassNode8   s!    ??h&t$r)   r!   N)__name__
__module____qualname____firstlineno____doc__r&   r+   r.   r1   r4   r7   r=   __static_attributes____classdictcell____classdict__s   @r%   r   r      s2      r)   r   c                   p   a a ] tR t^?t oRtV 3R ltR tR tRR ltR t	R t
R tR	 tR
 tR tRtVtV ;t# )NormalizeTreea\  
    This transform fixes up a few things after parsing
    in order to make the parse tree more suitable for
    transforms.

    a) After parsing, blocks with only one statement will
    be represented by that statement, not by a StatListNode.
    When doing transforms this is annoying and inconsistent,
    as one cannot in general remove a statement in a consistent
    way and so on. This transform wraps any single statements
    in a StatListNode containing a single statement.

    b) The PassStatNode is a noop and serves no purpose beyond
    plugging such one-statement blocks; i.e., once parsed a
`    "pass" can just as well be represented using an empty
    StatListNode. This means less special cases to worry about
    in subsequent transforms (one always checks to see if a
    StatListNode has no children to see if the block is empty).
    c                B   < \         SV `  V4       R V n        R V n        R# FN)super__init__is_in_statlist
is_in_exprr#   context	__class__s   &&r%   rM   NormalizeTree.__init__T   s    !#r)   c                    V P                  V4       \        VP                  \        P                  4      '       g3   \        P                  ! VP
                  VP                  .R 7      Vn        V# posstats)r<   
isinstancebodyr   StatListNoderW   r"   s   &&r%   visit_ModuleNodeNormalizeTree.visit_ModuleNodeY   sJ    4 $))U%7%788**txx		{KDIr)   c                Z    V P                   pR V n         V P                  V4       W n         V# T)rO   r<   )r#   r$   stacktmps   && r%   visit_ExprNodeNormalizeTree.visit_ExprNode`   s*    ??4 "r)   c                    V P                   pW n         V P                  V4       W0n         V P                   '       g6   V P                  '       g$   \        P                  ! VP
                  V.R 7      # V# rU   )rN   r<   rO   r   r[   rW   )r#   r$   is_listcontainerr`   s   &&& r%   visit_StatNodeNormalizeTree.visit_StatNodeg   sY    &&.4 &"""4???%%$((4&AAKr)   c                D    R V n         V P                  V4       RV n         V# TF)rN   r<   r"   s   &&r%   visit_StatListNode NormalizeTree.visit_StatListNodeq   s%    "4 #r)   c                &    V P                  VR 4      # r_   re   r"   s   &&r%   visit_ParallelAssignmentNode*NormalizeTree.visit_ParallelAssignmentNodew       ""4..r)   c                &    V P                  VR 4      # r_   rl   r"   s   &&r%   r4    NormalizeTree.visit_CEnumDefNodez   ro   r)   c                &    V P                  VR 4      # r_   rl   r"   s   &&r%   r7   )NormalizeTree.visit_CStructOrUnionDefNode}   ro   r)   c                    VP                   P                  '       d+   \        P                  ! VP                   P                  4      # V P                  V4      # )z!Eliminate useless string literals)expris_string_literalr   PassStatNoderW   re   r"   s   &&r%   visit_ExprStatNode NormalizeTree.visit_ExprStatNode   s<    99&&&%%diimm44&&t,,r)   c                    V# r    r!   r"   s   &&r%   r.   #NormalizeTree.visit_CDeclaratorNode   r(   r)   )rO   rN   F)r?   r@   rA   rB   rC   rM   r\   ra   re   ri   rm   r4   r7   rx   r.   rD   rE   __classcell__rR   rG   s   @@r%   rI   rI   ?   sA     ( 
///- r)   rI   c                       ] tR t^tRtR# )PostParseErrorr!   N)r?   r@   rA   rB   rD   r!   r)   r%   r   r      s    Dr)   r   zHCannot assign default value to fields in cdef classes, structs or unionsz0Invalid buffer defaults specification (see docs)z0Special attributes must not have a type declaredc                      a a ] tR t^t oRtV 3R ltR tR tR tR t	R t
R tR	 tR
 tR tR tR tR tR tR tR tR tR tR tRtVtV ;t# )	PostParsea=  
Basic interpretation of the parse tree, as well as validity
checking that can be done on a very basic level on the parse
tree (while still not being a problem with the basic syntax,
as such).

Specifically:
- Default values to cdef assignments are turned into single
assignments following the declaration (everywhere but in class
bodies, where they raise a compile error)

- Interpret some node structures into Python runtime values.
Some nodes take compile-time arguments (currently:
TemplatedTypeNode[args] and __cythonbufferdefaults__ = {args}),
which should be interpreted. This happens in a general way
and other steps should be taken to ensure validity.

Type arguments cannot be interpreted in this way.

- For __cythonbufferdefaults__ the arguments are checked for
validity.

TemplatedTypeNode has its directives interpreted:
Any first positional argument goes into the "dtype" attribute,
any "ndim" keyword argument goes into the "ndim" attribute and
so on. Also it is checked that the directive combination is valid.
- __cythonbufferdefaults__ attributes are parsed and put into the
type information.

Note: Currently Parsing.py does a lot of interpretation and
reorganization that can be refactored into this transform
if a more pure Abstract Syntax Tree is wanted.

- Some invalid uses of := assignment expressions are detected
c                Z   < \         SV `  V4       R V P                  /V n        RV n        R# )__cythonbufferdefaults__FN)rL   rM   handle_bufferdefaultsspecialattribute_handlersin_pattern_noderP   s   &&r%   rM   PostParse.__init__   s/    !&)C)C*
&  %r)   c           
        \        4       pVP                  VP                  4       VP                  '       g=   VP                  '       g+   \        VP                  \        P                  4      '       d8   \        P                  ! VP                  P                  VP                  R 7      pM6\        P                  ! VP                  P                  VP                  R7      p\        P                  ! VP                  VP                  VP                  VP                  VP                   VRR7      Vn        V P                  V4       V# )ru   valueN)nameargsstar_argstarstar_argrZ   doc)YieldNodeCollectorr<   result_expr	has_yield	has_awaitrY   r   YieldExprNoder   ExprStatNoderW   ReturnStatNodeDefNoder   r   r   r   def_node)r#   r$   	collectorrZ   s   &&  r%   visit_LambdaNodePostParse.visit_LambdaNode   s    &(	 0 01)"5"5"5DDTDTV_VmVm9n9n%%  $$4+;+;=D ''  $$D,<,<>DHH499T]]**4	!
 	4 r)   c                n   \        4       pVP                  VP                  R R.R7       \        P                  ! VP
                  VP                  R . R R VP                  VP                  RR7	      Vn        \        P                  VP                  V P                  R9   R7       V P                  V4       V# )NiteratorattrsexcludeT)r   r   r   r   r   rZ   is_async_defis_generator_expressionscope_is_classpyclasscclass)r   r<   loopr   r   rW   r   r   r   _AssignmentExpressionChecker	do_checks
scope_typer#   r$   r   s   && r%   visit_GeneratorExpressionNode'PostParse.visit_GeneratorExpressionNode   s    &(			
|LHH499$d)<)<$(	*
 	%..tyy\qIq.r4 r)   c                $   VP                   '       g?   \        4       pVP                  VP                  4       VP                  '       d   R Vn         \
        P                  VP                  V P                  R9   R7       V P                  V4       V# )Tr   r   )has_local_scoper   r<   r   r   r   r   r   r   s   && r%   visit_ComprehensionNode!PostParse.visit_ComprehensionNode   sp    ###*,I##DII."""'+$$..tyy\qIq.r4 r)   c                    \        VP                  \        P                  4      '       g   \	        VP
                  \        4      hVP                  V P                  n        VP
                  V P                  n	        R # r    )
rY   defaultr   DictNoder   rW   ERR_BUF_DEFAULTS
scope_nodebuffer_defaults_nodebuffer_defaults_pos)r#   decls   &&r%   r   PostParse.handle_bufferdefaults   sK    $,,	(:(:;; +;<</3||,.2hh+r)   c                <    V P                  V4       V.p. pVP                   EF  pTp\        V\        P                  \        P
                  34      '       d   VP                  pK>  \        V\        P                  4      '       EdD   VP                  Ee5   V P                  R9   d   \        V P                  \        P                  4      '       dX   V P                  P                  VP                  4      pV'       d+   WEJd   \        VP                   \"        4      hV! V4       EK  \        VP                   \$        4      hV P                  R8g  pVP'                  \        P(                  ! VP                   \*        P,                  ! VP                   VP                  R7      VP                  VVP.                  R7      4       R Vn        VP'                  V4       EK  	  W1n        V#   \         d'   pT P0                  P3                  T4        R p?R # R p?ii ; i)Nmoduler   )lhsrhsfirstfrom_pxd_cvardef)r   r   struct)r<   declaratorsrY   r   CPtrDeclaratorNodeCConstDeclaratorNodebaseCNameDeclaratorNoder   r   r   CClassDefNoder   getr   r   rW   ERR_INVALID_SPECIALATTR_TYPEERR_CDEF_INCLASSappendSingleAssignmentNoder   NameNodein_pxdrQ   nonfatal_error)	r#   r$   rX   newdeclsr   declbasehandlerfirst_assignmentes	   &&       r%   r+   PostParse.visit_CVarDefNode   s   
 	t$FEH(( E,D,DeF`F`+abb'}}Hh(A(ABB''3??.MM)$//5;N;NOO*.*H*H*L*LTYY*W#*'+';.<TXXGc.d(d$+DM$,"0;K"LL+/??h+F(U%?%? ) 2 2488(-- P ( 0 08H-1[[&: ; ,0(%+ ),  (L 	 LL''*		s   C=G*  C)G* *H5HHc                r    V P                  V4       V P                  WP                  VP                  .4      # r    )r<   _visit_assignment_noder   r   r"   s   &&r%   visit_SingleAssignmentNode$PostParse.visit_SingleAssignmentNode  s.    4 **4((DHH1EFFr)   c                ~    V P                  V4       V P                  WP                  VP                  .,           4      # r    )r<   r   lhs_listr   r"   s   &&r%   visit_CascadedAssignmentNode&PostParse.visit_CascadedAssignmentNode  s0    4 **4$((1KLLr)   c                   \        V Uu. uF+  pVP                  '       g   VP                  '       g   K)  ^NK-  	  up4      ^8  d   V# . p\        W$4       . p\	        WE4       . pV F  pVRR pVR,          p\        V4      ^8X  d,   \        P                  ! VP                  V^ ,          VR7      pM"\        P                  ! VP                  WxR7      pVP                  V4       K  	  \        V4      ^8X  d   V^ ,          p	M)\        P                  ! V^ ,          P                  VR7      p	V'       dI   V U
u. uF  p
V
P                  V
3NK  	  pp
\        V4       VRRR1,           F  w  r\        W4      p	K  	  V	# u upi u up
i )zWFlatten parallel assignments into separate single
assignments or cascaded assignments.
Nr   r   )r   r   rX   )sumis_sequence_constructorrv   flatten_parallel_assignmentseliminate_rhs_duplicateslenr   r   rW   CascadedAssignmentNoder   ParallelAssignmentNode
expressionsort_common_subsequencesr	   )r#   r$   	expr_listru   expr_list_list	temp_refsnodesr   r   assign_nodetempduplicates_and_temps_temp_refs   &&&           r%   r    PostParse._visit_assignment_node#  sw    y Myt000D4J4J y M NPQR K$Y?	 ;'I "~HB-C8}!11#''"1+S2 33CGG'4LL ( u:?(K66uQx||USK1:$=1: '+oot%<1: ! $=$%9:3DbD99%h<  : EM8$=s   E?E?E?9Fc                    VP                    F9  pVP                  '       d   V P                  W24       K(  VP                  V4       K;  	  V# r    )r   r   _flatten_sequencer   )r#   seqresultargs   &&& r%   r   PostParse._flatten_sequenceK  s=    88C***&&s3c"	 
 r)   c                V    V P                  V4       V P                  V. 4      Vn        V# r    )r<   r   r   r"   s   &&r%   visit_DelStatNodePostParse.visit_DelStatNodeS  s)    4 **44	r)   c                   VP                   '       d   \        P                  ! VP                  \        P
                  ! VP                  P                  VP                  P                  R 7      .RR7      p\        P                  ! VP                  \        P                  ! VP                  VP                  \        P                  ! VP                  V.R7      R7      .R7      Vn
        V P                  V4       V# )r   T)r   ignore_nonexistingr   )rZ   finally_clause)is_except_asr   DelStatNoderW   r   r   targetr   r[   TryFinallyStatNoderZ   r<   )r#   r$   
del_targets   && r%   visit_ExceptClauseNode PostParse.visit_ExceptClauseNodeX  s    **((KKOO$++*:*:< =#'	)J
 **//HH#(#5#5)l$,- ./DI 	4 r)   c           
        VP                   fg   \        P                  ! VP                  \        P
                  ! VP                  \        R4      R7      VP                  RRRRR7      Vn         RVn        V P                  V4       V# )zUExtract the exception raising into a RaiseStatNode to simplify GIL handling.
        NAssertionErrorr   T)exc_type	exc_valueexc_tbcausebuiltin_exc_namewrap_tuple_value)		exceptionr   RaiseStatNoderW   r   r   r   r   r<   r"   s   &&r%   visit_AssertStatNodePostParse.visit_AssertStatNodek  sp     >>!"00"++DHH=IY;Z[**!1!%DN DJ4 r)   c                F    \        VP                  VP                  4       R # r    )r   rW   whatr"   s   &&r%   visit_ErrorNodePostParse.visit_ErrorNode|  s    dhh		"r)   c                H    VP                  4        V P                  V4       V# r    )validate_targetsr<   r"   s   &&r%   visit_MatchCaseNodePostParse.visit_MatchCaseNode  s!    4 r)   c                H    VP                  4        V P                  V4       V# r    )validate_irrefutabler<   r"   s   &&r%   visit_MatchNodePostParse.visit_MatchNode  s!    !!#4 r)   c                Z    V P                   R uq n         V P                  V4       W n         V# r_   )r   r<   )r#   r$   r   s   && r%   visit_PatternNodePostParse.visit_PatternNode  s.    040D0Dd--4 .r)   c                x    V P                   '       d   \        VP                  R 4       V P                  V4       V# )z/f-strings are not accepted for pattern matching)r   r   rW   r<   r"   s   &&r%   visit_JoinedStrNodePostParse.visit_JoinedStrNode  s0    $((MN4 r)   c                    V P                   R 8X  d9   VP                  R9   d(   \        VP                  RVP                   R2^4       R# V P	                  V4      # )r   'zD' relates to the old Python 2 buffer protocol and is no longer used.N)__getreadbuffer____getwritebuffer____getsegcount____getcharbuffer__)r   r   r   rW   visit_FuncDefNoder"   s   &&r%   visit_DefNodePostParse.visit_DefNode  sT    OOx'		ppDHH$)) -- -./1%%d++r)   )r   r   )r?   r@   rA   rB   rC   rM   r   r   r   r   r+   r   r   r   r   r   r
  r  r  r  r"  r%  r(  r1  rD   rE   r}   r~   s   @@r%   r   r      ss     "F%$	7%\GM&P
&"

, ,r)   r   c                   P   a a ] tR tRt oV 3R ltR tR tR tR tR t	Rt
VtV ;t# )	%_AssignmentExpressionTargetNameFinderi  c                2   < \         SV `  4        / V n        R # r    )rL   rM   target_namesr#   rR   s   &r%   rM   ._AssignmentExpressionTargetNameFinder.__init__  s    r)   c                    VP                   '       d   VP                  .# VP                  '       d8   . pVP                   F#  pVP	                  V P                  V4      4       K%  	  V# . # r    )is_namer   r   r   extendfind_target_names)r#   r  namesr   s   &&  r%   r<  7_AssignmentExpressionTargetNameFinder.find_target_names  sW    >>>KK= +++E{{T33C89 #L	r)   c                    \        V P                  VP                  4      4      V P                  V&   V P	                  V4       R # r    )tupler<  r  r6  r<   r"   s   &&r%   visit_ForInStatNode9_AssignmentExpressionTargetNameFinder.visit_ForInStatNode  s4    "'(>(>t{{(K"L$4 r)   c                    R # r    r!   r"   s   &&r%   r   =_AssignmentExpressionTargetNameFinder.visit_ComprehensionNode      r)   c                    R # r    r!   r"   s   &&r%   r   6_AssignmentExpressionTargetNameFinder.visit_LambdaNode  rE  r)   c                (    V P                  V4       R # r    r<   r"   s   &&r%   
visit_Node0_AssignmentExpressionTargetNameFinder.visit_Node      4 r)   )r6  )r?   r@   rA   rB   rM   r<  rA  r   r   rJ  rD   rE   r}   r~   s   @@r%   r4  r4    s(     	!! !r)   r4  c                   v   a a ] tR tRt oRtV 3R ltR tR t]R 4       t	R t
R tR	 tR
 tR tR tRtVtV ;t# )r   i  zY
Enforces rules on AssignmentExpressions within generator expressions and comprehensions
c                H  < \         SV `  4        \        4       pVP                  V4       VP                  V n        R V n        R V n        W n        RV n	        \        4       V n        V P
                  P                  4        F  pV P                  P                  V4       K   	  R# )FNr!   )rL   rM   r4  visitr6  target_names_dictin_iteratorin_nested_generatorr   current_target_namessetall_target_namesvaluesupdate)r#   	loop_noder   target_name_finderr=  rR   s   &&&  r%   rM   %_AssignmentExpressionChecker.__init__  s    BD  +!3!@!@ #( ,$&! #++224E!!((/ 5r)   c                    V P                   V P                  V P                  V P                  V P                  3pR V n        R V n        RV n        \        4       V n        V# )Fr!   )rQ  rR  r   rU  rS  rT  r#   	old_states   & r%   _reset_state)_AssignmentExpressionChecker._reset_state  se    %%t'?'?ATATVZVkVkmq  nG  nG  H	#( #$&! #r)   c                H    Vw  V n         V n        V n        V n        V n        R # r    )rQ  rR  r   rU  rS  r\  s   &&r%   
_set_state'_AssignmentExpressionChecker._set_state  s&     }Fy$2D4GI^`d`yr)   c                8    V ! W4      pVP                  V4       R # r    )rO  )clsrX  r   checkers   &&& r%   r   &_AssignmentExpressionChecker.do_checks  s    i0i r)   c                f   V P                   '       d   V P                  V4       R # V P                  pV P                  P	                  VR 4      pV'       d   V ;P                  V,          un        RV n        V P                  VP                  4       RV n        V P                  VRR7       W n        R # )NTFr   )r   )rR  r<   rS  rP  r   rQ  rO  r   )r#   r$   rS  target_names   &&  r%   rA  0_AssignmentExpressionChecker.visit_ForInStatNode  s    ###t$#88,,00t<%%4%

4==! 47$8!r)   c                   V P                   '       d   \        VP                  R 4       V P                  '       d   \        VP                  R4       VP                  V P
                  9   d*   \        VP                  RVP                  ,          4       R# VP                  V P                  9   d*   \        VP                  RVP                  ,          4       R# R# )zKassignment expression cannot be used in a comprehension iterable expressionzKassignment expression within a comprehension cannot be used in a class bodyzIassignment expression cannot rebind comprehension iteration variable '%s'zHcomprehension inner loop cannot rebind assignment expression target '%s'N)rQ  r   rW   r   ri  rS  rU  r"   s   &&r%   visit_AssignmentExpressionNode;_AssignmentExpressionChecker.visit_AssignmentExpressionNode  s    $((ij$((ijt888$((g""# $!6!66$((f""# $ 7r)   c                ~    V P                  4       pV P                  VP                  4       V P                  V4       R # r    )r^  rO  r   ra  )r#   r$   r]  s   && r%   r   -_AssignmentExpressionChecker.visit_LambdaNode  s0     %%'	

4##$	"r)   c                Z    V P                   pR V n         V P                  V4       W n         R# TN)rR  r<   r#   r$   rR  s   && r%   r   4_AssignmentExpressionChecker.visit_ComprehensionNode  s*    "66#' 4 #6 r)   c                n    V P                   pR V n         V P                  VP                  4       W n         R# rq  )rR  rO  r   rr  s   && r%   r   :_AssignmentExpressionChecker.visit_GeneratorExpressionNode  s,    "66#' 

499#6 r)   c                (    V P                  V4       R # r    rI  r"   s   &&r%   rJ  '_AssignmentExpressionChecker.visit_Node  rL  r)   )rU  rS  rQ  rR  r   rP  )r?   r@   rA   rB   rC   rM   r^  ra  classmethodr   rA  rl  r   r   r   rJ  rD   rE   r}   r~   s   @@r%   r   r     sQ     0F ! !9"
$#77! !r)   r   c                H  aaaaa \        4       o/ oVVVV3R loV  F  pVR,          pS! V4       K  	  S'       g   R# VV3R loS F;  pVP                  '       g   K  \        \        SVP                  4      4      Vn        K=  	  V  F  pS! VR,          4      VR&   K  	  R# )zReplace rhs items by LetRefNodes if they appear more than once.
Creates a sequence of LetRefNodes that set up the required temps
and appends them to ref_node_sequence.  The input list is modified
in-place.
c                 :  < V P                   '       g   V P                  '       d   R # V S9   d-   V S9  d$   \        V 4      pVSV &   SP                  V4       R # R # SP	                  V 4       V P
                  '       d   V P                   F  pS! V4       K  	  R # R # r    )
is_literalr:  r
   r   addr   r   )r$   ref_nodeitemfind_duplicatesref_node_sequence	ref_nodes
seen_nodess   &  r%   r  1eliminate_rhs_duplicates.<locals>.find_duplicates  s    ???dlll :9$%d+"*	$!((2 %
 NN4 +++ IID#D) & ,r)   Nc                    < V S9   d
   SV ,          # V P                   '       d%   \        \        SV P                  4      4      V n        V # r    )r   listmapr   )r$   r  substitute_nodess   &r%   r  2eliminate_rhs_duplicates.<locals>.substitute_nodes4  s>    9T?")))S!1499=>DIr)   r   )rT  r   r  r  r   )	r   r  r   r   r$   r  r  r  r  s	   &f   @@@@r%   r   r     s     JI* *  $	m $  '''S!1499=>DI 
 $	(27	" $r)   c                4  a V3R loV3R lp\        V 4       F{  w  r#V^,          pTp\        V^,
          RR4       F#  pV! W@V,          ^ ,          4      '       g   K!  TpK%  	  WR8w  g   KS  \        W%R4       F  pW^,
          ,          W&   K  	  W0V&   K}  	  R# )a  Sort items/subsequences so that all items and subsequences that
an item contains appear before the item itself.  This is needed
because each rhs item must only be evaluated once, so its value
must be evaluated first and then reused when packing sequences
that contain it.

This implies a partial order, and the sort must be stable to
preserve the original order as much as possible, so we use a
simple insertion sort (which is very fast for short sequences, the
normal case in practice).
c                    < V  F;  pW!J d    R # VP                   '       g   K  S! VP                  V4      '       g   K:   R # 	  R# rh   r   r   )r   xr~  containss   && r%   r  *sort_common_subsequences.<locals>.containsP  s9    Dy---(499a2H2H	 
 r)   c                 R   < VP                   ;'       d    S! VP                  V 4      # r    r  )abr  s   &&r%   
lower_than,sort_common_subsequences.<locals>.lower_thanW  s"    ((@@Xaffa-@@r)   Nr   )	enumeraterange)itemsr  rW   r~  keynew_posir  s   &      @r%   r   r   D  s    A u%	1gs1ub"%A#Qx{++ & >3, 1: -!'N &r)   c                     . pV P                   pV P                  pV P                  pVP                  pV F#  pV! V4      pVP                  V! W'R 7      4       K%  	  V# )r   )rW   rR   r   r   )literalcharsrW   stypesval	sval_typecharcvals   &       r%   #unpack_string_to_character_literalsr  f  sX    E
++CE==DIU3+,  Lr)   c                0    V ^8  d   QhR\         R\         /# )   inputoutputr  )formats   "r%   __annotate__r  s  s     H# H# H#d H#r)   c                    V R,          pVP                   '       g!   \        V\        P                  4      '       d.   \	        V RR  Uu. uF  q3P                   NK  	  up4      '       g   VP                  V 4       R# . pVP                   '       d   VP                  pMVP                  '       d   \        V4      p\        X4      p\        V4       Uu. uF  p. NK  	  pp. p	V RR  EF  pVP                   '       g<   VP                  '       d   \        VP                  R4       VP                  V4       KQ  \        VP                  4      p
^ pVP                   F  pV\        VP                  4      ,          pK!  	  V^8  d+   \        VP                  R4       VP                  W2.4       K  W,
          V8  dK   \        VP                  RYf^8g  ;'       d    R;'       g    R3,          4       VP                  W2.4       EK  V'       d   \        WVP                  V4       EKA  W8  d4   \        VP                  RW3,          4       VP                  W2.4       EKz  \!        WP                  4       F  w  rVP                  V4       K  	  EK  	  V'       d#   VP                  V4       VP                  V4       \!        W4       F+  w  rV'       g   K  VP                  V4       \#        W4       K-  	  V	 F:  pV^ ,          P                   '       d   \#        W4       K)  VP                  V4       K<  	  R# u upi u upi )	   Nz4starred assignment target must be in a list or tuplez,more than 1 starred expression in assignmentz#need more than %d value%s to unpacks z/too many values to unpack (expected %d, got %d)r   )r   rY   r   UnicodeNoder   r   r   rv   r  r   r  
is_starredr   rW   boolmap_starred_assignmentzipr   )r  r  r   r   complete_assignmentsrhs_argsrhs_sizer   lhs_targetsstarred_assignmentslhs_sizestarred_targetsru   targetscascades   &&             r%   r   r   r  s    )C(((JsI<Q<Q,R,RuSbzJz33zJKKe
"""88				6s; #&h-H$X/!2K/Sbz***~~~cggUV '',sxx=HHDtDOO44O Q#''IJMM3)$'(2#''@A663<<"=> ?MM3)$";#&88X7 #''L() *MM3)$!$[((!;t$ "<9 > ##C(*+ K27NN3(9 3 '1:---(9MM'"	 'w K 0s   L:L?c                H    V ^8  d   QhR\         R\         R\         R\         /# )r  r  r  lhs_argsr  r  )r  s   "r%   r  r    s0     $@ $@ $@4 $@SW $@cg $@r)   c                 @   \        \        W4      4       FH  w  pw  rVVP                  '       d   Tp\        V4      V,
          ^,
          p M VP	                  V4       KJ  	  \        R4      h\        \        W) R W'^,           R 4      4       F  w  pw  rVVP	                  V4       K  	  W',          P                  p	W7R p
V'       d   V
RV)  p
V
'       d   V
^ ,          P                  pMV	P                  pVP	                  V	\        P                  ! WR7      .4       R# )r  z6no starred arg found when splitting starred assignmentN)rW   r   )
r  r  r  r   r   r   r  rW   r   ListNode)r  r  r  r  r  r  ru   starredlhs_remainingr  starred_rhsrW   s   &&&&        r%   r  r    s    (K(BC?G???GMA-1Mt D TUU (K,H,4q[\,B)D E?GtE
 %%F8$K!/M>2!n  jj	""s= ? @r)   c                   J   a a ] tR tRt oRtRtRtV 3R ltR tR t	Rt
VtV ;t# )	PxdPostParsei  ad  
Basic interpretation/validity checking that should only be
done on pxd trees.

A lot of this checking currently happens in the parser; but
what is listed below happens here.

- "def" functions are let through only if they fill the
getbuffer/releasebuffer slots

- cdef functions are let through only if they are on the
top level and are declared "inline"
z>function definition in pxd file must be declared 'cdef inline'z5inline function definition in pxd file cannot be '%s'c                0   < R V n         \        SV `	  V4      # )pxd)r   rL   __call__r#   r$   rR   s   &&r%   r  PxdPostParse.__call__  s    w%%r)   c                Z    V P                   pR V n         V P                  V4       W n         V# r   )r   r<   )r#   r$   olds   && r%   visit_CClassDefNode PxdPostParse.visit_CClassDefNode  s*    oo"4 r)   c                r   V P                   p\        V\        P                  4      '       d%   V P                  R 8X  d   VP
                  R9   d   Rp\        V\        P                  4      '       d   RVP                  9   dq   V P                  R9   d`   RVn        VP                  R8w  d   V P                  VP                  ,          pM5VP                  '       d   V P                  R,          pMRpMV P                   pV'       d2   V P                  P                  \        VP                  V4      4       R# V# )r   NinlineTprivateapi)__getbuffer____releasebuffer__)r  r   )ERR_INLINE_ONLYrY   r   r   r   r   CFuncDefNode	modifiersinline_in_pxdr;   ERR_NOGO_WITH_INLINEr  rQ   r   r   rW   )r#   r$   errs   && r%   r0  PxdPostParse.visit_FuncDefNode  s     ""tU]]++80KII!GGCdE..//DNN*OO'88%)"??i/33dooECXXX33e;CC**LL''txx(EFKr)   )r   )r?   r@   rA   rB   rC   r  r  r  r  r0  rD   rE   r}   r~   s   @@r%   r  r    s,      WOR& r)   r  c                   V   a a ] tR tRt oV 3R ltR tR t]P                  t	Rt
VtV ;t# )TrackNumpyAttributesi  c                B   < \         SV `  4        \        4       V n        R # r    )rL   rM   rT  numpy_module_namesr7  s   &r%   rM   TrackNumpyAttributes.__init__!  s    "%%r)   c                    VP                   R 8X  d0   V P                  P                  VP                  ;'       g    R 4       V# )numpy)module_namer  r|  as_namer"   s   &&r%   visit_CImportStatNode*TrackNumpyAttributes.visit_CImportStatNode%  s5    w&##''(?(?@r)   c                    V P                  V4       VP                  pVP                  '       d   VP                  V P                  9   g   VP
                  '       d   R Vn        V# r_   )r<   objr:  r   r  is_numpy_attribute)r#   r$   r  s   && r%   visit_AttributeNode(TrackNumpyAttributes.visit_AttributeNode*  sK    4 hhKKKCHH(?(??CDZDZDZ&*D#r)   )r  )r?   r@   rA   rB   rM   r  r  r   recurse_to_childrenrJ  rD   rE   r}   r~   s   @@r%   r  r    s#     (
 "55JJr)   r  c                   N  a a ] tR tRt oRtR]P                  R]P                  R]P                  R]P                  ! RR4      R	]P                  ! RR
4      R]P                  ! RR4      R]P                  ! RR
4      R]P                  R]P                  /	tR]P                  ! R4      /t0 R/mt]P                  ]4       0 R0mt0 R1mtV 3R ltR tR tR tR tR tR tR tR tR tR tR tR tR tR  t R! t!R" t"R# t#R$ t$R% t%R& t&R' t'R( t(R) t)R* t*R+ t+R, t,R- t-R.t.Vt/V ;t0# )2InterpretCompilerDirectivesi4  a  
After parsing, directives can be stored in a number of places:
- #cython-comments at the top of the file (stored in ModuleNode)
- Command-line arguments overriding these
- @cython.directivename decorators
- with cython.directivename: statements
- replaces "cython.compiled" with BoolNode(value=True)
  allowing unreachable blocks to be removed at a fairly early stage
  before cython typing rules are forced on applied

This transform is responsible for interpreting these various sources
and store the directive in two ways:
- Set the directives attribute of the ModuleNode for global directives.
- Use a CompilerDirectivesNode to override directives for a subtree.

(The first one is primarily to not have to modify with the tree
structure, so that ModuleNode stay on top.)

The directives are stored in dictionaries from name to value in effect.
Each such dictionary is always filled in for all possible directives,
using default values where no value is given by the user.

The available directives are controlled in Options.py.

Note that we have to run this prior to analysis, and so some minor
duplication of functionality has to occur: We manually track cimports
and which names the "cython" module may have been imported to.
typeofzoperator.addresszoperator.dereferencezoperator.preincrementTz++zoperator.predecrementz--zoperator.postincrementFzoperator.postdecrementzoperator.typeidaddresszoperator.comma,c                8  < \         SV `  V4       \        4       V n        R R /V n        / V n        \        P                  ! \        P                  ! 4       4      pVP                  4        F'  w  rE\        P                  ! V4      V\        V4      &   K)  	  W0n        R# )staticmethodN)rL   rM   rT  cython_module_namesdirective_namesparallel_directivesr   deepcopyr   get_directive_defaultsr  str
directives)r#   rQ   compilation_directive_defaultsr  r  r   rR   s   &&&   r%   rM   $InterpretCompilerDirectives.__init__z  sx    !#&5  .?#% ]]7#A#A#CD
8>>@JC#'==#7Js3x  A$r)   c           
        \         P                  P                  VR 4      pV'       d7   W49  d1   V P                  P	                  \        VRV: RV: R24      4       R# V\         P                  9  d   \        VRV: R24       R# )NzThe z& compiler directive is not allowed in z scopeFzInvalid directive: 'z'.T)r   directive_scopesr   rQ   r   r   directive_typesr   )r#   rW   	directivescopelegal_scopess   &&&& r%   check_directive_scope1InterpretCompilerDirectives.check_directive_scope  sl    //33ItDE5LL''sHQSX=Z )[ \ 7 77cDEr)   c                \   VP                  R 4      '       g   R# VP                  R^4      ^,          pW0P                  9   d   R# RpRP                  4       RR  Uu. uF  qUP                  4       NK  	  ppV F.  w  rxVP                  R V,           4      '       g   K%  RV,          p M	  V'       gU   V\        P
                  9   p	V	'       g)   VP                  R4      '       g   ^RIHp
 \        W4      p	V	'       d
   RV,          p\        TR	V: R
V'       d   RMR: V: 24       R# u upi )cython.N.r  z                imp                  cimports
                cimp                 cimports
                para                 parallel
                parra                parallel
                dataclass            dataclasses
            zDid you mean 'cython.%s' ?r   )Shadowz2Instead, use 'import cython' and then 'cython.%s'.r+  z ' is not a valid cython.* modulez. r   )

startswithsplitvalid_cython_submodules
splitlinesr   r  r  r  hasattrr   )r#   rW   r  	submoduleextralinehintswrongcorrectis_simple_cython_namer  s   &&&        r%   _check_valid_cython_module6InterpretCompilerDirectives._check_valid_cython_module  s   %%i00%%c1-a0	444& 
Sb&"
&"TJJL &" 	 
 $NE%%i%&7884w> $ $-1H1H$H!(1E1Ec1J1J &(/(B%$LyXcDr!
 	/
s   D)c                   \        VP                  4       FR  pV P                  VP                  VR 4      '       d   K(  V P	                  VP                  VR 4       VP                  V KT  	  VP
                  V n        V P                  P                  VP                  4       V P                  Vn        V P                  Vn	        V P                  V4       V P                  Vn        V# )r   )sorteddirective_commentsr  rW   wrong_scope_errorr  module_scoper  rW  r  r<   r  )r#   r$   r  s   && r%   r\   ,InterpretCompilerDirectives.visit_ModuleNode  s    $112C--dhhXFF&&txxh?++C0 3
 !JJt667//#'#;#; 4 #'#;#; r)   c                n    V P                   VP                   uq n         V P                  V4       W n         V# r    r  r<   r#   r$   old_directivess   && r%   visit_CompilerDirectivesNode8InterpretCompilerDirectives.visit_CompilerDirectivesNode  s.    *.//4??'4 (r)   c                    V\         P                  9   ;'       g-    WP                  9   ;'       g    \        P                  ! V4      # r    )r   r  special_methodsr   parse_basic_type)r#   r   s   &&r%   is_cython_directive/InterpretCompilerDirectives.is_cython_directive  sC    /// 2 2,,,2 2++D1	3r)   c                r   VR,           P                  R4      pV'       d   VP                  R4      pVR8X  d   RV P                  R&   V# VR8X  d,   V P                   F  pRV,          V P                  V&   K  	  V# \	        V4      ^8w  g   VR,          V P                  9  d   \        VRV,          4       V# )	z
Checks to see if fullname (e.g. cython.parallel.prange) is a valid
parallel directive. If it is a star import it also updates the
parallel_directives.
r  cython.parallel.cython.parallelparallelzcython.parallel.*zcython.parallel.%szNo such directive: %sr   )r	  r
  r  valid_parallel_directivesr   r   )r#   	full_namerW   r   r   r   s   &&&   r%   is_parallel_directive1InterpretCompilerDirectives.is_parallel_directive  s     c/--.@A!,I--7H((4  11 ::D5ID5PD,,T2 ; 	 i.A%B-t'E'EEc2Y>?r)   c                   VP                   pVR 8X  d   \        VP                  R4       VP                  R4      '       dO   VP                  '       d'   VP                  R8w  d   V\        R4      R Vn         V# \        VP                  R4       VR8X  d2   V P                  P                  VP                  ;'       g    R4       V# VP                  R4      '       Ed   VP                  R4      '       d)   \        VP                  VP                   R,           4       MV P                  VP                  V4       VR	8X  dk   VP                  '       d,   VP                  R8w  d   W P                  VP                  &   R# V P                  P                  R4       VV P                  R	&    R# VP                  '       d#   VR
,          V P                  VP                  &   R# V P                  P                  R4       R# V# )cython.cimportszGCannot cimport the 'cython.cimports' package directly, only submodules.cython.cimports.cythonNzkPython cimports must use 'from cython.cimports... import ...' or 'import ... as ...', not just 'import ...'r  r)  z is not a moduler*     NN)r  r   rW   r	  r  r   r  r|  r  r  r  r#   r$   r  s   && r%   r  1InterpretCompilerDirectives.visit_CImportStatNode  s   &&++$((ef!!"455||| 8#.s3E/F/G#H $((CD ("$$(()A)AB* ) ##I..%%&899dhh 0 03E EF//+F//<<<DLLH$<=H,,T\\:  ,,00:9D ,,$57  5@_$$T\\2
  ((,,X6 r)   c                P   VP                   pVR 8X  g   VP                  R4      '       d2   V P                  VP                  W!P                  VP
                  4      # VP                  '       Eg8   VR8X  g   VP                  R4      '       Ed   V P                  VP                  V4       VR,           R,          p. pVP
                   F  w  rVpW6,           pRV,           p	V P                  WP                  4      '       d   YP                  T;'       g    T&   KR  V P                  V4      '       d   YP                  T;'       g    T&   K  VR9   d.   YP                  T;'       g    T&   VP                  WVV34       K  VP                  WVV34       K  	  V'       g   R# WAn        V# )r1  r2  r3  r  r  r4  N)dataclassestyping)r  r	  _create_cimport_from_importrW   relative_levelimported_namesr  r.  r  r&  r  r   )
r#   r$   r  r  newimprW   r   r  r-  qualified_names
   &&        r%   visit_FromCImportStatNode5InterpretCompilerDirectives.visit_FromCImportStatNode  sj   &&++{/E/EFX/Y/Y33+':':D<O<OQ Q$$$x';+A+A)+L+L++DHHkB$s*B/IF&*&9&9"7%,	!*Y!6--nhhGG AO,,W__=--i88<E((D9";;<E((D9MM3g"67MM3g"67 ':  "(r)   c                   VP                   pVP                  P                  pVR 8X  g   VP                  R4      '       dy   . pVP                   F?  w  rVTP                  VP                  YUVP                  8X  d   RMVP                  34       KA  	  V P                  VP                  W2P                  V4      # VR8X  g   VP                  R4      '       d   V P                  VP                  P                  V4       VR,           R,          p. pVP                   F  w  rVWu,           p	RV	,           p
V P                  WP                  4      '       d   WP                  VP                  &   KQ  V P                  V	4      '       d   WP                  VP                  &   K  VP                  WV34       K  	  V'       g   R# Wn        V# )r1  r2  Nr3  r  r  r4  )r   r  r   r	  r  r   rW   r   r;  levelr  r.  r  r&  r  )r#   r$   import_noder  r=  r   	name_noder  r>  r-  r?  s   &&         r%   visit_FromImportStatNode4InterpretCompilerDirectives.visit_FromImportStatNode,  st   kk!--33++{/E/EFX/Y/YN#'::%%]]D)..2H$inn]_ $. 33+'8'8.J JH$(>(>y(I(I++K,C,C,G,GU$s*B/IF#'::%,	!*Y!6--nhhGG?M,,Y^^<--i88;D((8MM4"34 $. Jr)   c                $   VR 8X  g   VP                  R4      '       d   \        V\        R4      R 4      pV'       d   \        P                  ! WVVR7      # V UUUu. uF#  w  rVp\        P
                  ! VVVV^ 8H  R7      NK%  	  uppp# u upppi )r1  r2  N)r  r<  r=  )r  r  is_absolute)r	  r   r   r   FromCImportStatNodeCImportStatNode)r#   node_posr  rC  r=  rW   dotted_namer  s   &&&&&   r%   r;  7InterpretCompilerDirectives._create_cimport_from_importH  s    ++{/E/EFX/Y/Y'C8J4K4L(MNK,,$-/ / 2@ 2@-Cg %% +# %
	,
 2@  s   )Bc                   \        VP                  \        P                  4      '       d   VP                  P                  P
                  pVR 8w  d   VP                  R4      '       g   V# \        P                  ! VP                  W!P                  P                  R7      pV P                  V4      pV# V P                  V4       V# )r3  r  )r  r  )rY   r   r   
ImportNoder  r   r	  r   rK  rW   r   r   r  r<   r6  s   && r%   r   6InterpretCompilerDirectives.visit_SingleAssignmentNode]  s    dhh	 4 455((..44Kh&{/E/Ei/P/P(({T\T\TaTabD--d3D  t$r)   c                `   VP                   '       d   V P                  VR 4       VP                  V P                  9   d	   RVn        M/V P
                  P                  VP                  4      pVe   W!n        VP                  4       R8X  d#   \        P                  ! VP                  RR7      # V# )
annotationTcompiledr   )rS  
visitchildr   r  is_cython_moduler  r   cython_attributeas_cython_attributer   BoolNoderW   )r#   r$   r   s   && r%   visit_NameNode*InterpretCompilerDirectives.visit_NameNodej  s    ???OOD,/99000$(D!,,00;I$(1%##%3%%dhhd;;r)   c                    V P                  V4       VP                  4       R 8X  d#   \        P                  ! VP                  RR7      # V# )rT  Tr   )r<   rX  r   rY  rW   r"   s   &&r%   r  /InterpretCompilerDirectives.visit_AttributeNodex  s=    4 ##%3%%dhhd;;r)   c                `    VP                   '       d   V P                  VP                   4       V# r    )ru   rO  r"   s   &&r%   visit_AnnotationNode0InterpretCompilerDirectives.visit_AnnotationNode  s"     999JJtyy!r)   c                L    V P                  VR 4       V P                  V4       V# cppclass)rU  r<   r"   s   &&r%   visit_NewExprNode-InterpretCompilerDirectives.visit_NewExprNode  s#    j)4 r)   c           	     *   \        V\        P                  4      '       Edu   V P                  VR 4       VP                  P                  4       pV'       Ed>   \        P                  P                  V4      pV'       Ed   VP                  4       w  rE. p. pVe   V\        Jd   VP                   F  pVw  rV: RV	P                  : 2p\        P                  P                  V4      '       d0   VP                  V P                  W.RVP                  4      4       Kn  VP                  V4       K  	  V'       g   RpMWun        V'       d   V'       g   V'       g   V# VP                  V P                  W$WQP                  P                  4      4       V# R# \        V\        P                   \        P"                  34      '       d   V P%                  V4       VP                  4       pV'       d   \        P                  P                  V4      pV\&        J dB   \        P(                  ! VP                  RR7      pV P                  W,.RVP                  4      .# Ve   V\        P*                  J d   VR3.# \-        VP                  RV,          4      hR# )functionNr  Tr   z5The '%s' directive should be used as a function call.)rY   r   CallNoderU  rg  rX  r   r  r   explicit_args_kwdsdictkey_value_pairsr   r   try_to_parse_directiverW   AttributeNoder   rO  r  rY  DEFER_ANALYSIS_OF_ARGUMENTSr   )r#   r$   optnamedirectivetyper   kwdsr  rk  keyvaluer  r   sub_optnamer   s   &&           r%   try_to_parse_directives3InterpretCompilerDirectives.try_to_parse_directives  s    dI..//OOD*-mm779Gw ' 7 7 ; ;G D =!%!8!8!:JD!#J&(O'M,E(,(<(<H)1JC5<cii*HK&66::;GG * 1 1$2M2Mk[bdhjrjvjv2w x / 6 6x @ )=  /#'D3B0%d4#--%%d&A&A'QUWdWdWhWh&ij%%  y66	8J8JKLLJJt..0G ' 7 7 ; ;G D D(#,,TXXTBC 77dhhWXX"*mw?b?b.b$dO,,("Y\c"ce er)   c                J	   VR 8X  d0   V P                   P                  '       g   \        VRV,          4      hVR8X  Ed    \        V4      ^8  pRpV'       d   VP                  '       d   VP                  ^ ,          p\        VP                  4      ^8X  dy   VP
                  P                  '       d]   VP
                  P                  R8X  dB   \        VP                  \        P                  4      '       d   VP                  P                  pMRpV'       d   \        VR4      hRV'       d   V^ ,          V33# RV33# \        P                  P                  V4      p\        V4      ^8X  dF   \        V^ ,          \        P                  4      '       d   V\        P                  ! 4       V,          3# V\         J dc   Vf8   \        V4      ^8w  g(   \        V^ ,          \        P                  4      '       g   \        VRV,          4      hW^ ,          P                  3# V\"        J dm   Vf8   \        V4      ^8w  g(   \        V^ ,          \        P$                  4      '       g   \        VRV,          4      hV\#        V^ ,          P                  4      3# V\&        J dm   Vf8   \        V4      ^8w  g(   \        V^ ,          \        P(                  4      '       g   \        VR	V,          4      hV\'        V^ ,          P                  4      3# V\*        J d2   Vf   \        V4      ^8w  d   \        VR
V,          4      hW^ ,          3# V\,        J d5   \        V4      ^ 8w  d   \        VRV,          4      hWP/                  4       3# V\0        J d\   V'       d.   \        VP                  4      ^ 8w  d   \        VRV,          4      hY U	u. uF  p	\'        V	P                  4      NK  	  up	3# \3        V4      '       ds   Vf8   \        V4      ^8w  g(   \        V^ ,          \        P(                  4      '       g   \        VR	V,          4      hW! V\'        V^ ,          P                  4      4      3# V\        P4                  J d    YV'       d   VP/                  4       33# / 33# Q hu up	i )
np_pythranz.The %s directive can only be used in C++ mode.	exceptvalTcheckzYThe exceptval directive takes 0 or 1 positional arguments and the boolean keyword "check"N8The %s directive takes one compile-time boolean argumentz8The %s directive takes one compile-time integer argumentz7The %s directive takes one compile-time string argumentz(The %s directive takes one type argumentz1The %s directive takes no prepositional argumentsz+The %s directive takes no keyword arguments)rQ   cppr   r   rk  r  rv   r   rY   r   rY  r   r  r   NoneNoder  r  intIntNoder  r  typerj  as_python_dictr  callablern  )
r#   ro  r   rq  rW   	arg_errorry  kwrp  r   s
   &&&&&     r%   rl  2InterpretCompilerDirectives.try_to_parse_directive  s   l"4<<+;+;+; &VY`&`aa#D	AIE,,,))!,,,-2000RVV\\W5L"288Y-?-?@@HHNNE $I$tv vT$q'U!CDDtU!CDD//33G<t9>ja)2D2DEEG::<WEEEd"3t9>DGYM_M_9`9`$SNQXXZ Z!W]]++c!3t9>DGYM^M^9_9_$SNQXXZ ZSa/00c!3t9>DGYMbMb9c9c$SMPWWY YSa/00d"3t9>$S>HJ J!W%%d"4yA~$SG'QS S//111d"D001Q6$SAGKM M>c#))n>>>m$$3t9>DGYMbMb9c9c$SMPWWY Y]7CQ4FGHHgAAATD$7$7$9JKKrJKK5 ?s   R c           	        V'       g   V'       d   Q hV P                  V4      # V P                  p\        P                  ! V3/ VB pVe   \        P                  ! V3/ VB pMTpWT8X  d   V P                  V4      # WPn        Ven   We8w  dh   \        P
                  ! VP                  P                  \        P                  ! VP                  P                  VVP                  R7      .R7      Vn        V P                  V4      pW@n        \        V\        P                  4      '       d(   VP                  VP                  4       VP                  p\        V\        P
                  4      '       g$   \        P
                  ! VP                  V.R7      p\        P                  ! VP                  WuVP                  R7      # )N)r  rZ   r   )rZ   r  is_terminator)rJ  r  r   copy_inherited_directivesr   r[   rZ   rW   CompilerDirectivesNoderY   rW  r  )r#   r$   r  contents_directivesr   new_directivesnew_contents_directivesretbodys   &&&&    r%   visit_with_directives1InterpretCompilerDirectives.visit_with_directives  sg   ***??4(( ::>XZX*&-&G&G'7"5'7# '5#+??4(((+'9**		00		#:!YY(DI //$'(gu;;<<!!'"4"45llG'5#5#566(('CG++KKgPWPePeg 	gr)   c                N    V P                  VR 4      w  r#V P                  WV4      # rg  _extract_directivesr  r#   r$   r  r  s   &&  r%   r0  -InterpretCompilerDirectives.visit_FuncDefNode!  +    *.*B*B4*T'
))$<OPPr)   c                   V P                  VR 4      w  r#VP                  4        FS  w  rEVR8X  d	   WQn        K  VR9  g   K  V P                  P	                  \        VP                  RV,          4      4       KU  	  V P                  WRR7      # )rg  localszXCdef functions can only take cython.locals(), staticmethod, or final decorators, got %s.Nr  )finalr  )r  r  directive_localsrQ   r   r   rW   r  )r#   r$   r  r   r   r   s   &&    r%   r+   -InterpretCompilerDirectives.visit_CVarDefNode%  s    00zB
%++-KDx(-%66++NHHACGH-I J	 . ))$PT)UUr)   c                N    V P                  VR 4      w  r#V P                  WV4      # r  r  r  s   &&  r%   r  /InterpretCompilerDirectives.visit_CClassDefNode1  s+    *.*B*B4*R'
))$<OPPr)   c                N    V P                  VR 4      w  r#V P                  WV4      # rb  r  r  s   &&  r%   r=   .InterpretCompilerDirectives.visit_CppClassNode5  r  r)   c                N    V P                  VR 4      w  r#V P                  WV4      # )classr  r  s   &&  r%   visit_PyClassDefNode0InterpretCompilerDirectives.visit_PyClassDefNode9  s+    *.*B*B4*Q'
))$<OPPr)   c           	     x   VP                   '       g   / / 3# . p. p. p\        V P                  4      p\        4       pVP                   RRR1,           EF  pV P	                  VP
                  4      p	V	Eey   V	 EFn  p
V P                  VP                  V
^ ,          V4      '       Ed#   V
w  rVR9   d~   Vf   RpMsVw  rV'       g8   \        V4      ^8w  g(   \        V^ ,          \        P                  4      '       g   \        VP                  RV,          4      hV^ ,          P                  pW3p
VP                  W4      V8w  d;   VR8X  d   RV9   d   \        VP                  R4       VP!                  V
4       WV&   M+\#        VP                  RV: Ve
   RV,          MR	: R
24       V
^ ,          R8X  d   VP!                  V4       V
^ ,          R8X  g   EKb  VR8X  g   EKl  RpEKq  	  EK  VP!                  V4       EK  	  VRRR1,          VRRR1,          ,           Vn         / p/ pV F  w  rW9   d^   W,          p\        V\        4      '       d   VP%                  V4       M1\        V\&        4      '       d   VP)                  V4       M	WV&   MWV&   V\*        P,                  9  g   K  VVV&   K  	  VV3# )z
Returns two dicts - directives applied to this function/class
and directives applied to its contents. They aren't always the
same (since e.g. cfunc should not be applied to inner functions)
NTrz  cfuncufuncz=Cannot apply @cfunc to @ufunc, please reverse the decorators.z*Directive does not change previous value (z=%rr  )r  r   r  r   )nogilwith_gil)
decoratorsrj  r  objectrt  	decoratorr  rW   r   rY   r   rY  r   r   r   r   r   r   rW  r  r;  r   immediate_decorator_directives)r#   r$   
scope_namer  realdecsbothcurrent_opt_dictmissingdecr  r   r   r   r   rq  optdictcontents_optdict	old_values   &&&               r%   r  /InterpretCompilerDirectives._extract_directives=  sq    r6M
0(??4R4((C!99#--HN)!/I11$((IaL*UU&/#88$}(,-2
#'3t9>DQRGU^UgUgAhAh*8B|  @D  CD  +E  %E(,Q)-I+//>%G#w7>N3N %cgg/n o&--i85:T2#CGG $u7Heemb&P.R S$Q<>9 KK, |x/J'4I%-
1 "04 $; )< #4R4.4":5%KD#M	 i..$$U+	400$$U+$)DM %7AAA). & & (((r)   c                "   / pV P                  VP                  4      ;'       g    .  F  pVf   K	  VP                  e2   V P                  P	                  \        VP                  R4      4       KH  Vw  rEVR9   d   V P                  W4      u # VR8X  d   Vw  rgV P                  WV4      u # V P                  VP                  VR4      '       g   K  WRV&   K  	  V'       d   V P                  VP                  VR R7      # V P                  V4      # )Nz6Compiler directive with statements cannot contain 'as'critical_sectionzwith statementr  )r  gil)rt  managerr  rQ   r   r   rW   _transform_with_gil_transform_critical_sectionr  r  rZ   rJ  )r#   r$   directive_dictr   r   r   r   rq  s   &&      r%   visit_WithStatNode.InterpretCompilerDirectives.visit_WithStatNode  s    55dllCIIrII {{&++"488-efh#KD''//;;++"
77DII++DHHd<LMM',t$ J  --dii]a-bbt$$r)   c                   VR9   g   Q hVP                   pRp\        V\        P                  4      '       dw   VP                  '       de   \        VP                  4      ^8  d7   V P                  P                  \        VP                  RV,          4      4       VP                  ^ ,          pMV\        V\        P                  4      '       d7   V P                  P                  \        VP                  RV,          4      4       \        P                  ! VP                  W!P                  VR7      pV P                  V4      # )r  Nz6Compiler directive %s accepts one positional argument.)staterZ   	condition)r  r  )r  rY   r   SimpleCallNoder   r   rQ   r   r   rW   GeneralCallNoder   GILStatNoderZ   rJ  )r#   r$   r  r  r  s   &&&  r%   r  /InterpretCompilerDirectives._transform_with_gil  s    ((((,,	gy7788W\\\7<< 1$++"488-ehm-mnpQI!:!:;;LL''txx)adi)ijl  YYR[\t$$r)   c                *   \        V4      ^8  g   \        V4      ^8  g	   V'       d0   V P                  P                  \        VP                  R4      4       \
        P                  ! VP                  W!P                  R7      pV P                  V4      # )r  zBcritical_section directive accepts one or two positional argumentsr   rZ   )	r   rQ   r   r   rW   r   CriticalSectionStatNoderZ   rJ  )r#   r$   r   rq  s   &&&&r%   r  7InterpretCompilerDirectives._transform_critical_section  sj    t9q=CIMTLL''txx)mn ,,HH4ii
 t$$r)   )r  r  r  r  r  >   NULLcastunionsizeofr   declarepointertypedefrT  r+  
fused_type>   viewcimportsoperatorr+  r9  >   pranger+  threadid)1r?   r@   rA   rB   rC   r   
TypeofNodeAmpersandNodeDereferenceNodeinc_dec_constructor
TypeidNodeunop_method_nodesc_binop_constructorbinop_method_nodesr$  rW  r  r,  rM   r  r  r\   r!  r&  r.  r  r@  rF  r;  r   rZ  r  r_  rd  rt  rl  r  r0  r+   r  r=   r  r  r  r  r  rD   rE   r}   r~   s   @@r%   r  r  4  sv    : 	)&&I33	 9 9)"?"?d"K)"?"?d"K )"?"?t"L )"?"?t"L)"6"6 	9**  	)"?"?"DO
 ,-!%	$N3
*"HB8*
*X>@'gTQ
VQQQ@)F%,%% %r)   r  c                      a a ] tR tRt oRtRtRtRtRtR]	P                  R]P                  R]	P                  /tR tR	 tR
 tR tR tR tR tR tV 3R ltRtVtV ;t# )ParallelRangeTransformi  a  
Transform cython.parallel stuff. The parallel_directives come from the
module node, set there by InterpretCompilerDirectives.

    x = cython.parallel.threadavailable()   -> ParallelThreadAvailableNode
    with nogil, cython.parallel.parallel(): -> ParallelWithBlockNode
        print cython.parallel.threadid()    -> ParallelThreadIdNode
        for i in cython.parallel.prange(...):  -> ParallelRangeNode
            ...
NFzcython.parallel.parallelzcython.parallel.threadidzcython.parallel.prangec                \    VP                   V P                  9   ;'       g    VP                  # r    )r   r  rV  r"   s   &&r%   node_is_parallel_directive1ParallelRangeTransform.node_is_parallel_directive  s%    yyD444MM8M8MMr)   c                   V P                   '       d   RP                  V P                  4      pM^V P                  V P                  ^ ,          ,          pV: RRP                  V P                  R,          4      : 2pVP	                  R4      pV P
                  P                  V4      pVfH   V P                   '       d   V P                  ^ ,          R8w  g   \        VP                  RV,          4       RV n         RV n        V# )z
Figure out which parallel directive was used and return the associated
Node class.

E.g. for a cython.parallel.prange() call we return ParallelRangeNode
r  r  NNNr+  zInvalid directive: %sF)	namenode_is_cython_modulejoinparallel_directiver  rstripdirective_to_noder   r   rW   )r#   r$   r   rd  s   &&  r%   get_directive_class_node/ParallelRangeTransform.get_directive_class_node  s     )))!8!89I001H1H1KLI#,#&88D,C,CB,G#HJI!((-I$$((3; > > > $ 7 7 :j H$((3i?@).&"&
r)   c                n    VP                   '       d#   VP                   V n         V P                  V4      # V# )zL
If any parallel directives were imported, copy them over and visit
the AST
)r  rJ  r"   s   &&r%   r\   'ParallelRangeTransform.visit_ModuleNode  s4    
 ###'+'?'?D$??4(( r)   c                z    V P                  V4      '       d$   VP                  .V n        VP                  V n        V# r    )r  r   r  rV  r  r"   s   &&r%   rZ  %ParallelRangeTransform.visit_NameNode  s4    **400'+yykD#-1-B-BD*r)   c                    V P                  V4       V P                  '       d&   V P                  P                  VP                  4       V# r    )r<   r  r   	attributer"   s   &&r%   r  *ParallelRangeTransform.visit_AttributeNode  s9    4 """##**4>>:r)   c                t   V P                  VR 4       V P                  '       g   V P                  VRR7       V# \        V\        P
                  4      '       d$   VP                  P                  pVP                  pMVP                  p/ pV P                  V4      pV'       d   V! VP                  W#R7      pV# )rg  rh  )r   kwargsr  )rU  r  r<   rY   r   r  positional_argsr   keyword_argsr  rW   )r#   r$   r   r  parallel_directive_classs   &&   r%   visit_CallNode%ParallelRangeTransform.visit_CallNode  s    j)&&&t];K
 dI5566'',,D&&F99DF#'#@#@#F # ,DHH4ODr)   c                   V P                  VP                  4      p\        V\        P                  4      '       dZ   V P
                  R8X  d!   \        VP                  P                  R4       RV n        V P                  VR4      pRV n        W2n	        V# V P                  '       dH   V P                  V4      pV'       g   R# V\        P                  J d   \        VP                  R4       R# V P                  VR4       V# )z.Rewrite with cython.parallel.parallel() blockszparallel withz*Nested parallel with blocks are disallowedrZ   Nz%The parallel directive must be called)rO  r  rY   r   ParallelWithBlockNoder  r   rW   rU  rZ   r  r  )r#   r$   newnoderZ   r  s   &&   r%   r  )ParallelRangeTransform.visit_WithStatNode  s    **T\\*gu::;;zz_,dll&&BD )DJ??40DDJLN$$$'+'D'DT'J$+'5+F+FFdhh GHf%r)   c                ^   V P                  VR4       V P                  VR4       \        VP                  P                  \        P
                  4      pV P                  pV'       d   VP                  P                  pVP                  Vn        VP                  Vn        VP                  Vn	        Tp\        VP                  \        P                  4      '       g!   \        VP                  P                  R4       RV n        V P                  VR4       W0n        V P                  VR4       V# )z/Rewrite 'for i in cython.parallel.prange(...):'r   r  z+Can only iterate over an iteration variabler  rZ   else_clause)rU  rY   r   sequencer   ParallelRangeNoder  r  rZ   r  r   r   r   rW   )r#   r$   	in_prangeprevious_stateparallel_range_nodes   &&   r%   rA  *ParallelRangeTransform.visit_ForInStatNode:  s    j)h't}}55$668	 #'--"8"8)-&'+yy$.2.>.>+&Ddkk9+=+=>>dkkooCE "DJf%#
m,r)   c                .   < Ve   \         SV `  V4      # R# )zVisit a node that may be NoneN)rL   rO  r  s   &&r%   rO  ParallelRangeTransform.visitY  s    7=&& r)   )r  r  r  r  )r?   r@   rA   rB   rC   r  r  in_context_manager_sectionr  r   r  r   ParallelThreadIdNoder  r  r  r  r\   rZ  r  r  r  rA  rO  rD   rE   r}   r~   s   @@r%   r  r    s     	  !& "' E 	#E$?$?"I$B$B %"9"9	N2
0:>' 'r)   r  c                   D   a  ] tR tRt o R tR t]P                  tRt	V t
R# )WithTransformi_  c                   V P                  VR .4       VP                  pVP                  pVP                  VP                  VP
                  rep\        P                  ! V4      ;qan        \        P                  ! T\        P                  ! T\        P                  ! V4      \        V'       d   RMR4      RR7      . RR7      Vn        V'       d'   \        P                  ! W!P                  R7      Vn        Ve1   \        P                  ! V\        P                   ! W%VR7      V.R	7      p\        P"                  ! TR\%        ^4       Uu. uF  p\        P&                  ! V4      NK  	  upR
7      p\        P(                  ! T\        P*                  ! T\        P,                  ! T\        P.                  ! T\        P0                  ! Y!RTV'       d   \        P                  ! VRR7      MRR7      R7      \        P2                  ! V4      R7      .RR7      RRVR7      p	\        P4                  ! T\        P6                  ! W$V	.RR7      \        P8                  ! T\        P0                  ! Y!R\        P"                  ! T\%        ^4       Uu. uF  p\        P:                  ! V4      NK  	  upR7      V'       d   \        P                  ! VRR7      MRR7      R7      RR7      Vn        V# u upi u upi )rZ   
__aenter__	__enter__T)r  r  is_special_lookup)rg  r   is_temp)r   N)r   	with_noder   )slowr   F)	with_stattest_if_runr   
await_exproperand)r  rZ   )
if_clausesr  )rZ   patternr  excinfo_target)rZ   except_clausesr  r   r   )rZ   r  handle_error_case)r<   rW   is_asyncrZ   r  r  r   	ProxyNoder  rm  	CloneNoder   
enter_callAwaitExprNoder   r[   WithTargetAssignmentStatNode	TupleNoder  ExcValueNodeExceptClauseNode
IfStatNodeIfClauseNodeNotNodeWithExitCallNodeReraiseStatNoder  TryExceptStatNoder   r|  )
r#   r$   rW   r!  rZ   r  r  r   r  except_clauses
   &&        r%   r   WithTransform.visit_WithStatNode`  sv   4&*hh== $		4;;g!*!4!4W!==,#22)11,,W5'kR"&(  '55cODO%%6649D #,,St16qC;19AI""3'C; <..e&&&&y'8'8)C)C #,1%3U]9+B+B3D+Qcg	*i(j #2237
! !" )!
& ,,e-- - 
 !--)44 $",,E!H"MHq9#5#5c#:H"MOIQy66sEW[]^ $
	 IC;@ #Ns   
K'K,"c                    V# r    r!   r"   s   &&r%   ra   WithTransform.visit_ExprNode      r)   r!   N)r?   r@   rA   rB   r  ra   r   r  rJ  rD   rE   rF   s   @r%   r  r  _  s     <| "55Jr)   r  c                   D   a a ] tR tRt oV 3R ltR tR tR tRtVt	V ;t
# )#_GeneratorExpressionArgumentsMarkeri  c                0   < \         SV `  4        Wn        R # r    )rL   rM   gen_expr)r#   r8  rR   s   &&r%   rM   ,_GeneratorExpressionArgumentsMarker.__init__  s     r)   c                    VP                   '       g&   VP                  '       d   Q hV P                  Vn        V P                  V4       R # r    )r{  generator_arg_tagr8  r<   r"   s   &&r%   ra   2_GeneratorExpressionArgumentsMarker.visit_ExprNode  s7    .../.%)]]D"4 r)   c                    R # r    r!   r"   s   &&r%   rJ  ._GeneratorExpressionArgumentsMarker.visit_Node  s     	r)   c                (    V P                   Vn        R # r    )r8  r;  r"   s   &&r%   r   A_GeneratorExpressionArgumentsMarker.visit_GeneratorExpressionNode  s    !%r)   )r8  )r?   r@   rA   rB   rM   ra   rJ  r   rD   rE   r}   r~   s   @@r%   r6  r6    s     !!
/ /r)   r6  c                   P   a  ] tR tRt o R tR tR tR t]P                  t
RtV tR# )_HandleGeneratorArgumentsi  c                   ^RI Hp \        V\        P                  4      '       g   Q hWn        \        VP                  P                  4      V n        \        VP                  4      V n	        ^ V n
        / V n        V P                  V4       V P                  P                  4        F  w  r4VP                  WV4       K  	  V P                  VP                  n        V P                  Vn	        V# )r  )Visitor)r  rD  rY   r   GeneratorExpressionNodegen_noder  r   r   call_parameters	tag_countsubstitutionsr<   r  recursively_replace_node)r#   r$   rD  kvs   &&   r%   r  "_HandleGeneratorArguments.__call__  s    $	 A ABBBB++,	#D$8$894 &&,,.DA ,,Ta8	 / "YY#33r)   c                ,    V P                  VR R7      pV# )F)do_visit_children_handle_ExprNode)r#   r$   new_nodes   && r%   r   7_HandleGeneratorArguments.visit_GeneratorExpressionNode  s    (((G r)   c                   VP                   Ee   V P                  Ee   V P                  VP                   8X  Edp   VP                  pV P                  pV ;P                  ^,          un        \	        RP                  V4      4      pV P                  P                  pVP                  P                  V4      '       Eg0   ^RI	H
p \	        \        P                  VP                  \        V4      4      ,           4      p\        P                   ! W5R7      p	VP"                  p
\$        P&                  ! V
RR7      p
Wn        \        P(                  ! W9R R R R7      pV	P*                  Vn        Wn        V P,                  P/                  V4       R Vn         V P0                  P/                  V4       VP3                  VP                  V4      Vn        WP4                  n        RVP4                  n        V'       d+   V P                  R uqn        V P;                  V4       Wn        \<        P>                  ! W5RR7      pV P                  P                  P@                  P                  PC                  VP*                  4      Vn        VP4                  P"                  Vn        WPD                  V&   V# V'       d   V P;                  V4       V# )	Nz.{})SymtabrW   r   F)remove_fakeref)rW   
declarator	base_typer   rS  T)r   initialized_check)#r;  rF  rW   rH  r   r  r   local_scopelookup_herer  rU  r   genexpr_arg_prefixpunycodify_namer  r   r   r  r   remove_cv_refCArgDeclNoder   r   r   rG  declare_argumententrycname
in_closurer<   r   r   gbodylookuprI  )r#   r$   rO  rW   name_sourcer   r   rU  rc  	name_declr  new_argrF  rE  s   &&&           r%   rQ  *_HandleGeneratorArguments._handle_ExprNode  s   "".4==3L!7!77((C ..KNNaN k!:;D}}--H''33D99$%f&?&?&BXBXY\]hYiBj&jk!55#I	yy "//UK!%,,:>Y]_(~~#		  ))-&$$++D1 ( 9 9(:N:NPW X&+#+/(  +/--'-""4( (
 "**3USI"mm44::FFMMinn]IO&__11IN'0t$t$r)   c                &    V P                  VR 4      # r_   rP  r"   s   &&r%   ra   (_HandleGeneratorArguments.visit_ExprNode  s    $$T400r)   )r   rG  rF  rI  rH  N)r?   r@   rA   rB   r  r   rQ  ra   r   r  rJ  rD   rE   rF   s   @r%   rB  rB    s'     ,;z1 "55Jr)   rB  c                      a a ] tR tRt oRtRtR]! R4      R]! R4      R]! R	4      /P                  tV 3R
 lt	R t
R tR tR t]R 4       tR tR t]R 4       tRtVtV ;t# )DecoratorTransformi!  z
Transforms method decorators in cdef classes into nested calls or properties.

Python-style decorator properties are transformed into a PropertyNode
with up to the three getter, setter and deleter DefNodes.
The functional style isn't supported yet.
Ngetter__get__setter__set__deleter__del__c                   < V P                   f   . V n         V P                   P                  / 4       \        SV `  V4      pV P                   P	                  4        V# r    )_propertiesr   rL   r  popr  s   &&r%   r  &DecoratorTransform.visit_CClassDefNode1  sQ    #!D#w*40r)   c                    \        VP                  ^ ,          \        4      '       d   ^M^ p\        VP                  RVP                  ,          V4       V# )r   z4'property %s:' syntax is deprecated, use '@property')rY   rW   r  r   r   )r#   r$   rC  s   && r%   visit_PropertyNode%DecoratorTransform.visit_PropertyNode9  s@    S11qPSWS\S\\^cdr)   c                8   V P                  V4      pVP                  '       g   V# V P                  R 8w  g   V P                  P                  R8w  d   \        VP                  4      ^8X  dZ   VP                  ^ ,          P                  P                  '       d-   VP                  ^ ,          P                  P                  R8X  g(   \        VP                  ^ ,          P                  R4       V# TpV P                  V4      pV'       d^   VP                  P                  '       d,   VP                  4       pV'       d   V P                  WV4      pM\        VP                  R4       VP                  '       d#   V P                  WP                  ^ ,          4      # V# )r   r:   r  z0Cdef functions cannot take arbitrary decorators.z*C property decorator can only be @property)r0  r  r   r   r;   r   r  r:  r   r   rW   _find_property_decoratordeclared_name_add_property_reject_decorated_property)r#   r$   ret_nodedecorator_noder   s   &&   r%   visit_CFuncDefNode%DecoratorTransform.visit_CFuncDefNode?  s-   %%d+K__(DOO,F,F(,R (A-$//!2D2N2N2V2V2VOOA&0055Gdooa(,,.`aK66t<''///))+#11$nMHn((*VW???2249KLLr)   c                   V P                   pV P                  V4      pVR 8w  g   VP                  '       g   V# V P                  V4      pVe   VP                  pVP
                  '       d   V P                  WP                  V4      # V P                  VP                  4      pV'       d   VP                  P                  VP                  8w  d?   \        VP                  RVP                  P                  : RVP                  : R24       M=\        VP                  4      ^8  d   V P                  W4      # V P                  WV4      # VP                   Fo  pVP                  pVP
                  '       g   K#  V;P                   VP                  R8H  ,          un        V;P"                  VP                  R8H  ,          un        Kq  	  VP                  pRVn        V P%                  WVP                  4      # )r   Nz&Mismatching property names, expected 'z', got 'r+  rx  r  )r   r0  r  r}  r  r:  r  r   _map_property_attributer  r  r   rW   r   r  _add_to_propertyis_classmethodis_staticmethodchain_decorators)r#   r$   r   r  r  handler_namefuncdecss   &&      r%   r1   DecoratorTransform.visit_DefNodeY  s   __
%%d+!K 66t<%&00I   ))$		>JJ#;;I<O<OP }}))TYY6n00"+--"4"4diiAB T__-1#>>tTT#44TXX I&&D|||##tyyM'AA#$$		^(CC$	 ) $$T;;r)   c                2   V P                   R,          pVP                  RRR1,           Fi  pVP                  pVP                  '       d   VP                  R8X  d   Vu # VP
                  '       g   KJ  VP                  P                  V9   g   Kg  Vu # 	  R# )r  Npropertyr   )rv  r  r  r:  r   is_attributer  )r#   r$   
propertiesr  r  s   &&   r%   r}  +DecoratorTransform._find_property_decorator  s|    %%b)
"oodd33N&00I   Y^^z%A%%'''IMM,>,>*,L%% 4 r)   c                h    V P                    F!  pW!8w  g   K  \        VP                  R 4       K#  	  V # )z=Property methods with additional decorators are not supported)r  r   rW   )r$   r  decos   && r%   r  -DecoratorTransform._reject_decorated_property  s.     OOD%dhh _` $ r)   c                   \        VP                  4      ^8  d   V P                  W4      # VP                  P                  V4       V P                  R	,          p\        V\        P                  4      p\        P                  ! VP                  V.R7      pV'       dr   W$9   d   \        VP                  R4       RVP                  9  d   \        VP                  R4       \        P                  ! VP                  VP                  W&R7      pMW$9   dy   WB,          pVP                  '       d   \        VP                  R4       R# \        R4      Vn        VP                  Vn	        VP                  Vn        V.VP"                  n        R# \        R4      Vn        \        P&                  ! VP                  W!P                  VR7      pWtV&   V# )
r  r   C property redeclaredr  z+C property method must be declared 'inline')r   r   rZ   rp  N)r   r   rZ   r   )r   r  r  removerv  rY   r   r  r[   rW   r   r  CPropertyNoder   is_cpropertyr   r   rZ   rX   PropertyNode)r#   r$   r   r  r  r  rZ   props   &&&&    r%   r   DecoratorTransform._add_property  sY   t!#224HH~.%%b)
!$(:(:;!!$((4&9!dhh 78t~~-dhh MN&&txxTXXDTD#D   dhh 78 	 *)4	8888#'&		%i0DI%%t>D4r)   c                   V P                   R,          pWAP                  ,          pVP                  '       d   \        VP                  R4       R# W!n        VP
                  P                  V4       VP                  P                  p\        V4       F  w  rxVP                  V8X  g   K  WV&    R# 	  VP                  V4       R# )r  r  Nr   )rv  r   r  r   rW   r  r  rZ   rX   r  r   )	r#   r$   r   r  r  r  rX   r  stats	   &&&&     r%   r  #DecoratorTransform._add_to_property  s    %%b)
))$$((34	y)		 'GAyyD a  (
 LLr)   c                   \         P                  ! V P                  VR7      pVRRR1,           F1  p\         P                  ! VP                  VP                  V.R7      pK3  	  \         P                  ! V P                  VR7      p\
        P                  ! V P                  VVR7      p\
        P                  ! V.4      pW`n        W.# )a6  
Decorators are applied directly in DefNode and PyClassDefNode to avoid
reassignments to the function/class name - except for cdef class methods.
For those, the reassignment is required as methods are originally
defined in the PyMethodDef struct.

The IndirectionNode allows DefNode to override the decorator.
r   Nrg  r   r   r   )	r   r   rW   r  r  r   r   IndirectionNodedecorator_indirection)r$   r  r   decorator_resultr  rE  reassignments   &&&    r%   r  #DecoratorTransform.chain_decorators  s     %--dhhTB#DbD))I(77",,&' ) * &&txxd;	11HH "
 ,,l^<%1"##r)   )rv  )r?   r@   rA   rB   rC   rv  r   r   r  r  rz  r  r1  r}  r  r  r  r  r  rD   rE   r}   r~   s   @@r%   rn  rn  !  s      K 	-	*-	*=+ 
c	 4$<L
  <" $ $ $r)   rn  c                   >   a  ] tR tRt o RtR t]t]t]t]t	]t
RtV tR# )CnameDirectivesTransformi  z
Only part of the CythonUtilityCode pipeline. Must be run before
DecoratorTransform in case this is a decorator for a cdef class.
It filters out @cname('my_cname') decorators and rewrites them to
CnameDecoratorNodes.
c                   \        VR R4      '       g   V P                  V4      # \        VP                  4       EF?  w  r#VP                  p\        V\        P                  4      '       g   K4  VP                  P                  '       g   KR  VP                  P                  R8X  g   Ko  VP                  4       w  rEV'       d   \        R4      h\        V4      ^8w  d   \        R4      hV^ ,          P                  '       d&   V^ ,          P                  \         P"                  J g   \        R4      hV^ ,          P%                  R4      pVP                  V \&        P(                  ! VP*                  VVR7      p M	  V P                  V4      # )r  Nrc  z/cname decorator does not take keyword argumentsz*cname decorator takes exactly one argumentz4argument to cname decorator must be a string literal)rW   r$   rc  )getattrrJ  r  r  r  rY   r   rh  rg  r:  r   ri  r  r   r{  r  r   unicode_typecompile_time_valuer   CnameDecoratorNoderW   )r#   r$   r  r  r   r  rc  s   &&     r%   handle_function(CnameDirectivesTransform.handle_function  sG   t\400??4((%doo6LA!++I9i&8&899&&...&&++w6(;;=(MO O t9>(HJ J Q***tAw||w?S?S/S(RT T Q2248OOA&//DHH46;=1 74 t$$r)   r!   N)r?   r@   rA   rB   rC   r  r0  r  r4   r7   r+   rD   rE   rF   s   @r%   r  r    s0     %@ ()("1'r)   r  c                   T   a  ] tR tRt o RtR tR tR tR tR t	R t
R	 tR
 tRtV tR# )ForwardDeclareTypesi  z
Declare all global cdef names that we allow referencing in other places,
before declaring everything (else) in source code order.
c                    V P                   pVP                  pVP                  Vn        V P                  V4       W2n        V# r    )r  r  r<   )r#   r$   envr  s   &&  r%   r!  0ForwardDeclareTypes.visit_CompilerDirectivesNode  s9    nn4 r)   c                    VP                   V n        VP                  V P                  n        V P                  V4       V# r    )r  r  r  r<   r"   s   &&r%   r\   $ForwardDeclareTypes.visit_ModuleNode  s3     JJ'+$4 r)   c                    V P                   P                  p^V P                   n        V P                  V4       W P                   n        V# r  )r  in_cincluder<   )r#   r$   old_cinclude_flags   && r%   visit_CDefExternNode(ForwardDeclareTypes.visit_CDefExternNode!  sA     --99()%4 (9%r)   c                <    VP                  V P                  4       V# r    )r  r  r"   s   &&r%   r4   &ForwardDeclareTypes.visit_CEnumDefNode(  s    T&&'r)   c                    VP                   V P                  P                  9  d   VP                  V P                  4       V# r    )r   r  entriesr  r"   s   &&r%   r7   /ForwardDeclareTypes.visit_CStructOrUnionDefNode,  s1    99D--555LL**+r)   c                2   VP                   V P                  P                  9  d   VP                  V P                  4       V P                  P                  VP                   ,          P                  pVe   VP
                  '       d   VP                  '       g~   VP                  '       dl   VP                  pVP                   FO  pVP                  '       g   K  VP                  P                  '       g   K5  VP                  P                  4        KQ  	  V# r    )
class_namer  r  r  r  is_extension_typeis_builtin_typer  cfunc_entriesis_fused"get_all_specialized_function_types)r#   r$   r  r  rb  s   &&   r%   r  'ForwardDeclareTypes.visit_CClassDefNode1  s    ??$"3"3";";;LL**+  ((9>> 6 6 6t?S?S?SX\XbXbXbJJE,,:::%**"5"5"5JJAAC - r)   c                    V# r    r!   r"   s   &&r%   r0  %ForwardDeclareTypes.visit_FuncDefNode=  r4  r)   c                    V# r    r!   r"   s   &&r%   r  (ForwardDeclareTypes.visit_PyClassDefNodeA  r4  r)   )r  N)r?   r@   rA   rB   rC   r!  r\   r  r4   r7   r  r0  r  rD   rE   rF   s   @r%   r  r    s7     


 r)   r  c                     a a ] tR tRt o]! RR]! R4      .R7      t]! RR]! R4      .R7      t]! RR]! R4      .R7      t]! R]! R4      .R	7      t	]! R
]! R4      .R	7      t
Rt^ tV 3R ltR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tV 3R ltR tR t R t!R  t"R! t#R" t$R# t%R$ t&R% t'R& t(R' t)R( t*R) t+R*t,Vt-V ;t.# )+AnalyseDeclarationsTransformiF  zr
property NAME:
    def __get__(self):
        return ATTR
    def __set__(self, value):
        ATTR = value
    c_classNrC  pipelinez
property NAME:
    def __get__(self):
        return ATTR
    def __set__(self, value):
        ATTR = value
    def __del__(self):
        ATTR = None
    z?
property NAME:
    def __get__(self):
        return ATTR
    a  
cdef class NAME:
    cdef TYPE value
    def __init__(self, MEMBER=None):
        cdef int count
        count = 0
        INIT_ASSIGNMENTS
        if IS_UNION and count > 1:
            raise ValueError, "At most one union member should be specified."
    def __str__(self):
        return STR_FORMAT % MEMBER_TUPLE
    def __repr__(self):
        return REPR_FORMAT % MEMBER_TUPLE
    )r  z;
if VALUE is not None:
    ATTR = VALUE
    count += 1
    c                   < . V n         \        4       V n        \        4       pVP                  V n        VP                  V4      # r    )seen_vars_stackrT  fused_error_funcsrL   r0  _super_visit_FuncDefNoder  )r#   rootsuper_classrR   s   && r%   r  %AnalyseDeclarationsTransform.__call__v  s;    !!$g(3(E(E%##D))r)   c                ^    V P                   R,          P                  VP                  4       V# r  r   )r  r|  r   r"   s   &&r%   rZ  +AnalyseDeclarationsTransform.visit_NameNode~  s$    R $$TYY/r)   c                L   . V n         V P                  P                  \        4       4       VP	                  V P                  4       4       V P                  V4       V P                  P                  4        VP                  P                  P                  V P                   4       V# r    )extra_module_declarationsr  r   rT  analyse_declarationscurrent_envr<   rw  rZ   rX   r;  r"   s   &&r%   r\   -AnalyseDeclarationsTransform.visit_ModuleNode  sx    )+&##CE*!!$"2"2"454   "		t==>r)   c                    V ;P                   ^,          un         VP                  V P                  4       4       V P                  V4       V ;P                   ^,          un         V# r  )	in_lambdar  r  r<   r"   s   &&r%   r   -AnalyseDeclarationsTransform.visit_LambdaNode  sH    !!!$"2"2"454 !r)   c                |   V P                  V4      pVP                  '       dF   R VP                  P                  9   d+   ^RIHp V! WP                  P                  R ,          V 4       VP                  '       EdA   VP                  P
                  '       Ed$   VP                  '       Ed   . pVP                  P                   Fe  pVP                  '       g   K  V P                  V4      pVP                  VP                  4       V P                  V4       VP                  V4       Kg  	  V'       d$   VP                  ;P                  V,          un        VP                  R8w  dT   VP                  P                  R4      '       g3   VP                  P                  R4      '       g   V P!                  V4       V# )dataclasses.dataclass)handle_cclass_dataclassr:   
__reduce____reduce_ex__)visit_ClassDefNoder  r  	Dataclassr  implementedrZ   var_entriesneeds_propertycreate_Propertyr  rO  r   rX   r;   rf  _inject_pickle_methods)r#   r$   r  rX   rb  r  s   &&    r%   r  0AnalyseDeclarationsTransform.visit_CClassDefNode  s*   &&t,:::1TZZ5J5JJ:#D***?*?@W*XZ^_:::$**000TYYYE//'''#33E:H11$**=JJx(LL* 0 		5(8+ JJ--l;; JJ--o>>++D1r)   c                >   V P                  4       pVP                  P                  R ,          RJ d   R# VP                  P                  R ,          RJ p. pVP                  P                  pRpRpVe   VP                  R VP                  P                   4       4       T;'       g    VP                  P                  R4      pT;'       g?    VP                  P                  R4      ;'       g    VP                  P                  R4      pVP                  pK  VP                  R R	7       V'       d   R# V Uu. uFg  pVP                  P                  '       d   K!  VP                  P                  V4      '       d$   VP                  P                  V4      '       d   Ke  VNKi  	  p	pV Uu. uF"  qP                  P                  '       g   K   VNK$  	  p
pV'       g   V	'       g   V
'       d   V'       g   V'       d   R
pMGV	'       d!   RRP                  R V	 4       4      ,          pMRRP                  R V
 4       4      ,          pV'       d   \        VP                   V4       \#        RRV/,          R\%        R4      .R7      P'                  / 4      pVP)                  VP                  4       V P+                  V4       VP,                  P.                  P1                  V4       R# V FW  pVP                  P                  '       d   K!  VP                  P3                  V4       VP                  P5                  V4       KY  	  V Uu. uF  qP6                  NK  	  ppRP                  \9        V4       UUu. uF  w  rRV: RV: R2NK  	  upp4      p\;        V4      p\=        V4      ^8w  d    VVR8,          ^,          .,           R,          pRVP>                   2p\=        V4      pVPA                  \B        PD                  PG                  RR4      4       RV RRP                  V4       RRP                  V4      PI                  R4      : R VPJ                   R!V R"VPJ                   R#V R$VPJ                   R%V R&VR' R(2pVPA                  \B        PD                  PG                  R)R4      4       \#        VR*\%        R4      .R7      P'                  / 4      pVP)                  VP                  P                  4       V P+                  V4       V PL                  P1                  V4       RP                  R+ V 4       4      \=        V4      ^8X  d   RMR,,           pR-P                  V Uu. uF0  qP                  P                  '       g   K   R.VP6                   R/2NK2  	  up;'       g    R0.4      3pR1V R2V R3V R4V^ ,           R5V R4V^ ,           R6V R72p\#        VR\%        R4      .R7      P'                  / 4      pVP)                  VP                  4       V PO                  WP                  4       V P+                  V4       V PQ                  4        VP,                  P.                  P1                  V4       R# u upi u upi u upi u uppi u upi )9auto_pickleFNTc              3   J   "   T F  qP                   R9  g   K  Vx  K  	  R# 5i)__weakref__N)r  __dict__r   .0r   s   & r%   	<genexpr>FAnalyseDeclarationsTransform._inject_pickle_methods.<locals>.<genexpr>  s     m*?Q66QlClqq*?s   #
#	__cinit__r  r  c                     V P                   # r    r   )r   s   &r%   <lambda>EAnalyseDeclarationsTransform._inject_pickle_methods.<locals>.<lambda>  s    qvvr)   )r  z2no default __reduce__ due to non-trivial __cinit__z6%s cannot be converted to a Python object for picklingr  c              3   H   "   T F  pR VP                   ,          x  K  	  R# 5izself.%sNr   r  s   & r%   r  r    s#     Y}v|qrZcfgflflZlZlv|    "zZPickling of struct members such as %s must be explicitly requested with @auto_pickle(True)c              3   H   "   T F  pR VP                   ,          x  K  	  R# 5ir  r   r  s   & r%   r  r    s     ;`X_STI<N<NX_r  z
                def __reduce_cython__(self):
                    raise TypeError, "%(msg)s"
                def __setstate_cython__(self, __pyx_state):
                    raise TypeError, "%(msg)s"
                msgr  r  z; z__pyx_result.z = __pyx_state[]:N   N__pyx_unpickle_UpdateUnpickledDictzExtensionTypes.cz
                cdef extern from *:
                    int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
                    int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1

                def z(__pyx_type, long __pyx_checksum, tuple __pyx_state):
                    cdef object __pyx_result
                    __Pyx_CheckUnpickleChecksum(__pyx_checksum, z, zUTF-8z%)
                    __pyx_result = z].__new__(__pyx_type)
                    if __pyx_state is not None:
                        z__set_state(<z[> __pyx_result, __pyx_state)
                    return __pyx_result

                cdef z__set_state(z8 __pyx_result, __pyx_state: tuple):
                    zJ
                    __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, dz)
            CheckUnpickleChecksumr   c              3   ,   "   T F
  pR V 2x  K  	  R# 5i)self.Nr!   )r  rL  s   & r%   r  r  	  s     G5F%s5Fs   r  z or r  z is not NoneFalsez
                def __reduce_cython__(self):
                    cdef tuple state
                    cdef object _dict
                    cdef bint use_setstate
                    state = (a	  )
                    _dict = getattr(self, '__dict__', None)
                    if _dict is not None and _dict:
                        state += (_dict,)
                        use_setstate = True
                    else:
                        use_setstate = zE
                    if use_setstate:
                        return z, (type(self), zH, None), state
                    else:
                        return zZ, state)

                def __setstate_cython__(self, __pyx_state):
                    z+__set_state(self, __pyx_state)
            r   ))r  r  r  rb  r  r;  r  rf  rY  sortis_pyobjectcan_coerce_to_pyobjectcan_coerce_from_pyobjectis_struct_or_unionr  r   rW   r   rI   
substituter  rO  rZ   rX   r   create_to_py_utility_codecreate_from_py_utility_coder   r  _calculate_pickle_checksumsr   punycode_class_nameuse_utility_coder   UtilityCodeload_cachedencoder  r  enter_scope
exit_scope)r#   r$   r  auto_pickle_forcedall_membersrd  cinitinherited_reducer   non_pystructsr  pickle_funcall_members_namesixrL  assignments	checksumsunpickle_func_namenum_membersunpickle_codeunpickle_funcmembersany_notnone_memberspickle_codes   &&                       r%   r  3AnalyseDeclarationsTransform._inject_pickle_methods  s    ::  /58!ZZ22=ATIjjooom#))*?*?mm::SYY--k:E/vv3993C3CL3QvvUXU^U^UeUefuUv--C-.  #
"!66%% /0vv/L/LS/Q/Q23&&2Q2QRU2V A{ 	 
 *GkVV-F-F11kGFw/AJNQTQYQYY}v|Y}Q}}
13688;`X_;`3`a "dhh$& (
 cl(#  =+>*?A BLB  ,,TZZ8JJ{#IIOO"";/ !vv)))FF44S9FF66s; !
 2= =A =))&'89%9EB 89"=9% K 44EFI9~"&)B-!*;)<<bA	#243K3K2L!M/0K  !1!1!=!=>SUg!hi!
 (( )AAE9AU@VVXY]YbYbctYuY|Y|  ~E  ZF  YI I$$(OO#4 5+,M$//9J K ))doo5F G M "JJUVW YM$   !1!1!=!=>UWi!jk(hR_`dReQfgrrsuvM..tzz/?/?@JJ}%**11-@iiG5FGGRUVgRhlmRm3suvG"(++U`.wU`PQdjdjdvdv/Kqvvhl/KU`.w  /E  /E  }D  |E  #F  #G
 &Y '( )<'< =  23?9Q<. Q  23?9Q<. Q (( )%K* '{)}]aObNcdooprsK,,TZZ8T::.JJ{#OOIIOO"";/g
 HF !>%X /xs<   ;Z Z?Z"Z.Z
Z
Z;Z
1ZZc                   . pV Ff  pVP                   pVP                  '       d5   VP                  R9  g$   VP                  VP                  4      '       g   KU  VP	                  V4       Kh  	  V'       dT   \        V P                  4      pVP                  pVP                  WVP                  4      w  rV
P                  V4       W:.pV# )zL
Create function calls to the decorators and reassignments to
the function.
)r  rx  )
r  r:  r   r\  r   rn  rQ   r$   r  r  )r#   old_decoratorsr  r$   r  r  r  	transformr   r   reassignmentss   &&&&       r%   _handle_fused_def_decorators9AnalyseDeclarationsTransform._handle_fused_def_decorators5	  s     
'I&&DLLLII%DDOODII..!!), ( *4<<8IyyH(99hmm 5A..s3(Dr)   c                .   VP                   P                  ^ VP                  4       V P                  VR4       VP	                  V4       RVP                  P
                  P                  n        \        P                  P                  VP                  RR7      p\        P                  ! VP                  V4      4      pWCn        V P                  VP                  \        P                  ! V4      V4      Vn        V'       d   V P#                  WV4      pV# )z#Handle def or cpdef fused functionspy_funcFTbinding)rX   insertr9  rU  update_fused_defnode_entryrb  	signatureuse_fastcallr   PyCFunctionNodefrom_defnoder"  coerce_to_tempresulting_fused_function_create_assignmentr#  fused_func_assignmentr6  )r#   r  r  r$   pycfuncs   &&&& r%   _handle_def(AnalyseDeclarationsTransform._handle_defO	  s     	

!T\\*i('',49$$1++88t8T%%g&<&<S&AB(/%%)%<%<LL)--g6&=" 44ZdKDr)   c                   ^RI Hp V P                  '       g   V P                  '       d   V P                  V P                  9  d@   V P                  '       d   \        VP                  R4       M\        VP                  R4       V P                  P                  V P                  4       \        P                  ! VP                  4      Vn
        VP                   FG  pVP                  P                  '       g   K!  VP                  P                  4       ^ ,          Vn        KI  	  V# \        VRR4      pVP!                  W!4      pW n        V P#                  V4       RV n        VP$                  '       d   V P'                  WQV4      pV# )z:Create a fused function for a DefNode with fused arguments)	FusedNodezFused lambdas not allowedzCannot nest fused functionsr  N)r  rJ  fused_functionr  r  r   rW   r|  r   rw   rZ   r   r  r  get_fused_typesr  FusedCFuncDefNoder<   r9  rG  )r#   r  r$   rJ  r   r  s   &&&   r%   _create_fused_function3AnalyseDeclarationsTransform._create_fused_functionc	  s   $...""$*@*@@>>>$(($?@$(($AB""&&t':':;**4884DIyy88$$$"xx779!<CH ! KT<6
**45"4 "<<<##JT:Dr)   c                    VP                   '       da   VP                  '       dO   \        VP                  R 4       RVn        \        P
                  ! VP                  . R7      VP                  n        VP                  # )zFused generators not supportedFr   )is_generatorhas_fused_argumentsr   rW   r   r[   re  rZ   r"   s   &&r%   _handle_fused*AnalyseDeclarationsTransform._handle_fused	  sX    !9!9!9$((<=',D$#00DDJJO'''r)   c                t   V P                  4       pV P                  P                  \        4       4       VP                  pVP                  V4       VP                  P                  4        F  w  rEVP                  V4      '       d   K  VP                  V4      pV'       d@   VP                  '       d.   VP                  '       d   VP                  VP                  4      pV'       d   VP                  WFVP                  4       K  \        VP                  R4       K  	  V P!                  V4      '       d   V P#                  W!4      pM,VP$                  P'                  V4       V P)                  V4      pV P                  P+                  4        RVP,                  9   d   ^RIHp VP3                  V4      # V# )a  
Analyse a function and its body, as that hasn't happened yet.  Also
analyse the directive_locals set by @cython.locals().

Then, if we are a function with fused arguments, replace the function
(after it has declared itself in the symbol table!) with a
FusedCFuncDefNode, and analyse its children (which are in turn normal
functions). If we're a normal function, just analyse the body of the
function.

Not a typer  )UFuncs)r  r  r   rT  r[  declare_argumentsr  r  r\  analyse_as_typer  fused_to_specific
specializedeclare_varrW   r   rS  rN  rZ   r  r  rw  r  r  rW  convert_to_ufunc)r#   r$   r  lenvvar	type_noder  rW  s   &&      r%   r0  .AnalyseDeclarationsTransform.visit_FuncDefNode	  sJ     ##CE*t$ #3399;NC##C(( 006DMMMd.D.D.D??4+A+ABD$$S	>)--6 < d##..s9DII**40006D  "doo% **400r)   c                   V P                  V4      p\        V\        P                  4      '       g   V# V P	                  4       pVP
                  f7   \        P                  ! V4      Vn        VP
                  P                  V4       VP                  '       g   VP                  '       d   V# VP                  V4      '       g   V# WP                  W4      .# r    )r0  rY   r   r   r  code_objectr   CodeObjectNoder  fused_py_funcis_generator_bodyneeds_assignment_synthesis_synthesize_assignmentr#   r$   r  s   && r%   r1  *AnalyseDeclarationsTransform.visit_DefNode	  s    %%d+$..K #(77=D11#6!7!7!7K..s33K11$<==r)   c                    VP                   f\   VP                  fN   \        P                  P	                  V4      Vn         VP                   P                  V P                  4       4       V P                  V4      # r    )rc  r9  r   rd  	for_cfuncr  r  r0  r"   s   &&r%   r  /AnalyseDeclarationsTransform.visit_CFuncDefNode	  s^    #(<(77AA$GD11$2B2B2DE%%d++r)   c                $    V P                  V4      # r    )r0  r"   s   &&r%   visit_GeneratorBodyDefNode7AnalyseDeclarationsTransform.visit_GeneratorBodyDefNode	  s    %%d++r)   c                ^    V P                  V4      pVP                  VP                  n        V# r    )r1  rc  re  )r#   r$   r   s   && r%   visit_GeneratorDefNode3AnalyseDeclarationsTransform.visit_GeneratorDefNode	  s)    ##D)!%!1!1

r)   c                   TpVP                   '       g   VP                  '       d   VP                  pK2  VP                   ;'       g    V P                  P	                  R 4      pVP
                  '       d'   \        P                  P                  W4      ;qQn	        M\        P                  P                  W4      pVP                  Vn        V P                  WV4      # r:  )is_py_class_scopeis_c_class_scopeouter_scopecurrent_directivesr   is_closure_scoper   InnerFunctionNoderA  py_cfunc_noder@  r;  is_cyfunctionrD  )r#   r$   r  genvr;  r   s   &&&   r%   rh  3AnalyseDeclarationsTransform._synthesize_assignment	  s    $$$(=(=(=##D''QQ4+B+B+F+Fy+Q   '0'B'B'O'OPT'^^C$++88GC [[&&t#66r)   c                   VP                   '       dS   VP                   R R R1,           F1  p\        P                  ! VP                  VP                  V.R7      pK3  	  R Vn         \
        P                  ! VP                  \        P                  ! VP                  VP                  R7      VR7      pVP                  V4       V# )Nr  r   r   r   )
r  r   r  rW   r  r   r   r   r   r  )r#   r   r   r  r  assmts   &&&&  r%   rD  /AnalyseDeclarationsTransform._create_assignment	  s    %00266	..MM(225" 7
 #'H**LL""8<<hmmD 	""3'r)   c                   < V P                   P                  4       p\        SV `  V4       V P                   P	                  V4       R # r    )r  rw  rL   visit_func_outer_attrsr   )r#   r$   stackrR   s   && r%   r  3AnalyseDeclarationsTransform.visit_func_outer_attrs	  s8    $$((*&t,##E*r)   c                    V P                  4       pVP                  V4       VP                  '       d   V P                  P	                  \        V P                  R,          4      4       V P                  WP                  4       VP                  VP                  4       V P                  V4       V P                  4        V P                  P                  4        V# VP                  V4       V P                  V4       V# r  )r  r  
expr_scoper  r   rT  r  analyse_scoped_declarationsr<   r  rw  ri  s   && r%   visit_ScopedExprNode1AnalyseDeclarationsTransform.visit_ScopedExprNode	  s     !!#&???  ''D,@,@,D(EFT??3,,T__=t$OO  $$&
  ,,S1t$r)   c                f    V P                  V4       VP                  V P                  4       4       V# r    r<   r  r  r"   s   &&r%   visit_TempResultFromStatNode9AnalyseDeclarationsTransform.visit_TempResultFromStatNode
  ,    4 !!$"2"2"45r)   c                J    VP                   R 8X  d   R# V P                  V4      # )r:   N)r;   r  r"   s   &&r%   r=   /AnalyseDeclarationsTransform.visit_CppClassNode
  s"    ??h&**400r)   c                     R# rq  )*r   rm  rW   r   r   rb  r  r  r  r   r   r  init_assignmentr  r   struct_or_union_wrapperr   r[   rY  	is_structr'  r  replacerX   r  shadowrZ   rY   rY  CSimpleBaseTypeNoder   r   kw_onlyr   r  rX  r  basic_pyobject_propertybasic_propertyr  r  r  )r#   r$   
self_valuer  
attributesrb  init_assignmentsattr
str_formatwrapper_class
class_bodyinit_methodarg_templater   templater  s   &&              r%   r7   8AnalyseDeclarationsTransform.visit_CStructOrUnionDefNode
  s
     r)   c                (    V P                  V4       V# r    rI  r"   s   &&r%   r.   2AnalyseDeclarationsTransform.visit_CDeclaratorNodeg
  s    4 r)   c                    V# r    r!   r"   s   &&r%   r&   /AnalyseDeclarationsTransform.visit_CTypeDefNodel
  r(   r)   c                    R # r    r!   r"   s   &&r%   r1   0AnalyseDeclarationsTransform.visit_CBaseTypeNodeo
  s    r)   c                ,    VP                   R 8X  d   V# R# )publicN)r;   r"   s   &&r%   r4   /AnalyseDeclarationsTransform.visit_CEnumDefNoder
  s    ??h&Kr)   c                n   VP                   V P                  R,          9   d   V P                  4       P                  VP                   4      pVe.   VP                  R8w  dD   VP
                  P                  '       g(   \        VP                  RVP                   ,          4       V P                  V4       V# )r  r:   z,cdef variable '%s' declared after it is usedr   )
r   r  r  rf  r;   r  rv  r   rW   r<   r#   r$   rb  s   && r%   visit_CNameDeclaratorNode6AnalyseDeclarationsTransform.visit_CNameDeclaratorNodex
  s    99,,R00$$&--dii8E!1!1X!=!KK888dhh NQUQZQZ Z[4 r)   c                (    V P                  V4       R # r    rI  r"   s   &&r%   r+   .AnalyseDeclarationsTransform.visit_CVarDefNode
  s    4 r)   c                    V P                  VR 4      pV'       g   R# \        V4      \        J d    V^ ,          Vn        V.VR,          ,           # V# )r$   Nr  )rU  r  r  r$   )r#   r$   
child_nodes   && r%   visit_CnameDecoratorNode5AnalyseDeclarationsTransform.visit_CnameDecoratorNode
  sF    __T62

t#"1DI6JrN**r)   c                   VP                   R 8X  d7   VP                  P                  '       d   V P                  pM*V P                  pMVP                   R8X  d   V P
                  pXP                  R\        P                  ! VP                  \        P                  ! VP                  RR7      VP                  R7      /VP                  R7      P                  ^ ,          pVP                  Vn        VP                  Vn        V# )r  readonlyATTRr#   rV  )rW   r  r  )rW   )r;   r  r  r  r  basic_property_ror  r   rm  rW   r   r   rX   r   )r#   rb  r  r  s   &&  r%   r  ,AnalyseDeclarationsTransform.create_Property
  s    x'zz%%%77..+--H&&	//EII4=4F4F599[a4b:?**F
 		 ' 
 % 

yyr)   c                f    V P                  V4       VP                  V P                  4       4       V# r    r  r"   s   &&r%   rl  ;AnalyseDeclarationsTransform.visit_AssignmentExpressionNode
  r  r)   )r  r  r  rK  r  )/r?   r@   rA   rB   r   rI   r  r  r  r  r  rK  r  r  rZ  r\   r   r  r  r6  rG  rN  rS  r0  r1  r  ro  rr  rh  rD  r  r  r  r=   r7   r.   r&   r1   r4   r  r+   r  r  rl  rD   rE   r}   r~   s   @@r%   r  r  F  sS    ! # M$$7#8:N + , M$$7#8: % & M$$7#8	: + , !&') # $ !&'	)O NI**K0Z4(<('R>,,7 +"
1P7l

( r)   r  c                 P   R P                  V 4      P                  R4      p\        P                  R8  d   RR/M/ p. pR FJ  p \	        \
        V4      pV! V3/ VB P                  4       pTP                  RTR,          ,           4       KL  	  V#   \        \        3 d     Kd  i ; i) zutf-8usedforsecurityF0x:Nr5  N)r  	   )sha256sha1md5)
r  r  r   version_infor  r   	hexdigestAttributeError
ValueErrorr   )member_namesmember_names_stringhash_kwargsr)  	algo_name
mkchecksumchecksums   &      r%   r  r  
  s     ((<077@030@0@F0J$e,PRKI.		 )4J!"5EEOOQH 	,- / 	 
+ 		s   'BB%$B%c                   ~   a a ] tR tRt oRtRtRtV 3R ltRR ltR t	R t
R tR	 tR
 tR tR tR tR tRtVtV ;t# ) CalculateQualifiedNamesTransformi
  zR
Calculate and store the '__qualname__' and the global
module name on some nodes.
Fc                   < V P                  4       P                  V n        . V n        \        4       pVP                  V n        VP                  V n        V P                  V4       V# r    )	global_scoper?  r  rL   r0  r  r  _super_visit_ClassDefNoder<   )r#   r$   _superrR   s   && r%   r\   1CalculateQualifiedNamesTransform.visit_ModuleNode
  sX    ,,.== (.(@(@%)/)B)B&4 r)   c                    V'       d&   V P                   R ,          pVP                  V4       MV P                   p\        RP                  V4      4      Vn        V P
                  Vn        R# )NNNr  N)r?  r   r   r  qualnamer  )r#   r$   r   r  s   &&& r%   _set_qualname.CalculateQualifiedNamesTransform._set_qualname
  sO    **1-HOOD!**H%chhx&89++r)   c                    VP                   '       d'   VP                  '       g   VP                  .V n        R # V P                  P	                  VP                  4       R # r    )is_pyglobalis_pyclass_attrr   r?  r   )r#   rb  s   &&r%   _append_entry.CalculateQualifiedNamesTransform._append_entry
  s?    U%:%:%:#(::,D&&uzz2r)   c                ^    V P                  WP                  4       V P                  V4       V# r    )r  r   r<   r"   s   &&r%   visit_ClassNode0CalculateQualifiedNamesTransform.visit_ClassNode
  s'    4+4 r)   c                J    V P                  V4       V P                  V4       V# r    )r  r<   r"   s   &&r%   visit_PyClassNamespaceNode;CalculateQualifiedNamesTransform.visit_PyClassNamespaceNode
  s#    4 4 r)   c                   V P                   R ,          pVP                  P                  '       dW   V P                   '       dE   V P                   R,          R8X  d-   V P                   P                  4        V P	                  V4       M%V P	                  WP                  P
                  4       V P                  V4       W n         V# )r  <locals>r   )r?  r   
is_wrapperrw  r  r   r<   r#   r$   orig_qualified_names   && r%   visit_PyCFunctionNode6CalculateQualifiedNamesTransform.visit_PyCFunctionNode
  s    "11!4==###(;(;(;@S@STV@W[e@e##%t$t]]%7%784 1r)   c                   VP                   '       d   V P                  '       d   V P                  R,          R8X  g   Q V P                  4       hV P                  R,          pV P                  P                  4        V P                  V4       V P	                  V4       W n        V# V P                  WP
                  4       V P                  V4       V# )r  r  r  r   )r  r?  rw  r  r  r   r0  r  s   && r%   r1  .CalculateQualifiedNamesTransform.visit_DefNode
  s    ???t222&&r*j8M$:M:MM8"&"5"5a"8##%t$))$/"5  tYY/""4(r)   c                "   V P                   R ,          p\        VRR4      R8X  d   V P                   P                  R4       MV P                  VP                  4       V P                   P                  R4       V P                  V4       W n         V# )r  r   Nz<lambda>r  )r?  r  r   r  rb  r  r  s   && r%   r0  2CalculateQualifiedNamesTransform.visit_FuncDefNode
  sw    "11!44&*4&&z2tzz*"":.%%d+1r)   c           	        VP                   P                  V4      p\        P                  ! VP                  \        V4      VR R7      p\        P                  ! VP                  VR7      pVP                  P                  P                  ^ \        P                  ! VP                  VVR7      P                  V P                  4       4      4       R# )T)r   rb  	is_targetr   r   N)r  r\  r   r   rW   r   r  rZ   rX   r<  r   r   analyse_expressionsr  )r#   r$   r   r   rb  r   r   s   &&&&   r%   generate_assignment4CalculateQualifiedNamesTransform.generate_assignment	  s    

&&t,  HHt$	
 ##DHHE:		q%"<"<HH#
 
d..0
1		3r)   c           	     n   V P                   pR V n         V P                  pR V n        V P                  R,          p\        VRR4      ;'       g4    V P	                  4       P                  VP                  P                  4      pV P                  V4       V P                  V4       V P                   '       d6   V P                  VR\        RP                  V P                  4      4      4       V P                  '       d'   V P                  VR\        V P                  4      4       W@n        W n         W0n        V# )Fr  rb  NrA   r  r@   )needs_qualname_assignmentneeds_module_assignmentr?  r  r  r\  r  r   r  r  r  r   r  r  )r#   r$   orig_needs_qualname_assignmentorig_needs_module_assignmentr  rb  s   &&    r%   r  3CalculateQualifiedNamesTransform.visit_ClassDefNode  s   )-)G)G&).&'+'C'C$',$"11!4w- B B!!#//0@0@A 	5!&&t,)))$$T>%2388D<O<O3P%QS'''$$T<%243C3C%DF1)G&'C$r)   c                    V P                  4       pVP                  '       d3   VP                  R 8X  d
   RV n        V# VP                  R8X  d   RV n        V# )rA   Tr@   )r  rv  r   r  r  )r#   r$   r  s   && r%   rZ  /CalculateQualifiedNamesTransform.visit_NameNode,  sT      "!!! yyN*15.  l*/3,r)   )r  r  r  r  r  r?  r    )r?   r@   rA   rB   rC   r  r  r\   r  r  r  r  r  r1  r0  r  r  rZ  rD   rE   r}   r~   s   @@r%   r  r  
  sT      !&#,3
		3* r)   r  c                   J   a  ] tR tRt o R tR tR tR tR tR t	R t
R	tV tR
# )AnalyseExpressionsTransformi;  c                    VP                   P                  4        VP                  P                  VP                   4      Vn        VP                  0.V n        V P                  V4       V P                  V4       V# r    )r  infer_typesrZ   r  rW   	positionsr<   _build_positionsr"   s   &&r%   r\   ,AnalyseExpressionsTransform.visit_ModuleNode=  s\    

 II11$**=	88*4 d#r)   c                   VP                   P                  4        VP                  P                  VP                   4      Vn        V P                  R,          P                  VP                  4       VP                  '       d   V P                  R,          pMVP                  0pV P                  P                  V4       V P                  V4       V P                  V4       V# r  )r[  r  rZ   r  r  r|  rW   r  r   r<   r  )r#   r$   local_positionss   && r%   r0  -AnalyseExpressionsTransform.visit_FuncDefNodeE  s    $$&II11$2B2BC	rtxx(???"nnR0O#xxjOo.4 d#r)   c                    VP                   '       d6   VP                  P                  4        VP                  VP                  4      pV P	                  V4       V# r    )r   r  r  analyse_scoped_expressionsra   r"   s   &&r%   r  0AnalyseExpressionsTransform.visit_ScopedExprNodeU  sE    OO'')224??CDD!r)   c                    V P                  V4       VP                  '       d)   VP                  P                  '       g   VP                  pV# )a~  
Replace index nodes used to specialize cdef functions with fused
argument types with the Attribute- or NameNode referring to the
function. We then need to copy over the specialization properties to
the attribute or name node.

Because the indexing might be a Python indexing operation on a fused
function, or (usually) a Cython indexing operation, we need to
re-analyse the types.
)ra   is_fused_indexr  is_errorr   r"   s   &&r%   visit_IndexNode+AnalyseExpressionsTransform.visit_IndexNode\  s;     	D!tyy'9'9'999Dr)   c                    V P                   R,          P                  VP                  4       V P                  V4       V# r  r  r|  rW   r<   r"   s   &&r%   ra   *AnalyseExpressionsTransform.visit_ExprNodeo  0    rtxx(4 r)   c                    V P                   R,          P                  VP                  4       V P                  V4       V# r  r  r"   s   &&r%   re   *AnalyseExpressionsTransform.visit_StatNodet  r  r)   c                   \        V P                  P                  4       \        ^^4      RR7      pRp^ p. pV F+  w  rgpTP	                  YwYV8X  d   TMV^,           34       YxrCK-  	  VP                  4        WQn        VP                  4        \        V4       U	U
u/ uF  w  rWbK	  	  up
p	VP                  n	        R# u up
p	i )zW
Build the PEP-626 line table and "bytecode-to-position" mapping used for CodeObjects.
T)r  reverseNr   )
r  r  rw  r   r   r  node_positionsr  r[  node_positions_to_offset)r#   	func_noder  	next_linenext_column_in_linerangesr   r  start_columnr  positions   &&         r%   r  ,AnalyseExpressionsTransform._build_positionsy  s     !NN 1a 	
	 	%.!A\MM4|T]L]5Hcorscstu-1* &/ 	#)   )3:
3 K3:
	6 :
s   B>)r  N)r?   r@   rA   rB   r\   r0  r  r  ra   re   r  rD   rE   rF   s   @r%   r  r  ;  s-      &


 
r)   r  c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )FindInvalidUseOfFusedTypesi  c                6    R V n         V P                  V4       V# r|   )_in_fused_functionrO  )r#   trees   &&r%   r  #FindInvalidUseOfFusedTypes.__call__  s    "'

4r)   c                (    V P                  V4       R # r    rI  r"   s   &&r%   rJ  %FindInvalidUseOfFusedTypes.visit_Node  rL  r)   c                   V P                   pVP                  V n         V P                   '       gE   VP                  '       g3   VP                  P                  '       d   \        VP                  R 4       V P                  V4       W n         R# )z-Return type is not specified as argument typeN)r(  rR  rf  return_typer  r   rW   r<   )r#   r$   outer_statuss   && r%   r0  ,FindInvalidUseOfFusedTypes.visit_FuncDefNode  si    .."&":":&&& )))d.>.>.G.G.Gdhh OP4 ".r)   c                    V P                   '       gG   VP                  '       d5   VP                  P                  '       d   \        VP                  R 4       R# V P                  V4       R# )z6Invalid use of fused types, type cannot be specializedN)r(  r  r  r   rW   r<   r"   s   &&r%   ra   )FindInvalidUseOfFusedTypes.visit_ExprNode  sD    &&&49999K9K9K$((TU t$r)   )r(  N)
r?   r@   rA   rB   r  rJ  r0  ra   rD   rE   rF   s   @r%   r&  r&    s     
!/% %r)   r&  c                   ,   a  ] tR tRt o R tR tRtV tR# )ExpandInplaceOperatorsi  c                  a	 VP                   pVP                  pVP                  P                  '       d   V# \	        V\
        P                  4      '       d   V# V P                  4       pRV	3R llo	 S	! VRR7      w  r%TP                  ! R/ TP                  B p\
        P                  ! TP                  TP                  TTRR7      pRTn        TP                  T4      pTP!                  T4       TP#                  T4       \$        P&                  ! TP                  TTP)                  TP                  T4      R7      pTP+                  4        T F  p\-        Y4      pK  	  T#   \         d    Tu # i ; i)Fc                   < V P                   '       d   V . 3# V P                  P                  '       d   V'       g   \        V 4      p W .3# V P                  '       dU   S! V P
                  4      w  r#\        V P                  4      p\        P                  ! V P                  W$R 7      W4.,           3# V P                  '       dE   S! V P                  VR7      w  rS\        P                  ! V P                  WPP                  R7      V3# \        V \        P                  4      '       d   \!        R4      h\        V 4      p W .3# ))r   indexsetting)r  r  z@Don't allow things like attributes of buffer indexing operations)r:  r  r  r
   is_subscriptr   r7  r   	IndexNoderW   r  r  rm  r  rY   BufferIndexNoder  )r$   r9  r   tempsr7  r  side_effect_free_references   &&    r%   r>  VExpandInplaceOperators.visit_InPlaceAssignmentNode.<locals>.side_effect_free_reference  s    |||Rx&&&w!$'V|#"""8C"4::. **488$LeV]o]]"""7'R
 ..txxSNN[]bbbD)";";<< !cdd!$'V|#r)   Tr8  )r  operand1operand2inplacer   r|   r!   )r   r   r  is_cpp_classrY   r   r<  r  r  rR   r  
binop_noderW   r  r  analyse_target_typesanalyse_typesanalyse_operationr   r   	coerce_tor  r	   )
r#   r$   r   r   r  let_ref_nodesdupbinoptr>  s
   &&       @r%   visit_InPlaceAssignmentNode2ExpandInplaceOperators.visit_InPlaceAssignmentNode  sD   hhhh88   Kc94455K 	$$	!;C!NC mm+cll+$$TXX040303-1	3 &&s+#$))HH#.0
 	A1#D +  	K	s   3E' 'E76E7c                    V# r    r!   r"   s   &&r%   ra   %ExpandInplaceOperators.visit_ExprNode  r4  r)   r!   N)r?   r@   rA   rB   rM  ra   rD   rE   rF   s   @r%   r4  r4    s     4l r)   r4  c                   R   a  ] tR tRt o RtRtR tR tR tR t	R t
R tR	 tR
tV tR# )AdjustDefByDirectivesi  z
Adjust function and class definitions by the decorator directives:

@cython.cfunc
@cython.cclass
@cython.ccall
@cython.inline
@cython.nogil
@cython.critical_section
c                X    VP                   V n         R V n        V P                  V4       V# r|   )r  in_py_classr<   r"   s   &&r%   r\   &AdjustDefByDirectives.visit_ModuleNode  s(    // 4 r)   c                n    V P                   pVP                   V n         V P                  V4       W n         V# r    r  r  s   && r%   r!  2AdjustDefByDirectives.visit_CompilerDirectivesNode  s.    //4 (r)   c           
        . pR V P                   9   d   VP                  R 4       V P                   P                  R4      pV P                   P                  R4      pV P                   P                  R4      pVf   RMRpV P                   P                  R4      pVf1   V P                   R,          '       d   VP                  pVe   Vf   RpMVf   RV'       d   RMR3pV P                   P                  R	4      '       d(   R
V P                   9  d   \	        VP
                  R4       RV P                   9   dl   R
V P                   9   d   \	        VP
                  R4       V'       d   \	        VP
                  R4       VP                  RW#WuVR7      pV P                  V4      # R
V P                   9   dQ   V P                  '       d   \	        VP
                  R4       M'VP                  RW#VWuVR7      pV P                  V4      # R V9   d   \	        VP
                  R4       V'       d   \	        VP
                  R4       V'       d   \	        VP
                  R4       V P                  V4       V# )r  r  r  rx  NFTreturnsannotation_typingc_compile_guardr  z+c_compile_guard only allowed on C functionsccallz-cfunc and ccall directives cannot be combinedz-ccall functions cannot be declared 'with_gil')overridabler  r  rY  
except_valhas_explicit_exc_clausez#cfunc directive is not allowed here)r]  r  r  r  rY  r^  r_  z,Python functions cannot be declared 'inline'z+Python functions cannot be declared 'nogil'z.Python functions cannot be declared 'with_gil')NT)
r  r   r   return_type_annotationr   rW   as_cfunctionrO  rT  r0  )r#   r$   r  r  r  r^  r_  return_type_nodes   &&      r%   r1  #AdjustDefByDirectives.visit_DefNode  s   	t&X&##G,??&&z2__((5
+5+=%4??..y9#8K(L(L#::+
0B)
(8eDJ??011gT__6T$((IJdoo%$//)dhh OPdhh OP$$ I(Yp % rD ::d##doo%dhh EF(( %RZ,]t ) v zz$''y $((JK$((IJ$((LMt$r)   c                L   R V P                   9   d   V P                   R ,          pVe   \        VP                  R4       \        P                  ! VP                  \
        P                  ! VP                  VR7      .VP                  R7      pW1n        V P                  V4       V# )r  z2critical_section decorator does not take arguments)r  r  )	r  r   rW   r   r  r   #FirstArgumentForCriticalSectionNoderZ   r<   )r#   r$   r   new_bodys   &&  r%   r0  'AdjustDefByDirectives.visit_FuncDefNode@  s    0OO$67E dhh TU44CCDHHX\]^YYH
 !I4 r)   c                    V# r    r!   r"   s   &&r%   r   &AdjustDefByDirectives.visit_LambdaNodeN  r4  r)   c                H  a  \         ;QJ d)    V 3R  lS P                   4       F  '       g   K   RM	  RM! V 3R  lS P                   4       4      '       d"   VP                  4       pS P                  V4      # S P                  pRS n        S P                  V4       VS n        V# )c              3   @   <"   T F  qSP                   9   x  K  	  R # 5ir    )r  )r  r   r#   s   & r%   r  =AdjustDefByDirectives.visit_PyClassDefNode.<locals>.<genexpr>S  s     U=T	DOO+=Ts   TF)anyconverts_to_cclass	as_cclassrO  rT  r<   r#   r$   old_in_pyclasss   f& r%   r  *AdjustDefByDirectives.visit_PyClassDefNodeR  sy    3UT=T=TU333UT=T=TUUU>>#D::d##!--N#Dt$-DKr)   c                Z    V P                   pR V n         V P                  V4       W n         V# r|   )rT  r<   rp  s   && r%   r  )AdjustDefByDirectives.visit_CClassDefNode]  s.    )) 4 )r)   )r  rT  N)r   total_orderingr  )r?   r@   rA   rB   rC   rn  r\   r!  r1  r0  r   r  r  rD   rE   rF   s   @r%   rR  rR    s<     	 O,\	 r)   rR  c                   F   a  ] tR tRt o RtR tR tR
R ltR tR t	R	t
V tR# )AlignFunctionDefinitionsie  ze
This class takes the signatures from a .pxd file and applies them to
the def methods in a .py file.
c                J    VP                   V n         V P                  V4       V# r    )r  r<   r"   s   &&r%   r\   )AlignFunctionDefinitions.visit_ModuleNodek  s     ZZ
4 r)   c                   V P                   P                  VP                  4      pV'       d   VP                  '       d!   V P	                  VP                  4       V4      # VP                   '       d   VP                   P                  '       gR   \        VP                  R VP                  ,          4       VP                  '       d   \        VP                  R4       R# V# z'%s' redeclaredzprevious declaration hereN)	r  rf  r   	is_cclassr  ro  is_builtin_scoper   rW   r#   r$   pxd_defs   && r%   r  -AlignFunctionDefinitions.visit_PyClassDefNodep  s    **##DII.   //0@'JJ]]]'--*H*H*Hdhh 1DII =>;;;'++'BCr)   Nc                   Vf&   V P                   P                  VP                  4      pV'       d<   VP                  '       g   V# V P                   pVP                  P                   V n         V P                  V4       V'       d   XV n         V# r    r  rf  r  defined_in_pxdr  r<   r#   r$   r  rw  s   &&& r%   r  ,AlignFunctionDefinitions.visit_CClassDefNode|  j    ?jj''8G)))**K ++DJ4 $DJr)   c                   V P                   P                  VP                  4      pV'       d   VP                   '       d   VP                   P                  '       gu   VP                  '       gR   \        VP                  R VP                  ,          4       VP                  '       d   \        VP                  R4       R# VP                  V4      pV# r{  )r  rf  r   r}  is_cfunctionr   rW   ra  r~  s   && r%   r1  &AlignFunctionDefinitions.visit_DefNode  s    **##DII.GMMM1O1O1O'''dhh 1DII =>;;;'++'BC$$W-D r)   c                    V# r    r!   r"   s   &&r%   ra   'AlignFunctionDefinitions.visit_ExprNode  r4  r)   r  r    )r?   r@   rA   rB   rC   r\   r  r  r1  ra   rD   rE   rF   s   @r%   rw  rw  e  s(     


 r)   rw  c                   B   a  ] tR tRt o R tR tR	R ltR tR tRt	V t
R# )
AutoCpdefFunctionDefinitionsi  c                    VP                   V n         \        4       V n        VP                  V n        V P	                  V4       V# r    )r  rT  r=  r  r<   r"   s   &&r%   r\   -AutoCpdefFunctionDefinitions.visit_ModuleNode  s5    //!eZZ
4 r)   c                
   V P                   P                  '       dg   V P                  R ,          '       dN   VP                  V P                  9  d3   VP                  4       '       d   VP                  V P                   R7      pV# )
auto_cpdefr  )r  is_module_scoper  r   r=  is_cdef_func_compatiblera  r"   s   &&r%   r1  *AutoCpdefFunctionDefinitions.visit_DefNode  s]    JJ&&&4??<+H+HIIT%8%880022$$4::$6Dr)   Nc                   Vf&   V P                   P                  VP                  4      pV'       d<   VP                  '       g   V# V P                   pVP                  P                   V n         V P                  V4       V'       d   XV n         V# r    r  r  s   &&& r%   r  0AutoCpdefFunctionDefinitions.visit_CClassDefNode  r  r)   c                    V P                   P                  '       d1   VP                   F   w  r#V P                  P	                  V4       K"  	  V# r    )r  r  r  r=  r|  )r#   r$   r   r   s   &&  r%   rF  5AutoCpdefFunctionDefinitions.visit_FromImportStatNode  s=     ::%%%::##''- &r)   c                    V# r    r!   r"   s   &&r%   ra   +AutoCpdefFunctionDefinitions.visit_ExprNode  r4  r)   )r  r=  r  r    )r?   r@   rA   rB   r\   r1  r  rF  ra   rD   rE   rF   s   @r%   r  r    s#      r)   r  c                   D   a  ] tR tRt o R tR tR tR tR tR t	Rt
V tR	# )
RemoveUnreachableCodei  c                   V P                   R ,          '       g   V# V P                  V4       \        VP                  4      ^8X  db   \	        VP                  ^ ,          \
        P                  4      '       d1   VP                  ^ ,          P                  '       g   VP                  R \        VP                  ^4       F  w  r#VP                  '       g   K  V\        VP                  4      8  dV   V P                   R,          '       d)   \        VP                  V,          P                  R^4       VP                  RV Vn        RVn         V# 	  V# )remove_unreachabler  warn.unreachableUnreachable codeNT)rx  r<   r   rX   rY   r   r[   r  r  r   rW   )r#   r$   idxr  s   &&  r%   ri   (RemoveUnreachableCode.visit_StatListNode  s    &&';<<K4 tzz?aJtzz!}e>P>P$Q$QZ^ZdZdefZgZmZmZm

1"4::q1IC!!!TZZ(../ABB

3 3 35GK!%DS!1DJ%)" 2 r)   c                n    V P                  V4       VP                  P                  '       d   R Vn        V# r_   )r<   rZ   r  r"   s   &&r%   visit_IfClauseNode(RemoveUnreachableCode.visit_IfClauseNode  s-    4 99"""!%Dr)   c                    V P                  V4       VP                  '       dL   VP                  P                  '       d0   VP                   F  pVP                  '       d   K   V# 	  R Vn        V# r_   )r<   r  r  r  )r#   r$   clauses   && r%   visit_IfStatNode&RemoveUnreachableCode.visit_IfStatNode  s`    4  0 0 > > >//+++  * &*"r)   c                   V P                  V4       VP                  P                  '       dT   VP                  '       dB   V P                  R ,          '       d"   \        VP                  P                  R^4       RVn        V# )r  r  N)r<   rZ   r  r  rx  r   rW   r"   s   &&r%   visit_TryExceptStatNode-RemoveUnreachableCode.visit_TryExceptStatNode  sc    4 99"""t'7'7'7&&'9::((,,.@!D#Dr)   c                n    V P                  V4       VP                  P                  '       d   R Vn        V# r_   )r<   r  r  r"   s   &&r%   visit_TryFinallyStatNode.RemoveUnreachableCode.visit_TryFinallyStatNode  s/    4 ,,,!%Dr)   c                |    V P                   R,          '       g#   \        P                  ! VP                  . R7      pV# )zEliminate useless PassStatNode	linetracerV   )rx  r   r[   rW   r"   s   &&r%   visit_PassStatNode(RemoveUnreachableCode.visit_PassStatNode  s0     &&{33%%$(("=Dr)   r!   N)r?   r@   rA   rB   ri   r  r  r  r  r  rD   rE   rF   s   @r%   r  r    s(       r)   r  c                   z   a a ] tR tRt o. 3V 3R lltR tR tR tR tR t	R t
R	 tR
 tR tR tR tRtVtV ;t# )r   i  c                   < \         SV `  4        . V n        . V n        . V n        . V n        R V n        R V n        R V n        Wn	        R# rK   )
rL   rM   yieldsrY  finallysexceptshas_return_valuer   r   excludes)r#   r  rR   s   &&r%   rM   YieldNodeCollector.__init__  sE     % r)   c                L    WP                   9  d   V P                  V4       R # R # r    )r  r<   r"   s   &&r%   rJ  YieldNodeCollector.visit_Node  s    }}$t$ %r)   c                l    V P                   P                  V4       R V n        V P                  V4       R# rq  )r  r   r   r<   r"   s   &&r%   visit_YieldExprNode&YieldNodeCollector.visit_YieldExprNode  )    4 4 r)   c                l    V P                   P                  V4       R V n        V P                  V4       R# rq  )r  r   r   r<   r"   s   &&r%   visit_AwaitExprNode&YieldNodeCollector.visit_AwaitExprNode  r  r)   c                    V P                  V4       VP                  '       d   R V n        V P                  P	                  V4       R# rq  )r<   r   r  rY  r   r"   s   &&r%   visit_ReturnStatNode'YieldNodeCollector.visit_ReturnStatNode  s3    4 :::$(D!D!r)   c                ^    V P                  V4       V P                  P                  V4       R # r    )r<   r  r   r"   s   &&r%   r  +YieldNodeCollector.visit_TryFinallyStatNode   s"    4 T"r)   c                ^    V P                  V4       V P                  P                  V4       R # r    )r<   r  r   r"   s   &&r%   r  *YieldNodeCollector.visit_TryExceptStatNode$  s"    4 D!r)   c                    R # r    r!   r"   s   &&r%   r  %YieldNodeCollector.visit_ClassDefNode(  rE  r)   c                    R # r    r!   r"   s   &&r%   r0  $YieldNodeCollector.visit_FuncDefNode+  rE  r)   c                    R # r    r!   r"   s   &&r%   r   #YieldNodeCollector.visit_LambdaNode.  rE  r)   c                    \        VP                  \        P                  4      '       d(   V P	                  VP                  P
                  4       R # R # r    )rY   r   r   _ForInStatNoderO  r   r"   s   &&r%   r   0YieldNodeCollector.visit_GeneratorExpressionNode1  s6    dii!5!566 JJtyy))* 7r)   c                    R # r    r!   r"   s   &&r%   visit_CArgDeclNode%YieldNodeCollector.visit_CArgDeclNode8  s     	r)   )r  r  r  r   r  r   rY  r  )r?   r@   rA   rB   rM   rJ  r  r  r  r  r  r  r0  r   r   r  rD   rE   r}   r~   s   @@r%   r   r     sI      " 	!%!
!
"#"+ r)   r   c                   D   a  ] tR tRt o R tR tR tR tR tR t	Rt
V tR	# )
MarkClosureVisitori>  c                D    R V n         . V n        V P                  V4       V# r|   )needs_closurer  r<   r"   s   &&r%   r\   #MarkClosureVisitor.visit_ModuleNodeB  s$    "4 r)   c                ,   R V n         V P                  V4       V P                   Vn         RV n         \        V P                  4      pVP                  V4       VP                  '       d   \
        P                  pVP                  '       d=   \
        P                  pVP                  VP                  ,            F
  pRVn        K  	  MV P                  R,          '       d   \
        P                  pMkVP                  '       d5   \        R VP                   4       4      p\!        VP"                  R4       V# VP                  '       d   \
        P$                  pMV# \'        VP                  ^4       F  w  rdWdn        K  	  VP                  VP*                  ,           VP,                  ,            F
  pRVn        K  	  \
        P0                  ! VP"                  VP2                  VP4                  VP                  VP                  ;'       d    VP                  R7      pV! VP"                  VP2                  VP6                  VP8                  VP:                  VP<                  VP>                  WP@                  VPB                  VPD                  R7      p	V	# )FTiterable_coroutinec              3   L   "   T F  qP                   '       g   K  Vx  K  	  R # 5ir    )is_await)r  ys   & r%   r  7MarkClosureVisitor.visit_FuncDefNode.<locals>.<genexpr>Z  s     C$4q

$4s   $
$z/'await' not allowed in generators (use 'yield'))rW   r   rZ   is_coroutine_bodyis_async_gen_body)rW   r   r   r   r   r   r  re  lambda_namer`  r   )#r  r<   r   r  r   r   AsyncDefNoder   AsyncGenNoder  rY  in_async_genrx  IterableAsyncDefNoder   nextr   rW   GeneratorDefNoder  	label_numr  r  in_generatorGeneratorBodyDefNoder   rZ   r   r   r   r   r  r  r`  r   )
r#   r$   r   coroutine_type
yield_exprfoundr  retnodere  	coroutines
   &&        r%   r0  $MarkClosureVisitor.visit_FuncDefNodeH  s   "4 !//!&t}}5	%"//N"""!&!3!3"+"2"2Y5F5F"F"FJ.2J+ #G(()=>>!&!;!;   CI$4$4CCE%))NOK   "33NK&y'7'7;MA#$  < ((9+=+==	@Q@QQQG#'G  R **tyytyy"//"//GGI4G4GI #tyytyy]]1B1BT__%5%5#'#>#>$($@$@B	 r)   c                    R V n         V P                  V4       V P                   Vn         RV n         VP                   '       d)   VP                  '       d   \        VP                  R4       V# )FTz1closures inside cpdef functions not yet supported)r  r<   r]  r   rW   r"   s   &&r%   r  %MarkClosureVisitor.visit_CFuncDefNodet  sY    "4 !//!$"2"2"2$((OPr)   c                f    R V n         V P                  V4       V P                   Vn         RV n         V# )FT)r  r<   r"   s   &&r%   r   #MarkClosureVisitor.visit_LambdaNode}  s3    "4 !//!r)   c                6    V P                  V4       R V n        V# r_   )r<   r  r"   s   &&r%   r  %MarkClosureVisitor.visit_ClassDefNode  s    4 !r)   c                   V P                   p\        VP                  \        P                  4      '       d   VP                  P
                  .V n         V P                  V4      pW n         \        VP                  \        P                  4      '       g   V# VP                  P
                  P                  pVP                  '       d   V# \        V4      P                  V4       V# r    )r  rY   r   r   r  r   r   r  r{  r6  rO  )r#   r$   r  itseqs   &&  r%   r   0MarkClosureVisitor.visit_GeneratorExpressionNode  s    ==dii!5!566!YY//0DM$$T* $))U%9%9:: K		""++K+D177>r)   )r  r  N)r?   r@   rA   rB   r\   r0  r  r   r  r   rD   rE   rF   s   @r%   r  r  >  s)     *X
 r)   r  c                   f   a a ] tR tRt oV 3R ltR tR tRR ltR tR t	R t
R	 tR
 tRtVtV ;t# )CreateClosureClassesi  c                B   < \         SV `  V4       . V n        R V n        R# rK   )rL   rM   pathr  rP   s   &&r%   rM   CreateClosureClasses.__init__  s    !	r)   c                J    VP                   V n        V P                  V4       V# r    )r  r  r<   r"   s   &&r%   r\   %CreateClosureClasses.visit_ModuleNode  s!     JJ4 r)   c                D   . p. pVP                   P                  4        F|  pVP                  P                  4        F[  w  rVV'       g   K  VP                  '       d   VP                  WV34       K5  VP                  '       g   KI  VP                  WV34       K]  	  K~  	  W#3# r    )r[  iter_local_scopesr  r  from_closurer   rd  )r#   r$   r  rd  r  r   rb  s   &&     r%   find_entries_used_in_closures2CreateClosureClasses.find_entries_used_in_closures  s    
%%779E$}}224%%% ''6%%%%%tm4  5 : ''r)   c           	        VP                   '       d   VP                  P                  4        Fg  pVP                  P	                  4        FF  pVP
                  '       d   K  VP                  '       d   K+  VP                  '       d   K?  R Vn        KH  	  Ki  	  V P                  V4      w  rgVP                  4        RVn        RVn        VP                  pVP                  P                  p	V	P                  '       g   V	P                   '       d   V	P"                  p	K2  V'       gZ   V P$                  '       g	   V'       d@   V'       g*   VP&                  '       g   \)        R4      hVP&                  pRVn        RVn        VP                   '       d   M;V'       g   V'       g   R# V'       g"   R Vn        V	P.                  Vn        R Vn        R# VP1                  \2        P4                  4      : RVP                  P6                  P9                  RR4      : 2p
\;        V
4      p
VP=                  WP>                  R R R7      pR VP@                  n!        WXn        VP@                  P                  pR Vn"        R Vn#        VPH                  '       g   VP                   '       d   R VPJ                  R&   \L        PN                  '       d   \L        PN                  VPJ                  R	&   V'       dl   V	PP                  '       g   Q hVPS                  VP>                  \2        PT                  \2        PT                  V	P.                  P@                  R R
7       R Vn        V Fr  w  rTPS                  VP>                  VPV                  '       g   VPX                  MRVP6                  VP@                  R R
7      pVPZ                  '       g   Kk  ^Vn-        Kt  	  R Vn        VP]                  VP.                  4       R# )TFz%DefNode does not have assignment nodeNr   r  __)r   rW   definingimplementingno_gc_clearfreelist)rW   r   rc  r  is_cdef)/rQ  r[  r  r  rV  r  r  
is_cglobalrd  r	  r  r  needs_outer_scoperb  r  ru  rv  rw  r  r{  r   needs_closure_codeis_passthroughscope_classnext_idr   closure_class_prefixrc  r  r   declare_c_classrW   r  is_final_typeis_internalis_closure_class_scoper   r  r   closure_freelist_sizery  r\  outer_scope_cnamein_subscoper   is_declared_genericcheck_c_class)r#   r$   target_module_scope
inner_noder  rb  r  rd  
func_scopecscoper  class_scoper   closure_entrys   &&&&          r%   create_class_from_scope,CreateClosureClasses.create_class_from_scope  s   ));;="]]113E!...%2C2C2CuGWGWGW+/( 4 >
 $(#E#Ed#K  #!&%%
!!&&&&*A*A*A''Fj)))'(OPP!//
,1J)%*D"L(,J%%+%7%7J"%)D"  ''(C(CDJJ$$S.0  (#33hh 4  $(

 !&jj&&"&-1* 1 1 148K""=1(((181N1NK"":.*****##)/)A)A*0*B*B)/););)@)@,0	 $ 2
 &*D"%KD'33II','8'8'8UZZdkkZZ 4 M (((451 & "))**@*@Ar)   c                    \        VP                  \        P                  4      '       g   V# V P                  pR V n        V P                  VP                  V P                  V4       V P                  V4       W n        V# r_   )rY   r   r   r   r  r(  r  r<   )r#   r$   was_in_lambdas   && r%   r   %CreateClosureClasses.visit_LambdaNode  s`    $--77K$$T]]D4E4EtL4 &r)   c                Z   V P                   '       d   V P                  V4       V# VP                  '       g   V P                  '       db   V P	                  WP
                  4       V P                  P                  V4       V P                  V4       V P                  P                  4        V# r    )r  r<   r  r  r(  r  r   rw  r"   s   &&r%   r0  &CreateClosureClasses.visit_FuncDefNode  sx    >>>t$K((/@/@AIIT"t$IIMMOr)   c                (    V P                  V4       V# r    rI  r"   s   &&r%   ro  /CreateClosureClasses.visit_GeneratorBodyDefNode      4 r)   c                n    VP                   '       g   V P                  V4      # V P                  V4       V# r    )r]  r0  r<   r"   s   &&r%   r  'CreateClosureClasses.visit_CFuncDefNode#  s2    ))$//t$Kr)   c                D    \        4       ! V4      pV P                  V4      # r    )rB  r   r"   s   &&r%   r   2CreateClosureClasses.visit_GeneratorExpressionNode*  s     (*40$$T**r)   )r  r  r  r    )r?   r@   rA   rB   rM   r\   r	  r(  r   r0  ro  r  r   rD   rE   r}   r~   s   @@r%   r   r     s:     

(PBd
	+ +r)   r   c                   f   a  ] tR tRt o RtRtR t]t]tR t	R t
R tR t]P                  tR	tV tR
# )InjectGilHandlingi/  z
Allow certain Python operations inside of nogil blocks by implicitly acquiring the GIL.

Must run before the AnalyseDeclarationsTransform to make sure the GILStatNodes get
set up, parallel sections know that the GIL is acquired inside of them, etc.
Fc                p    V P                   '       d$   \        P                  ! VP                  RVR7      pV# )zYAllow the (Python statement) node in nogil sections by wrapping it in a 'with gil' block.r  r  rZ   )r  r   r  rW   r"   s   &&r%   _inject_gil_in_nogil&InjectGilHandling._inject_gil_in_nogil:  s(    :::$$TXXUFDr)   c                t    V P                   pVP                  R 8H  V n         V P                  V4       W n         V# r  )r  r  r<   r#   r$   	was_nogils   && r%   visit_GILStatNode#InjectGilHandling.visit_GILStatNodeH  s3    JJ	jjG+
4 
r)   c                   V P                   p\        VP                  \        P                  4      '       d?   VP                  P                   ;'       d    VP                  P
                  '       * V n         V P                  V4       W n         V# r    )r  rY   rX  r   CFuncDeclaratorNoder  r<   r>  s   && r%   r  $InjectGilHandling.visit_CFuncDefNodeO  s`    JJ	doou'@'@AA..OOt7O7O3ODJ4 
r)   c                n    V P                   pVP                   V n         V P                  V4       W n         V# r    )r  r<   r>  s   && r%   visit_ParallelRangeNode)InjectGilHandling.visit_ParallelRangeNodeW  s.    JJ	ZZ
4 
r)   c                    V# r    r!   r"   s   &&r%   ra    InjectGilHandling.visit_ExprNode^  r4  r)   r=  N)r?   r@   rA   rB   rC   r  r:  visit_RaiseStatNodevisit_PrintStatNoder@  r  rF  ra   r   r  rJ  rD   rE   rF   s   @r%   r7  r7  /  sE      E /. "55Jr)   r7  c                   x   a a ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	 tR
 tR tR tR tR tRtVtV ;t# )GilCheckie  a  
Call `node.gil_check(env)` on each node to make sure we hold the
GIL when we need it.  Raise an error when on Python operations
inside a `nogil` environment.

Additionally, raise exceptions for closely nested with gil or with nogil
statements. The latter would abort Python.
c                   < VP                   .V n        \        P                  P                  V n        \        P                  P                  V n        \        SV `!  V4      # r    )	r  	env_stackr   
NoGilStateHasGilnogil_state"nogil_state_at_current_gilstatnoderL   r  )r#   r  rR   s   &&r%   r  GilCheck.__call__o  sH    ** ++22272B2B2I2I/w%%r)   c                   V P                   pVP                  pV'       d   \        V P                  4      ^8  dn   V P                  R,          P                  '       d   \
        P                  P                  M\
        P                  P                  V n         V P                  W4       W n         V P                  VRVR7       W0n         R# )r  Nr   )
rR  outer_attrsr   rO  r  r   rP  NoGilrQ  r<   )r#   r$   rR  r?  rW  s   &&&  r%   _visit_scoped_childrenGilCheck._visit_scoped_childrenv  s    $$	&&3t~~.2*...*<*B*B*B  &&HXHXH_H_ t1&4t[A$r)   c                   V P                   P                  VP                  4       VP                  P                  pV P                  pV'       d    \
        P                  P                  V n        V'       d.   VP                  '       d   VP                  VP                  4       V P                  WP                  4       W0n        V P                   P                  4        V# r    )rO  r   r[  r  rR  r   rP  
NoGilScopenogil_checkrY  rw  )r#   r$   inner_nogilrR  s   &&  r%   r0  GilCheck.visit_FuncDefNode  s    d../&&,,&&$//::D4+++T--.##D*:*:; 'r)   c                   VP                   e4   \        VP                   P                  RVP                  ,          4       V# V P                  '       d#   VP
                  '       d   VP                  4        V P                  pVP                  R8H  pW#8X  d_   V P                  \        P                  P                  8X  g6   V'       g   \        VP                  R4       M\        VP                  R4       V P                  \        P                  P                  8X  d   RVn	        \        VP                  \        P                  4      '       d   VP                  P                  w  Vn        V P                  pV P                  V n        V'       d   \        P                  P                  M\        P                  P                   pV P#                  W4       W@n        V# )Nz<Non-constant condition in a `with %s(<condition>)` statementr  z3Trying to acquire the GIL while it is already held.z;Trying to release the GIL while it was previously released.F)r  r   rW   r  rR  r]  r   rP  r\  scope_gil_state_knownrY   r  r[   rX   rS  rX  rQ  rY  )r#   r$   r?  is_nogilrS  rR  s   &&    r%   r@  GilCheck.visit_GILStatNode  sh   >>%$..$$57;zzBC K 0 0 0$$	JJ') )9)9U=M=M=X=X)Xdhh !0 1 dhh !7 8u//:::).D&d))5+=+=>> $(#6#6#<#< D-1-T-T*262B2B/08e&&,,e>N>N>U>U##D62T/r)   c                4   VP                   '       g*   V P                  \        P                  P                  8X  d   VP                   R uq!n         \        P
                  ! VP                  RVR7      pV'       g1   V P                  \        P                  P                  8X  d   R Vn        V P                  V4      # V P                  '       g   \        VP                  R4       R# VP                  V P                  R,          4       V P                  V4       V# )Fr  r9  z)prange() can only be used without the GILNr   )r  rR  r   rP  r\  r  rW   ra  r@  r   r]  rO  r<   )r#   r$   node_was_nogils   && r%   rF   GilCheck.visit_ParallelRangeNode  s    :::))U-=-=-H-HH)-U&NJ$$TXXW4HD!d&6&6%:J:J:U:U&U .3*))$//$((GH+,4 r)   c                   V P                   '       g   \        VP                  R 4       R# V P                   \        P                  P
                  8X  d<   \        P                  ! VP                  RVR7      pRVn        V P                  V4      # VP                  '       d#   VP                  V P                  R,          4       V P                  V4       V# )z5The parallel section may only be used without the GILNr  r9  Fr   )rR  r   rW   r   rP  r\  r  ra  r@  r]  rO  r<   r"   s   &&r%   visit_ParallelWithBlockNode$GilCheck.visit_ParallelWithBlockNode  s    $(( & 'u//::: $$TXXW4HD).D&))$// T^^B/04 r)   c                    V P                   '       g   V P                  V4      # RVn        RVn        V P	                  V4       V# )z=
Take care of try/finally statements in nogil code sections.
NT)rR  rJ  r]  is_try_finally_in_nogilr<   r"   s   &&r%   r  !GilCheck.visit_TryFinallyStatNode  sB     ??4(('+$4 r)   c                $    V P                  V4      # r    rJ  r"   s   &&r%   visit_CriticalSectionStatNode&GilCheck.visit_CriticalSectionStatNode      t$$r)   c                $    V P                  V4      # r    rn  r"   s   &&r%   visit_CythonLockStatNode!GilCheck.visit_CythonLockStatNode  rq  r)   c                    V P                   \        P                  P                  8X  d   R Vn        V P                  V4       V# r|   )rS  r   rP  r\  ra  r<   r"   s   &&r%   visit_GILExitNodeGilCheck.visit_GILExitNode  s7    22e6F6F6Q6QQ).D&4 r)   c                z   V P                   '       dG   V P                  '       d5   VP                  '       d#   VP                  V P                   R,          4       VP                  '       d   V P	                  WP                  4       MV P                  V4       V P                  '       d   V P                  Vn        V# r  )rO  rR  r]  rW  rY  r<   in_nogil_contextr"   s   &&r%   rJ  GilCheck.visit_Node  s    >>>d...43C3C3CT^^B/0''.>.>?t$$($4$4D!r)   c                   VP                   '       EdB   VP                   P                  P                  '       Ed   VP                  P                  '       d   VP                  P
                  R 8X  d   \        VP                  4      ^8X  d   RpV P                  \        P                  P                  8X  d   RpM+V P                  \        P                  P                  8X  d   RpV'       di   \        P                  ! VP                  VP                  P                   P"                  V,           VP                  P                  VP                   .R7      pV P%                  V4      # )acquireNNogilGilr  )r#   r  is_cython_lock_typerg  r  r  r   r   rR  r   rP  rX  rQ  r   PythonCapiCallNoderW   rb  rc  rJ  )r#   r$   suffixs   && r%   visit_SimpleCallNodeGilCheck.visit_SimpleCallNode  s    III$))..<<<***t}}/F/F)/SDII!# F5#3#3#9#99 !!U%5%5%<%<< 33HHMM''--6MM&&))	 t$$r)   )rO  rR  rS  )r?   r@   rA   rB   rC   r  rY  r0  r@  rF  rh  r  ro  rs  rv  rJ  r  rD   rE   r}   r~   s   @@r%   rM  rM  e  sL     &
%(!F&(
%%	% %r)   rM  c                   B   a  ] tR tRt o RtR tR tR tR tR t	Rt
V tR	# )
CoerceCppTempsi  a  
For temporary expression that are implemented using std::optional it's necessary the temps are
assigned using `__pyx_t_x = value;` but accessed using `something = (*__pyx_t_x)`. This transform
inserts a coercion node to take care of this, and runs absolutely last (once nothing else can be
inserted into the tree)

TODO: a possible alternative would be to split ExprNode.result() into ExprNode.rhs_result() and ExprNode.lhs_result()???
c                h    V P                  4       P                  '       d   V P                  V4       V# r    )r  r{  r<   r"   s   &&r%   r\   CoerceCppTemps.visit_ModuleNode$  s*    !!!t$r)   c                >   V P                  V4       V P                  4       P                  R ,          '       de   VP                  4       '       dO   VP                  P
                  '       d3   VP                  P                  '       g   \        P                  ! V4      pV# )
cpp_locals)	r<   r  r  result_in_tempr  rC  is_fake_referencer   CppOptionalTempCoercionr"   s   &&r%   ra   CoerceCppTemps.visit_ExprNode*  sm    4 )),77##%%$))*@*@*@II///44T:Dr)   c                    V# r    r!   r"   s   &&r%   visit_CppOptionalTempCoercion,CoerceCppTemps.visit_CppOptionalTempCoercion4  r(   r)   c                    V# r    r!   r"   s   &&r%   visit_CppIteratorNode$CoerceCppTemps.visit_CppIteratorNode7  r(   r)   c                <    V P                  VP                  4       V# r    )r<   ru   r"   s   &&r%   rx   !CoerceCppTemps.visit_ExprStatNode:  s    499%r)   r!   N)r?   r@   rA   rB   rC   r\   ra   r  r  rx   rD   rE   rF   s   @r%   r  r    s(      r)   r  c                      a a ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	 tR
 tR tR tR tR tR tV 3R ltV 3R ltR tR tRtVtV ;t# )TransformBuiltinMethodsi@  z
Replace Cython's own cython.* builtins by the corresponding tree nodes.
Also handle some Python special builtin functions (e.g. super()/locals())
that require introspection by the compiler.
c                6   < \         SV `  ! V/ VB  / V n        R # r    )rL   rM   def_node_body_insertions)r#   r   rq  rR   s   &*,r%   rM    TransformBuiltinMethods.__init__F  s    $'$'(*%r)   c                P    VP                   '       d   R # V P                  V4       V# r    )declaration_onlyr<   r"   s   &&r%   r   2TransformBuiltinMethods.visit_SingleAssignmentNodeJ  s$       t$Kr)   c                F    V P                  V4       V P                  V4      # r    )r<   visit_cython_attributer"   s   &&r%   r  +TransformBuiltinMethods.visit_AttributeNodeQ  s!    4 **400r)   c                    VP                   R 8X  d;   V P                  4       pVP                  R 4      pV'       g   V P                  V4      pV P	                  V4      # )rR   )r   r  r\  _inject_classr  )r#   r$   r^  rb  s   &&  r%   rZ  &TransformBuiltinMethods.visit_NameNodeU  sP    99$##%D$$\2E))$/**400r)   c                   VP                  4       pV'       Ed.   VR 8X  d4   ^RIHp \        P                  ! VP
                  \        V4      R7      pV# VR8X  d#   \        P                  ! VP
                  4      pV# VR9   dZ   \        P                  ! VP
                  \        V4      V P                  4       P                  4       P                  V4      R7      pV# \        P                  ! V4      '       d    V# V P                  P                  P!                  V4      '       d    V# \#        VP
                  RV,          4       V# )__version__)r  r   r  r   rb  z>'%s' not a valid cython attribute or is being used incorrectly)rT  	frozensetr  )rX  r  r  r   r  rW   r   NullNoder   r  builtin_scoper\  r   r%  rQ   cython_scopelookup_qualified_namer   )r#   r$   r  versions   &&  r%   r  .TransformBuiltinMethods.visit_cython_attribute]  s   ,,.	9M)5 ,,TXX]7=ST  f$ ))$((3  BB ))$((y9Q040@0@0B0P0P0R0^0^_h0ik  ,,Y77
 	 **@@KK  dhh `cl lmr)   c                   V P                  4       pV P                  V4       \        VP                  4      ^8X  d   VP                  P	                  \
        P                  ! VP                  4      4       VP                  '       gJ   VP                  P	                  \
        P                  ! VP                  V P                  4       V4      4       V# r  )r  r<   r   r   r   r   GlobalsExprNoderW   r  LocalsExprNodecurrent_scope_node)r#   r$   r^  s   && r%   visit_ExecStatNode*TransformBuiltinMethods.visit_ExecStatNodep  s    !4 tyy>QIIY66txx@A'''		  ,,$"9"9";TCD r)   c                   V P                  4       pVP                  V4      pV'       d   V# VP                  pVR9   d   VR 8X  dM   \        VP                  4      ^ 8  d3   \        V P                  R\        VP                  4      ,          4       V# VR8X  dg   \        VP                  4      ^8  d1   \        V P                  R\        VP                  4      ,          4       \        VP                  4      ^ 8  d   V# \        P                  ! WPP                  4       V4      # \        VP                  4      ^8  d1   \        V P                  R\        VP                  4      ,          4       \        VP                  4      ^ 8  d   V# VP                  '       g   VP                  '       dp   VP                  '       d2   V P                  4       p\        P                  ! VP                  4      pM\        P                  ! V4      p\        P                  ! V4      # \        R VP                   P#                  4        4       4      pV U	u. uF  p	\        P$                  ! WYR7      NK  	  p
p	\        P&                  ! WZR7      # u up	i )	r  varszGBuiltin 'locals()' called with wrong number of args, expected 0, got %dzGBuiltin 'vars()' called with wrong number of args, expected 0-1, got %dzFBuiltin 'dir()' called with wrong number of args, expected 0-1, got %dc              3   `   "   T F$  qP                   '       g   K  VP                   x  K&  	  R # 5ir    r   )r  r_  s   & r%   r  9TransformBuiltinMethods._inject_locals.<locals>.<genexpr>  s      W5Jchh5Js   ..r   r  )r  r  )r  r\  rW   r   r   r   r   r  r  ru  r  r#  rj  r  SortedDictKeysNoder  r  rV  IdentifierStringNoder  )r#   r$   	func_namer^  rb  rW   r   locals_dictlocal_namesr_  r  s   &&&        r%   _inject_locals&TransformBuiltinMethods._inject_locals{  s   !  +Khh**H$TYY!);dhh iDII!' (f$tyy>A%$(($m		N%+ ,tyy>A%K++C1H1H1JDQQ499~!dhh hDII!' (499~!%%%)=)=)=)))"557G"+"5"5gll"CK"+";";C"@K 33K@@  WT\\5H5H5J WWK +- + 33CC +  -%%c66-s    Jc                .   V P                  V4       VP                  R 9   ds   \        VP                  \        P
                  4      '       dI   VP                  P                  p\        V\        P                  4      '       d   VP                  pW!n        V# )not_in)r<   r  rY   rA  r   r  r   NoneCheckNode)r#   r$   r   s   && r%   visit_PrimaryCmpNode,TransformBuiltinMethods.visit_PrimaryCmpNode  sh    4 ==H$$--)E)EFFmm''c9#:#:;;''C #r)   c                $    V P                  V4      # r    )r  r"   s   &&r%   visit_CascadedCmpNode-TransformBuiltinMethods.visit_CascadedCmpNode  s    ((..r)   c                   V P                  4       pVP                  V4      p\        VP                  4      ^8w  g   V'       d   VP                  '       g   V# VP                  P                  \        P                  ! VP                  4      4       VP                  '       gJ   VP                  P                  \        P                  ! VP                  V P                  4       V4      4       V# r  )r  rf  r   r   
is_builtinr   r   r  rW   r  r  r  )r#   r$   r  r^  rb  s   &&&  r%   _inject_eval$TransformBuiltinMethods._inject_eval  s    !I&tyy>Q51A1A1AK		22488<=###II((HHd557?@ r)   c           	     .   V P                  4       p\        V\        P                  4      '       g   V# R ;p;rE\	        V P
                  4       F  w  rg\        V\        P                  4      '       d   TpTp M\\        V\        P                  4      '       d   TpVP                  pTp	K]  \        V\        P                  4      '       g   K  TpTp	K  	  V'       d	   V'       g   V# W0P                  9  Ed   VP                  P                  p
XP                  '       d8   \        P                  ! WP                  P                   VP"                  R7      pMVVP$                  '       dC   \        P&                  ! WR JR7      pV'       d	   RVn        MRVn        RVP*                  n        MV# \        P.                  ! V
\        P                  ! V
\1        R4      R7      VR7      pVP3                  X	4       W0P                  9  g   Q hWP                  V&   V# )Nr  rQ  TrR   r   r   )r  rY   r   FuncDefNodereversedrO  ClassDefNoder  re  r  rZ   rW   rv  r   r   r  r   rb  ru  ClassCellNoderequires_classobj
class_cell	is_activer   r   r  )r#   r$   current_def_node	fdef_node
class_nodegenerator_node
stack_nodestack_scoper&  
fdef_scoperW   r   r   s   &&           r%   r  %TransformBuiltinMethods._inject_class  s   224*E,=,=>>K 376	6J'/'?#J*e&8&899'
)J(>(>??!+&,,	(
J(9(9::&	(
 (@ 
K 999..$$C+++  ((&6&6&;&;","2"24 ...--cVZ@Z[!7;N426I/26
%%/44S&&s{1KLK ,,Z8$A$AAAA7B)))4r)   c                   V P                  4       pVP                  V4      pV'       g   VP                  '       d   V# V P                  4       p\	        V\
        P                  4      '       d-   VP                  '       d   \        V P                  4      ^8  d   V# V P                  R,          w  rgVP                  '       d   RVn
        RVP                  n        \        P                  ! VP                  VP                   R7      \        P"                  ! VP                  VP                  ^ ,          P$                  R7      .Vn        V# VP&                  '       d   \        P"                  ! VP                  VP(                  P$                  VP*                  R7      \        P"                  ! VP                  VP                  ^ ,          P$                  R7      .Vn        V# )r  Tr  r   r  rV  )r  r\  r   r  rY   r   r   r   rO  ru  r  r  r  r   r  rW   rQ  r   r   rv  r  rb  )r#   r$   r  r^  rb  r   r  r&  s   &&&     r%   _inject_super%TransformBuiltinMethods._inject_super  s`   !  +DIIIK**,(EMM22(---3t~~K^abKbK"&.."4
((()-H&.2J!!+''HH8+@+@B""488(--2B2G2GHDI  )))""HH:#3#3#8#8$**, ""488(--2B2G2GH	DI r)   c                n   V P                   P                  VR 4      pV'       d   \        VP                  \        P
                  4      '       d)   VP                  P                  P                  ^ V4       R # \        P
                  ! VP                  P                  W!P                  .R7      Vn        R # R # )Nr   )	r  rw  rY   rZ   r   r[   rX   r<  rW   )r#   r$   body_insertions   && r%   _do_body_insertion*TransformBuiltinMethods._do_body_insertion  sx    66::4F$))U%7%788		&&q.9!..tyy}}6Dii5PR		 r)   c                H   < \         SV `  V4      pV P                  V4       V# r    )rL   r0  r  r  s   &&r%   r0  )TransformBuiltinMethods.visit_FuncDefNode  s%    w(.%r)   c                H   < \         SV `  V4      pV P                  V4       V# r    )rL   ro  r  r  s   &&r%   ro  2TransformBuiltinMethods.visit_GeneratorBodyDefNode!  s%    w1$7%r)   c                   VP                   P                  4       pV'       Ed   V\        P                  9   d   \	        VP
                  4      ^8w  d*   \        VP                   P                  RV,          4       EM\        P                  V,          ! VP                   P                  VP
                  ^ ,          R7      pEMtV\        P                  9   d   \	        VP
                  4      ^8w  d*   \        VP                   P                  RV,          4       EM\        P                  V,          ! VP                   P                  VP
                  ^ ,          VP
                  ^,          R7      pEMVR8X  d   \	        VP
                  4      ^8w  d#   \        VP                   P                  R4       EMVP
                  ^ ,          P                  V P                  4       4      pV'       dA   \        P                  ! VP                   P                  W1P
                  ^,          RR7      pEM	\        VP
                  ^ ,          P                  R	4       EMVR
8X  d   \	        VP
                  4      ^8w  d#   \        VP                   P                  R4       EMVP
                  ^ ,          P                  V P                  4       4      pV'       d/   \        P                  ! VP                   P                  VR7      pEM7\        P                  ! VP                   P                  VP
                  ^ ,          R7      pEMVR8X  d   \	        VP
                  4      ^8w  d#   \        VP                   P                  R4       EM\        P                  ! VP                   P                  RVP
                  ^ ,          VP
                  ^,          4      pRVn        EM]VR8X  d   \	        VP
                  4      ^8w  d#   \        VP                   P                  R4       EM\        P                  ! VP                   P                  RVP
                  ^ ,          VP
                  ^,          4      pRVn        MVR8X  d2   \        P"                  ! VP                  \%        R4      R7      Vn         MVR8X  d2   \        P"                  ! VP                  \%        R4      R7      Vn         MSV P&                  P(                  P+                  V4      '       d   M'\        VP                   P                  RV,          4       V P-                  V4       \/        V\        P0                  4      '       d{   VP                   P2                  '       d_   VP                   P4                  pVR9   d   V P7                  W4      # VR8X  d   V P9                  W4      # VR8X  d   V P;                  W4      # V# )r  z%s() takes exactly one argumentr  z %s() takes exactly two arguments)r@  rA  r  Dcast() takes exactly two arguments and an optional typecheck keywordFr  r  	typecheckrV  r  z#sizeof() takes exactly one argument)arg_typecmodz"cmod() takes exactly two arguments%Tcdivz"cdiv() takes exactly two arguments/rT  r   r  z*'%s' not a valid cython language constructevalrL   )dirr  r  )rg  rX  r  r  r   r   r   rW   r  rY  r  r   TypecastNodeSizeofTypeNodeSizeofVarNoderD  	cdivisionr   r   rQ   r  r  r<   rY   r  r:  r   r  r  r  )r#   r$   rg  r  r  s   &&   r%   r  ,TransformBuiltinMethods.visit_SimpleCallNode&  s   ==44686HHHtyy>Q&$--++-NQY-YZ6HHR))499Q<AD8KKKtyy>Q&$--++-ORZ-Z[6II(S))DIIaL499UV<YDV#tyy>Q&$--++`b  99Q<778H8H8JKD(55 MM--D))A,Z_ a diil..=X%tyy>Q&$--++-RS99Q<778H8H8JKD(778I8ITXY(66t}}7H7HRVR[R[\]R^_V#tyy>Q&$--++-QR$//0A0A3		RSVZV_V_`aVbcD%)DNV#tyy>Q&$--++-QR$//0A0A3		RSVZV_V_`aVbcD%)DNU" ) 2 2488-PUBV W^+ ) 2 2488-P^B_ `**@@JJdmm''BXMO 	4 dI4455$--:O:O:O**I55**4;;F"((99G#))$::r)   c                   VP                   P                  4       pVR 8X  Ed   VP                  P                  pVP                  P                  R4      p\        V4      ^8w  g(   \        V4      ^8  g   \        V4      ^8X  d)   RV9  d"   \        VP                   P                  R4       MV^ ,          P                  V P                  4       4      pV'       dH   VP                  RR4      p\        P                  ! VP                   P                  WS^,          VR7      pM\        V^ ,          P                  R4       V P                  V4       V# )r  Nr  r  Fr  rV  )rg  rX  r  r   r  r  r   r   rW   rY  r  r   r   r  r<   )r#   r$   rg  r   r  r  r  s   &&     r%   visit_GeneralCallNode-TransformBuiltinMethods.visit_GeneralCallNodel  s   ==446v'',,D&&99$?FD	Q#f+/[A%+V*Cdmm''\^ Aw..t/?/?/AB &

; >I$11))1gQZ\D $q'++|44 r)   )r  )r?   r@   rA   rB   rC   rM   r   r  rZ  r  r  r  r  r  r  r  r  r  r0  ro  r  r  rD   rE   r}   r~   s   @@r%   r  r  @  si     
+11&	%7N	/9v6R

DL r)   r  c                   T   a a ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	tVtV ;t# )
ReplaceFusedTypeChecksi  a  
This is not a transform in the pipeline. It is invoked on the specific
versions of a cdef function with fused argument types. It filters out any
type branches that don't match. e.g.

    if fused_t is mytype:
        ...
    elif fused_t in other_fused_type:
        ...
c                X   < \         SV `  4        Wn        ^RIHp V! RR7      V n        R# )r  )ConstantFoldingT)
reevaluateN)rL   rM   r[  Optimizer  r4  )r#   r[  r  rR   s   && r%   rM   ReplaceFusedTypeChecks.__init__  s#    &-(D9r)   c                F    V P                  V4       V P                  V4      # )zK
Filters out any if clauses with false compile time type check
expression.
r<   r4  r"   s   &&r%   r  'ReplaceFusedTypeChecks.visit_IfStatNode  s!    
 	4 ~~d##r)   c                F    V P                  V4       V P                  V4      # )z)
Fold constant condition of GILStatNode.
r  r"   s   &&r%   r@  (ReplaceFusedTypeChecks.visit_GILStatNode  s!     	4 ~~d##r)   c                   \         P                  ! R R7      ;_uu_ 4        VP                  P                  V P                  4      pVP
                  P                  V P                  4      pRRR4       X'       Ed   X'       Ed   \        P                  ! VP                  RR7      p\        P                  ! VP                  R R7      pV P                  W!P                  P                  4      pVP                  pVR	9   d`   V P                  W1P
                  P                  4      pVP                  V4      pVR
9   pV'       d	   V'       g   V'       g   V'       g   V# V# VR9   d   \        V\        P                  4      '       d   VP                  pVP                   '       d#   \#        VP                  P                  R4       V# VP                   '       g#   \#        VP
                  P                  R4       V# \        P$                  ! V4      p	V	 F)  p
VP                  V
4      '       g   K  VR8X  d   Vu # Vu # 	  VR8X  d   V# V# V#   + '       g   i     EL; i)T)ignoreNFr   inr  zType is fusedz-Can only use 'in' or 'not in' on a fused type)isis_not==z!=)r	  r  )r  r  )r   local_errorsr@  rY  r[  rA  r   rY  rW   specialize_typer  same_asrY   r   CTypedefTypetypedef_base_typer  r   get_specialized_types)r#   r$   type1type2
false_node	true_nodeopis_sameeqtypesspecialized_types   &&         r%   r  +ReplaceFusedTypeChecks.visit_PrimaryCmpNode  s     --MM11$2B2BCEMM11$2B2BCE . 5UU"++DHHEBJ!**4884@I((0A0ABEB11,,UMM4E4EF--.<'GB$$6 3 '' eZ%<%<==!33E>>>$--++_=" ! $--++IK  '<<UCE,1( ==)9::!Tz'0 0'1 1 -2 X~((_ .--s   AII	c                     VP                  V P                  P                  4      #   \         d    \	        TR 4       Tu # i ; i)zType is not specific)r[  r[  rZ  KeyErrorr   )r#   r  rW   s   &&&r%   r  &ReplaceFusedTypeChecks.specialize_type  sA    	??4#3#3#E#EFF 	#-.K	s   $' AAc                (    V P                  V4       V# r    rI  r"   s   &&r%   rJ  !ReplaceFusedTypeChecks.visit_Node  r1  r)   )r[  r4  )r?   r@   rA   rB   rC   rM   r  r@  r  r  rJ  rD   rE   r}   r~   s   @@r%   r  r    s.     	:$$0d r)   r  c                   Z   a a ] tR tRt oRtV 3R ltR tR tR tR t	R t
R	 tR
tVtV ;t# )DebugTransformi  z1
Write debug information for this Cython module.
c                   < \         SV `  V4       \        4       V n        V P                  P
                  V n        VP                  V n        . V n	        R V n
        R# rK   )rL   rM   rT  visitedrQ   gdb_debug_outputwritertbc_filec_output_filenested_funcdefsregister_stepinto)r#   rQ   optionsr   rR   s   &&&&r%   rM   DebugTransform.__init__  sL    !u ,,55#]]  " "'r)   c                   VP                   V P                  n        \        VP                   VP                  ^ ,          P
                  V P                  R7      pV P                  P                  RV4       V P                  P                  R4       V P                  V4       V P                   F  pV P                  V4       K  	  RV n        V P                  V4       RV n        V P                  P                  R4       V P                  P                  R4       / pVP                  P                  P!                  4        F  w  rVVP"                  V P$                  9  g   K"  VP&                  P)                  R4      '       d   KE  VP*                  P,                  '       d   Kc  VP*                  P.                  '       d   K  WdV&   K  	  V P1                  V4       V P                  P                  R4       V# )r   )r  filename
c_filenameModule	FunctionsTFGlobals__pyx_)full_module_namer&  r  rj  rW   r.  r(  startr<   r)  r0  r*   serialize_modulenode_as_functionendr  r  r  r?  r$  r   r	  r  r  r  serialize_local_variables)r#   r$   r   nested_funcdefr  rK  rL  s   &&     r%   r\   DebugTransform.visit_ModuleNode  sp   "33--XXa[))))+
 	h& 	k"4  #22N"">2 3 "&--d3!&K  	i JJ&&,,.DA  4FF%%h//FF'''FF,,,
 / 	&&w/I r)   c           
        V P                   P                  VP                  P                  4       \	        VR R4      '       d   V# V P
                  '       d   V P                  P                  V4       V# VP                  f   RpM VP                  P                  P                  pVP                  P                  ;'       g    VP                  P                  p\        VP                  P                  ;'       g    \	        VRR4      VVVP                  P                  \        VP                  ^,          4      R7      pV P                   P#                  RVR7       V P                   P#                  R4       V P%                  VP                  P&                  4       V P                   P)                  R4       V P                   P#                  R	4       VP                  P*                   FM  pV P                   P#                  VP                  4       V P                   P)                  VP                  4       KO  	  V P                   P)                  R	4       V P                   P#                  R
4       RV n        V P-                  V4       RV n        V P                   P)                  R
4       V P                   P)                  R4       V# )r  Fr  r   z	<unknown>)r   rc  pf_cnamer?  linenoFunctionr   Locals	ArgumentsStepIntoFunctionsT)r$  r|  r[  r?  r  r*  r)  r   r9  rb  
func_cnamepyfunc_cnamerj  r   r  rW   r&  r5  r8  r  r7  arg_entriesr<   )r#   r$   r<  rc  r   r   s   &&    r%   r0   DebugTransform.visit_FuncDefNode  s   ))8894u--K!!!  ''-K <<H||))44H
 

''@@4::+@+@FFGD&+$F++::txx{#% 	j.h&&t'7'7'?'?@Hk"##//CGGMM#((#GGKK! 0 	K )*!%4 !&'(Jr)   c                   V P                   '       d   VP                  e   VP                  P                  '       d   \        VRR4      '       dq   VP                  P
                  eY   \        VP                  P
                  R7      pV P                  P                  RVR7       V P                  P                  R4       V P                  V4       V# )N	is_calledFr   StepIntoFunctionr?  )r*  r  r  r  rb  rC  rj  r&  r5  r7  r<   r#   r$   r   s   && r%   rZ  DebugTransform.visit_NameNodeP  s    """		%		&&&k511

%%1 djj334EGGMM,EM:GGKK*+4 r)   c                    V P                  V\        VP                  P                  R4      R,          VP	                  4       RRRRR7      4       R# )z
Serialize the module-level code as a function so the debugger will know
it's a "relevant frame" and it will know where to set the breakpoint
for 'break modulename'.
r  r  1True)r   rc  r<  r?  r=  is_initmodule_functionNr   )!_serialize_modulenode_as_functionrj  r4  
rpartitionmodule_init_func_cnamer"   s   &&r%   r6  /DebugTransform.serialize_modulenode_as_functionb  sN     	..tT&&11#6r:--/ #)	6
 		r)   c                B   V P                   P                  R VR7       V P                   P                  R4       V P                  VP                  P                  4       V P                   P                  R4       V P                   P                  R4       V P                   P                  R4       V P                   P                  R4       RV n        V P                  V4       RV n        V P                   P                  R4       V P                   P                  R 4       R# )r>  r?  r@  rA  rB  TFN)r&  r5  r8  r  r  r7  r*  r<   rJ  s   &&&r%   rP  0DebugTransform._serialize_modulenode_as_functions  s    j.h&&tzz'9'9:Hk"K )*!%4 !&'(Jr)   c           	     d   VP                  4        EF  pVP                  '       g   K  VP                  P                  '       d   R pMRpVP                  '       dv   \
        P                  : RVP                  P                  : 2pVP                  P                  P                  : RVP                  P                  : RVP                  : 2pMXVP                  '       d/   \
        P                  : RVP                  : 2pVP                  pMVP                  pVP                  pVP                  '       g   RpM\        VP                  ^,          4      p\        VP                  VVVVR7      pV P                   P#                  RV4       V P                   P%                  R4       EK  	  R# )PythonObjectCObjectz->r  0)r   rc  r?  r  r=  LocalVarN)rV  rc  r  r  r  r   cur_scope_cnameouter_entryr  rw  r?  r   rd  rW   r  rj  r&  r5  r7  )r#   r  rb  vartyperc  qnamer=  r   s   &&      r%   r8  (DebugTransform.serialize_local_variables  s>   ^^%E;;;zz%%%(#!!! %+$:$:$)$5$5$;$;= ',kk&=&=&L&L&+kk&6&6&+jj2 !!!$*$:$:$)KK1,,,,999 UYYq\*ZZ$E GGMM*e,GGKK
#U &r)   )r(  r)  r*  r&  r$  )r?   r@   rA   rB   rC   rM   r\   r0  rZ  r6  rP  r8  rD   rE   r}   r~   s   @@r%   r"  r"    s4     ' &P/b$" $+$ +$r)   r"  c                      a a ] tR tRt oRtV 3R ltV3R lR ltR tR tR t	R	 t
R
 tR tR tR tR tR tR tR tRtVtV ;t# )HasNoExceptionHandlingVisitori  z
Used by finalExceptClauseNode to work out if the body
needs to handle exceptions at all. This includes:

1. Can raise an exception.
2. May try to access the traceback.
c                @   < R V n         RV n        \        SV `  4        R# rq  )uses_no_exceptionsassignment_lhsrL   rM   r7  s   &r%   rM   &HasNoExceptionHandlingVisitor.__init__  s    "&"r)   c                    < V ^8  d   QhRS[ /# )r  return)r  )r  rG   s   "r%   r  *HasNoExceptionHandlingVisitor.__annotate__  s     ' ' 'r)   c                <    V P                  V4       V P                  # r    )rO  rc  r"   s   &&r%   r  &HasNoExceptionHandlingVisitor.__call__  s    

4&&&r)   c                    R V n         R# rK   rc  r"   s   &&r%   rJ  (HasNoExceptionHandlingVisitor.visit_Node  s
    "'r)   c                (    V P                  V4       R # r    rI  r"   s   &&r%   rx   0HasNoExceptionHandlingVisitor.visit_ExprStatNode  rL  r)   c                (    V P                  V4       R # r    rI  r"   s   &&r%   ri   0HasNoExceptionHandlingVisitor.visit_StatListNode  rL  r)   c                <    VP                   '       g
   R V n        R# R# rK   )r{  rc  r"   s   &&r%   ra   ,HasNoExceptionHandlingVisitor.visit_ExprNode  s    &+D# r)   c                    R V n         R# rK   rl  r"   s   &&r%   r  ,HasNoExceptionHandlingVisitor.visit_CallNode  s     #(r)   c                    R # r    r!   r"   s   &&r%   r  0HasNoExceptionHandlingVisitor.visit_PassStatNode  rE  r)   c                P    V P                   '       g   R # V P                  V4       R # r    )rc  r<   r"   s   &&r%   r  2HasNoExceptionHandlingVisitor.visit_ReturnStatNode  s    &&&4 r)   c                   V P                   '       g   R # VP                  V n        V P                  VP                  4       R V n        VP                  P
                  pVP                  '       g,   VP                  '       g   VP                  '       g   RV n         V P                   '       g   R # V P                  VR.R7       R # )NFr   rh  )
rc  r   rd  rO  r   r  
is_numericr  is_memoryviewslicer<   )r#   r$   rhs_types   && r%   r   8HasNoExceptionHandlingVisitor.visit_SingleAssignmentNode  s    &&&"hh

488"88==###x';';';x?Z?Z?Z ',D#&&&4%1r)   c                   V P                   '       g   R # VP                  pV P                  VJ dn   VP                  '       gZ   VP                  '       gF   VP
                  '       g2   VP                  '       g   VP                  '       g
   RV n         R # R # R # R # R # R # VP                  '       d2   VP                  '       d   VP                  '       d
   RV n         R # R # R # VP                  '       g7   VP
                  '       g%   VP                  '       g   VP                  '       dN   VP                  '       g   VP                  '       d(   VP                  P                  '       g
   RV n         R # R # R # RV n         R # )NF)rc  rb  rd  r  is_argis_localrd  r  is_cpp_optionalrZ  
cf_is_nullcf_maybe_nullr  r{  r  s   && r%   rZ  ,HasNoExceptionHandlingVisitor.visit_NameNode  s"   &&&

$&$$$NNNe&6&6&6%:L:L:L*/' ;M&6N )5$
 (((T-C-C-C.3D+ .D( 53C3C3CuGYGYGYOOOt'9'9'9499CWCWCW /4D+ DX'9 +0'r)   c                   VP                   '       d	   R V n        MOVP                  P                  '       g   VP                  P
                  '       d   V P                  VJd   R V n        VP                  P                  '       g@   VP                  P                  '       g$   VP                  P                  '       g   R V n        V P                  '       d   V P                  V4       R# R# rK   )

is_py_attrrc  r  r|  rb  r  rd  r  r{  r<   r"   s   &&r%   r  1HasNoExceptionHandlingVisitor.visit_AttributeNode  s    ???&+D#ii***djj.H.H.HdNaNaimNm ',D#		%%%)=)=)=A]A]A]&+D#"""t$ #r)   c                    VP                   P                  P                  '       g.   VP                   P                  P                  '       g   R V n        V P                  '       g   R# V P                  V4       R# rK   )r   r  is_arrayis_ptrrc  r<   r"   s   &&r%   r  -HasNoExceptionHandlingVisitor.visit_IndexNode  sN    		'''499>>+@+@+@&+D#&&&4 r)   c                (    V P                  V4       R # r    rI  r"   s   &&r%   visit_CoerceToTempNode4HasNoExceptionHandlingVisitor.visit_CoerceToTempNode  rL  r)   )rd  rc  )r?   r@   rA   rB   rC   rM   r  rJ  rx   ri   ra   r  r  r  r   rZ  r  r  r  rD   rE   r}   r~   s   @@r%   ra  ra    sZ     
' '(!!,(
!
26%!! !r)   ra  r!   )Nr3  r  r  r   r   r   r  r   r  r   r   r   r   r   r   r   r   rD  r   r   r   r   r   r   r	   r
   r   StringEncodingr   r   r   r   r   r   rI   r   r   r   r   r   r4  r   r   r   r  r  r   r  r  r  r  r  r  r6  rB  rn  r  r  r  r  r  r  r&  r4  rR  rw  r  r  r   r  r   r7  rM  r  r  r  r"  ra  r!   r)   r%   <module>r     sK     "& " "6 " "")/"9?" "/5"EK" " &," 39" CI" OU" !	"   
          2 J J * & ) ? ? BIO IX )\ ( ^ E Q K,& K,\!K !<V!; V!r,8\"D	 H# H#V $@ $@N6?$4 6r6+-= 6*y	%/ y	%xl'_.> l'^C6$&6 C6L/+7G /2`6 02B `6Fz$/1A z$z,(0@ ,(^6/ 6r`	< `	F$}| }@]
/ ]
@% %>:\ :zkO-= k\3 3l)? )X5O 5p< <~Z ZzQ+? Q+h36(*: 36ls% s%l"\#3 "J@l @F
\- \~N$_ N$bk!K k!r)   