
    h"	                       S SK r \ R                  " GS0 S\_S\_S\_S\_S\_S\_S\_S	\_S
\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S\_S \_S!\_S"\_S#\_S$\_S%\_S&\_S'\_S(\_S)\_6  S SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S S*KJr  S+S,KJrJrJrJrJrJrJrJr  S+S-KJrJr  S+S.KJr  S+S/KJr  S+S0KJr  S+S1KJr  S+S2KJrJ r   S+S3KJ!r!  S+S4K!J"r"J#r#J$r$J%r%J&r&  S+S5KJ'r'  S+S6K(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r3J4r4  S+S7KJ(r(  S+S8KJ5r5  S9S:KJ6r6  S+S;K7J8r8  S+S<KJ9r9  S9S=K:J;r;  S+S>K<J=r=J>r>  S+S?K?J@r@JArAJBrBJCrCJDrDJErEJFrFJGrGJHrHJIrIJJrJJKrKJLrLJMrMJNrN  S+S@K!JOrO  \P\Q4rR " SA SB5      rS\S" 5       rT\" 5       rU\.\/4SC\.\!RD                  4SD\.\!R                  4SD\.\!R                  4SD\.\!R                  4SD\/\.4SE\/\!R                  4SF\/\!R                  4SF\!RD                  \.4SG\!R                  \.4SG\!R                  \.4SG\!R                  \.4SG\!R                  \!R                  4SH\!R                  \!R                  4SI0r]SJ r^SK r_SL r`GSSM jraSN rbSO rcSP rdSQ reSR rfSS rg " ST SU\5      rh " SV SW\h5      ri " SX SY\h5      rj " SZ S[\j5      rk " S\ S]\k5      rl " S^ S_\k5      rm " S` Sa\j5      rn " Sb Sc\n5      ro " Sd Se\n5      rp " Sf Sg\n5      rq " Sh Si\n5      rr " Sj Sk\n5      rsSl rt " Sm Sn\n5      ru " So Sp\n5      rv " Sq Sr\v5      rw " Ss St\j5      rx " Su Sv\j5      ry " Sw Sx\j5      rz " Sy Sz\h5      r{ " S{ S|\h5      r| " S} S~\h5      r} " S S\}5      r~ " S S\h5      r " S S\j5      r " S S\}5      r " S S\j5      r " S S\h5      r " S S\j5      r " S S\h5      r " S S\5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\j5      r " S S\j5      r " S S\h5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\h5      r " S S\5      r " S S\5      r " S S\h5      r " S S\h5      r " S S\5      r " S S\h5      r " S S\5      r " S S\h5      r " S S\5      r " S S\5      r " S S\h5      r " S S\5      r " S S\5      r " S S\5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\5      r " S S\5      r " S S\}5      r " S S\5      r " S S\5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\h5      r " S S\i5      r " S S5      r " S S\h\5      r " S S\h5      r " S S\h5      r " S S\h\5      r " S S\h5      r " S S\h5      r " S S\h\5      r " S S\5      r " S S5      r " S S\h5      r " S S\h5      r " S S\h5      r " S GS \5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\h5      r " GS	 GS
\5      r " GS GS\5      r " GS GS\5      r " GS GS\5      r " GS GS\j5      r " GS GS\5      r " GS GS\5      r " GS GS\j5      rGS r\GR                  \GR                  \GR                  \GR                  GS.r " GS GS\h5      r " GS GS\5      r " GS GS \5      r " GS! GS"\5      r " GS# GS$\5      r " GS% GS&\5      r " GS' GS(\5      r " GS) GS*\5      rGS+ r " GS, GS-\5      r\\\GS..rGS/ r " GS0 GS1\h5      rGS2rGS3rGS4rGS5rGS6r " GS7 GS8\h5      r " GS9 GS:\h5      r " GS; GS<\5      r " GS= GS>\5      r " GS? GS@\h5      r " GSA GSB\h5      r \GR                  r0 GSD\GR                  _GSE\GR                  _GSF\GR                  _GSG\GR                  _GSH\GR                  _GSI\GR                  _GSJ\GR                  _GSK\GR                  _GSL\GR                  _GSM\GR                  _GSN\GR                  _GSO\GR                  _GSP\GR                  _GSQ\GR                  _GSR\GR                  _GSS\GR                  _GST\GR                  _\GR                  \GR                  \GR                  \GSU GSV GSW.EGr GSX Gr " GSY GSZ\h5      Gr " GS[ GS\G\5      GrGS] Gr " GS^ GS_G\5      Gr " GS` GSaG\5      Gr " GSb GScG\5      Gr " GSd GSeG\5      Gr " GSf GSgG\5      Gr	 " GSh GSiG\5      Gr
 " GSj GSkG\5      Gr " GSl GSmG\5      Gr\	GR                  " GSn5      GR                  GrG\" 1 GSok5      Gr " GSp GSqG\5      Gr " GSr GSsG\5      Gr " GSt GSu\h5      Gr " GSv GSw\h5      Gr " GSx GSy\h5      GrGSzGS{GS|GS}GS}GS~GSGS|GS}GS.	Gr " GS GS5      Gr " GS GS\hG\5      Gr " GS GS\G\5      GrG\G\G\G\G\G\G\G\G\	G\
G\G\G\G\G\GS.GrGSGS jGr " GS GS\h5      Gr " GS GSG\5      Gr " GS GSG\5      Gr " GS GSG\5      Gr  " GS GS\i5      Gr! " GS GSG\5      Gr" " GS GSG\"5      Gr# " GS GSG\5      Gr$ " GS GSG\5      Gr% " GS GSG\5      Gr&GS Gr' " GS GSG\5      Gr( " GS GSG\5      Gr) " GS GSG\5      Gr* " GS GSG\5      Gr+ " GS GSG\*5      Gr, " GS GS\h5      Gr- " GS GS\h5      Gr. " GS GS\h5      Gr/ " GS GS\h5      Gr0 " GS GS\h5      Gr1g! \ a    GSC r GNf = f(      Nerrorwarning	warn_onceInternalErrorCompileErrorUtilityCodeTempitaUtilityCodeStringEncodingoperatorlocal_errorsreport_errorNamingNodes
PyrexTypespy_object_type	list_type
tuple_typeset_type	dict_typeunicode_type
bytes_type	type_typeBuiltinSymtabUtilsfind_coercion_errordebug_disposal_codedebug_temp_allocdebug_coercionbytearray_type
slice_typememoryview_typebuiltin_sequence_typesbuild_line_tableinspectcopyospathlibresys)Optional   )r   r   r   r   r   r   CannotSpecializeperformance_hint)r   r	   )r$   )r
   )r   )r   )NodeSingleAssignmentNode)r   )c_char_ptr_typer   typecast
error_typeunspecified_type)	TypeSlots)r   r   r   r   r   r   r   r    r!   sequence_typesr"   )r   )r      )r   )AnnotationItem)Future)print_call_chain)r   r   )
to_pythranis_pythran_supported_type#is_pythran_supported_operation_typeis_pythran_exprpythran_func_typepythran_binop_typepythran_unaryop_typehas_np_pythranpythran_indexing_codepythran_indexing_type!is_pythran_supported_node_or_nonepythran_typepythran_is_numpy_func_supportedpythran_get_func_include_filepythran_functor)PythranExprc                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )NotConstant@   Nc                 v   > [         R                  c  [        TU ]  U 5      [         l        [         R                  $ N)rL   _objsuper__new__)cls	__class__s    S/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/ExprNodes.pyrR   NotConstant.__new__C   s,    #$ws3K    c                     g)Nz<NOT CONSTANT> selfs    rU   __repr__NotConstant.__repr__I   s    rW   rY   )	__name__
__module____qualname____firstlineno__rP   rR   r\   __static_attributes____classcell__rT   s   @rU   rL   rL   @   s    D    rW   rL   zGCannot convert Unicode string to 'bytes' implicitly, encoding required.z5Unicode objects only support coercion to Py_UNICODE*.zBCannot convert 'bytes' object to str implicitly, decoding requiredz8Cannot convert 'bytes' object to Py_UNICODE*, use 'str'.z?Cannot convert 'char*' to unicode implicitly, decoding requiredzcython.pymutex cannot be copiedz*cython.pythread_type_lock cannot be copiedc                   ^  [         R                  T 5      nUc  U$ UR                  S   (       a  [        U 4S j[        R
                  [        R                  [        R                  [        R                  4 5       5      (       a=  T S   R                  (       a  U$ UR                  S   S;   a  U$ ST S   R                  -  $ U$ )Nc_string_encodingc              3   ,   >#    U  H	  oT;   v   M     g 7frO   rY   ).0t
type_tuples     rU   	<genexpr>&find_coercion_error.<locals>.<genexpr>l   s      r ,qaz/ ,qs   r,   )asciiutf8z\'%s' objects do not support coercion to C types with non-ascii or non-utf8 c_string_encodingr   )coercion_error_dictget
directivesanyr   r1   c_uchar_ptr_typec_const_char_ptr_typec_const_uchar_ptr_typeis_pyobjectname)rj   defaultenverrs   `   rU   r   r   g   s    

!
!*
-C
{
..,
- rJ,F,F
HcHc,6,L,LjNoNo,q r r ra=$$N^^/04EENqt~  @A  uB  uG  uG  G  G
rW   c                 h    [         [        [        [        S.R                  U R                  S   5      $ )N)bytes	bytearraystrunicodec_string_type)r   r    r   rp   rq   )ry   s    rU   default_str_typer   x   s-    #	
 
c#..
)*+rW   c                      U  HT  nUb%  [        UR                  [        [        45      (       d  M-  UR                  S:  d  M?  [	        UR
                  SSS9  MV     g)z
Raise a warning on nodes that are known to have negative numeric values.
Used to find (potential) bugs inside of "wraparound=False" sections.
Nr   zfthe result of using negative indices inside of code sections marked as 'wraparound=False' is undefinedr,   level)
isinstanceconstant_resultintfloatr   pos)nodesnodes     rU   check_negative_indicesr      sP    
 <z$*>*>eMM!#DHH '(*	 rW   c                    UR                   (       da  Uc  UR                  U 5      nU[        L aD  UR                  (       a3  [	        UR                  5      S:X  a   UR                  S   R
                  nUb  UR                   (       a  Ub@  UR                  5       (       a+   UR                  UR                     nUR                  U 5      $ UR                   Vs1 s H0  nUR                  (       a  [        X5      OUR                  U 5      iM2     nn[	        U5      S:X  a  UR                  5       $ g ! [         a     Nf = f! [        [        [        4 a     Nf = fs  snf )Nr,   r   )is_sequence_constructor
infer_typer   cf_statelenrhsAttributeErrorhas_constant_resultargsr   
ValueError	TypeError
IndexError
is_starredinfer_sequence_item_typepop)ry   seq_node
index_nodeseq_typeitem
item_typess         rU   r   r      s>   ++**3/Hz!  S):):%;q%@'00377H  @ @!j&D&D&F&F,}}Z%?%?@ s++ !
% 48??$S/X[H\\% 	 
 z?a>>### &  	:6 

s*   D1  E 7E1
D>=D>EEc           	      f   U Vs/ s GH  nUc  [         S[        S5      4OUR                  (       aA  [        UR                  UR                  (       a  UR
                  OS/UR                  -   5      OUR                  (       a7  [        UR                  UR                  UR                  UR                  45      OWUR                  5       (       aA  UR                  UR                  UR                  [         L a  [        UR                  5      OS4OSPGM     nnSU;   a  gU [        U5      4$ s  snf )al  
Recursively generate a deduplication key from a sequence of values.
Includes Cython node types to work around the fact that (1, 2.0) == (1.0, 2), for example.

@param outer_type: The type of the outer container.
@param item_nodes: A sequence of constant nodes that will be traversed recursively.
@return: A tuple that can be used as a dict key for deduplication.
N)r   typer   make_dedup_key
is_literalmult_factorr   is_slicestartstopstepr   r   tuple)
outer_type
item_nodesr   	item_keyss       rU   r   r      s	   $ 
 D /3ltDz*gk  hD  hD^DIIDOO(8(8QU'VY]YbYb'bcNRmm^DII

DIItyy'IJ W[VnVnVpVp ii--,0II,Gd4''(TS	   
 yuY'''
s   DD.c                 >   U c  gU R                   [        R                  :X  a  U R                  S:X  a  gU R                   R                  (       a5  SU R
                  R                  < SU R
                  R                  < S3S4$ SU R
                  R                  -  S4$ )	N)__Pyx_CppExn2PyErr();F*)r   TzAtry { throw; } catch(const std::exception& exn) {PyErr_SetString(z+, exn.what());} catch(...) { PyErr_SetNone(z); }Fzc%s(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");)r   r   c_char_typevaluerv   entrycname)exception_values    rU   get_exception_handlerr      s    -


*"8"8
8##s*,				)	)	)
  %%++%%++	-
  	2  %%++-  	rW   c                    U(       a{  U(       aR  U R                   R                  [        R                  " SS5      5        U R	                  U R                  SU5      5        g U R	                  U R                  SU5      5        g g )NErrOccurredWithGILExceptions.c__Pyx_ErrOccurredWithGIL()PyErr_Occurred())globalstateuse_utility_coder   load_cachedputlnerror_goto_if)codecheck_py_exceptionr   nogils       rU   maybe_check_py_errorr      sg    --''(<nMOJJt))*FLMJJt))*<cBC rW   c                    [        U5      u  pgU R                  S5        U R                  SU-  5        U(       a   U R                  U R                  X15      5        [        XX5        U R                  S5        U(       a  U R	                  SS9  U R                  U5        U(       a  U R                  5         U R                  U R                  U5      5        U R                  S5        g )Ntry {z%s} catch(...) {Tdeclare_gilstate})r   r   error_goto_if_nullr   put_ensure_gilput_release_ensured_gil
error_goto)r   r   inside	py_resultr   r   raise_py_exceptionr   s           rU   translate_cpp_exceptionr      s    -B?-S*JJwJJtf}

4**9:;3>JJ T2JJ!"$$&JJts#$JJsOrW   c                     U R                   S:X  d   eU R                  c  gU R                  R                  (       a  g[        U R                  [        5      (       a  U R                  R
                  S:X  a  gg)N+TFr   )exception_checkr   is_namer   CharNoder   )r   s    rU   needs_cpp_exception_conversionr      sf    3&&&# ##$&&11d6J6J6P6PTW6WrW   c                    [        U5      u  p[        U5      u  pU R                  S5        U R                  UR                  SU-  5      5        [        X	X5        U R                  S5        U R                  SU-  5        [        XX5        U R                  S5        U(       a  U R	                  SS9  U R                  U
5        U(       a  U R                  5         U R                  U R                  U5      5        U R                  S5        U R                  S5        U(       a  U R	                  SS9  U R                  U5        U(       a  U R                  5         U R                  U R                  U5      5        U R                  S5        g )Nr   z__pyx_local_lvalue = %s;r   Tr   r   )r   r   declaration_coder   r   r   r   )r   r   lhs_typelhs_coderhs_codelhs_exc_valassign_exc_valr   handle_lhs_exclhc_check_py_exchandle_assignment_excassignment_check_py_excs               rU   translate_double_cpp_exceptionr   
  s1   '<['I$N5J>5Z2JJwJJx(()Ch)NOP<JJwJJ)H45CJJ T2JJ$%$$&JJts#$JJsOJJ T2JJ~$$&JJts#$JJsOrW   c                      \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr\r\R@                  RB                  S:X  a  \"" \#RH                  " S5      S9r%O\"S 5       r%S	 r&S
 r'S r(S r)S r*S r+S r,S^S jr-S r.S r/S_S jr0S r1S_S jr2S r3S r4S r5S r6S r7S r8S r9S r:S r;S r<S  r=S! r>S" r?S# r@S$ rAS% rBS& rCS' rDS`S( jrES) rFS* rGS+ rHS, rIS- rJS. rKS/ rLS0 rMS1 rNS2 rOS3 rPS4 rQS5 rRS6 rSS7 rTS8 rUS9 rVS: rWS; rXS< rYS= rZS> r[S? r\S@ r]SA r^  SaSB jr_S^SC jr`SD raSE rbSF rcSG rdSH re  SbSI jrfSJ rgSK rhSL riSM rjSN rkSO rlScSP jrmSQ rnSR roSS rpST rqSU rrSV rsSW rtSX ruSY rvSdSZ jrw\xS[ 5       ryS\ rzS]r{g)eExprNodei'  NTFcpythonsubexprs)fgetc                     U R                   $ rO   )r   rZ   s    rU   child_attrsExprNode.child_attrs  s    == rW   c                     g rO   rY   r[   ry   s     rU   analyse_annotationsExprNode.analyse_annotations      rW   c                 h    [        US5        [        U R                  R                  < SU< S35      e)Nznot implemented.z not implemented)r:   r   rT   r^   )r[   method_names     rU   not_implementedExprNode.not_implemented  s.    &78'+~~'>'>LN 	NrW   c                     gNr   rY   rZ   s    rU   	is_lvalueExprNode.is_lvalue      rW   c                 f    U R                  5       =(       a    U R                  R                  (       + $ rO   )r   r   is_memoryviewslicerZ   s    rU   is_addressableExprNode.is_addressable  s!    ~~D		(D(D$DDrW   c                 T    U R                   R                  =(       a    U R                  $ rO   )r   rv   is_temprZ   s    rU   is_ephemeralExprNode.is_ephemeral  s     yy$$55rW   c                     / nU R                    HI  n[        X5      nUc  M  [        U5      [        L a  UR	                  U5        M8  UR                  U5        MK     U$ rO   )r   getattrr   listextendappend)r[   r   rw   r   s       rU   subexpr_nodesExprNode.subexpr_nodes  sR     MMD4&D:%LL&LL& " rW   c                 \    U R                   (       a  U R                  $ U R                  5       $ rO   )r  	temp_codecalculate_result_coderZ   s    rU   resultExprNode.result  s$    <<
 >>!--//rW   c                     U(       aI  U R                   (       a6  U R                  R                  (       a  U R                  R                  (       a  U$ SU l        SR                  U(       a  SU5      $ SU5      $ )NTz{}({})__PYX_STD_MOVE_IF_SUPPORTEDz	std::move)r  r   is_cpp_classis_referencehas_temp_movedformat)r[   r  optionals      rU   _make_move_result_rhsExprNode._make_move_result_rhs  sP    T\\dii.D.DTYYMcMcM"<[abbk[abbrW   c                 >    U R                  U R                  5       SS9$ )NTr  )r  r  rZ   s    rU   move_result_rhsExprNode.move_result_rhs  s    ))$++-$)GGrW   c                     U R                  U5      nUR                  (       dD  UR                  (       d3  UR                  =(       a    U R                  nU R                  X#(       + S9nU$ )Nr  )	result_asr  needs_refcountingis_rvalue_referencer  r  )r[   r   r  requires_moves       rU   move_result_rhs_asExprNode.move_result_rhs_as  sP    %!!T%;%; 44EM//AR/SFrW   c                 X    [        U 5      (       a  [        U 5      $ Uc   e[        X5      $ rO   )rE   r;   )r[   type_s     rU   pythran_resultExprNode.pythran_result  s/    ,T22d##   $&&rW   c                     g)zJ
Subtypes may return False here if result temp allocation can be skipped.
TrY   rZ   s    rU   is_c_result_requiredExprNode.is_c_result_required  s     rW   c                     U R                   (       aD  U R                  R                  (       a)  U[        :w  a  [	        U[        U R                  5       5      $ [	        XR                  5       U R                  5       5      $ rO   )r  r   rv   r   r2   r  ctyper[   r   s     rU   r  ExprNode.result_as  sM    LLTYY22& D.$++-@@jjlDKKM::rW   c                 ,    U R                  [        5      $ rO   )r  r   rZ   s    rU   r   ExprNode.py_result"  s    ~~n--rW   c                 @    U R                   =(       d    U R                  $ rO   )result_ctyper   rZ   s    rU   r,  ExprNode.ctype&  s       -DII-rW   c                     g rO   rY   rZ   s    rU   get_constant_c_result_code#ExprNode.get_constant_c_result_code+  s     rW   c                     g rO   rY   rZ   s    rU   calculate_constant_result"ExprNode.calculate_constant_result6  s     	rW   c                 X    U R                   [        L=(       a    U R                   [        L$ rO   r   constant_value_not_setnot_a_constantrZ   s    rU   r   ExprNode.has_constant_resultB  )    ##+AA :##>9	:rW   c                 0    [        U R                  S5        g )NzInvalid compile-time expressionr   r   r[   denvs     rU   compile_time_valueExprNode.compile_time_valueF  s    dhh9:rW   c                 h    [        U R                  SUR                  R                  < SU< 35        g )Nz"Error in compile-time expression: : )r   r   rT   r^   )r[   es     rU   compile_time_value_error!ExprNode.compile_time_value_errorJ  s$    dhhKK  !% 	&rW   c                     U R                  5       (       a  U R                  $ U R                  5       nUb  U$ [        U R                  S5        g )Nz Exception value must be constant)r   r   r5  r   r   r[   ry   r  s      rU   as_exception_valueExprNode.as_exception_valueN  sI    
 ##%%''' 002Mdhh:;rW   c                 0    [        U R                  S5        g )NzCannot assign to or delete thisrA  r   s     rU   analyse_target_declaration#ExprNode.analyse_target_declaration_  s    dhh9:rW   c                 0    [        U R                  S5        g )Nz=Cannot use anything except a name in an assignment expressionrA  r   s     rU   0analyse_assignment_expression_target_declaration9ExprNode.analyse_assignment_expression_target_declarationb  s    dhhWXrW   c                 H    U R                  U5      nUR                  5         U$ rO   )analyse_typescheck_constr[   ry   r   s      rU   analyse_const_expression!ExprNode.analyse_const_expressiong  s%    
 !!#&rW   c                 $    U R                  U5      $ rO   rV  r   s     rU   analyse_expressionsExprNode.analyse_expressionsp  s     !!#&&rW   c                 $    U R                  U5      $ rO   )analyse_target_typesr[   ry   r   s      rU   analyse_target_expression"ExprNode.analyse_target_expressionv  s     ((--rW   c                 J    U R                  U5      nUR                  U5      nU$ rO   )rV  coerce_to_boolean)r[   ry   r   bools       rU   analyse_boolean_expression#ExprNode.analyse_boolean_expression|  s'    !!#&%%c*rW   c                 d    U R                  U5      nUR                  U5      R                  U5      $ rO   )rV  re  coerce_to_simplerX  s      rU   analyse_temp_boolean_expression(ExprNode.analyse_temp_boolean_expression  s0     !!#&%%c*;;C@@rW   c                     [        U SS 5      b  g[        U R                  5        Vs/ s H  o"R                  U5      PM     snS5      $ s  snf )Nr   rY   )r  sumr	  type_dependenciesrX  s      rU   ro  ExprNode.type_dependencies  sJ     4&2D<N<N<PQ<PD**3/<PQSUVVQs   A	c                     [        U SS 5      nUb  U$ [        U SS 5      nUb  UR                  $ U R                  S5        g )Nr   r   r   )r  r   r   r[   ry   r   r   s       rU   r   ExprNode.infer_type  sI    
 tVT*Kgt,::\*rW   c                     U R                   =(       dF    U R                  =(       d3    U R                  R                  =(       d    U R                  R                  $ rO   )r   r  r   is_arrayis_cfunctionrZ   s    rU   nonlocally_immutableExprNode.nonlocally_immutable  s5     ^$,,^$))2D2D^		H^H^^rW   c                     [        U R                  U [        U R                  [        U5      U[        R
                  S9S9$ )zr
Return a node that represents the (type) result of an indexing operation,
e.g. for tuple unpacking or iteration.
r   r   r   baseindex)	IndexNoder   IntNoder~   r   c_py_ssize_t_typer[   r}  s     rU   inferable_item_nodeExprNode.inferable_item_node  s:    
 GHHCJJD`D`5b c 	crW   c                     g rO   rY   r   s     rU   analyse_as_moduleExprNode.analyse_as_module       rW   c                     g rO   rY   r   s     rU   analyse_as_typeExprNode.analyse_as_type  r  rW   c                 .   U R                  U5      nU(       a>  UR                  (       a-  UR                  (       a   UR                  UR                  5      $ U(       a'  UR                  (       a  [        U R                  S5        U$ ! [         a     N<f = f)NzType is not specific)r  is_fusedfused_to_specific
specializeKeyErrorr   r   )r[   ry   r   s      rU   analyse_as_specialized_type$ExprNode.analyse_as_specialized_type  sp    ##C(DMMc&;&;s'<'<== DMM$((23	  s   B 
BBc                     g rO   rY   r   s     rU   analyse_as_extension_type"ExprNode.analyse_as_extension_type  r  rW   c                 &    U R                  S5        g )NrV  r   r   s     rU   rV  ExprNode.analyse_types  s    _-rW   c                 $    U R                  U5      $ rO   r\  r   s     rU   r`  ExprNode.analyse_target_types  s    !!#&&rW   c                     U R                   (       a-  U R                   R                  (       a  U R                  5         g g g rO   )r   rv   	gil_errorr   s     rU   nogil_checkExprNode.nogil_check  s(     99..NN /9rW   c                     UR                   (       a3  U R                  R                  (       a  [        U R                  S5        g g g )Nz3Assignment of Python object not allowed without gil)r   r   rv   r   r   r   s     rU   gil_assignment_checkExprNode.gil_assignment_check  s+    99..$((QR /9rW   c                 $    U R                  5         gNF)	not_constrZ   s    rU   rW  ExprNode.check_const  s    rW   c                 0    [        U R                  S5        g )Nz$Not allowed in a constant expressionrA  rZ   s    rU   r  ExprNode.not_const  s    dhh>?rW   c                 $    U R                  5         gr  )addr_not_constrZ   s    rU   check_const_addrExprNode.check_const_addr  s    rW   c                 0    [        U R                  S5        g )NzAddress is not constantrA  rZ   s    rU   r  ExprNode.addr_not_const  s    dhh12rW   c                     U R                   $ rO   r  rZ   s    rU   result_in_tempExprNode.result_in_temp  s    
 ||rW   c                 "    U R                  5       $ rO   r  rZ   s    rU   target_codeExprNode.target_code  s    ))++rW   c                 &    U R                  S5        g )Nr  r  rZ   s    rU   r  ExprNode.calculate_result_code  s    45rW   c                    U R                   (       a1  [        SU R                  R                  < SU R                  < 35      eU R
                  nUR                  (       d  UR                  (       a  [        R                  nO?U R                  (       d.  UR                  (       d  U R                  5       (       d  S U l         g UR                  R                  X R                  S9U l         g S U l         g )Nz!Temp allocated multiple times in rG  
manage_ref)r  RuntimeErrorrT   r^   r   r   is_voidrv   r   r   result_is_usedr   r)  	funcstateallocate_tempuse_managed_ref)r[   r   r   s      rU   allocate_temp_resultExprNode.allocate_temp_result  s    >>DNNLcLceiememnooyy||!00))T-D-DHaHaHcHc!%!^^99!5!5 : 7DN "DNrW   c                 Z   U R                   (       d  U R                  (       d  g U R                  (       aK  [        R                  R                  U R                  S   R                  5       5      4U R                  SS  -   OSnU R                  (       a5  [        SU R                  < SU R                  R                  < SU< 35      e[        SU R                  R                  < SU< 35      eUR                  R                  U R                   5        U R                   U l        S U l         g )Nr   r,   z(?)ztemp z released multiple times in z at z"no temp, but release requested in )r  r  r   r'   pathbasenameget_descriptionold_tempr  rT   r^   r  release_temp)r[   r   r   s      rU   release_temp_resultExprNode.release_temp_result  s    ~~&&W[W_W_277##DHHQK$?$?$ABDtxxPQPR|SejC}}"MM4>>#:#:C$A B B #NN++S$2 3 3##DNN3rW   c                     U R                  5       (       d/  UR                  U R                  5       U R                  5       5        gg)zd
Make sure we own a reference to result.
If the result is in a temp, it is already a new reference.
N)r  
put_increfr  r,  r[   r   s     rU   make_owned_referenceExprNode.make_owned_reference"  s2    
 ""$$OODKKM4::<8 %rW   c                     U R                  5       (       d9  UR                  U R                  5       U R                  U R                  (       + S9  gg)z:
Make sure we own the reference to this memoryview slice.
have_gilN)r  put_incref_memoryviewslicer  r   in_nogil_contextr  s     rU   make_owned_memoryviewslice#ExprNode.make_owned_memoryviewslice*  sF    
 ""$$++DKKM4999=9N9N5N , P %rW   c                    U R                  U5        UR                  U R                  5        U R                  (       a  U R	                  U5        U R                  U5        U R                  (       a[  U R                  R                  (       d?  U R                  R                  (       d#  U R                  U5        U R                  U5        g g g g rO   ) generate_subexpr_evaluation_codemark_posr   r  r  generate_result_coder   	is_stringis_pyunicode_ptrgenerate_subexpr_disposal_codefree_subexpr_tempsr  s     rU   generate_evaluation_code!ExprNode.generate_evaluation_code3  s     	--d3dhh<<%%d+!!$'<<!4!4		8R8R //5##D)	 9S!4<rW   c                 T    U R                  5        H  nUR                  U5        M     g rO   )r	  r  r[   r   r   s      rU   r  )ExprNode.generate_subexpr_evaluation_codeD  s#    &&(D))$/ )rW   c                 &    U R                  S5        g )Nr  r  r  s     rU   r  ExprNode.generate_result_codeH  s    34rW   c                     U R                   (       a0  UR                  R                  [        R                  " SS5      5        U R
                  (       a  U R                  R                  (       d  U R                  R                  (       a"  U R                  U5        U R                  U5        U R                  5       (       a=  UR                  U R                  5       U R                  5       U R                  (       + S9  g g U R                  U5        g )NMoveIfSupportedCppSupport.cppr  )r  r   r   r   r   r  r   r  r  r  r  r  put_decref_clearr,  r  r  s     rU   generate_disposal_codeExprNode.generate_disposal_codeK  s    --++,=?OPR<<yy""dii&@&@33D9''-{{}}%%dkkmTZZ\595J5J1J & L 
 //5rW   c                 T    U R                  5        H  nUR                  U5        M     g rO   )r	  r  r  s      rU   r  'ExprNode.generate_subexpr_disposal_code[  s%     &&(D''- )rW   c                    U R                   (       Ga9  U R                  R                  (       d  U R                  R                  (       a#  U R	                  U5        U R                  U5        OU R                  R                  (       a#  UR                  SU R                  5       -  5        O_U R                  R                  (       aD  UR                  SU R                  5       -  5        UR                  SU R                  5       -  5        U R                  (       a1  UR                  R                  [        R                  " SS5      5        g g U R	                  U5        g )N%s = 0;z%s.memview = NULL;z%s.data = NULL;r  r  )r  r   r  r  r  r  rv   r   r  r   r  r   r   r   r   r  s     rU   generate_post_assignment_code&ExprNode.generate_post_assignment_codea  s    <<<yy""dii&@&@33D9''-&&

9t{{}45--

/$++-?@

,t{{}<=""  11++,=?OPR # //5rW   c                     g rO   rY   )r[   r   r   overloaded_assignmentr   r   s         rU   generate_assignment_code!ExprNode.generate_assignment_codes  s    
 	rW   c                     g rO   rY   r[   r   ignore_nonexistings      rU   generate_deletion_codeExprNode.generate_deletion_codez  s     	rW   c                     U R                   (       a.  U R                  R                  (       d  U R                  U5        g g U R	                  U5        g rO   )r  r   r  r  r  r  s     rU   
free_tempsExprNode.free_temps  s9    <<99$$((. % ##D)rW   c                 T    U R                  5        H  nUR                  U5        M     g rO   )r	  r  )r[   r   subs      rU   r  ExprNode.free_subexpr_temps  s!    %%'CNN4  (rW   c                     g rO   rY   r[   ry   r   s      rU   generate_function_definitions&ExprNode.generate_function_definitions  r   rW   c                 b    UR                  U R                  5       U R                  5       U5        g rO   )put_decref_setr  r,  r[   r   r   s      rU   generate_decref_setExprNode.generate_decref_set  s     DKKM4::<=rW   c                 b    UR                  U R                  5       U R                  5       U5        g rO   )put_xdecref_setr  r,  r  s      rU   generate_xdecref_setExprNode.generate_xdecref_set  s     T[[]DJJL#>rW   c                     U(       a  U R                   (       d`  U(       a*  U R                  (       a  U(       a  U R                  U5        g UR                  U R	                  5       U R                  5       5        g g rO   )
cf_is_nullcf_maybe_nullgenerate_xgotref
put_gotrefr  r,  )r[   r   handle_nullmaybe_null_extra_checks       rU   generate_gotrefExprNode.generate_gotref  sF     2 2.%%d+tzz|< !0rW   c                 `    UR                  U R                  5       U R                  5       5        g rO   )put_xgotrefr  r,  r  s     rU   r  ExprNode.generate_xgotref      

5rW   c                 `    UR                  U R                  5       U R                  5       5        g rO   )put_giverefr  r,  r  s     rU   generate_giverefExprNode.generate_giveref  r  rW   c                 `    UR                  U R                  5       U R                  5       5        g rO   )put_xgiverefr  r,  r  s     rU   generate_xgiverefExprNode.generate_xgiveref  s    $++-6rW   c                 T    U R                  5        H  nUR                  U5        M     g rO   )r	  annotater  s      rU   r#  ExprNode.annotate  s!    &&(DMM$ )rW   c                    U nU R                   nU R                  X5      (       a  U $ UR                  nU(       a  UR                  (       d  UR                  nUR                  (       a  UR
                  nUR                  (       d  UR                  (       Ga,  UR                  (       a  UR                  (       d  UR                  (       a  UR                  R                  (       ao  UR                  nUR                  5        HO  nUR                  U5      (       d  M  Xcl         UR                   R                  Ul        SUR                  l        U s  $    UR                  (       a  [        U R                  S5        O:UR                   (       a  UR                  (       a  U $ [        U R                  S5        ["        U l         U $ U R$                  b0  ['        U R                  SU R$                  S9nUR)                  X5        UR*                  (       Ga  SSKJn  UR                   R*                  (       d  UR                   R0                  (       a  [3        X1U5      nU$ UR                   R4                  (       a&  [6        R9                  X25      R)                  X5      nU$ UR:                  (       d  [        U R                  SU< S	35        U$ UR                   R<                  (       a  SUl        UR                   R?                  XR@                  U RB                  S
9(       d  UR                   RD                  R                  URD                  5      (       a  Sn	UR                   U4n
O$Sn	UR                   RD                  URD                  4n
[        U R                  X-  5        U$ UR0                  (       a  URF                  (       a   U$ URH                  c&  [K        UR                  5      R)                  X5      nU$ UR                   R0                  (       d:  U[L        L a'  UR                   RN                  (       a  [Q        X25      nO
[S        X2US9nUR                   RU                  U5      (       d  [W        X1U5      nU$ [Y        U5      (       a  [[        UR                   5      (       a  U$ [Y        UR                   5      (       a  [[        U5      (       a  U$ [S        X2US9nU$ UR                   R0                  (       a?  U(       a*  UR\                  (       a  [_        U R                  SU-  5        [a        XU5      nU$ URb                  (       a)  XA:w  a$  URe                  U5      (       a  [g        X1U5      nU$ U[h        Rj                  L a)  XA:w  a$  URe                  U5      (       d  [m        X1U5      nU$ UR                   U:X  dI  [o        UR                   5      [o        U5      :X  d'  URe                  U5      (       d  U Rq                  U5        U$ )NTzType is not specializedz/Cannot coerce to a type that is not specialized )rw   r   r,   
MemoryViewzCannot convert 'z' to memoryviewslice)	broadcastcopyingz3Memoryview '%s' not conformable to memoryview '%s'.z-Different base types for memoryviews (%s, %s)r   zTCannot pass Python object as C++ data structure reference (%s &), will pass by copy.)9r   check_for_coercion_errorr  ref_base_typeis_cv_qualifiedcv_base_typer  rv  is_ptr	base_type"get_all_specialized_function_typessame_asr   usedr   r   is_null_ptrr3   coercion_typeNameNode	coerce_tor   r&  r(  rv   CoerceToMemViewSliceNoderu  CythonArrayNodefrom_carrayis_errorwritable_neededconforms_tois_memview_broadcastis_memview_copy_assignmentdtypeis_noner   NoneNoder   is_intCoerceIntToBytesNodeCoerceToPyTypeNode
subtype_ofPyTypeTestNoder>   r<   r  r   CoerceFromPyTypeNode
is_complexassignable_fromCoerceToComplexNoder   soft_complex_typecoerce_from_soft_complexr~   fail_assignment)r[   dst_typery   srcsrc_typeused_as_reference	signaturer   r(  msgtups              rU   r8  ExprNode.coerce_to  s     99((77K$11X%:%:--H##,,H 1 1 1 %%h.?.?OO(:(:(G(G#--!)!L!L!NI ((22#,$'HHNN	)-		# "O   dhh 9:%%(//dhh QR"DIK)DHH2D4F4FGDNN8)&&&$88..88''23#FCL 
K XX&&)55c?II(XCH 
G "**$((FNPRD 
 88++/3H,xx++H@Y@Y484S4S , Uxx~~--hnn==S!hh0M!hhnnhnn<$((CI.h 
e !!{{^ 
] $$,sww'11(@Z 
W xx++:-#((//23<0I
 xx**844(<CB 
A X&&+DSXX+N+NJSXX&&(22 
$SH=C. 
- XX!! X%:%:HHjmuuw 'xc:C" 
! !!&**844%cS9C 
 *666&..x88*3#>C 
 HH(CMS],JhNfNfgoNpNp$$X.
rW   c                    [        U S5      (       a  U R                  R                  OS nU R                  R                  (       a  SU R                  R                  5        S3OSnUR                  (       a  SUR                  5        S3OSnUR                  U R                  U5      n[        U R                  SU R                   SU SU SU U(       a  SOS U 3
5        g )	Nr   z (alias of '')r&  zCannot assign type ''z to 'r   )	hasattrr   rw   r   
is_typedefresolveassignment_failure_extra_infor   r   )r[   rP  src_namesrc_resolveddst_resolvedextra_diagnosticss         rU   rO  ExprNode.fail_assignment8  s    &-dG&<&<4::??$AEAUAUdii&7&7&9%:"=[]@H@S@Sh&6&6&8%9<Y[$BB499hWdhh$TYYKqhZq)r23D2EG	
rW   c                     U(       a	  U(       d  Sn[        U R                  U4XB5      nUb&  [        U R                  XPR                  US.-  5        gU(       a  U R	                  U5        gg)Nz)Cannot assign type '%(FROM)s' to '%(TO)s')FROMTOTF)r   r   r   r   rO  )r[   rP  ry   failrx   messages         rU   r,  !ExprNode.check_for_coercion_errorC  s[    AG%tyy(&;WJ$((Gyy&IIJ  *rW   c                 B    U R                  [        R                  U5      $ rO   )r8  r   r   r   s     rU   coerce_to_pyobjectExprNode.coerce_to_pyobjectO  s    ~~j77==rW   c           
      t   U R                  5       (       a*  [        U R                  5      n[        U R                  UUS9$ U R
                  nUR                  (       d  UR                  (       a  U $ U[        R                  L a  U $ UR                  (       d3  UR                  (       d"  UR                  (       d  UR                  (       a  [        X5      $ UR                  (       a|  UR                   (       ak  UR                   R#                  S5      (       aK  [%        U R                  ['        U R                  U [(        R*                  " S5      S9/ S9R-                  U5      $ UR.                  (       a-  [1        UR2                  5      S:H  n[        U R                  UUS9$ [5        U R                  SU-  5        U $ )Nr   r   zoperator bool)obj	attributefunctionr   r   z%Type '%s' not acceptable as a boolean)r   rf  r   BoolNoder   r   is_enumr<  r   c_bint_typerv   rD  r0  is_floatCoerceToBooleanNoder  scopelookupSimpleCallNodeAttributeNoder
   EncodedStringrV  	is_ctupler   
componentsr   )r[   ry   
bool_valuer   s       rU   re  ExprNode.coerce_to_booleanR  sE   
 ##%%d223JDHHJ,68 8 yy<<4==KZ+++Kt}}&t114::$**2C2CO2T2T!&HH$.2N2N2_a	 's+	,
 ^^T__-2JDHHJ,68 8 $((CdJKKrW   c                 |    U R                   R                  (       a  U $ U R                  [        R                  U5      $ rO   )r   rD  r8  r   r  r   s     rU   coerce_to_indexExprNode.coerce_to_indexq  s+    yy''t^T^^J<X<XZ]-^^rW   c                 F    U R                  5       (       a  U $ [        X5      $ rO   )r  CoerceToTempNoder   s     rU   coerce_to_tempExprNode.coerce_to_tempu  s!      K#D..rW   c                 R    U R                  5       (       a  U $ U R                  U5      $ rO   )	is_simpler  r   s     rU   rj  ExprNode.coerce_to_simple|  s%    >>K&&s++rW   c                 "    U R                  5       $ rO   )r  rZ   s    rU   r  ExprNode.is_simple  s    
 ""$$rW   c                 D     U R                  5       $ ! [         a     gf = fr  )r  	ExceptionrZ   s    rU   try_is_simpleExprNode.try_is_simple  s&    	>>## 		s    
c                     U R                   (       a7  U R                   R                  (       d  U R                   R                  (       d  gU R                  5       (       a  U R                  S L$ gNFT)r   rv   r   r   r   rZ   s    rU   may_be_noneExprNode.may_be_none  sH    99dii33"ii::##%%''t33rW   c                     g rO   rY   rZ   s    rU   as_cython_attributeExprNode.as_cython_attribute      rW   c                 H    U R                  5       (       a  [        XX5      $ U $ rO   )r  NoneCheckNode)r[   rh  r   format_argss       rU   as_none_safe_nodeExprNode.as_none_safe_node  s%      gCCKrW   c                     SR                  5       nU H  nXB;   a  M
   [        X5      nXRU'   M     U " UR                  40 UD6$ ! [         a     M>  f = f)zuInstantiate this node class from another node, properly
copying over all attributes that one would forget otherwise.
z1cf_state cf_maybe_null cf_is_null constant_result)splitr  r   r   )rS   r   kwargs
attributes	attr_namer   s         rU   	from_nodeExprNode.from_node  si    
 INNP
#I"*0 %*y! $ 488&v&&	 " s   A
AAc                     g)z
Gets the module.path that this node was imported from.

Many nodes do not have one, or it is ambiguous, in which case
this function returns a false value.
NrY   rZ   s    rU   !get_known_standard_library_import*ExprNode.get_known_standard_library_import  s     rW   )r  r  r  r   FrO   r   FNN)FTFN)PyExc_TypeErrorrY   )|r^   r_   r`   ra   r2  r   
annotationr  r  r  r  is_numpy_attributegenerator_arg_tagr   is_dict_literalis_set_literalis_string_literalis_attributeis_subscriptr   is_buffer_accessis_memview_indexis_memview_slicer?  r@  r  r  	is_targetr   r<  r   r*   implementationrw   propertyr   
attrgetterr   r   r   r   r   r  r	  r  r  r  r"  r&  r)  r  r   r,  r5  r8  r   rD  rI  rM  rP  rS  rY  r]  rb  rg  rk  ro  r   rw  r  r  r  r  r  rV  r`  r  r  rW  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r8  rO  r,  rk  re  r  r  rj  r  r  r  r  r  classmethodr  r  rb   rY   rW   rU   r   r   '  s   " LDJIHONf $ONLLH !&GNIJ,O
)+H$7$7
$CD		! 
	!N
E60cH';..
	
:;&<";Y
'.	AW+_
c


.'S@3
,6"$9P*"056 .6$ INGK*!
>? 16/3=667
 FP	

>>_/,% ' ' rW   r   c                      ^  \ rS rSrSrS/rSrU 4S jr\S 5       r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rSrU =r$ )_TempModifierNodei  z[Base class for nodes that inherit the result of their temp argument and can modify it.
    argFc                     > [         TU ]  XS9  g Nr  )rQ   __init__r[   r   r  rT   s      rU   r  _TempModifierNode.__init__  s    &rW   c                 .    U R                   R                  $ rO   r  r   rZ   s    rU   r   _TempModifierNode.type      xx}}rW   c                 8    U R                   R                  U5      $ rO   r  r   r   s     rU   r   _TempModifierNode.infer_type      xx""3''rW   c                 F    U R                   R                  U5      U l         U $ rO   )r  rV  r   s     rU   rV  _TempModifierNode.analyse_types  s    88))#.rW   c                 6    U R                   R                  5       $ rO   )r  r8  rZ   s    rU   r8  +_TempModifierNode.calculate_constant_result  s    xx1133rW   c                 6    U R                   R                  5       $ rO   r  r  rZ   s    rU   r  _TempModifierNode.may_be_none      xx##%%rW   c                 6    U R                   R                  5       $ rO   r  r  rZ   s    rU   r  _TempModifierNode.is_simple      xx!!##rW   c                 6    U R                   R                  5       $ rO   r  r  rZ   s    rU   r   _TempModifierNode.result_in_temp      xx&&((rW   c                 6    U R                   R                  5       $ rO   r  rw  rZ   s    rU   rw  &_TempModifierNode.nonlocally_immutable      xx,,..rW   c                 6    U R                   R                  5       $ rO   r  r  rZ   s    rU   r  '_TempModifierNode.calculate_result_code      xx  rW   c                     g rO   rY   r  s     rU   r  &_TempModifierNode.generate_result_code  r   rW   c                 :    U R                   R                  U5        g rO   r  r  r  s     rU   r  /_TempModifierNode.generate_post_assignment_code      ..t4rW   c                 8    U R                   R                  U5      $ rO   )r  r  r  s     rU   r  &_TempModifierNode.allocate_temp_result  s    xx,,T22rW   c                 :    U R                   R                  U5        g rO   r  r  r  s     rU   r  _TempModifierNode.free_temps      D!rW   r  )r^   r_   r`   ra   __doc__r   r  r  r  r   r   rV  r8  r  r  r  rw  r  r  r  r  r  rb   rc   rd   s   @rU   r  r    sn    wHG'  (4&$)/!53" "rW   r  c                   $    \ rS rSr/ rS rS rSrg)AtomicExprNodei  c                     g rO   rY   r  s     rU   r  /AtomicExprNode.generate_subexpr_evaluation_code  r   rW   c                     g rO   rY   r  s     rU   r  -AtomicExprNode.generate_subexpr_disposal_code  r   rW   rY   N)r^   r_   r`   ra   r   r  r  rb   rY   rW   rU   r  r    s     HrW   r  c                   >    \ rS rSrSr\rSrS rS r	S r
S rS rS	rg)
PyConstNodei  r,   Nc                     gNr,   rY   rZ   s    rU   r  PyConstNode.is_simple  r   rW   c                     gr  rY   rZ   s    rU   r  PyConstNode.may_be_none      rW   c                     U $ rO   rY   r   s     rU   rV  PyConstNode.analyse_types      rW   c                     U R                   $ rO   r   rZ   s    rU   r  !PyConstNode.calculate_result_code      zzrW   c                     g rO   rY   r  s     rU   r   PyConstNode.generate_result_code  r   rW   rY   )r^   r_   r`   ra   r   r   r   r  r  r  rV  r  r  rb   rY   rW   rU   r  r    s,     JDKrW   r  c                   @   ^  \ rS rSrSrSrSrS rS rU 4S jr	Sr
U =r$ )	rC  i  r,   Py_NoneNc                     g rO   rY   rB  s     rU   rD  NoneNode.compile_time_value$  r  rW   c                     gNTrY   rZ   s    rU   r  NoneNode.may_be_none'  r  rW   c                    > UR                   (       d;  UR                  (       d*  UR                  (       d  [        U R                  SU-  5        [
        TU ]  X5      $ )NzCannot assign None to %s)rv   r   r<  r   r   rQ   r8  r[   rP  ry   rT   s      rU   r8  NoneNode.coerce_to*  s@    $$(C(CxGXGX$((6ABw //rW   rY   )r^   r_   r`   ra   rB  r   r   rD  r  r8  rb   rc   rd   s   @rU   rC  rC    s(     GEO0 0rW   rC  c                   "    \ rS rSrSr\rS rSrg)EllipsisNodei1  Py_Ellipsisc                     [         $ rO   )EllipsisrB  s     rU   rD  EllipsisNode.compile_time_value8  s    rW   rY   N)	r^   r_   r`   ra   r   r  r   rD  rb   rY   rW   rU   r  r  1  s     EOrW   r  c                   b    \ rS rSrSrSrS rS rS rS r	S r
S	 rS
 rS r\\4S j5       rSrg)	ConstNodei<  r,   Nc                     gr  rY   rZ   s    rU   r  ConstNode.is_simpleD  r   rW   c                     gr  rY   rZ   s    rU   rw  ConstNode.nonlocally_immutableG  r   rW   c                     gr  rY   rZ   s    rU   r  ConstNode.may_be_noneJ  r   rW   c                     U $ rO   rY   r   s     rU   rV  ConstNode.analyse_typesM  r  rW   c                     gr  rY   rZ   s    rU   rW  ConstNode.check_constP  r  rW   c                 "    U R                  5       $ rO   r  rZ   s    rU   r5  $ConstNode.get_constant_c_result_codeS  s    ))++rW   c                 ,    [        U R                  5      $ rO   )r~   r   rZ   s    rU   r  ConstNode.calculate_result_codeV      4::rW   c                     g rO   rY   r  s     rU   r  ConstNode.generate_result_codeY  r   rW   c                    [         nU[        R                  L d  US:X  d  US:X  a  UR                  (       a  [	        U 5      $ UR
                  (       d  [        R                  (       a  [        nO7UR                  (       a  [        nOU[        L a  [        nOU[        L a  [        nUR                  UL a	  U" XUS9nU$ U" XX#S9nU$ )NNULLr   rn  r   r   r   )r  r   c_null_ptr_typer0  NullNoderD  ru  r  rv  	FloatNoder   	BytesNoder   UnicodeNoder   )r   r   r   r   rS   r  s         rU   for_typeConstNode.for_type\  s    :---&EQJDKKC= [[J22 C]]CZC\!C88t?KF  VFrW   rY   )r^   r_   r`   ra   r   r  r  rw  r  rV  rW  r5  r  r  staticmethodr<  r5  rb   rY   rW   rU   r  r  <  sM    
 JK, 3I  rW   r  c                   D    \ rS rSr\R
                  rS rS rS r	S r
Srg)rs  iw  c                 &    U R                   U l        g rO   rn  rZ   s    rU   r8  "BoolNode.calculate_constant_result{      #zzrW   c                     U R                   $ rO   r  rB  s     rU   rD  BoolNode.compile_time_value~  r  rW   c                     U R                   R                  (       a  U R                  (       a  S$ S$ [        [	        U R                  5      5      $ )NPy_TruePy_False)r   rv   r   r~   r   rZ   s    rU   r  BoolNode.calculate_result_code  s3    99   $

9:
:s4::''rW   c                 0   XR                   :X  a  U $ U[        L a  U R                   [        R                  L a  U $ UR                  (       aS  U R                   R
                  (       a8  [        U R                  U R                  U R                  [        R                  S9$ UR
                  (       aS  U R                   R                  (       a8  [        U R                  U R                  U R                  [        R                  S9$ [        R                  XU5      $ Nrz  )r   r   r   	bool_typerv   rD  rs  r   r   r   r   ru  r  r8  r[   rP  ry   s      rU   r8  BoolNode.coerce_to  s    yy K~%$))w7H7H*HKDII$4$4

 $ 4 4&&( ( ??tyy44

 $ 4 4++- - ""4377rW   r   N)r^   r_   r`   ra   r   ru  r   r8  rD  r  r8  rb   rY   rW   rU   rs  rs  w  s!    !!D*(8rW   rs  c                   :    \ rS rSr\R
                  rSrSrS r	Sr
g)r1  i  r.  r   c                     U R                   $ rO   r  rZ   s    rU   r5  #NullNode.get_constant_c_result_code  r  rW   rY   N)r^   r_   r`   ra   r   r0  r   r   r   r5  rb   rY   rW   rU   r1  r1    s    %%DEOrW   r1  c                   >    \ rS rSr\R
                  rS rS rS r	Sr
g)r   i  c                 8    [        U R                  5      U l        g rO   )ordr   r   rZ   s    rU   r8  "CharNode.calculate_constant_result  s    "4::rW   c                 ,    [        U R                  5      $ rO   )rM  r   rB  s     rU   rD  CharNode.compile_time_value  r*  rW   c                 H    S[         R                  " U R                  5      -  $ )Nz'%s')r
   escape_charr   rZ   s    rU   r  CharNode.calculate_result_code  s    224::>>>rW   rG  N)r^   r_   r`   ra   r   r   r   r8  rD  r  rb   rY   rW   rU   r   r     s    !!D/?rW   r   c                   |    \ rS rSrSrSrSr\S 5       r\S 5       r	S r
S rS rS	 rS
 rS rS rS rS rS rSrg)r  i  r&  Nc                 |    [         R                  " [        [         R                  " U R                  5      5      5      $ rO   )r   strip_py2_long_suffixhexstr_to_numberr   rZ   s    rU   	hex_valueIntNode.hex_value  s'    **3u/B/B4::/N+OPPrW   c                 T    [        [        R                  " U R                  5      5      $ rO   )r~   r   rX  r   rZ   s    rU   base_10_valueIntNode.base_10_value  s    5&&tzz233rW   c                 j    [         R                  " X40 UD6  SU;  a  U R                  5       U l        g g )Nr   )r   r  find_suitable_type_for_valuer   )r[   r   kwdss      rU   r  IntNode.__init__  s2    $,t,99;DI rW   c                    U R                   [        L a   U R                  5         U R                  (       d6  U R                  5       (       a!  U R                  (       d  U R                  S:X  ay  U R                  S:H  =(       a    S=(       d    Sn[        R                  U R                  (       + US4   nU R                  (       a   [        R                  " X R                  5      nU$ SU R                   s=::  a  S:  aP  O  OMU R                  (       a)  U R                  R                  (       a  U R                  nU$ [        R                  n U$ [        R                  nU$ ! [         a     GNFf = f)NLLr7   r,   r   i   l        )r   r<  r8  r   is_c_literalr   unsignedlongnessr   modifiers_and_name_to_typer   widest_numeric_typerD  c_long_typer   int_type)r[   ranksuitable_types      rU   r_  $IntNode.find_suitable_type_for_value  s   #99..0
 ++--}} 5MMT)0q5AD&AAdmmBSUY[`B`aMyy * > >}ii X  --5599!1!1$(IIM
  %/$:$:M  !( 0 0+  s   E 
E,+E,c           
         U R                   UL a  U $ UR                  (       d  U[        R                  L ax  U R	                  5       (       a?  [        U R                  S[        U R                  5      -  U[        U R                  5      S9$ [        U R                  U R                  U[        S9$ UR                  (       aT  UR                  (       dC  [        U R                  U R                  U R                  USU R                  U R                   S9nU$ UR"                  (       aP  [        U R                  U R                  U R                  [        R$                  SU R                  U R                   S9nO?[        U R                  U R                  U R                  U R                  U R                   S9n[&        R)                  X1U5      $ )Nz%d.0r/  T)r   r   r   rd  re  rf  F)r   r   re  rf  )r   rv  r   
float_typer   r2  r   r   r   r   r   r=  
is_numericrJ  r  re  rf  rv   rj  r  r8  r[   rP  ry   r   s       rU   r8  IntNode.coerce_to  s^   99 K(g.@.@"@'')) #d>R>R:S1SZb16t7K7K1LN N !(1?A A  )<)<4884::tG[G[ (t$(MMDMMKD K!!4884::tG[G[ ' 0 0u$(MMDMMKD 4884::tG[G[$(MMDMMKD
 ""4377rW   c           	          [        U R                  U R                  U R                  [        R
                  U R                  U R                  S9$ )N)r   r   r   re  rf  )r  r   r   r   r   ru  re  rf  r   s     rU   re  IntNode.coerce_to_boolean   s;    HHDJJ 00'']]T]]	< 	<rW   c                 F   U R                   R                  (       aq  [        R                  " U R                  5      nUS:  a  [
        O[        nU" U5      n[        R                  " U5      nUR                  X@R                  5      U l
        g U R                  5       U l
        g )Nl     a$)r   rv   r   rX  r   rW  r~   rV  
get_py_intrf  result_coder5  )r[   r   r   	formatterplain_integer_strings        rU   r   IntNode.generate_evaluation_code  sw    99  
 ''

3E$/SI#,U#3 #(#>#>?S#T #/C]]SD#>>@DrW   c                    U R                   U R                  p!U R                  5       nU(       d  U(       d  U R                  R                  (       a{  US   S:X  ar  US   S:w  ai  U R                  R
                  [        R                  R
                  :  a  SnO4U R                  R
                  [        R                  R
                  :  a  SnX1-   U-   $ )Nr   -r,   0rc  L)	re  rf  value_as_c_integer_stringr   rD  rk  r   c_longlong_typeri  )r[   re  rf  literals       rU   r5  "IntNode.get_constant_c_result_code  s    !]]DMM(002H$))*:*:wqzS?PU\]^U_cfUfyy~~!;!;!@!@@:#9#9#>#>>!H,,rW   c                    U R                   n[        U5      S::  a  U$ SnUS   S:X  a  SnUSS  nUS   S:X  a  US   nU(       aA  US;   a;  USS  R                  5       (       a#  [        [        R
                  " U5      5      nX!-   $ US;   a  SUSS  -   nX!-   $ US	;   a  [        [        USS  S5      5      nX!-   $ UR                  5       (       a7  U R                  (       d&  U R                  (       d  U(       d  S
[        U5      -  nX!-   $ )Nr7   r&  r   r|  r,   r}  oOxX0123456789oObBz0x%X)	r   r   isdigitr~   r   rX  r   re  rf  )r[   r   neg_signliteral_types       rU   r  !IntNode.value_as_c_integer_string   s   

u:?L8s?H!"IE8s? 8L L,<<qrARARATAT E//67  %eABi  %Cab	1-.  ]]__T]]4== U+rW   c                     U R                   $ rO   rw  rZ   s    rU   r  IntNode.calculate_result_code<      rW   c                 N    [         R                  " U R                  5      U l        g rO   )r   rX  r   r   rZ   s    rU   r8  !IntNode.calculate_constant_result?  s    $224::>rW   c                 B    [         R                  " U R                  5      $ rO   )r   rX  r   rB  s     rU   rD  IntNode.compile_time_valueB  s    ""4::..rW   )r   rw  r   )r^   r_   r`   ra   re  rf  rd  r  rY  r\  r  r_  r8  re  r  r5  r  r  r8  rD  rb   rY   rW   rU   r  r    sp     HHL Q Q 4 4<
68:<A	- 8 ?/rW   r  c                   P    \ rS rSr\R
                  rS rS rS r	S r
S rS rSrg	)
r2  iE  c                 8    [        U R                  5      U l        g rO   )r   r   r   rZ   s    rU   r8  #FloatNode.calculate_constant_resultH  s    $TZZ0rW   c                    [        U R                  5      nSU-  R                  S5      n[        R                  " U R                  5      nXC[        U5      R                  S5      4;  a  [        U R                  SU-  5        U$ )Nz%.330fr}  zEUsing this floating point value with DEF may lose precision, using %r)	r   r   stripr   normalise_float_reprreprlstripr   r   )r[   rC  float_valuestr_float_value	str_values        rU   rD  FloatNode.compile_time_valueK  so    DJJ'#k188=..tzz:	d;.?.F.Fs.KLLDHHehsstrW   c                    UR                   (       aS  U R                  R                  (       a8  [        U R                  U R
                  U R                  [        R                  S9$ UR                  (       aE  U R                  R                   (       a*  [        U R                  U R
                  U R                  US9$ [        R                  XU5      $ rC  )rv   r   rv  r2  r   r   r   r   ro  r  r8  rE  s      rU   r8  FloatNode.coerce_toS  s    DII$6$6

 $ 4 4'') ) !6!6

 $ 4 4  ""4377rW   c                     U R                   $ rO   r  rZ   s    rU   r  FloatNode.calculate_result_code`  r  rW   c                     U R                   n[        U[        5      (       d   e[        [	        U5      5      nUS:X  a  gUS:X  a  gUS:X  a  gU$ )Nnanz(Py_HUGE_VAL * 0)infPy_HUGE_VALz-infz(-Py_HUGE_VAL))r   r   r~   r  r   )r[   strvalcmpvals      rU   r5  $FloatNode.get_constant_c_result_codec  sP    &#&&&&eFm$U?&u_ v#MrW   c                     U R                  5       nU R                  R                  (       a"  UR                  U R                  U5      U l        g X l        g rO   )r5  r   rv   get_py_floatr   rw  )r[   r   c_values      rU   r  "FloatNode.generate_evaluation_codep  s<    11399  #00WED&rW   r   rw  N)r^   r_   r`   ra   r   c_double_typer   r8  rD  r8  r  r5  r  rb   rY   rW   rU   r2  r2  E  s+    ##D18 'rW   r2  c                 n   [         R                  " U 5      nUb  UR                  (       a  U$ UR                  5       nUR	                  U 5      nU(       aS  UR
                  (       aB  UR                  nU(       a$  UR                  (       d  UR                  (       a  U$ U=(       d    UnSSKJn  [        SS9   US   US   US   S-
  4n U" SU -  US   R                  US	9nUR                  R                  S   R                  n	[        U	[        5      (       aq  U	R!                  U5      n	[        U	[        5      (       aK  U	R"                  nU(       a-  UR                  (       d  UR                  (       a  UsS S S 5        $ U=(       d    UnS S S 5        U$ ! [$         a     Nf = f! , (       d  f       U$ = f)
Nr,   )TreeFragmentTignorer   r7      
sizeof(%s))rw   initial_pos)r   parse_basic_typein_c_type_contextglobal_scopery  is_typer   rv   r  r   filenamerootstatsexprr   SizeofTypeNoderV  arg_typer   )
rw   r   ry   r,  r  global_entryr   r  declarationsizeof_nodes
             rU   _analyse_name_as_typer  x  sp   ''-ES22##%L&&t,L,,  T%%)>)>K +	T	"1vs1vs1vax(	*&|d':Q^abK &**00388K+~66)77<k>::&//D!1!1S5J5J# 
#	" "MTE 
# L  			 
#	" Ls7   7F%
F"BF% F%
F"F%!F""F%%
F4c                   \    \ rS rSrSr\rS rSS jrS r	S r
S rS	 rS
 rS rS rS rSrg)r3  i  Tc                 &    U R                   U l        g rO   rn  rZ   s    rU   r8  #BytesNode.calculate_constant_result  r;  rW   Nc                     [         R                  " U R                  XU2   U R                  R                  5      n[	        U R
                  XDS9$ Nrn  )r
   bytes_literalr   encodingr3  r   )r[   r   r   r   r   s        rU   as_sliced_nodeBytesNode.as_sliced_node  s<    ,,TZZ4-H$**J]J]^FFrW   c                 6    U R                   R                  5       $ rO   )r   
byteencoderB  s     rU   rD  BytesNode.compile_time_value  s    zz$$&&rW   c                 b    [        U R                  R                  S5      U R                  U5      $ )Nz	ISO8859-1)r  r   decoder   r   s     rU   r  BytesNode.analyse_as_type  s$    $TZZ%6%6{%CTXXsSSrW   c                 2    [        U R                  5      S:H  $ r  r   r   rZ   s    rU   can_coerce_to_char_literal$BytesNode.can_coerce_to_char_literal      4::!##rW   c                 T    [        U R                  5      n[        U R                  X"S9$ r  rf  r   rs  r   r[   ry   r  s      rU   re  BytesNode.coerce_to_boolean  s#     $**%

OOrW   c                 `   U R                   U:X  a  U $ UR                  (       a  U R                  5       (       d  [        U R                  S5        U $ UR
                  (       a  [        U R                  S5        U $ [        U R                  U R                  [        U R                  5      S9$ [        U R                  U R                  U R                  S9nUR                  (       aC  U[        [        R                  4;   a  [        R                  Ul         U$ U R                  XSS9  U$ U[         R"                  [         R$                  4;   a  Xl         U$ U[         R&                  [         R(                  [         R*                  4;   aD  U[         R(                  :X  a  [         R$                  O[         R"                  Ul         [-        X15      $ UR/                  [         R"                  5      (       a*  UR0                  (       a  UR2                  (       a  Xl         U$ [4        R7                  X1U5      $ )Nz?Only single-character string literals can be coerced into ints.zRBytes literals cannot coerce to Py_UNICODE/Py_UCS4, use a unicode literal instead.rn  Trg  )r   rD  r  r   r   is_unicode_charr   r   rM  r3  r   rv   r   r   r   r,  r   r1   rt   rs   ru   c_void_ptr_typeCastNoderK  r  is_constr  r8  rq  s       rU   r8  BytesNode.coerce_to  s   99 K??2244dhh ab''dhh tuDHHDJJ,/

O= = TEYEYZNG,>,>??#..	 K --h$-GK*44j6V6VWW IK*55z7X7XZdZtZtuu=EIjIj=j99(88 ID++%%j&@&@AA((H,=,=$	
 ""4377rW   c                 j   U R                   R                  (       a  UR                  U R                  5      nOvU R                   R                  (       a  UR                  U R                  5      nO?U R                  R                  5       n[        U R                   [        R                  U5      nX l
        g rO   )r   rv   get_py_string_constr   r  get_string_constas_c_string_literalr2   r   r  rw  )r[   r   r  r  s       rU   r  "BytesNode.generate_evaluation_code  sv    99  --djj9FYY**4::6F jj446Gdii)C)CWMF!rW   c                     g rO   rY   rZ   s    rU   r5  $BytesNode.get_constant_c_result_code  r  rW   c                     U R                   $ rO   r  rZ   s    rU   r  BytesNode.calculate_result_code  r  rW   r  rO   )r^   r_   r`   ra   r  r   r   r8  r  rD  r  r  re  r8  r  r5  r  rb   rY   rW   rU   r3  r3    sE    
 D*G'T$P$8L
" rW   r3  c                      ^  \ rS rSrSrSrSr\rSU 4S jjr	S r
S rSS jrS rS	 rS
 rS rS rS rS rS rSrU =r$ )r4  i  TNc                 \   > [         TU ]  XUS9  Ub  X0l        Ub  U[        La  X@l        g g g r  )rQ   r  bytes_valuer   r   )r[   r   r   r  r   rT   s        rU   r  UnicodeNode.__init__  s;    5A"*L 8I !9rW   c                 &    U R                   U l        g rO   rn  rZ   s    rU   r8  %UnicodeNode.calculate_constant_result  r;  rW   c                 D    [        U R                  U R                  U5      $ rO   )r  r   r   r   s     rU   r  UnicodeNode.analyse_as_type  s    $TZZ3??rW   c                 2   [         R                  " U R                  XU2   U R                  R                  5      nU R                  b;  [         R
                  " U R                  XU2   U R                  R                  5      nOS n[        U R                  XES9$ )N)r   r  )r
   encoded_stringr   r  r  r  r4  r   )r[   r   r   r   r   r  s         rU   r  UnicodeNode.as_sliced_node  s    --JJu$')<)<>'(66  D143C3C3L3LNK K4885JJrW   c                    XR                   L a   U $ UR                  (       aa  U R                  5       (       d  [        U R                  S5        U $ [        U R                  5      n[        U R                  U[        U5      US9$ UR                  (       a  [        U R                  U R                  US9$ UR                  (       Gd  UR                  (       dP  UR                  (       d?  UR                  (       d.  UR                  (       Ga%  UR                   R"                  (       Ga	  U R$                  b-  ['        U R                  U R$                  S9R)                  X5      $ UR*                  S   (       aL   U R                  R-                  UR*                  S   5      n['        U R                  US9R)                  X5      $ U R                  R3                  5       (       aP  ['        U R                  [4        R6                  " U R                  R-                  S5      5      S9R)                  X5      $ [        U R                  S5        U $ U[8        La  U R;                  XSS	9  U $ ! [.        [0        4 a     Nf = f)
NzhOnly single-character Unicode string literals or surrogate pairs can be coerced into Py_UCS4/Py_UNICODE.r   r   r   r   r   r  rf   rm   zUnicode literals do not support coercion to C types other than Py_UCS4/Py_UNICODE (for characters), Py_UNICODE* (for strings) or char*/void* (for auto-encoded strings).Tr  )r   r  r  r   r   rM  r   r  r~   r  r4  rv   r  is_cpp_stringrD  r0  r1  r  r  r3  r8  rq   encodeUnicodeEncodeErrorLookupErrorisasciir
   BytesLiteralr   r,  )r[   rP  ry   	int_valuebyte_strings        rU   r8  UnicodeNode.coerce_to  s   yy D C %%2244dhhPQ DJJI488(#i.+46 6&&txxtzzII%%%!!X%;%;xOOO(:(:(B(B(B##/$TXXT5E5EFPPQY__>>"56_&*jj&7&7GZ8[&\  )EOOPX^^::%%''$TXX^5P5PQUQ[Q[QbQbcjQk5l ''0y'?@$((MN  ^+))(d)C /< s   6(I# #I65I6c                 2    [        U R                  5      S:H  $ r  r  rZ   s    rU   r  &UnicodeNode.can_coerce_to_char_literal;  r  rW   c                 T    [        U R                  5      n[        U R                  X"S9$ r  r  r  s      rU   re  UnicodeNode.coerce_to_boolean>  s!    $**%

OOrW   c                     U R                   R                  5       (       a  g[        [        U R                   5      5      nUS::  a  gUS::  a  gg)N      i  i )r   r  rM  max)r[   max_charvals     rU   estimate_max_charval UnicodeNode.estimate_max_charvalB  sC    ::#djj/*#E!rW   c                 B    [         R                  " U R                  5      $ rO   )r
   string_contains_surrogatesr   rZ   s    rU   contains_surrogatesUnicodeNode.contains_surrogatesN  s    88DDrW   c                 z   U R                   R                  (       Ga  [        R                  " U R                  5      (       Ga  UR                  S5      U l        UR                  [        R                  " U R                  R                  S5      5      5      nUR                  U R                  5      nUc  g UR                  U R                  5        UR                  U R                  < SU< SU< SUR                  U R                  U R                  5      < 35        UR                  U R                  SU R                  -  5        g U R                   (       a!  UR#                  U R                  5      U l        g UR%                  U R                  5      U l        g UR'                  U R                  5      U l        g )Nustringunicode_escapez! = PyUnicode_DecodeUnicodeEscape(	, sizeof(z) - 1, NULL); z__Pyx_PyUnicode_READY(%s))r   rv   r
   string_contains_lone_surrogatesr   get_py_constrw  r  r   r  get_cached_constants_writerr  r   r   r   put_error_if_negis_identifierintern_identifierr  get_pyunicode_ptr_const)r[   r   
data_cname
const_codes       rU   r  $UnicodeNode.generate_evaluation_codeQ  sN   99   ==djjII $(#4#4Y#? !22"//

0A0ABR0STV
!==d>N>NO
%##DHH-  (("""55d6F6FQ	ST ++HH9D<L<LLN###'#9#9$**#E #'#;#;DJJ#G #;;DJJGDrW   c                     U R                   $ rO   r  rZ   s    rU   r  !UnicodeNode.calculate_result_codel  r  rW   c                     U R                   $ rO   r  rB  s     rU   rD  UnicodeNode.compile_time_valueo  r  rW   )r  r   rw  r   NNrO   )r^   r_   r`   ra   r  r  r  r   r   r  r8  r  r  r8  r  re  r  r  r  r  rD  rb   rc   rd   s   @rU   r4  r4    sa     MKD*@K$L$P
EH6  rW   r4  c                       \ rS rSrSrSrg)IdentifierStringNodeis  TrY   N)r^   r_   r`   ra   r  rb   rY   rW   rU   r'  r'  s  s    MrW   r'  c                   Z    \ rS rSr\R
                  rS rS rS r	S r
S rSrS rS	 rS
rg)ImagNodeix  c                 L    [        S[        U R                  5      5      U l        g Ng        )complexr   r   r   rZ   s    rU   r8  "ImagNode.calculate_constant_result  s    &sE$**,=>rW   c                 @    [        S[        U R                  5      5      $ r+  )r,  r   r   rB  s     rU   rD  ImagNode.compile_time_value  s    sE$**-..rW   c                 <    U R                   R                  U5        U $ rO   )r   create_declaration_utility_coder   s     rU   rV  ImagNode.analyse_types  s    		11#6rW   c                     gr  rY   rZ   s    rU   r  ImagNode.may_be_none  r   rW   c                     U R                   UL a  U $ [        U R                  U R                  S9nUR                  (       a  SUl        [        R                  Ul         [        R                  X1U5      $ )Nr  r,   )
r   r)  r   r   rv   r  r   complex_typer  r8  rq  s       rU   r8  ImagNode.coerce_to  sY    99 K

3DL,,DI ''<<rW   zConstructing complex numberc                     U R                   R                  (       a  U R                  5       $ U R                   R                  < S[	        U R
                  5      < S3$ )Nz(0, ))r   rv   r  
from_partsr   r   rZ   s    rU   r  ImagNode.calculate_result_code  s9    99  ;;= "&))"6"6djj8IJJrW   c           
      (   U R                   R                  (       aw  UR                  U R                  5       < S[	        U R
                  5      < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g g )Nz = PyComplex_FromDoubles(0.0, ); )	r   rv   r   r  r   r   r   r   r  r  s     rU   r  ImagNode.generate_result_code  sf    99  JJKKM$**%++DKKM488DFG
   & !rW   rG  N)r^   r_   r`   ra   r   c_double_complex_typer   r8  rD  rV  r  r8  gil_messager  r  rb   rY   rW   rU   r)  r)  x  s:    
 ++D?/
= 0KK'rW   r)  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g)	NewExprNodei  Nc                 N   U R                   R                  U5      nUb  UR                  (       d"  [        U R                  S5        [
        U l        g U R                  U5        UR                  U R                  5      nX l	        X0l
        UR                  U l        U R                  $ )Nz/new operator can only be applied to a C++ class)cppclassr  r  r   r   r3   r   	cpp_checkget_constructor
class_typer   )r[   ry   r   constructors       rU   r   NewExprNode.infer_type  s}    }},,S1<t00$((MN"DIs**4884 
$$	yyrW   c                 B    U R                   c  U R                  U5        U $ rO   )r   r   r   s     rU   rV  NewExprNode.analyse_types  s    99OOC rW   c                     gr  rY   rZ   s    rU   r  NewExprNode.may_be_none  r   rW   c                     g rO   rY   r  s     rU   r   NewExprNode.generate_result_code  r   rW   c                 <    SU R                   R                  5       -   $ )Nznew )rG  empty_declaration_coderZ   s    rU   r  !NewExprNode.calculate_result_code  s    >>@@@rW   )rG  r   r   )r^   r_   r`   ra   r   r   rV  r  r  r  rb   rY   rW   rU   rB  rB    s#     D
ArW   rB  c                   R  ^  \ rS rSrSrSrSrSrSrSr	Sr
SrSrSrSrSrSrS rS rS	 rS
 rS rU 4S jrS.S jrS rS rS rS rS rS rS rS rS r S r!Sr"S.S jr#S r$S r%S r&U 4S jr'S r(S r)S  r*S! r+S" r,S# r-S$ r.S% r/S& r0  S/S' jr1S( r2S) r3S.S* jr4S+ r5S, r6S-r7U =r8$ )0r7  i  TFNr   r&  c                     U R                   $ rO   )cython_attributerZ   s    rU   r  NameNode.as_cython_attribute  s    $$$rW   c                     U R                   c   UR                  U R                  5      U l         U R                   b(  U R                   R                  R                  (       a  U 4$ gNrY   )r   ry  rw   r   is_unspecifiedr   s     rU   ro  NameNode.type_dependencies  sD    ::DII.DJ::!djjoo&D&D7NrW   c                    U R                   c   UR                  U R                  5      U l         U R                   b  U R                   R                  [        L a  U R
                  b  U R
                  $ [        $ U R                   R                  R                  (       d%  U R                   R                  R                  (       a4  U R                   U R                   R                  R                   :X  a  [        $ U R                   R                  [        L aD  U R                   U R                   R                  R                   :X  a  U R                  S;   a  [        $ U R                   R                  R                  (       aU  U R                   R                  R                  (       a  [        $ [        R                  " U R                   R                  5      $ U R                   R                  R                   (       aS  U R
                  (       aB  U R
                  R"                  (       a  U R                   R$                  (       d  U R
                  $ U R                   R                  $ )N)r   
basestring)r   ry  rw   r   r4   inferred_typer   is_extension_typeis_builtin_typer   r   rv  rx  is_builtin_scoper   CPtrTyperv   rD  might_overflowr   s     rU   r   NameNode.infer_type  sl   ::DII.DJ::4D!D!!-)))!!jjoo//4::??3R3R

djjoo333 jjoo-

djjoo333		E^8^ZZ__))zz00%% "**4::??;; zz**t/A/A**11djj6O6O---::??"rW   c                      UR                  U R                  5      $ ! [         a&    [        U R                  SU R                  -  5         g f = f)Nz"Compile-time name '%s' not defined)ry  rw   r  r   r   rB  s     rU   rD  NameNode.compile_time_value  sD    	N;;tyy)) 	N$((@499LM	Ns    -AAc                     U R                   (       a%  U R                   R                  R                  (       a  g U R                   R                  $ rO   )r   r   rv   r   rZ   s    rU   r5  #NameNode.get_constant_c_result_code  s,    zzTZZ__88zzrW   c                   > U[         L a  U R                  nU(       a  UR                  (       a  UR                  nU(       a  UR                  (       a7  UR
                  (       a&  UR                  UR                  U R                  5      n[        U R                  U R                  S9nXEl        UR                  U5        U$ [        TU ]1  X5      $ )Nrw   )r   r   rv  as_variable
is_builtinr  declare_builtinrw   r   r7  analyse_rvalue_entryrQ   r8  )r[   rP  ry   r   	var_entryr   rT   s         rU   r8  NameNode.coerce_to$  s    
 ~%JJE++!--	 ++	0B0B$'$7$7	$Q	#DHHTYY?D!*J--c2Kw //rW   c           	         U R                   nU R                  nU R                  =(       d    UR                  U5      nU(       Gd  UR                  (       a  gSnUR
                  R                  (       d  UR                  S   (       d  SnO+UR                  (       a  [        nOUR                  U5      u  pgUc'  U(       a  UR                  S   S:w  a  [        O[        nO>UR                  (       a-  UR                  (       a   UR                  UR                  5      nSnUR&                  (       aA  UR&                  S:H  n	UR(                  (       d  UR+                  U5      (       a  U	(       a  S	OS
nU(       aP  UR,                  (       a?  UR(                  (       d.  UR.                  (       d  [        n[1        UR"                  SS5        UR3                  X7U R"                  U(       + UUS9=oPl        U(       a  UR                  (       d  XEl        ggg! [         a-    [!        U R"                  SU R                   -  5        [$        n GN*f = f)aK  Implements PEP 526 annotation typing in a fairly relaxed way.

Annotations are ignored for global variables.
All other annotations are stored on the entry in the symbol table.
String literals are allowed and not evaluated.
The ambiguous Python types 'int' and 'long' are not evaluated - the 'cython.int' form must be used instead.
NrY   annotation_typinginfer_typesFzR'%s' cannot be specialized since its type is not a fused argument to this functionprivatefrozenreadonlypubliczxAnnotation ignored since class-level attributes must be Python objects. Were you trying to set up an instance attribute?r7   )is_cdef
visibilitypytyping_modifiers)rw   r  r   lookup_hereis_module_scoper  r  rq   is_py_class_scoper   analyse_type_annotationr4   r  r  r  r-   r   r   r3   is_c_dataclass_scoperv   can_coerce_to_pyobjectis_c_class_scoper<  r   declare_var)
r[   ry   	as_targetrw   r  r   	modifiersatyperx  	is_frozens
             rU   declare_from_annotation NameNode.declare_from_annotation7  s    yy__


3cood3""I 11~~&9:&&&#-#E#Ec#J 	},5#..:W[`:`(ftC$9$9'!,,S-B-BCE #J''  44@	$$(D(DS(I(I/8hJ S115;L;LPUP^P^&
 )KLMO "%TXX9}#, "1 ". .EJ
 e..) /:5 ( '$((n))$% 'E	's   H 3I	I	c                 L   U R                   nU(       d  UR                  U R                  5      nU(       a  UR                  (       a  UR                  $ U(       aK  UR                  (       a:  [
        R                  " UR                  5      nU(       a  UR                  (       a  U$ g rO   )r   ry  rw   	as_moduleknown_standard_library_importr   'get_known_standard_library_module_scoper{  )r[   ry   r   rx  s       rU   r  NameNode.analyse_as_modulew  si     

JJtyy)EU__??"U88CCEDgDghE..rW   c                 t   S nU R                   (       a!  [        R                  " U R                   5      nO1UR                  (       a   [        R                  " U R                  5      nU(       a  U$ U R
                  nU(       d  UR                  U R                  5      nU(       aB  UR                  (       d1  UR                  (       a   [        R                  " UR                  5      nU(       aM  UR                  (       a<  UR                  nUR                  (       a  UR                  (       a  UR                  nU$ U R                  S:X  a  [        $ UR                  (       dX  [        R                  " U R                  5      (       a3  [        U R                   SU R                  < SU R                  < S35        g )NobjectzFound C type name 'z6' in a Python annotation. Did you mean to use 'cython.z'?)rU  r   r  r  rw   r   ry  r  r  r    get_known_standard_library_entryr   rv   equivalent_typer   r   r   rr  s       rU   r  NameNode.analyse_as_type  s*     ..t/D/DED""..tyy9DK

JJtyy)E5+N+N<<U=`=`aEU]]::DD$8$8++K99 !! $$)D)DTYY)O)ODHHsws|s|  C  H  H  I  JrW   c                    U R                   nU(       d  UR                  U R                  5      nU(       aS  UR                  (       aB  UR                  R
                  (       d  UR                  R                  (       a  UR                  $ g rO   )r   ry  rw   r  r   r^  r_  r[   ry   r   s      rU   r  "NameNode.analyse_as_extension_type  sQ     

JJtyy)EU]]zz++uzz/I/Izz!rW   c                 "    U R                  USS9$ )NFis_assignment_expression_analyse_target_declarationr   s     rU   rP  #NameNode.analyse_target_declaration  s    //e/TTrW   c                 "    U R                  USS9$ )NTr  r  r   s     rU   rS  9NameNode.analyse_assignment_expression_target_declaration  s    //d/SSrW   c                    SU l         U R                  (       dH  U(       a!  UR                  U R                  5      U l        O UR	                  U R                  5      U l        U R                  (       a  SU R                  l        U R                  (       d.  U R                  b!  UR                  nU R                  X(       + S9  OdU R                  (       aS  U R                  R                  (       a8  U R                  (       a'  UR                  (       a  [        U R                  S5        U R                  (       d  UR                  S   (       a$  [        U R                  SU R                  -  S5        UR                  S   S	:w  a  [        nO[        nU(       a,  UR!                  U R                  X@R                  5      U l        O+UR#                  U R                  X@R                  5      U l        U R                  R$                  (       a  [        U l        U R                  R(                  (       a  SU R                  l        g g )
NTr&  )r  z7Cannot redeclare inherited fields in Cython dataclasseszwarn.undeclaredzimplicit declaration of '%s'r,   rr  F)r  r   #lookup_assignment_expression_targetrw   rz  r  r  r~  r  is_inheritedr   r   rq   r   r4   r   $declare_assignment_expression_targetr  is_declared_genericr2  r  is_variable)r[   ry   r  is_dataclassr   s        rU   r  $NameNode._analyse_target_declaration  sj   zz' DDTYYO
 __TYY7
::79DJJ4zzdoo933L ((8H(IjjTZZ44C$<$<$((UVzz~~/0"@499"LaP~~m,5'%' EEdiiQUW_W_`
 __TYYhhG
::)) .D::%&DJJ"  rW   c                    UR                   S   U l        U R                  nUc  UR                  U R                  5      nU(       dV  UR                  U R                  U R                  5      nU(       a)  UR                  (       a  UR                  (       a  SU l	        U(       d  [        R                  U l        U $ X l        SUl        UR                  R                  (       a  SSKJn  UR#                  U5        U R%                  U5        U $ )NinitializedcheckTr,   Buffer)rq   initialized_checkr   ry  rw   rl  r   rk  r  r   r   r3   r   r4  	is_bufferr&  r  used_buffer_aux_varsrm  r[   ry   r   r  s       rU   rV  NameNode.analyse_types  s    !$0B!C

=JJtyy)E++DIItxx@U--%..&*DO&11	J
:: ''.!!#&rW   c                 x   U R                  USS9  U R                  nUR                  (       a  UR                  (       au  UR                  (       dA  UR
                  R                  (       d&  U R                  5       (       d4  UR                  (       a#  UR                  =o l        UR
                  U l        U R                  5       (       d8  [        U R                  SU R                  -  5        [        R                  U l        SUl        UR
                  R                  (       a  SSKJn  UR#                  U5        U $ )NTr  zAssignment to non-lvalue '%s'r,   r  )analyse_entryr   rv  rj  is_overridabler   r   fused_cfunctionr   r   rw   r   r3   r4  r  r&  r  r  r  s       rU   r`  NameNode.analyse_target_types  s    3$/

%"3"3$$

(A(A$..JZJZ_d_t_t%*%6%66
!JJ	~~$((;diiGH"--DI
:: ''.rW   c                    U R                  U5        U R                  nUR                  (       a  [        U l        UR
                  (       d  UR                  (       a:  UR                  (       a  UR                  (       a  SU l        OSU l        SU l	        U $ UR                  R                  (       a  SU l        SU l	        SU l        U $ )Nr   r,   FT)r  r   r  r   r2  is_pyglobalrk  r  r  is_used_as_rvaluer   r   r  r  s      rU   rm  NameNode.analyse_rvalue_entry  s     	3

$$ .D 0 0ENN  %&D"
 	 ZZ** DL%)D"#'D rW   c                     SU l         U R                  (       ac  U R                  nUR                  (       a#  UR                  (       d  U R                  5         g g UR                  (       a  U R                  5         g g g r  )r   r  r   rk  r  r  r  r  s      rU   r  NameNode.nogil_check	  sW    
!!JJE~~NN$ &""  # "rW   z"Accessing Python global or builtinc                    U R                  5         U R                  nUR                  nU(       dI  UR                  (       a8  U R                  (       a'  U R                  R
                  (       a  U R                  nX@l        UR                  R                  (       a:  UR                  (       d  UR                  (       a  UR                  S5      U l        g g g Nr&  )check_identifier_kindr   r   rv   r]  r_  rx  r{  r  is_cclass_var_entryname_in_module_statemodule_state_lookup)r[   ry   r  r   r   s        rU   r  NameNode.analyse_entry!	  s    ""$

zzd..43E3E""22%%D	;;&&!!U%>%>'*'?'?'CD$ &? 'rW   c                 Z   U R                   nUR                  (       a!  UR                  R                  (       a  Xl        UR                  (       a  UR                  R
                  (       d  UR                  R                  (       a`  UR                  (       aO  [        R                  " U R                  S [        5      nSUl        U R                   R                  Ul        X l         g UR                  (       d  UR                  (       d  UR                   (       d  UR"                  (       d  UR$                  (       dm  U R                   R&                  (       a  U R                   R&                  U l         g U R(                  (       d$  [+        U R,                  SU R                  -  5        g g g g g g g )NTz7'%s' is not a constant, variable or function identifier)r   r  r   r^  
type_entryrt  is_cpp_enumcreate_wrapperr   Entryrw   r   r  rx  r  r  rk  rv  r  rj  is_cython_moduler   r   )r[   r   py_entrys      rU   r  NameNode.check_identifier_kind0	  s    

==UZZ99#O==ejj00EJJ4J4JPUPdPd||DIIt^DH#'H !ZZ--HN!J..E$5$5""e&8&8$$zz%%!ZZ33
**dhh Y\`\e\e ef + % '9" %6.rW   c                     U R                   (       d  U R                  (       a  gU R                  =(       d    UR                  U R                  5      nUR
                  =(       a    UR                  (       + $ r  )r  rU  r   ry  rw   r  r  r  s      rU   "is_cimported_module_without_shadow+NameNode.is_cimported_module_without_shadowD	  sI      D$9$9

3cjj38u'8'8#88rW   c                     gr  rY   rZ   s    rU   r  NameNode.is_simpleJ	  s    rW   c                   > U R                   (       a  U R                  (       a  U R                  R                  (       d  U R                  R                  (       aY  [	        U SS5      (       a  gSU l        SnU R                    H)  nUR                  R                  5       (       d  M$  Sn  U ?U$    U ?U$ [        TU ]  5       $ )N_none_checkingFT)	r   r   rv   r   r  r  r   r  rQ   )r[   r  
assignmentrT   s      rU   r  NameNode.may_be_noneN	  s    ==TYYDII,A,A,0II,H,Ht-u55 "&D  K"mm
>>--//"&K# , #w"$$rW   c                    [         R                  U 5      (       a  gU R                  nU(       a  UR                  (       a  gUR                  =(       d2    UR
                  =(       d    UR                  =(       d    UR                  $ NTF)r   rw  r   
in_closureis_localis_argrk  is_readonlyr[   r   s     rU   rw  NameNode.nonlocally_immutablec	  sV    ((..

((~~VV1A1AVUEVEVVrW   c                     g rO   rY   r   s     rU   calculate_target_results!NameNode.calculate_target_resultsk	  r   rW   c                     U R                   nUb_  UR                  (       dN  UR                  (       d=  UR                  (       d,  UR                  R                  (       d  U R                  5         ggr  )r   r  rv  rk  r   r  r  s     rU   rW  NameNode.check_constn	  sG    

""  

##NNrW   c                     U R                   nUR                  (       d3  UR                  (       d"  UR                  (       d  U R	                  5         ggr  )r   
is_cglobalrv  rk  r  r  s     rU   r  NameNode.check_const_addry	  s6    

  E$6$6%:J:J!rW   c                     U R                   R                  =(       a    U R                   R                  (       + =(       d3    U R                   R                  =(       a    U R                   R                  $ rO   )r   r  r  rv  r  rZ   s    rU   r   NameNode.is_lvalue	  sO    JJ"" '

&&&
 JJ## &JJ%%	
rW   c                 r    U R                   R                  =(       a    U R                  R                  (       + $ rO   )r   r  r   r   rZ   s    rU   r   NameNode.is_addressable	  s$    zz%%Jdii.J.J*JJrW   c                     gr   rY   rZ   s    rU   r  NameNode.is_ephemeral	  s     rW   c                     U R                   nU(       d  gU R                   R                  (       a   U R                  (       d  SUR                  -  $ U R                  UR                  -   $ )N<error>(*%s))r   is_cpp_optionalr  r   r  r  s     rU   r  NameNode.calculate_result_code	  sH    

::%%dnnU[[((''%++55rW   c                 x   U R                   nUc  g UR                  (       a%  UR                  R                  UR                  5        UR                  (       a  UR
                  (       a  g UR                  (       Ga  UR                  R                  (       d   S5       eUR                  U R                   R                  5      nUR                  (       a  [        R                  nOUR                  R                  nU R                  (       d^  UR!                  U R#                  5       < SU< SU< S35        UR!                  SU R#                  5       -  5        UR!                  S5        UR                  R                  [$        R&                  " SS5      5        UR!                  S	U R#                  5       < SU< S35        U R                  (       d  UR!                  S
5        UR!                  UR)                  U R#                  5       U R*                  5      5        U R-                  U5        g UR                  (       a  UR                  R.                  (       d  UR                  R                  (       d   S5       eUR                  U R                   R                  5      nUR                  R                  [$        R&                  " SS5      5        UR!                  U R#                  5       < SU< SUR)                  U R#                  5       U R*                  5      < 35        U R-                  U5        g UR0                  (       d.  UR                  (       Ga  UR                  R.                  (       Ga  UR                  R                  (       d   S5       eUR                  U R                   R                  5      nUR                  R.                  (       a  UR                  R                  [$        R&                  " SS5      5        UR!                  S	U R#                  5       < SU< SUR)                  U R#                  5       U R*                  5      < 35        OUR3                  UR                  5      nU R                   R                  R4                  nUR                  R                  [$        R&                  " SS5      5        UR!                  SU R#                  5       < SU(       a  SOS< U< SU< SUR)                  U R#                  5       U R*                  5      < 3	5        U R-                  U5        g UR6                  (       d>  UR8                  (       d-  UR:                  (       d  UR                  R<                  (       Ga1  U R>                  =(       d    U R                  =(       a    U R@                  (       + nUR                  R<                  =(       a    U RB                  nURD                  =(       a    U RB                  n	U	(       a&  UR                  RG                  URH                  5      n
O%UR                  RK                  URH                  5      n
U
(       aX  U(       aP  UR                  R                  (       d  U(       d  U	(       a&  URM                  U R*                  X RN                  U
S9  g g g g URP                  (       ao  URD                  (       a]  U RB                  (       aK  UR                  RG                  URH                  5      n
URM                  U R*                  X RN                  U
S9  g g g g )N,Python global or builtin not a Python objectz = PyObject_GetItem(, );if (unlikely(!%s)) {PyErr_Clear();GetModuleGlobalNameObjectHandling.cz__Pyx_GetModuleGlobalName(r   GetBuiltinNamez = __Pyx_GetBuiltinName(r=  GetNameInClassz__Pyx_GetNameInClass(z(PyObject*)r&  unbound_check_code))r   utility_coder   r   rk  r  is_pyclass_attrr   rv   r  rw   r   builtins_cnamerx  namespace_cnamer  r   r  r   r   r   r   r  r{  r  namespace_cname_in_module_statenamespace_cname_is_typer  r  from_closurer   r  
allow_nullr  r   cpp_optional_check_for_null_coder   check_for_null_codeput_error_if_unboundr  r  )r[   r   r   interned_cname	namespacer  r  raise_unboundmemslice_checkoptional_cpp_checkr  s              rU   r  NameNode.generate_result_code	  s   

=--e.@.@A"""::))Y+YY)!33DJJOODN"11	!KK77	??

!&()
 

1DKKMAB

+,--''(=?QRTJJKKM"$% ??

3JJt..t{{}dhhGH  &ekk&A&A::))Y+YY)!33DJJOODN--''(8:LMOJJ''txx@BC
   &5#3#3#38S8S8S::))Y+YY)!33DJJOODN{{**  11++,ACUVX

&//txxHJK #'"F"Fu{{"S*.***:*:*R*R'  11++,<>PQS

)@bH'&//txxHJK   &^^u//53E3EIfIfIf ##6tO<O  #ZZ::Ut?U?UN!&!6!6!Q4;Q;Q!%*ZZ%P%PQVQ\Q\%]"%*ZZ%C%CEKK%P"!m9O9OSaew))$((E;P;Pew)x fxm! %"7"7D<R<R!&!L!LU[[!Y%%dhh7L7Las%t =S"7rW   c                    U R                   nUc  g U R                   R                  R                  (       aM  [        U[        5      (       a8  U R
                  (       d'  UR                  (       d  [        U R                  S5        UR                  (       Ga!  UR                  R                  (       d   S5       eUR                  U R                   R                  5      nUR                  U R                   R                  5      nU R                   R                  R                  n	Sn
UR                   (       a5  SnSn
UR"                  R%                  [&        R(                  " SS5      5        OUR                  R*                  (       a"  SnUR-                  [.        R0                  5      nOkUR2                  (       aJ  U R                  S	:X  a  S
OSnUR"                  R%                  [&        R(                  " US5      5        SU-   nO [5        U5      5       eU	(       a  U
(       d  SU S3nU
(       a	  U	(       d   eUR7                  U R                  U< SU< SU< SUR9                  5       < S35        [:        (       a  [=        S5        [=        SU-  5        UR?                  U5        URA                  U5        g U R                  RB                  (       a  U RE                  X5        O,U R                  RF                  (       a  U RI                  X5        SnU R                  RJ                  (       a  SnU R                  R                  (       Ga\  U RL                  (       GaJ  URO                  U5        URP                  =(       d3    U R                   RR                  =(       d    U R                   RT                  nU(       a  U RW                  USS9  SnURP                  (       a/  U RY                  X!R[                  U R]                  5       5      5        OU R^                  (       do  U R`                  (       a/  U Rc                  X!R[                  U R]                  5       5      5        O1U RY                  X!R[                  U R]                  5       5      5        OSnU(       a  URe                  U5        U R                  RB                  (       Gd  U(       GdW  U(       a  URg                  5       nUS:X  ad  [i        X R                  U Rk                  5       < SU< S3U R                  R                  (       a  U Rk                  5       OS XPRl                  5        OURo                  U Rk                  5       < SU< S35        OURq                  U R]                  5       5      n[s        U R                  5      (       a;  URo                  SU Rk                  5       < SU Rk                  5       < SU< S35        O:XRk                  5       :w  a'  URo                  U Rk                  5       < SU< S35        [:        (       a  [=        S5        [=        SU-  5        URu                  U5        O&URw                  5       (       a  URu                  U5        URA                  U5        g )Nz?Literal list must be assigned to pointer at time of declarationr  F__Pyx_SetItemOnTypeDictTSetItemOnTypeDictzExtensionTypes.cPyDict_SetItemrR   SetNewInClassSetNameInClassr  __Pyx_z((PyObject*)r9  (r  z"NameNode.generate_assignment_code:z"...generating disposal code for %s)r  r    = ;new (&) decltype(){};z)...generating post-assignment code for %s)<r   r   r0  r   ListNodelhs_of_first_assignmentin_module_scoper   r   r  rv   r  rw   r  rx  r  	is_memberr   r   r   r   r{  r  r   moddict_cnamer  r  r  r   r   printr  r  r    generate_acquire_memoryviewslicer  generate_acquire_bufferr  r  r  r  r  r  r  r  r  r,  r  r  r  r  r  r   r  r  r   r"  r>   r  r  )r[   r   r   r  r   r   r   r  r  namespace_is_typenamespace_needs_typesetternassignedis_external_refr  s                   rU   r  !NameNode.generate_assignment_code	  s    

=JJOO""z#x'@'@44S=P=P$((]^ ::))Y+YY)!33DJJOODN<<TZZ=M=MNI $

 0 0 H H#(  3'+$  11++,?ASTV,,) 55f6J6JK	&&'+yyI'=OCS  11+2I2I!M_2`a!A)d5k)u )=*9+Q7	,5FGG!!"MMO	%& #":;:S@A&&t,NN4 yy++55c@$$ ,,S7Hyy!!yy$$$
 ''',,T2&+&6&6&j$**:O:O&jSWS]S]SjSjO&,,Tt,D#H''00}}TZZ\7RS##11 $ 9 9$djjl@[ \ $ 8 8}}TZZ\?Z [',H&,,T299///,!$!4!4!6*c13 $hh.2kkmV D151F1FD /1F1F	H !JJT[[]F'KL!$!7!7

!E*49955 JJW[WbWbWdfl'mn#{{}4 JJT[[]F'KL&&>?EKL11$7##%%11$7NN4 rW   c           
          SSK Jn  UR                  U R                  5       U R                  U R
                  UUU R                  (       + U R                  S9  g)zy
Slices, coercions from objects, return values etc are new references.
We have a borrowed reference in case of dst = src
r,   r'  )	lhs_cnamer   lhs_posr   r   r  first_assignmentN)r&  r(  put_acquire_memoryviewslicer  r   r   r  r  )r[   r   r   r(  s       rU   r  )NameNode.generate_acquire_memoryviewsliceo
  sJ    
 	!..kkmYYHH...!__ 	/ 	.rW   c           	      j   [        U[        5      =(       d    UR                  5       nU(       a   UR                  U R	                  5       5      nOdUR
                  R                  U R                  R                  SS9nUR                  U< SUR                  U R	                  5       5      < S35        SSK
Jn  UR                  U R                  5       X@R                  U R                  (       + U R                  US9  U(       d0  UR                  SU-  5        UR
                  R!                  U5        g g )	NFr  r  r  r,   r  )is_initializedr   r   r  )r   r7  r  r  r,  r  r  r   r   r   r&  r  put_assign_to_bufferr  r  r   r  )r[   r   r   
pretty_rhsrhstmpr  s         rU   r   NameNode.generate_acquire_buffer
  s      X.F#2D2D2F
]]4::<0F^^11$**//e1TFJJVS]]4::<-HIJ##DKKM6::7;7S7S3S(,t 	$ 	= JJy6)*NN''/ rW   c                 V   U R                   c  g U R                   R                  (       a  U R                   R                  R                  nUR	                  U R                   R
                  5      nU(       a  SnOSU R                   R
                  -  nUR                  SU< SU< SU< SUR                  U R                  5      < S3	5        g U R                   R                  (       a  UR                  R                  [        R                  " SS	5      5        UR	                  U R                   R
                  5      nS
[        R                  < SU< S3nU(       a4  UR                  SU< SUR                  U R                  5      < S35        g UR!                  U R                  U5        g U R                   R"                  R$                  (       d&  U R                   R"                  R&                  (       Ga  U R(                  (       Gd  U R*                  (       a8  U(       d1  UR-                  U R                  U R                   U R.                  5        U R                   R0                  (       a  U R3                  USUS9  U(       aN  U R*                  (       a=  UR5                  U R7                  5       U R9                  5       U R:                  (       + S9  g UR=                  U R7                  5       U R9                  5       U R:                  (       + S9  g g [?        U R                  S5        g )NzPyErr_Clear(); elsezT{ PyErr_Clear(); PyErr_Format(PyExc_NameError, "name '%%s' is not defined", "%s"); }zif (unlikely(PyObject_DelItem(r  z>) < 0)) { if (likely(PyErr_ExceptionMatches(PyExc_KeyError)))   }PyObjectSetAttrStrr  __Pyx_PyObject_DelAttrStr(r9  if (unlikely(zW < 0)) { if (likely(PyErr_ExceptionMatches(PyExc_AttributeError))) PyErr_Clear(); else T)r  r  r  z!Deletion of C names not supported) r   r  rx  r  r  rw   r   r   r   r  r   r   r   r   r   module_cnamer  r   rv   r   r  r  r  r  r  r  put_xdecref_clearr  r,  r   r  r   )r[   r   r  r  r  key_error_codedel_codes          rU   r  NameNode.generate_deletion_code
  s2   ::ZZ''

((88I!33DJJOODN!!6 mJJOO$  JJ !.%txx023 ZZ##--''(<>PQS!33DJJOODN##^5H!

 $T__TXX%>@A
 %%dhh9ZZ__((DJJOO,N,N,N???%%.@--dhh

DDYDYZ::((((4Xj(k%$*<*<**4;;=$**,59ZZ + A ))$++-7;zz> * C # $((?@rW   c           
      p   [        U SS5      (       a  U R                  S   U R                  S   U R                  S   [        U R                  5      -
  S-
  4nU R                  R
                  (       a  Su  p4OSu  p4UR                  U[        X4U R                  -  [        U R                  5      S95        g g )	N	is_calledFr   r,   r7   )py_callzpython function (%s))c_callzc function (%s)size)r  r   r   rw   r   rv   r#  r8   )r[   r   r   styletexts        rU   r#  NameNode.annotate
  s    4e,,88A;TXXa[3tyy>-IA-MNCyy$$?t9MM#~eDII5ECPTPYPYN[\ -rW   c                 R    U R                   (       a  U R                   R                  $ g rO   )r   r  rZ   s    rU   r  *NameNode.get_known_standard_library_import
  s    ::::;;;rW   )r  r   r  r   r  r  r  r  r   r2  r   r  r  r  r  )9r^   r_   r`   ra   r   r  rU  r  r  r   r  r  r  r   r   r]  r  r  ro  r   rD  r5  r8  r  r  r  r  rP  rS  r  rV  r`  rm  r  r@  r  r  r  r  r  rw  r  rW  r  r   r   r  r  r  r  r  r  r  r#  r  rb   rc   rd   s   @rU   r7  r7    s,    G#EJMJJEM%#BN 
0&>*@<	UT!'F((,! 7KDg(9%*W	
K
6\u| INGKv!p. 0(0Ad] rW   r7  c                   4    \ rS rSr\rS/rS rSrS r	S r
Srg)	BackquoteNodei
  r  c                     U R                   R                  U5      U l         U R                   R                  U5      U l         SU l        U $ r  )r  rV  rk  r  r   s     rU   rV  BackquoteNode.analyse_types
  s:    88))#.88..s3rW   zBackquote expressionc                 L    [        U R                  R                  5      U l        g rO   )r  r  r   rZ   s    rU   r8  'BackquoteNode.calculate_constant_result
  s    #DHH$<$<=rW   c           
          UR                  U R                  5       < SU R                  R                  5       < SUR	                  U R                  5       U R
                  5      < 35        U R                  U5        g )Nz = PyObject_Repr(r=  )r   r  r  r   r   r   r  r  s     rU   r  "BackquoteNode.generate_result_code
  sX    

""$''txx@B	C
 	T"rW   )r  r   r  N)r^   r_   r`   ra   r   r   r   rV  r@  r8  r  rb   rY   rW   rU   rJ  rJ  
  s&    
 DwH )K>#rW   rJ  c                   B    \ rS rSr\rSrSrSr/ SQr	S r
SrS rS	 rS
rg)
ImportNodei
  NFT)module_name	name_listmodule_namesc                    U R                   cj  UR                  5       R                  (       aD  UR                  S   (       d(  [        R
                  UR                  R                  ;  a  SU l         OSU l         U R                  R                  U5      nUR                  U5      U l        U R                  R                  (       d   eU R                  (       a3  U R                  R                  U5      nUR                  U5      U l        U $ SU R                  R                  ;   a  [        U R                  R                  [!        ["        R$                  U R                  R                  R'                  S5      5       Vs/ s H!  n[)        U R                  R                  US9PM#     snS9R                  U5      U l        U $ s  snf )N
py2_importr   r   r  r   )r   r  parent_modulerq   r9   absolute_importcontextfuture_directivesrS  rV  rk  r  rT  r   	TupleNoder   mapr
   r|  r  r'  rU  )r[   ry   rS  rT  parts        rU   rV  ImportNode.analyse_types  sd   ::!//NN<0**#++2O2OO

&&44S9&99#>1111>>44S9I&99#>DN  D$$*** )$*:*:*>*> < <d>N>N>T>T>Z>Z[^>_`F`D %T%5%5%9%9F`F ! }S!  	Fs   =(G 
zPython importc           
      \   U R                   R                  (       d   eU R                   R                  nU R                  S::  Ga   U R                  (       d  U R
                  (       d  U R                  (       a  U R                  R                  (       d   eU R                  S:X  a  [        R                  " SS5      nSnO[        R                  " SS5      nSnUR                  R                  U5        U< SU R                   R                  5       < SU R                  (       a  U R                  R                  5       OS	< S
3nOUR                  R                  [        R                  " SS5      5        SU R                   R                  5       U R                  (       a  U R                  R                  5       OSU R                  4-  nUR                  U R                  5       < SU< SUR                  U R                  5       U R                   5      < 35        U R#                  U5        g )Nr   ImportDottedModulezImportExport.c__Pyx_ImportDottedModuleImportDottedModuleRelFirst __Pyx_ImportDottedModuleRelFirstr  r  r.  r9  Importz__Pyx_Import(%s, %s, %d)r}  r  ; )rS  r  r   r   rT  get_top_level_modulerU  r   r   r   r   r   r   r   r  r   r   r  )r[   r   rS  r  helper_funcimport_codes         rU   r  ImportNode.generate_result_code)  s   1111&&,,::?4>>$:S:S  ((3333zzQ*667KM]^8*667SUef@--l;  **,151B1B!!++-NK --k.E.EhP`.ab4  **,.2nn((*#

8 K
 	

KKM##DKKM488<> 	? 	T"rW   c                 .    U R                   R                  $ rO   )rS  r   rZ   s    rU   r  ,ImportNode.get_known_standard_library_importI  s    %%%rW   )r   rS  rU  rT  )r^   r_   r`   ra   r   r   rU  ri  r  r   rV  r@  r  r  rb   rY   rW   rU   rR  rR  
  s5    & DL G;H, "K#@&rW   rR  c                   \   ^  \ rS rSr/ rSrSrSS jrS rS r	S r
S rU 4S	 jrS
 rSrU =r$ )ScopedExprNodeiM  NTc                     Ub  X l         g U R                  (       a  [        R                  " U5      U l         g U R                   (       d  S U l         g g rO   )
expr_scopehas_local_scoper   ComprehensionScope)r[   outer_scoperr  s      rU   
init_scopeScopedExprNode.init_scope\  s;    !(O!!$77DDO"DO !rW   c                 &    U R                  U5        g rO   )rv  r   s     rU   analyse_declarations#ScopedExprNode.analyse_declarationsd  s    rW   c                     g rO   rY   r   s     rU   analyse_scoped_declarations*ScopedExprNode.analyse_scoped_declarationsg      rW   c                     U $ rO   rY   r   s     rU   rV  ScopedExprNode.analyse_typesk      rW   c                     U $ rO   rY   r   s     rU   analyse_scoped_expressions)ScopedExprNode.analyse_scoped_expressionso  r  rW   c                 D  > [         TU ]  nU R                  (       a  U R                  R                  (       d	  U" U5        g UR                  S5        / n[        S U R                  R                  R                  5        5       5       HY  u  pEUR                  (       a  M  UR                  R                  (       d  M5  UR                  (       d  MH  UR                  U5        M[     U(       d  U" U5        UR                  S5        g UR                  5       nUR                  5       nU" U5        U R!                  X5        UR#                  S5      nUR%                  U5        UR&                  U4/[)        [+        UR-                  5       U5      5      -    HP  u  pUR/                  U	5      (       d  M  UR1                  U	5        U R!                  X5        UR%                  U
5        MR     UR1                  U5        UR                  S5        UR3                  U5        Xql        g )Nz{ /* enter inner scope */c              3   <   #    U  H  oS    (       d  M  Uv   M     g7f)r   NrY   )rh   r   s     rU   rk   :ScopedExprNode.generate_evaluation_code.<locals>.<genexpr>}  s     [0OXYSZtt0Os   	z} /* exit inner scope */
exit_scope)rQ   r  rs  rr  var_entriesr   sortedentriesitemsr  r   rv   r4  r  new_loop_labelsnew_error_label_generate_vars_cleanup	new_labelput_gotoerror_labelr  zipget_loop_labels
label_used	put_labelset_loop_labels)r[   r   generate_inner_evaluation_code
py_entries_r   old_loop_labelsold_error_labelr  label	old_labelrT   s              rU   r  'ScopedExprNode.generate_evaluation_codes  s   ).)I&##4??+F+F*40

./
[0G0G0M0M0O[[HA###::)))ejjj%%e, \ *40JJ12 ..0..0&t, 	##D5 ^^L1
j!#'#3#3_"E!F!%c$*>*>*@/&R!S"TEu%%u%++D=i("T 	z"

-._-*rW   c                     U HJ  nUR                   (       a%  UR                  U5        UR                  US5        M9  UR                  U5        ML     g )Nr  )r  put_var_gotrefput_var_decref_setput_var_xdecref_clear)r[   r   r  r   s       rU   r  %ScopedExprNode._generate_vars_cleanup  sA    E##E*''y9**51  rW   )rr  rO   )r^   r_   r`   ra   r   rr  rs  rv  ry  r|  rV  r  r  r  rb   rc   rd   s   @rU   rp  rp  M  s?     HJ O#*+X2 2rW   rp  c            
           \ rS rSr\rSrSrSrSr	Sr
S/rS rSr\R                  " \R                   " \R                  \R"                  " S\R                  S5      /5      5      rS rS	 rS
 rS rS rS rS rS rSrg)IteratorNodei  NFsequencec                    U R                   (       a  U R                   nU R                  R                  U5      U l        U R                  R                  R                  (       d%  U R                  R                  R
                  (       aB  U R                  R                  R                  (       d  U R                  R                  U l        GOU R                  R                  R                  (       a-  [        U R                  U R                  S9R                  U5      $ U R                  5       (       aQ  U R                  R                  R                  S   R                  n[        U R                  USS9R                  U5      $ U R                  R                  U5      U l        U R                  R                  [        [         4;   a   U R                  R#                  S5      U l        SU l        U $ )Nr  r   T)r  reversed!'NoneType' object is not iterabler,   )rr  r  rV  r   ru  r0  r  r  CppIteratorNoder   is_reversed_cpp_iteration	arg_tupler   r  rk  r   r   r  r  )r[   ry   r  s      rU   rV  IteratorNode.analyse_types  sC   ??//C33C8MM''4==+=+=+D+DMM&&00**DI]],,"488dmmDRRSVWW++--}}..33A6::H"488hN\\]`aa MM<<SADM}}!!i%<< $ ? ?@c drW   zIterating over Python objectitc                 x   [        U R                  [        5      (       aH  U R                  R                  (       a-  [	        U R                  R                  R
                  5      S:X  d  gU R                  R                  nUR                  (       a  UR                  S:X  a  UR                  R                  (       d  gU R                  R                  R
                  S   n[        U[        5      (       aG  UR                  R                  (       a,  UR                  R                  nUR                  R                  $ g)z
Returns True if the 'reversed' function is applied to a C++ iterable.

This supports C++ classes with reverse_iterator implemented.
r,   Fr  r   )r   r  rz  r  r   r   rr  r   rw   r   rk  CoercionNoder  r   r  )r[   funcr  s      rU   r  &IteratorNode.is_reversed_cpp_iteration  s     4==.99''C0G0G0L0L,MQR,R}}%%<<DII3::((--))..q1C#|,,ggmmxx,,,rW   c                 ^    U R                   R                  U R                  =(       d    U5      $ rO   )r  ro  rr  r   s     rU   ro  IteratorNode.type_dependencies  s     }}..t/E#FFrW   c                 J   U R                   R                  U5      nUR                  (       d  UR                  (       a  U$ UR                  (       a;  UR
                  R                  S5      nUb  UR                  R                  $  [        $ UR                  (       a  U$ [        $ )Nbegin)r  r   ru  r0  r  rx  ry  r   return_typerv   r   )r[   ry   sequence_typer  s       rU   r   IteratorNode.infer_type  s    005!!]%9%9  ''!''..w7E zz--- !  &&  rW   c           
         U R                   R                  nUR                  (       a   S5       eUR                  (       d  UR                  (       a  [        S5      eU[        [        4;   nU(       d  U R                  (       a   S5       eUR                  (       + U l
        U R                  (       aJ  UR                  SU R                   R                  5       < SU R                   R                  5       < S35        U(       d  U R                  (       Gaf  UR                  U R                  5       < SU R                   R                  5       < S	U R                  5       < S
35        UR                  R                  [         R"                  SS9U l        U R                  (       a  U[        L a  SnOSnUR                  U R$                  < SU< SU R                  5       < S
35        UR                  S5        UR                  UR'                  U R$                  U R(                  5      5        UR                  S5        UR                  SU R$                  -  5        OUR                  SU R$                  -  5        U(       Gdf  UR                  R                  U R*                  SS9U l        U R                  (       aM  UR                  SU R,                  -  5        UR                  S5        UR/                  SU R$                  -  5        UR                  U R                  5       < SU R                   R                  5       < SUR1                  U R                  5       U R(                  5      < 35        U R3                  U5        UR/                  U R,                   SU R                  5        S35        UR                  UR1                  U R,                  U R(                  5      5        U R                  (       a  UR                  S5        g g )NFz+Should have been changed to CppIteratorNodez#for in carray slice not transformedzBinternal error: reversed() only implemented for list/tuple objectszif (likely(PyList_CheckExact(z)) || PyTuple_CheckExact(z)) {r  z; __Pyx_INCREF(r  r  __Pyx_PyList_GET_SIZE__Pyx_PyTuple_GET_SIZEr  #if !CYTHON_ASSUME_SAFE_SIZE#endifz--%s;r  
%s = NULL;} else {z	%s = -1;  = PyObject_GetIter(r=  T = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(r   )r  r   r  ru  r0  r   r   r   r  r_  may_be_a_sequencer   r   r  r  r  r   r  counter_cnameerror_goto_if_negr   _func_iternext_typeiter_func_ptrputr   r  )r[   r   r  is_builtin_sequencelen_funcs        rU   r  !IteratorNode.generate_result_code  s   **%%GGG5!!]%9%9 EFF+	:/FF"}}j&jj$%2%B%B!B!!JJMM++-MM++-/0
 $"8"8"8JJ'') 
 "&!=!=,, "> "@D}} I-6H7H

T-?-?4;;=YZ

9:

411$2D2DdhhOP

8$

7T%7%778

9t'9'99:"!%!=!=d>V>Vch!=!iD%%

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

:&t'9'99:JJ'')''txx@B C   &
 HH%%& '@@D@P?QQTV JJt..t/A/A488LM!!JJsO "rW   c                 &    UR                  S5        g Nz;;r  r  s     rU   generate_for_loop_header%IteratorNode.generate_for_loop_header4      rW   c                    U R                   (       d   S5       eUS;   d   eSU SU R                  5        S3nSnU R                  R                  (       a  [	        U R                  R
                  5      nU R                  R                  c  UnSnOW[        U R                  R                  R                  [        5      (       a$  X`R                  R                  R                  -  nSnU(       a%  UR                  SU R                   < S	U< S
35        OUR                  S5        UR                  S[        R                  < SU< S35        UR                  S5        UR                  UR                  [        R                  U R                  5      5        UR                  S5        UR                  SU R                   < S	[        R                  < S
35        UR                  S5        U R                  (       a  SOSnUS:X  a3  UR                  U SU R                  5        SU R                    S35        OUR                  S5        UR                  U SU R                  5        SU R                    S35        UR                  S5        UR                  U SU R                  5        SU R                    S35        UR                  S5        UR                  U U R                    S35        g )Nz/internal error: counter_cname temp not prepared)ListTuple__Pyx_Pyz
_GET_SIZE(r9  FTif (z >= z) break;{Py_ssize_t r  r  r  r  r   z--++r  z = __Pyx_PyList_GetItemRef(r  r  <#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFSz! = __Pyx_NewRef(PyTuple_GET_ITEM());#elsez = __Pyx_PySequence_ITEM()r  r   r  r   r   r   r   r   r   r   r   r   quick_temp_cnamer  r   r  )r[   	test_nameresult_namer   
final_sizesize_is_safe
item_countinc_decs           rU   generate_next_sequence_item(IteratorNode.generate_next_sequence_item7  sJ   !!T#TT!----	{*T^^5E4FaH
==00T]]//0J}}((0'
#DMM55EEsKK'--*C*C*S*SS
#JJ1C1CZPQJJsOJJ0G0GTUJJ56JJt--f.E.EtxxPQJJx JJ1C1CVE\E\]^JJsO--$TJJ+&A$..BRASSUVZVhVhUiiklmJJUVJJ+&GHXGYY[\`\n\n[oorstJJwJJ+&?@P?QQSTXTfTfSggijkJJx 

gYt112!45rW   c                    U R                   R                  nU R                  (       a  UR                  SU R                   S35        U[
        L aS  U R                  SX5        UR                  UR                  XR                  5      5        UR                  U[        5        g U[        L aS  U R                  SX5        UR                  UR                  XR                  5      5        UR                  U[        5        g U R                  (       a  UR                  SU R                  -  5        UR                  SU R                  5       -  5        U R                  SX5        UR                  S5        U R                  SX5        UR                  S5        UR                  UR                  XR                  5      5        UR                  S	5        UR                  S
5        UR                  U SU R                   SU R                  5        S35        UR                  SU-  5        UR                  S5        UR                  S5        UR                  UR!                  SU R                  5      5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  U[        5        g )Nr  z < 0) break;r  r  zif (likely(!%s)) {z$if (likely(PyList_CheckExact(%s))) {r  r   z} else r  r  r  r  r  z&PyObject* exc_type = PyErr_Occurred();zif (exc_type) {zA!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)r  break;)r  r   r  r   r  r   r  r   r   r  r   r   r  r  r   r  r   )r[   r  r   r  s       rU   generate_iter_next_result_code+IteratorNode.generate_iter_next_result_code]  s"   **==JJd001>?I%,,V[GJJt..{HHEFOOK8j(,,WkHJJt..{HHEFOOK8!!JJ+d.@.@@AJJ=@PPQ,,V[GJJz",,WkHJJsOJJt..{HHEFHHY

3

k]#d&8&8%94>>;K:LBOP

)K78

;<

$%

4%%&ikokskstu

#$

3

8

3

3^4rW   c                    U R                   (       a%  UR                  R                  U R                   5        U R                  (       a,  UR                  R                  U R                  5        S U l        [        R                  X5        g rO   )r  r  r  r  r   r  r  s     rU   r  IteratorNode.free_temps  sZ    NN''(:(:;NN''(:(:;!%DD'rW   )r  r  r  r  r  r   )r^   r_   r`   ra   r   r   r  r  r  is_asyncrs  r   rV  r@  r   ra  	CFuncTypeCFuncTypeArgr  r  ro  r   r  r  r  r  r  rb   rY   rW   rU   r  r    s     DMMHHO|H( 1K$--j.B.B!!##D**C*CTJ$/ 
&G
=~$6L$5L(rW   r  c                   d    \ rS rSrSrSrSrSrSrS/r	S r
S	 rS
 rS rS rS rS rS rS rSrg)r  i  Nr   r&  TFr  c                 ,    U R                   (       d  S$ S$ )N)r  end)rbeginrend)r  rZ   s    rU   get_iterator_func_names'CppIteratorNode.get_iterator_func_names  s    '+}}L:LLrW   c                    U R                   R                  nUR                  (       a  UR                  nU R	                  5       u  p4UR
                  R                  U5      nUR
                  R                  U5      nUb6  UR                  R                  (       a  UR                  R                  (       a?  [        U R                  SU< SU R                   R                  < 35        [        U l        U $ Ub6  UR                  R                  (       a  UR                  R                  (       a?  [        U R                  SU< SU R                   R                  < 35        [        U l        U $ UR                  R                  nUR                  (       GaR  UR                  S   (       a  SU l        UR!                  U R                  SXvR                  R                  /5       c?  [        U R                  SU< SU R                   R                  < 35        [        U l        U $ UR!                  U R                  SU/5      c?  [        U R                  SU< SU R                   R                  < 35        [        U l        U $ UR!                  U R                  SU/5      c?  [        U R                  S	U< SU R                   R                  < 35        [        U l        U $ Xpl        U $ UR                  (       a@  XvR                  R                  :X  d  [        U R                  S
U< SU< S35        Xpl        U $ [        U R                  SU< SU R                   R                  < S35        [        U l        U $ )Nzmissing z() on 
cpp_localsr   !=z missing operator!= on result of r  z missing operator++ on result of zmissing operator* on result of zincompatible types for z() and z()zresult type of z must be a C++ class or pointer)r  r   r0  r1  r  rx  ry  rv  r   r   r   r3   r  r  rq   extra_dereferencelookup_operator_for_types)r[   ry   r  
begin_nameend_namer  r  	iter_types           rU   rV  CppIteratorNode.analyse_types  s   **)33M#;;=
##**:6!!((2Mzz..::??$((J@R@RST"DIKKxx,,88==$((Hdmm>P>PQR"DIKJJ**	!!!~~l+),&,,HH 4 457 ;?? dhhPZ\`\i\i\n\n op&	,,TXXti[IQdhhPZ\`\i\i\n\n op&	,,TXXsYKHPdhhz[_[h[h[m[m no&	!I  !5!55dhh*V^ _`!I  $((Zdfjfsfsfxfxyz"DIrW   c                 f   U R                   R                  nU R                  5       u  p4U R                   R                  5       (       aP  UR	                  U R                  5       < SU R                   R                  5       < U R                  < U< S35        g UnUR                  (       a   [        R                  " UR                  5      nUR                  (       d  UR                  R                  S   (       a  SU l        UR                  R                  USS9U l        UR	                  U R                   < SUR                  (       a  SOS< U R                   R#                  5       < S	35        UR	                  U R                  5       < SU R                   < U R                  < U< S35        g )
Nr  z();r  ->Fr  &r&  r  )r  r   r  r  r   r  cpp_attribute_opr  r   ra  r-  r0  r   rq   r  r  cpp_sequence_cnamer  )r[   r   r  r  r  	temp_types         rU   r  $CppIteratorNode.generate_result_code  sC   **446
==""$$ JJ$$&%%	  *	)) !+ 3 3M4O4O PI##t'7'7'B'B<'P,0D) +/..*F*Fy]b*F*c'

4+B+B2;2B2B3+J+/==+H+H+JL M 

KKM++))	  !rW   c                 D   U R                  5       u  p#UR                  SU R                  < U R                  5       < SU R                  =(       d    U R
                  R                  5       < U R                  < U< SU R                  < U R                  5       < 3
5        g )Nrh  z != z(); ++)r  r  r  r  r  r  r  )r[   r   r  r  s       rU   r  (CppIteratorNode.generate_for_loop_header  ss     224""KKM##=t}}';';'==!!""KKM 	rW   c                 l    UR                  U< SU R                  < U R                  5       < S35        g )Nz = *r  )r   r  r  )r[   r  r   s      rU   r  .CppIteratorNode.generate_iter_next_result_code  s(    

#..' 	(rW   c                 R    U R                   (       d  g [        R                  X5        g rO   )r  r   r  r  s     rU   r  .CppIteratorNode.generate_subexpr_disposal_code  s    && //;rW   c                 R    U R                   (       d  g [        R                  X5        g rO   )r  r   r  r  s     rU   r  "CppIteratorNode.free_subexpr_temps  s    && ##D/rW   c                     U R                   (       d*  [        R                  X5        [        R                  X5        [        R	                  X5        g rO   )r  r   r  r  r  r  s     rU   r  &CppIteratorNode.generate_disposal_code  s7    && 33D?''3''3rW   c                     U R                   (       a%  UR                  R                  U R                   5        [        R	                  X5        g rO   )r  r  r  r   r  r  s     rU   r  CppIteratorNode.free_temps  s1    ""NN''(?(?@D'rW   )r  r  r  r   )r^   r_   r`   ra   r  r  r  r  r  r   r  rV  r  r  r  r  r  r  r  rb   rY   rW   rU   r  r    sW     GH|HM.`"!H(<04(rW   r  c                   <    \ rS rSrS rS rS rS
S jrS rS r	S	r
g)NextNodei  c                 N    [         R                  XR                  5        Xl        g rO   r  r  r   iteratorr[   r  s     rU   r  NextNode.__init__&      ll3 rW   c                     g rO   rY   r   s     rU   r  NextNode.nogil_check*  r~  rW   c                 8    U R                   R                  U5      $ rO   )r  ro  r   s     rU   ro  NextNode.type_dependencies.  s    }}..s33rW   Nc           
         Uc  U R                   R                  U5      nUR                  (       d  UR                  (       a  UR                  $ UR
                  (       aI  UR                  U R                  SU/5      R                  R                  n[        R                  " USS9nU$ [        U R                  U R                   R                  [        U R                  S[        R                  S9S9nUR                  U5      $ )Nr   Tremove_fakerefPY_SSIZE_T_MAXr  r{  )r  r   r0  ru  r1  r  r  r   r   r  r   remove_cv_refr~  r  r  r  )r[   ry   iterator_type	item_typefake_index_nodes        rU   r   NextNode.infer_type1  s      MM44S9M=#9#9 ***''55dhhm_UZZffI"004PI (]]++dhh.>#-#?#?ABO
 #--c22rW   c                 h    U R                  XR                  R                  5      U l        SU l        U $ r  )r   r  r   r  r   s     rU   rV  NextNode.analyse_typesC  s(    OOC););<	rW   c                 X    U R                   R                  U R                  5       U5        g rO   )r  r  r  r  s     rU   r  NextNode.generate_result_codeH  s    44T[[]DIrW   )r  r  r   rO   )r^   r_   r`   ra   r  r  ro  r   rV  r  rb   rY   rW   rU   r  r    s!    !43$
JrW   r  c                   B    \ rS rSrS/rSr\rSrSr	S r
S rS rS	 rS
rg)AsyncIteratorNodeiL  r  Tr,   Fc                     [         $ rO   r   r   s     rU   r   AsyncIteratorNode.infer_typeZ      rW   c                 6   U R                   (       a  U R                   nU R                  R                  U5      U l        U R                  R                  R                  (       d6  [        U R                  S5        U R                  R                  U5      U l        U $ )Nz*async for loops not allowed on C/C++ types)rr  r  rV  r   rv   r   r   rk  r   s     rU   rV  AsyncIteratorNode.analyse_types]  se    ??//C33C8}}!!--$((HI MM<<SADMrW   c           
      Z   UR                   R                  [        R                  " SS5      5        UR	                  U R                  5       < SU R                  R                  5       < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )N	AsyncIterCoroutine.cz  = __Pyx_Coroutine_GetAsyncIter(r=  )r   r   r   r   r   r  r  r   r   r   r  r  s     rU   r  &AsyncIteratorNode.generate_result_codef  w    ))+*A*A+}*]^

KKMMM##%##DKKM488<> 	? 	T"rW   c                 &    UR                  S5        g r  r  r  s     rU   r  *AsyncIteratorNode.generate_for_loop_headern  r  rW   r  N)r^   r_   r`   ra   r   r  r   r   r  rs  r   rV  r  r  rb   rY   rW   rU   r.  r.  L  s3     |HHDGO#rW   r.  c                   4    \ rS rSr\rSrS rS rS r	S r
Srg)	AsyncNextNodeir  r,   c                 N    [         R                  XR                  5        Xl        g rO   r  r  s     rU   r  AsyncNextNode.__init__}  r  rW   c                     [         $ rO   r0  r   s     rU   r   AsyncNextNode.infer_type  r2  rW   c                     U $ rO   rY   r   s     rU   rV  AsyncNextNode.analyse_types  r  rW   c           
      Z   UR                   R                  [        R                  " SS5      5        UR	                  U R                  5       < SU R                  R                  5       < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )Nr6  r7  z! = __Pyx_Coroutine_AsyncIterNext(r=  )r   r   r   r   r   r  r  r   r   r   r  r  s     rU   r  "AsyncNextNode.generate_result_code  r9  rW   )r  N)r^   r_   r`   ra   r   r   r  r  r   rV  r  rb   rY   rW   rU   r=  r=  r  s"     DG!#rW   r=  c                   0    \ rS rSrSS/rSrSrS rS rSr	g)	WithExitCallNodei  r   
await_exprTNc                     U R                   R                  U5      U l         U R                  (       a   U R                  R                  U5      U l        [        R                  U l        SU l        U $ r  )r   rV  rH  r   ru  r   r  r   s     rU   rV  WithExitCallNode.analyse_types  sN    II++C0	??"oo;;C@DO**	rW   c                    U R                   (       a(  UR                  SU R                  R                  -  5        U R                  R                  U5        UR                  R                  [        SS9nUR                  U R                  5        UR                  R                  [        R                  " SS5      5        UR                  U< SU R                  R                  < SU R                  R                  5       < S35        UR!                  U R                  R                  [        S	9  U R                  R#                  U5        U R                  R%                  U5        UR                  UR'                  X R                  5      5        UR)                  U[        5        U R*                  (       a  U R*                  R                  XS
S9  UR                  U< SU R*                  R-                  5       < S35        U R*                  R/                  U5        U R*                  R%                  U5        U R0                  (       a8  U R3                  U5        UR                  U R                  5       < SU< S35        UR!                  U[        S	9  U R0                  (       a*  UR5                  U R                  U R                  5       5        UR                  R7                  U5        U R                   (       a  UR                  S5        g g )N	if (%s) {Fr  PyObjectCallr   = __Pyx_PyObject_Call(r  z, NULL);r+  T)source_cnamedecref_sourcer  r   = __Pyx_PyObject_IsTrue(r  r   )test_if_runr   	with_statexit_varr   r  r  r  r   r  r   r   r   r   r   r  r  r  r  r   r  rH  r   r  r  r  r  r  )r[   r   
result_vars      rU   r  )WithExitCallNode.generate_evaluation_code  s   JJ{T^^%<%<<=		**40^^11.U1S
dhh))+*A*A.+0 	1

NN##II  	! 	dnn55NK		((.		T"

4**:xx@A
N3??OO44Tbf4gJJZ1J1J1LMNOO99$?OO&&t,%%d+JJDKKM:VWj~>!!$((DKKM:##J/JJsO rW   )r   rH  r  r   )
r^   r_   r`   ra   r   rR  rH  rV  r  rb   rY   rW   rU   rG  rG    s"     %HKJ%rW   rG  c                   6    \ rS rSr\rS rS rS rS r	S r
Srg)	ExcValueNodei  c                 .    [         R                  X5        g rO   r   r  )r[   r   s     rU   r  ExcValueNode.__init__  s    $$rW   c                     Xl         g rO   var)r[   r^  s     rU   set_varExcValueNode.set_var  s    rW   c                     U R                   $ rO   r]  rZ   s    rU   r  "ExcValueNode.calculate_result_code  s    xxrW   c                     g rO   rY   r  s     rU   r  !ExcValueNode.generate_result_code  r   rW   c                     U $ rO   rY   r   s     rU   rV  ExcValueNode.analyse_types  r  rW   r]  N)r^   r_   r`   ra   r   r   r  r_  r  r  rV  rb   rY   rW   rU   rX  rX    s"    
 D%rW   rX  c                   R    \ rS rSr/ rSS jrS rS rS rS r	S r
S	 rS
 rS rSrg)TempNodei  Nc                     [         R                  X5        X l        UR                  (       a  [        U l        SU l        g r  )r   r  r   rv   r   r2  r  )r[   r   r   ry   s       rU   r  TempNode.__init__  s-    $$	 .DrW   c                     U $ rO   rY   r   s     rU   rV  TempNode.analyse_types  r  rW   c                     SU l         g r  r  r   s     rU   rP  #TempNode.analyse_target_declaration  	    rW   c                     g rO   rY   r  s     rU   r  TempNode.generate_result_code  r   rW   c                 V    UR                   R                  U R                  SS9U l        g )NTr  )r  r  r   
temp_cnamer  s     rU   allocateTempNode.allocate  s!    ..66tyyT6RrW   c                 \    UR                   R                  U R                  5        S U l        g rO   )r  r  rs  r  s     rU   releaseTempNode.release  s    ##DOO4rW   c                 4     U R                   $ !    S5       e= f)Nz-Remember to call allocate/release on TempNode)rs  rZ   s    rU   r  TempNode.result  s#    	??"	III5s    	c                     g rO   rY   r  s     rU   r  TempNode.allocate_temp_result  r   rW   c                     g rO   rY   r  s     rU   r  TempNode.release_temp_result  r   rW   )r  r  r2  rs  r   rO   )r^   r_   r`   ra   r   r  rV  rP  r  rt  rw  r  r  r  rb   rY   rW   rU   rh  rh    s7     HSrW   rh  c                       \ rS rSrS rSrg)
PyTempNodei  c                 N    [         R                  X[        R                  U5        g rO   )rh  r  r   r   )r[   r   ry   s      rU   r  PyTempNode.__init__  s    $Z%>%>DrW   rY   Nr^   r_   r`   ra   r  rb   rY   rW   rU   r  r    s    ErW   r  c                   :    \ rS rSr/ rS	S jrS rS rS rS r	Sr
g)
RawCNameExprNodei  Nc                 @    [         R                  XUS9  Ub  X0l        g g )Nr+  )r   r  r   )r[   r   r   r   s       rU   r  RawCNameExprNode.__init__  s%    $$/J rW   c                     U $ rO   rY   r   s     rU   rV  RawCNameExprNode.analyse_types!  r  rW   c                     Xl         g rO   r   )r[   r   s     rU   	set_cnameRawCNameExprNode.set_cname$  s    
rW   c                     U R                   $ rO   r  rZ   s    rU   r  RawCNameExprNode.result'  r  rW   c                     g rO   rY   r  s     rU   r  %RawCNameExprNode.generate_result_code*  r   rW   r  r%  )r^   r_   r`   ra   r   r  rV  r  r  r  rb   rY   rW   rU   r  r    s     H
rW   r  c                   8    \ rS rSr\rSrSrS/rS r	S r
S rSrg	)
JoinedStrNodei5  TzString concatenationvaluesc                     U R                    Vs/ s H"  o"R                  U5      R                  U5      PM$     snU l         U $ s  snf rO   )r  rV  rk  )r[   ry   vs      rU   rV  JoinedStrNode.analyse_typesB  s9    MQ[[Y[s+>>sC[Y Zs   )Ac                     gr  rY   rZ   s    rU   r  JoinedStrNode.may_be_noneF      rW   c           
         UR                  U R                  5        [        U R                  5      nUS:  n[	        5       nSnU R                   H  n[        U[        5      (       a  [        XVR                  5       5      nM3  [        U[        5      (       a'  UR                  R                  R                  (       a  Mo  [        U[        5      (       a  M  UR                  U5        M     / n0 n[        U5      /n	U R                   H  nUR!                  U5        [        U[        5      (       a  [        [        UR                  5      5      n
O<SUR#                  5        S3n
Xd;   a#  U	R%                  SUR#                  5        S35        X;   a  X==   S-  ss'   M  UR%                  U
5        SX'   M     U(       a>  UR&                  R)                  [*        R,                  " [*        R.                  U5      SS9nOUR&                  R)                  [*        R0                  " [*        R.                  5      SS9nUR3                  S	X4-  5        UR3                  S
U-  5        UR3                  SUR5                  U R                  5      -  5        UR3                  S5        [7        U R                  5       H)  u  pUR3                  SXUR#                  5       4-  5        M+     U Vs/ s H  nX   S:  a	  U SX    3OUPM     nnUR                  U R                  5        U R9                  U5        UR:                  R=                  [>        R@                  " SS5      5        UR3                  SU RC                  5       UUSRE                  U5      SRE                  U	5      4-  5        U(       d  UR3                  SU-  5        UR&                  RG                  U5        UR3                  URI                  U R#                  5       U R                  5      5        U RK                  U5        U R                   H%  nURM                  U5        URO                  U5        M'     g s  snf )N    r	  z__Pyx_PyUnicode_GET_LENGTH(r9  z__Pyx_PyUnicode_MAX_CHAR_VALUE(r,   Fr  z7%s = (PyObject **) PyMem_Calloc(%d, sizeof(PyObject*));r  zPyErr_NoMemory(); %sr   z%s[%d] = %s; * JoinPyUnicodeStringTools.cz*%s = __Pyx_PyUnicode_Join(%s, %d, %s, %s); +  | zPyMem_Free(%s);)(r  r   r   r  setr   r4  r  r  FormattedValueNoder   r   rp  	CloneNodeaddr~   r  r   r  r  r  r   c_array_typer   ra  r   r   	enumerater  r   r   r   r   r  joinr  r   r  r  r  )r[   r   	num_itemsuse_stack_memoryunknown_nodesmax_char_valuer   length_partscountscharval_partslength_partvalues_arrayir`  s                 rU   r  &JoinedStrNode.generate_evaluation_codeJ  s   dhh$	$r>KKD$,,!$^5N5N5P!QD"455$**//:T:TD),,!!$'   ^,-KKD))$/$,,!#djj/2 !<DNN<L;MQO(!((+J4>>K[J\\])^_$#q(###K0&'#  " >>77''
(A(A9MZ_ 8 aL  >>77##J$=$=>5 8 RLJJPT`SllmJJ-<=JJ-0IIJJJsO -GAJJ~$..:J(KKL .
 %
$ +1,*:tfC~&D$ 	 

 	dhh!!$'))+*A*A/Sb*cd

?KKMJJ|$ JJ}%C
 
 	  JJ(<78##L1

4**4>>+;TXXFGT"KKD''-OOD!  3
s   #Q)r  N)r^   r_   r`   ra   r   r   r  r@  r   rV  r  r  rb   rY   rW   rU   r  r  5  s*     DG(KzHP"rW   r  c                   `    \ rS rSrSS/r\rSrSrSr	SSS	S
S.R                  rS rS rS rSrg)r  i  r   format_specTNzString formattingPyObject_StrPyObject_ReprPyObject_ASCII__Pyx_PyNumber_Long)sradc                     gr  rY   rZ   s    rU   r  FormattedValueNode.may_be_none  r  rW   c                 V   U R                   R                  U5      U l         U R                  (       a  U R                  R                  (       au  U R                  (       a  U R                  R                   OU R                   R                  R
                  nU R                   R                  R                  XS9(       a  X l        U R                  (       a/  U R                  R                  U5      R                  U5      U l        U R                  c  U R                   R                  U5      U l         U R                  (       di  U R                  (       a  U R                  S:X  aH  U R                   R                  [        L a+  U R                   R                  5       (       d  U R                   $ U $ )N)r  r  )r   rV  r  r  r   default_format_speccan_coerce_to_pystringc_format_specrk  conversion_charr   r  )r[   ry   r  s      rU   rV   FormattedValueNode.analyse_types  s   ZZ--c2
4#3#3#E#E6:6F6FD,,22DJJOOLoLoMzz55c5U%2"#//==cBUUVYZD%66s;DJ##T-A-ATEYEY]`E`::??l24::;Q;Q;S;S::%rW   c                    U R                   b  U R                  R                  R                  (       d  U R                  R                  R	                  U R                  R                  5       XR                   5      nUR                  U R                  5       < SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        g U R                  R                  5       nU R                  R                  [        L =(       a    U R                  R                  5       (       + nU R                  (       a  SnU R                  R                  5       nO!SnUR                  [        R                   5      nU R"                  nUS:X  a	  U(       a  S nU(       a^  U R%                  U5      nUc
   SU-  5       eU< SU< S3nUR&                  R)                  [*        R,                  " S	S
5      5        US-  nOrU R                  (       a1  UR&                  R)                  [*        R,                  " SS
5      5        O0UR&                  R)                  [*        R,                  " SS
5      5        UR                  U R                  5       < SU< SU< SU< SUR                  U R                  5       U R                  5      < 3	5        U R                  U5        g )Nr  rh  __Pyx_PyObject_Format__Pyx_PyObject_FormatSimpler  z(invalid conversion character found: '%s'r  r9  PyObjectFormatAndDecrefr  	AndDecrefPyObjectFormatPyObjectFormatSimpler  r=  )r  r   r   rv   convert_to_pystringr  r   r   r   r  r   r   r  r  r  r   empty_unicoder  find_conversion_funcr   r   r   r   )	r[   r   convert_func_callvalue_resultvalue_is_unicodeformat_funcr  r  fns	            rU   r  'FormattedValueNode.generate_result_code  s8   )$**//2M2M $

 C C

!!#T+=+=!?JJ!''txx@B C   &zz++-::??l:[4::CYCYC[?[1K**446K 8K33F4H4HIK..c!&6"O**?;B>_#MP_#__>')<8L--''(A?SU;&K--''(8/JL --''(>PR 	

KKM##DKKM488<> 	? 	T"rW   )r  r  r   )r^   r_   r`   ra   r   r   r   r  r  r@  rp   r  r  rV  r  rb   rY   rW   rU   r  r    sP     'HDGM%K "	
 
c "/#rW   r  c                   B    \ rS rSrSr\R                  rS rS r	S r
Srg)ParallelThreadsAvailableNodei   a  
Note: this is disabled and not a valid directive at this moment

Implements cython.parallel.threadsavailable(). If we are called from the
sequential part of the application, we need to call omp_get_max_threads(),
and in the parallel part we can just call omp_get_num_threads()
c                     SU l         U $ r  r  r   s     rU   rV  *ParallelThreadsAvailableNode.analyse_types      rW   c                    UR                  S5        UR                  SU R                  -  5        UR                  SU R                  -  5        UR                  S5        UR                  SU R                  -  5        UR                  S5        g )N#ifdef _OPENMPz2if (omp_in_parallel()) %s = omp_get_max_threads();z else %s = omp_get_num_threads();r  z%s = 1;r  r   r  r  s     rU   r  1ParallelThreadsAvailableNode.generate_result_code  so    

#$

G<@NNK 	L

5FG

7

9t~~-.

8rW   c                     U R                   $ rO   r  rZ   s    rU   r  #ParallelThreadsAvailableNode.result      ~~rW   r  Nr^   r_   r`   ra   r  r   
c_int_typer   rV  r  r  rb   rY   rW   rU   r  r     s#       D
rW   r  c                   B    \ rS rSrSr\R                  rS rS r	S r
Srg)ParallelThreadIdNodei  z'
Implements cython.parallel.threadid()
c                     SU l         U $ r  r  r   s     rU   rV  "ParallelThreadIdNode.analyse_types$  r  rW   c                     UR                  S5        UR                  SU R                  -  5        UR                  S5        UR                  SU R                  -  5        UR                  S5        g )Nr  z%s = omp_get_thread_num();r  r  r  r  r  s     rU   r  )ParallelThreadIdNode.generate_result_code)  sR    

#$

/$..@A

7

9t~~-.

8rW   c                     U R                   $ rO   r  rZ   s    rU   r  ParallelThreadIdNode.result0  r  rW   r  Nr  rY   rW   rU   r  r    s#       D
rW   r  c                   &    \ rS rSrS rS rS rSrg)_IndexingBaseNodei;  c                     U R                   R                  5       =(       d(    U R                   R                  [        [        [
        4;   $ rO   )r|  r  r   r   r   r    rZ   s    rU   r  _IndexingBaseNode.is_ephemeral@  s9     yy%%' 6499>>*n>6 ,6 	6rW   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ rO   )r|  r  r}  rW  rZ   s    rU   r  "_IndexingBaseNode.check_const_addrF  s'    yy))+H

0F0F0HHrW   c                     U R                   R                  (       a(  U R                   R                  R                  (       a  g gU R                   R                  (       a  ggr  )r   r  r-  ru  r0  rZ   s    rU   r   _IndexingBaseNode.is_lvalueI  sH     99!!yy&&// 0  YY rW   rY   N)r^   r_   r`   ra   r  r  r   rb   rY   rW   rU   r  r  ;  s    
6IrW   r  c                       \ rS rSrSS/rSrSrSrS rS r	S	 r
S
 rS rS rS rS rS rS rS r  S%S jrS rS rS rS rS rS rS rS&S jrS rSrS rS rS r S  r!  S'S! jr"S" r#S(S# jr$S$r%g))r~  iY  r|  r}  NTFc                 h    U R                   R                  U R                  R                     U l        g rO   )r|  r   r}  rZ   s    rU   r8  #IndexNode.calculate_constant_resulti  s#    #yy889S9STrW   c                     U R                   R                  U5      nU R                  R                  U5      n X#   $ ! [         a  nU R	                  U5         S nAg S nAff = frO   )r|  rD  r}  r  rI  )r[   rC  r|  r}  rH  s        rU   rD  IndexNode.compile_time_valuel  sX    yy++D1

--d3	-; 	-))!,,	-s   < 
A!AA!c                    U R                   nUR                  5       =(       ag    U R                  R                  5       =(       aF    UR                  =(       a3    UR                  R                  =(       d    UR                  R
                  $ rO   )r|  r  r}  r   r0  ru  r[   r|  s     rU   r  IndexNode.is_simplet  s_    yy  KTZZ%9%9%; KIIK#'99#3#3#Ityy7I7I	LrW   c                    U R                   R                  nU(       aY  UR                  (       a  gU[        [        [
        4;   a  g[        U R                  [        5      (       a  UR                  (       a  g[        R                  U 5      $ r  )r|  r   r  r   r   r    r   r}  	SliceNoder_  r   r  r[   r1  s     rU   r  IndexNode.may_be_noney  s`    IINN	""\:~FF$**i00,, !##D))rW   c                     g rO   rY   r   s     rU   rP  $IndexNode.analyse_target_declaration  r   rW   c                    U R                   R                  5       nUGbU  US;   GaN  U R                  R                  U5      nUc%  [	        U R                   R
                  SU S35        g US:X  a  [        R                  " U5      $ US:H  nU(       + nUR                  (       a  UR                  (       a)  U(       a   [	        U R                   R
                  S5        SnUR                  (       a)  U(       a   [	        U R                   R
                  S5        SnUR                  nUR                  (       a'  [	        U R                   R
                  S	U S
U S35        [        R                  " X4U(       + S9$ U R                   R                  U5      nU(       Ga  UR                  (       d  UR                  (       an  U R                  R                   (       a  U R                  R"                  nOU R                  /n[$        R&                  " U R
                  US S9nUR)                  XS9$ U R                  R*                  (       d  U R                  R                   (       a  SSKJn  UR1                  UR3                  UR4                  R6                  5      5        U R                  R*                  (       a  U R                  /O[9        U R                  R"                  5      n	[        R:                  " X8R=                  X5      5      $ UR>                  (       dV  U R                  RA                  U5      n
U
b"   [C        U
5      n
[        RD                  " X:5      $ [	        U R
                  S5        g ! [F        [H        4 a     N)f = f)N)pointerconstvolatilezinvalid use of 'z', argument is not a typer  r  zDuplicate 'const'TzDuplicate 'volatile'z(Cannot declare memory view variable as 'z'. Did you mean 'z[item_type][:]' ?)r  is_volatile)r   positional_argskeyword_args)r1  r,   r'  z*Array size must be a compile time constant)%r|  r  r}  r  r   r   r   ra  r.  r  r  r/  r   c_const_or_volatile_typer  python_type_constructor_namer   r   r   TemplatedTypeNodeanalyser   r&  r(  r   get_view_utility_coder\  shared_utility_qualified_namer  MemoryViewSliceTypeget_axes_specsrv   rD  r   
CArrayTyper   r   )r[   ry   modifierr1  r  r  template_values	type_noder(  axesr}  s              rU   r  IndexNode.analyse_as_type  s   99002H0P$P

2237I diimm'7zAZ%[\9$!**955  7*H&,K((%%diimm-@A#H(("diimm-CD"&K%22	++diimm@
J[\d[eevwy66h,H H II--c2	%%)O)O::55&*jjooO'+zzlO!33$3!%'	 !(((BB$$

(J(J($$44AA
 (,zz':':

|TZZ__@U!55iAZAZ[^Aeff**

55c:$G #E
  *44YFFdhh LM '	2 s   3M+ +M>=M>c                 Z   / nU nUR                   (       a  UR                  R                  U5      nU(       aT  UR                  (       aC  UR                  (       a2  UR                  UR                  5       (       a  SOUR                  5        UR                  nUR                   (       a  M  U$ Nztyping.Optional)r  r|  r  r  modifier_namer  allows_noner}  )r[   ry   r  modifier_nodemodifier_types        rU   analyse_pytyping_modifiers$IndexNode.analyse_pytyping_modifiers  s     	(()..>>sCM-"L"L%33  m6O6O6Q6Q!2WdWrWrs)//M ((( rW   c                 p    U R                   R                  U5      U R                  R                  U5      -   $ rO   )r|  ro  r}  r   s     rU   ro  IndexNode.type_dependencies  s+    yy**3/$**2N2Ns2SSSrW   c           	         U R                   R                  U5      nU R                  R                  (       ah  UR                  (       a  [
        $ UR                  (       a  [        $ U[        [
        [        [        [        4;   a  U$ UR                  (       a  U$ [        $ U R                  R                  U5      nU(       a  UR                  (       d   [        U R                  [        5      (       Ga  U[        L a  [         R"                  $ U[        L d  U R                   [
        L a  [         R$                  $ U[        [        4;   a&  ['        XR                   U R                  US9nUb  U$ GO=UR(                  (       d  UR*                  (       a  UR,                  $ UR.                  (       a  [        U R                  [        5      (       as  U R                  R1                  5       (       aS  U R                  R2                  nUS:  a  XRR4                  -  nSUs=::  a  UR4                  :  a  O  O|UR6                  U   $ OlUR                  (       a[  UR8                  S:X  a   UR8                  S:X  a  UR:                  $ [         R<                  " UR:                  UR>                  SS  5      $ U R                  R@                  (       a  UR                  (       at  UnU R                  RB                   HV  nUR                  (       d    OF[E        U RF                  [I        U R                   RF                  US9US9R                  U5      nMX     U$ URJ                  (       aW   " S S5      nU" U RF                  US9U" U RF                  US9/n	URM                  S	U	5      n
U
b  U
RN                  RP                  $ [S        U5      (       a3  [S        U5      (       a#  U R                  U4n[U        [W        X+/5      5      $ U[        L a  U$ [        $ )
Nr   r   r,   r+  r{  c                       \ rS rSrS rSrg))IndexNode.infer_type.<locals>.FakeOperandi"  c                 :    U R                   R                  U5        g rO   )__dict__update)r[   r`  s     rU   r  2IndexNode.infer_type.<locals>.FakeOperand.__init__#  s    MM((.rW   rY   Nr  rY   rW   rU   FakeOperandr%  "  s    /rW   r*  )r   r   []),r|  r   r}  r   r  r   r  r   r    r   r   r   r   rD  r   r  r   c_py_ucs4_typec_uchar_typer   r0  ru  r1  r}  r   r   rC  r~  ndimrA  r  r  r   r   r~  r   r   r  lookup_operatorr   r  r>   rJ   rD   )r[   ry   r1  
index_typer&  r}  r]  r  r*  operands
index_funcindex_with_types               rU   r   IndexNode.infer_type  s   II((-	::""!!++##|ZT^__  --   &%ZZ**3/
*++z$**g/N/NL( "000n,		Z0G!...z9554DJJD	($$ )!!Y%7%7 ***$$DJJ)H)H::1133 JJ66Eqy/E2INN2(33E::-->>Q&>>Q&$??*%99)//9>>Z[Z\K]^^::--)2N2N%MZZ__$77 )$(($))--Vc9d01!33=:c?  % %$!!/ / y9z:H ,,T8<J%!2229%%/**E*E#zz:6O4Y@QRSS $ rW   c                 "    U R                  USS9$ )NTgetting)analyse_base_and_index_typesr   s     rU   rV  IndexNode.analyse_types9  s    00d0CCrW   c                     U R                  USS9nUR                  R                  (       a  [        U R                  S5        X L a8  UR                  5       (       d#  [        U R                  SUR                  -  5        U$ )NT)settingzAssignment to const dereference%Assignment to non-lvalue of type '%s')r8  r   r  r   r   r   rX  s      rU   r`  IndexNode.analyse_target_types<  sa    00d0C99$((=>< 0 0$((CdiiOPrW   c                    U(       a   U R                   R                  U5      U l         U R                   R                  R                  (       a  [        R
                  U l        U $ U R                  R                  nUR                  S   (       dQ  U(       a5  [        U R                  R                  U R                  R                  5        O[        U R                  5        U(       dn  [        U R                  [        5      (       aO  [        R                  " U R                  R                   5      (       a   U R                  R#                  U5      U l        U R                   R                  R$                  nU(       d  [        U R                   [&        5      (       d  U(       a  U R                   R                  R(                  (       dJ  U R                   R                  R*                  (       dE  U R                   R                  R,                  (       d   U R                   R#                  U5      U l         U R/                  X5      nUb  U$ UR0                  U l        U R                   R                  nUR2                  (       d  U R                  R                  U5      U l        U R                  R                  U l        U R4                  R6                  (       a  U R4                  R8                  U l        UR:                  (       ay  U(       a  [=        U R>                  SSS9  O&U R                  R@                  S;   a  U R                   $ U R                   R#                  U5      U l         U R                   R                  nURB                  (       a  U RE                  XX#5      $ UR*                  (       d  UR,                  (       a  U RG                  X5      $ URH                  (       a  U RK                  X5      $ UR2                  (       a  U RM                  U5      $ URN                  (       a  U RQ                  XU5      $ [S        U R>                  SU-  5        [        R
                  U l        U $ )N
wraparoundz%cannot assign to Unicode string indexr,   r   )r   rX  z'Attempting to index non-array type '%s')*r|  rV  r   r<  r   r3   r}  r   rq   r   r   r   r   r  r   long_literalr   rk  r   r3  r  r0  ru  analyse_as_buffer_operationr   rv  original_index_typer  r-  r  r   r   r   rv   analyse_as_pyobjectanalyse_as_c_arrayr  analyse_as_cppanalyse_as_c_functionr}  analyse_as_c_tupler   )	r[   ry   r7  r;  analyse_baser   is_memslicereplacement_noder1  s	            rU   r8  &IndexNode.analyse_base_and_index_typesD  s   
 		//4DI99>>"" #--DIK::&&~~l+&tzz'7'7I&tzz2 Jtzz7;;@R@RSWS]S]ScSc@d@d66s;DJiinn77
499i @ @Hyy~~''		0E0EI`I` II88=	;;CI'##YY
IINN	%%11#6DJ'+zzD$''44+/+C+C+Q+Q((( DHH&MUVWZZ//7:99$ II88=	 IINN	  ++C7LL!3!3**399##&&s44##--c22  **3AA$((; #--DIKrW   c                 6   U R                   R                  nU R                  R                  R                  (       aG  U[        La>  [        U R                  SSS9  U R                  R                  U5      U l        SU l        GOU R                  R                  R                  (       Ga4  U[        LGa*  U(       a  UR                  S   (       d  U[        [        [        4;   a  U R                  R                  R                  (       al  UR                  S   (       aX  [        U R                  [         5      (       aA  U R                  R#                  5       (       a"  U R                  R$                  S:  a  SU l        OSU l        U R                  R'                  [(        R*                  U5      R-                  U5      U l        U R.                  R1                  U5        O'U R                  R                  U5      U l        SU l        U R                  R                  R                  (       a   U[2        L a  [(        R4                  U l        GO?U R                  R                  R                  (       a<  U[        L a3  U(       a  [(        R6                  U l        O[(        R8                  U l        OU(       a&  U[:        [        [2        [        [        4;   a  XPl        OS nU[        [        4;   aD  U R                  R                  R                  (       a  [=        XR                   U R                  US9nU[        [        [        4;   a   U R                   R?                  S5      U l         Ub  UR@                  (       d  [B        U l        OX`l        U RE                  X5        U $ )	NzItem lookup of unicode character codes now always converts to a Unicode string. Use an explicit C integer cast to get back the previous integer lookup behaviour.r,   r   boundscheckr?  r   r#  &'NoneType' object is not subscriptable)#r|  r   r}  r  r   r   r   rk  r  rD  rq   r   r   r    signedr   r  r   r   r8  r   r  rj  rB  create_to_py_utility_coder   r,  r-  r  r   r   r  rv   r   wrap_in_nonecheck_node)r[   ry   r   r7  r;  r1  r&  s          rU   rC  IndexNode.analyse_as_pyobject  s^   IINN	::??**y	/IDHHhopr 66s;DJDLZZ__###	(BNN=9"y*n&MM!ZZ__33 #| <'

G<<!ZZ;;==$**B\B\`aBa  --j.J.JCPaabefDJ$$>>sC66s;DJDL::??!!i<&? #11DIZZ__##	^(C&33	 '11	)
NLR[]g'hh!IIY
33

8N8N4DJJD	Y
I>> II778`a	 	(=(= +	%	##C1rW   c                 B   U R                   R                  nUR                  U l        U R                  R                  (       a%  [        R
                  " U R                  5      U l        U(       a  X0l        U $ U R                  R                  R                  (       a1  U R                  R                  [        R                  U5      U l        U $ U R                  R                  R                  (       d-  [        U R                  SU R                  R                  -  5        U $ )NzInvalid index type '%s')r|  r   r1  r  r   CReferenceTyper}  rv   r8  r  rD  r   r   )r[   ry   r   r1  s       rU   rD  IndexNode.analyse_as_c_array  s    IINN	''	99!!"11$))<DI!I
 	 ZZ__((--j.J.JCPDJ  ''$((5

GHrW   c                    U R                   R                  nUR                  SU R                   U R                  /5      nUcQ  [	        U R
                  SU< SU R                  R                  < S35        [        R                  U l        SU l        U $ UR                  nUR                  (       a  UR                  nUR                  U l        UR                  U l        U R                  (       aD  U(       d  SU l        [        U 5      (       a&  UR                  [         R"                  " SS5      5        U R                  R%                  UR&                  S	   R                  U5      U l        UR(                  U l        U(       a>  UR(                  R*                  (       d#  [	        U R
                  S
U R                  -  5        U $ )Nr+  z
Indexing 'z ' not supported for index type 'rZ  r  TCppExceptionConversionr  r   z#Can't set non-reference result '%s')r|  r   r/  r}  r   r   r   r3   rw  r0  r1  r   r   r  r   r   r   r   r8  r   r  r  )r[   ry   r;  r1  rr  	func_types         rU   rE  IndexNode.analyse_as_cpp  sE   IINN	&&tdii-DE$((QZ\`\f\f\k\klm"--DI(DKMM	!++I(88(88#-d33$$[%<%<=UWg%hiZZ)))..*;*@*@#F
))	900==$((ADIIMNrW   c           	         U R                   R                  nUR                  (       a  U R                  U5        U $ U R	                  U5      U l        S U l        UR                  c#  [        U R                  S5        [        U l        U $ U R
                  c  [        U l        U $ [        UR                  5      [        U R
                  5      :w  aQ  [        U R                  S[        UR                  5      < S[        U R
                  5      < 35        [        U l        U $ UR                  [        [        UR                  U R
                  5      5      5      U l        U $ )Nz)Can only parameterize template functions.z-Wrong number of template arguments: expected , got )r|  r   r  parse_indexed_fused_cdefparse_index_as_typestype_indicesr}  	templatesr   r   r3   r   r  dictr  r[   ry   r1  s      rU   rF  IndexNode.analyse_as_c_function  s   IINN	))#."  !% 9 9# >DDJ""*dhh KL&	  ""*&	  Y(()S1B1B-CCdhhY0013t7H7H3I!L M&	  &00c):M:MtO`O`6a1bc	rW   c                 B   U R                   R                  n[        U R                  [        5      (       a  U R                  R                  5       (       a  U R                  R                  nUR                  * Us=::  a  UR                  :  a-  O  O*US:  a  XTR                  -  nUR                  U   U l        U $ [        U R                  SU< SU< S35        [        R                  U l        U $ U R                   R                  U5      U l         U R                  XUSS9$ )Nr   zIndex z out of bounds for 'rZ  Fr7  r;  rH  )r|  r   r   r}  r  r   r   rC  r~  r   r   r   r3   rk  r8  )r[   ry   r7  r;  r1  r}  s         rU   rG  IndexNode.analyse_as_c_tuple  s    IINN	djj'**tzz/M/M/O/OJJ..E%8)..819^^+E%007	 K	 dhhi)* '11	K		44S9DI44SSZin4oorW   c                    [        U R                  [        5      (       a  U R                  R                  nOU R                  /nU R                  nUR
                  nSnUR                  (       a  SSKJn  UR                  (       a.  UR                  U5      nUb  UR                  nUR
                  nUnUR                  X5R                  5      u  pn
U	(       a  [        U R                  X4S9nGOo[        U R                  X4S9nGOYUR                   (       d  UR"                  (       Ga6  UR"                  (       d  [%        U5      UR                  :X  Ga  SnU Vs/ s H  oR'                  U5      PM     nnUR"                  (       a  [)        S U 5       5      nU(       ap  [+        U5       Ha  u  pUR,                  (       d  M  [/        UR                  UR0                  UR2                  UR4                  S9nUR'                  U5      nXU'   Mc     O[)        S U 5       5      nU(       a5  [7        U R                  X4S9n[        U R                  [8        5      (       a   eUb  UR'                  X5      nU$ s  snf )	z9
Analyse buffer indexing and memoryview indexing/slicing
Nr,   r'  )indicesr|  Tc              3      #    U  HK  nUR                   R                  =(       d)    UR                  =(       d    UR                   R                  v   MM     g 7frO   )r   rD  r   r>   rh   r}  s     rU   rk   8IndexNode.analyse_as_buffer_operation.<locals>.<genexpr>4  s<      ).%,E 

))YU^^Yuzz?Y?YY%,s   AAr   r   r   c              3   L   #    U  H  oR                   R                  v   M     g 7frO   r   rD  ri  s     rU   rk   rj  >  s     (Pu):):s   "$)r   r}  r^  r   r|  r   r   r&  r(  r  merged_indicesunellipsifyr.  MemoryViewSliceNoder   MemoryViewIndexNoder  r>   r   rV  allr  r   SliceIntNoder   r   r   BufferIndexNoder  )r[   ry   r7  rg  r|  r1  rJ  r(  rn  have_slicesnewaxesr  r}  do_replacementr  s                  rU   rA  %IndexNode.analyse_as_buffer_operation  s    djj),,jjooGzzlGyyII	''$$$!%!4!4W!=!-99D $		I,G,6,B,B7NN,[)K'#6txx#\ #6txx#\   I$=$=$=((CLINN,J#' AHI..s3I,,%( ).%,). &.N &'0'9GA$~~~(4UYYekkX]XbXbinisis(t(-(;(;C(@-2
	 (: &)(P(P%PN!'6txx'\$)$**i@@@@'/==cK) Js   I4c                     UR                   S   (       a  U R                  R                  5       (       d  g U R                  R                  S5      U l        g )N	nonecheckrN  )rq   r|  r  r  r[   ry   r7  s      rU   rQ   IndexNode.wrap_in_nonecheck_nodeH  s:    ~~k*$))2G2G2I2III//0XY	rW   c                 ,   [        U R                  [        5      (       a  U R                  R                  nOU R                  /n/ nU HH  nUR	                  UR                  U5      5        US   b  M+  U(       a  [        UR                  S5          g    U$ )NrX  znot parsable as a type)r   r}  r^  r   r  r  r   r   )r[   ry   requiredrg  r^  r}  s         rU   r]  IndexNode.parse_index_as_typesM  s{    djj),,jjooGzzlGE 5 5c :;B'%))%=>  rW   c           	      x   [         R                  U l        SU l        U R                  R                  n/ nU R
                  R                  (       d  U R
                  R                  (       a&  UR                  U R
                  R                  5        OW[        U R
                  [        5      (       a8  U R
                  R                   H  nUR                  UR                  5        M      U R                  USS9nUc  U R
                  R                  U5      U l        U R                  R                  R                   (       d  [#        U R                  S5        OU R                  R                  R                   =U R                  l        U l        U R                  R                  =U R                  l        U l        SU R                  l        SU l        SU R                  l        SU l        g[)        U5       H  u  pgUR+                  U5      XV'   M     UR-                  5       n[/        U5      [/        U5      :  a  [#        U R                  S5      $ [/        U5      [/        U5      :  a'  U[/        U5         n	[#        U R                  SU	-  5      $ [1        UUU5       Hc  u  pn[3        UR4                   V	s/ s H  oR7                  U	5      PM     sn	5      (       d  [#        U
S5      s  $ Ub  UR8                  (       d  Mc    g   [;        [1        X5      5      nUR=                  U5      nUR>                  (       a  [#        U R                  S	5        gU R                  R                  RA                  5        H  nUR7                  U5      (       d  M  Xl        U R                  R                  (       a3  UR                  U l        SU l        U R                  RB                  U l!        SU R                  R                  l        XR                  l        UR                  U R                  l          g   [E        S
5      es  sn	f )a  
Interpret fused_cdef_func[specific_type1, ...]

Note that if this method is called, we are an indexed cdef function
with fused argument types, and this IndexNode will be replaced by the
NameNode with specific entry just after analysis of expressions by
AnalyseExpressionsTransform.
TF)r~  Nz)Can only index fused functions with typeszToo many types specifiedzHNot enough types specified to specialize the function, %s is still fusedzType not in fused typez6Index operation makes function only partially specificz!Couldn't find the right signature)#r   r3   r   is_fused_indexr|  r}  r   r  r  r   r   r^  r   r]  rV  r   rj  r   r  r4  r  specialize_fusedget_fused_typesr   r  rr   typesr3  r<  r`  r  r  r2  ro  r   )r[   ry   r1  	positionsr  specific_typesr  r   fused_typesri   r   specific_type
fused_typer  rT  s                  rU   r\  "IndexNode.parse_indexed_fused_cdef[  s.    ))	"IINN		::!8!8TZZ^^,

I..zz  ) '2232G!11#6DJ99??..dhh KL 04yy/J/JJ		$*-1ZZ__<		$(		!#"&

"'D 0GA $ 5 5c :N 1  //1~[!11#=>> 3{#33C/0A $EGH$I J J /2)2@2=/?*C
 *:J:JK:JQ--a0:JKLLS":;;$(>(>(>/? ![!AB##$56==$((JL "YY^^NNP	<<	** )Iyy-- &/__
,0)#'99==+/DIIOO(%.IIN&/ooDIIO Q$ $$GHHC Ls   4P7
zIndexing Python objectc           	         U R                   R                  [        [        [        4;   a  U R                   R                  [        L a  SnGOU R                   R                  [        L a  SnGOU R                   R                  [        L a  SnGO SU R                   R                  -  5       eU R                   R                  R
                  (       aY  U R                   R                  5       < SSR                  U R                   Vs/ s H  o"R                  5       PM     sn5      < S3$ U R                   R                  R                  (       a_  U R                  R                  nUS:  a"  X0R                   R                  R                  -  nU R                   R                  5       < S	U< 3$ U R                  R                  (       d  U R                  R                  (       a;  U R                  U R                   R                  :X  a  [!        U R"                  S
5        g SnXR                   R                  5       U R                  R                  5       4-  $ s  snf )Nz__Pyx_PyList_GET_ITEM(%s, %s)z__Pyx_PyTuple_GET_ITEM(%s, %s)z5((unsigned char)(__Pyx_PyByteArray_AsString(%s)[%s]))z$unexpected base type in indexing: %s<,>r   .fzInvalid use of pointer slicez(%s[%s]))r|  r   r   r   r    rv  r  r  r^  rQ  r}  r}  r   rC  r0  ru  r   r   )r[   
index_codeparamr}  s       rU   r  IndexNode.calculate_result_code  s   99>>i^DD yy~~*<
:-=
>1T
UDtyy~~UUuYY^^((		  "dFWFWXFWU668FWXY[ [ YY^^%%JJ..Eqy,,,#yy//1599		  DII$6$6DII<Wdhh >?#JYY--/1B1B1DEEE Ys   Ic                    U R                   R                  R                  (       Ga:  U R                  R                  [        L n[        UR                  R                  S   5      =(       af    U R                  R                  =(       aI    [        U R                   R                  [        5      =(       a    U R                   R                  S:  (       + n[        UR                  R                  S   5      nU R                  (       + nSU R                  R                  5       U R                  R                  =(       a    S=(       d    SU R                  R                  X#XE4-  $ g)Nr?  r   rM  z, %s, %d, %s, %d, %d, %d, %dr,   r&  )r}  r   rD  r|  r   rf  r   rq   rB  rO  r   r   r   r  rQ  to_py_function)r[   r   is_listr?  rM  has_gils         rU   extra_index_paramsIndexNode.extra_index_params  s   ::??!!!iinn	1GT%%00>? :((//:

 : :C@ 933q8: 
 t//::=IJK///G1((??A((//5A:((77[	5; ; ; rW   c                    U R                   (       d  g U R                  R                  nS nS nU R                  R                  (       Ga
  SnU R                  R                  R
                  (       a3  U[        L a  SnOU[        L a  SnOSn[        R                  " SS5      nGOU[        L a  Sn[        R                  " SS5      nGOU[        L a8  U R                  R                  [        L a  S	n[        R                  " SS5      nGOeS
nUR                  R                  [        R                  " SS5      5        [        R                  " SS5      nGOU R                  R                   (       aL  U[        L aC  U R                  R                  R
                  (       d   eSnSn[        R                  " SS5      nOU["        L a`  U R                  R                  R
                  (       d   eU R                  R
                  (       d   eSnSn[        R                  " SS5      nOJUR$                  (       a  U R&                  (       d(   SU R                  < SU< SU R(                  < S35       eUb  UR                  R                  U5        U R                  R                  R
                  (       a  U R                  R+                  5       nOU R                  R-                  5       nUR$                  (       a  U R&                  (       a  [/        XR(                  U R+                  5       < SU R                  R+                  5       < SU R                  R+                  5       < S3U R                  R                  (       a  U R+                  5       OS U R0                  U R2                  5        OUS:X  a  SOSU-  nUR5                  U R+                  5       < SW< SU R                  R-                  5       < SU< U R7                  U5      < SUR9                  XpR+                  5       -  U R(                  5      < 3
5        U R                  R                  (       a  U R;                  U5        g g )Nr.  __Pyx_GetItemInt_List__Pyx_GetItemInt_Tuple__Pyx_GetItemInt
GetItemIntr  __Pyx_PyDict_GetItemDictGetItem__Pyx_PyObject_Dict_GetItem__Pyx_PyObject_GetItemObjectGetItem__Pyx_GetItemInt_Unicodez(Py_UCS4)-1GetItemIntUnicoder  __Pyx_GetItemInt_ByteArrayz-1GetItemIntByteArrayzunexpected type z and base type z for indexing (r9  r  [z];!%sz	%%s == %sr  r  r=  )r  r|  r   rv   r}  rD  r   r   r	   r   r   r   r   r   r   r   r  r    r  r   r   r  r   r   r   r  r   r  r   r  )r[   r   r1  r  error_valuerr  r  error_checks           rU   r  IndexNode.generate_result_code  s)   ||IINN	99    Kzz%%	)6H*,7H1H1==lL^_	)5H#.#:#:=J\#]L.0TZZ__5T<H#.#:#:=J\#]L7H$$55*66|EWXZ#.#:#:?L^#_LYY&&9+D::??))))1H'K&223FXL.(::??))))99####3HK&223H/ZL((T-A-A0		9dhh0 05 #--l;::??!!**,J--/J!!d&:&:#D(("&++-1A1A1C"&**"3"3"57!%!6!6D$$d&;&;	= $/&#8%kK>WKJJKKMII'')++D1&&{[[]'BDHHMOP 99    & !rW   c                    U R                   R                  R                  (       a  U R                  R                  [        L a3  UR
                  R                  [        R                  " SS5      5        SnO2UR
                  R                  [        R                  " SS5      5        SnU R                   R                  5       nO<U R                   R                  5       nU R                  R                  [        L a  SnOSnUR                  UR                  U< S	U R                  R                  5       < S
U< S
U< U R                  U5      < S3	U R                  5      5        g )NSetItemIntByteArrayr  __Pyx_SetItemInt_ByteArray
SetItemIntr  __Pyx_SetItemIntr  PyObject_SetItemr  r  r9  )r}  r   rD  r|  r    r   r   r   r   r  r   r   r   r  r  r   )r[   
value_coder   rr  r  s        rU   generate_setitem_codeIndexNode.generate_setitem_code0  s   ::??!!yy~~/  11++,A?SU7  11++L:LMO-**,J--/Jyy~~*+ .

4))		##%''-/ HH 	rW   c           
         U R                  U5        U R                  R                  (       a"  U R                  UR	                  5       U5        GOU R
                  R                  [        L a$  U R                  X!5      nU R                  Xb5        GOmU R
                  R                  R                  (       Ga  U R                  (       Ga   U R                  S:X  a  U(       al  U(       ae  U R                  U:w  aU  [        X R                  U R                  U R                  5       UR                  5       U R                  XPR                  5        O[        X R                  U R                  5       < SUR                  5       < S3U R                  R                  (       a  U R                  5       OS U R                  U R                  5        O5UR!                  U R                  5       < SUR                  5       < S35        U R#                  U5        U R%                  U5        UR'                  U5        UR)                  U5        g )Nr   r  r  )r  r   rv   r  r   r|  r    _check_byte_valuer  r   r   r   r   r  r  r   r   r  r  r  r  )r[   r   r   r  r   r   r  s          rU   r  "IndexNode.generate_assignment_codeQ  s   --d399  &&s}}=YY^^~-//:J&&z8YY^^(((T-A-A-AdFZFZ^aFa$T=Q=QUd=d /tXXtyyKKM3::<1E1E#%:%:< (hh"&++->%)YY%:%:DKKM(($*?*?A
 JJ"kkmSZZ\:< 	++D1%""4(trW   c                    UR                   R                  (       d   [        UR                   5      5       eUR                  5       nUR	                  5       (       a@  SUR
                  s=::  a  S:  a   U$   Sn[        UR                  SUR
                  -  SS9  OUR                   [        R                  :g  nU R                  (       Gd!  / nUR                  (       d  UR                   R                  (       a  UR                  SU-  5        UR                  (       dR  UR                  5       (       a=  UR                   [        R                  [        R                  [        R                   4;   d  UR                  SU-  5        U(       aa  UR#                  S	S
R%                  U5      -  5        UR#                  SUR'                  U R                  5      -  5        UR#                  S5        U(       a  SU-  nU$ )Nr      Tz9value outside of range(0, 256) when assigning to byte: %sr,   r   z%s < 0z%s > 255if (unlikely(%s)) {z || zFPyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)"); %sr   z((unsigned char)%s))r   rD  r  r  r   r   r   r   r   r-  r   r   rO  r  r  r   c_schar_typer   r  r   )r[   r   r   r  
needs_cast
conditionss         rU   r  IndexNode._check_byte_valuer  s   xx.SXX.ZZ\
""$$C''-#-!! .JCGG2474G4GH
 Z%<%<<JzzzJ~~!!(Z"78''))chh"//1G1G"//;1 /1 !!*z"9:

06;;z3JJK

<OODHH-./ 

3.;JrW   c                    U R                  U5        U R                  R                  R                  (       aM  SnU R                  R	                  5       nUR
                  R                  [        R                  " SS5      5        O<U R                  R                  5       nU R                  R                  [        L a  SnOSnUR                  UR                  U< SU R                  R                  5       < SU< U R                  U5      < S3U R                  5      5        U R!                  U5        U R#                  U5        g )	N__Pyx_DelItemInt
DelItemIntr  PyDict_DelItemPyObject_DelItemr  r  r9  )r  r}  r   rD  r  r   r   r   r   r   r|  r   r   r  r  r   r  r  )r[   r   r  rr  r  s        rU   r   IndexNode.generate_deletion_code  s    --d3::??!!)H**,J--''6HIK --/Jyy~~*+-

4))		##%''-	/
 HH 	 	++D1%rW   )r|  r   r   r   r   r}  r  r  r  r   ro  rB  rw  r   r^  )FFTTr  r  )&r^   r_   r`   ra   r   r^  r  r  r8  rD  r  r  rP  r  r  ro  r   rV  r`  r8  rC  rD  rE  rF  rG  rA  rQ  r]  r\  r@  r  r  r  r  r  r  r  rb   rY   rW   rU   r~  r~  Y  s      HLLNU-L
*AFTXtD HM26FP8t0,p$3 jZ
YIv +KF:$G'RB INGKB"H&rW   r~  c                      ^  \ rS rSrSrSS/rSrSrSrS r	SS	 jr
S
 rS rS rS rS rS rS rS rSS jrSS jrS rU 4S jrSrU =r$ )rt  i  z
Indexing of buffers and memoryviews. This node is created during type
analysis from IndexNode and replaces it.

Attributes:
    base - base node being indexed
    indices - list of indexing expressions
r|  rg  TFrY   c                 $    U R                  USS9  g NFr6  r\  r   s     rU   r`  $BufferIndexNode.analyse_target_types  s    3.rW   c                 X   U R                   R                  (       dG  [        U R                   R                  5      (       d#  [	        U R
                  S5        [        U l        U $ U(       d  U R                   R                  R                  R                  (       d  [	        U R
                  S5        OQSU l	        U R                   R                  R                  (       a%  SU R                   R                  R                  l	        SU l        U R                  X5        U R                  U5        U $ )zb
Analyse types for buffer indexing only. Overridden by memoryview
indexing and slicing subclasses
zCan only index buffer variableszWriting to readonly bufferTrN  )r|  r   r>   r   r   r   r3   r   writabler=  r  
buffer_auxnone_error_messageanalyse_buffer_indexrQ  r{  s      rU   rV  BufferIndexNode.analyse_types  s     yy  )H)H$((=>"DIK99??''00dhh <='+$99>>++AEDIIOO..>"J!!#/##C(rW   c                 N   [        U R                  R                  5      (       aV  U R                   Vs/ s H  o3UR                  4PM     nn[	        [        U R                  R                  U5      5      U l        OEU R                  R                  U5      U l        U R                  R                  R                  U l        U R                  R                  U l        U(       a?  U R                  R                  (       d  U R                  R                   (       a  SU l
        g g g s  snf r  )r>   r|  r   rg  rJ   rD   rj  rA  buffer_typerv   r  )r[   ry   r7  idxindex_with_type_lists        rU   r  $BufferIndexNode.analyse_buffer_index  s    499>>**?C||#L|#((O| #L#$9$))..J^$_`DI		2237DI		,,DI99>>		--1J1JDL 2K7 $Ms   D"c                     g)zS
Called by IndexNode when this node is assigned to,
with the rhs of the assignment
NrY   r[   r   s     rU   analyse_assignment"BufferIndexNode.analyse_assignment  s    rW   c                     UR                   S   (       a  U R                  R                  5       (       d  g U R                  R                  U R                  5      U l        g )Nrz  )rq   r|  r  r  r  r   s     rU   rQ  &BufferIndexNode.wrap_in_nonecheck_node  s?    ~~k*$))2G2G2I2III//0G0GH	rW   c                     U R                   (       d  U R                  (       a>  U R                  R                  (       a"  [	        U R
                  S5        [        U l        g g g )Nz2Cannot access buffer with object dtype without gil)r  r  r   rv   r   r   r3   r   s     rU   r  BufferIndexNode.nogil_check  s@      D$9$9yy$$dhh TU&	 % %:rW   c                      SU R                   -  $ Nr  )buffer_ptr_coderZ   s    rU   r  %BufferIndexNode.calculate_result_code  s    ----rW   c                     U R                   nU R                   R                  (       a  UR                  nUR                  R	                  U5      $ rO   )r|  is_nonecheckr  r   	get_entryr  s     rU   buffer_entryBufferIndexNode.buffer_entry  s6    yy99!!88Dyy""4((rW   c                 8   UR                   R                  [        R                  " UR                  UR                  R
                  (       a  [        R                  O[        R                  5      SS9nUR                  U< SUR                  5       < S35        U$ )NFr  r  r  )
r  r  r   rh  r   rO  c_ssize_t_typec_size_t_typer   r  )r[   r   ivarrets       rU   get_index_in_temp!BufferIndexNode.get_index_in_temp  sq    nn****		-1YY-=-=
)):C[C[] 	 + 
 	

dkkm45
rW   c                    U R                   (       aa  U R                  (       d  U R                  (       a?  UR                  R                  S   (       a!  [        U R                  SUR                  5        U R                   Vs/ s H  o R                  X5      PM     sn=U l	        nSSK
Jn  U R                  5       nUR                  R                  (       a  UR                  R                  nOUR                   S   nXTR#                  UU R                   Vs/ s H  o"R                  R$                  PM     snUUR                  R                  U R                  UUU R                   S94$ s  snf s  snf )z(
ndarray[1, 2, 3] and memslice[1, 2, 3]
rM  z(Use boundscheck(False) for faster accessr,   r  negative_indices)r   index_signedsindex_cnamesrq   r   r   r  r  )r  r  r  r   rq   r.   r   rg  r  index_tempsr&  r  r  r   r  r  buffer_defaultsput_buffer_lookup_coderO  )r[   r   r  r  r  r  r  s          rU   buffer_lookup_code"BufferIndexNode.buffer_lookup_code  s3      $$(=(=##..}=$TXX/Y[_[k[kl Y]XdXd)eXdPT*@*@*KXd)ee; 	((*&&+00AA%556HI::8<E99++E$''22t-!22 ; 4 4 	4 *f Fs   E)E.c                     U R                  U5        U R                  X5        U R                  U5        U R                  U5        UR	                  U5        UR                  U5        g rO   )r  generate_buffer_setitem_coder  r  r  r  r[   r   r   r  s       rU   r  (BufferIndexNode.generate_assignment_code*  sT    --d3))#4++D1%""4(trW   c           	         U R                   R                  n[        U5      (       Ga  [        UR                  5      (       a  UR                  R                  [        [        U R                   R                  5      5      SS9nUR                  SU-  5        UR                  SU< SU< SU R                   R                  5       < S35        UR                  U< [        U R                  5      < SU< S	UR                  5       < S
35        UR                  R                  U5        g U R                  U5      u  pgU R                  R                  R                   (       a  UR                  R                  UR"                  SS9nUR%                  5       n	UR                  U< SU< S
35        UR'                  SU-  U R                  R                  5        UR                  SU	< SU< S35        UR                  SU< SU< S	U	< S
35        UR)                  SU-  U R                  R                  5        UR                  R                  U5        g UR                  SU< SU< S	UR%                  5       < S
35        g )NFr  __Pyx_call_destructor(%s);r  r  r  r  r4  z= r  r  z*%sz__Pyx_INCREF(z); __Pyx_XDECREF(*r  r   )r|  r   r>   r<   r  r  rJ   rF   r   r&  rC   rg  r  r  r  rA  rv   buf_ptr_typer  r  r  )
r[   r   r   opr1  ro  r  ptrexprptrr   s
             rU   r  ,BufferIndexNode.generate_buffer_setitem_code2  s   IINN	9%%*CCHH*M*M....{<		;W/Xej.kC JJ3c9:JJS$))BZBZB\]^JJ%dll3""$	& '
 NN'', !% 7 7 =!!-- ....|/H/H:? / ACzz|HJJS'23US[$*:*:*@*@AJJ#  JJR:;eck4+;+;+A+ABNN'', JJSZZ\BCrW   c                 X   [        U R                  R                  5      (       aq  U R                  5       nUR	                  SU-  5        UR	                  SU< SU< SU R                  R                  5       < [        U R                  5      < S35        g U R                  U5      u  o0l	        U R                  R                  (       ab  U R                  5       nUR	                  U< SU R                  < S35        UR	                  SU< S	U< S
35        UR	                  SU-  5        g g )Nr  r  r  r  r  z = (PyObject *) *r  r8  z == NULL)) z = Py_None;z__Pyx_INCREF((PyObject*)%s);)r>   r|  r   r  r   r&  rC   rg  r  r  rv   )r[   r   resr  s       rU   r  $BufferIndexNode.generate_result_code\  s    499>>**++-CJJ3c9:JJ		((*%dll3	5 6
 -1-D-DT-J**99   ++-CJJ38L8LMNJJCMNJJ5;< !rW   c                    > U R                    H  nUR                  R                  U5        M      SU l         [        TU ]  U5        g rX  )r  r  r  rQ   r  )r[   r   temprT   s      rU   r  "BufferIndexNode.free_subexpr_tempsq  s:    $$DNN''- %"4(rW   )r|  r  r  r  r  r  r   r=  r  r  )r&  )r^   r_   r`   ra   r  r   r  r=  r  r`  rV  r  r  rQ  r  r  r  r  r  r  r  r  r  rb   rc   rd   s   @rU   rt  rt    sv     	"H O K/0
 I
'.)4:(DT=*) )rW   rt  c                   8    \ rS rSrSrSrS
S jrS rS rS r	Sr
g	)rq  ix  TFc                 ,   SSK Jn  [        U5      U l        U R                  nUR                  X@R                  R                  R                  5      u  pTnU(       db  SU l	        U R                  R                  (       d  U R                  R                  (       a%  SU R                  R                  R                  l	        U(       + =(       a,    [        U5      U R                  R                  R                  :H  U l        / n[        R                   n/ n	[        U5      [        U5      -
  U R                  R                  R                  :  aZ  ["        U l        [%        X@R                  R                  R                     R&                  SU R                  R                  -  5        U $ Sn
[)        U5       GH  u  pUR+                  U5      nUR,                  (       a+  SU l        U	R1                  U5        UR1                  S5        MS  U R                  R                  R2                  U
   u  pU
S-  n
UR4                  (       a  SU l        UR6                  R,                  (       a  UR1                  X45        OUR1                  US45        S HO  n[9        X5      nUR,                  (       a  M!  UR;                  X5      n[=        XU5        U	R1                  U5        MQ     GM.  UR                  R>                  (       d  UR                  R@                  (       ab  UR                  R@                  (       a  [C        UR&                  S	U5        SU l"        UR;                  X5      nXU'   U	R1                  U5        GM  ["        U l        [%        UR&                  S
UR                  -  5        U s  $    U RD                  =(       a    U R.                  (       + U l"        Xl        X@l#        URH                  U l$        U RK                  XU5      nURM                  U5        U$ )Nr,   r'  Tz&Too many indices specified for type %sr   )directstridedr
  rk  z/Index should be typed for more efficient accessz/Invalid index for memoryview specified, type %s)'r&  r(  rB   is_pythran_moderg  ro  r|  r   r.  r=  r   r  r   r   memslice_indexr   r  r3   r   r   r  rV  rB  r  r  r  r   r   r  r8  setattrrD  rv   r.   r  original_indicesr   analyse_operationrQ  )r[   ry   r7  r(  rg  ru  rv  r  r0  new_indicesaxis_idxr  r}  accesspackingattrr   r   s                     rU   rV  !MemoryViewIndexNode.analyse_types}  s    -c2,,(2(>(>w		H[H[(\%g#'D yy  DII$:$:7;		$$4#*{Rs7|tyy~~?R?R/R11
w<#g,&)<)<<"DI'))..--.22:TYY^^KMK!'*HA'',E}}(,%""5)12"iinn11(;OFMH~~(,%::%%KK 12KK 34 6D#E0E === %
 @U3#**51 6 ""ejj&<&<::))$UYY0acfg(,%
8"
""5) '	eii!RUZU_U_!_`O +T !% 5 5 Sd>S>S:S" !(YY
%%cD9##C(rW   c                 6    SU l         U R                  X5        U $ )Nz"Cannot index None memoryview slice)r  r  )r[   ry   r7  r  s       rU   r  %MemoryViewIndexNode.analyse_operation  s    "F!!#/rW   c                     U R                   R                  (       a4  U nUR                  (       d  UR                  (       a  SUl        SUl        ggg)z
Support broadcasting for slice assignment.
E.g.
    m_2d[...] = m_1d  # or,
    m_1d[...] = m_2d  # if the leading dimension has extent 1
TN)r   r   r?  r[   r   lhss      rU   analyse_broadcast_operation/MemoryViewIndexNode.analyse_broadcast_operation  sB     99''C''3+C+C+/(+/( ,D (rW   c                 \    U R                  U5      nU(       a  UR                  Ul        U$ U $ rO   )r  r@  r  s      rU   $analyse_as_memview_scalar_assignment8MemoryViewIndexNode.analyse_as_memview_scalar_assignment  s-    %%c*-0-K-KC*JrW   )
rg  r  r  r  r  r   r  r  r   r=  Nr  )r^   r_   r`   ra   r  r  rV  r  r  r  rb   rY   rW   rU   rq  rq  x  s$    M^
0rW   rq  c                   \    \ rS rSrSrSrSrSrSrS r	S r
S rS rS rS	 rS
 rSS jrSrg)rp  i  TFc                     [        S U R                   5       5      U l        U R                  (       a  U R                  R                  U l        gg)z@Slicing operations needing no evaluation, i.e. m[...] or m[:, :]c              3      #    U  Hh  nUR                   =(       aP    UR                  R                  =(       a3    UR                  R                  =(       a    UR                  R                  v   Mj     g 7frO   )r   r   rB  r   r   ri  s     rU   rk   <MemoryViewSliceNode.analyse_ellipsis_noop.<locals>.<genexpr>  sK      $'% NN`u{{22`uzz7I7I`ejjN`N``%   A0A2N)rr  rg  is_ellipsis_noopr|  r   r{  s      rU   analyse_ellipsis_noop)MemoryViewSliceNode.analyse_ellipsis_noop  sA     !$ $'$' !'   		DI !rW   c                 J   SSK Jn  U(       d  SU l        SU l        OSU l        U R	                  X5        U R
                  (       a  U $ S U l        SU l        SU l        UR                  U R                  U5      (       d  [        U l        U $ [        R                  " U R                  R                  R                   U5      U l        U R                  R#                  5       (       d?  U R                  R%                  5       (       d   U R                  R'                  U5      U l        U $ )Nr,   r'  Tz&Cannot assign to None memoryview slicez"Cannot slice None memoryview slice)r&  r(  r?  r  r&  r%  r}  r  r  validate_axesr   r3   r   r   r  r|  rA  r  r  r  )r[   ry   r7  r  r(  s        rU   r  %MemoryViewSliceNode.analyse_operation  s     (,D%&ND#&JD#""30  K
#''$77"DIK22499>>3G3GN			##%%)A)A)C)C		005DIrW   c                 .   UR                   R                  (       de  U R                   R                  R                  UR                   5      (       d  UR                   R                  (       a  [        U R                  U 5      $ [        U R                  U 5      $ rO   )r   r   rA  rK  rv   MemoryCopyScalarr   MemoryCopySlicer  s     rU   r  &MemoryViewSliceNode.analyse_assignment  s[    xx**		//99$$#DHHd33"488T22rW   c                 P   U(       d  gU R                   SS nUSS n[        U R                   5       H  u  p4UR                  (       ax  UR                  R                  (       a[  UR
                  R                  (       a@  UR                  R                  (       a%  US   X#'   UR                  S5        U(       d  Us  $ M    gUR                  R                  (       a  M    g   U(       a>  [        U5      [        U5      -   U R                  R                  R                  :  a  gX!-  nU$ )zReturn a new list of indices/slices with 'indices' merged into the current ones
according to slicing rules.
Is used to implement "view[i][j]" => "view[i, j]".
Return None if the indices cannot (easily) be merged at compile time.
Nr   )r  r  r   r   rB  r   r   r   r   rD  r   r|  r.  )r[   rg  r  r  r  s        rU   rn  "MemoryViewSliceNode.merged_indices  s     ++A.!*d334DAzz77??qvv~~!&&..%,QZKNKKN"** #  VV]]] 5 ;#g,.1D1DD"KrW   c                     U R                   (       a;  U R                  R                  5       =(       d    U R                  R                  5       $ U R                  5       $ rO   )r%  r|  r  r  rZ   s    rU   r  MemoryViewSliceNode.is_simple=  s?      99&&(FDII,D,D,FF""$$rW   c                 6    U R                   R                  5       $ )z3This is called in case this is a no-op slicing node)r|  r  rZ   s    rU   r  )MemoryViewSliceNode.calculate_result_codeD  s    yy!!rW   c           
         U R                   (       a  g U R                  5       nU R                  (       + nSn[        U R                  5      nU R
                   H  nUR                  (       a  SnUR                  R                  (       d  [        U5      Ul        UR                  R                  (       d  [        U5      Ul
        UR                  R                  (       d  [        U5      Ul        M  M  [        U5        M     [        U5      (       a   eUR                  XR
                  U R                  5       U R                  X4UR                   R"                  S9  g )NFT)r  ru  rq   )r%  r  r  iterrg  r  r   r   rB  nextr   r   r  generate_buffer_slice_coder  r   r   rq   )r[   r   r  r  ru  r  r}  s          rU   r  (MemoryViewSliceNode.generate_result_codeH  s      ((*,,, $,,**E~~"{{**"&r(EKzz))!%bEJzz))!%bEJ * R + 88|//''		''22 	0 	4rW   c                    U R                   (       a  U R                  U5        OU R                  U5        U R                  (       a  U R	                  X5        OU R                  X5        U R                   (       a  U R                  U5        OU R                  U5        UR                  U5        UR                  U5        g rO   )	r%  r  r  is_memview_scalar_assignment+generate_memoryviewslice_assign_scalar_code&generate_memoryviewslice_setslice_coder  r  r  r  s       rU   r  ,MemoryViewSliceNode.generate_assignment_coded  s      11$7))$/,,<<SG77B  //5''-""4(trW   )r|  r}  r%  r?  r  r  r   r  Nr  )r^   r_   r`   ra   r  r%  r;  r  r?  r&  r  r  rn  r  r  r  r  rb   rY   rW   rU   rp  rp    sJ     #(  '63>%"48rW   rp  c                   <   ^  \ rS rSrSrS/rU 4S jrSS jrSrU =r	$ )MemoryCopyNodeix  zY
Wraps a memoryview slice for slice assignment.

    dst: destination mememoryview slice
dstc                 R   > [         TU ]  U5        X l        UR                  U l        g rO   )rQ   r  rA  r   r[   r   rA  rT   s      rU   r  MemoryCopyNode.__init__  s     HH	rW   c                    U R                   R                  U5        U R                  X5        U R                   R                  U5        U R                   R	                  U5        UR                  U5        UR	                  U5        g rO   )rA  r  _generate_assignment_coder  r  r  s       rU   r  'MemoryCopyNode.generate_assignment_code  s`    ))$/&&s1''-D!""4(trW   )rA  r   r  )
r^   r_   r`   ra   r  r   r  r  rb   rc   rd   s   @rU   r@  r@  x  s      wH
 rW   r@  c                   &    \ rS rSrSrSrSrS rSrg)r-  i  z
Copy the contents of slice src to slice dst. Does not support indirect
slices.

    memslice1[...] = memslice2
    memslice1[:] = memslice2
T__pyx_memoryview_copy_contentsc                    U R                   nUR                  R                  UR                  5        UR                  R                  UR                  5        UR	                  UR                  SU R                  UR                  5       UR                  5       UR                  R                  UR                  R                  UR                  R                  R                  4-  UR                  5      5        g )Nz%s(%s, %s, %d, %d, %d))rA  r   assert_direct_dimsr   r   r  copy_slice_cnamer  r.  rA  rv   )r[   rQ  r   rA  s       rU   rF  )MemoryCopySlice._generate_assignment_code  s    hh##CGG,##CGG,

4))$(=(=(+

cjjl(+sxx}}(+(B(B(D D GG 	rW   rY   N)	r^   r_   r`   ra   r  r@  rL  rF  rb   rY   rW   rU   r-  r-    s     "&7rW   r-  c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )r,  i  z
Assign a scalar to a slice. dst must be simple, scalar will be assigned
to a correct type and not just something assignable.

    memslice1[...] = 0.0
    memslice1[:] = 0.0
c                 Z   > [         TU ]  X5        UR                  R                  U l        g rO   )rQ   r  r   rA  rC  s      rU   r  MemoryCopyScalar.__init__  s    "HHNN	rW   c                 z   SSK Jn  U R                  R                  R	                  U R                  R
                  5        U R                  R                  R                  nUR                  S5      nU R                  R                  R                  S5      nUR                  5         UR                  U< SUR                  5       < S35        U R                  R                  5       (       d  U R                  R                  5       (       a  U R                  R                  5       nO3UR                  U< SU R                  R                  5       < S35        SnSnU R                  R                  n	U	 Ho  n
[        U
[        5      (       d  M  U
R                   R"                  (       a8  U
R$                  R"                  (       a  U
R&                  R"                  (       a  Mm  S	nMq     UR)                  U R                  R                  UU R                  R                  R*                  UUS
9nUR-                  5       nUR.                  (       a  UR                  SU-  5        UR                  SU< SU< S35        UR.                  (       a  UR                  S5        UR1                  5         UR3                  5         g )Nr,   r'  r&  z __pyx_temp_scalar = r  z __pyx_temp_slice = __pyx_temp_sliceFT)force_stridedzPy_DECREF(*(PyObject **) %s);z*((z *) z) = __pyx_temp_scalar;zPy_INCREF(__pyx_temp_scalar);)r&  r(  rA  r   rK  r   rA  r   begin_blockr   r  r  r  r  r   r  r   rB  r   r   
slice_iterr.  start_loopsrv   	end_loops	end_block)r[   scalarr   r(  rA  	type_decl
slice_decldst_temprS  rg  r  slice_iter_objps                rU   rF  *MemoryCopyScalar._generate_assignment_code  s    ((6##**2.	XX]]33B7


9fmmoNO88""$$(:(:(<(<xx(HJJj$((//BSTU)H((++C#y))3993D3D36883C3C36883C3C3C $	  $..txx}}h/3xx}}/A/A4=J / L &&(JJ6:;

)QGHJJ67  "rW   r+  )	r^   r_   r`   ra   r  r  rF  rb   rc   rd   s   @rU   r,  r,    s    #' 'rW   r,  c                     ^  \ rS rSr/ SQrSrSrS rS S jrS r	S r
S	 rS
 rS rS!S jrS rU 4S jrSr\R&                  " SSSS0S9r\R&                  " SSSS0S9rU 4S jrS r  S"S jrS#S jrS rS rS rS rS rSrU =r $ )$SliceIndexNodei  )r|  r   r   sliceFNc                    U R                   R                  U5      nUR                  (       d  UR                  (       a  [        $ UR
                  (       a  [        $ U[        [        [        [        [        4;   a  U$ UR                  (       d  UR                  (       a!  [        R                  " UR                  S 5      $ [        $ rO   )r|  r   r  r  r   r  r   r    r   r   r0  ru  r   r  r1  r   ra  s      rU   r   SliceIndexNode.infer_type  s    II((-	)"8"8'':~|$j2 2!3!3**9+>+>EErW   c                     U[         LaO  U R                  (       a>  U R                  R                  5       (       a  XR                  R                  -  nO[         nU R                  R                  U5      $ rO   )r=  r   r   r   r|  r  r  s     rU   r  "SliceIndexNode.inferable_item_node  sO    &4::zz--//333&yy,,U33rW   c                     U R                   R                  nU(       a2  UR                  (       a  gU[        [        [
        [        [        4;   a  g[        R                  U 5      $ r  )
r|  r   r  r   r    r   r   r   r   r  r  s     rU   r  SliceIndexNode.may_be_none  sJ    IINN	""Z&
4 4##D))rW   c                     U R                   c  S nOU R                   R                  nU R                  c  S nOU R                  R                  nU R                  R                  X U l        g rO   )r   r   r   r|  )r[   r   r   s      rU   r8  (SliceIndexNode.calculate_constant_result  sU    ::EJJ..E99D99,,D#yy88DrW   c                 >   U R                   R                  U5      nU R                  c  SnOU R                  R                  U5      nU R                  c  S nOU R                  R                  U5      n X#U $ ! [         a  nU R                  U5         S nAg S nAff = fr   )r|  rD  r   r   r  rI  )r[   rC  r|  r   r   rH  s         rU   rD  !SliceIndexNode.compile_time_value  s    yy++D1::EJJ11$7E99D99//5D	-d## 	-))!,,	-s   3A7 7
BBBc                     g rO   rY   r   s     rU   rP  )SliceIndexNode.analyse_target_declaration(  r   rW   c                 r    U R                  USS9nUR                  R                  (       a  [        Ul        U$ r  )rV  r   rv   r   rX  s      rU   r`  #SliceIndexNode.analyse_target_types+  s0    !!#u!599  &DIrW   c                 D
  ^ U R                   R                  U5      U l         U R                   R                  R                  (       dJ  U R                   R                  R                  (       d%  U R                   R                  R
                  (       a  [        U R                  5      n[        U R                  U R                  =(       d    UU R                  =(       d    UUS9n[        U R                  X@R                   S9nUR                  XU(       + SS9$ U R                  (       a   U R                  R                  U5      U l	        U R                  (       a   U R                  R                  U5      U l
        UR                  S   (       d   [        U R                  U R                  5        U R                   R                  nUR                  (       aV  U(       dO  U R                  (       d  U R                  (       d  X`l        O[         R"                  " UR$                  5      U l        OUR&                  (       d  UR(                  (       a  [+        U5      U l        OUR,                  (       a  [.        U l        OzUR0                  (       a  X`l        ObUR                  (       a&  [         R"                  " UR$                  5      U l        O+U R                   R3                  U5      U l         [4        U l        UR6                  (       a&  X`l        U R                   R9                  S5      U l         U R                  [4        L a  U R                  (       a  U R                  R:                  (       a  U R                  (       a  U R                  R:                  (       a  [        U R                  5      n[        U R                  [<        R>                  " U R                  =(       d    U5      [<        R>                  " U R                  =(       d    U5      US9R                  U5      U l         O[         RB                  mU4S jnU R                  (       a_  U R                  R                  RD                  (       a  U" U R                  SU5      U l	        U R                  RG                  TU5      U l	        U R                  (       a_  U R                  R                  RD                  (       a  U" U R                  S	U5      U l
        U R                  RG                  TU5      U l
        S
U l$        U $ )Nrk  )r}  r|  Frd  r?  rN  c                 z  > SSK JnJn  U" U 5      n[        U R                  [        U R                  TUUR                  5       (       a  [        U5      O[        S9UR                  TU5      [        U R                  US[        U R                  5      S9R                  U5      S9R                  U5      nU" XV5      $ )Nr,   EvalWithTempExprNodeResultRefNoder  is)operand1r   operand2)true_val	false_valtest)	UtilNodesrt  ru  CondExprNoder   r  r  r   r=  r8  PrimaryCmpNoderC  rV  analyse_result_type)r   default_valuery   rt  ru  node_refnew_exprc_ints          rU   
allow_none0SliceIndexNode.analyse_types.<locals>.allow_nonep  s    J(.'HH$"+>K>S>S>U>UM(:[i	 '00<'!)!%!)$((!3	
 $mC( &%c*   ,H??rW   r}  r#  r,   )%r|  rV  r   r  r>   r   rC  r   r  r   r   r~  r8  rq   r   ru  r   ra  r1  r  r  r   r  r   r0  rk  r   r_  r  r   r&   deepcopyrb  r  rv   r8  r  )	r[   ry   r7  	none_noder}  r   r1  r  r  s	           @rU   rV  SliceIndexNode.analyse_types2  s1   II++C0	99>>##tyy~~'E'EIjIj *Idhh$(JJ$;)#'99#9	#,.E #4885yyIJ::'k" ; $ $ ::11#6DJ99		//4DI~~l+"4::tyy9IINN	g::dii%	&//	0C0CD	  I$;$;(-DI''$DI!I #++I,?,?@DI		44S9DI&DI$$!I		334\]DI99&JJ$**"7"7dii&:&:$TXX.	&HH--

(?i@tyy'=I>"	
  -$ 
 00E@. zz::??..!+DJJS!ADJ!ZZ11%=
yy99>>-- *4996F LDI II//s;	rW   c                    U R                   R                  U5      nU(       a  U R                  (       d  U R                  (       d  SSKJn  UR                  UR                  UR                  R                  5      5        [        U R                  5      n[        U R                  UUUS9n[        R                  " X#R                  X/5      5      $ g )Nr,   r'  rk  )r|  r  r   r   r&  r(  r   r  r\  r  rC  r   r  r   r  r  )r[   ry   r1  r(  r  
slice_nodes         rU   r  SliceIndexNode.analyse_as_type  s    II--c2	::dii($$44AA
 %TXX.	&HH#""	
 "5588lKM MrW   c                 D   > UR                   U l         [        TU ]	  U5      $ rO   )r   rQ   r  r[   ry   rT   s     rU   r  SliceIndexNode.nogil_check  s    YY
w"3''rW   zSlicing Python objectSliceObjectr  r  Get)r\  Setc                 r  > U R                   R                  R                  (       d%  U R                   R                  R                  (       ak  U[        [
        [        4;   aV  U[        L aG  UR                  S   (       d3  [        U R                  SU R                   R                  < SU< S35        Xl        UR                  (       ab  U R                   R                  R                  (       a=  U R                  (       d,  U R                  (       d  U R                   R                  X5      $ [        TU ]5  X5      $ )Nrf   /default encoding required for conversion from '' to 'rZ  )r|  r   r  r  r   r    r   rq   r   r   ru  r   r   r8  rQ   r  s      rU   r8  SliceIndexNode.coerce_to  s    YY^^%%)E)E^\ JJL(@S1TdhhYY^^X/0 !I!8!8::diiyy**899w //rW   c                    U R                   R                  (       d$  [        U R                  SU R                   -  5        g U R                  R                   nU R                  5       nU R                  5       nU R                  5       nUR                  (       a  U R                  R                  [        R                  5      nU R                   [        L a  SnO:U R                   [        L a  SnO$U R                   R                  R                  5       nU R                   c  SU SU SU S3nGOUSU SU SU S	U S
U S3nGOAUR"                  (       a  U R                  R                  [        R$                  5      nUR&                  R)                  [*        R,                  " SS5      5        U R                   c  SU SU S3nGOSU SU S	U S
U S3	nGOU[        L aX  U R                  R                  5       nUR&                  R)                  [*        R,                  " SS5      5        SU S	U S	U S3nGOMU R                   [.        L a  U R                  R1                  5       nU R3                  5       u  pppn[5        UR&                  R6                  S   5      nUR&                  R)                  U R8                  5        SU S	U S	U S	U S	U S	U S	U	S S	U
S S	US S3nOU R                  R1                  5       nU[:        L a3  UR&                  R)                  [<        R,                  " SS5      5        SnO>U[>        L a3  UR&                  R)                  [<        R,                  " SS5      5        SnOSnU SU S	U S	U S3nURA                  U SU SURC                  X0R                  5       35        U RE                  U5        g )Nz,Slicing is not currently supported for '%s'.	ByteArrayUnicoder  z_FromString(r  r9  z_FromStringAndSize(r   - pyunicode_from_unicoder  z__Pyx_PyUnicode_FromUnicode(z%__Pyx_PyUnicode_FromUnicodeAndLength(PyUnicode_Substringz__Pyx_PyUnicode_Substring(r?  z__Pyx_PyObject_GetSlice(r  SliceTupleAndListr  __Pyx_PyList_GetSlice__Pyx_PyTuple_GetSlicePySequence_GetSlicer  r  rh  )#r   rv   r   r   r|  r  
start_code	stop_coder  r  r   rt   r    r   rw   titler   r  c_const_py_unicode_ptr_typer   r   r   r   r   r   get_slice_configrf  rq   get_slice_utility_coder   r	   r   r   r   r  )r[   r   r1  r  r  r  base_result	type_namecallhas_c_start
has_c_stopc_startc_stoppy_startpy_stoppy_slicer?  cfuncs                     rU   r  #SliceIndexNode.generate_result_code  s   yy$$$((@499LNIINN	__&
NN$	))--j.N.NOKyyN* (	l*%	 IINN002	yy !)LSTUV!),?}CPZ|[]^g]hhklvkwwxy''))--j.T.TUK--''(@/RTyy 5k]#j\QRS>{m3zlZ\]f\ggjkujvvwx,&))**,K--''(=OQ/}Bzl"YKWXYDYY.())--/KTXTiTiTkQKWhd..99,GHJ--d.I.IJ.-r'"VHBxj7)2hZWYq/Jq>Jq>DD ))--/KI%  11&223FHZ[]/j(  11&223FHZ[]0-WAk]"ZL9+QGD

fXSb)@)@)R(STUT"rW   c                 V   U R                  U5        U R                  R                  (       a  UR                  R	                  U R
                  5        U R                  5       u  pgppnUR                  U R                  SU R                  R                  5       UR                  5       XXUXg[        UR                  R                  S   5      4
-  5        GOU R                  (       a  U R                  5       OSnUR                  R                  (       a(  UR                  R                   nU R#                  X.5        OU R%                  5       < SU< 3nUR                  R	                  [&        R(                  " SS5      5        UR+                  SU R                  R-                  5       < SU< S	UR-                  5       < S
U R                  R-                  5       < SU< S35        U R/                  U5        U R1                  U5        UR3                  U5        UR5                  U5        g )Nz?__Pyx_PyObject_SetSlice(%s, %s, %s, %s, %s, %s, %s, %d, %d, %d)r?  r}  r  IncludeStringHr  	memcpy(&(r  ]), r  z[0]) * (r  )r  r   rv   r   r   set_slice_utility_coder  r  r   r|  r   rf  rq   r   r  ru  rC  generate_slice_guard_coder  r   r   r   r  r  r  r  r  )r[   r   r   r  r   r   r  r  r  r  r  r  r  start_offsetarray_lengths                  rU   r  'SliceIndexNode.generate_assignment_code
  s   --d399  --d.I.IJTXTiTiTkQKWh!!$((QII'')MMOx))44\BCUE EF 15

4??,Lxx  "xx}}..tB,0NN,<lK--k.E.EFVXg.hiJJ		  "L

		  "L  	++D1%""4(trW   c                 *   U R                   R                  R                  (       d$  [        U R                  SU R                  -  5        g U R                  U5        UR                  R                  U R                  5        U R                  5       u  p4pVpxn	UR                  U R                  SU R                   R                  5       XVXxU	X4[        UR                  R                  S   5      4	-  5        U R                  U5        U R                  U5        g )Nz=Deleting slices is only supported for Python types, not '%s'.z;__Pyx_PyObject_DelSlice(%s, %s, %s, %s, %s, %s, %d, %d, %d)r?  )r|  r   rv   r   r   r  r   r   r  r  r  r   rf  rq   r  r  )
r[   r   r  r  r  r  r  r  r  r  s
             rU   r  %SliceIndexNode.generate_deletion_code,  s    yy~~))$((QTXT]T]]_--d3))$*E*EF(,(=(=(?	&'	HdhhI		##%8T%%00>?MA A	B 	++D1%rW   c                 h   Su  pnU R                   (       ad  U R                   R                  R                  (       + nU(       a  U R                   R                  5       nOSU R                   R	                  5       -  nSu  pEnU R
                  (       ad  U R
                  R                  R                  (       + nU(       a  U R
                  R                  5       nOSU R
                  R	                  5       -  nU R                  =(       a    SU R                  R	                  5       -  =(       d    SnXX%X6U4$ )N)Fr}  r.  &%sr.  )r   r   rv   r  r   r   rb  )r[   r  r  r  r  r  r  r  s           rU   r  SliceIndexNode.get_slice_config?  s    );&h::"jjoo999K**++- 4::#7#7#99&8#
G99!YY^^777J))+$))"5"5"77::@%$***>*>*@"@JF8- 	-rW   c                    U R                   R                  R                  (       d  g U R                   R                  R                  n [	        U5      =pCS =pVU R                  (       a?  U R                  R                  5       n [	        U5      nUS:  a  Uc  SX64-  nOX6-  nOUnS nU R                  (       a  U R                  R                  5       n [	        U5      nUS:  a-  Uc&  SU R                   R                  R                  U4-  nOXT-  n[        U[        5      (       a  X5-  nO
U< SU< S3nS nS nSn [	        U5      n	[        U[        5      nU(       a#  US:  a  U	S:  a  [        U R                  S5        OMU(       a*  Uc'  Uc$  X:w  a  [        U R                  SU< SU< 35        OUb  Uc  UnS	U< S
U< S3nOUb  UnOUnU(       a  UR                  SU< SU< S35        U R                  (       a  UR                  5         UR                  SU< SU< S35        U R                  (       a  UR                  5         UR                  UR!                  U R                  5      5        UR                  S5        g g ! [
         a    S n GNCf = f! [
         a     GNf = f! [
         a     GNf = f! [
         a    S n	 GNuf = f)Nr   z%s + %dz - (r9  FzAssignment to empty slice.z.Assignment to slice of wrong length, expected r[  r  z)-(if (unlikely((z) != ())) {zPyErr_Format(PyExc_ValueError, "Assignment to slice of wrong length, expected %" CYTHON_FORMAT_SSIZE_T "d, got %" CYTHON_FORMAT_SSIZE_T "d", (Py_ssize_t)(z), (Py_ssize_t)(r  r   )r|  r   ru  rC  r   r   r   r  r   r   r   r   r   r   r   r   r   )
r[   r   target_size
slice_sizetotal_lengthr   r   runtime_checkcompile_time_checkint_target_sizes
             rU   r  (SliceIndexNode.generate_slice_guard_codeR  s   yy~~&&YY^^((
	 (+J7L 9999##%D4y!8#+%.*1C%C
"*
!%J ::JJ%%'EE
19#+ )TYY^^-@-@%,H H-j#..'J0:E!BJ "	=!+.O ",J!<*q."dhh <=EMdl,dhh +!/ 0|!+/7M M&MJJ-UVzz##%JJ  01
 zz,,.JJttxx01JJsO }  	 L	    "    	#"O	#sI   J $J A$J, <J= JJ
J)(J),
J:9J:=KKc                 Z    U R                   (       a  U R                   R                  5       $ g)Nr}  )r   r  rZ   s    rU   r  SliceIndexNode.start_code  s    ::::$$&&rW   c                     U R                   (       a  U R                   R                  5       $ U R                  R                  R                  (       a   U R                  R                  R
                  $ g)Nr#  )r   r  r|  r   ru  rC  rZ   s    rU   r  SliceIndexNode.stop_code  sD    9999##%%YY^^$$99>>&&&#rW   c                     g)Nz<unused>rY   rZ   s    rU   r  $SliceIndexNode.calculate_result_code  s    rW   )r|  r   r  r   rb  r   r   r   r  r  r  r  )!r^   r_   r`   ra   r   r   rb  r   r  r  r8  rD  rP  r`  rV  r  r  r@  r	   loadr  r  r8  r  r  r  r  r  r  r  r  rb   rc   rd   s   @rU   ra  ra    s     2HEE4*	E-^@,( *K/44)He3DF 044)He3DF0E#N INGK D&&-&Pd$ rW   ra  c                   P    \ rS rSr/ SQrSr\rSrS r	S r
S rS rS	rS
 rS rSrg)r  i  rk  Tr,   c                     [        U R                  R                  U R                  R                  U R                  R                  5      U l        g rO   rb  r   r   r   r   rZ   s    rU   r8  #SliceNode.calculate_constant_result  6    $JJ&&II%%II%% 'rW   c                    U R                   R                  U5      nU R                  R                  U5      nU R                  R                  U5      n [	        X#U5      $ ! [
         a  nU R                  U5         S nAg S nAff = frO   r   rD  r   r   rb  r  rI  r[   rC  r   r   r   rH  s         rU   rD  SliceNode.compile_time_value  q    

--d3yy++D1yy++D1	-d++ 	-))!,,	-   A 
B)A??Bc                     gr  rY   rZ   s    rU   r  SliceNode.may_be_none  r   rW   c                    U R                   R                  U5      nU R                  R                  U5      nU R                  R                  U5      nUR	                  U5      U l         UR	                  U5      U l        UR	                  U5      U l        U R                   R
                  (       aD  U R                  R
                  (       a)  U R                  R
                  (       a  SU l        SU l        U $ r  )r   rV  r   r   rk  r   r  )r[   ry   r   r   r   s        rU   rV  SliceNode.analyse_types  s    

((-yy&&s+yy&&s+--c2
++C0	++C0	::  TYY%9%9dii>R>R"DO DLrW   z Constructing Python slice objectc                     U R                   $ rO   r  rZ   s    rU   r  SliceNode.calculate_result_code  r  rW   c                    U R                   (       af  [        U R                  U 45      nUR                  SUS9U l        UR                  U R                  5      nUc  g UR                  U R                  5        UR                  U R                  5       < SU R                  R                  5       < SU R                  R                  5       < SU R                  R                  5       < SUR                  U R                  5       U R                  5      < 3	5        U R                  U5        U R                   (       a  U R!                  U5        g g )Nrb  	dedup_keyz = PySlice_New(r  r=  )r   r   r   r  rw  r  r  r   r   r  r   r   r   r   r   r  r  )r[   r   r  s      rU   r  SliceNode.generate_result_code  s    ??&tyy4':I#00I0ND33D4D4DED|MM$((#



$$&		##%		##%''txx@B	C 	T"??!!$' rW   )r   r   r  rw  r   r   r   N)r^   r_   r`   ra   r   r   r!   r   r  r8  rD  r  rV  r@  r  r  rb   rY   rW   rU   r  r    s=     )HHDG'-
 5K (rW   r  c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)rs  i  r   c                     [        U R                  R                  U R                  R                  U R                  R                  5      U l        g rO   r  rZ   s    rU   r8  &SliceIntNode.calculate_constant_result  r  rW   c                    U R                   R                  U5      nU R                  R                  U5      nU R                  R                  U5      n [	        X#U5      $ ! [
         a  nU R                  U5         S nAg S nAff = frO   r  r  s         rU   rD  SliceIntNode.compile_time_value  r  r  c                     gr  rY   rZ   s    rU   r  SliceIntNode.may_be_none  r   rW   c                    U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  R                  U5      U l        U R                   R                  (       d   U R                   R                  U5      U l         U R                  R                  (       d   U R                  R                  U5      U l        U R                  R                  (       d   U R                  R                  U5      U l        U R                   R                  (       aD  U R                  R                  (       a)  U R                  R                  (       a  SU l        SU l        U $ r  )r   rV  r   r   rB  r  r   r  r   s     rU   rV  SliceIntNode.analyse_types  s    ZZ--c2
II++C0	II++C0	zz!!33C8DJyy  		11#6DIyy  		11#6DI::  TYY%9%9dii>R>R"DO DLrW   c                     g rO   rY   rZ   s    rU   r  "SliceIntNode.calculate_result_code(  r   rW   c                     U R                   U R                  U R                  4 H4  n[        U[        5      (       d  M  UR
                  R                  5         M6     g rO   )r   r   r   r   r  r  r  )r[   r   r  s      rU   r  !SliceIntNode.generate_result_code+  s9    DIIdii/A!Y'' 0rW   )r   r   r  r   r   r   N)r^   r_   r`   ra   r  r8  rD  r  rV  r  r  rb   rY   rW   rU   rs  rs    s'     G'-"rW   rs  c                   V    \ rS rSrSrS rS rS rS rSS jr	S r
S	 rS
 rS rSrSrg)CallNodei1  Nc                    U R                   nUR                  U5      n[        U[        5      (       a   [        R
                  " UR                  5      $ U[        L a  UR                  (       aW  UR                  R                  U5      nUR                  (       a+  [        R                  " XBR                  5      nU[        La  U$ [        USS 5      nUb  UR                  =(       d    UnUR                   (       a  UR"                  nUR$                  (       a  [        U R                   SS 5      (       a  ['        U S5      (       a  U R(                   Vs/ s H  owR                  U5      PM     nnU R                   R*                  R-                  X5      n	U	(       a5  U	R                  nUR                   (       a  UR"                  nUR.                  $ UR.                  $ U[0        L a  UR2                  (       a  UR*                  (       a  UR*                  R                  (       a  UR*                  R                  nUR4                  (       a  U$ UR                  (       aX  UR*                  R6                  n
U
S:X  a  [        R8                  $ U
S:X  a  [        R:                  $ U
[        R<                  ;   a  U$ U R                   R?                  U5      nU(       a$  UR@                  (       d  URB                  (       a  U$ [        $ s  snf )Nr   r   r   rf  )"rr  r   r   rB  r   ra  rG  r   r  ro  r_  r   "find_return_type_of_builtin_methodrp  r  r   r0  r1  rv  r[  r   r   best_function_matchr  r   r   r^  rw   r  ru  #types_that_construct_their_instancer  is_struct_or_unionr  )r[   ry   rr  rX  method_obj_typeresult_typer   r  	arg_types
func_entry	func_names              rU   r   CallNode.infer_type6  s.   =='',	h,,&&x':':;;&$$"*,,"9"9#">"22")"L"L_^p^p"qK".8**Hgt4E !JJ3)	!++I!!t}}gt44v9N9N<@IIFIS^^C0I	F!]]00DDST
 *I ''$-$7$7	$000((()#HNNx~~7J7J&nn1100&& 00 ( 3 3I G+)777"f,)555"g&Q&QQ**MM11#6	)66):P:P1 Gs   K?c                 8    U R                   R                  U5      $ rO   )rr  ro  r   s     rU   ro  CallNode.type_dependenciesf  s     }}..s33rW   c                     gr  rY   rZ   s    rU   r  CallNode.is_simplek  s    
 rW   c                    U R                   b  U R                   $ U R                  R                  nU[        L a  U R                  R                  (       al  U R                  R
                  nUR                  R                  (       a  gUR                  R                  (       a  UR                  [        R                  ;   a  g[        R                  U 5      $ r  )may_return_nonerr  r   r   r   r   r^  r_  rw   r   r  r   r  )r[   rX  r   s      rU   r  CallNode.may_be_noner  s    +'''MM&&		!dmm&;&;MM''Ezz++

**JJ'"M"MM##D))rW   c                 P   Uc  UR                   nU[        R                  L a  UR                  (       a  UR                  (       a  UR                  R
                  (       a  UR                  R                  [        R                  ;   a  UR                  R                  S:X  a+  [        R                  U l         [        R                  U l
        O7[        R                  UR                  R                     U l         [        U l
        SU l        g UR                  (       a?  UR                  (       a.  UR                  R                   U l         [        U l
        SU l        g UR                  (       a  UR                   R                   R"                  (       a  UR                   R                   n[        R$                  " X1R&                  5      nU[        L U l        UR(                  (       a  X@l         g UR*                  (       a  UR*                  U l         g [        U l         g [        U l         g )Nr   F)r   r   r   r   r   rk  rw   r  r   r  r2  builtin_typesr   r	  r  r  ro  r_  r  rp  rv   r  )r[   rr  rX  r  r  s        rU   set_py_result_typeCallNode.set_py_result_type  sb    I)))  ))##w'R'RR~~""g-&44	$.$<$<!#11(..2E2EF	$2!#(D ("5"5 !++00DI .D#(D ""x||'8'8'H'H&ll//O!DD_VhVhiK#..#@D &&'	,,'77	*	&DIrW   c                 f   U R                   R                  U5      nU(       a  UR                  (       a  U R                  5       u  p4/ n[	        X2R
                  R                  5       HE  u  pgUR                  [        UR                  [        UR                  UR                  S9US95        MG     U(       a  XTR                  -  n[        U R                  US9nUR                  U5      R                  X!5      nU$ U(       Ga*  UR                   (       Ga  U R"                   Vs/ s H  ofR                  U5      PM     snU l        UR
                  R%                  S5      n	U	(       dD  ['        U R                   R                  SU R                   R                  -  5        [(        U l        U $ [-        U R                   R                  U	R*                  5      U l         XR                   l        U R                   R1                  UR3                  5       5        U R5                  U5        X l        U $ ggs  snf )z$
Returns a replacement node or None
r  keyr   key_value_pairsz<init>z'no constructor found for C++  type '%s'N)rr  r  r  explicit_args_kwdsr  rx  r  r  DictItemNoder   r4  rw   r	  DictNoderV  r8  r  r   ry  r   r3   r   r  r   r  rQ  analyse_c_function_call)
r[   ry   r   r   r`  r  r  memberr   rH  s
             rU   analyse_as_type_constructor$CallNode.analyse_as_type_constructor  s    }},,S1D++002JDE"4)?)?@\#''{377RXR]R]7^fijk  A---DHHe<D%%c*44T?DKd'''<@IIGIS++C0IGDI**++H5Kdmm'')RUYUbUbUgUg)gh&	,T]]->->@P@PQDM"-MMMM##D$?$?$AB((-IK (TGs   #H.c                 l    U R                   R                  nUR                  (       a  UR                  nU$ rO   )rr  r   r0  r1  r[   rX  s     rU   function_typeCallNode.function_type  s-     MM&&	!++IrW   c                 .    U R                   R                  $ rO   )r   r  rZ   s    rU   r   CallNode.is_lvalue  s    yy%%%rW   c                     U R                  5       nUR                  (       a  U R                  5         g UR                  (       d$  [	        USS5      (       d  U R                  5         g g g )Nr   F)r	  rv   r  r<  r  )r[   ry   rX  s      rU   r  CallNode.nogil_check  sM    &&(	  NN##GIw,N,NNN -O#rW   zCalling gil-requiring function)r   rr  r	  r2  r   rO   )r^   r_   r`   ra   r	  r   ro  r  r  r		  r	  r	  r   r  r@  rb   rY   rW   rU   r  r  1  s?     O.`4
*"'H<& 3KrW   r  c                      ^  \ rS rSr/ SQrSrSrSrSrSr	Sr
SrSrS rS r\S 5       rS rS	 rS
 rS rS rS rS rU 4S jrS rSrU =r$ )rz  i  )r[   coerced_selfrr  r   r  NFc                     U R                   R                  U5      nU R                   Vs/ s H  o3R                  U5      PM     nn U" U6 $ s  snf ! [         a  nU R	                  U5         S nAg S nAff = frO   )rr  rD  r   r  rI  )r[   rC  rr  r  r   rH  s         rU   rD  !SimpleCallNode.compile_time_value  so    ==33D98<		B	&&t,	B	-T?" C  	-))!,,	-s   AA 
A6A11A6c                    U R                   R                  (       Ga  U R                   R                  R                  (       a  U R                   R                  n[
        R                  " U5      (       d  [
        R                  " U5      (       a  UR                  nU R                   R                  R                  nU(       a  UR                  O[        UR                  5      R                  n[        R                  " XB5      (       a0  U R                   Vs/ s H  oUR                  PM     nnU" U6 U l        g g g g g s  snf rO   )rr  r  ro  r   r   r%   	isbuiltinismethodr^   r   rw   __self__r   is_safe_compile_time_methodr   )r[   methodr   object_typeobject_type_namer  r   s          rU   r8  (SimpleCallNode.calculate_constant_result  s    ==%%%$--*;*;*F*F]]22F  ((G,<,<V,D,D$oo"mm//447B;#3#3V__H]HfHf 667GUU;?99E9C//9DE+14=D( V -E +G% Fs   D;c                     UR                   nUR                  UR                  5      nU(       d   SU< SUR                  < 35       e[	        XR                  XUR
                  S9nU " XU/S9nU$ )NzGetter not found in scope rG  )rw   r   r   rq  )rx  rz  rw   r  r7  r   )rS   r   ro  r   property_scopegetter_entryrr  r   s           rU   for_cpropertySimpleCallNode.for_cproperty  sc     %11%**=j>SaSiSijj|CjjK\K\]36rW   c                 H   U R                   R                  5       nUS:X  a  [        U R                  5      S:w  a!  [	        U R                  R
                  S5        g U R                  S   R                  U5      nU(       d$  [	        U R                  S   R
                  S5        g [        R                  " U5      $ US:X  ac  [        U R                  5      S:w  a   [	        U R                  R
                  S5        U R                  S   R                  U5      nUR                  $ g )Nr  r,   zonly one type allowed.r   zUnknown typetypeof)rr  r  r   r   r   r   r  r   ra  rV  r   )r[   ry   r  r   operands        rU   r  SimpleCallNode.analyse_as_type  s    }}0029499~"diimm%=>yy|33C8$))A,**N;%..t44X499~"diimm%=>iil005G<<	 rW   c                     U R                   S 4$ rO   rY  rZ   s    rU   r	  !SimpleCallNode.explicit_args_kwds  s    yy$rW   c                    U R                   (       a  U $ SU l         U R                  U5      =nb  U$ SU R                  l        U R                  R	                  U5      U l        U R                  nUR
                  (       aW  UR                  (       aF  UR                  R                  (       a+  UR                  U l	        [        U R                  5      Ul        U R                  5       nSU l        [        U5      (       a  UR                  (       a  [        U5      (       a  Sn[!        U R"                  U R$                  S9U l        U R&                  R	                  U5      U l        U R&                  R$                   H  nU[)        U5      -  nM     [+        U5      U l        U R                  (       ai  UR-                  [/        U5      5        [0        R3                  U [5        U5      U R&                  [7        [9        X0R&                  R$                  5      5      S9$ UR:                  (       as  [!        U R"                  U R$                  S9U l        U R&                  R	                  U5      R=                  U5      U l        S U l        U R?                  X45        SU l         U $ U R$                   Vs/ s H  ofR	                  U5      PM     snU l        U RC                  U5        URD                  S:X  a  SU l         U $ s  snf )NTr,   FrY  )function_cnamer  r   r   )#analysedr	  rr  r?  rV  r  r   
is_cmethodro  r[   r  r	  is_numpy_call_with_exprsrB   r  rG   r^  r   r   r  rE   rf  add_include_filerH   NumPyMethodCallNoder  rI   rJ   r?   rv   rk  r		  r  r	  r   )r[   ry   as_type_constructorrr  rX  has_pythran_argsr  s          rU   rV  SimpleCallNode.analyse_types"  sG   ==K#'#C#CC#HHU&&"#33C8==  X^^8Q8Q !DI$TYY/HL&&(	(-%3H$?$?/99#&txx		BDN!^^99#>DN~~** $Ec$JJ  +,01A,BD)((  !>x!HI&00.x8.. !28^^=P=P!QR	 1   ""&txx		BDN!^^99#>QQRUVDNDI##H8DL  =AIIGIS++C0IGDI((-((C/# Hs   *K6c           
         U R                   R                  nU[        L a  [        U l        g UR                  (       aj  UR                  (       aY  U R
                  (       a;  U R
                  R                  R                  (       a  [        U R                  S5        U R                  nO8U R
                  (       a  U R
                  /U R                  -   nOU R                  nUR                  (       aP  U R                   R                  R                  R                  S5      nUc  [        R                  U l        SU l        g O[        U R                   S5      (       a  U R                   R                   nOYU R                   R"                  (       a<  U R                   R$                  (       a!  U R                   R                  R                   nOS nU(       a   UR'                  UU Vs/ s H  oUR                  PM     snSU Vs/ s H  oUR)                  5       PM     snS9nSUl        UR                  (       d  X`R                   l        UR                  U R                   l        U R1                  5       nOYS nU R1                  5       nUR                  (       d6  [        U R                  SU-  5        [        R                  U l        SU l        g [3        UR                  5      n	XR4                  -
  n
[3        U5      nUR4                  (       a  X:w  a  SU l        SU l        U(       Ga  UR:                  (       Ga  UR                  (       Ga  UR                  (       Gd  UR                  S	   nUS	   nUR<                  (       a  U R
                  (       aV  U R
                  R?                  S
RA                  [3        URB                  5      S::  a  SOS5      SURB                  /S9U l        O0UR?                  SURB                  UR                  RB                  /S9nU R
                  (       a_  URD                  (       a  [G        U R
                  5      nO[I        U R
                  5      nURK                  UR                  U5      =oPl&        OnUR                  RN                  (       aS  URK                  UR                  U5      nUR                  RN                  (       a  [Q        U[R        5      (       a  SUl*        XSS	'   Sn[W        [Y        X5      5       H  nUR                  U   nUR                  nX>   RK                  X5      nUR<                  (       a  UR?                  S5      nUR[                  5       (       a	  US	:  a  SnOoUR                  R\                  (       aT  UR^                  (       dC  US	:X  a  U R
                  b  O/URa                  5       (       a  OUS	:  a  SnURc                  U5      nXSU'   M     [W        X5       H  nX>   nUR                  R\                  (       a~  UR                  [d        L a  [        Rf                  nOUR                  Ri                  5       nUc'  [        U R                  US-
     R                  S5        OURK                  UU5      =X>'   nUR[                  5       (       d  M  US	:  d  M  SnM     U(       a  [W        US-
  5       H  nUS	:X  a  U R
                  b  M  X>   nURa                  5       (       a  M3  UR                  R                  (       a  MP  UR^                  (       a  UR                  R\                  (       a  M~  US	:  d  US:X  d  M  U R
                  c  M  [k        UR                  SS	5          O   X0R                  S S & [Q        U R                   [l        5      (       a0  [        Rn                  " U R                   Rp                  5      U l        OURr                  U l        U R                   Rt                  (       d  U R                   Rv                  (       aF  U R                   R                   nU(       a)  URx                  (       d  URz                  (       a  SU l        U R                  R\                  (       a  [|        U l?        SU l        OHUR                  c  UR                  (       a  SU l        O"U R                  R                  (       a  SU l        U R8                  (       aJ  U R                  R                  (       a/  [        R                  " U R                  R                  5      U l        URr                  R                  (       a?  SUR                  U R                   R                  URr                  R                  5      l        UR                  S:X  a6  [        U5      (       a&  UR                  [        R                  " SS5      5        UR                  S   U lN        g s  snf s  snf ! [        R*                   aN  n[-        U5      nU(       a  [        U R                  U5        [        R                  U l        SU l         S nAg S nAff = f)Nz4Cannot call a static method on an instance variable.z
operator()r  r   T)fail_if_emptyarg_is_lvalue_arrayzCalling non-function type '%s'r,   r   )'NoneType' object has no attribute '%{}s'   .30r&  PyExc_AttributeError)r   r  z@descriptor '%s' requires a '%s' object but received a 'NoneType'r  FzGcannot pass None into a C function argument that is declared 'not None'z5Python object cannot be passed as a varargs parameterTArgument evaluation order in C function call is undefined and may not be as expectedr   rW  r  overflowcheck)Orr  r   r3   rv  is_static_methodr[   r^  r   r   r   r  rx  ry  r   rw  r[  r   r  r  r  r   NoMatchFoundr~   r4  r	  r   optional_arg_counthas_optional_argsr  r:	  not_noner  r  rw   accept_builtin_subtypesCMethodSelfCloneNoder  r8  r 	  r_  r   rH  exact_builtin_typerangeminr  rv   r   rw  r  r   r1   default_coerced_ctyper   rB  ra  rG  r  r   r  r  utility_code_definitionr   r2  r   r   r   r  CFakeReferenceTyper-  r}  declare_tuple_typer~  r   r   r   r   rq   rJ	  )r[   ry   rX  r   overloaded_entryr  r   excrh  	max_nargsexpected_nargsactual_nargs
formal_argsome_args_in_tempsr  formal_type	arg_ctyper  s                     rU   r	  &SimpleCallNode.analyse_c_function_callR  s   MM&&	
""DI!!i&@&@yyTYY^^== dhh VW99DYYII;*D99D!!#}}1177>>|L'&11	#,  ( T]]G,,#}}22]]''DMM,H,H#}}1177#(<<)-.#XX."&DH(IDSD(I	 =  EJ))&+#!&DMM**,IE**,I))dhh @9 LM&11	#,  	'	"%A%AA4y''N,J%&D"DL U%%%)...A[A[A["*Jq'C""99 $		 ; ;CJJTWX]XbXbTcgiTi5oqr4%*ZZL !< !2DI //Z%*ZZ1E1E$F 0 HC yy55.tyy9C#DII.C*---
*MM'00mmJOOS988++
30O0O-2C*G #s934A"*J$//K'##K5C""++]_!!##q5)-&%%cii6dii3--// 1u-1*,,S1CG7 5< y/A'Cxx##88|+ * : :I # > > @I$$))AaC.,,QS %(MM)S$AADGc!!##A%)" 0   <>*6dii3g++--XX**YY388#7#7  1uQ499+@)  BC  D) +, 		! dmm[11"++DMM,D,DEDI!--DI==  DMM$>$>,,Jz66*:\:\ 99   .DDL&&2i6O6ODLYY))DL <<DII22"55dii6M6MNDI  **_cC""4==#4#4i6K6K6V6VW\ $$+-i88$$[%<%<=UWg%hi ^^O<W /(I** c($((G,&11	#, s7   h #h
8h ?hh 
h i-Ai((i-c                 "    U R                  5       $ rO   )c_call_coderZ   s    rU   r  $SimpleCallNode.calculate_result_code"  s    !!rW   c                    U R                  5       nU R                  [        R                  L d  UR                  (       d  gUR
                  n/ n[        [        X R
                  5      5      n[        UR
                  5      nXQR                  -
  n[        U R
                  5      nUS U  H1  u  pU	R                  UR                  5      n
UR                  U
5        M3     UR                  (       aT  UR                  [        [        U R                  =(       d     U R                   R"                  R$                  5      5      5        UR                  (       a(  Xg:X  a  SnOSU R&                  -  nUR                  U5        U R
                  [        U5      S   H"  n	UR                  U	R)                  5       5        M$     U R                   R+                  5       < SSR-                  U5      < S3nU$ )Nr  r.  r  r  r  r9  )r	  r   r   r3   rv  r   r  r  r   rM	  r"  r  r  r~   r   wrapper_callrr  r   is_unbound_cmethodopt_arg_structr  r  r  )r[   rX  formal_argsarg_list_coder   r[	  r\	  r]	  r^	  
actual_argarg_codeoptional_argsr  s                rU   rd	  SimpleCallNode.c_call_code%  sv   &&(	99
---Y5K5KnnCYY/0	'	"%A%AA499~&*?N&;"J!44Z__EH  * '< ##  S):):)ddmm>Q>Q>d>d%e!fg''- & %(;(; ;  /))C$4$56J  !;!;!=> 7 "]]113TYY}5MNrW   c                 `    U R                  5       nUR                  b  UR                  S:X  a  gg)Nr   FT)r	  r   r   r	  s     rU   r)  #SimpleCallNode.is_c_result_requiredC  s/    &&(	$$,	0I0IS0PrW   c                   > U R                   nUR                  (       d  UR                  (       a%  UR                  R	                  UR
                  5        SnU R                  R                  =(       a    U R                  R                  nU R                  (       a  U(       a  UR                  5       U;   a  UR                  R                  [        R                  " SS5      5        UR                  SU R                  S   R                  5       < SU R                  S   R                  R!                  5       < SUR#                  U R$                  5      < S35        UR                  R&                  (       aY  [)        U R*                  R                  5      S	:  d6  U R*                  R                  (       a+  U R*                  R,                  (       a  [.        TU ]a  U5        g U R*                  R                  (       a  U R*                  R                  S   OS nU R2                  U R4                  X%4nU H  nUc  M  UR1                  U5        M     UR7                  U R$                  5        U R8                  (       d   eU R;                  U5        Uc  UR                  R                  [        R                  " S
S5      5        UR                  U R                  5       < SUR=                  5       < SUR?                  U R                  5       U R$                  5      < 35        OUR                  R                  [        R                  " SS5      5        UR                  U R                  5       < SUR=                  5       < SUR=                  5       < SUR?                  U R                  5       U R$                  5      < 35        U RA                  U5        U H*  nUc  M  URC                  U5        URE                  U5        M,     g )N)abslabs__Pyx_abs_longlongCommon
Overflow.cr8  r   z == __PYX_MIN(z))) {                PyErr_SetString(PyExc_OverflowError,                                "Trying to take the absolute value of the most negative integer is not defined."); z; }r,   PyObjectCallNoArgr  z = __Pyx_PyObject_CallNoArg(r=  PyObjectCallOneArgz = __Pyx_PyObject_CallOneArg(r  )#rr  r   r  r   use_entry_utility_coder   r   rD  rO  rJ	  r  r   r   r   r   r   rQ  r   r   rv   r   r  r   rQ   r  r[   r 	  r  r  r  r   r   r  r  r  )	r[   r   rr  abs_function_cnamesis_signed_intr  r   subexprrT   s	           rU   r  'SimpleCallNode.generate_evaluation_codeI  s   ==x4433HNNCC		((=TYY-=-=-HOO4EI\4\--k.E.EhP\.]^JJ !IIaL//1 IIaL--DDF OODHH57 8 }}((C0C0C,Dq,H##(A(AG,T2 )-(;(;dnn!!!$IIt00(@G"006   	dhh|||!!$';--k.E.E#%7/9 :JJKKM&&(++DKKM488DFG --k.E.E$&8/: ;JJKKM&&(MMO++DKKM488D	FG 	T"G"..t4""4(  rW   c                    U R                  5       nUR                  (       a  U R                  R                  5       nUR                  R                  [        R                  " SS5      5        UR                  U R                  5       < SU R                  R                  5       < SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        g UR                  (       Ga  UR                  R                   (       + nU R"                  (       GaG  [%        U R&                  5      n[%        UR&                  5      UR(                  -
  nUR                  R+                  UR,                  R.                  SS9U l        UR                  U R0                  < S[2        R4                  S	-   < S
[%        U R&                  5      U-
  < S35        [7        [9        UR&                  U R&                  5      5      nXvU  H^  u  pUR                  U R0                  < SUR;                  UR<                  5      < S
U	R?                  UR@                  5      < S35        M`     / n
U R@                  R                  (       a5  U RB                  (       a$  U
RE                  SU R                  5       -  5        GOFU R@                  RF                  (       aM  U RB                  (       d   eU
RE                  U R@                  RI                  U R                  5       5      5        GOURJ                  S:w  Ga  URL                  nURJ                  nUb  URN                  RQ                  U5      nURN                  RR                  (       ah  UR                  R                  [        R                  " SS5      5        U
RE                  SU R                  5        SU SU R                  5        S35        O$U
RE                  U R                  5        SU 35        U(       a  U(       a  U
(       d  [U        U R                  SS 5      n[V        RX                  " U R                  UR                  RZ                  U(       a  UR<                  OS U R@                  R\                  SU=(       a    UR^                  S9  UR                  R                  [        R                  " SS5      5        U
RE                  S5        OU
RE                  S5        U RB                  (       d  U
(       Gay  U Ra                  5       nU R                  5       (       a[  SU R                  5       -  nU RB                  (       a6  U R@                  R                  (       a  [c        [d        U R@                  U5      nOSnURJ                  S:X  aV  [g        XR                  U< U< S3U R@                  R                  (       a  U R                  5       OS URL                  U5        OPU
(       a,  URi                  SRk                  U
5      U R                  5      nOSnUR                  U< U< SU< 35        U R@                  R                  (       a&  U R                  5       (       a  U R                  U5        U R"                  (       a&  UR                  Rm                  U R0                  5        g g g )NrM  r  rN  r  z	, NULL); Tr  r   r#  r  r  r  r   r  r  zmemcmp(&, &r  z)) == 0z == r   )function_namevoid_returnis_callis_from_pxdr   r   r   r   z%s = r&  z && rh  )7r	  rv   r  r   r   r   r   r   r   r  rr  r   r   r  rv  r  	gil_ownedrN	  r   r   rM	  r  op_arg_structr1  ri	  r   pyrex_prefixr  r  opt_arg_cnamerw   r  r   r  r  r   error_conditionr   r   r  	cast_coder}  r  r   write_noexcept_performance_hintrx  r  defined_in_pxdrd	  r2   r   r   r   r  r  )r[   r   rX  rm	  r   r]	  r\	  r   r^	  rl	  
exc_checksexc_val	exc_checktyped_exc_valperf_hint_entryr   r  
goto_errors                     rU   r  #SimpleCallNode.generate_result_code  s   &&(	  ~~//1H--k.E.E 2/4 5JJKKMMM++-++DKKM488D	FG   &###000E%%%"499~!$Y^^!4y7S7S!S&*nn&B&B++55$ 'C 'H#

++++c1DII79 : C			:;.2,.O*JJJ //%33JOOD&00A C D /P
 Jyy$$!!%$++-"78--||#|!!$))";";DKKM"JK**c1#33%55	&$-$9$9$C$CG$LM ,,66((99+:Q:Q,o;? @"))HT[[]O3}oU^_c_j_j_l^mmt*uv"))T[[]O4*OP).5dmmWd.SO&FF $$..*>*>FUo.B.B[_,0II,=,=t-<-_A_A_	b
 ((99'334H.Y["))*FG"))*<=||z&&(;;==!DKKM1C||		(=(= '~tyy#FC,,3+D((sC<P=AYY=R=RDKKMX\,5,E,EuN "%)%7%7J8OQUQYQY%Z
%'
JJS#zBC99((T[[]]((.%%++D,?,?@ &O $rW   )r9	  r  r   r 	  r   rr  rN	  r;	  r  ri	  rJ	  rw  r2  r[   r   )r^   r_   r`   ra   r   r[   r 	  r  rg	  rN	  r   r9	  rJ	  rD  r8  r  r/	  r  r	  rV  r	  r  rd	  r)  r  r  rb   rc   rd   s   @rU   rz  rz    s     IHDLILEHM-9   ".`N=`"<7)rUA UArW   rz  c                   (    \ rS rSrS/rSrSrS rSrg)r=	  i  r  Tc                    UR                  U R                  5        U R                  U5        U R                  R                  b   eU R                  R
                  nU H  nUR                  U5        M     UR                  S5        UR                  SU R                  5       -  5        UR                  SU R                  5       < SU R                  5       < SU R                  < SSR                  S U 5       5      < S	3	5        g )
Nz.// function evaluation code for numpy functionr  r  r  r  z{}(r  c              3   @   #    U  H  oR                  5       v   M     g 7frO   )r&  )rh   r  s     rU   rk   ?NumPyMethodCallNode.generate_evaluation_code.<locals>.<genexpr>  s     7$Q&&(($   )};)r  r   r  r  r   r   r  r   r  r8	  r  )r[   r   r   r  s       rU   r  ,NumPyMethodCallNode.generate_evaluation_code  s    dhh!!$'~~))111~~""C((.  	

CD

/$++-?@

KKMKKMII7$77	9 	:rW   rY   N)	r^   r_   r`   ra   r   r  r	  r  rb   rY   rW   rU   r=	  r=	    s     }HGO:rW   r=	  c                      ^  \ rS rSr/ SQrSrSrSrSrSr	U 4S jr
S r\S 5       r\SS	 j5       r\S
 5       rS\4S jrS rS rS rS rS rSrU =r$ )PyMethodCallNodei  )rr  r  kwdictkwargs_key_value_pairsTFNc                 6  > [         TU ]  " U40 UD6  U R                  5       (       a"  SU l        U R                  R
                  U l        U R                  (       a?  U R                  R                  (       a#  U R                  R                  U l
        S U l        g g g r  )rQ   r  can_avoid_attribute_lookupuse_method_vectorcallrr  ro  function_objr	  r  r	  r	  )r[   r   kwrT   s      rU   r  PyMethodCallNode.__init__  sq    ##**,,)-D& $ 1 1D;;4;;66*.++*E*ED'DK 7;rW   c                     U R                   (       a   [        U R                   [        5      (       d  gU R                  nUR                  (       d  gUR
                  (       d  gUR                  (       a  g[        R                  U5      (       d  ggr  )	r	  r   r	  rr  r  
is_py_attris_special_lookupr	  attribute_is_likely_method)r[   rr  s     rU   r	  +PyMethodCallNode.can_avoid_attribute_lookup  sd     ;;z$++x@@==$$""%%::8DD rW   c                 v    U R                   nUR                  (       a  UR                  R                  (       a  ggr  )ro  r   r   r  )r  ro  s     rU   r	  +PyMethodCallNode.attribute_is_likely_method%  s$    hh;;39900rW   c                     [        U [        5      (       d  gU R                  (       a  gU R                  (       a  [	        U R
                  5      S:  a  g[	        U R
                  5      (       d  U=(       d    U(       + $ g)zf
Test whether the positional args given are compatible with
being translated into a PyMethodCallNode.
Fr,   T)r   r^  r   r   r   r   )r  
has_kwargshas_explicit_kwargss      rU   can_be_used_for_posargs(PyMethodCallNode.can_be_used_for_posargs,  sa     /955&&%%#o.B.B*Ca*G?''(( '8j.8rW   c                   ^ SnU R                   (       a:  U R                  (       a'  U R                  R                  R                  (       a  SnU$ U R                  (       al  U R                  nUR                  R                  (       a  SnU$ UR
                  (       a0  [        [        [        4m[        U4S jUR
                   5       5      nU$ )zW
Test whether the function passed is suitable to be translated
into a PyMethodCallNode
TFc              3      >#    U  H3  nUR                   =(       a    [        UR                   T5      (       + v   M5     g 7frO   )r   r   )rh   r  non_method_nodess     rU   rk   <PyMethodCallNode.can_be_used_for_function.<locals>.<genexpr>P  s3      &<&:
 NNW:jnnFV+W'WW&:s   ;>)
r  r   r   rv  r   cf_assignmentsPyCFunctionNode	ClassNodePy3ClassNoderr   )rr  may_be_a_methodr   r	  s      @rU   can_be_used_for_function)PyMethodCallNode.can_be_used_for_function>  s       ~~(.."5"5"B"B"'  NNEzz&&"'  %%$3Y#M "% &<&+&:&:&< #< rW   returnc                 B   U R                   (       a  U R                  R                  U5        UR                  U SU R                  R	                  5        S35        UR                  U[        5        UR                  U R                  R                  5      $ UR                  U S35        U R                  R                  U5        U R                  R                  5       (       a  U R                  R                  5       $ UR                  R                  [        SS9nU R                  R                  U5        UR                  U< SU R                  R	                  5       < S35        U R                  R                  U5        U R                  R!                  U5        U$ )Nr  r   = NULL;Tr  rh  )r	  r	  r  r   r   r  r   r  rr  rp  r  r  r  r  r  r  r  )r[   r   self_argrr  s       rU   generate_evaluate_function+PyMethodCallNode.generate_evaluate_functionU  s2   %%66t<JJ(3t'8'8'B'B'D&EQGHOOHn5++DMM,C,CDD

hZx()..t4 ==''))=='')) >>//4/P**40

(DMM,C,C,EFG,,T2  &rW   c                    U R                   (       a7  U R                  R                  U5        U R                  R                  U5        g U R                  R                  5       (       a7  U R                  R                  U5        U R                  R                  U5        g UR                  U[        5        UR                  R                  U5        g rO   )
r	  r	  r  r  rr  r  r  r   r  r  r[   r   rr  s      rU   generate_dispose_function*PyMethodCallNode.generate_dispose_functionl  s    %%44T:((.]]))++MM006MM$$T*!!(N;NN''1rW   c                 P   U R                   (       d  U R                  (       d  g U R                  R                  (       a%  U R	                  U R                  5      (       a  SOSnOU R                  R
                  (       a  U R                  R                  (       a  U R                  R                   H  nUR                  nU(       d  M  UR                  (       d  M+  UR                  R                  (       d  MH  UR                  R                  R                  (       d  Mo  U R	                  U5      (       d  M  Sn  O   SnOSnUR                  S5        UR                  SU< SU< S35        UR                  U SU S35        UR                  S	U S35        UR                  S
U S35        UR                  U[        5        UR                  S[        5        UR                  U[        S5        UR                  U S35        UR                  S5        UR                  S5        g )Nlikelyunlikelyz#if CYTHON_UNPACK_METHODSr  z(PyMethod_Check(r  z = PyMethod_GET_SELF(r  zassert(z2PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx__function = 0;r   r  )r	  unpackrr  r  r	  r   r   r   ro  r   rv   r   r  r   r  )r[   r   r	  space_for_selfarg_var
method_objlikely_methodr  r   s           rU   &generate_runtime_method_unpacking_code7PyMethodCallNode.generate_runtime_method_unpacking_codew  s   %%T[[==%%(,(G(G(V(VH\fM]]""t}}'='="mm44
"5U///EIINNNuyy~~GaGaGa66u==(0 5 !+&M 	

./

mZPQ

hZ4ZLCD

WXJb)*

G
|SUVW.1)>:J8IJ

+,E23

3

8rW   c                 r   UR                  U S[        U5       SUR                  X@R                  5       35        UR	                  U[
        5        [        U5       H  u  pVUR                  R                  [        R                  L =(       a    UR                  R                  5       (       + nUR                  U R                  SU(       a  SOS SUR                  R                  5        SUR                  R                  5        SU S[        R                    S[        U5      S	-    SUS
 S35        M     g )Nz# = __Pyx_MakeVectorcallBuilderKwds(r=  __Pyx_VectorcallBuilder_AddArgr&  _Checkr  r  r   r,   r  r9  )r   r   r   r   r  r   r  r	  r   r   r   r  r  r   r   r   callargs_cname)r[   r   r   r	  kwnames_tempr#  keyvalue
key_is_strs           rU   generate_keyvalue_args'PyMethodCallNode.generate_keyvalue_args  s   

n?DZ@[?\\_&&|XX>?A	
 	n5$%;<KA!**g.B.BBe8<<KcKcKeGeJ!!0zx0PPQ<<))+,B>>++-.b.(()3t9q=/Q%	 =rW   c                    U R                   (       a  U R                  (       a  SnSnO5SnSnO0U R                  (       a  SnSnOU R                  (       a  SnSnOSnS	nUR                  R	                  [
        R                  " US
5      5        U$ )N!PyObjectVectorCallMethodKwBuilder-__Pyx_Object_VectorcallMethod_CallFromBuilderPyObjectFastCallMethod__Pyx_PyObject_FastCallMethodPyObjectVectorCallKwBuilder'__Pyx_Object_Vectorcall_CallFromBuilderPyObjectFastCall__Pyx_PyObject_FastCallDict__Pyx_PyObject_FastCallr  )r	  r	  r	  r   r   r   r   )r[   r   rw   r  s       rU   select_utility_code$PyMethodCallNode.select_utility_code  s    %%**:G/7((0D=E[[%D1E%D-E))##D*<=	?rW   c                 <   UR                  U R                  5        U R                  U5        U R                  nU R                  nUR
                  R                  [        SS9nU R                  X5      nU R                  R                  nU R                  R                  b   eU H  nUR                  U5        M     U(       a  U H  nUR                  U5        M     OU(       a  UR                  U5        UR
                  R                  [        R                  SS9n	UR                  U	 SU R                   (       a  SOS S35        U R#                  UUU	US9  U R%                  U5      n
UR                  S	5        U(       a  S
R'                  S U 5       5      OSnU(       a  S[)        U5       S3OSnUR                  S[*        R,                   SU(       a  [)        U5      S-   OSS U SU S
U S3
5        SnU(       a1  UR
                  R                  [        SS9nU R/                  XX-5        OU(       a  UR1                  5       nUR                  U R1                  5        SU
 SU S
[*        R,                   SU	 S[)        U5      S-   S SU	 SU R                   (       a  SOU	 SU(       a  S
OS U S35        UR3                  U[        5        XI4 H  nUR
                  R5                  U5        M      U H%  nUR7                  U5        UR9                  U5        M'     U(       a]  U H%  nUR7                  U5        UR9                  U5        M'     UR;                  U[        5        UR
                  R5                  U5        O)U(       a"  UR7                  U5        UR9                  U5        U R=                  X5        UR                  UR?                  U R1                  5       U R                  5      5        U RA                  U5        UR                  S5        g )NTr  Fr  r}  1r  )r	  r	  r	  r  r  c              3   @   #    U  H  oR                  5       v   M     g 7frO   r   rh   r  s     rU   rk   <PyMethodCallNode.generate_evaluation_code.<locals>.<genexpr>  s     >#mmoor	  r.  z + ((CYTHON_VECTORCALL) ? z : 0)r&  
PyObject *r  r,   r7   r  ] = {r  r  r   z, (r|  z) | (z&*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)r  r   )!r  r   r  r	  r	  r  r  r   r	  r  r   r   r  r   r  r   r	  r	  r	  r  r   r   r	  r	  r  r:  r  r  r  r  r	  r   r  )r[   r   r	  r	  r	  rr  r   r  r	  space_for_selfargfunction_caller	args_listextra_keyword_argskeyword_variabletmpkw_nodes                   rU   r  )PyMethodCallNode.generate_evaluation_code  s   dhh!!$'!%!<!<>>//4/P224B~~""~~))111C((.  "211$7 3++D1 !NN889Q9Q^c8d

'(43M3MCSV+WWXYZ33"3	 	4 	
 2248 	

3
 CGDII>>>F	`v9#>T:U9VV[\|~

../qD#d)a-aPQ0RSeRfflmulvvx  zC  yD  DG  H	
 !#~~;;NW[;\''4J]%}}

{{}oS 1j$$%Q'8&9 :D	!Aa 12 3443:KLLr'tR01A0B	 	x80CNN'', 1 C&&t,NN4   "1..t4""4( 2 !!"2NCNN''(89))$/d#&&t6

4**4;;=$((CDT"

3rW   )r	  r	  r	  r	  r  )r^   r_   r`   ra   r   r  r	  r	  r	  r	  r  r	  r7  r	  r	  r	  r~   r	  r	  r	  r	  r	  r  rb   rc   rd   s   @rU   r	  r	    s     MHG!F!L(    "  ,C .	2!H(.W WrW   r	  c                   >    \ rS rSrSS/rSr\rSrSr	S r
S rS rS	rg)
InlinedDefNodeCallNodei   r   r	  r,   Nc                     U R                   R                  nUR                  (       d  UR                  (       a  g[	        UR
                  5      [	        U R
                  5      :w  a  gUR                  (       a  ggr  )rr  def_nodestar_argstarstar_argr   r   num_kwonly_argsr	  s     rU   can_be_inlined%InlinedDefNodeCallNode.can_be_inlined-  sP    ==))	!7!7y~~#dii.0$$rW   c                    U R                   R                  U5      U l         U R                   Vs/ s H  o"R                  U5      PM     snU l        U R                  R                  n[        U R                  5      nSn[        U5       H  nUR                  U   R                  nU R                  U   R                  Xq5      nUR                  5       (       a	  US:  a  SnO[UR                  R                  (       a@  UR                  (       d/  UR                  5       (       a  OUS:  a  SnUR                  U5      nX R                  U'   M     U(       a  [        US-
  5       H  nU R                  U   nUR                  5       (       a  M)  UR                  R                  (       a  MF  UR                  (       a  UR                  R                  (       a  Mt  US:  d  M|  [        UR                   SS5          U $    U $ s  snf )NFr   Tr,   rI	  )r	  rV  r   rr  r	  r   rS	  r   r8  r  rv   r   rw  r  r  r   r   )r[   ry   r  rX  r]	  r_	  r  r`	  s           rU   rV  $InlinedDefNodeCallNode.analyse_types7  s   !//==cB8<		C	'',	C	MM**	499~ #|$A#..+00K))A,((:C!!##q5)-&%%cii++-- 1u-1*,,S1CIIaL' %*  <>*iil++--XX**YY388#7#7  1u)  BC  D' +& i Ds   G=c                 6   U R                   R                  5       nU R                  R                  R                  (       d  UR                  S5        UR                  S5        UR                  S[        R                   SU S35        UR                  UR                  [        R                   S3U R                  5      5        UR                  S5        UR                  S[        R                   SU S35        UR                  S	5        [        R                  nU/nU R                  R                  n[        U R                  UR                  5       Hk  u  pVUR                  R                  (       a,  UR                  UR                  UR                  5      5        ML  UR                  UR!                  5       5        Mm     S
R#                  U5      nUR                  U R!                  5       < SU R                  R                  R$                  R&                  < SU< SUR)                  U R!                  5       U R                  5      < 35        U R                  R                  R                  (       d  UR                  S5        U R+                  U5        g )Nr  ##if CYTHON_COMPILING_IN_LIMITED_APIr	  z = PyCFunction_GetSelf(r  z == NULL && PyErr_Occurred()r  z = PyCFunction_GET_SELF(r  r  r  r  r=  r   )r	  r   rr  r	  is_cyfunctionr   r   r  r   r   r  r   r   rv   r  r  r  r  r   pyfunc_cnamer   r  )r[   r   	self_coderm	  rX  r  	proto_args          rU   r  +InlinedDefNodeCallNode.generate_result_codep  s   &&002	}}%%33 JJsOJJ<=JJV4455LYKWYZ\JJt))**++GH  JJwJJV4455Mi[XZ[]JJx //I;MM**	!$))Y^^<NCxx##inn =>

-	 =
 99X&

&&,,99''txx@	B	C }}%%33JJsOT"rW   )r   r	  )r^   r_   r`   ra   r   r  r   r   rr  r	  r	  rV  r  rb   rY   rW   rU   r	  r	     s2     (HGDHM7r%#rW   r	  c                   4    \ rS rSr/ rSS jrS rS rS rSr	g)	PythonCapiFunctionNodei  Nc           	      .    [         R                  XX#XES9  g )N)rw   r   r   r  rZ  )r[   r   py_namer   rX  r  s         rU   r  PythonCapiFunctionNode.__init__  s    $'( 	 	ErW   c                     U $ rO   rY   r   s     rU   rV  $PythonCapiFunctionNode.analyse_types  r  rW   c                 r    U R                   (       a&  UR                  R                  U R                   5        g g rO   )r  r   r   r  s     rU   r  +PythonCapiFunctionNode.generate_result_code  s*    --d.?.?@ rW   c                     U R                   $ rO   r  rZ   s    rU   r  ,PythonCapiFunctionNode.calculate_result_code  r  rW   rY   rO   )
r^   r_   r`   ra   r   r  rV  r  r  rb   rY   rW   rU   r	
  r	
    s    HEArW   r	
  c                   $    \ rS rSrSr SS jrSrg)PythonCapiCallNodei  FNc                     UR                   U l        U R                  U l        [        XX#US9U l        [
        R                  " X40 UD6  g )N)r  )r  r   r2  r	
  rr  rz  r  )r[   r   r	  rX  r  r
  r  s          rU   r  PythonCapiCallNode.__init__  sD    ))	 II.-')
 	4V4rW   )rr  r2  r   r%  )r^   r_   r`   ra   r	  r  rb   rY   rW   rU   r
  r
    s     O /3	5rW   r
  c                   @   ^  \ rS rSrSS/rSrU 4S jrS rS rSr	U =r
$ )	CachedBuiltinMethodCallNodei  ro  r   Tc           	      d   > [         TU ]  UR                  X#UUR                  UR                  S9  g )N)ro  r   r   r	  r   )rQ   r  r   r	  r   )r[   	call_nodero  r   r   rT   s        rU   r  $CachedBuiltinMethodCallNode.__init__  s1    MM4%55	 	 	!rW   c                 ^    U R                   b  U R                   $ [        R                  U 5      $ rO   )r	  r   r  rZ   s    rU   r  'CachedBuiltinMethodCallNode.may_be_none  s+    +'''##D))rW   c           
         U R                   R                  R                  nU R                   R                  5       nU R                   Vs/ s H  oDR                  5       PM     nnUR
                  R                  UR                  S5      X2U R                  U5      nUR                  U R                  5       < SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        g s  snf )Nr&  r  rh  )ro  r   typeptr_cnamer   r   r   cached_unbound_method_call_coder  r   r   r  r   r   r  )r[   r   
type_cname	obj_cnamer  r   	call_codes          rU   r  0CachedBuiltinMethodCallNode.generate_result_code  s    XX]]00
HH&&(	+/9959C95$$DD%%b)4#3#3T;	 	

KKM9##DKKM488<
 	 	T" 6s   	C?rY   )r^   r_   r`   ra   r   r  r  r  r  rb   rc   rd   s   @rU   r
  r
    s'     vHG!*
# #rW   r
  c                   \    \ rS rSr\r/ SQr\R                  r	S r
S rS rS rS rS rS	rg
)GeneralCallNodei  )rr  r  r	  c                    U R                   R                  U5      nU R                  R                  U5      nU R                  R                  U5      n U" U0 UD6$ ! [         a  nU R                  U5         S nAg S nAff = frO   )rr  rD  r  r	  r  rI  )r[   rC  rr  r  r	  rH  s         rU   rD  "GeneralCallNode.compile_time_value  sx    ==33D9..AA$G((;;DA	-_=== 	-))!,,	-s   A 
B %A;;B c                    U R                   R                  (       Ga(  U R                   R                  R                  (       Ga  U R                   R                  n[
        R                  " U5      (       d  [
        R                  " U5      (       a  UR                  nU R                   R                  R                  nU(       a  UR                  O[        UR                  5      R                  n[        R                  " XB5      (       a:  U R                  R                  nU R                  R                  nU" U0 UD6U l        g g g g g rO   )rr  r  ro  r   r   r%   r$	  r%	  r^   r   rw   r&	  r   r'	  r  r	  )r[   r(	  r   r)	  r*	  r   r  s          rU   r8  )GeneralCallNode.calculate_constant_result  s    ==%%%$--*;*;*F*F*F]]22F  ((G,<,<V,D,D$oo"mm//447B;#3#3V__H]HfHf 667GUU//??D!..>>F+14+B6+BD( V -E +G%rW   c                     U R                   (       a  U R                   R                  (       a  U R                  R                  (       d  [	        U R
                  S5      eU R                  R                  U R                   4$ )Nz0Compile-time keyword arguments must be explicit.)r	  r  r  r   r   r   r   rZ   s    rU   r	  "GeneralCallNode.explicit_args_kwds  s]    d&7&7&G&G((@@txxBD D##(($*;*;;;rW   c                    U R                  U5      =nb  U$ U R                  R                  U5      U l        U R                  R                  R                  (       d  U R                  R                  R
                  (       a  [        U l        U $ [        U R                  S5      (       a  U R                  5       nUb  X0La  UR                  U5      $ U R                  R                  R                  (       a!  U R                  R                  U5      U l        O<X0L a  [        U R                  S5        O!O U R                  R                  U5      U l        U R                  (       a   U R                  R                  U5      U l        U R                  R                  U5      U l        U R                  R                  U5      U l        U R!                  U R                  5        SU l        U $ )Nr   zRNon-trivial keyword arguments and starred arguments not allowed in cdef functions.r,   )r	  rr  rV  r   rv   r<  r3   r[  map_to_simple_call_noder   rj  rk  r   r   r	  r  r		  r  )r[   ry   r>	  r   s       rU   rV  GeneralCallNode.analyse_types  su   #'#C#CC#HHU&&33C8}}!!--}}!!**&	t}}g..335#(8--c22]]((44$(MM$D$DS$IDM\$((EF
  $ @ @ E $ 1 1 ? ? DD#33AA#F  33C8 	.rW   c           	      (
   [        U R                  [        5      (       d  U $ U R                  R                  (       d  U $ U R
                  n[        USS5      nU(       d  U $ UR                  nUR                  (       a  UR                  nUR                  (       d  U $ U R                  R                  nU R                  nUR                  nUR                  (       a  USS n[        U5      [        U5      :  a.  [        U R                  S[        U5      [        U5      4-  5        gUS[        U5        Vs1 s H"  nUR                   (       d  M  UR                   iM$     nnU[        U5      S n	Sn
[#        U5      n[%        U5      nSnUR&                   HJ  nUR(                  R*                  nX;   a  [        UR                  SU-  5        SnUR-                  U5        ML     [/        XR&                  5       H^  u  pUR(                  R*                  nUR                   U:X  a3  UR-                  U5        U
S-  n
UR1                  UR*                  5        M^    O   SS	KJnJn  / n[        UR&                  5      U
:  Ga  U[        U5      S n	[9        UR&                  5       VVs0 s H+  u  nnUR(                  R*                  U[        U5      -   U4_M-     nnnSnU	 H  nUR                   nUU;  a  U(       d  UnM   U(       a0  UR:                  (       a  U s  $ [        U R                  S
U-  5          gUU   u  nnUR-                  U5        U
S-  n
UR*                  R=                  5       (       a  UR1                  UR*                  5        M  U" UR*                  5      nUR=                  5       (       d   eUR1                  U5        UR1                  UU45        GM     U(       a  / n/ nUS   S   nU H\  nUUL a    OVUR=                  5       (       a  UR1                  U5        M2  U" U5      nUR1                  U5        UR1                  U5        M^     U(       a  UnU[?        U5       VVs/ s H  u  nowPM	     snn-   nUR&                   H;  nUR(                  R*                  nX;  d  M   Sn[        UR                  SU-  5        M=     U(       a  g[A        U R                  XS9nUSSS2    H  nU" UU5      nM     U$ s  snf s  snnf s  snnf )z
Tries to map keyword arguments to declared positional arguments.
Returns self to try a Python call, None to report an error
or a SimpleCallNode if the mapping succeeds.
r   Nr,   zDfunction call got too many positional arguments, expected %d, got %sr   Fzargument '%s' passed twiceT)rt  
LetRefNodez(C function call is missing argument '%s'rX  z/C function got unexpected keyword argument '%s'rq  )!r   r  r^  r	  r  rr  r  r   r0  r1  rv  r   r:	  r   r   r   rw   r  r  r	  r	  r   r  r  r  r|  rt  r1
  r  rj  r  r  rz  )r[   rr  r   r	  pos_argsr  declared_argsr  matched_argsunmatched_argsmatched_kwargs_countr   seen
has_errorsrw   decl_argrt  r1
  tempsr  keywordsfirst_missing_keywordr   r  
final_args	new_tempsfirst_temp_arg	arg_valuer   s                                rU   r.
  'GeneralCallNode.map_to_simple_call_node+  s    $..	::K  00K=='40K

)33M))K'',,""%**)!"-Mx=3}--$(( 2585G58]5DD E  !.ns8} =
 =xx CHH = 	 
 's8}~6 H~ < 
))C77==D|cgg;dBC!
HHTN * !1G1GHMH77==D}}$  &$)$CII& I 	@v%%&)==*3t9:6N&/0F0F&GI&GFAs #h-'==&G  I$(!*}}x'004-*((
  $$(( %46K%L M#D>S  &$)$99&&((KK		*%cii0D>>++++KK%LL#t-7 +: 
	!&q"!%I N2 **,,")))4))4!((."))$/ "& %D!ve}$F}eac}$FF ))C77==D'!
cggG	 *  dhhE$B$KD'd3D  Q
HI` %Gs   7TT%2T.Tc                 .   U R                   R                  (       a  g U R                  (       a  U R                  R                  5       nOSnUR                  R                  [        R                  " SS5      5        UR                  U R                  5       < SU R                  R                  5       < SU R                  R                  5       < SU< SUR                  U R                  5       U R                  5      < 3	5        U R                  U5        g )Nr.  rM  r  rN  r  r=  )r   r<  r	  r   r   r   r   r   r   r  rr  r  r   r   r  )r[   r   r  s      rU   r  $GeneralCallNode.generate_result_code  s    99v&&002FF))+*A*A.+0 	1

'')$$..0''txx@B	C 	T"rW   )r   rr  r  r	  r  r   N)r^   r_   r`   ra   r   r   r   r/   r  r  rD  r8  r	  rV  r.
  r  rb   rY   rW   rU   r&
  r&
    s9     D>H..K-C<@JX#rW   r&
  c                   X    \ rS rSrS/rSrS rS rS rS r	\
R                  rSrS	 rS
rg)AsTupleNodei  r  r,   c                 L    [        U R                  R                  5      U l        g rO   )r   r  r   rZ   s    rU   r8  %AsTupleNode.calculate_constant_result  s    $TXX%=%=>rW   c                     U R                   R                  U5      n [        U5      $ ! [         a  nU R	                  U5         S nAg S nAff = frO   )r  rD  r   r  rI  )r[   rC  r  rH  s       rU   rD  AsTupleNode.compile_time_value  sF    hh))$/	-: 	-))!,,	-s   
( 
AAAc                     U R                   R                  U5      R                  U5      U l         U R                   R                  [        L a  U R                   R                  S5      $ [        U l        U $ Nr  )r  rV  rk  r   r   r  r   s     rU   rV  AsTupleNode.analyse_types  sU    88))#.AA#F88==J&88--.QRR	rW   c                     gr  rY   rZ   s    rU   r  AsTupleNode.may_be_none  r   rW   Constructing Python tuplec                 R   U R                   R                  [        [        4;   a  SOSnUR	                  U R                  5       < SU< SU R                   R                  5       < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )N__Pyx_PySequence_TuplePySequence_Tupler  r  r=  )
r  r   r   r   r   r  r   r   r   r  )r[   r   r  s      rU   r   AsTupleNode.generate_result_code  sw    ,0HHMMnj=Y,Y(_q

txx))+''txx@B	C
 	T"rW   )r  r   r   N)r^   r_   r`   ra   r   r  r8  rD  rV  r  r/   r  r  r@  r  rb   rY   rW   rU   rE
  rE
    s9     wHG?- ..K-K#rW   rE
  c                   Z    \ rS rSrS/rSr\rSrS r	S r
S rS rS	 rS
 rSrS rS rSrg)MergedDictNodei  r	  r,   Tc                 "   0 nU R                   nU R                   Hk  nUR                  (       a  S UR                   5       nOUR                  R                  5       nU H#  u  pVU(       a  XQ;   a  [        SU-  5      eXaU'   M%     Mm     Xl        g )Nc              3   V   #    U  H  u  pUR                   UR                   4v   M!     g 7frO   rG  )rh   r	  r   s      rU   rk   ;MergedDictNode.calculate_constant_result.<locals>.<genexpr>  s+      A+?ZS --u/D/DE+?s   ')$duplicate keyword argument found: %s)reject_duplicatesr	  r  r	  r   	iteritemsr   )r[   r  rZ
  r   r  r	  r   s          rU   r8  (MergedDictNode.calculate_constant_result  s     22%%D##A+/+?+?A ,,668#
$$%Kc%QRR#s $ &  &rW   c           	         0 nU R                   nU R                   H  nUR                  (       aA  UR                   VVs/ s H'  u  pVUR	                  U5      UR	                  U5      4PM)     nnnOUR	                  U5      R                  5       n U H#  u  pVU(       a  XR;   a  [        SU-  5      eXbU'   M%     M     U$ s  snnf ! [         a  nU R                  U5         S nAM  S nAff = f)NrY
  )	rZ
  r	  r  r	  rD  r[
  r   r  rI  )	r[   rC  r  rZ
  r   r	  r   r  rH  s	            rU   rD  !MergedDictNode.compile_time_value  s     22%%D## ,0+?+?A+?ZS 0068P8PQU8VW+?  A //5??A1"'JC(S]()ORU)UVV"'3K #( & A  1--a001s   .B?)C
C+C&&C+c                     grX  rY   r   s     rU   ro   MergedDictNode.type_dependencies#      rW   c                     [         $ rO   r   r   s     rU   r   MergedDictNode.infer_type&  s    rW   c                     U R                    Vs/ s H2  nUR                  U5      R                  U5      R                  S5      PM4     snU l         U $ s  snf )Nz1argument after ** must be a mapping, not NoneType)r	  rV  rk  r  r[   ry   r  s      rU   rV  MergedDictNode.analyse_types)  s_    
 ((	
 ) c"55c:LLCE )	
 
s   9Ac                     gr  rY   rZ   s    rU   r  MergedDictNode.may_be_none3  r   rW   Constructing Python dictc                    UR                  U R                  5        U R                  U5        [        U R                  5      n[        U5      nUR                  U5        UR                  [        La"  UR                  SUR                  5       -  5        UR                  (       aY  UR                  U5        UR                  U R                  5       < SUR                  5       < S35        UR                  U5        GOiUR                  5       (       a  UR                  S5        UR                  SUR                  5       -  5        UR                  U R                  5       < SUR                  5       < S35        UR                  U5        UR                  S5        UR                  S5        UR                  S5        UR                  U R                  5       < S	UR                  5       < S
UR!                  U R                  5       UR                  5      < 35        U R#                  U5        UR%                  U5        UR                  5       (       a  UR                  S5        UR                  [        La  UR                  S5        UR&                  R)                  [*        R,                  " SS5      5        UR                  U R                  5       < SUR                  5       < S
UR!                  U R                  5       U R                  5      < 35        U R#                  U5        UR%                  U5        UR                  S5        UR/                  U5        [1        5       nU GH  nUR                  (       Gay  UR2                   GHe  nUR                  U5        U R4                  (       a  UR                  SU R                  5       < SUR6                  R                  5       < S35        UR9                  S5        UR                  SUR6                  R                  5       < S
UR;                  U R                  5      < 35        UR                  S5        UR=                  UR6                  R                  SU R                  5       < SUR6                  R                  5       < SUR>                  R                  5       < S35        UR%                  U5        UR/                  U5        GMh     GM  UR                  U5        U R4                  (       aS  UR9                  S5        UR=                  UR                  SU R                  5       < SUR                  5       < S35        OUR9                  S5        UR                  SU R                  5       < SUR                  5       < S35        UR                  SUR                  5       -  5        UR                  UR;                  UR                  5      5        UR                  S5        UR%                  U5        UR/                  U5        GM     [A        U5       H3  nUR&                  R)                  [*        R,                  " US5      5        M5     g )Nz$if (likely(PyDict_CheckExact(%s))) {r  r  zB#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_APIzif (Py_REFCNT(%s) == 1) {z} elser  r  z = PyDict_Copy(r=  r   r  ry	  r  z6 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, if (unlikely(PyDict_Contains(r  r  RaiseDoubleKeywords+__Pyx_RaiseDoubleKeywordsError("function", PyDict_SetItem(r9  MergeKeywordsz__Pyx_MergeKeywords(RaiseMappingExpectedzif (unlikely(PyDict_Update(z	) < 0)) {zVif (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseMappingExpectedError(%s);FunctionArguments.c)!r  r   r  r6  r	  r7  r  r   r   r   r   r  r  r  r  r  r   r  r  r   r   r   r   r  r  r	  rZ
  r	  r  r   r  r   r  )r[   r   r   r   helpersr  helpers          rU   r  'MergedDictNode.generate_evaluation_code8  s   dhh!!$'D%%&Dz%%d+99I%JJ=~~'( ) %%d+JJT[[]DNN4DEF..t4""$$ 

_`

69IIJ

8HIJ2248

8$

8$

3JJ ''txx@B C   &''-""$$

399I%JJz"--k.E.E$&8/: ;JJ ''txx@B C   &''-JJsO%D###//C006--

 KKMGG--/$1 2  $9:

GG--/ OODHH5$7 8 

3))#''++))+		++-8/ 0 ..t4NN4(# 0& --d3))KK0))$((t~~'759 : KK 67JJt~~'7 9 :JJ  FHLHX Y ZJJttxx89JJsO++D1%M P WoF--k.E.EfNc.de &rW   c                 L    U R                    H  nUR                  U5        M     g rO   )r	  r#  r[   r   r   s      rU   r#  MergedDictNode.annotate  s    %%DMM$ &rW   )r   r	  N)r^   r_   r`   ra   r   r  r   r   rZ
  r8  rD  ro  r   rV  r  r@  r  r#  rb   rY   rW   rU   rU
  rU
    sN    
 HGD&$( -K\f| rW   rU
  c                      \ rS rSrSrS/rSrSrSrSr	Sr
SrS rS	 rS
 rS rS rS rS rS rS+S jrS rS rS rS rS rS rS rS rS,S jrS-S jrS rS r Sr!S r"S r#S  r$S! r%S" r&S# r'S$ r(S% r)  S.S& jr*S/S' jr+S( r,S) r-S*r.g)0r{  i  r,   ro  Nr   TFc                    [        U R                  [        5      (       a7  U R                  R                  (       a  U R                  S:X  d  U R                  $ U R                  R                  5       nU(       a  U< SU R                  < 3$ g )Nparallelr   )r   ro  r7  r  rp  r  )r[   cys     rU   r  !AttributeNode.as_cython_attribute  s]    txx**))*,>>!XX))+ $..11rW   c           	         U[         L Ga  U R                  nU(       aM  UR                  (       a<  UR                  (       a+  SU l        UR                  U l        U R                  U5        U $ U(       GaU  UR                  (       GaC  U R                  R                  [        R                  LGa  SSK
JnJn  U" U R                  U R                  R                  S9nU R                  R                  Ul        X`l        [        R                  XU5      n[         R"                  " SS5      n[$        R&                  " [$        R                   [$        R(                  " S[$        R                   S 5      [$        R(                  " S[$        R                   S 5      /5      n	[+        U R,                  SU	Xv/US	9n
U" Xj5      nUR/                  U5      $ [        R                  XU5      $ )
Nr,   rs  r+  PyMethodNew2Argr  r  r[   __Pyx_PyMethod_New2Arg)r	  rX  r   r  )r   r   rv  rj  r  analyse_as_python_attributero  r   r   r   r|  rt  ru  r2  r   r8  r   r   r   r  r  r
  r   rV  )r[   rP  ry   r   rt  ru  obj_nodeunbound_noder  rX  binding_callcomplete_calls               rU   r8  AttributeNode.coerce_to  ss    ~%JJE++0A0A "..
0055---$((--wGXGX2X
 K(F(,(=(=%#'11$#F(44%'9 '00--"//
8Q8QSWX"//
8Q8QSWX0	  2HH":'&1!-  !5X L$22377!!$#66rW   c                     U R                   nUR                  S5      (       a  UR                  S5      (       a  g [        U R                  R
                  U5      U l        g )N__)rp  
startswithendswithr  ro  r   )r[   r  s     rU   r8  'AttributeNode.calculate_constant_result  sD    ~~??4  T]]4%8%8&txx'?'?FrW   c                 D   U R                   nUR                  S5      (       a0  UR                  S5      (       a  [        U R                  SU-  5        g U R
                  R                  U5      n [        X25      $ ! [         a  nU R                  U5         S nAg S nAff = f)Nr
  z6Invalid attribute name '%s' in compile-time expression)
rp  r
  r
  r   r   ro  rD  r  r  rI  )r[   rC  r  ro  rH  s        rU   rD   AttributeNode.compile_time_value  s    ~~??4  T]]4%8%8$((JTQShh))$/	-3%% 	-))!,,	-s   /
A: :
BBBc                 8    U R                   R                  U5      $ rO   )ro  ro  r   s     rU   ro  AttributeNode.type_dependencies      xx))#..rW   c                    U R                  USS9nUb  UR                  R                  (       aO  UR                  R                  R                  (       a*  [        R
                  " UR                  R                  5      $ UR                  R                  $ U R                  U5      nUb  UR                  R                  $ U R                  R                  U5      nU R                  XS9  UR                  (       a!  U R                  R                  (       a  [        $ U R                  (       a!  U R                  R                  (       a  [        $ U R                  $ )NFtarget)obj_type)#analyse_as_cimported_attribute_noder   r   rv  r   ra  analyse_as_type_attributero  r   analyse_attributer_  r   r:	  )r[   ry   r   r
  s       rU   r   AttributeNode.infer_type  s    77E7Jzz4::??#?#?!**4::??;;zz&--c2::??"88&&s+s6##		(>(> "!ZZDJJ11 "!yyrW   c                     SU l         g r  r  r   s     rU   rP  (AttributeNode.analyse_target_declaration  ro  rW   c                    U R                  USS9nUR                  R                  (       a#  [        U R                  SU R
                  -  5        UR                  5       (       d#  [        U R                  SU R                  -  5        U$ )Nr,   r
  z"Assignment to const attribute '%s'r<  )rV  r   r  r   r   rp  r   rX  s      rU   r`  "AttributeNode.analyse_target_types  sf    !!#!299$((@4>>QR~~$((CdiiOPrW   c                    U R                   (       d  [        R                  U l         UR                  S   U l        U R                  X5      nUc  U(       d  U R                  U5      nUc  U R                  X5      nUc   eUR                  (       d  UR                  (       a"  UR                  (       a  SUR                  l        UR                  (       a  UR                  U5        U$ )Nr  T)r   r   r3   rq   r  r
  r
  "analyse_as_ordinary_attribute_noder  r   r   r4  wrap_obj_in_nonecheck)r[   ry   r
  r   s       rU   rV  AttributeNode.analyse_types"  s    yy"--DI!$0B!C77D<11#6D<::3GD###4::"DJJO&&s+rW   c                    U R                   R                  U5      nU(       a  UR                  U R                  5      nU(       ag  UR                  (       dV  UR
                  (       d3  UR                  (       d"  UR                  (       d  UR                  (       a  U R                  XU5      $ U R                  U5      (       a%  [        U R                  SU R                  -  5        U $ g )Nz&cimported module has no attribute '%s')ro  r  rz  rp  r  r  rv  r  r  as_name_noder  r   r   )r[   ry   r
  module_scoper   s        rU   r
  1AttributeNode.analyse_as_cimported_attribute_node2  s    
 xx11#6 ,,T^^<EU@@$$(:(:}}((V<<66s;;dhh H4>> YZrW   c                    U R                   R                  (       a  g U R                   R                  U5      nU(       Ga,  UR                  (       d"  UR                  (       d  UR
                  (       a  UR                  R                  U R                  5      nU(       a  UR                  (       d,  UR
                  (       a  UR                  R                  (       az  UR                  (       a  U R                  (       d  g UnODU R                  X#U5      nUR                   Vs/ s H  nU R                  X%U5      PM     snUl        U R                  XSS9$ g UR                   (       d  UR"                  (       a  U R                  UR$                  ;   aq  UR&                  R(                   H/  nUR*                  U R                  :X  d  M  U R                  XSS9s  $    [-        U R.                  U R                  < SU< 35        g U R                  R1                  S5      (       a!  U R                  R3                  S5      (       a  g [-        U R.                  U R                  < SU< 35        g s  snf )NFr
  z not a known value of r
  )ro  r  r  r^  r_  r  rx  rz  rp  r:	  r   rv  r?  _create_unbound_cmethod_entryoverloaded_alternativesr
  rt  r  r  r   enum_valuesrw   r   r   r
  r
  )r[   ry   r   r   
ubcm_entryoverloaded_alternatives         rU   r
  'AttributeNode.analyse_as_type_attributeD  s   
 88%%xx'',%%)=)=ARAR

..t~~>e..$2C2C

H_H_++#~~#'%*
%)%G%GUX%Y
 ;@:W:W>:W 6 !>>t]`a:W>
:  ,,SU,KK  !1!1>>T[[0!%!7!7 ::7#'#4#4S#4#NN "8 dhhX\(]^  ^^..t449P9PQU9V9V$((DNNTX$YZ#>s   "I-c                 V   UR                   (       Ga  UR                  R                  Gc  UR                   nUR                  R                  (       d,  UR                  (       a(  UR                  R
                  (       a  UR                  nOUR                  (       a8  [        U R                  UR                  < SU< 35        [        R                  nO[        R                  " UR                  5      nUR                  S S  Ul        [        R                  " SUSS 5      UR                  S'   O)UR                  < SUR                   < 3nUR                  n["        R$                  " UR                  XE5      nSUl        UR                   Ul         SUl        UR*                  Ul        U$ )Nz not a static member of r[   r   r  r,   )
func_cnamer   r	  rK	  parent_scopeis_cpp_class_scoper  r   r   rw   r   r3   r&   r   r  vtabptr_cnamer   r   r  rv  rh	  rx  )r[   r   r   ry   r   r,  r
  s          rU   r
  +AttributeNode._create_unbound_cmethod_entryj  s$    

 8 8 @$$Ezz**$$)9)9)L)L

""dhh%**d ST"-- 		%**-"ZZ]
 * 7 7fd S

1 $ 2 2EKK@EJJE\\%**e;
"#
 % 0 0
()
% ;;
rW   c                 ^   U R                   R                  U5      nU(       a  UR                  U R                  5      $ U R                   R                  (       dU  U R                   R                  U5      nU(       a3  [        USS 5      b%  UR                  R                  U R                  5      $ g )Nrx  )ro  r  lookup_typerp  r  r  r  rx  )r[   ry   r
  r1  s       rU   r  AttributeNode.analyse_as_type  s|    xx11#6++DNN;;xx))005IWY>J 224>>BBrW   c                 2   U R                   R                  U5      nU(       au  UR                  U R                  5      nU(       aS  UR                  (       aB  UR
                  R                  (       d  UR
                  R                  (       a  UR
                  $ g rO   )ro  r  rz  rp  r  r   r^  r_  r[   ry   r
  r   s       rU   r  'AttributeNode.analyse_as_extension_type  s^     xx11#6 ,,T^^<E:://5::3M3M ::%rW   c                     U R                   R                  U5      nU(       a?  UR                  U R                  5      nU(       a  UR                  (       a  UR                  $ g rO   )ro  r  rz  rp  r  r
  s       rU   r  AttributeNode.analyse_as_module  sE     xx11#6 ,,T^^<E&rW   c                     [         R                  X R                  US9nU(       a  UR                  U5      nOUR	                  U5      nSUR
                  l        U$ )N)rw   r   r,   )r7  r  rp  r`  rm  r   r4  )r[   ry   r   r
  r   s        rU   r
  AttributeNode.as_name_node  sP     !!$^^5!I,,S1D,,S1D

rW   c                    U R                   R                  U5      U l         U R                  U5        U R                  (       a-  U R                  R                  (       a  U R
                  (       d   U R                  (       a  U(       d  SU l        [        U l	        U $ U(       a=  U R                   R                  R                  (       a  [        U R                  S5        U $ U R                  (       a|  U R                  R                  (       aa  U(       dD  [        R!                  U R                  U R                   U R                  5      R                  U5      $ [        U R                  S5        U $ )Nr,   z'Assignment to an immutable object fieldz"Assignment to a read-only property)ro  rV  r
  r   r:	  r?  r	  r  r   r2  r   r_  r   r   is_cpropertyrz  r/	  )r[   ry   r
  s      rU   r
  0AttributeNode.analyse_as_ordinary_attribute_node  s    88))#.s#::$**// ?? $2!  55$((EF  ZZDJJ33%33DHHdhh

Saabeff$((@A rW   c                    US LnSU l         U R                  U l        Uc  U R                  R                  R
                  (       d%  U R                  R                  R                  (       a   U R                  R                  U5      U l        U R                  R                  nO(UR
                  (       d  UR                  (       a  [        nUR                  (       d  UR                  (       a  UR                  nSU l        O[UR                  (       d  UR                  (       a  SU l        O1UR                  (       a  UR                   (       a  SU l        OSU l        UR"                  (       Ga  UR%                  5       (       a  UR&                  R)                  U R                  5      nUR*                  (       a  U(       d  U R                  S:X  aJ  SU l        SU l        SU l        U R                  R                  R3                  U R4                  5      U l        g UR7                  U R                  XR4                  5        UR&                  R)                  U R                  5      nU(       a  UR8                  (       a  S nO/[;        U R4                  SU-  5        [<        R>                  U l        g X@l         U(       a  UR                  (       a&  URB                  S:X  a  [;        U R4                  S5        URD                  (       a  UR                  U l        g URF                  (       a  URH                  (       a  URJ                  (       a#  UR                  U l        URL                  U l        g  U RO                  XU5        g )	Nr   r  r   TTz/Cannot select attribute of incomplete type '%s'__weakref__z,Illegal use of special attribute __weakref__)(r	  rp  r	  ro  r   r  r  rk  r   r0  ru  r1  r  r^  r_  r  is_fake_referencehas_attributesattributes_knownrx  rz  r   is_memslice_transposer  r  	transposer   declare_attributer  r   r   r3   r   rw   r
  r  r  r:	  r   r
  )r[   ry   r
  immutable_objr   s        rU   r
  AttributeNode.analyse_attribute  sO    ,nnxx}}&&$((--*H*H8866s;xx}}H!!X%>%>)??h//))HDG''8+C+CDG""x'A'ADGDG"""((** 224>>B..u~~,592'+/3,$(HHMM$;$;DHH$E	 224>>3Q ( : :4>> JU__ EdhhE  '11	J--%**2M$(($RS %% %

DI''0E0E%JZJZ %

DI"'++DK
 
 	((FrW   c                    Uc  U R                   R                  nUR                  U R                  5      U l        U R                  U l        [
        U l        SU l        UR                  (       Gd  UR                  (       Gd  UR                  (       d  UR                  (       d  UR                  (       dp  UR                  (       d_  UR                  (       dN  UR                  (       a  UR                  U5      (       d'  UR                   (       a?  UR                  U5      (       a)  U(       d!  U R                   R#                  U5      U l         g g UR$                  (       a  U R                   R&                  (       d  U R                   R(                  (       a  U R                   R*                  R,                  (       ab  U R                   R*                  R,                  R                  R                  (       a)  U(       d!  U R                   R#                  U5      U l         g g [/        U R0                  SU< SU R                  < S35        g g g )Nr,   zObject of type 'z' has no attribute 'rZ  )ro  r   mangle_class_private_namerp  r	  r   r	  rv   r<  r  r  r  r   rp  r}  r  	is_structrk  rv  r   r  r   rj  r   r   )r[   ry   r
  r
  s       rU   r
  )AttributeNode.analyse_as_python_attribute  si   xx}}H66t~~Fnn"	###H,=,=,=""h&<&<))X-H-H** **x/N/Ns/S/S **x/N/Ns/S/S$#xx::3?DH %''TXX-=-=AVAV222277CC$#xx::3?DH % dhh12! ->#rW   c                    UR                   S   (       d  g S nSnU R                  R                  R                  (       a\  U R                  (       aK  U R
                  (       d:  SR                  [        U R                  5      S::  a  SOS5      nU R                  4nOU R                  R                  R                  (       ac  U R                  (       a  SnOOU R                  R                  R                  R                  U R                  5      nU(       a  SnUR                  4nU(       a!  U R                  R                  US	US
9U l        g g )Nrz  rY   rD	  rE	  rF	  r&  z&Cannot transpose None memoryview slicez5Cannot access '%s' attribute of None memoryview slicerG	  rH	  )rq   ro  r   r^  needs_none_checkr	  r  r   rp  r   r
  rx  rz  rw   r  )r[   ry   rU  r  r   s        rU   r
  #AttributeNode.wrap_obj_in_nonecheck)  s    ~~k*HHMM++0E0E=DDcRVR`R`NaegNgUmopC>>+KXX]]--))>++77GQC#(::-Kxx11#7M>I 2 KDH rW   c                 H    U R                   (       a  U R                  5         g g rO   )r	  r  r   s     rU   r  AttributeNode.nogil_checkA  s    ??NN rW   zAccessing Python attributec                 8    U R                   R                  U5      $ rO   )ro  r  r   s     rU   r  0AttributeNode.is_cimported_module_without_shadowG  s    xx::3??rW   c                     U R                   (       a1  U R                  5       =(       d    U R                   R                  5       $ [        R                  U 5      $ rO   )ro  r  r  r7  rZ   s    rU   r  AttributeNode.is_simpleJ  s;    88&&(@DHH,>,>,@@%%d++rW   c                 P    U R                   (       a  g[        R                  U 5      $ r  )ro  r7  r   rZ   s    rU   r   AttributeNode.is_lvalueP  s    88%%d++rW   c                     U R                   (       a  U R                   R                  5       $ [        R                  U 5      $ rO   )ro  r  r7  rZ   s    rU   r  AttributeNode.is_ephemeralV  s-    8888((**((..rW   c                     U R                  5       nU R                  (       a1  U R                  R                  (       a  U R                  (       d  SU-  nU$ r  )calculate_access_coder   r  r  )r[   r  s     rU   r  #AttributeNode.calculate_result_code\  s8    ++-::$**44T^^v%FrW   c                 Z   U R                   nUR                  UR                  5      nU R                  (       Ga'  U R                  R                  (       Ga  UR                  R
                  (       a  U R                  R                  (       d  U R                  R                  (       a  U R                  R                  $ U R                  R                  (       a  U R                  R                  U l
        SUR                  R                  < SU< U R                  < UR                  R                  < SU R                  < 3$ U R                  (       a  U R                  $ g UR                  R                  (       a#  SU R                  R!                  5       < SU< S3$ UR                  R"                  (       aT  U R                  (       aC  U R                  R$                  (       a(  UR                  R'                  UR)                  5       SS9nU< U R                  < U R                  < 3$ )	Nz	((struct z *))->__Pyx_Cr  r9  T)to_object_struct)ro  r  r   r   r:	  r^  is_builtin_cmethodfinal_func_cname
from_fusedr   r	  vtabstruct_cnamer  vtabslot_cnamer  rJ  upperr_  r  r	  r  )r[   ro  obj_codes      rU   r
  #AttributeNode.calculate_access_codeb  sW    hh==*:::$**///xx))$**2O2O::..::66699''
 #'**"2"2DK HH--xHH++T[[: : $${{"
 XX   &*kk&7&7&98DDxx''DJJ4::;Q;Q88--cjjlt-T'$++>>rW   c                    U R                   (       Ga  U R                  (       a3  UR                  R                  [        R
                  " SS5      5        SnO2UR                  R                  [        R
                  " SS5      5        SnUR                  U R                  5       < SU< SU R                  R                  5       < SUR                  U R                  5      < S	UR                  U R                  5       U R                  5      < 3	5        U R                  U5        g U R                  R                   (       GaH  U R"                  (       a  U R                  R$                   H#  u  p4US
:X  d  M  ['        U R                  S5          g    UR                  U R                  5       < SU R                  R                  5       < S35        UR)                  U R                  5       U R                  SS9  SU R                  5       -  nUR                  UR+                  XPR                  5      5        g U R,                  (       aB  UR                  SU R                  5       < SUR/                  U R                  5      < S35        g g U R0                  R2                  (       a  U R,                  (       a  U R4                  (       a  U R                  5       nO#U R6                  (       a   eU R9                  5       nU R                  R;                  U5      nUR=                  U R                  U R0                  U R>                  US9  g U R                  R                  (       a&  U R                  R                  R@                  (       a  g U R0                  (       aB  U R0                  RB                  (       a&  UR                  RE                  U R0                  5        g g g )NPyObjectLookupSpecialr  __Pyx_PyObject_LookupSpecialPyObjectGetAttrStr__Pyx_PyObject_GetAttrStrr  r  r  r=  r  z=Transposing not supported for slices with indirect dimensionsr  Tr  z__pyx_memslice_transpose(&%s)zif (unlikely(!zR.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");r   r  )#r	  r	  r   r   r   r   r   r  ro  r   r  rp  r   r   r  r   r   r
  r  r   r  r  r  r   r   r  r  r  r
  r  r  r  r^  r:	  rz	  )r[   r   lookup_func_namer  r  r
  undereferenced_resultr  s           rU   r  "AttributeNode.generate_result_code  s   ???%%  11++,CEWXZ#A   11++,@BTUW#> JJKKM$HH&&(**4>>:++DKKM488DFG   &YY)))))'+yy~~OFdhh )C D	 (6 

8IJK//tyy)- 0 / 4dkkmC

411!XX>?''


  ;;=$//$((*C	EF ( ZZ''D,B,B~~(,%<<''(,(B(B(D%!%!K!KLa!b%%dhh

D<Q<Qfx%y xx}}!@!@

 5 5  77

C !6rW   c                     U R                   (       aV  U R                  R                  (       a;  U R                  (       a*  UR	                  U R                  5       U R                  SS9  g [        R                  X5        g )NTr  )r  r   r   r
  r:  r  r   r  r  s     rU   r  $AttributeNode.generate_disposal_code  sJ    <<DII88T=W=W""4;;=$))d"K++D7rW   c                    U R                   R                  U5        U R                  (       a  UR                  R	                  [
        R                  " SS5      5        UR                  U R                  SU R                   R                  5       < SUR                  U R                  5      < SUR                  5       < S35        UR                  U5        UR                  U5        GOCU R                   R                  R                  (       a  UR!                  SU R"                  R%                  5       < U R                   R                  R&                  < SU R                   R)                  U R                   R                  5      < SUR)                  U R+                  5       5      < S35        UR                  U5        UR                  U5        GOYU R-                  5       nU R                  R.                  (       an  U R0                  (       a]  UR3                  U5        UR5                  U5        UR7                  X`R                  5        UR9                  X`R+                  5       5        OMU R                  R:                  (       a2  S	S
KJn  URA                  XaUR-                  5       U R                  U5        U R                  R:                  (       d6  UR!                  U< SURC                  U R+                  5       5      < S35        URE                  U5        UR                  U5        U R                   R                  U5        U R                   R                  U5        g )Nr6  r  z__Pyx_PyObject_SetAttrStr(r  r9  __Pyx_SET_Cr  r  r,   r'  r  r  )#ro  r  r	  r   r   r   r   r  r   r   r  rp  r  r  r   rJ  r   r	  r
  implementation_suffixr  r,  r  rv   r  r  r  r  
put_decrefr   r&  r(  put_assign_to_memviewslicer"  r  )r[   r   r   r  r   r   select_coder(  s           rU   r  &AttributeNode.generate_assignment_code  s4   ))$/??--''(<>PQS!!$((HH&&(**4>>:MMO%&
 &&t,NN4 XX]]%%JJ!!#33""488==1djjl+	- .
 &&t,NN4 ++-Kyy$$)=)=((.$$T*YY7ZZ\:--(55##**,		4I 99//

#..tzz|<>?
 --d3NN4 ''-D!rW   c           	         U R                   R                  U5        U R                  (       dI  U R                  R                  R
                  (       a  SU R                  R                  R                  ;   a  UR                  R                  [        R                  " SS5      5        UR                  U R                  SU R                   R                  5       < SUR                  U R                  5      < S35        O[!        U R                  S5        U R                   R#                  U5        U R                   R%                  U5        g )N__del__r6  r  r7  r  r9  z+Cannot delete C attribute of extension type)ro  r  r	  r   rx  is_property_scoper  r   r   r   r   r  r   r   r  rp  r   r  r  r  s      rU   r  $AttributeNode.generate_deletion_code  s    ))$/??tzz//AA#,

0@0@0H0H#H--''(<>PQS!!$((HH&&(**4>>:<=
 $((IJ''-D!rW   c           
          U R                   (       a  Su  p#OSu  p#UR                  U R                  [        X#U R                  -  [        U R                  5      S95        g )N)py_attrzpython attribute (%s))c_attrzc attribute (%s)rB  )r	  r#  r   r8   r   r   rp  )r[   r   rD  rE  s       rU   r#  AttributeNode.annotate   sG    ??<KE46KEdhhuTYY6FSQUQ_Q_M` abrW   c                     U R                   R                  5       nU(       a'  [        R                  " U< SU R                  < 35      $ g )Nr   )ro  r  r
   r|  rp  )r[   rS  s     rU   r  /AttributeNode.get_known_standard_library_import   s4    hh@@B!//;0WXXrW   )rp  r   r   r  r
  r	  r  r  r	  ro  r  r2  r   r  r  rO   r  r  r  )/r^   r_   r`   ra   r  r   r   r?  r
  r
  r	  r	  r  r8  r8  rD  ro  r   rP  r`  rV  r
  r
  r
  r  r  r  r
  r
  r
  r
  r
  r  r@  r  r  r   r  r  r
  r  r  r  r  r#  r  rb   rY   rW   rU   r{  r{    s     LwHEI!J	(7TG
-/2 $$L4		0DGL2:K0 /K@,,/"?H7Dr8 INGK*"X"crW   r{  c                   Z    \ rS rSrS/rSr\rSrSr	S r
S rS rS rS	 rS
 rS rS rSrg)StarredUnpackingNodei   r
  r,   Fc                 ,    [         R                  XUS9  g )Nr
  rZ  )r[   r   r
  s      rU   r  StarredUnpackingNode.__init__'   s    $F3rW   c                     U R                   (       d  [        U R                  S5        U R                  R	                  U5        g Nz&starred expression is not allowed here)starred_expr_allowed_herer   r   r
  ry  r   s     rU   ry  )StarredUnpackingNode.analyse_declarations*   s,    --$((DE((-rW   c                 8    U R                   R                  U5      $ rO   )r
  r   r   s     rU   r   StarredUnpackingNode.infer_type/   s    {{%%c**rW   c                     U R                   (       d  [        U R                  S5        U R                  R	                  U5      U l        U R                  R
                  U l        U $ r
  )r  r   r   r
  rV  r   r   s     rU   rV  "StarredUnpackingNode.analyse_types2   sF    --$((DEkk//4KK$$	rW   c                 :    U R                   R                  U5        g rO   )r
  rP  r   s     rU   rP  /StarredUnpackingNode.analyse_target_declaration9   s    ..s3rW   c                 |    U R                   R                  U5      U l         U R                   R                  U l        U $ rO   )r
  r`  r   r   s     rU   r`  )StarredUnpackingNode.analyse_target_types<   s.    kk66s;KK$$	rW   c                     gr  rY   rZ   s    rU   r  *StarredUnpackingNode.calculate_result_codeA   ra
  rW   c                     g rO   rY   r  s     rU   r  )StarredUnpackingNode.generate_result_codeD   r   rW   r
  r   N)r^   r_   r`   ra   r   r   r   r   r  r  r  ry  r   rV  rP  r`  r  r  rb   rY   rW   rU   r  r     sH     zHJDG %4.
+4
rW   r  c            
       R  ^  \ rS rSrSS/rSrSrSrSrSr	S r
S rS	 rSS
 jrS rS rS rS rS rS rSS jrU 4S jr  SS jr\R0                  " \R2                  " \R4                  \R6                  " S\R4                  S5      /5      5      rS rS rSS jrS r S r!Sr"U =r#$ )SequenceNodeiH   r   r   r,   NFc                 b    U R                    Vs/ s H  o"R                  U5      PM     sn$ s  snf rO   )r   rD  )r[   rC  r  s      rU   compile_time_value_list$SequenceNode.compile_time_value_list\   s'    8<		B	&&t,	BBBs   ,c                    SU l         / nU R                   Hf  nUR                  (       aA  U R                   (       a  [        UR                  S5        SU l         UR
                  nSUl        UR                  U5        Mh     Xl        g )NFz,more than 1 starred expression in assignmentT)starred_assignmentr   r   r   r   r
  r  r[   r   r  s      rU   replace_starred_target_node(SequenceNode.replace_starred_target_node_   sg    "'99C~~**#''#QR*.'jj!%KK  	rW   c                 l    U R                  5         U R                   H  nUR                  U5        M     g rO   )r"  r   rP  rf
  s      rU   rP  'SequenceNode.analyse_target_declarationm   s*    ((*99C**3/ rW   c                 B   [        U R                  5       H;  u  p4U(       d  UR                  U5      nUR                  U5      U R                  U'   M=     U R                  (       a]  U R                  R                  U5      nUR
                  R                  (       d  UR                  U5      nUR                  U5      U l        SU l        UR                  (       d=  UR                  (       d,  UR                  (       a"  UR                  R                  (       a  SU l        U $ Nr,   T)r  r   rV  rk  r   r   rD  rj  r  r{  r  r|  ru  slow)r[   ry   skip_childrenr  r  r   s         rU   rV  SequenceNode.analyse_typesr   s    		*FA '',11#6DIIaL + **88=K##**)<<SA*;;C@D3#7#7&&3??+J+JDIrW   c                    [         R                  " USS9nU R                  U:X  a  U $ U R                  (       a   e[	        U R
                  5      UR                  :w  a8  [        U R                  SUR                  [	        U R
                  5      4-  5        [        U R
                  UR                  5       VVs/ s H  u  p4UR                  XB5      PM     nnn[        U R                  XQSS9$ s  snnf )NTr!  zHtrying to coerce sequence to ctuple of wrong length, expected %d, got %d)r   r   r  )r   r$  r   r   r   r   rC  r   r   r  r~  r8  r^  )r[   rP  ry   r  r   coerced_argss         rU   coerce_to_ctupleSequenceNode.coerce_to_ctuple   s    ++HTJ99 K####tyy>X]]*$((fs499~j/ / 0BEdiiQYQdQdBefBeYSd0BefTRR gs   9C.c           
         U R                  5         [        S U R                   5       5      (       d  U $ / n/ nU R                   H  nUR                  (       aZ  U(       a6  UR	                  [        US   R                  US9R                  USS95        / nUR	                  UR                  5        Mn  UR	                  U5        M     U(       a4  UR	                  [        US   R                  US9R                  USS95        [        U R                  X R                  5      nU R                  (       a;  [        U R                  SXPR                  R                  U5      SU R                  SS9nU$ )Nc              3   8   #    U  H  oR                   v   M     g 7frO   )r   r	  s     rU   rk   ?SequenceNode._create_merge_node_if_necessary.<locals>.<genexpr>   s     7Yc>>Y   r   rY  Tr)  r   )inplacer   r  )_flatten_starred_argsrr   r   r   r  r^  r   rV  r
  MergedSequenceNoder   r   
binop_noderk  )r[   ry   r   r  r  r   s         rU   _create_merge_node_if_necessary,SequenceNode._create_merge_node_if_necessary   s   ""$7TYY777K99C~~KK	&)--f E S STWgk S lmFCJJ'c"  KK	&)--f=KKC_cKde!$((D))<#t%5%5%H%H%M499d<D rW   c                 H   / nU R                    H  nUR                  (       a]  UR                  R                  (       aB  UR                  R                  (       d'  UR                  UR                  R                   5        Mq  UR                  U5        M     XR                   S S & g rO   )r   r   r
  r   r   r  r  r!  s      rU   r5  "SequenceNode._flatten_starred_args   sa    99C~~#**"D"DSZZMcMcCJJOO,C 	 
 		!rW   c                     gr  rY   rZ   s    rU   r  SequenceNode.may_be_none   r   rW   c                    U R                   (       a  [        U R                  S5        / U l        / U l        SU l        [        U R                  5       GH  u  p#UR                  U5      =o0R                  U'   UR                  (       aX  UR                  R                  [        5      (       d  [        UR                  S5        UR                  [        L a  [        Ul
        [        U R                  U5      nUR                  UR                  U5      nXELa  SU l        U R                  R!                  U5        U R                  R!                  U5        GM     [        U l
        U $ )Nz#can't assign to multiplied sequenceFz2starred target must have Python object (list) typeT)r   r   r   unpacked_itemscoerced_unpacked_itemsany_coerced_itemsr  r   r`  r   r   rK  r   r   r  r8  r  )r[   ry   r  r  unpacked_itemcoerced_unpacked_items         rU   r`  !SequenceNode.analyse_target_types   s   $((AB &(#!&		*FA!$!9!9#!>>C))A,~~xx//	::#''NP88~-(CH&txx5M$1$;$;CHHc$J!9)-&&&}5''../DE + #	rW   c                 &    U R                  U5        g rO   generate_operation_coder  s     rU   r  !SequenceNode.generate_result_code       $$T*rW   c                 :   Uc  U R                  5       nS=pES nU R                  (       a  U(       d  U R                  nUR                  R                  (       a}  UR                  5       n[	        UR
                  [        5      (       a   UR
                  S:  a  SUR
                  -  nO.UR                  R                  (       a  SU< SU< S3nOSU< S3nU R                  [        L d  U R                  [        L Ga  U R                  (       d  U R                  (       a  U(       d  [        U R                  5      S:  a  U R                  [        L a3  SnUR                  R                  [         R"                  " S	S
5      5        OSnUR%                  SUU[        U R                  5      SR'                  S U R                   5       5      UR)                  X R*                  5      4-  5        UR-                  U[.        5        SU l        GOU R                  R2                  (       aK  [5        U R                  5       H0  u  pUR%                  U< SU< SU	R                  5       < S35        M2     GO5U R                  [        L a  Su  pO0U R                  [        L a  Su  pO[7        SU R                  -  5      e[        U R                  5      nUR%                  U< SU
< SU< U< SUR)                  X R*                  5      < 35        UR-                  U[.        5        U(       a`  [8        R:                  nUR%                  SU-  5        US:X  a  UnO	U< SU< 3nUR%                  SU< SU< SU< SU< S3	5        SU l        OSn[=        U5       H  nU R                  U   n	U(       d  U	R?                  5       (       d.  URA                  U	R                  5       U	RC                  5       5        U	RE                  U5        UR%                  S U< SU< SU=(       a    U=(       a	    U< S!U< 3=(       d    U=(       d    U< SU	RG                  5       < S"URI                  U R*                  5      < S35        M     U(       a"  UR%                  S#5        UR%                  S#5        Ub  UR                  RJ                  (       a  UR%                  S$[8        R:                  < S%U< SURG                  5       < SUR)                  [8        R:                  U R*                  5      < 35        UR-                  [8        R:                  [.        5        URM                  U[.        5        UR%                  U< S[8        R:                  < S35        UR%                  S#5        g g g )&Nr&  r   z * %sz * ((z<0) ? 0:r9  z * (__Pyx_PyList_PackListPackr  PyTuple_Packz%s = %s(%d, %s); %sr  c              3   @   #    U  H  oR                  5       v   M     g 7frO   r	  r	  s     rU   rk   >SequenceNode.generate_sequence_packing_code.<locals>.<genexpr>   s     ?Yc--//Yr	  Tr  r  r  )
PyList_New__Pyx_PyList_SET_ITEM)PyTuple_New__Pyx_PyTuple_SET_ITEMz'sequence packing for unexpected type %sr  r=  z{ Py_ssize_t %s;r,   r  zfor (z=0; z < rh  z++) {r  r  z
) != (0)) r   z{ PyObject* z = PyNumber_InPlaceMultiply()'r  r   r   rD  r   r   r   rO  r   r   r   r(  r   r   r   r   r   r   r   r  r   r   r  r   needs_subexpr_disposalr}  r  r   r   r  rS	  r  r  r,  r  r   r   rv   r
  )r[   r   r
  plainsize_factorc_multr   	pack_namer  r  create_funcset_item_func	arg_countcounteroffsets                  rU   generate_sequence_packing_code+SequenceNode.generate_sequence_packing_code   s   >[[]F!!E**K&&$++-{::C@@#33a7")K,G,G"GK %%,,,:@&"IK - 06"7KYY*$		Y(>DIIDII"yyI%/	  11++J8JK +	JJ,DII		?TYY??''90; ; < OOFN3*.D'YY  #DII.

Aszz|- . /
 yyI%-R*]j(-T*]#$MPTPYPY$YZZDIIIJJY''9; < OOFN3 !11

-78>$F*19=F

Wfg  /3+9%iil!3!3!5!5OOCJJL#))+>$$T*

!\@VQ(?QV[qQMMOOODHH-/ 0 & 

3

3"{'7'7'C'CJJ''1F1F1H''(?(?J  OOF33^DOOFN3JJVV-D-DEFJJsO (D"rW   c                    > U R                   (       a  [        TU ]	  U5        g U R                   H  nUR	                  U5        M     U R
                  (       a  U R
                  R                  U5        g g rO   )rT  rQ   r  r   r  r   r  )r[   r   r  rT   s      rU   r  +SequenceNode.generate_subexpr_disposal_code5!  s[    &&G248
 yy11$7 !   77=  rW   c                     U R                   (       a  U R                  X5        OU R                  X5        U R                   H  nUR	                  U5        M     UR                  U5        g rO   )r    generate_starred_assignment_code!generate_parallel_assignment_coder?  rw  r  )r[   r   r   r  r   r   r   s          rU   r  %SequenceNode.generate_assignment_codeC!  sO    ""11#<223=''DLL (trW   r  c                    U R                    H  nUR                  U5        M     UR                  [        L =(       d;    UR                  [        [
        4;   =(       d    UR                  R                  (       + n[        U R                   5      S:  nU(       a  U R                  X!US9  O=UR                  S5        U R                  X!U R                   US9  UR                  S5        U R                   H  nUR                  U5        M     [        [        U R                  5      5       H/  nU R                  U   R                  U R                  U   U5        M1     g )N   use_loopr  r   )r?  rt  r   r   r   r   r_  r   (generate_special_parallel_unpacking_coder   (generate_generic_parallel_unpacking_coder@  r  rS	  r   r  )r[   r   r   r   special_unpacklong_enough_for_a_loop
value_noder  s           rU   rd  .SequenceNode.generate_parallel_assignment_codeS!  s%    ''DMM$ (((n4 : XX*i)@@:!$!9!99 	 "%T%8%8!9A!=99$: : < JJsO994..9O : QJJsO55J//5 6s499~&AIIaL11++A.6 'rW   c                    SnSUR                  5       -  nUR                  [        L a  S/nSnUR                  5       (       a  UnOgUR                  [        L a  S/nSnUR                  5       (       a  UnO7SS/nSnSUR                  5       -  nS	UR                  5       -  n	S
U< SU	< S3nUR                  SU-  5        UR                  SUR                  5       -  5        UR                  SU-  5        UR                  S[        U R                  5      -  5        UR                  R                  [        R                  " SS5      5        UR                  S[        U R                  5      [        U R                  5      4-  5        UR                  R                  [        R                  " SS5      5        UR                  S5        UR                  UR                  U R                  5      5        UR                  S5        UR                  S5        [        U5      S:X  a  UR                  SUS   -  5        [        U R                  5       H  u  pUS   S:X  a  UR                  UR!                  5        SU
 S35        UR                  UR#                  UR!                  5       U R                  5      5        UR%                  UR!                  5       UR'                  5       5        M  UR                  UR!                  5        SU
 S35        UR)                  UR!                  5       UR'                  5       5        M     [        U5      S:X  Ga*  UR                  S5        [        U R                  5       H  u  pUS   S:X  a  UR                  UR!                  5        SU
 S35        UR                  UR#                  UR!                  5       U R                  5      5        UR%                  UR!                  5       UR'                  5       5        M  UR                  UR!                  5        SU
 S35        UR)                  UR!                  5       UR'                  5       5        M     UR                  S5        UR                  S 5        U(       d  [        U R                  5       H|  u  pUR                  S!UR!                  5       U
UR#                  UR!                  5       U R                  5      4-  5        UR+                  UR!                  5       UR                  5        M~     GO(UR                  S"5        UR                  S#5        UR                  S$[        U R                  5      < S%S&R-                  U R                   Vs/ s H  nS'UR!                  5       -  PM     sn5      < S(35        UR                  S)[        U R                  5      -  5        UR                  S*UR#                  S+U R                  5      -  5        UR+                  S+[.        5        UR                  S,5        UR                  S5        UR                  S5        UR                  S-5        UR1                  U5        US:X  a  UR                  S5        g XE:X  a  UR                  S5        UR                  R                  [        R                  " S.S5      5        UR                  S/UR                  U R                  5      -  5        UR                  S5        g UR                  S5        U R3                  XU R                  US09  UR                  S5        g s  snf )1Nr	  zlikely(%s != Py_None)r  r  r  r  __Pyx_PySequence_SIZEzlikely(PyTuple_CheckExact(%s))zPyList_CheckExact(%s)r  z) || (r9  rL  zPyObject* sequence = %s;zPy_ssize_t size = %s(sequence);zif (unlikely(size != %d)) {RaiseTooManyValuesToUnpackr  z1if (size > %d) __Pyx_RaiseTooManyValuesError(%d);RaiseNeedMoreValuesToUnpackz9else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);r   r  r7   z(if (likely(Py%s_CheckExact(sequence))) {r   z% = __Pyx_PyList_GetItemRef(sequence, r  z = PyTuple_GET_ITEM(sequence, r  r,   r  z,%s = __Pyx_PySequence_ITEM(sequence, %d); %sr  zPy_ssize_t i;PyObject** temps[r	  r  r  r  zfor (i=0; i < %s; i++) {z7PyObject* item = __Pyx_PySequence_ITEM(sequence, i); %sr   z*(temps[i]) = item;r  RaiseNoneIterErrorz%__Pyx_RaiseNoneNotIterableError(); %srh  )r   r   r   r  r   r   r   r   r   r   r   r   r   r   r  r?  r  r   r  r,  r  r  r  r   r  rk  )r[   r   r   ri  sequence_type_test
none_checkr6   get_size_functuple_check
list_checkr  r   s               rU   rj  5SequenceNode.generate_special_parallel_unpacking_codem!  s    ,s}}>
88y $XN3M  %/"XX#%YN4M  %/"%v.N3M:S]]_LK1CMMOCJ3>
!K

;!334

-?@ 	

4}DE

03tyy>AB))##$@BTU	W

F		NC		NJ, , 	-))##$ACUV	X

NO

4??488,-

3

QR~!#JJANSTDUUV !4!45GAa F*

dkkm_,QRSQTTVWX

4224;;=$((KL  

=

dkkm_,J1#RPQtzz|< 6 ~!#JJz"$T%8%89!!$.JJ$++-0UVWUXXZ[\JJt66t{{}dhhOP$$T[[]DJJLAJJ$++-0NqcQSTUOODKKM4::<@ : JJsO

7$T%8%89

IKKM1++DKKM488DMF F G tyy9	 : JJsOJJ'JJD''(D<O<OP<OD%$++-/<OPQS T JJ1C8K8K4LLMJJP''9; <OOFN3JJ,-JJsOJJsO

8""4($JJsO-JJz"--''(<>PQSJJ>QUQYQYAZZ[JJsOJJz"994.. : CJJsO3 Qs   ]c                 6   UR                   R                  [        R                  " SS5      5        UR                   R                  [        R                  " SS5      5        UR	                  S5        U(       a^  UR	                  S[        U R                  5      < SSR                  U Vs/ s H  nSUR                  5       -  PM     sn5      < S	35        UR                  R                  [        S
S9nUR	                  U< SUR                  5       < SUR                  XpR                  5      < 35        UR                  U[        5        UR!                  U5        UR                  R                  U R"                  SS9nUR	                  U SU S35        UR%                  S5      n	U< SU< S3n
U(       a{  UR	                  S[        U5      -  5        UR'                  SU
-  5        UR)                  U	5        UR                  S[        5        UR	                  S5        UR	                  S5        Oj[+        U5       H[  u  pUR'                  SUUR                  5       U
UR                  5       4-  5        UR)                  U	5        UR-                  U5        M]     U(       a  UR                   R                  [        R                  " SS5      5        UR/                  U R                  SU
[        U5      4-  5        UR	                  SU-  5        UR1                  U[        5        UR%                  S5      nUR)                  U5        UR3                  U	5        UR1                  U[        5        UR	                  SU-  5        UR	                  S5        UR	                  UR5                  U R                  5      5        UR3                  U5        UR                  R7                  U5        U(       a  UR                  R7                  U5        S nU$ s  snf )Nrs  r  
IterFinishzPy_ssize_t index = -1;rt  r	  r  r  r  Tr  r  r=  Fr  r  unpacking_failedr  r9  z$for (index=0; index < %s; index++) {z*PyObject* item = %s; if (unlikely(!item)) r   z*(temps[index]) = item;r   z(index = %d; %s = %s; if (unlikely(!%s)) UnpackItemEndCheckz$__Pyx_IternextUnpackEndCheck(%s, %d)r  unpacking_donezCif (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);)r   r   r   r   r   r   r?  r  r  r  r  r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r  )r[   r   r   r?  ri  	terminater   iterator_tempiternext_funcunpacking_error_labelunpack_coder  unpacking_done_labels                rU   rk  5SequenceNode.generate_generic_parallel_unpacking_code!  sb   ))##$ACUV	X))##L2DE	G

+,JJD''(NKND%$++-/NKLN O 44^PT4U

''xx@B	C
 	~6""4(44T5M5MZ_4`

o <<I?"N	

 !%/A B"/?JJ=N@SSTHHAKOPMM/0OOFN3JJ01JJsO$^4>#	B' '( 34$$T* 5 --''(<>PQS!!$((,RN#V% -% & JJ|m34!!-@#~~.>?*+,-m^<

<-/0

XY

4??488,-+,##M2NN''6 M{ Ls   +Pc                 
   [        U R                  5       HH  u  p4UR                  (       d  M  U R                  U   nU R                  S U nU R                  US-   S  n  O    eS nU(       a  U H  n	U	R	                  U5        M     UR                  S5        U R                  X!USSS9n[        U5       H%  u  p9U R                  U   n
U
R                  U5        M'     UR                  S5        UR	                  U5        UR                  5       nUR                  U< SU(       d1  UR                  5       (       a  UR                  [        [        4;   a  SOS	< S
U=(       d    UR                  5       < SUR                  XR                   5      < 35        UR#                  U5        U(       a2  UR%                  U[        5        UR&                  R)                  U5        OUR+                  U5        U(       Ga  UR,                  R/                  [0        R2                  " SS5      5        UR&                  R5                  [6        R8                  SS9nUR                  U< SU< S35        UR                  SU[;        U5      4-  5        UR                  S[;        U5      UUR=                  U R                   5      4-  5        UR                  S5        US S S2    H  n	U	R	                  U5        M     [        [?        US S S2   U R                  S S S2   5      5       H  u  nu  pUR                  S5        UR                  SU	R                  5       XUS-   4-  5        UR                  SU-  5        UR                  S5        UR                  SU	R                  5       XUS-   4-  5        UR                  S5        U	R#                  U5        UR                  U5        M     UR                  S5        UR&                  R5                  [        SS9nUR                  SXU[;        U5      UR                  XR                   5      4-  5        URA                  U[        5        UR&                  R)                  U5        URC                  U[        5        UR                  U< SU< SU< S35        UR                  S5        UR                  SU-  5        UR&                  R)                  U5        UR                  S5        [        U R                  5       H$  u  p4URE                  U R                  U   U5        M&     g )Nr,   Fr  T)ri  r  r   r  __Pyx_PySequence_ListKeepNewPySequence_Listr  r=  rs  r  r  z = __Pyx_PyList_GET_SIZE(r  zif (unlikely(%s < %d)) {z)__Pyx_RaiseNeedMoreValuesError(%d+%s); %srX  z#if CYTHON_COMPILING_IN_CPYTHONz!%s = PyList_GET_ITEM(%s, %s-%d); z((PyVarObject*)%s)->ob_size--;r  z'%s = __Pyx_PySequence_ITEM(%s, %s-%d); r  z #if !CYTHON_COMPILING_IN_CPYTHONz*%s = PySequence_GetSlice(%s, 0, %s-%d); %srh  r	  zCYTHON_UNUSED_VAR(%s);)#r  r   r   r?  rt  r   rk  r@  r  r  r  r   r   r   r   r   r   r  r  r  r  r  r   r   r   r   r  r   r  r   r   r  r  r
  r  )r[   r   r   r  r  starred_targetunpacked_fixed_items_leftunpacked_fixed_items_rightr  r   rn  target_listlength_tempcoerced_argsublist_temps                  rU   rc  -SequenceNode.generate_starred_assignment_code"  s   		*FA~~~!%!4!4Q!7-1-@-@!-D)-1-@-@1-F* + 5$1d# 2JJsO II4 J 0M %%>?!88;
33D9 @ JJsO%$++-

%#*<*<*>*>388P^`iOjCj +&' ,S]]_,##K:< 	= 	&&t,!!-@NN''6&&t,%--''(EGYZ\..66z7S7S`e6fKJJKUVJJ1[#F`Ba4bbcJJB./*F, , - JJsO24R48d# 9*3C8RSWUWSW8X8<8S8STXVXTX8Y5[ +\&&D

<=

>NN$k!BE E F 

;kIJ

7#

DNN$k!HE E F

8$$$T*44T:+\ JJ9:>>77SW7XLJJC;<V8W''hh?GA A B OOL.9NN''4OOK8JJ\<XYJJwJJ/,>?NN''5JJx 		*FA(()D)DQ)GN +rW   c                     U R                    H  nUR                  U5        M     U R                  (       aI  U R                   H  nUR                  U5        M     U R                   H  nUR                  U5        M     g g rO   )r   r#  r?  r@  r[   r   r  s      rU   r#  SequenceNode.annotateo"  sb    99CLL **T" +22T" 3 rW   )
rA  r   r@  r  r   rT  r(  r   r   r?  r  r  r  r  )$r^   r_   r`   ra   r   r   r?  r   r(  rT  r  r"  rP  rV  r-  r8  r5  r  r`  r  r^  r  r  r   ra  r  r   r  r  rd  rj  rk  rc  r#  rb   rc   rd   s   @rU   r  r  H   s     &HNKD"
C0
$S0.+dL> INGK	 %--j.B.B!!##D**C*CTJ$/ 
64cJGRROh# #rW   r  c                   f    \ rS rSr\rSrSrS rSS jr	S r
S rS rS	 rS
 rS rS rS rS rSrg)r^  iy"  FrO
  c                 6   U R                   (       d  U R                  (       d  [        $ U R                   Vs/ s H  o"R                  U5      PM     nn[	        S U 5       5      (       a  [        $ UR                  U R                  U5      R                  $ s  snf )Nc              3      #    U  HJ  nUR                   =(       d2    UR                  =(       d    UR                  =(       d    UR                  v   ML     g 7frO   )rv   r   rY  r  )rh   r   s     rU   rk   'TupleNode.infer_type.<locals>.<genexpr>"  sB      &$4 b4#:#:bd>Q>QbUYUbUbb$s   AA)r   r   r   r   rr   rX	  r   r   )r[   ry   r  r  s       rU   r   TupleNode.infer_type"  sx    49948II>IS^^C(I	> &$& & &%%dhh	:???	 ?s   Bc                    U R                   (       a  SU l         U R                  (       a  SU l        [        U R                  5      S:X  a  SU l        SU l         U $ U(       dT  [        U R                  5       H;  u  p4UR                  (       a  SUl        UR                  U5      U R                  U'   M=     U R                  (       df  [        S U R                   5       5      (       dE  UR                  U R                  S U R                   5       5      R                  U l        SU l        U $ [        R                  XSS9nUR                  U5      nUR                   (       d  U$ [#        S UR                   5       5      (       d  U$ UR                  (       aD  UR                  R                   (       a9  [%        UR                  R&                  [(        5      (       a  SUl        SUl         U$ UR                  R                  R*                  (       dE  UR                  R                  R,                  (       d   UR                  R/                  U5      Ul	        SUl        SUl        U$ )	NFr   Tc              3      #    U  Hh  nUR                   =(       dP    UR                  R                  =(       d3    UR                  R                  =(       d    UR                  R                  v   Mj     g 7frO   )r   r   rv   r   r  r	  s     rU   rk   *TupleNode.analyse_types.<locals>.<genexpr>"  sN      .#,C s388+?+?s388C^C^sbebjbjbsbss#,r$  c              3   8   #    U  H  oR                   v   M     g 7frO   r+  r	  s     rU   rk   r  "  s     9Xis((ir2  r,   r3  c              3   8   #    U  H  oR                   v   M     g 7frO   )r   )rh   childs     rU   rk   r  "  s     ;##r2  )r   is_partly_literalr   r   r  r  r   r  rV  r   rr   rX	  r   r   r  r8  r   rr  r   r   r   rv   rD  rk  )r[   ry   r)  r  r  r   s         rU   rV  TupleNode.analyse_types"  s   ??#DO!!%*D"tyy>Q DL"DOK#DII.>>48C1"005		! /    .#'99. . ...txx9Xdii9XY^^DIDLK))$4)H33C8++K;;;;K  ++4++;;SAA DL"DO 	 ##((44T=M=M=R=R=Y=Y#'#3#3#F#Fs#K DL%)D"rW   c                    U R                   (       d  g U R                    Vs/ s H  o"R                  U5      PM     nn[        S U 5       5      (       a  g UR                  U R                  U5      nUR
                  $ s  snf )Nc              3   (   #    U  H  oS L v   M
     g 7frO   rY   )rh   ri   s     rU   rk   ,TupleNode.analyse_as_type.<locals>.<genexpr>"  s     -*QDy*s   )r   r  rr   rX	  r   r   )r[   ry   r  r   r   s        rU   r  TupleNode.analyse_as_type"  sg    yy:>))D)3))#.)
D-*---&&txx<zz	 Es   A=c                 ~   U R                   R                  (       a  UR                  (       a5  U R                   R                  UR                  :X  a  U R                  X5      $ U[        L d	  U[
        L a]  U R                   Vs/ s H  o3R                  U5      PM     nn[        U R                  U[        U R                  SS9R                  USS9$ U R                  U5      R                  X5      $ UR                  (       a"  U R                  (       d  U R                  X5      $ [        R                  XU5      $ s  snf )Nr,   )r   r   r   r  Tr3  )r   r}  rC  r-  r   r   r   rk  r^  r   r   rV  r8  r  )r[   rP  ry   r  r,  s        rU   r8  TupleNode.coerce_to"  s    99!!diinn&E,,X;;Z'8~+EGKyyQy 6 6s ;yQ HH%# $ 0 0  -4-89 ..s3==hLL(8(8((77))$#>>  Rs   D:c                     [        U R                  U R                  U R                  S9n[	        U R
                  [        5      (       a  [        U R
                  5      Ul        U$ N)r   r   )r  r   r   r   r   r   r   r  r[   ri   s     rU   as_listTupleNode.as_list"  sI    TXXDII4;K;KLd**E22 $T%9%9 :ArW   c                     gr  rY   rZ   s    rU   r  TupleNode.is_simple"      rW   c                     gr  rY   rZ   s    rU   rw  TupleNode.nonlocally_immutable"  r  rW   c                     U R                   $ rO   r  rZ   s    rU   r  TupleNode.calculate_result_code"  r  rW   c                 v    [        U R                   Vs/ s H  oR                  PM     sn5      U l        g s  snf rO   )r   r   r   r[   r  s     rU   r8  #TupleNode.calculate_constant_result"  s3    $/3yy&:/8##y&:  ; &:   6c                     U R                  U5      n [        U5      $ ! [         a  nU R                  U5         S nAg S nAff = frO   )r  r   r  rI  )r[   rC  r  rH  s       rU   rD  TupleNode.compile_time_value"  sB    --d3	-=  	-))!,,	-s   
 
A>Ac                 b   [        U R                  5      S:X  a%  UR                  [        R                  5      U l        g U R                  (       d  U R                  (       Ga"  [        U R                  U R                  (       a  U R                  OS /U R                  -   5      nUR                  SUS9nUR                  U5      nUbP  UR                  U R                  5        U R                  XCU R                  (       + S9  UR!                  U["        5        U R                  (       a  X0l        g U R                  R                  R$                  (       a  UR&                  R)                  [*        R,                  " SS5      5        UR/                  U R1                  5       < SU< SU R                  R1                  5       < S	UR3                  U R1                  5       U R                  5      < 35        U R5                  U5        g UR/                  U R1                  5       < S
U< SU R                  R7                  5       < S	UR3                  U R1                  5       U R                  5      < 35        U R5                  U5        g SU R                  R8                  l        U R                  U5        g )Nr   r   r  )rU  PySequenceMultiplyr  z = __Pyx_PySequence_Multiply(r  r=  z = PyNumber_Multiply(T)r   r   r  r   empty_tuplerw  r   r  r   r   r   r  r  r  r   r^  r  r   rD  r   r   r   r   r   r  r   r  r   r   r4  )r[   r   r  tuple_targetr  s        rU   rG  !TupleNode.generate_operation_code"  s   tyy>Q#889K9KLD??d444 'tyyt43C3C\`2adhdmdm2mnI,,W	,JL99,GJ%##DHH-33JX\XgXgTg3h&&|^D#/ !!&&--  11++,@BTUW

KKM<1A1A1H1H1J++DKKM488D  $$T*

KKM<1A1A1K1K1M++DKKM488D  $$T*#'DIIOO //5rW   )r   r   r  r  rw  r   Nr  )r^   r_   r`   ra   r   r   r  r@  r   rV  r  r8  r  r  rw  r  r8  rD  rG  rb   rY   rW   rU   r^  r^  y"  sM     D-K@)V?( ;-"6rW   r^  c                   f    \ rS rSr/ r\rSrSrS r	S r
S rS rS rS	 rS
 rS rS rS rS rSrg)r  i#  FzConstructing Python listc                     grX  rY   r   s     rU   ro  ListNode.type_dependencies #  ra
  rW   c                     [         $ rO   )r   r   s     rU   r   ListNode.infer_type##      rW   c                     U R                    H  nUR                  (       d  M  SUl        M     [        R	                  X5      nUR                  U5      $ r  )r   r   r  r  r]  rk  )r[   ry   r  r   s       rU   r]  ListNode.analyse_expressions'#  sD    99C~~~04-  //:&&s++rW   c                 
   [        SS9 n[        U R                  5      U l        [        R                  X5      nS S S 5        WWl        UR                  (       a  SU l        UR                  U5      nU$ ! , (       d  f       N@= fNTr  )
r   r  r   original_argsr  rV  obj_conversion_errorsr{  r  r8  )r[   ry   errorsr   s       rU   rV  ListNode.analyse_types.#  sj    &&!%diiD--d8D ' &,"#'D 33C8 '&s   0A44
Bc                    UR                   (       a`  U R                   H  n[        U5        M     / U l        U R                  R	                  U5      (       d  [        U R                  SU-  5        U $ UR                  (       d  UR                  (       Gao  UR                  [        R                  LGaQ  [        U R                  5      nU R                  (       a  [        U R                  R                   ["        5      (       aM  U R                  R                   S::  a  [        U R                  SU-  5        O2X@R                  R                   -  nO[        U R                  SU-  5        UR                  n[        R$                  " XT5      U l        ['        [        U R(                  5      5       HQ  nU R                  U   n[        U[*        5      (       a  UR,                  nUR/                  XR5      U R                  U'   MS     U $ UR0                  (       a2  [3        U R                  U [        R4                  S9R/                  X5      $ U R                  (       a  [        U R                  SU-  5        U $ UR6                  (       Ga1  [        U R                  5      [        UR8                  R:                  5      :  a  [        U R                  SU-  5        O[        U R                  5      [        UR8                  R:                  5      :  a  [=        U R                  SU-  S	5        [?        [A        U R(                  UR8                  R:                  5      5       HR  u  nu  px[        U[*        5      (       a  UR,                  nUR/                  UR                  U5      U R                  U'   MT     Xl        U $ URB                  (       a  U RE                  X5      $ [F        U l        [        U R                  SU-  5        U $ )
NzCannot coerce list to type '%s'r   z4Cannot coerce non-positively multiplied list to '%s'z1Cannot coerce dynamically multiplied list to '%s')r3	  r   z%Cannot coerce multiplied list to '%s'zToo many members for '%s'zToo few members for '%s'r,   )$rv   r  r   r   rG  r   r   ru  r0  r1  r   c_void_typer   r   r   r   r   r   r  rS	  r  rF  r  r8  r  TypecastNoder   r
  rx  r  r   r  r  r}  r-  r3   )	r[   rP  ry   rz   r  r1  r  r  r	  s	            rU   r8  ListNode.coerce_to8#  s   11S! 2)+D&99''11dhh AH LMN M 8???8J8JR\RhRh8htyy>Ld..>>DD''771<dhh(^ai(ij$(8(8(H(HH$(($WZb$bc **I"--iFDI3t1123iilc#566''C"}}Y<		!	 44 + ""$Z=V=VWaabjpp$((ChNO" ! 499~HNN$>$> ??dhh ;h FGtyy>C(B(B$CCDHH&@8&KQO(1#d6H6H(..JdJd2e(f$A}!#'9::!gg#&==c#BDIIaL )g !I  ((77"DI$((=HIrW   c                     U $ rO   rY   rZ   s    rU   r  ListNode.as_listg#  r  rW   c                     [        U R                  U R                  U R                  S9n[	        U R
                  [        5      (       a  [        U R
                  5      Ul        U$ r  )r^  r   r   r   r   r   r  r   r  s     rU   as_tupleListNode.as_tuplej#  sI    dhhTYYD<L<LMd**D11 %d&:&: ;ArW   c                 4   U R                   R                  (       ah  U R                  (       a,  UR                  R	                  U R                   SSSS9U l        g UR                  R	                  U R                   SSS9U l        g [        R                  X5        g )NFT)r  staticreusable)r  r  )r   ru  r  r  r  r  r  r  r  s     rU   r  ListNode.allocate_temp_resultp#  sz    99##!%!=!=II%u "> "N "&!=!=II%% "> "A --d9rW   c                     U R                   (       a
  [        5       eU R                   Vs/ s H  oR                  PM     snU l        g s  snf rO   )r   r   r   r   r  s     rU   r8  "ListNode.calculate_constant_result~#  s<    ,+/99 6+4C9 6  6s   Ac                     U R                  U5      nU R                  (       a  X R                  R                  U5      -  nU$ rO   )r  r   rD  )r[   rC  ls      rU   rD  ListNode.compile_time_value#  s9    ((.!!44T::ArW   c                    U R                   R                  (       a0  U R                   H  n[        U5        M     U R	                  U5        g U R                   R
                  (       Ga  U R                  (       a  UR                  S5        UR                  S[        R                  -  5        UR                  SR                  [        R                  U R                  R                  5       S95        S[        U R                  5      [        R                  4-  nOSn[        U R                  5       H  u  pEUR                   R
                  (       a  UR                  R!                  ["        R$                  " SS5      5        UR                  S	U R                  5       < S
U< U< SUR                  5       < SU R                  5       < S3
5        M  UR                  U R                  5       < S
U< U< SUR                  5       < S35        M     U R                  (       a#  UR                  S5        UR                  S5        g g U R                   R&                  (       a  [)        U R                  U R                   R*                  R,                  5       HH  u  pVUR                  U R                  5       < SUR.                  < SUR                  5       < S35        MJ     g [1        S5      e)Nr  zPy_ssize_t %s;z&for ({i} = 0; {i} < {count}; {i}++) {{)r  countz+ (%d * %s)r&  r  r  r  r  r  r  z[0]));z] = r  r   r   r  zList type never specified)r   rv   r  r   r^  ru  r   r   r   r  r  r  r   r   r  r   r   r   r   r
  r  rx  r  r   r   )r[   r   rz   r]  r  r  r	  s          rU   rG   ListNode.generate_operation_code#  s   99  11S! 2//5YY

3

+f.E.EEF

CJJ--T5E5E5L5L5N K P Q&#dii.&:Q:Q)RR#DII.88$$$$55k6M6MN^`o6pqJJq&

dkkm  
 JJ

	 & ' / 

3

3   YY  "499diioo.I.IJ

KKMLLJJL" #  K   ;<<rW   )r   r  r  r  r  r   N)r^   r_   r`   ra   r  r   r   r  r@  ro  r   r]  rV  r8  r  r  r  r8  rD  rG  rb   rY   rW   rU   r  r  #  sQ     DO,K,-^:6%=rW   r  c                   X    \ rS rSrS/rSr\rS rS r	S r
S rS rS	 rS
 rS rS rSrg)ComprehensionNodei#  loopTc                     U R                   $ rO   r+  r   s     rU   r   ComprehensionNode.infer_type#      yyrW   c                    X R                   l        U R                  U5        [        U R                  [
        R                  5      (       ak  [        U R                  R                  [        5      (       d   U R                  R                  5       eU R                  R                  R                  S U5        g [        U R                  [
        R                  5      (       d   U R                  5       eg rO   )
r  r
  rv  r   r  r   _ForInStatNoder  rp  ForFromStatNoder   s     rU   ry  &ComprehensionNode.analyse_declarations#  s    !dii!5!566dii00.AAU499CUCUUAII))$4dii)>)>??JJ?rW   c                 :    U R                   R                  U5        g rO   )r  ry  r   s     rU   r|  -ComprehensionNode.analyse_scoped_declarations#  s    		&&s+rW   c                 h    U R                   (       d   U R                  R                  U5      U l        U $ rO   rs  r  r]  r   s     rU   rV  ComprehensionNode.analyse_types#  s&    ##		55c:DIrW   c                 h    U R                   (       a   U R                  R                  U5      U l        U $ rO   r  r   s     rU   r  ,ComprehensionNode.analyse_scoped_expressions#  s&    		55c:DIrW   c                     gr  rY   rZ   s    rU   r  ComprehensionNode.may_be_none#  r   rW   c                 &    U R                  U5        g rO   rF  r  s     rU   r  &ComprehensionNode.generate_result_code#  rI  rW   c           
         U R                   [        R                  L a  SnOXU R                   [        R                  L a  SnO8U R                   [        R                  L a  SnO[        SU R                   -  5      eUR                  U R                  5       < SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        U R                  R                  U5        g )NzPyList_New(0)zPySet_New(NULL)zPyDict_New()z"illegal type for comprehension: %sr  rh  )r   r   r   r   r   r   r   r  r   r   r  r  generate_execution_code)r[   r   create_codes      rU   rG  )ComprehensionNode.generate_operation_code#  s    99))))KYY'***+KYY'+++(K Dtyy PQQ

KKM;##DKKM488<> 	? 	T"		))$/rW   c                 :    U R                   R                  U5        g rO   )r  r#  r  s     rU   r#  ComprehensionNode.annotate#      		4 rW   )r  N)r^   r_   r`   ra   r   r  r=  r   r   ry  r|  rV  r  r  r  rG  r#  rb   rY   rW   rU   r  r  #  sC     (KG$OK,

+0 !rW   r  c                   N    \ rS rSrS/rSr\R                  rS r	S r
S rS rSrg)	ComprehensionAppendNodei#  r  Nc                     U R                   R                  U5      U l         U R                   R                  R                  (       d   U R                   R	                  U5      U l         U $ rO   )r  r]  r   rv   rk  r   s     rU   r]  +ComprehensionAppendNode.analyse_expressions#  sD    II11#6	yy~~))		44S9DIrW   c           
         U R                   R                  [        L a3  UR                  R	                  [
        R                  " SS5      5        SnOBU R                   R                  [        L a  SnO"[        SU R                   R                  -  5      eU R                  R                  U5        UR                  UR                  U< SU R                   R                  5       < SU R                  R                  5       < S3U R                  5      5        U R                  R                  U5        U R                  R!                  U5        g )	NListCompAppend
Optimize.c__Pyx_ListComp_Append	PySet_Addz'Invalid type for comprehension node: %sr  , (PyObject*)r9  )r
  r   r   r   r   r   r   r   r   r  r  r   r   r  r   r  r  r	  s      rU   r  /ComprehensionAppendNode.generate_execution_code#  s    ;;y(--''(8,GI.H[[)"H9DKK<L<LLN N 			**40

4%%KK II' xx	 	
 			((.		T"rW   c                 :    U R                   R                  X5        g rO   )r  r  r  s      rU   r  5ComprehensionAppendNode.generate_function_definitions$  s    		//:rW   c                 :    U R                   R                  U5        g rO   )r  r#  r  s     rU   r#   ComprehensionAppendNode.annotate$  r  rW   )r  )r^   r_   r`   ra   r   r
  r   r  r   r]  r  r  r#  rb   rY   rW   rU   r   r   #  s/     (KF  D#(;!rW   r   c                   4    \ rS rSrSS/rS rS rS rS rSr	g	)
DictComprehensionAppendNodei$  key_expr
value_exprc                    U R                   R                  U5      U l         U R                   R                  R                  (       d   U R                   R	                  U5      U l         U R
                  R                  U5      U l        U R
                  R                  R                  (       d   U R
                  R	                  U5      U l        U $ rO   )r  r]  r   rv   rk  r  r   s     rU   r]  /DictComprehensionAppendNode.analyse_expressions$  s    99#>}}!!-- MM<<SADM//==cB##//"oo@@EDOrW   c                 H   U R                   R                  U5        U R                  R                  U5        UR                  UR	                  SU R
                  R                  5       < SU R                   R                  5       < SU R                  R                  5       < S3U R                  5      5        U R                   R                  U5        U R                   R                  U5        U R                  R                  U5        U R                  R                  U5        g )Nro
  r  r9  )
r  r  r  r   r   r
  r  r   r  r  r  s     rU   r  3DictComprehensionAppendNode.generate_execution_code#$  s    ..t4006

4%%KK MM  "OO""$' xx	 	
 	,,T2  &..t4""4(rW   c                 p    U R                   R                  X5        U R                  R                  X5        g rO   )r  r  r  r  s      rU   r  9DictComprehensionAppendNode.generate_function_definitions0$  s&    33C>55c@rW   c                 p    U R                   R                  U5        U R                  R                  U5        g rO   )r  r#  r  r  s     rU   r#  $DictComprehensionAppendNode.annotate4$  s&    t$  &rW   )r  r  N)
r^   r_   r`   ra   r   r]  r  r  r#  rb   rY   rW   rU   r  r  $  s!    |,K)A'rW   r  c                   Z   ^  \ rS rSrS/rSrSrSr\r	SU 4S jjr
S rS rS rS	 rS
rU =r$ )InlinedGeneratorExpressionNodei9$  genNTc                    > UR                   R                  nSUl        UbJ  U[        [        [
        4;   d   U5       eX5l        UR                  [        X[        R                  5      US9  [        TU ]0  " U4SU0UD6  g )NTr  r  )r	  gbody
is_inlinedr   r   r   inlined_comprehension_typer(  r  r   retval_cnamerQ   r  )r[   r   r  comprehension_typer  r  rT   s         rU   r  'InlinedGeneratorExpressionNode.__init__J$  s~    "")%)Xy)II]K]]I/A,MM'ATATU'   	0#00rW   c                      U R                   S;  $ )N)rr   rr  r  )	orig_funcrZ   s    rU   r  *InlinedGeneratorExpressionNode.may_be_noneV$  s    ~~%===rW   c                     U R                   $ rO   r+  r   s     rU   r   )InlinedGeneratorExpressionNode.infer_typeY$  r  rW   c                 F    U R                   R                  U5      U l         U $ rO   )r  r]  r   s     rU   rV  ,InlinedGeneratorExpressionNode.analyse_types\$  s    88//4rW   c           
          UR                  U R                  5       < SU R                  R                  5       < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )Nz$ = __Pyx_Generator_GetInlinedResult(r=  )r   r  r  r   r   r  r  s     rU   r  3InlinedGeneratorExpressionNode.generate_result_code`$  sS    

KKM488??,##DKKM488<> 	? 	T"rW   )r  rO   )r^   r_   r`   ra   r   r%  r
  r  r   r   r  r  r   rV  r  rb   rc   rd   s   @rU   r  r  9$  s>     wHIFGD
1># #rW   r  c                   \    \ rS rSrSrS/rSrSrS rS r	S r
S	 rS
 rS rS rS rS rSrg)r6  ig$  z
Merge a sequence of iterables into a set/list/tuple.

The target collection is determined by self.type, which must be set externally.

args    [ExprNode]
r   TzConstructing Python collectionc                    U[         [        4;   ag  U(       a`  US   R                  (       aL  US   R                  [         La6  [	        US   R
                  US   R                  SUS   R                  S9US'   [        R                  XX#S9  g )Nr   T)r   r  r   )r   r   )
r   r   r   r   r  r   r   r   r   r  )r[   r   r   r   s       rU   r  MergedSequenceNode.__init__s$  sq    Iz**tQ8W8WAw||9,"47;;T!W\\4]abc]d]p]pqQ$$:rW   c                    / nU R                    H  nUR                  (       a-  UR                  (       a  UR                  R                  S::  a  MA  UR                  (       d  UR                  (       a  S UR                    5       nOUR                  nUR                  U5        M     U R                  [        L a  [        U5      nO4U R                  [        L a  [        U5      nOU R                  [        L d   eXl        g )Nr   c              3   8   #    U  H  oR                   v   M     g 7frO   rG  r	  s     rU   rk   ?MergedSequenceNode.calculate_constant_result.<locals>.<genexpr>$  s     B	,,	r2  )r   r   r   r   r  r  r   r   r  r   r   r   )r[   r  r   r  s       rU   r8  ,MergedSequenceNode.calculate_constant_resultz$  s    IID++0@0@##33q8""d&B&BB		B,,MM%   99 [FYY*$6]F99	)))%rW   c                 l  ^ / nU R                    H  nUR                  (       a2  UR                  (       a!  UR                  R                  T5      S::  a  MF  UR                  (       d  UR                  (       a  U4S jUR                    5       nOUR                  T5      nUR                  U5        M     U R                  [        L a   [        U5      nU$ U R                  [        L a  [        U5      nU$ U R                  [        L d   eU$ ! [         a  nU R                  U5         S nAU$ S nAff = f)Nr   c              3   D   >#    U  H  oR                  T5      v   M     g 7frO   )rD  )rh   r  rC  s     rU   rk   8MergedSequenceNode.compile_time_value.<locals>.<genexpr>$  s     K#//55s    )r   r   r   rD  r  r  r   r   r  r  rI  r   r   r   )r[   rC  r  r   r  rH  s    `    rU   rD  %MergedSequenceNode.compile_time_value$  s   IID++0@0@##66t<A""d&B&BKK//5MM%   99 1V 	 YY*$6]F  99	)))  1--a00
 1s   	D 
D3D..D3c                     grX  rY   r   s     rU   ro  $MergedSequenceNode.type_dependencies$  ra
  rW   c                     U R                   $ rO   r+  r   s     rU   r   MergedSequenceNode.infer_type$  r  rW   c                 P   U R                    Vs/ s H2  nUR                  U5      R                  U5      R                  S5      PM4     nn[	        U5      S:X  a!  US   R
                  U R
                  L a  US   $ U R
                  [        [        [        4;   d   eX0l         U $ s  snf )Nz2argument after * must be an iterable, not NoneTyper,   r   )	r   rV  rk  r  r   r   r   r   r   )r[   ry   r  r   s       rU   rV   MergedSequenceNode.analyse_types$  s    
 yy	
 ! c"55c:LLDF !	 	 
 t9>d1glldii77NyyXy*====	
s   9B#c                     gr  rY   rZ   s    rU   r  MergedSequenceNode.may_be_none$  r   rW   c                 	   UR                  U R                  5        U R                  U5        U R                  [        L n[        U R                  5      n[        U5      nUR                  U5        U(       a  UR                  (       d+  U(       dk  UR                  (       aZ  UR                  [        L aG  UR                  U R                  5       < SUR                  5       < S35        UR                  U5        OUR                  U R                  5       < SU(       a  SO2UR!                  5       (       a  UR                  ["        [        4;   a  SOS< SUR                  5       < SUR%                  U R                  5       U R                  5      < 35        U R'                  U5        UR)                  U5        UR+                  U5        [-        5       nU(       a  SnS	nOS
nSnU GH  nU(       a"  UR                  (       d3  UR                  (       d"  UR                  (       a  UR.                  (       d  U(       d"  UR                  (       a  UR1                  S5        UR                   Hz  nUR                  U5        UR3                  UR                  U< SU R                  5       < SUR                  5       < S35        UR)                  U5        UR+                  U5        M|     GM  U(       a  UR1                  S5        OUR1                  S5        UR                  U5        UR3                  UR                  U< SU R                  5       < SUR                  5       < S35        UR)                  U5        UR+                  U5        GM     U R                  [4        L a  UR                  S5        UR                  S[6        R8                  < SU R                  5       < S35        UR;                  U R                  5       ["        5        UR                  U R                  5       < S[6        R8                  < SUR%                  U R                  5       U R                  5      < 35        U R'                  U5        UR                  S5        [=        U5       H/  n	UR>                  RA                  [B        RD                  " U	6 5        M1     g )Nr  r  	PySet_Newr  r  r  r=  r  __Pyx_PySet_Updater  __Pyx_PyList_Extend)r  r  r  r9  )PySet_Updatez
Builtins.c)
ListExtendr  r  r	  z = PyList_AsTuple(r  rh  r   )#r  r   r  r   r   r6  r   r7  r  r  r   r   r   r  r   r  r  r   r   r  r  r  r  r   r  r  r   r   r  r
  r  r   r   r   r   )
r[   r   is_setr   r   rs
  add_funcextend_funcr  rt
  s
             rU   r  +MergedSequenceNode.generate_evaluation_code$  s[   dhh!!$'h&DIIDz%%d+t**t;;		Y@VJJT[[]DNN4DEF..t4JJ%;?;N;N;P;PUYU^U^cqs|b}U}7*+  ''txx@B C   &''-%"H.K.H/KDD//43O3O11$:J:J$))KK @A99C006))#'' 4) * ..t4NN4( % :;89))$/!!$(( -" # ''-OOD!5 8 99
"JJsOJJ''   OODKKM>:JJ''''txx@B C   &JJsOWoF--k.E.Ev.NO &rW   c                 L    U R                    H  nUR                  U5        M     g rO   )r   r#  rw
  s      rU   r#  MergedSequenceNode.annotate%  s    IIDMM$ rW   r   r   N)r^   r_   r`   ra   r  r   r  r@  r  r8  rD  ro  r   rV  r  r  r#  rb   rY   rW   rU   r6  r6  g$  sJ     xHG2K;&*."KPZ rW   r6  c                   H    \ rS rSrSrS/r\rSrSr	S r
S rS rS	 rS
 rSrg)SetNodei%  z
Set constructor.
r   TzConstructing Python setc                     [        [        U R                  5      5       HA  nU R                  U   nUR                  U5      nUR	                  U5      U R                  U'   MC     [
        U l        SU l        U $ r  )rS	  r   r   rV  rk  r   r   r  )r[   ry   r  r  s       rU   rV  SetNode.analyse_types%  sc    s499~&A))A,C##C(C11#6DIIaL ' 	rW   c                     gr  rY   rZ   s    rU   r  SetNode.may_be_none$%  r   rW   c                 d    U R                    Vs1 s H  oR                  iM     snU l        g s  snf rO   rL  r  s     rU   r8  !SetNode.calculate_constant_result'%  s$    ?CyyIy 3 3yIIs   -c                     U R                    Vs/ s H  o"R                  U5      PM     nn [        U5      $ s  snf ! [         a  nU R	                  U5         S nAg S nAff = frO   )r   rD  r  r  rI  )r[   rC  r  r  rH  s        rU   rD  SetNode.compile_time_value*%  s[    :>))D)3((.)D	-v; E  	-))!,,	-s   7
< 
A!AA!c           	         U R                    H  nUR                  U5        M     U R                  U5        UR                  U R	                  5       < SUR                  U R	                  5       U R                  5      < 35        U R                  U5        U R                    Hf  nUR                  U R                  SU R	                  5       < SUR                  5       < S35        UR                  U5        UR                  U5        Mh     g )Nz = PySet_New(0); z
PySet_Add(r  r9  )r   r  r  r   r  r   r   r  r  r   r  r  r  s      rU   r   SetNode.generate_evaluation_code1%  s    99C((. !!$'

''txx@B	C 	T"99C!!'+{{}cmmoFH &&t,NN4  rW   )r   r  r   N)r^   r_   r`   ra   r  r   r   r   r  r@  rV  r  r8  rD  r  rb   rY   rW   rU   rN  rN  %  s9     xHDN+KJ-!rW   rN  c                      ^  \ rS rSrS/rSrSr\rSr	Sr
/ r\S 5       rS rS rS	 rS
 rS rS rU 4S jrS rSrS rS rS rSrU =r$ )r	  iB%  r	  r,   FTc                 V    U " UU VVs/ s H  u  p4[        XUS9PM     snnS9$ s  snnf )Nr	  r	  )r	  )rS   r   pairskr  s        rU   
from_pairsDictNode.from_pairsS%  s;    3>C)E>CdaSq1e)E F 	F )Es   %c                 v    [        U R                   Vs/ s H  oR                  PM     sn5      U l        g s  snf rO   )r`  r	  r   )r[   r   s     rU   r8  "DictNode.calculate_constant_resultX%  s:    #151E1E%G1E$$1E%G  H %Gr  c                    U R                    Vs/ s H9  nUR                  R                  U5      UR                  R                  U5      4PM;     nn [	        U5      $ s  snf ! [
         a  nU R                  U5         S nAg S nAff = frO   )r	  r	  rD  r   r`  r  rI  )r[   rC  r   r[  rH  s        rU   rD  DictNode.compile_time_value\%  s    ,,., ((--d3TZZ5R5RSW5XY, 	 .	-;.  	-))!,,	-s   A A
A" "
B,BBc                     grX  rY   r   s     rU   ro  DictNode.type_dependenciesd%  ra
  rW   c                     [         $ rO   rc
  r   s     rU   r   DictNode.infer_typeg%  r  rW   c                     [        SS9 nU R                   Vs/ s H  nUR                  U5      PM     snU l        S S S 5        WU l        U $ s  snf ! , (       d  f       N= fr  )r   r	  rV  r  )r[   ry   r  r   s       rU   rV  DictNode.analyse_typesk%  sa    && !00$0D ""3'0$D  '
 &,"$ '&s   AAAA
A c                     gr  rY   rZ   s    rU   r  DictNode.may_be_nonet%  r   rW   c                   > [         R                  " USS9nUR                  (       Ga  U R                  5         U R                  R
                  (       a  [        R                  " U5      (       d  [        U R                  SU-  5        [        U R                  U R                   Vs/ s HJ  n[        UR                  UR                  R                  U5      UR                  R                  U5      S9PML     snS9$ U R                  R                  U5      (       d  [        U R                  SU-  5        U $ UR
                  (       Ga+  Xl        UR                   (       d3  [#        U R                  5      S:w  a  [        U R                  SU-  5        OaUR                   (       aP  [#        U R                  5      [#        UR$                  R&                  5      :  a  [)        U R                  S	U-  S5        U R                   GHm  n[+        UR                  [,        5      (       a  UR                  R.                  Ul        UR                  R0                  (       dY  [        UR                  R                  S
5        [3        UR                  R                  [4        R6                  " S5      S9Ul        M  [9        UR                  R                  5      nUR$                  R;                  U5      nU(       d,  [        UR                  R                  SU< SU< S35        GM  UR                  n[+        U[,        5      (       a  UR.                  nUR=                  UR                  U5      Ul        GMp     U $ [>        TU ]y  X5      $ s  snf )NTr!  z-Cannot interpret struct as non-dict type '%s'r	  r	  z"Cannot interpret dict as type '%s'r,   z<Exactly one field must be specified to convert to union '%s'z%Not all members given for struct '%s'zInvalid struct field identifierr  r  zstruct 'z' has no field 'rZ  ) r   r$  rv   release_errorsr   r  r   rG  r   r   r	  r	  r	  r	  rk  r   r
  r   rx  r  r   r   rF  r  r  r4  r
   r|  r~   rz  r8  rQ   )r[   rP  ry   r   r	  r	  r   rT   s          rU   r8  DictNode.coerce_tow%  s   ++HTJ!yy++ ++H55$(($SV^$^_ !% 4 4;6 !5 !txx/J/J3/O'+zz'D'DS'IK 4;6 7 7 99''11dhh Dx OP2 1 ((( I%%#d.B.B*Cq*Hdhh ^ai ij##D,@,@(ACHbHbDc(c"IH"TVWX,,dhh(:;;#xx||DHxx11$((,,(IJ*488<<~?[?[\e?fgDHdhhnn-C%^^77<F!dhhllxY\,]^ $

%e-?@@$)IIE%*__V[[#%F
 -$  7$X33;;6s   &AN
c                 N    U R                    H  n[        U5        M     / U l         g rO   )r  r   )r[   rz   s     rU   rl  DictNode.release_errors%  s"    --C .%'"rW   rj
  c                 z	   UR                  U R                  5        U R                  U5        U R                  R                  nU(       a  U R                  5         UR                  SU R                  5       [        U R                  5      UR                  U R                  5       U R                  5      4-  5        U R                  U5        S nOU R                  R                  n[        5       nS nSnU R                   GH  nUR                  U5        U(       Ga+  U R                  (       a,  UR                  SUR                   R#                  5       -  5        UR$                  nU R&                  (       Ga   Ub  UR(                  (       d  S nO}UR                   U;   a  S nOjU[        UR                   5      La7  Uc1  [        UR                   5      nUR+                  UR                   5        OS nOUR+                  UR                   5        Uc  UR                  SU R                  5       < SUR#                  5       < S35        SnUR                  SUR#                  5       < S	UR-                  UR                  5      < 35        UR                  S
5        UR/                  U R                  SU R                  5       < SUR$                  R#                  5       < SUR                   R#                  5       < S35        U R&                  (       a  Uc  UR                  S5        U R                  (       a  UR                  S5        GOUR1                  UR$                  R                   5      n	U	c   SUR$                  R                    S35       eU	R2                  n
UR                   R                  5       nUR                   R                  R4                  (       a]  UR6                  R9                  [:        R<                  " SS5      5        UR                  SU R                  5        SU
 SU SU S3	5        O(UR                  U R                  5        SU
 SU S35        UR?                  U5        URA                  U5        GM     U(       a1  UR6                  R9                  [:        R<                  " SS5      5        g g )Nz%%s = __Pyx_PyDict_NewPresized(%d); %sFrL  rl
  r  r  Trn
  r=  r  ro
  r9  r   zstruct member z1 not found, error was not handled during coercionr  r  zmemcpy(r   r  r  r  r  rm
  rr
  )!r  r   r  r   rv   rl  r   r  r   r	  r   r  rx  r  r  exclude_null_valuesr   r   r	  rZ
  r  r  r   r  rz  r   ru  r   r   r   r   r  r  )r[   r   is_dictstruct_scope	keys_seenkey_typeneeds_error_helperr   r	  r	  	key_cnamevalue_cnames               rU   r  !DictNode.generate_evaluation_code%  s    	dhh!!$'))''!JJ7KKM,,-++DKKM488D;F FG
   &L99??LE	"((D))$/++JJ{TZZ-A-A-CCDhh))) ,"44(,I YY)3(,I%T#))_<'/+/		? )cii 8 -1	%MM#))4 (

 KKM3==?$< = .2*

MMO OODHH5$7 8 

:.%%dhhKKMHH&&(JJ((*1, - ))i.?JJsO++JJsO%11$((..A)}^DHHNN;KK|+}})"LL	"jj//1::??++$$55k6M6MN^`o6pqJJq2k]R[\g[hhklmJJ$++-)C}ANO''-OOD!k )n --''(=?TUW rW   c                 L    U R                    H  nUR                  U5        M     g rO   )r	  r#  rw
  s      rU   r#  DictNode.annotate%  s    ((DMM$ )rW   c                 f    U R                    VVs0 s H  u  pUR                  U_M     snn$ s  snnf rO   )r	  r   )r[   r	  r   s      rU   as_python_dictDictNode.as_python_dict%  s/     483G3GH3GZS		5 3GHHHs   -)r   r	  r  r   )r^   r_   r`   ra   r   r  rq  r   r   r  rZ
  r  r  r]  r8  rD  ro  r   rV  r  r8  rl  r@  r  r#  r}  rb   rc   rd   s   @rU   r	  r	  B%  s     ""HGDOF FH-%N(
 -KPWd I IrW   r	  c                   D    \ rS rSrSS/rSrS rS rS rS r	S	 r
S
 rSrg)r	  i&  r	  r   Nc                 f    U R                   R                  U R                  R                  4U l        g rO   )r	  r   r   rZ   s    rU   r8  &DictItemNode.calculate_constant_result
&  s&    HH$$djj&@&@ BrW   c                    U R                   R                  U5      U l         U R                  R                  U5      U l        U R                   R                  U5      U l         U R                  R                  U5      U l        U $ rO   )r	  rV  r   rk  r   s     rU   rV  DictItemNode.analyse_types&  s_    88))#.ZZ--c2
88..s3ZZ2237
rW   c                 p    U R                   R                  U5        U R                  R                  U5        g rO   )r	  r  r   r  s     rU   r  %DictItemNode.generate_evaluation_code&  s&    ))$/

++D1rW   c                 p    U R                   R                  U5        U R                  R                  U5        g rO   )r	  r  r   r  s     rU   r  #DictItemNode.generate_disposal_code&  s&    ''-

))$/rW   c                 p    U R                   R                  U5        U R                  R                  U5        g rO   )r	  r  r   r  s     rU   r  DictItemNode.free_temps&  s&    D!

d#rW   c                 D    [        U R                  U R                  /5      $ rO   )r6  r	  r   rZ   s    rU   __iter__DictItemNode.__iter__!&  s    TXXtzz*++rW   )r   r	  r   )r^   r_   r`   ra   r   r  r8  rV  r  r  r  r  rb   rY   rW   rU   r	  r	  &  s2    
 wHKB20$,rW   r	  c                   6    \ rS rSrS/rSrS rS rS rS r	Sr
g	)
SortedDictKeysNodei%&  r  Tc                 j    [         R                  XR                  US9  [        R                  U l        g r  )r   r  r   r   r   r   r  s     rU   r  SortedDictKeysNode.__init__+&  s&    $S1%%	rW   c                     U R                   R                  U5      nUR                  [        R                  L a  UR                  S5      nX l         U $ rK
  )r  rV  r   r   r   r  rf
  s      rU   rV   SortedDictKeysNode.analyse_types/&  sE    hh$$S)88w(((''35CrW   c                     gr  rY   rZ   s    rU   r  SortedDictKeysNode.may_be_none7&  r   rW   c                 b   U R                   R                  5       nU R                   R                  [        R                  L ae  UR                  U R                  5       < SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        GO\UR                  R                  [        R                  " SS5      5        UR                  [        R                   " S5      5      nUR                  U R                  5       < SU< SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        UR                  SU R                  5       -  5        U R#                  US	U R                  5       -  5        UR                  UR                  U R                  5       U R                  5      5        U R                  U5        UR                  S
5        UR%                  U R                  SU R                  5       -  5        g )Nz = PyDict_Keys(r=  PyObjectCallMethod0r  keysz = __Pyx_PyObject_CallMethod0(r  z"if (unlikely(!PyList_Check(%s))) {zPySequence_List(%s)r   zPyList_Sort(%s))r  r   r   r   r   r   r  r   r   r  r   r   r   r   r  r
   r|  r  r  )r[   r   dict_result
keys_cnames       rU   r  'SortedDictKeysNode.generate_result_code:&  s   hh((*88==G---JJ{''txx@B C   & --k.E.E%'9/; <//0L0LV0TUJJJ{J''txx@B C   &JJ;dkkmKL$$T+@4;;=+PQJJt..t{{}dhhGH  &JJsOHH'$..*::	<rW   r  N)r^   r_   r`   ra   r   r  r  rV  r  r  rb   rY   rW   rU   r  r  %&  s"    wHG&<rW   r  c                   "    \ rS rSrSr\rS rSrg)SortedListNodeiS&  z0Sorts a newly created Python list in place.
    c                     UR                  UR                  SU R                  R                  5        S3U R                  5      5        g )NzPyList_Sort(r9  )r   r  r  r  r   r  s     rU   r  #SortedListNode.generate_result_codeX&  s4    

4))L9J8K1*MtxxXYrW   rY   N)	r^   r_   r`   ra   r  r   r   r  rb   rY   rW   rU   r  r  S&  s    DZrW   r  c                        \ rS rSrS rS rSrg)ModuleNameMixini\&  c                 6    UR                  U R                  SS9$ NT
identifier)r  rS  r  s     rU   get_py_mod_nameModuleNameMixin.get_py_mod_name]&  s%    '' ( / 	/rW   c                 6    UR                  U R                  SS9$ r  )r  qualnamer  s     rU   get_py_qualified_name%ModuleNameMixin.get_py_qualified_namea&  s#    ''MMd ( , 	,rW   rY   N)r^   r_   r`   ra   r  r  rb   rY   rW   rU   r  r  \&  s    /,rW   r  c                   D    \ rS rSrS/r\rSrS rS r	S r
S rSrS	 rS
rg)r	  if&  docTc                     g rO   rY   r   s     rU   r   ClassNode.analyse_annotationst&  r   rW   c                     [         $ rO   r0  r   s     rU   r   ClassNode.infer_typew&      rW   c                     U R                   (       a@  U R                   R                  U5      U l         U R                   R                  U5      U l         UR                  [        R
                  " SS5      5        U $ )NCreateClassr  )r  rV  rk  r   r   r   r   s     rU   rV  ClassNode.analyse_types{&  sV    88xx--c2DHxx2237DH[44]DVWXrW   c                     gr  rY   rZ   s    rU   r  ClassNode.may_be_none&  r  rW   Constructing Python classc                    U R                   nUR                  U R                  5      nU R                  (       a|  UR	                  U R
                  SUR                  R                  5       < SUR                  [        R                  " S5      5      < SU R                  R                  5       < S35        U R                  U5      nU R                  U5      nUR                  U R                  5       < SUR                  R                  5       < SUR                  R                  5       < SU< SU< SU< SUR                  U R                  5       U R
                  5      < 35        U R!                  U5        g )Nro
  r  r  r9  z = __Pyx_CreateClass(r=  )class_def_noder  rw   r  r  r   r`  r   r
   r|  r  r  r   r  basesr   r  )r[   r   r  r   py_mod_namer  s         rU   r  ClassNode.generate_result_code&  s   ,,&&tyy188!!$(("''113**&44Y?AHH&&(	*+ **40--d3

$$..0##--/''txx@B	C 	T"rW   )r  N)r^   r_   r`   ra   r   r   r   r  r   r   rV  r  r@  r  rb   rY   rW   rU   r	  r	  f&  s5     wHDG .K#rW   r	  c                   F    \ rS rSr/ r\rSrSrS r	S r
S rSrS rS	 rS
rg)r	  i&  FTc                     [         $ rO   r0  r   s     rU   r   Py3ClassNode.infer_type&  r  rW   c                     U $ rO   rY   r   s     rU   rV  Py3ClassNode.analyse_types&  r  rW   c                     gr  rY   rZ   s    rU   r  Py3ClassNode.may_be_none&  r  rW   r  c                    SSK Jn  U R                  R                  nUR                  R                  5        Vs/ s HZ  oDR                  (       d  M  [        UR                  [        UR                  UR                  S9UR                  R                  S9PM\     nnU(       a  [        X5S9n[        U[        R                  " S5      S9nUR                  UR                  5      =(       d!    UR!                  UR                  ["        U5      Ul        ['        X7US9nUR)                  U5        U R                  R*                  R,                  R/                  S	U5        g g s  snf )
Nr,   AnnotationWriterr  r	  r	  __annotations__ri  )r  r   r   )AutoDocTransformsr  r  r   r  r  r  r	  r'  rw   stringr	  r7  r
   r|  rz  r  r   r   r0   ry  bodyr  insert)	r[   ry   r  positionr   
dict_itemsannotations_dictr  r   s	            rU   r    Py3ClassNode.analyse_annotations&  s   7&&** ++-
 .1A1AL		(%**E&&--
 . 	 
 'M8.*F*FGX*YZC1cS__SXXyZb5cCI'?OPD%%c*$$**11!T: 
s   EA	Ec                    UR                   R                  [        R                  " SS5      5        UR	                  U R
                  5      nU R                  nUR                  (       a  UR                  R                  5       OSnUR                  (       a  UR                  R                  5       nOU R                  (       a  SnOSnUR                  SU R                  5       UUUR                  R                  5       UR                  R                  5       UU R                  U R                   UR#                  U R                  5       U R$                  5      4	-  5        U R'                  U5        g )NPy3ClassCreater  r.  z((PyObject*)&PyType_Type)z$((PyObject*)&__Pyx_DefaultClassType)z9%s = __Pyx_Py3ClassCreate(%s, %s, %s, %s, %s, %d, %d); %s)r   r   r   r   r  rw   r  mkwr   	metaclass
force_typer   r  r  r`  calculate_metaclassallow_py2_metaclassr   r   r  )r[   r   r   r  r  r  s         rU   r  !Py3ClassNode.generate_result_code&  s   ))+*A*ABRTf*gh&&tyy1,,0>0B0Bn  **,##&00::<I__3I>I

G$$..0##--/((((''txx@	KB 	B
	C 	T"rW   rY   N)r^   r_   r`   ra   r   r   r   r  r  r   rV  r  r@  r   r  rb   rY   rW   rU   r	  r	  &  s8     HDJG .K;(#rW   r	  c                   *    \ rS rSr/ rS rS rS rSrg)PyClassMetaclassNodei&  c                 *    [         U l        SU l        U $ r  )r   r   r  r   s     rU   rV  "PyClassMetaclassNode.analyse_types&  s    "	rW   c                     gr  rY   rZ   s    rU   r   PyClassMetaclassNode.may_be_none&  r  rW   c           
      f   U R                   R                  nU R                   R                  nU(       aX  UR                  R	                  [
        R                  " SS5      5        SUR                  5       < SUR                  5       < S3nOCUR                  R	                  [
        R                  " SS5      5        SUR                  5       -  nUR                  U R                  5       < SU< S	UR                  U R                  5       U R                  5      < 35        U R                  U5        g )
NPy3MetaclassGetr  z__Pyx_Py3MetaclassGet(r  r9  CalculateMetaclassz"__Pyx_CalculateMetaclass(NULL, %s)r  rh  )r  r  r  r   r   r   r   r  r   r   r   r  )r[   r   r  r  r  s        rU   r  )PyClassMetaclassNode.generate_result_code&  s    ##))!!%%--''(9;MNP 

D --''(<>PQS7 D

t''txx@B	C 	T"rW   r  r   N	r^   r_   r`   ra   r   rV  r  r  rb   rY   rW   rU   r  r  &  s    
 H
#rW   r  c                   ,    \ rS rSrS/rS rS rS rSrg)PyClassNamespaceNodei'  r  c                     U R                   (       a/  U R                   R                  U5      R                  U5      U l         [        U l        SU l        U $ r  )r  rV  rk  r   r   r  r   s     rU   rV  "PyClassNamespaceNode.analyse_types'  s=    88xx--c2EEcJDH"	rW   c                     gr  rY   rZ   s    rU   r   PyClassNamespaceNode.may_be_none'  r  rW   c                    UR                  U R                  5      nU R                  U5      nU R                  U5      nU R                  nSnU R
                  (       a  U R
                  R                  5       OUnUR                  (       a  UR                  R                  5       OUnUR                  (       a  UR                  R                  5       OUn	UR                  U R                  5       < SU	< SUR                  R                  5       < SU< SU< SU< SU< SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )Nz(PyObject *) NULLz = __Pyx_Py3MetaclassPrepare(r  r=  )r  rw   r  r  r  r  r  r  r   r  r   r  r   r   r  )
r[   r   r   r  r  r  nulldoc_coder  r  s
             rU   r  )PyClassNamespaceNode.generate_result_code!'  s   &&tyy1**40--d3,,"(,488??$d0>0B0Bn  **,<J<T<TN,,668Z^	

$$++-''txx@	B
	C 	T"rW   )r  r  r   Nr  rY   rW   rU   r  r  '  s     wH#rW   r  c                   6    \ rS rSrSr\r/ rSrS r	S r
S rSrg)	ClassCellInjectorNodei8'  TFc                     U $ rO   rY   r   s     rU   r]  )ClassCellInjectorNode.analyse_expressions?'  r  rW   c                     U R                   (       d   eUR                  U R                  5       < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )Nz = PyList_New(0); )	is_activer   r  r   r   r  r  s     rU   r  *ClassCellInjectorNode.generate_result_codeB'  sT    ~~~

''txx@B	C 	T"rW   c                     U R                   (       d   eUR                  R                  [        R                  " SS5      5        UR                  U R                  SU R                  5       < SU< S35        g )NCyFunctionClassCellCythonFunction.cz__Pyx_CyFunction_InitClassCell(r  r9  )r  r   r   r   r   r  r   r  )r[   r   classobj_cnames      rU   generate_injection_code-ClassCellInjectorNode.generate_injection_codeJ'  sY    ~~~))##$9;MN	PdhhKKM>)+ 	,rW   rY   N)r^   r_   r`   ra   r  r   r   r   r  r]  r  r  rb   rY   rW   rU   r  r  8'  s%    GDHI#,rW   r  c                   0    \ rS rSr/ rSrSr\rS r	S r
Srg)ClassCellNodeiR'  TFc                     U $ rO   rY   r   s     rU   rV  ClassCellNode.analyse_typesY'  r  rW   c                    U R                   (       d6  UR                  U R                  5       < S[        R                  < S35        O5UR                  U R                  5       < S[        R
                  < S35        UR                  SU R                  5       < SUR                  U R                  5      < S35        UR                  U R                  5       [        5        g )Nz  = __Pyx_CyFunction_GetClassObj(r  z =  z->classobj;zif (!zJ) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); r5  )
is_generatorr   r  r   
self_cnamegenerator_cnamer   r   r  r   r  s     rU   r  "ClassCellNode.generate_result_code\'  s      JJ!!# $ JJv557 8

 )+	,
 	~6rW   rY   N)r^   r_   r`   ra   r   r  r   r   r   rV  r  rb   rY   rW   rU   r  r  R'  s     HGLD7rW   r  c                       \ rS rSr/ SQrSrSrSrSrSr	Sr
Sr\rSrSrSr\S 5       r\S 5       rS rS	 rS
 rSrS rS rS rS rSrg)r	  il'  )defaults_tupledefaults_kwdictr  FNr,   c                     U " UR                   UUR                  R                  U=(       d    UR                  UR                  S9$ )N)r	  pymethdef_cnamebindingspecialized_cpdefs)r   r   r  r
  )rS   r   r	  s      rU   from_defnodePyCFunctionNode.from_defnode'  s=    HH JJ666t66#66
 	
rW   c                 .    U R                   R                  $ rO   )r	  code_objectrZ   s    rU   r  PyCFunctionNode.code_object'  s    }}(((rW   c                 J    U R                   (       a  U R                  U5        U $ rO   )r	  analyse_default_argsr   s     rU   rV  PyCFunctionNode.analyse_types'  s    <<%%c*rW   c                    / n/ n/ n/ n/ nUR                   =(       d)    U R                  R                  =(       a    UR                  nU R                  R                   GH  nUR
                  (       GaL  U(       d  UR
                  R                  (       al  [        UR                  UR
                  5      Ul        UR
                  R                  (       a+  UR
                  R                  UR                  U5      Ul        OESUl        UR                  R                  (       a  UR                  U5        OUR                  U5        UR
                  R                  (       a^  UR
                  R                  R                  U5      (       a4  UR                  (       a  UR                  U5        OUR                  U5        UR                   (       d  GMv  UR                   R#                  U5      Ul        UR                  UR                  UR$                  UR                   R&                  45        GM     U R                  R(                  U R                  R*                  4 H{  nU(       d  M  UR                   (       d  M  UR                   R#                  U5      Ul        UR                  UR                  UR$                  UR                   R&                  45        M}     U R                  R,                  n	U	(       a\  U	R#                  U5      U R                  l        UR                  U	R                  [.        R0                  " S5      U	R&                  45        U(       d  U(       Ga  UR3                  5       n
/ nU H=  nUR                  nUR4                  (       a  UR6                  nUR                  U5        M?     X Vs/ s H  oR                  PM     sn-  nU
R9                  U R                  U5      U l        U R:                  R                  R<                  n[?        [A        URB                  RE                  5       5      5      nU VVs/ s H   u  nnURG                  S5      (       d  M  UPM"     nnn/ U l$        [K        X#-   U5       H4  u  nnURL                  Ul'        U RH                  R                  UU45        M6     [Q        U5      U l)        U RH                   H,  u  nn[T        RV                  < SURL                  < 3Ul,        M.     UR$                  U R                  l-        U(       d  U(       Ga  U R:                  c  U(       aS  []        U R                  U Vs/ s H  oR
                  PM     snS9nUR#                  U5      R_                  U5      U l0        U(       at  [c        U R                  U Vs/ s H>  n[e        UR                  [g        UR                  UR$                  S9UR
                  S9PM@     snS	9nUR#                  U5      U l4        GOU Rj                  (       Gd  U(       a5  [m        U R                  X@R:                  R                  R<                  5      nO[o        U R                  5      nU(       a5  [q        U R                  XPR:                  R                  R<                  5      nO[o        U R                  5      n[r        Rt                  " U R                  / SS[r        Rv                  " U R                  [x        []        U R                  UU/S9S
9S[.        R0                  " S5      S9nUR3                  5       n
[r        Rz                  R}                  UU
5      nUR                  U
5        UR                  U
5      nUR                  nUR                  R                  UR                  5      UlA        SUlC        SUlD        UU R                  lE        U(       aU  [c        U R                  U VVVs/ s H  u  nnn[e        U[g        UUS9US9PM     snnnS	9nUR#                  U5      U lF        ggs  snf s  snnf s  snf s  snf s  snnnf )z2
Handle non-literal function's default arguments.
Tr	  r  r  NrY  r  r	  r	  )r  r   __defaults__)r   r	  r	  r  
decoratorsrw   F)Gr  r	  
is_wrapperr{  r   rx   r   DefaultLiteralArgNoder   r   r8  
is_dynamicrv   r  r  kw_onlyr  rV  rw   r  r	  r	  return_type_annotationr
   r|  r  r  r|  declare_defaults_c_classdefaults_entryrx  r  r  r  r  r
  defaultsr  r   defaults_class_keyr   defaults_pyobjectsr   dynamic_args_cnamer  defaults_structr^  rk  r  r	  r	  r'  r  r
  DefaultsTupleNoderC  DefaultsKwDictNoder   DefNodeReturnStatNoder   CompilerDirectivesNodefor_internalry  r]  r  local_scopepy_wrapper_requiredpymethdef_requireddefaults_getterr  )r[   ry   nonliteral_objectsnonliteral_otherdefault_argsdefault_kwargsannotationsmust_use_constantsr  r  r
  r  r%  defaults_class_scopearg_entriesrw   rH  r   r  r  r+  directives_noder   r   r  s                            rU   r  $PyCFunctionNode.analyse_default_args'  sw      !11gdmm6N6N6fSVSfSf==%%C{{{){{--&;CGGS[[&Q;;++*-++*?*?#*NCK)-88//.55c:,33C8;;##(8(8(O(OPS(T(T{{&--c2$++C0~~~!$!=!=c!B""CGGSXXs~~7L7L#MN) &, MM**DMM,F,FGCss~~~!$!=!=c!B""CGGSXXs~~7L7L#MN H
 ]]99
3=3K3KC3PDMM0
0L0LX0V * 1 1 3 4 !1++-LE)??!JJEU#	 *
 +;=+;Cxx+;==E"."G"GRW"XD#'#6#6#;#;#A#A  !&:&B&B&H&H&J!KLK-8T['$DOOE<RA[KTDM!"4"GU
U).&$$c5\2 V '**<&=D#"mm
U--u{{%<! , -A,E,EDMM)>""*%.txx/;?=/;|?= &>N*8*F*Fs*K*^*^_b*cD'!&.txx
 $2J3
 $2C	 %GG 4SWWCHH M"%++/ $2J3 '4O ,;+H+H+MD(,,,%6,0C0C0H0H0N0N&PN &.dhh%7N!&8.2E2E2J2J2P2P'RO '/txx&8O"'--HH24--n' HHNO+LNO  $'55nE#G  #//1"'">">"K"KO]i"j44\B"1"E"El"S"1"6"6'6';';'O'O#//(1$6;35:20?-' )4	C5 )4$Cu 1#TB! )4	C5  6
 %5$B$B3$GD! C > U?=J3RC5s%    aa-a!a
;Aa
!ac                     gr  rY   rZ   s    rU   r  PyCFunctionNode.may_be_none(  r   rW   zConstructing Python functionc                     g)Nr.  rY   rZ   s    rU   closure_result_code#PyCFunctionNode.closure_result_code!(  s    rW   c                 l    U R                   (       a  U R                  U5        g U R                  U5        g rO   )r	  generate_cyfunction_codegenerate_pycfunction_coder  s     rU   r  $PyCFunctionNode.generate_result_code$(  s%    <<))$/**40rW   c                 ,   U R                  U5      nUR                  U R                  5       < SU R                  < SU R	                  5       < SU< SUR                  U R                  5       U R                  5      < 3	5        U R                  U5        g )Nz = PyCFunction_NewEx(&r  r=  )r  r   r  r  r9  r   r   r  )r[   r   r  s      rU   r=  )PyCFunctionNode.generate_pycfunction_code*(  sp    **40

$$((*''txx@B	C 	T"rW   c                 
   U R                   (       a  U R                   S   nOU R                  nU R                   (       d  U R                  (       a3  UR                  R	                  [
        R                  " SS5      5        SnO2UR                  R	                  [
        R                  " SS5      5        Sn/ nUR                  (       a  UR                  S5        O"UR                  (       a  UR                  S5        UR                  R                  R                  (       a,  UR                  R                  (       d  UR                  S	5        UR                  (       a  UR                  S
5        U(       a  SR!                  U5      nOSnUR#                  [$        R&                  5      nU R(                  R+                  U5        UR-                  U R/                  5       < SU< SU R0                  < SU< SU R3                  U5      < SU R5                  5       < SU R7                  U5      < SU< SU R(                  R9                  5       < SUR;                  U R/                  5       U R<                  5      < 35        U R?                  U5        UR@                  (       ag  URB                  (       d   S5       eURB                  S   nUR-                  SURD                  R/                  5       < SU R9                  5       < S35        U RF                  (       a  UR-                  SU R/                  5       < SUR#                  U RH                  RJ                  RL                  5      < SURO                  U R<                  5      < 35        SU RH                  RJ                  RP                  < SU R/                  5       < S3nU RF                   H&  u  pURS                  UU< SU	RT                  < 3S9  M(     U RV                  (       a@  UR-                  SU R/                  5       < SU RV                  R9                  5       < S35        U R                   (       d  U RX                  (       a@  UR-                  SU R/                  5       < SU RX                  R9                  5       < S35        URZ                  (       aF  UR-                  SU R/                  5       < SURZ                  R                  R\                  < S35        U R^                  (       aA  UR-                  SU R/                  5       < SU R^                  R9                  5       < S35        g g g )Nr   FusedFunctionr  __pyx_FusedFunction_NewCythonFunction__Pyx_CyFunction_New__Pyx_CYFUNCTION_STATICMETHOD__Pyx_CYFUNCTION_CLASSMETHOD__Pyx_CYFUNCTION_CCLASS__Pyx_CYFUNCTION_COROUTINEr  r}  r  z(&r  r=  zpyclass_stack is emptyrX  zPyList_Append(r  z#if (!__Pyx_CyFunction_InitDefaults()) !__Pyx_CyFunction_Defaults(struct r9  r  r
  z"__Pyx_CyFunction_SetDefaultsTuple(z#__Pyx_CyFunction_SetDefaultsKwDict(z#__Pyx_CyFunction_SetDefaultsGetter(z$__Pyx_CyFunction_SetAnnotationsDict()0r
  r	  is_specializationr   r   r   r   is_staticmethodr  is_classmethodr(  r
  r  r   is_anonymousis_coroutiner  r  r   r  r  r  r   r  r  r  r9  r  r   r   r   r  requires_classobjpyclass_stack
class_cellr  r  r   r
  r   objstruct_cnamer  r   r  r  r+  r
  r  )
r[   r   r	  rH  flagsr  
class_noder  r  r   s
             rU   r<  (PyCFunctionNode.generate_cyfunction_code6(  s   ""..q1H}}H""d&<&<--''9KLN3K--''(8:LMO0K##LL89$$LL78,,==hnnFaFaLL23  LL56JJu%EE11&2F2FG--d3

$$**40((*$$T*  **,''txx@
B	C 	T"%%%%?'??%++B/JJJ))002NN$&'
 ==JJKKM--d.A.A.F.F.T.TUOODHH-/0 ##((88$++-IH"mm
,,Tekk;+, , , JJt22<<>@ A&& ##

KKM4#7#7#A#A#CE F''

KKM8#;#;#A#A#N#NP Q$$

KKM4#8#8#B#B#DF G % 'rW   )r  r  r  r  r  r  )r^   r_   r`   ra   r   r	  r	  r  r  r  r  r  r   r   r  r
  rL  r  r  r  r  rV  r  r  r@  r9  r  r=  r<  rb   rY   rW   rU   r	  r	  l'  s     IHGHHNNODG
 
 ) )
AHF 1K1
#UGrW   r	  c                   "    \ rS rSrSrSrS rSrg)InnerFunctionNodei(  Tc                 L    U R                   (       a  S[        R                  -  $ g)Nz((PyObject*)%s)r.  )needs_closure_coder   cur_scope_cnamerZ   s    rU   r9  %InnerFunctionNode.closure_result_code(  s    ""$v'='===rW   rY   N)r^   r_   r`   ra   r	  r[  r9  rb   rY   rW   rU   rY  rY  (  s     GrW   rY  c                   ^    \ rS rSrSrSrSrSrSrSr	Sr
SrSrS r\S 5       r\S 5       rS	rg)
DefFuncLikeNodei(  zT
Adapter for CFuncDefNode to give it the same attributes as DefNode in CodeObjects.
Fr   Nc                     UR                   R                  U l        UR                   R                  U l        UR                  U l        UR
                  U l        Xl        g rO   )r   rw   rx  r(  r   r   _cfuncdef_node)r[   cfuncdef_nodes     rU   r  DefFuncLikeNode.__init__(  sI    !'',,	(..44!&&	 $$+rW   c                 .    U R                   R                  $ rO   )ra  node_positionsrZ   s    rU   re  DefFuncLikeNode.node_positions(  s    ""111rW   c                 .    U R                   R                  $ rO   )ra  node_positions_to_offsetrZ   s    rU   rh  (DefFuncLikeNode.node_positions_to_offset(  s    "";;;rW   )ra  r   r(  rw   r   )r^   r_   r`   ra   r  r   rP  is_asyncgenis_generator_expressionnum_posonly_argsr	  r	  r	  r  r  re  rh  rb   rY   rW   rU   r_  r_  (  s`     LLK#OHL, 2 2 < <rW   r_  c                   T    \ rS rSrS/rSrSrS r\S 5       r	S r
SS jrS	 rS
 rSrg)CodeObjectNodei(  varnamesFNc                 Z   [         R                  XR                  US9  [        UR                  5      nUR
                  R                   Vs/ s H  o3R                  (       d  M  UPM     nnX$-    Vs/ s H!  n[        UR                  UR                  S9PM#     snU l	        g s  snf s  snf )N)r	  r  )
r   r  r   r  r   r(  r  rw   r'  ro  )r[   r	  r   r  
local_varss        rU   r  CodeObjectNode.__init__(  s    $x@HMM"%-%9%9%E%ER%Ecc%E
R (
( !9(
 S
s   B#$B#2(B(c                 $    U " [        U5      5      $ rO   )r_  )rS   rb  s     rU   	for_cfuncCodeObjectNode.for_cfunc(  s    ?=122rW   c                     gr  rY   rZ   s    rU   r  CodeObjectNode.may_be_none(  r   rW   c                 `    U R                   c  UR                  U 5      U l         U R                   $ rO   rw  get_py_codeobj_constr  s     rU   r  $CodeObjectNode.calculate_result_code(  s-    ##88>DrW   c                 L    U R                   c  UR                  U 5      U l         g g rO   ry  r  s     rU   r  #CodeObjectNode.generate_result_code(  s&    ##88>D $rW   c                 J   U R                   nU R                  S   nUR                  UR                  SS9nUR                  S   R	                  5       n[
        R                  R                  U5      (       a  UR                  S   R                  5       n[        R                  " [        R                  " U5      R                  5       5      nUR                  U5      nUR                  (       aW  [        R                  " [!        UR                  U5      R#                  S5      S5      nUR%                  U5      n	['        U5      n
OSn	Sn
SS/nUR(                  (       a  UR+                  S	5        UR,                  (       a  UR+                  S
5        UR.                  (       a  UR+                  S5        OEUR0                  (       a  UR+                  S5        O"UR2                  (       a  UR+                  S5        UR4                  (       a  SnO['        UR6                  5      nUR8                  nUR:                  n['        U R<                  5      nSSR?                  U5      -  =(       d    SnURA                  S5        URA                  SX-
   SU SU SU SU SU SU
 S35        U R<                   H  nURC                  U5        M     U R<                   Vs/ s H  nURE                  5       PM     sn=(       d    S/nURA                  SSR?                  U5      -  5        U R<                   H%  nURG                  U5        URI                  U5        M'     URA                  U RJ                   SU SU SU	 SU RJ                   SU S35        URA                  S5        g s  snf )Nr,   Tr  r   z	iso8859-1r.  CO_OPTIMIZEDCO_NEWLOCALS
CO_VARARGSCO_VARKEYWORDSCO_ASYNC_GENERATORCO_COROUTINECO_GENERATORz(unsigned int)(%s)|r}  r  z5const __Pyx_PyCode_New_function_description descr = {r  r  z"PyObject* const varnames[] = {%s};z% = __Pyx_PyCode_New(descr, varnames, z", tuple_dedup_map); if (unlikely(!z)) goto r  r   )&r	  r   r  rw   get_filenametable_entryr'   r  isabsr  r
   r|  r(   Pathas_posixre  r  r$   r  r  r   r	  r  r	  rj  rP  r   rk  r   rl  r	  ro  r  r   r  r   r  r  rw  )r[   r   r  r  first_linenofunc_name_result	file_pathfile_path_result
line_tableline_table_resultline_table_lengthrU  argcountrl  kwonly_argcountnlocalsr^  ro  s                     rU   generate_codeobjCodeObjectNode.generate_codeobj(  s#   }}xx{33DII$3OHHQK779	77==##335I"00i1H1Q1Q1ST	33I>'556FtGZGZ\h6i6p6pq|6}  @K  LJ $ 5 5j A #J & !  0==LL&LL)*LL-.LL(LL('' H499~H00..dmm$$sxx6=# 	

3

C)*" rirgRnB !
	
 ==C((. ! 04}}=}CMMO}=F#

7$))H:MMN==C&&t,NN4  ! 	

  !     ! " "--.h{m1F
	
 	

3% >s   N )rw  ro  rO   )r^   r_   r`   ra   r   r  rw  r  r  rt  r  r  r  r  rb   rY   rW   rU   rn  rn  (  sC     |HGK
 3 3 
?RrW   rn  c                   L   ^  \ rS rSr/ rSrSrU 4S jrS rS r	S r
S rS	rU =r$ )
r  i1)  TFc                    > [         TU ]  U5        X l        UR                  U l        U R                  R                  U l        SU l        g r  )rQ   r  r  r   r   	evaluatedr  s      rU   r  DefaultLiteralArgNode.__init__:)  s9    "22HHMM	rW   c                     U $ rO   rY   r   s     rU   rV  #DefaultLiteralArgNode.analyse_typesA)  r  rW   c                     g rO   rY   r  s     rU   r  *DefaultLiteralArgNode.generate_result_codeD)  r   rW   c                 l    U R                   (       d#  U R                  R                  U5        SU l         g g r  )r  r  r  r  s     rU   r  .DefaultLiteralArgNode.generate_evaluation_codeG)  s'    ~~HH--d3!DN rW   c                 h    U R                   R                  U R                  R                  5       5      $ rO   )r   r	  r  r  rZ   s    rU   r  DefaultLiteralArgNode.resultL)  s"    yy""488??#455rW   )r  r   r  r   )r^   r_   r`   ra   r   r   r  r  rV  r  r  r  rb   rc   rd   s   @rU   r  r  1)  s2    
 HJG"
6 6rW   r  c                   >   ^  \ rS rSr/ rU 4S jrS rS rS rSr	U =r
$ )DefaultNonLiteralArgNodeiP)  c                 <   > [         TU ]  U5        X l        X0l        g rO   )rQ   r  r  r!  )r[   r   r  r!  rT   s       rU   r  !DefaultNonLiteralArgNode.__init__U)  s    .rW   c                 J    U R                   R                  U l        SU l        U $ r  )r  r   r  r   s     rU   rV  &DefaultNonLiteralArgNode.analyse_typesZ)  s    HHMM	rW   c                     g rO   rY   r  s     rU   r  -DefaultNonLiteralArgNode.generate_result_code_)  r   rW   c                     SU R                   R                  < S[        R                  < SU R                   R	                  U R
                  R                  5      R                  < 3$ )NrK  r  r
  )r!  rw   r   r  ry  r  r  r   rZ   s    rU   r  DefaultNonLiteralArgNode.resultb)  sI      %%v'8'8  ''(C(CDJJL 	LrW   )r  r!  r  r   )r^   r_   r`   ra   r   r  rV  r  r  rb   rc   rd   s   @rU   r  r  P)  s%     H/

L LrW   r  c                   8   ^  \ rS rSrU 4S jrSU 4S jjrSrU =r$ )r"  ih)  c                    > / nU HH  nUR                   R                  (       d  [        XU5      nOUR                   nUR                  U5        MJ     [        TU ]  XS9  g )NrY  )rx   r   r  r  rQ   r  )r[   r   r  r!  r   r  rT   s         rU   r  DefaultsTupleNode.__init__k)  sR    C;;)).sIkkKK  	(rW   c                 @   > [         TU ]  X5      R                  U5      $ rO   )rQ   rV  rk  )r[   ry   r)  rT   s      rU   rV  DefaultsTupleNode.analyse_typesu)  s    w$S8KKCPPrW   rY   r  r^   r_   r`   ra   r  rV  rb   rc   rd   s   @rU   r"  r"  h)  s    )Q QrW   r"  c                   (   ^  \ rS rSrU 4S jrSrU =r$ )r#  iy)  c           	         > / nU Hx  n[        UR                  UR                  S9nUR                  R                  (       d  [        XU5      nOUR                  nUR                  [        UR                  XeS95        Mz     [        TU ]%  XS9  g )Nr  r	  r	  )
r'  r   rw   rx   r   r  r  r	  rQ   r  )r[   r   r  r!  r  r  rw   rT   s          rU   r  DefaultsKwDictNode.__init__|)  sq    C'sxx@D;;)).sIkkLLcgg4CD  	4rW   rY   )r^   r_   r`   ra   r  rb   rc   rd   s   @rU   r#  r#  y)  s    	5 	5rW   r#  c                   d   ^  \ rS rSrS/r\R                  " S5      rS rU 4S jr	U 4S jr
SrU =r$ )
LambdaNodei)  r	  z<lambda>c                    [        U S5      (       a  g UR                  S5      =U l        U R                  l        SU R                  l        SU R                  l        SU R                  l        U R                  R                  U5        U R                  R                  R                  U l	        UR                  U R                  5        g )Nlambda_namelambdaT)r[  next_idr  r	  no_assignment_synthesisr*  r
  ry  r   r  add_lambda_defr   s     rU   ry  LambdaNode.analyse_declarations)  s    4''7:{{87LL4==404-+/(&*#**3/#}}22BB4==)rW   c                 b   > U R                   R                  U5      U l         [        TU ]  U5      $ rO   )r	  r]  rQ   rV  r  s     rU   rV  LambdaNode.analyse_types)  s)    99#>w$S))rW   c                 Z   > U R                   R                  U5        [        TU ]  U5        g rO   )r	  r  rQ   r  r[   r   rT   s     rU   r  LambdaNode.generate_result_code)  s"    --d3$T*rW   )r	  r  r  )r^   r_   r`   ra   r   r
   r|  rw   ry  rV  r  rb   rc   rd   s   @rU   r  r  )  s0     ,K''
3D
**+ +rW   r  c                      ^  \ rS rSr\R
                  " S5      rSr\R                  S/-   r	\R                  S/-   r
U 4S jrU 4S jrS rSrU =r$ )	GeneratorExpressionNodei)  genexprFcall_parametersc                 <   > [         TU ]  " U/UQ70 UD6  / U l        g rO   )rQ   r  r  )r[   r   r   r`  rT   s       rU   r   GeneratorExpressionNode.__init__)  s"    ,t,t,!rW   c                 x  > [        U S5      (       a  g UR                  S5      U l        [        TU ]  U5        SU R
                  l        SU R
                  l        SU R
                  l        [        R                  U R
                  R                  l        [        U R                  [        R                   5      (       aR  [        U R                  R"                  [$        5      (       d   eU R                  R"                  R'                  S U5        g [        U R                  [        R(                  5      (       d   eg )Ngenexpr_namer  F)r[  r  r  rQ   ry  r	  r*  r)  r
  r5   pyfunction_noargsr   rT  r   r  r   r  r  rp  rv  r  r  s     rU   ry  ,GeneratorExpressionNode.analyse_declarations)  s    4((KK	2$S)+0(,1)&+#(1(C(C%dii!5!566dii00.AAAAII))$4dii)>)>????rW   c                    U R                  5       /U R                   Vs/ s H  o"R                  5       PM     sn-   nSR                  U5      nUR	                  U R                  5       < SU R
                  R                  R                  < SU< SUR                  U R                  5       U R                  5      < 35        U R                  U5        g s  snf )Nr  r  r  r=  )r9  r  r  r  r   r	  r   r
  r   r   r  )r[   r   cpargs_to_calls       rU   r  ,GeneratorExpressionNode.generate_result_code)  s    1134040D0DF0D"))+0DFGyy.

##00''txx@	B	C 	T" Gs   C)r  r  )r^   r_   r`   ra   r
   r|  rw   r	  r  r   r   r  ry  r  rb   rc   rd   s   @rU   r  r  )  sW     ''	2DG((,=+>>K""&7%88H"@&
# 
#rW   r  c                   P    \ rS rSrS/r\rSrSrSr	Sr
SrS rS rS rS	 rS
 rSrg)YieldExprNodei)  r  r   Fyieldc                    U R                   (       a"  U R                  (       a4  U R                  (       a#  [        U R                  SU R
                  -  5        SU l        U R                  bV  U R                  R                  U5      U l        U R                  R                  R                  (       d  U R                  U5        U $ )Nz'%s' not supported herer,   )	label_numis_yield_fromin_async_genr   r   expr_keywordr  r  rV  r   rv   coerce_yield_argumentr   s     rU   rV  YieldExprNode.analyse_types)  s~    ~~$"4"49J9J$((58I8IIJ88xx--c2DH88==,,**3/rW   c                 D    U R                   R                  U5      U l         g rO   r  rk  r   s     rU   r  #YieldExprNode.coerce_yield_argument)  s    88..s3rW   c                    U R                   (       a  U R                   R                  U5        U R                   R                  U5        UR                  [        R
                  < SU R                   R                  [        5      < S35        U R                   R                  U5        U R                   R                  U5        O$UR                  [        R
                  [        5        U R                  U5        g Nr  r  )r  r  r  r   r   r!  r  r   r  r  put_init_to_py_nonegenerate_yield_coder  s     rU   r  &YieldExprNode.generate_evaluation_code)  s    88HH--d3HH))$/JJ''HH&&~689 HH2248HH%$$V%8%8.I  &rW   c           	      (	   UR                  U R                  R                  SS5      5      u  p#UR                  U5        / nUR                  R
                  R                  5         UR                  R                  5        H  u  pVnUR                  R
                  R                  U5      nUR                  XXU45        UR                  (       a6  UR                  R                  [        R                  " SS5      5        SU-  nOUR                  XV5        UR!                  ["        R$                  < SU< SU< S35        M     UR                  R&                  S	   n	UR                  R&                  S
   n
U	(       d  U
(       a(  UR)                  ["        R*                  U R,                  S9  UR                  ["        R*                  [.        5        UR1                  5         UR                  R2                  b#  UR!                  S["        R4                  -  5        O"UR!                  S["        R4                  -  5        UR!                  SU R6                  (       a  SOS< SU R8                  (       a  SOS< S35        UR!                  S["        R4                  U4-  5        U R6                  (       a4  U R8                  (       d#  UR!                  S["        R*                  -  5        O"UR!                  S["        R*                  -  5        UR;                  U5        U	(       d  U
(       a  UR=                  U R,                  5        U H  u  pXn["        R$                  < SU< 3nUR                  (       a  SU-  nUR!                  U< SU< S35        UR>                  (       a'  UR!                  SU-  5        URA                  XV5        M  URB                  (       d  M  UR!                  U< SU< S35        M     U RE                  U["        RF                  5        U RH                  (       ak  U RK                  U5        URM                  U RO                  5       < S["        RF                  < S35        URQ                  U RO                  5       [.        5        gg)zg
Generate the code to return the argument in 'Naming.retval_cname'
and to continue at the yield label.
r4  r  r  r  z__PYX_STD_MOVE_IF_SUPPORTED(%s)r  r  r  profile	linetrace)r   Nz"__Pyx_Coroutine_SwapException(%s);z+__Pyx_Coroutine_ResetAndClearException(%s);z/* return from zasync r&  zgenerator, awaitr  zing value */z%s->resume_label = %d;z,return __Pyx__PyAsyncGenValueWrapperNew(%s);z
return %s;r  z.memview = NULL; z.data = NULL;rh  ))new_yield_labelr  replace	use_labelr  closure_tempsresettemps_in_user  r  r  r   r   r   r   r  r   r   r\  rq   put_trace_yieldr!  r   r   put_finish_refcount_contextcurrent_exceptr  r  is_awaitr  put_trace_resumerv   r  r   !generate_sent_value_handling_codesent_value_cnamer  r  r  r  r  )r[   r   r  resume_labelsavedr   r   r  
save_cnamer  r  s              rU   r  !YieldExprNode.generate_yield_code*  sT   
 #'"6"6%%c3/#1	|$$$**,'+~~'B'B'D#E55CCDIJLL%T23    11++,=?OPR9EA!!%.JJ)?)?UST (E ""--i8$$//<	i  !4!4$(( C&--~>((*>>((4JJ;f>T>TTU JJDvG]G]]^

))Hr1}}G'13 	4 	

+""I// / 	0T]]JJEH[H[[\JJ|f&9&99:|$i!!$((+',#Et%+%;%;ZHJ  >K
JJUJ78

9z12  -(((

:zZ[ (- 	..tV5L5LM%%d+HHDKKM63J3JKLOODKKM>: rW   c                 X    UR                  UR                  X R                  5      5        g rO   )r   r   r   r[   r   rx  s      rU   r  /YieldExprNode.generate_sent_value_handling_codeM*  s    

4**;ABrW   )r  r  N)r^   r_   r`   ra   r   r   r   r  r  r  r  r  rV  r  r  r  r  rb   rY   rW   rU   r  r  )  sE     wHDIMHLL4'C;JCrW   r  c                   0    \ rS rSrS rSS jrS rS rSrg)	_YieldDelegationExprNodeiQ*  c                     [        5       erO   )NotImplementedErrorr  s     rU   yield_from_func(_YieldDelegationExprNode.yield_from_funcR*  s    !##rW   Nc                 D   Uc  U R                   R                  U5        UR                  R                  [        R
                  SS9nUR                  U< SU R                  U5      < S[        R                  < SUc  U R                   R                  5       OU< S[        R                  < S3
5        Uc7  U R                   R                  U5        U R                   R                  U5        OU(       a  UR                  U[        5        UR                  SU-  5        UR!                  [        R                  [        5        UR                  R#                  U5        U R%                  U5        UR                  S	U-  5        UR!                  [        R                  [        5        U R&                  (       a  U R)                  U5        O$UR                  [        R                  [        5        UR                  S
5        U R+                  U5        UR                  S5        g )NFr  r  r  r  r	  r  zif (likely(%s == PYGEN_NEXT)) {z(} else if (likely(%s == PYGEN_RETURN)) {r  r   )r  r  r  r  r   PySendResult_typer   r   r   r  r   r!  r  r  r  r   r  r  r  r  fetch_iteration_resultpropagate_exception)r[   r   rO  rP  result_temps        rU   r  1_YieldDelegationExprNode.generate_evaluation_codeU*  s   HH--d3nn22:3O3O\a2b

  &""$0$8DHH lJ! 	" HH++D1HH%!!,?

4{BC++^<##K0  &

=KL++^<''-!!&"5"5~F

:  &

3rW   c                     UR                  [        R                  [        5        UR	                  UR                  U R                  5      5        g rO   )r  r   r!  r   r   r   r   r  s     rU   r  ,_YieldDelegationExprNode.propagate_exceptiont*  s1    ,,n=

4??488,-rW   c                     UR                  U R                  5       < S[        R                  < S[        R                  < S35        g )Nr  rh  r	  )r   r  r   r!  r  s     rU   r  /_YieldDelegationExprNode.fetch_iteration_resulty*  s.    

KKM
 	rW   rY   r  )	r^   r_   r`   ra   r   r  r  r  rb   rY   rW   rU   r  r  Q*  s    $>.
rW   r  c                   (    \ rS rSrSrSrS rS rSrg)YieldFromExprNodei*  Tz
yield fromc                     U R                   R                  R                  (       d  [        U R                  S5        U R                   R                  U5      U l         g )Nz-yielding from non-Python object not supported)r  r   r  r   r   rk  r   s     rU   r  'YieldFromExprNode.coerce_yield_argument*  s8    xx}}&&$((KL88..s3rW   c                 d    UR                   R                  [        R                  " SS5      5        g)NGeneratorYieldFromr7  __Pyx_Generator_Yield_Fromr   r   r   r   r  s     rU   r   !YieldFromExprNode.yield_from_func*  (    ))+*A*ABVXe*fg+rW   r  N)	r^   r_   r`   ra   r  r  r  r   rb   rY   rW   rU   r  r  *  s    ML4,rW   r  c                   (    \ rS rSrSrSrS rS rSrg)AwaitExprNodei*  Tr  c                 `    U R                   b!  U R                   R                  U5      U l         g g rO   r  r   s     rU   r  #AwaitExprNode.coerce_yield_argument*  s'    88xx2237DH  rW   c                 d    UR                   R                  [        R                  " SS5      5        g)NCoroutineYieldFromr7  __Pyx_Coroutine_Yield_Fromr  r  s     rU   r   AwaitExprNode.yield_from_func*  r  rW   r  N)	r^   r_   r`   ra   r  r  r  r   rb   rY   rW   rU   r  r  *  s     HL8
,rW   r  c                   4   ^  \ rS rSrS rU 4S jrS rSrU =r$ )AwaitIterNextExprNodei*  c                     UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        g )Nz8PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType();zif (unlikely(exc_type && (exc_type == PyExc_StopAsyncIteration || ( exc_type != PyExc_StopIteration && exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopAsyncIteration))))) {r  r  r   )r   r  s     rU   _generate_break%AwaitIterNextExprNode._generate_break*  sH    

MN

 b 	c 	

#$

8

3rW   c                 F   > U R                  U5        [        TU ]	  U5        g rO   )r!  rQ   r  r  s     rU   r  )AwaitIterNextExprNode.propagate_exception*  s    T"#D)rW   c                     UR                   (       d   S5       eUR                  SU-  5        U R                  U5        UR                  UR                  U R                  5      5        UR                  S5        g )Nz1AwaitIterNextExprNode outside of 'async for' loopr  r   )break_labelr   r!  r   r   r  s      rU   r  7AwaitIterNextExprNode.generate_sent_value_handling_code*  s[    T!TT

)K78T"

4??488,-

3rW   rY   )	r^   r_   r`   ra   r!  r  r  rb   rc   rd   s   @rU   r  r  *  s    
* rW   r  c                   2    \ rS rSr\rSrS rSrS r	S r
Srg)	GlobalsExprNodei*  r,   c                 D    UR                  [        R                  5        U $ rO   )r   r   globals_utility_coder   s     rU   rV  GlobalsExprNode.analyse_types*  s    W99:rW   zConstructing globals dictc                     gr  rY   rZ   s    rU   r  GlobalsExprNode.may_be_none*  r   rW   c                     UR                  U R                  5       < SUR                  U R                  5       U R                  5      < 35        U R	                  U5        g )Nz = __Pyx_Globals(); )r   r  r   r   r  r  s     rU   r  $GlobalsExprNode.generate_result_code*  sF    

KKM##DKKM488<> 	? 	T"rW   rY   N)r^   r_   r`   ra   r   r   r  rV  r@  r  r  rb   rY   rW   rU   r)  r)  *  s"    DG .K#rW   r)  c                       \ rS rSrS rSrg)LocalsDictItemNodei*  c                 l   U R                   R                  U5      U l         U R                  R                  U5      U l        U R                   R                  U5      U l         U R                  R                  R                  U5      (       a"  U R                  R                  U5      U l        U $ S U l        U $ rO   )r	  rV  r   rk  r   r  r   s     rU   rV   LocalsDictItemNode.analyse_types*  s    88))#.ZZ--c2
88..s3::??11#6666s;DJ  DJrW   r	  N)r^   r_   r`   ra   rV  rb   rY   rW   rU   r2  r2  *  s    rW   r2  c                   .   ^  \ rS rSrS rU 4S jrSrU =r$ )FuncLocalsExprNodei*  c                 6   [        UR                  R                  5        Vs/ s H!  o3R                  (       d  M  UR                  PM#     sn5      nU Vs/ s H  n[	        U[        XS9[        XSS9S9PM     nn[        R                  XUSS9  g s  snf s  snf )Nr  T)rw   r   r	  )r	  rq  )	r  r  r  rw   r2  r'  r7  r	  r  )r[   r   ry   r   rq  r^  r  s          rU   r  FuncLocalsExprNode.__init__*  s    $'KK$6$6$8H$85JJJEJJ$8H I

 '( 'S $)#93T:< ' 	 ( 	$U.2 	 	4H(s   BB$Bc                    > [         TU ]  U5      nUR                   Vs/ s H  nUR                  c  M  UPM     snUl        U$ s  snf rO   )rQ   rV  r	  r   )r[   ry   r   r  rT   s       rU   rV   FuncLocalsExprNode.analyse_types*  sI    w$S),0,@,@  :,@q$%GG "#,@  : :s
   AArY   r  rd   s   @rU   r6  r6  *  s    4 rW   r6  c                   2    \ rS rSrS rS rS rS rS rSr	g)	PyClassLocalsExprNodei*  c                 :    [         R                  X5        X l        g rO   )r  r  pyclass_dict)r[   r   r>  s      rU   r  PyClassLocalsExprNode.__init__*  s    *(rW   c                 J    U R                   R                  U l        SU l        U $ r  )r>  r   r  r   s     rU   rV  #PyClassLocalsExprNode.analyse_types*  s!    %%**	rW   c                     gr  rY   rZ   s    rU   r  !PyClassLocalsExprNode.may_be_none*  r   rW   c                 6    U R                   R                  5       $ rO   )r>  r  rZ   s    rU   r  PyClassLocalsExprNode.result*  s      ''))rW   c                     g rO   rY   r  s     rU   r  *PyClassLocalsExprNode.generate_result_code+  r   rW   )r  r>  r   N)
r^   r_   r`   ra   r  rV  r  r  r  rb   rY   rW   rU   r<  r<  *  s    )
*rW   r<  c                     UR                   (       a  [        U 5      $ UR                  (       a  [        XR                  5      $ [        X5      $ rO   )r{  r)  r|  r<  r`  r6  )r   
scope_nodery   s      rU   LocalsExprNoderJ  +  s9    
s##
$S//::c''rW   )not~r|  r   c                       \ rS rSrS/rSrSrS rS rS r	S r
S	 rS
 rS rS rS rS rS rS rS rS rS rSS jrSrg)UnopNodei+  r3	  TFc                 l    [         U R                     nU" U R                  R                  5      U l        g rO   )compile_time_unary_operatorsr   r3	  r   r[   r  s     rU   r8  "UnopNode.calculate_constant_result++  s'    +DMM:#DLL$@$@ArW   c                 ,   [         R                  U R                  5      nU(       d#  [        U R                  SU R                  -  5        U R
                  R                  U5      n U" U5      $ ! [         a  nU R                  U5         S nAg S nAff = f)Nz3Unary '%s' not supported in compile-time expression)	rP  rp   r   r   r   r3	  rD  r  rI  )r[   rC  r  r3	  rH  s        rU   rD  UnopNode.compile_time_value/+  s|    +//>$((Emm$% ,,11$7	-=  	-))!,,	-s   &A. .
B8BBc                     U R                   R                  U5      nUR                  (       d  UR                  (       a   UR	                  U R
                  5      nUb  U$ U R                  X5      $ rO   )r3	  r   r  r0  find_cpp_operation_typer   infer_unop_type)r[   ry   operand_typecpp_types       rU   r   UnopNode.infer_type;+  sW    ||..s3$$(;(;#;;DMMJH###C66rW   c                 V    UR                   (       a  UR                  (       d  [        $ U$ rO   )rv   r_  r   r[   ry   rX  s      rU   rW  UnopNode.infer_unop_typeC+  s    ##L,H,H!!rW   c                     U R                   R                  (       aC  U R                   R                  R                  (       a  U R                   R                  [        La  g[        R                  U 5      $ r  )r3	  r   r_  r   r   r  rZ   s    rU   r  UnopNode.may_be_noneI+  sG    <<!2!2!B!B||  	1##D))rW   c                    U R                   R                  U5      U l         U R                  U5      (       aA  [        [	        U R
                  U R                   R                  5      5      U l        SU l        U $ U R                  5       (       a%  U R                  U5        [        U l        SU l        U $ U R                  5       (       a  U R                  U5        U $ U R                  U5        U $ r  )r3	  rV  is_pythran_operationrJ   rA   r   r   r  is_py_operationcoerce_operand_to_pyobjectr   is_cpp_operationanalyse_cpp_operationanalyse_c_operationr   s     rU   rV  UnopNode.analyse_typesO+  s    ||11#6$$S))#$8HYHY$Z[DIDL  !!##++C0&DIDL
 	 ""$$&&s+  $$S)rW   c                 6    U R                   R                  5       $ rO   r3	  rW  rZ   s    rU   rW  UnopNode.check_const^+      ||''))rW   c                     U R                   R                  R                  =(       d     U R                   R                  R                  $ rO   )r3	  r   rv   r}  rZ   s    rU   rb  UnopNode.is_py_operationa+  s-    ||  ,,K0A0A0K0KKrW   c                     [        U5      nU R                  R                  nU=(       a    UR                  =(       d    UR                  $ rO   )rB   r3	  r   r  r>   )r[   ry   
np_pythranop_types       rU   ra  UnopNode.is_pythran_operationd+  s7    #C(
,,##Lw00KG4K4KLrW   c                 P    U R                  5       (       a  U R                  5         g g rO   rb  r  r   s     rU   r  UnopNode.nogil_checki+       !!NN "rW   c                 F    U R                   R                  nUR                  $ rO   )r3	  r   r  r-  s     rU   rd  UnopNode.is_cpp_operationm+  s    ||     rW   c                 D    U R                   R                  U5      U l         g rO   )r3	  rk  r   s     rU   rc  #UnopNode.coerce_operand_to_pyobjectq+  s    ||66s;rW   c           
         U R                   R                  (       a  UR                  S5        UR                  SU R                  5       -  5        UR                  SU R                  5       < SU R                  5       < SU R                  < U R
                  R                  5       < S35        g U R
                  R                   R                  (       a  U R                  U5        g U R                  (       Ga  U R                  5       (       a  U R                  S:X  a  [        XR                  U R                  5       < SU R                  < S	U R
                  R                  5       < S
3U R                   R                  (       a  U R                  5       OS U R                  U R                  5        g UR                  U R                  5       < SU R                  < S	U R
                  R                  5       < S
35        g g )Nz// Pythran unaryopr  r  r  r  r  r   r  r4  r  )r   r>   r   r  r   r3	  r&  rv   generate_py_operation_coder  rd  r   r   r   r   r  r  s     rU   r  UnopNode.generate_result_codet+  s?   99$$JJ+,JJ3dkkmCDJJ++-	/ 0
 \\**++D1\\\$$&&4+?+?3+F'hh%)[[]DMM4<<CVCVCXY%)YY%:%:DKKM(($*?*?A
 

DKKM4==$,,J]J]J_`a rW   c                 $   U R                  U5      nUR                  U R                  5       < SU< SU R                  R	                  5       < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )Nr  r  r=  )py_operation_functionr   r  r3	  r   r   r   r  r	  s      rU   r{  #UnopNode.generate_py_operation_code+  sk    --d3

&&(''txx@	B	C 	T"rW   c                     U R                   R                  R                  (       d=  [        U R                  SU R
                  < SU R                   R                  < S35        [        R                  U l        g )NzInvalid operand type for '' (r9  )r3	  r   r<  r   r   r   r   r3   rZ   s    rU   
type_errorUnopNode.type_error+  sH    ||  ))$(( 1 13 4))	rW   c                 (   U R                   R                  /nU R                  (       a0  U R                  (       d  UR	                  [
        R                  5        UR                  U R                  U R                  U5      nU(       a  U(       d  U R                  5         g U(       a  UR                  R                  U l        UR                  R                  U l        U R                  S:X  a=  SU l        [        U 5      (       a&  UR                  [         R"                  " SS5      5        OSU l        SU l        U R                  (       aN  U R                  (       d=  U R                   R                  R%                  U R                  [
        R                  S9nO/U R                   R                  R%                  U R                  5      nU(       a@  Uc=  ['        U R                  SU R                  < S[        < 35        U R                  5         g XPl        g )	Nr   TrW  r  r&  )rX  rZ  z' operator not defined for )r3	  r   is_inc_dec_op	is_prefixr  r   r  r  r   r   r  r   r   r  r   r   r   r   rV  r   )r[   ry   overload_checkoperand_typesr   rY  s         rU   re  UnopNode.analyse_cpp_operation+  sn   **+dnn  !6!67--dhh}U%OO#(::#=#=D #(::#=#=D ##s*#1$77(()@)@AY[k)lm#%D #%D dnn||((@@J,A,A A H ||((@@OHh.$((t% &OO	rW   )r   r   r   r  r3	  r   Nr  )r^   r_   r`   ra   r   infixr  r8  rD  r   rW  r  rV  rW  rb  ra  r  rd  rc  r  r{  r  re  rb   rY   rW   rU   rN  rN  +  si     {HEMB
-7 **LM
!<b(#*rW   rN  c                   N    \ rS rSrSr\R                  rS rS r	S r
S rS rSrg	)
NotNodei+  !c                 D    U R                   R                  (       + U l        g rO   )r3	  r   rZ   s    rU   r8  !NotNode.calculate_constant_result+  s    #'<<#?#??rW   c                     U R                   R                  U5      n U(       + $ ! [         a  nU R                  U5         S nAg S nAff = frO   )r3	  rD  r  rI  )r[   rC  r3	  rH  s       rU   rD  NotNode.compile_time_value+  sD    ,,11$7	-; 	-))!,,	-s   $ 
A	AA	c                 "    [         R                  $ rO   )r   ru  r\  s      rU   rW  NotNode.infer_unop_type+  s    %%%rW   c                     U R                   R                  U5      U l         U R                   R                  nUR                  (       a  U R	                  U5        U $ U R                   R                  U5      U l         U $ rO   )r3	  rV  r   r  re  re  r\  s      rU   rV  NotNode.analyse_types+  sb    ||11#6||(($$&&s+   <<99#>DLrW   c                 <    SU R                   R                  5       -  $ )Nz(!%s)r3	  r  rZ   s    rU   r  NotNode.calculate_result_code+      ,,...rW   )r   r3	  N)r^   r_   r`   ra   r   r   ru  r   r8  rD  rW  rV  r  rb   rY   rW   rU   r  r  +  s.     H!!D@-&/rW   r  c                   *    \ rS rSrSrS rS rS rSrg)UnaryPlusNodei+  r   c                     [         R                  " U R                  R                  [         R                  5      U l        g rO   )r   rh  r3	  r   r  r   s     rU   rf  !UnaryPlusNode.analyse_c_operation+  s)    22LLz446	rW   c                     g)NPyNumber_PositiverY   r  s     rU   r~  #UnaryPlusNode.py_operation_function+      "rW   c                     U R                  5       (       a  SU R                  R                  5       -  $ U R                  R                  5       $ )Nz(+%s))rd  r3	  r  rZ   s    rU   r  #UnaryPlusNode.calculate_result_code+  s<      ""T\\00222<<&&((rW   r+  N)	r^   r_   r`   ra   r   rf  r~  r  rb   rY   rW   rU   r  r  +  s     H6#)rW   r  c                   0    \ rS rSrSrS rS rS rS rSr	g)	UnaryMinusNodei+  r|  c                    U R                   R                  R                  (       a?  [        R                  " U R                   R                  [        R
                  5      U l        OKU R                   R                  R                  (       a  [        R
                  U l        OU R                  5         U R                  R                  (       a  SU l	        g g r  )
r3	  r   rp  r   rh  r  rt  r  rJ  r  r   s     rU   rf  "UnaryMinusNode.analyse_c_operation+  s    <<''"66!!:#8#8:DI\\&&"--DIOO99DJ  rW   c                     g)NPyNumber_NegativerY   r  s     rU   r~  $UnaryMinusNode.py_operation_function+  r  rW   c                     U R                   (       a  SU R                  R                  5       -  $ U R                  R                  R	                  S5      < SU R                  R                  5       < S3$ )N(-%s)r|  r  r9  )r  r3	  r  r   unary_oprZ   s    rU   r  $UnaryMinusNode.calculate_result_code ,  sN    ::T\\00222#||0099#>@S@S@UVVrW   c                 P    U R                   R                  5       nU(       a  SU-  $ g )Nr  )r3	  r5  )r[   r   s     rU   r5  )UnaryMinusNode.get_constant_c_result_code,  s&    779U?" rW   )r  r   N)
r^   r_   r`   ra   r   rf  r~  r  r5  rb   rY   rW   rU   r  r  +  s     H	#W#rW   r  c                   &    \ rS rSrS rS rS rSrg)	TildeNodei,  c                 b   U R                   R                  R                  (       a?  [        R                  " U R                   R                  [        R
                  5      U l        g U R                   R                  R                  (       a  [        R
                  U l        g U R                  5         g rO   )r3	  r   rD  r   rh  r  rt  r  r   s     rU   rf  TildeNode.analyse_c_operation,  sf    <<##"66!!:#8#8:DI\\&&"--DIOOrW   c                     g)NPyNumber_InvertrY   r  s     rU   r~  TildeNode.py_operation_function,  s     rW   c                 <    SU R                   R                  5       -  $ )Nz(~%s)r  rZ   s    rU   r  TildeNode.calculate_result_code,  r  rW   r+  N)r^   r_   r`   ra   rf  r~  r  rb   rY   rW   rU   r  r  ,  s    !/rW   r  c                       \ rS rSrS rSrg)	CUnopNodei,  c                     gr  rY   rZ   s    rU   rb  CUnopNode.is_py_operation ,  r   rW   rY   N)r^   r_   r`   ra   rb  rb   rY   rW   rU   r  r  ,  s    rW   r  c                   *    \ rS rSrSrS rS rS rSrg)DereferenceNodei#,  r   c                 \    UR                   (       a  UR                  $ [        R                  $ rO   )r0  r1  r   r3   r\  s      rU   rW  DereferenceNode.infer_unop_type(,  s#    )))(((rW   c                 P   U R                   R                  R                  (       aq  UR                  (       a:  [        R
                  " U R                   R                  R                  5      U l        g U R                   R                  R                  U l        g U R                  5         g rO   )r3	  r   r0  is_cppr   rT  r1  r  r   s     rU   rf  #DereferenceNode.analyse_c_operation.,  s_    <<##zz&55dll6G6G6Q6QR	 LL--77	OOrW   c                 <    SU R                   R                  5       -  $ r  r  rZ   s    rU   r  %DereferenceNode.calculate_result_code7,  r  rW   r+  N)	r^   r_   r`   ra   r   rW  rf  r  rb   rY   rW   rU   r  r  #,  s     H)/rW   r  c                   *    \ rS rSrSrS rS rS rSrg)DecrementIncrementNodei;,  Tc           
         U R                   R                  R                  (       d  U R                  (       a>  [	        U R
                  SU R                  < SU R                   R                  < S35        OK[	        U R
                  SU R                  < SU R                  < SU R                   R                  < S35        [        R                  U l        g )NzNo match for 'operatorz' (operand type is 'rY  zNo 'operatorz(int)' declared for postfix ')	r3	  r   r<  r  r   r   r   r   r3   rZ   s    rU   r  !DecrementIncrementNode.type_error?,  s    ||  ))~~dhh]]DLL$5$5!7 8 dhh]]DMM4<<3D3D!F G))	rW   c                 n   U R                   R                  R                  (       a?  [        R                  " U R                   R                  [        R
                  5      U l        g U R                   R                  R                  (       a  U R                   R                  U l        g U R                  5         g rO   )r3	  r   rp  r   rh  r  r0  r  r   s     rU   rf  *DecrementIncrementNode.analyse_c_operationI,  sj    <<''"66!!:#8#8:DI\\%%))DIOOrW   c                     U R                   (       a,  SU R                  < U R                  R                  5       < S3$ SU R                  R                  5       < U R                  < S3$ )Nr  r9  )r  r   r3	  r  rZ   s    rU   r  ,DecrementIncrementNode.calculate_result_codeR,  sJ    >>>#}}dll.A.A.CDD   $||224dmmDDrW   r+  N)	r^   r_   r`   ra   r  r  rf  r  rb   rY   rW   rU   r  r  ;,  s    M*ErW   r  c                    ^ ^ U U4S j$ )Nc                 "   > [        U 4TTS.UD6$ )Nr  r   )r  )r   r`  r  r   s     rU   <lambda>%inc_dec_constructor.<locals>.<lambda>Y,  s    5cjYYajeijrW   rY   r  s   ``rU   inc_dec_constructorr  X,  s	    jjrW   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)AmpersandNodei\,  r  c                 .    [         R                  " U5      $ rO   )r   
c_ptr_typer\  s      rU   rW  AmpersandNode.infer_unop_typeb,  s    $$\22rW   c                 B   U R                   R                  U5      U l         U R                   R                  nUR                  (       a  U R	                  USS9  UR
                  (       dj  UR                  (       dY  U R                   R                  5       (       d:  UR                  (       a  U R                  S5        U $ U R                  SU-  5        U $ UR                  (       a~  U R                  SU R                   R                  (       a  SU R                   R                  -  O5U R                   R                  (       a  SU R                   R                  -  OS-  5        U $ UR                  (       a  U R                  (       d  [        R                   " U5      U l        U $ )	NF)r  z'Cannot take address of memoryview slicez&Taking address of non-lvalue (type %s)z Cannot take address of Python %szvariable '%s'zobject attribute '%s'r  )r3	  rV  r   r  re  rv  r  r   r   r   rv   r   rw   r  rp  r   r  )r[   ry   argtypes      rU   rV  AmpersandNode.analyse_typese,  s&   ||11#6,,##&&s5&A$$(<(<@[@[@]@]))

DE K 

CgMNKJJ97;||7K7K$,,"3"33DHLLD]D]'$,,*@*@@  K##499"--g6DIrW   c                 6    U R                   R                  5       $ rO   )r3	  r  rZ   s    rU   rW  AmpersandNode.check_constz,  s    ||,,..rW   c                 h    [        U R                  U5        [        R                  U l        SU l        g Nr  r   r   r   r3   r   rw  r[   messs     rU   r   AmpersandNode.error},  %    dhh))	$rW   c                 <    SU R                   R                  5       -  $ )Nz(&%s)r  rZ   s    rU   r  #AmpersandNode.calculate_result_code,  r  rW   c           
         U R                   R                  R                  (       a  U R                  S:X  a  [	        XR
                  U R                  5       < SU R                  < SU R                   R                  5       < S3U R                  R                  (       a  U R                  5       OS U R                  U R                  5        g g g )Nr   r  r4  r  )r3	  r   r  r   r   r   r  r   rv   r   r  r  s     rU   r  "AmpersandNode.generate_result_code,  s    LL**t/C/Cs/J#D((!%t||?R?R?TU!%!6!6D$$d&;&;= 0K*rW   )r3	  rw  r   N)r^   r_   r`   ra   r   rW  rV  rW  r   r  r  rb   rY   rW   rU   r  r  \,  s'     H3*/%
/=rW   r  )r   r|  rL  c                    [        U[        5      (       aX  US:X  aR  [        UR                  [        [        R
                  " UR                  5      * 5      UR                  UR                  S9$ [        U[        5      (       a.  UR                  Us=:X  a  S;   a  O  O[        U SU4S-  -  S5        [        U   " U UUS9$ )Nr|  )r   r   rf  re  z+-zAPython has no increment/decrement operator: %s%sx == %s(%sx) == x      )r   r3	  )r   r  r   r~   r   rX  r   rf  re  rN  r   r   unop_node_classes)r   r   r3	  s      rU   	unop_noder  ,  s     '7##CW[[#u7J7J7==7Y6Y2Z ' 0 07;K;KM 	M	GX	&	&7+;+;x+O4+OX]e\ghi\ijlmnX&s rW   c                   x    \ rS rSrS/rS=r=rrS rS r	S r
S rS rS	 rS
 rS rS rSS jrS rS rS rSrg)r  i,  r3	  Nc                     grX  rY   r   s     rU   ro  TypecastNode.type_dependencies,  ra
  rW   c                     U R                   c=  U R                  R                  U5      nU R                  R                  X!5      u  o0l         U R                   $ rO   )r   r1  r  
declarator)r[   ry   r1  r  s       rU   r   TypecastNode.infer_type,  sB    99..s3I??229BLAyyyrW   c                 Z   U R                   c=  U R                  R                  U5      nU R                  R                  X!5      u  o0l         U R                  R                  5       (       a  U R                  5         U R                   R                  (       a+  [        U R                  S5        [        R                  U l         U R                  R                  U5      U l        U R                   [        R                  L a  U R                  R                  U5      $ U R                   R                  nU R                  R                   R                  nU(       ar  U(       dk  U R                  R!                  5       (       aL  U R                   R"                  (       d1  U R                   R$                  (       d  [        U R                  S5        U(       Ga  U(       Gd  U R                   [&        L a;  U R                  R                   R(                  (       a  [+        U R                  U5      $ U R                  R                   R-                  U5      (       a8  [.        U l        U R                  R3                  U R                   U5      U l        GOSU R                  R                   R4                  (       au  U R                  R                   R                  R6                  (       dE  U R                  R                   R                  R8                  (       d  [        U R                  S5        O=[;        U R                  SU R                  R                   < SU R                   < S35        U R                  R=                  U5      U l        GOZU(       Ga  U(       Gd	  U R                   R?                  U5      (       a-  U R                  R3                  U R                   U5      U l        GOU R                   R4                  (       ab  U R                   R                  R6                  (       d;  U R                   R                  R8                  (       d  [        U R                  S5        GO[;        U R                  SU R                   < SU R                  R                   < S35        GOAU(       a  U(       a  U R@                  (       a&  [C        U R                  U R                   USS	9U l        O[E        U R                  [F        5      (       a+  U R                  R3                  U R                   U5      U l        OU R                   RH                  (       aF  U R                  R                   RH                  (       a!  U R                  R=                  U5      U l        OPU R                  R                   RJ                  (       a+  U R                  R3                  U R                   U5      U l        U R                   R4                  (       a  U R                   R                  R                  (       a  U R                   R                  RL                  (       al  U R                  R                   nUR4                  (       a  UR                  nUR                  (       a(  URL                  (       d  [;        U R                  S
S5        U $ )NzCannot cast to a function typez>Casting temporary Python object to non-numeric non-Python typez>Python objects cannot be cast from pointers of primitive typeszNo conversion from z to z, python object pointer used.z<Python objects cannot be cast to pointers of primitive typesT)notnonezQCasting a GIL-requiring function into a nogil function circumvents GIL validationr,   )'r   r1  r  r  r3	  r   r8  rv  r   r   r   r3   rV  ru  re  rv   r  rp  r  r   rD  rE  r  r   r2  r8  r0  r  r
  r   rj  create_from_py_utility_code	typecheckrH  r   ra  rJ  r  r   )r[   ry   r1  r  to_pyfrom_pyrp  s          rU   rV  TypecastNode.analyse_types,  s   99..s3I??229BLAy<<++--**,99!!$((02"--DI||11#699
...<<11#66		%%,,##//5T\\%>%>%@%@99''		0F0Fdhh `ayyJ&4<<+<+<+C+C+DLL#>>""99#>>$2!#||55diiE<<$$++ LL--77??4<<CTCTC^C^ChChdhh(hi DHH))499'6 7#||<<SAUyy44S99#||55diiE!!		++33tyy7J7J7T7T$(($bcIIt||00#2 3~~-dllDIIsTXYDLL.99#||55diiEYY!!dll&7&7&B&B<<88=DL\\''<<11$))SADL99		 3 3 @ @TYYEXEXE^E^ll''G~~!++##GMMkmnprW   c                 6    U R                   R                  5       $ rO   )r3	  r  rZ   s    rU   r  TypecastNode.is_simple,  s    ||%%''rW   c                 6    U R                   R                  5       $ rO   )r3	  r  rZ   s    rU   r  TypecastNode.is_ephemeral,  s    ||((**rW   c                 \    U R                   =(       d    U R                  R                  5       $ rO   )r  r3	  rw  rZ   s    rU   rw  !TypecastNode.nonlocally_immutable,  s    ||Bt||@@BBrW   c                     U R                   (       a?  U R                   R                  (       a#  U R                  (       a  U R                  5         g g g g rO   )r   rv   r  r  r   s     rU   r  TypecastNode.nogil_check-  s0    99..4<<NN 4@.9rW   c                 6    U R                   R                  5       $ rO   ri  rZ   s    rU   rW  TypecastNode.check_const-  rk  rW   c                 X    U R                  U R                  R                  5      U l        g rO   )r  r3	  r   rZ   s    rU   r8  &TypecastNode.calculate_constant_result	-  s    #99$,,:V:VWrW   c                    Uc  U R                   R                  5       nU R                  R                  (       Ga  U R                   R                  5       nU R                   R                  R                  (       a  U R                  R                  R                  U R                   R                  R                  U5      5      nU R                  R                  R                  U R                   R                  R                  U5      5      nO'U R                  R                  R                  U5      nSnU R                  R                  < SU< SU< S3$ U R                  R                  U5      $ Nr}  r  r  r9  )	r3	  r  r   rJ  	real_typer	  	real_code	imag_coder:  )r[   operand_result	real_part	imag_parts       rU   r  "TypecastNode.calculate_result_code-  s
   !!\\002N99!\\002N||  ++ II//99LL%%//?A	 II//99LL%%//?A	 !II//99.I		II(( 
 99&&~66rW   c                 |    U R                   R                  5       nU(       a  U R                  R                  U5      $ g rO   )r3	  r5  r   r	  )r[   r  s     rU   r5  'TypecastNode.get_constant_c_result_code -  s1    @@B99&&~66 rW   c                     U R                   R                  (       a,  U R                  (       d  U R                  R	                  U5      $ [
        R	                  X5      $ rO   )r   rv   r  r3	  r  r   r-  s     rU   r  TypecastNode.result_as%-  s;    99  <<))$//%%d11rW   c                    U R                   (       an  UR                  U R                  5       < SU R                  R                  5       < S35        UR	                  U R                  5       U R                  5       5        g g )Nz = (PyObject *)r  )r  r   r  r3	  r  r,  r  s     rU   r  !TypecastNode.generate_result_code,-  sT    <<JJKKMLL'')+, OODKKM4::<8 rW   )r   r3	  r2  r   rO   )r^   r_   r`   ra   r   r1  r  r   ro  r   rV  r  r  rw  r  rW  r8  r  r5  r  r  rb   rY   rW   rU   r  r  ,  s^     {H$((I(
T>@(+C*X7(7
29rW   r  zStart may not be givenz'Stop must be provided to indicate shapezVStrides may only be given to indicate contiguity. Consider slicing it after conversionz2Can only create cython.array from pointer or arrayz7Pointer base type does not match cython.array base typec                   v    \ rS rSrSrSS/rSrSrSrSr	\
R                  rS rS	 rS
 rS rS r\S 5       rSrg)r:  i=-  a>  
Used when a pointer of base_type is cast to a memoryviewslice with that
base type. i.e.

    <int[:M:1, :N]> p

creates a fortran-contiguous cython.array.

We leave the type set to object so coercions to object are more efficient
and less work. Acquiring a memoryviewslice from this will be just as
efficient. ExprNode.coerce_to() will do the additional typecheck on
self.compile_time_type

This also handles <int[:, :]> my_c_array


operand             ExprNode                 the thing we're casting
base_type_node      MemoryViewSliceTypeNode  the cast expression node
r3	  shapesNTcc                 ~   SSK Jn  U R                  R                  U5      U l        U R                  (       a  U R                  nO%U R
                  R
                  R                  U5      nU R
                  R                  n[        U l	        / U l
        [        U5      nU R                  R                  nU R                  R                  R                  (       dK  U R                  R                  R                  (       d&  [        U R                  R                  [         5        U $ / nUR                  (       aL  UR                  (       a:  UR#                  UR$                  5        UR&                  nUR                  (       a  M:  O9UR                  (       a  UR&                  nO[        U R                  SU-  5        U $ UR)                  U5      (       d7  UR*                  (       d&  [        U R                  R                  [,        5        U $ U R                  R                  R                  (       a?  [        U5      U:w  a0  [        U R                  R                  SU[        U5      4-  5        U $ [/        U5       GH  u  pU	R0                  R2                  (       d(  [        U	R0                  R                  [4        5        U s  $ U	R6                  R2                  (       a\  U(       a7  Xx   n
[9        U R                  [;        U
5      U
[<        R>                  S9U	l        O[        U	R                  [@        5        U s  $ U	R6                  R                  U5      U	l        U	R6                  RC                  U RD                  U5      nURF                  (       d  URI                  U5        U R                  R#                  U5        USUS-
  4;   nU	RJ                  R2                  (       Gd  U(       Ga  U	RJ                  R                  U5      U	l%        U	RJ                  R                  RL                  (       dd  U	RJ                  RF                  (       aI  U	RJ                  R                  RN                  (       d$  [        U	RJ                  R                  S5        U s  $ U	RJ                  RQ                  U5      S:w  a(  [        U	RJ                  R                  [R        5        U s  $ US:X  a
  SU l*        GMq  GMt  U	RJ                  R2                  (       a  GM  U(       a  GM  [        U	RJ                  R                  [R        5        U s  $    U R                  RV                  (       d   U R                  RI                  U5      U l        S	/[        U5      -  nU RT                  S:X  a  S
US'   OS
US'   [<        RX                  " X45      U l-        U RZ                  R]                  U R                  5        U R_                  U5      U l	        URa                  U5        URc                  URe                  URf                  Rh                  5      5        U $ )Nr,   r'  zunexpected base type %s foundz/Expected %d dimensions, array has %d dimensionsrz  r   zExpected an integer literalfortran)r	  follow)r	  contigrX  )5r&  r(  r3	  rV  array_dtypebase_type_noder  r  r3   r   r  r   r0  ru  r   r   ERR_NOT_POINTERr  rC  r1  r3  r  ERR_BASE_TYPEr  r   rB  	ERR_STARTr   r  r~   r   r  ERR_NOT_STOPr8  
shape_typer   r  r   rD  r<  rD  	ERR_STEPSmoder   r  r6  validate_memslice_dtypeget_cython_array_typeuse_cython_array_utility_coder   get_typeinfo_to_format_coder\  r  )r[   ry   r(  r  r  r.  r1  array_dimension_sizesaxis_noaxisdimsizeshapefirst_or_lasts                rU   rV  CythonArrayNode.analyse_types[-  sY    ||11#6**K--<<DDSIK""''	4y LL%%	||  ''0A0A0J0J$,,""O4K !#$$%,,Y^^<%//	 $$$ !++I$((;iGHK!!+..)2C2C$,,""M2K\\''C0E,F$,N$,,""C-137L3M,NOP K
 't_MG::%%djjnni0yy  (3<G 'G8?-7-B-B!DDI $((L1K		//4DIII''=E##$$S)KKu%#4!8}4M99$$$ II33C8			--$))2F2F		//$))--)FGK99//49$))--3Ka< )DI   YY&&&}}diimmY/S -V ||##<<66s;DL$%D	199	!*DG+DH';;KN22488<..s3	005223;;3\3\]	
 rW   c                     U R                   (       a  [        S5      eUR                  R                  U R                  S5      U l         g )Nztemp allocated multiple timesT)r  r  r  r  r   r  s     rU   r  $CythonArrayNode.allocate_temp_result-  s1    >>>??55diiFrW   c                 $    U R                  U5      $ rO   )r(  r   s     rU   r   CythonArrayNode.infer_type-  s    ))#..rW   c                     UR                   R                  nUR                  5         UR                  R	                  S5      R
                  $ )Narray)r\  cython_scopeload_cythonscope	viewscopery  r   )r[   ry   r8  s      rU   r(  %CythonArrayNode.get_cython_array_type-  s:    {{//%%'%%,,W5:::rW   c                 "  ^ SSK Jn  U R                   Vs/ s H,  nU R                  R	                  UR                  5       5      PM.     nnU R                  R                  nTR                  R                  [        S5      nTR                  R                  [        S5      nTR                  R                  [        S5      nSUR                  5       -  n	UR                  TU5      n
U R                  R                  R                   (       a  TR#                  SU R                  R                  5       -  5        TR#                  S5        TR#                  TR%                  U R                  R&                  5      5        TR#                  S5        TR#                  U< SU
< S	TR)                  XpR&                  5      < 35        TR+                  U[        5        S
[-        U5      -  nTR#                  U< SU< SSR/                  U5      < S	TR)                  X`R&                  5      < 35        TR+                  U[        5        TR#                  S5        TR#                  U< SU< S	TR)                  XR&                  5      < 35        TR#                  S5        TR#                  U< SU< S35        TR#                  S5        TR#                  U R                  5       < SU< SU	< SU< SU R0                  < SU R                  R                  5       < S	TR)                  U R                  5       U R&                  5      < 35        U R3                  T5        U4S jnU" U5        U" U5        TR                  R5                  U5        g s  snf )Nr,   r  Tr  z
if (!%s) {zQPyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");r   z = __pyx_format_from_typeinfo(&r=  z __PYX_BUILD_PY_SSIZE_T z = Py_BuildValue("(" z ")", r  r
  z = PyBytes_AsString(r  z = PyBytes_AS_STRING(r  r  z = __pyx_array_new(, "z", (char *) c                 h   > TR                  U [        5        TR                  R                  U 5        g rO   )r  r   r  r  )r  r   s    rU   dispose5CythonArrayNode.generate_result_code.<locals>.dispose.  s%    !!$7NN''-rW   )r&  r  r  r$  r	  r  r6  rA  r  r  r   r1   rQ  get_type_information_cnamer3	  r   r0  r   r   r   r   r  r   r  r&  r  r  )r[   r   r  r/  r  rA  shapes_tempformat_tempformat_ptr_tempitemsize	type_infobuildvalue_fmtr?  s    `           rU   r  $CythonArrayNode.generate_result_code-  s    $(;;0#.% //++ELLN;#. 	 0""((nn22>4Hnn22>4H..66M%">">"@@55dEB	<<##JJ|dll&9&9&;;<JJ S TJJtt||'7'789JJsO

##K:
 	
 	^43c&kA

IIf##K:	
 	 	^4 	

89

[##OXX>
 	 	

7

[
 	 	

8

KKM?DIIt||?R?R?T##DKKM488<
 	
 	T"	. 	##O4w0s   3Nc           	      j   UR                   nUR                  n[        U5      n/ nUR                  (       a9  UR	                  [        X5UUS95        UR                  nUR                  (       a  M9  [        USSS9US   l        [        R                  " X6US9n[        X7XS9nUR                  U5      nU$ )z0
Given a C array type, return a CythonArrayNode
rk  r	  T)r   rd  rX  )r  r  )r  r3	  r  )r   r   rC  ru  r  r  r1  r  r   r   MemoryViewSliceTypeNoder:  rV  )	rS   src_nodery   r   r1  r  r  memslicenoder  s	            rU   r;  CythonArrayNode.from_carray.  s    
 llMM	SM	  KK	#Y,57 8!++I      3TBR44SDMO )1J%%c*rW   )r6  r&  r3	  r  r  r   )r^   r_   r`   ra   r  r   r  r  r&  r  r   r  r$  rV  r  r   r(  r  r  r;  rb   rY   rW   rU   r:  r:  =-  sc    ( 8$HFGDK--JhTG/;
>5@  rW   r:  c                   8    \ rS rSr\R
                  rS rS rSr	g)
SizeofNodei+.  c                     gr  rY   rZ   s    rU   rW  SizeofNode.check_const0.  r  rW   c                     g rO   rY   r  s     rU   r  SizeofNode.generate_result_code3.  r   rW   rY   N)
r^   r_   r`   ra   r   r  r   rW  r  rb   rY   rW   rU   rO  rO  +.  s     ##DrW   rO  c                   .    \ rS rSr/ rSrS rS rS rSr	g)r  i7.  Nc                      U R                  c>  U R                   R                  U5      nU R                  R                  Xq5      u  pXl
        U R                  5         U $ rO   )r1  module_pathry  r  r7  r   r{  rw   SizeofVarNoderV  r  r  r  
check_type)
r[   ry   r  ro  r3	  r  r   r1  r  r  s
             rU   rV  SizeofTypeNode.analyse_types@.  sQ      == ..s3I//11)AKA$MrW   c                 L   U R                   nU(       d  g UR                  (       a(  UR                  (       d  [        U R                  S5        g UR
                  (       a  [        U R                  S5        g UR                  5       (       d  [        U R                  SU-  5        g g )Nz Cannot take sizeof Python objectzCannot take sizeof voidz'Cannot take sizeof incomplete type '%s')r  rv   r^  r   r   r  is_complete)r[   r  s     rU   rX  SizeofTypeNode.check_typeT.  sq    ==(B(B$((>?$((56%%''$((EPQ (rW   c                     U R                   R                  (       a  U R                   R                  SSS9nSU-  $ U R                   R                  5       nSU-  $ )Nr&  r,   )deref(sizeof(%s)))r  r^  r   rQ  )r[   rm	  s     rU   r  $SizeofTypeNode.calculate_result_code_.  sV    ==** }}55b5BH (( }};;=H((rW   )r  )
r^   r_   r`   ra   r   r  rV  rX  r  rb   rY   rW   rU   r  r  7.  s     HH(	R)rW   r  c                   ,    \ rS rSrS/rS rS rS rSrg)rW  ii.  r3	  c                    U R                   R                  U5      nU(       ai  X l        U R                  R                  (       a+   U R                  R	                  UR
                  5      U l        [        U l
        U R                  5         U $ U R                   R                  U5      U l         U $ ! [         a#    [        U R                   R                  S5         Nkf = f)NzLType cannot be specialized since it is not a fused argument to this function)r3	  r  r  r  r  r  r-   r   r   r  rT   rX  rV  )r[   ry   operand_as_types      rU   rV  SizeofVarNode.analyse_typesp.  s     ,,66s;+M}}%%j$(MM$<$<S=R=R$SDM ,DNOO   <<55c:DL ( j$,,**hjjs   *B. .*CCc                 <    SU R                   R                  5       -  $ )Nr_  r  rZ   s    rU   r  #SizeofVarNode.calculate_result_code.  s     3 3 555rW   c                     g rO   rY   r  s     rU   r  "SizeofVarNode.generate_result_code.  r   rW   )rT   r  r3	  N)	r^   r_   r`   ra   r   rV  r  r  rb   rY   rW   rU   rW  rW  i.  s    
 {H$6rW   rW  c                   N    \ rS rSrS/rSrSrSrS rSr	S r
S rS	 rS
 rS rSrg)
TypeidNodei.  r3	  Nr,   c                 &   UnUR                   (       d  UR                  nUR                   (       d  M  UR                  SU R                  5      nUR	                  S5      n[
        R                  " [
        R                  " UR                  SS95      $ )Nzlibcpp.typeinforF  T)r  )	r{  ru  find_moduler   ry  r   rW	  r
  r   )r[   ry   
env_moduletypeinfo_moduletypeinfo_entrys        rU   get_type_info_typeTypeidNode.get_type_info_type.  sv    
,,#//J ,,,$001BDHHM(//<,,Z-P-PQ_QdQdos-tuurW   ztypeid operatorc                    U R                   (       d  [        R                  U l         U R                  U5        U R	                  U5      nU(       d  U R                  S5        U $ U R                  c  U $ X l         U R                  R                  U5      nU(       a  X0l        SU l	        S U l        OU R                  R                  U5      U l        SU l	        S U l        U R                  R                   R                  (       a  U R                  S5        U $ U R                  R                   R                  (       a  U R                  S5        U $ U R                  R                   R                  5       (       d*  U R                  SU R                  R                   -  5        U $ UR                  [        R                   " SS5      5        U $ )	NzKThe 'libcpp.typeinfo' module must be cimported to use the typeid() operatorTFz$Cannot use typeid on a Python objectzCannot use typeid on voidz)Cannot use typeid on incomplete type '%s'rW  r  )r   r   r3   rE  rp  r   r3	  r  r  r  rV  rv   r  r[  r   r   r   )r[   ry   rF  as_types       rU   rV  TypeidNode.analyse_types.  sO   yy"--DIs++C0	JJdeK<<K	,,::3?#MDLDL LL66s;DM DLDL}}!!--

AB##++

67]]''3355

FI[I[[\[445MO_`arW   c                 h    [        U R                  U5        [        R                  U l        SU l        g r  r  r  s     rU   r   TypeidNode.error.  r  rW   c                     gr  rY   rZ   s    rU   rW  TypeidNode.check_const.  r  rW   c                     U R                   $ rO   r  rZ   s    rU   r   TypeidNode.calculate_result_code.  r  rW   c                     U R                   (       a  U R                  R                  5       nOU R                  R                  5       n[	        XR
                  U R                  < SU< S3S S U R                  5        g )Nz
 = typeid(r  )r  r  rQ  r  r   r   r  r  )r[   r   rm	  s      rU   r  TypeidNode.generate_result_code.  sT    <<}};;=H}}++-Hhh"&..(;$--	/rW   )r  r  r3	  rw  r   )r^   r_   r`   ra   r   r  r  r  rp  cpp_messagerV  r   rW  r  r  rb   rY   rW   rU   rj  rj  .  sA     {HHKGv $K@%
/rW   rj  c                   @    \ rS rSrSr\rS/rS rS r	S r
S rS rS	rg)

TypeofNodei.  Nr  c                 "   U R                   R                  U5      U l         [        R                  " [	        U R                   R
                  5      5      n[        U R                  US9nUR                  U5      nUR                  U5      U l	        U $ )Nr  )
r3	  rV  r
   r|  r~   r   r4  r   rk  r  )r[   ry   r   r  s       rU   rV  TypeofNode.analyse_types.  sn    ||11#6,,S1B1B-CDdhhe4'',11#6rW   c                 n    U R                   R                  U5      U l         U R                   R                  $ rO   )r3	  rV  r   r   s     rU   r  TypeofNode.analyse_as_type.  s(    ||11#6||   rW   c                     gr  rY   rZ   s    rU   r  TypeofNode.may_be_none.  r   rW   c                 :    U R                   R                  U5        g rO   )r  r  r  s     rU   r  #TypeofNode.generate_evaluation_code.  s    --d3rW   c                 6    U R                   R                  5       $ rO   )r  r  rZ   s    rU   r   TypeofNode.calculate_result_code.  s    ||1133rW   )r  r3	  )r^   r_   r`   ra   r  r   r   r   rV  r  r  r  r  rb   rY   rW   rU   r  r  .  s.     GD{H!44rW   r  c                 d     U R                   nU" X5      $ ! [         a    UR                  n N f = frO   )
__matmul__r   __rmatmul__)r  br  s      rU   matmul_operatorr  .  s6    	!<<D Az  	!==D	!s    //r  <===r  >=r  rv  is_notr   r  ///<<%r   r  **c                 
    X;   $ rO   rY   xseqs     rU   r  r  /  s    rW   c                 
    X;  $ rO   rY   r  s     rU   r  r  /  s    Q\rW   )>>r|  ^@innot_inc                     [         R                  U R                  5      nU(       d#  [        U R                  SU R                  -  5        U$ )Nz4Binary '%s' not supported in compile-time expression)compile_time_binary_operatorsrp   r   r   r   )r   r  s     rU   get_compile_time_binopr  /  s=    (,,T]];DdhhB-- 	! KrW   c                      ^  \ rS rSrSS/rSrS rS rS rS r	S	 r
S
 rS rS rS rS rS rS rS rS rS rS rU 4S jrS rS rSrU =r$ )	BinopNodei'/  rw  rx  Fc                     [         U R                     nU" U R                  R                  U R                  R                  5      U l        g rO   )r  r   rw  r   rx  rQ  s     rU   r8  #BinopNode.calculate_constant_result7/  s7    ,T]];#MM))MM)) +rW   c                     [        U 5      nU R                  R                  U5      nU R                  R                  U5      n U" X45      $ ! [         a  nU R                  U5         S nAg S nAff = frO   )r  rw  rD  rx  r  rI  )r[   rC  r  rw  rx  rH  s         rU   rD  BinopNode.compile_time_value=/  se    %d+==33D9==33D9	-++ 	-))!,,	-s   A 
A0A++A0c                     U R                  U R                  R                  U5      U R                  R                  U5      U5      $ rO   )r  rw  r   rx  r   s     rU   r   BinopNode.infer_typeF/  s<     8 8 = $ 8 8 =sD 	DrW   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  U5      $ rO   )rw  rV  rx  r  r   s     rU   rV  BinopNode.analyse_typesJ/  s?    33C833C8%%c**rW   c                    U R                  U5      (       af  U R                  U R                  R                  U R                  R                  U5      U l        U R                  R
                  (       d   eSU l        U $ U R                  5       (       a  U R                  U5        U R                  U R                  R                  U R                  R                  U5      U l        SU l        U R                  R                  (       d(  U R                  [        so l        U R                  X!5      $  U $ U R                  5       (       a  U R                  U5        U $ U R                  U5        U $ r  )ra  r  rw  r   rx  r>   r  rb  coerce_operands_to_pyobjectsrv   r   r8  rd  re  rf  )r[   ry   original_types      rU   r  BinopNode.analyse_operationO/  s)   $$S))((););)-););SBDI99,,,,DL  !!##--c2((););)-););SBDIDL99((+/99n(y~~m99 ) 	 ""$$&&s+  $$S)rW   c                 v    U R                  U R                  R                  U R                  R                  5      $ rO   )is_py_operation_typesrw  r   rx  rZ   s    rU   rb  BinopNode.is_py_operationg/  s)    ))$--*<*<dmm>P>PQQrW   c                     UR                   =(       d2    UR                   =(       d    UR                  =(       d    UR                  $ rO   )rv   r}  r[   type1type2s      rU   r  BinopNode.is_py_operation_typesj/  s+      [E$5$5[[EOO[rW   c                 x    U R                  U R                  R                  U R                  R                  U5      $ rO   )is_pythran_operation_typesrw  r   rx  r   s     rU   ra  BinopNode.is_pythran_operationm/  s,    ..t}}/A/A4==CUCUWZ[[rW   c                     [        U5      =(       aA    [        U5      =(       a    [        U5      =(       a    [        U5      =(       d    [        U5      $ rO   )rB   r=   r>   )r[   r  r  ry   s       rU   r  $BinopNode.is_pythran_operation_typesp/  sB    c" B3E:i?bch?iB&@/%*@	BrW   c                     U R                   R                  R                  =(       d     U R                  R                  R                  $ rO   rw  r   r  rx  rZ   s    rU   rd  BinopNode.is_cpp_operationv/  s2    ""// /}}!!..	0rW   c                 n   UR                  U R                  U R                  U R                  /5      nU(       d  U R	                  5         g UR
                  nUR                  U l        UR                  U l        U R                  S:X  a=  SU l        [        U 5      (       a&  UR                  [        R                  " SS5      5        UR                  (       a  UR                  n[        UR                   5      S:X  a9  U R                  R#                  UR                   S   R
                  U5      U l        OpU R                  R#                  UR                   S   R
                  U5      U l        U R                  R#                  UR                   S   R
                  U5      U l        UR$                  U l        g )Nr   r,   rW  r  r   )r/  r   rw  rx  r  r   r   r   r  r   r   r   r   r0  r1  r   r   r8  r  )r[   ry   r   rX  s       rU   re  BinopNode.analyse_cpp_operationz/  s@   ##DMMDMM4==3QROOJJ	(88(883& DL-d33$$[%<%<=UWg%hi!++Iy~~!# MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM))	rW   c                    U R                  XU5      (       a  [        [        U R                  X5      5      $ U R	                  X5      (       a  UR
                  (       a  [        R                  nO!UR                  (       a  [        R                  nUR
                  (       a  [        R                  nO!UR                  (       a  [        R                  nUR                  (       d  UR                  (       a5  XL a  U[        La  U R                  S;   a  U$ U R                  X5      nUb  U$ [        $ UR                  (       d  UR                  (       a  [        R                   $ U R#                  X5      $ )Nz**%+|&^)r  rJ   r@   r   r  r  r   r   r  r   r_  r   infer_builtin_types_operationr   r<  r   r3   compute_c_result_type)r[   r  r  ry   r  s        rU   r  BinopNode.result_type/  s   **5==1$--NOO%%e33**'',,**'',,$$(=(=>e9&<R[A[ L"@@N*&&!!^^u~~(((--e;;rW   c                     g rO   rY   r  s      rU   r  'BinopNode.infer_builtin_types_operation/  r  rW   c                 P    U R                  5       (       a  U R                  5         g g rO   rs  r   s     rU   r  BinopNode.nogil_check/  ru  rW   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        g rO   )rw  rk  rx  r   s     rU   r  &BinopNode.coerce_operands_to_pyobjects/  s.    88=88=rW   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ rO   rw  rW  rx  rZ   s    rU   rW  BinopNode.check_const/  '    }}((*Jt}}/H/H/JJrW   c                    > [         TU ]  5       =(       d;    U R                  R                  5       =(       d    U R                  R                  5       $ rO   )rQ   r  rw  rx  )r[   rT   s    rU   r  BinopNode.is_ephemeral/  s@    $& M**,M040J0J0L	NrW   c                 F   U R                   R                  nU R                  R                  nU R                  R                  (       Ga/  UR	                  S5        UR	                  SU R                  5       -  5        U R                  S:X  ao  UR	                  SU R                  5       < SU R                  5       < SU R                   R                  5       < SU R                  R                  5       < S3	5        g UR	                  SU R                  5       < SU R                  5       < S	U R                   R                  5       < S
U R                  < S
U R                  R                  5       < S35        g UR                  (       d  UR                  (       Ga  U R                  U5      nU R                  S:X  a  SOSnUR                  (       a  U R                   R                  5       OU R                   R                  5       nUR                  (       a  U R                  R                  5       OU R                  R                  5       nUR	                  U R                  5       < SU< SU< SU< U< SUR                  U R                  5       U R                  5      < 3
5        U R                  U5        g U R                  (       a  U R                  5       (       a  U R                   S:X  a}  [#        XR                  U R                  5       < SU R%                  5       < S3U R                  R                  (       a  U R                  5       OS U R&                  U R(                  5        g UR	                  U R                  5       < SU R%                  5       < S35        g g )Nz// Pythran binopr  r  r  r  z$){pythonic::numpy::functor::power{}(r  r	  r  r4  r  z	, Py_Noner&  r  r  r=  r   r  )rw  r   rx  r>   r   r  r   r&  rv   r~  r   r   r   r  r  rd  r   r   r  r   r  )r[   r   r  r  rr  
extra_args
op1_result
op2_results           rU   r  BinopNode.generate_result_code/  sg   """"99$$$JJ)*JJ3dkkmCD}}$

KKMKKMMM002MM002	4 5 

KKMKKMMM002MMMM0024 5 %"3"3"311$7H(,(=2J6;6G6G002T]]MaMaMcJ6;6G6G002T]]MaMaMcJJJKKM++DKKM488DFG   &\\ $$&&4+?+?3+F'hh6:kkmTE_E_Ea(b9=9N9NTX(,(<(<d>S>SU
 

8R8R8TUV rW   c           
      l   U R                   R                  R                  (       dz  U R                  R                  R                  (       dU  [	        U R
                  SU R                  < SU R                   R                  < SU R                  R                  < S35        [        R                  U l        g )NzInvalid operand types for 'r  rh  r9  )	rw  r   r<  rx  r   r   r   r   r3   rZ   s    rU   r  BinopNode.type_error/  sj    ""++==%%..$(( 2 2MM&&( ) ))	rW   )r   r   r   r  rw  rx  r   )r^   r_   r`   ra   r   r4  r8  rD  r   rV  r  rb  r  ra  r  rd  re  r  r  r  r  rW  r  r  r  rb   rc   rd   s   @rU   r  r  '/  s     J'HG+-D+
0R\\B0*.<2>KN*WX* *rW   r  c                   ,    \ rS rSrS rS rS rS rSrg)
CBinopNodei/  c                     [         R                  X5      nUR                  5       (       a  [        R                  Ul        U$ rO   )r  rV  rb  r   r3   r   rX  s      rU   rV  CBinopNode.analyse_types/  s3    &&t1!!"--DIrW   c                     gr  rY   r  s     rU   r~   CBinopNode.py_operation_function/  ra
  rW   c                     SU R                   R                  5       < SU R                  < SU R                  R                  5       < S3$ Nr  r4  r9  )rw  r  r   rx  rZ   s    rU   r   CBinopNode.calculate_result_code/  s3    MM  "MMMM  "$ 	$rW   c                    S nUR                   (       d  UR                  (       a  UR                  U R                  U5      nUc>  UR                   (       d  UR                  (       a  UR                  U R                  U5      nU$ rO   )r  r0  rV  r   )r[   r  r  rY  s       rU   r   CBinopNode.compute_c_result_type0  s[    44T]]EJH!3!3u||44T]]EJHrW   rY   N)	r^   r_   r`   ra   rV  r~  r  r  rb   rY   rW   rU   r  r  /  s    $rW   r  c                    ^  U 4S jnU$ )Nc                     > [        U 4ST0UD6$ )Nr   )r  )r   r1  r   s     rU   make_binop_node,c_binop_constructor.<locals>.make_binop_node0  s    #==H==rW   rY   )r   r  s   ` rU   c_binop_constructorr  0  s    >rW   c                      ^  \ rS rSrSrSrSrS rS rS r	U 4S jr
S	 rS
 rU 4S jrS rS rS rSSSSSSSSSSSSSS.rSSSS S!.rS"rU =r$ )#NumBinopNodei0  TFNc                 ~   U R                   R                  nU R                  R                  nU R                  X#5      U l        U R                  (       d  U R	                  5         g U R                  R
                  (       a  SU l        U R                  R                  (       Ga  UR                  S   (       a  U R                  U R                  ;   a  U R                  S;   aa  U R                   R                  5       (       aB  U R                  R                  5       (       d#  U R                  U R                   sU l         U l        SU l        UR                  S   U l        U R                  R                  U R                  U R                     UU R                  R                  5       S9U l        SU l        U R                  (       a"  UR"                  (       ai  UR"                  (       aW  U R                   R%                  U R                  U5      U l         U R                  R%                  U R                  U5      U l        g g g )NFrJ	  )r   r   Tzoverflowcheck.fold)	const_rhs)rw  r   rx  r  r  rJ  r  rD  rq   r   overflow_op_namesr   overflow_checkoverflow_foldoverflow_check_binopr  r  rp  r8  r[   ry   r  r  s       rU   rf   NumBinopNode.analyse_c_operation0  s   """"..u<	yyOO99DJIINN?3MMT%;%;;+99;; MM==??/3}}dmm,t}"&D!$0D!ED		66&&t}}5 MM==? 7 ADI  DLzze..53C3C MM33DIIsCDM MM33DIIsCDM 4D.rW   c                    U R                  X5      (       ar  [        R                  " X5      nU[        R                  L a"  U R                  S;  a  [        R
                  nU$ [        R                  " U[        R
                  5      nU$ g )Nz|^&)c_types_okayr   rh  ru  r   r  r[   r  r  widest_types       rU   r  "NumBinopNode.compute_c_result_type30  sv    U**$88FKj444==-","7"7K  )<<!6!68rW   c                 |    UR                   (       a  [        R                  " X5      $ [        R                  " X!5      $ rO   )r_  r    result_type_of_builtin_operationr  s      rU   r  *NumBinopNode.infer_builtin_types_operationA0  s-      >>uLL>>uLLrW   c                 4  > U R                   (       a  U R                   R                  (       a  gU R                  R                   nU R                  R                   nU(       a*  UR                  (       a  U(       a  UR                  (       a  g[        TU ]  5       $ r  )r   r_  rw  rx  rQ   r  r[   r  r  rT   s      rU   r  NumBinopNode.may_be_noneG0  s_    9922""""U**u9N9N w"$$rW   c                     U R                   R                  5       nU R                  R                  5       nU(       a   U(       a  SU< SU R                  < SU< S3$ g r  )rw  r5  rx  r   )r[   value1value2s      rU   r5  'NumBinopNode.get_constant_c_result_codeT0  s?    99;99;f#)4==&AArW   c                     UR                   =(       d    UR                  =(       a    UR                   =(       d    UR                  $ rO   )rp  rt  r  s      rU   r  NumBinopNode.c_types_okay\0  s0      1EMM 4!!2U]]	4rW   c                 *  > U R                   (       aQ  X l        UR                  R                  [        R
                  SS9U l        UR                  SU R                  -  5        [        TU ]%  U5        U R                   (       a  UR                  SU R                  -  5        UR                  S5        UR                  UR                  U R                  5      5        UR                  S5        UR                  R                  U R                  5        g g )NFr  r  r  z8PyErr_SetString(PyExc_OverflowError, "value too large");r   )r  overflow_bit_noder  r  r   r  overflow_bitr   rQ   r  r   r   r  r  s     rU   r  %NumBinopNode.generate_evaluation_codea0  s    %)" $ < <Z=R=R_d < eDJJy4#4#445(.JJ,t/@/@@AJJQRJJttxx01JJsONN''(9(9: rW   c                    U R                   b`  U R                  < SU R                  R                  5       < SU R                  R                  5       < SU R                   R
                  < S3$ U R                  R                  (       d  U R                  (       a  [        U R                  5      (       a4  U R                  R                  5       U R                  R                  5       p!O3U R                  R                  5       U R                  R                  5       p!SU< SU R                  < SU< S3$ U R                  R                  U R                  5      nUc2  [        U R                  SU R                  < SU R                  < 35        U< SU R                  R                  5       < SU R                  R                  5       < S3$ )Nr  r  r	  r9  r4  zbinary operator z not supported for )r  r  rw  r  rx  r	  r   r  r  r>   r&  r   	binary_opr   r   )r[   result1result2r  s       rU   r  "NumBinopNode.calculate_result_coden0  s.   !!-		$$&$$&&&33	5 5
 YY##tzztyy))#'==#?#?#A4==C_C_Ca#'==#7#7#94==;O;O;Q#*DMM7CC99&&t}}5D|dhhT]]\`\e\e fg$$&$$&( (rW   c                 z    UR                   =(       d)    UR                   =(       d    [        R                  XU5      $ rO   )r  r  r  r  s      rU   r  "NumBinopNode.is_py_operation_types0  s6    %% D%%D//UC	ErW   c                 ~    U R                   U R                     nU R                  (       a  UR                  SS5      nU$ )N	PyNumber_PyNumber_InPlace)py_functionsr   r4  r  )r[   r   r	  s      rU   r~  "NumBinopNode.py_operation_function0  s6    ))$--8<<)11+?QRMrW   PyNumber_OrPyNumber_XorPyNumber_AndPyNumber_LshiftPyNumber_RshiftPyNumber_AddPyNumber_SubtractPyNumber_Multiply__Pyx_PyNumber_MatrixMultiply__Pyx_PyNumber_DividePyNumber_FloorDividePyNumber_RemainderPyNumber_Power)r  r  r  r  r  r   r|  r   r  r  r  r  r  r  r  mullshift)r   r|  r   r  )
r  r  r  rw  rx  r	  r  r  r  r   )r^   r_   r`   ra   r  r  r  rf  r  r  r  r5  r  r  r  r  r~  r  r  rb   rc   rd   s   @rU   r  r  0  s     END6M%4
;(,E
 """%%"''3+*($L" 	rW   r  c                       \ rS rSrS rSrg)IntBinopNodei0  c                     UR                   =(       d    UR                  =(       a    UR                   =(       d    UR                  $ rO   )rD  rt  r  s      rU   r  IntBinopNode.c_types_okay0  s,    - 0.	0rW   rY   N)r^   r_   r`   ra   r  rb   rY   rW   rU   r'  r'  0  s    0rW   r'  c                   &    \ rS rSrS rS rS rSrg)BitwiseOrNodei0  c                 v    U R                   R                  (       d  U R                  R                  (       a  S/$ g r  )rw  rB  rx  r   s     rU   r  (BitwiseOrNode.analyse_pytyping_modifiers0  s)    ==  DMM$9$9%&& %:rW   c                 N   UR                  S5         UR                  U5      nSSS5        W(       d  gUR                  5       (       dK  UR                  (       a!  UR	                  5       (       d  UR                  $ [        UR                  SU 35        U$ ! , (       d  f       Nx= f)z=Analyse annotations in form `[...] | None` and `None | [...]`FNz)'[...] | None' cannot be applied to type )new_c_type_contextr  can_be_optionalr  r  r   r   )r[   ry   operand_nodettypes       rU   _analyse_bitwise_or_none&BitwiseOrNode._analyse_bitwise_or_none0  s    ##E* 005E +$$&& $$\-M-M-O-O,,,l&&*STYSZ([\ +*s   B
B$c                     U R                   R                  (       a  U R                  XR                  5      $ U R                  R                  (       a  U R                  XR                   5      $ g rO   )rw  rB  r3  rx  r   s     rU   r  BitwiseOrNode.analyse_as_type0  sI    ==  00mmDD]]""00mmDDrW   rY   N)r^   r_   r`   ra   r  r3  r  rb   rY   rW   rU   r+  r+  0  s    'rW   r+  c                   @   ^  \ rS rSrS rU 4S jrS rU 4S jrSrU =r	$ )AddNodei0  c                     UR                   (       a  UR                   (       d"  UR                  (       a  UR                  (       a  g[        R                  XU5      $ r  )r  r  r  r  r  s      rU   r  AddNode.is_py_operation_types0  s5    ??u%2H2HUMcMc55d5IIrW   c                    > [         [        [        4nX;   a2  X#;   a-  U[        UR	                  U5      UR	                  U5      5         $ [
        TU ]  X5      $ rO   )r   r    r   r  r}  rQ   r  )r[   r  r  string_typesrT   s       rU   r  %AddNode.infer_builtin_types_operation0  s]     #NLA U%:L$6$6u$=$0$6$6u$=!? @ @w4UBBrW   c                 F   UR                   (       d  UR                  (       a$  UR                  (       d  UR                  (       a  U$ UR                   (       d  UR                  (       a$  UR                  (       d  UR                  (       a  U$ [        R                  XU5      $ rO   )r0  ru  rD  rt  r  r  r  s      rU   r  AddNode.compute_c_result_type0  sV    LLENNLllenn5<<5==L55U$ $rW   c                 $  > U R                   R                  U R                  R                  p2S nU[        L d	  U[        L a  U[        L a  U[        L a  SnOC[	        U R                   [
        5      (       d  [	        U R                  [
        5      (       a  SnOSnU(       ab  U R                  (       d  U R                   R                  5       (       a0  UR                  R                  [        R                  " SS5      5        SnU(       az  U R                  (       d  U R                   R                  5       (       a  US-  nU R                   R                  5       (       d  U R                  R                  5       (       a  US-  nU$ [        TU ]9  U5      $ )NTFUnicodeConcatInPlacer  __Pyx_PyUnicode_ConcatInPlaceSafe)rw  r   rx  r   r   r  r4  r  r   r   r   r   r  rQ   r~  )r[   r   r  r  r  is_unicode_concatrT   s         rU   r~  AddNode.py_operation_function0  s)   }}))4==+=+=uL E\$9$,)>$(!DMM+=>>*T]]\nBoBo$(! %*! <<4==#?#?#A#A$$55#//0FHZ[]/||t}};;==	!}}((**dmm.G.G.I.IKw,T22rW   rY   )
r^   r_   r`   ra   r  r  r  r~  rb   rc   rd   s   @rU   r8  r8  0  s    JC$3 3rW   r8  c                       \ rS rSrS rSrg)SubNodei1  c                 b   UR                   (       d  UR                  (       a$  UR                  (       d  UR                  (       a  U$ UR                   (       d  UR                  (       a2  UR                   (       d  UR                  (       a  [        R
                  $ [        R                  XU5      $ rO   )r0  ru  rD  rt  r   c_ptrdiff_t_typer  r  r  s      rU   r  SubNode.compute_c_result_type1  s]    LLENNLllenn5<<5>>...55U$ $rW   rY   N)r^   r_   r`   ra   r  rb   rY   rW   rU   rH  rH  1  s    $rW   rH  c                   r   ^  \ rS rSrSrS r\S 5       rS rS r	U 4S jr
U 4S jrU 4S	 jrU 4S
 jrSrU =r$ )MulNodei1  Fc                    U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  5       U l        U R                  (       a  U R                   nU R                  nUR
                  (       a  UR                  c  U R                  XU5      $ UR
                  (       a  UR                  c  U R                  XU5      $ UR                  [        ;   a  UR                  U5      U l        O*UR                  [        ;   a  UR                  U5      U l         U R                  U5      $ rO   )rw  rV  rx  calculate_is_sequence_mulis_sequence_mulr   r   analyse_sequence_mulr   r#   r  r  r[   ry   rw  rx  s       rU   rV  MulNode.analyse_types1  s    33C833C8#==? }}H}}H//H4H4H4P00II11h6J6J6R00II"88 ( 8 8 ="88 ( 8 8 =%%c**rW   c                 X    U R                   =(       a    U [        ;   =(       a    U [        L$ rO   )r_  r#   r"   r+  s    rU   is_builtin_seqmul_typeMulNode.is_builtin_seqmul_type-1  s$    ##f0F(Ff4WfKffrW   c                 d   U R                   R                  nU R                  R                  nU[        R                  L d  UR
                  (       a  X!p!U[        R                  L d  UR
                  (       a:  UR                  (       d  UR                  (       a  gU R                  U5      (       a  ggr  )	rw  r   rx  r   rj  rD  r  r}  rU  r  s      rU   rO  !MulNode.calculate_is_sequence_mul11  st    """"G$$$ 5G$$$%//**511rW   c                     UR                   b   eUR                  U5      nUR                  U5      Ul         UR                  U5      $ rO   )r   rk  r  rV  )r[   ry   r  mults       rU   rQ  MulNode.analyse_sequence_mul>1  sE    &&&$$S)..s3  %%rW   c                 ^  > U R                   (       a  U R                  R                  R                  (       a!  U R                  R	                  U5      U l        g U R
                  R                  R                  (       a   U R
                  R	                  U5      U l        g [        TU ]  U5        g rO   )rP  rw  r   r}  rk  rx  rQ   r  r  s     rU   r  $MulNode.coerce_operands_to_pyobjectsD1  su    }}!!++ $ @ @ E  ##-- $ @ @ E,S1rW   c                 H   > U R                   =(       d    [        TU ]	  X5      $ rO   )rP  rQ   r  r  s      rU   r  MulNode.is_py_operation_typesN1  s    ##Ruw'DU'RRrW   c                    > U R                   (       aY  UR                  R                  [        R                  " SS5      5        U R
                  R                  R                  (       a  S$ S$ [        TU ]%  U5      $ )Nr  r  __Pyx_PySequence_Multiply__Pyx_PySequence_Multiply_Left)
rP  r   r   r   r   rw  r   rv   rQ   r~  r  s     rU   r~  MulNode.py_operation_functionQ1  sb    --''(<>PQS26--2D2D2P2P.vVvvw,T22rW   c                   > UR                   (       aA  UR                   (       a0  U R                  U5      (       a  U$ U R                  U5      (       a  U$ UR                  (       a  U$ UR                  (       a  U$ [        TU ]  X5      $ rO   )r_  rU  rD  rQ   r  r  s      rU   r  %MulNode.infer_builtin_types_operationX1  sl       U%:%:**511**511 <<L<<Lw4UBBrW   )rP  rw  rx  )r^   r_   r`   ra   rP  rV  r7  rU  rO  rQ  r  r  r~  r  rb   rc   rd   s   @rU   rM  rM  1  sI    O+( g g&2S3C CrW   rM  c                   4   ^  \ rS rSrS rS rU 4S jrSrU =r$ )MatMultNodeii1  c                     gr  rY   r  s      rU   r  !MatMultNode.is_py_operation_typesl1  r  rW   c                     g rO   rY   r  s      rU   r  )MatMultNode.infer_builtin_types_operationo1  r  rW   c                    > UR                   R                  [        R                  " SS5      5        [        TU ]  U5        g )NMatrixMultiplyr  )r   r   r   r   rQ   r  r  s     rU   r  $MatMultNode.generate_evaluation_codes1  s3    ))+*A*ABRTf*gh(.rW   rY   )	r^   r_   r`   ra   r  r  r  rb   rc   rd   s   @rU   rg  rg  i1  s    / /rW   rg  c                   ~   ^  \ rS rSrSrSrSrSrSrS r	S r
S rS rS rU 4S	 jrS
 rS rS rS rS rS rSrU =r$ )DivNodeix1  NFc                     [         U R                     nU R                  S:X  a@  U R                  c3  [        U[        5      (       a  [        U[        5      (       a	  [         S   nU$ )Nr  r  )r  r   truedivisionr   r   r[   op1op2r  s       rU   !find_compile_time_binary_operator)DivNode.find_compile_time_binary_operator1  sO    ,T]];==CD$5$5$=#s##
3(<(<4T:rW   c                     U R                   R                  nU R                  R                  nU R                  X5      nU" X5      U l        g rO   )rw  r   rx  rv  rs  s       rU   r8  !DivNode.calculate_constant_result1  s<    mm++mm++55c?#C~rW   c                     U R                   R                  U5      nU R                  R                  U5      nU R                  X#5      n U" X#5      $ ! [         a  nU R                  U5         S nAg S nAff = frO   )rw  rD  rx  rv  r  rI  )r[   rC  rw  rx  r  rH  s         rU   rD  DivNode.compile_time_value1  sk    ==33D9==33D955hI	-++ 	-))!,,	-s   	A 
A6A11A6c                     U R                   (       d  UR                  S   (       a  SU l        g U R                  U l        g )N	cdivisionF)r}  rq   ctruedivisionrr  r   s     rU   _check_truedivisionDivNode._check_truedivision1  s*    >>S^^K8!&D!%!2!2DrW   c                     U R                  U5        U R                  U R                  R                  U5      U R                  R                  U5      U5      $ rO   )r  r  rw  r   rx  r   s     rU   r   DivNode.infer_type1  sI      %MM$$S)MM$$S)30 	0rW   c                   > [         TU ]  X5      nUb  U R                  S:X  a  U R                  (       d  U R                  (       a\  U[
        R                  L a  [        R                  $ UR                  (       a%  [        R                  " [        R                  U5      $  U$ U[
        R                  L d  UR                  (       a  S nU$ Nr  )rQ   r  r   rr  r~  r   rj  r   r  rD  rh  )r[   r  r  r  rT   s       rU   r  %DivNode.infer_builtin_types_operation1  s    g;EI"t}}';  D$6$6'"2"22%333 ''%99*:R:RT_`` (
   0 00K4F4F"rW   c                 r   U R                  U5        [        R                  X5      nU R                  5       (       a  SU l        U R
                  R                  (       d  U R                  S L =(       aZ    UR                  S   (       + =(       a?    U R                  R                  5       (       + =(       d    U R                  R                  S:H  U l        U R                  (       d  UR                  S   (       a@  U R                  R                  U5      U l        U R                  R                  U5      U l        U$ )NTr}  r   cdivision_warnings)r  r  r  rd  r}  r   rv   rq   rx  r   r   zerodivision_checkrw  rj  rL  s      rU   r  DivNode.analyse_operation1  s      %//:   ""!DNyy$$$& 9s~~k/J+J 9::<< 8]]22a7 # &&#..9M*N $ > >s C $ > >s CrW   c                 r   U R                   S:X  a  U R                  (       a  UR                  (       dp  UR                  (       d_  UR                  (       dN  UR                  (       d=  [        R
                  " U[        R                  5      n[        R
                  " X#5      nU$ [        R                  XU5      $ r  )	r   r~  r  rv  r   rh  r  r  r  r  s       rU   r  DivNode.compute_c_result_type1  su    ==CD$6$6u?Q?QZ_ZlZl>>%..(<<UJD\D\](<<UP""11$uEErW   c                 <    U R                   R                  (       a  gg)N"integer division or modulo by zerozfloat divisionrm  rZ   s    rU   zero_division_messageDivNode.zero_division_message1      997#rW   c                    U R                   R                  (       Gd  U R                   R                  (       d  U R                  c  UR                  R
                  S   =(       dr    U R                   R                  =(       dU    U R                   R                  =(       d    U R                   R                  =(       a    U R                   R                  (       + U l        U R                  (       dI  UR                  R                  [        R                  " SS5      R                  U R                   5      5        [        R                  X5        U R!                  U5        g )Nr}  DivIntCMath.c)r   rv   rJ  r}  r   rq   rv  rp  rt  rO  r   r   r   r  r  r  generate_div_warning_coder  s     rU   r   DivNode.generate_evaluation_code1  s    yy$$$TYY-A-A~~%$$//< ^yy))^--B1B1B\DIIL\L\H\ 
 >>  11++Hi@KKDIIVX--d9&&t,rW   c           	      	   U R                   nU R                  R                  (       Gd  U R                  (       Ga  U R                  (       d<  U R                  R                  S5      < SU R                  R                  5       < S3nOSU R                  R                  5       -  nUR                  SU-  5        U(       a  UR                  5         UR                  SU R                  5       -  5        U(       a  UR                  5         UR                  UR                  U R                  5      5        UR                  S5        U R                  R                  (       Ga  U R                  R                  (       Ga  U R                   S:w  Ga  UR"                  R%                  [&        R(                  " S	S
5      5        U R                  R                  R                  S:X  a  SU R                  R                  5       -  nOKU R                  R                  R+                  5       nSU< SU R                  R                  5       < SU< S3nUR                  SU R                  R+                  5       < SU< SU R,                  R                  5       < S35        U(       a  UR                  5         UR                  S5        U(       a  UR                  5         UR                  UR                  U R                  5      5        UR                  S5        UR"                  R.                  S   (       Ga  U R                   S:w  Ga  UR"                  R%                  [&        R(                  " SS5      5        UR                  SU R,                  R                  5       < SU R                  R                  5       < S35        S[0        R2                  [0        R4                  S.-  nU(       ay  SnUR                  S U-  5        UR                  5         UR                  UR7                  U R                  S!S"95        UR                  U< S#U< S$35        UR                  5         O+UnUR                  UR7                  U R                  S!S"95        UR9                  S%U-  5        UR;                  UR<                  5        UR                  S5        g g g g )&Nzeror  r9  z%s == 0r  z/PyErr_SetString(PyExc_ZeroDivisionError, "%s");r   r  UnaryNegOverflowsrw	  r7   zunlikely(%s == -1)z(!(((z)-1) > 0)) && unlikely(z == (z)-1)zelse if (sizeof(z) == sizeof(long) && z-  && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(r  zLPyErr_SetString(PyExc_OverflowError, "value too large to perform division");r  r  CDivisionWarningr  r  z	 < 0) ^ (z	 < 0))) {z1__Pyx_cdivision_warning(%(FILENAME)s, %(LINENO)s))FILENAMELINENOr  zint %s;T)r4  r  r  zif (unlikely(%s)) )r  r   rv   r  r  r  rx  r  r   r   r  r   r   r   rD  rO  r   r   r   r   r   rQ  rw  rq   r   filename_cnamelineno_cnameset_error_infor  r  r  )r[   r   in_nogil	zero_testminus1_checktype_of_op2warning_coderw  s           rU   r  !DivNode.generate_div_warning_code1  sy   ((yy$$$&&&zz,0II,>,>v,FH\H\H^ _I )DMM,@,@,B BI

09<='')

LtOiOiOkkl002

4??48845

399###		(8(8(8T]]c=Q$$55k6M6MNaco6pq}}))00A5';dmm>R>R>T'T&*mm&8&8&O&O&Q')=)=)?(NJJ#yy??A+#}}335	 7 8
  ++-JJmn446JJttxx89JJsO**+?@@T]]VYEY  11++,>	JL

 $ 4 4 6 $ 4 4 68 9  S & 5 5%22V  
 "*KJJy;67'')JJt22488$2GHJJ[,GH002".KJJt22488$2GH-;<d../

31 FZ@G %rW   c           
      f   U R                   R                  (       d  U R                  5       (       a  [        R	                  U 5      $ U R
                  R                  5       nU R                  R                  5       nU R                   R                  (       a  U R                  S:X  a	  SU SU S3$ U R                  (       d  U R                  (       a  U R                  (       a~  U R                   U R
                  R                   :w  a  U R                   R                  U5      nU R                   U R                  R                   :w  a  U R                   R                  U5      nSU SU S3$ U R                  R                  5       nSU R                   R                  5        SU SU S[        U5      S S3	$ )	Nr  zfloor(z / r9  r  
__Pyx_div_r  r  )r   rJ  rd  r  r  rw  r  rx  rv  r   rr  r}  r	  r   specialization_namerf  r[   rt  ru  b_is_constants       rU   r  DivNode.calculate_result_code"2  sM   994#8#8#:#:55d;;mm""$mm""$99$--4"7C5C5**$..  99 2 22))--c2C99 2 22))--c2Cse3se1%% MM==?M		 = = ?@#bRPTUbPcdeOffghhrW   )r}  r   r~  rw  rx  r  )r^   r_   r`   ra   r}  rr  r~  r  r  rv  r8  rD  r  r   r  r  r  r  r  r  r  rb   rc   rd   s   @rU   rp  rp  x1  se     ILM.-30*F$-= ~i irW   rp  s'   %(?:%|(?:\([^)]+\))?[-+#,0-9 ]*([a-z]))>      E   F   G   X   a   b   c   d   e   f   g   i   o   u   xc                   R   ^  \ rS rSrS rU 4S jrS rS rS rS r	U 4S jr
S	rU =r$ )
ModNodeiE2  c                 z    UR                   =(       d)    UR                   =(       d    [        R                  XU5      $ rO   )r  r  r  r  s      rU   r  ModNode.is_py_operation_typesH2  s2     J??J55d5I	KrW   c                    > U[         [        [        4;   aC  UR                  (       d0  UR                  (       a  U R
                  R                  5       (       d  U$ [        TU ]!  X5      $ rO   )	r   r   r    r_  rv   rw  r  rQ   r  r  s      rU   r  %ModNode.infer_builtin_types_operationM2  sJ    \:~>>$$E,=,=T]]E^E^E`E`w4UBBrW   c                 <    U R                   R                  (       a  gg)Nr  zfloat divmod()rm  rZ   s    rU   r  ModNode.zero_division_messageT2  r  rW   c                    [         R                  X5      nU R                  R                  (       d  U R                  c6  UR
                  S   =(       d    U R                  R                  (       + U l        U R                  (       dY  U R                  R                  (       d>  U R                  R                  (       d#  [        U R                  SU R                  -  5        U$ )Nr}  z(mod operator not supported for type '%s')rp  r  r   rv   r}  rq   rO  rD  rv  r   r   rL  s      rU   r  ModNode.analyse_operationZ2  s    **45 yy$$~~%!$!<!TDIIDTDT@T>>$))*:*:499CUCUdhh JTYY VWrW   c                 *   U R                   R                  (       d  U R                  (       d  U R                   R                  (       aJ  UR                  R                  [        R                  " SS5      R                  U R                   5      5        O\UR                  R                  [        R                  " SS5      R                  U R                   U R                   R                  S95        [        R                  X5        U R                  U5        g )NModIntr  ModFloat)math_h_modifier)r   rv   r}  rD  r   r   r   r   r  r  r  r  r  r  s     rU   r   ModNode.generate_evaluation_codef2  s    yy$$T^^yy  11++Hi@KKDIIVX   11++J	BMM		4993L3L N NO 	--d9&&t,rW   c           
         U R                   R                  5       nU R                  R                  5       nU R                  (       aD  U R                  R
                  (       a   SU R                  R                   SU SU S3$ SU SU S3$ U R                  R                  5       nSU R                  R                  5        SU SU S[        U5      S S3	$ )Nfmodr  r  r9  z % 
__Pyx_mod_r  )
rw  r  rx  r}  r   rv  r  r   r  rf  r  s       rU   r  ModNode.calculate_result_codes2  s    mm""$mm""$>>yy!!dii778#bQGG3%s3%q)) MM==?M		 = = ?@#bRPTUbPcdeOffghhrW   c                 j  > U R                   R                  U R                  R                  p2U[        L ap  U R                   R	                  5       (       dO  UR
                  (       a  UR                  U5      (       d(  U[        L a   [        U R                  [        5      (       d  gg[        TU ]-  U5      $ )N__Pyx_PyUnicode_FormatSafePyUnicode_Format)rw  r   rx  r   r  r^  rG  r   r   rF  rQ   r~  )r[   r   r  r  rT   s       rU   r~  ModNode.py_operation_function2  s    }}))4==+=+=uL }}((**++0@0@0G0G^+Jt}}N`4a4a3)w,T22rW   )r}  )r^   r_   r`   ra   r  r  r  r  r  r  r~  rb   rc   rd   s   @rU   r  r  E2  s.    K
C$
-i
3 
3rW   r  c                   x   ^  \ rS rSrSrSrS rU 4S jrU 4S jrS r	S r
U 4S	 jrS
 rU 4S jrU 4S jrSrU =r$ )PowNodei2  NFc                 H    U R                   b  g UR                  S   U l         g )Ncpow)is_cpowrq   r   s     rU   _check_cpowPowNode._check_cpow2  s    <<#~~f-rW   c                 D   > U R                  U5        [        TU ]	  U5      $ rO   )r  rQ   r   r  s     rU   r   PowNode.infer_type2  s!    w!#&&rW   c                 D   > U R                  U5        [        TU ]	  U5      $ rO   )r  rQ   rV  r  s     rU   rV  PowNode.analyse_types2  s!    w$S))rW   c                     g rO   rY   r  s      rU   r  %PowNode.infer_builtin_types_operation2  r  rW   c                    [         R                  X5        U R                  R                  (       a  U R                  R                  R
                  (       aw  U R                  R                  U R                  U5      U l        U R                  R                  U R                  U5      U l        U R                  R                  S5      U l
        g [        U R                  S5        SU l
        g U R                  R
                  (       a  SU R                  R                  -   U l
        g U R                  R                  (       a  SU R                  R                  5       R!                  SS5      -  U l
        UR#                  [$        R&                  " SS	5      R)                  U R                  U R                  R                  5       U R                  R*                  =(       a    S
=(       d    SS95        g U R                  R,                  (       dG  [        U R                  SU R                  R                  < SU R                  R                  < 35        g g )Nr  z complex int powers not supportedr  powz__Pyx_pow_%sr4  r  IntPowr  r,   r   )r  r   rO  z+got unexpected types for C power operator: r  )r  rf  r   rJ  r
  rv  rw  r8  rx  r  pow_funcr   r   r  rD  rQ  r  r   r   r   r  rO  r<  r   s     rU   rf  PowNode.analyse_c_operation2  s   ((399yy""++ $ 7 7		3 G $ 7 7		3 G $		 3 3D 9dhh BC )YY!DII$=$==DMYY*TYY-M-M-O-W-WX[]`-aaDM  '')<GG"mm99;99++16Q H 89
 ##$((!]]//1C1CE F $rW   c                   > SSK Jn  S nU R                  R                  5       =(       a    U R                  R                  S:  =(       d"    UR
                  =(       a    UR                  S:H  nUR
                  =(       d~    U R                  R                  5       =(       a]    [        U R                  R                  U5      =(       a6    [        U R                  R                  5      U R                  R                  :H  nSnU R                  (       as  [        TU ]1  X5      nU R                  R                  5       (       dD  [        U R                  R                  [        5      =(       a    U R                  R                  S:  nOU(       d  U(       a  [        TU ]1  X5      nU R                  R                  5       (       d.  UR
                  =(       a    UR                  nU(       a  SU l        Or[        U R                  R                  [        5      =(       a    U R                  R                  S:  nO-U R                  X5      (       a  [        R                   nSU l        U(       a%  [        R"                  " U[        R$                  5      nU$ )Nr   )RealFT)numbersr  rw  r   r   rD  rO  rx  r   r   r  rQ   r  type_was_inferredr  r   rM  rh  r  )	r[   r  r  r  c_result_typeop1_is_definitely_positivetype2_is_intneeds_wideningrT   s	           rU   r  PowNode.compute_c_result_type2  s    MM--/ 3--2&
 LL.U\\Q.	 	# || 
MM--/ Pt}}44d;P--.$--2O2OO 	
 <<!G9%GM==4466t}}<<cBht}}GdGdghGh  (<!G9%GM==4466!&!>%,,!-1D* t}}<<cBht}}GdGdghGh  u,, '88M%)D"&::=*JbJbcMrW   c                    ^  U 4S jnT R                   < SU" T R                  5      < SU" T R                  5      < S3$ )Nc                    > TR                   U R                   :X  a  U R                  5       $ TR                   R                  U R                  5       5      $ rO   )r   r  r	  )r3	  r[   s    rU   r2   /PowNode.calculate_result_code.<locals>.typecast2  s<    yyGLL(~~''yy**7>>+;<<rW   r  r  r9  )r  rw  rx  )r[   r2   s   ` rU   r  PowNode.calculate_result_code2  s3    	= MMT]]#T]]#% 	%rW   c                   > U R                   R                  (       a  U R                  R                  S:X  a  [	        U R                  R                  [
        5      (       a`  U R                  R                   [        L aC  UR                  R                  [        R                  " SS5      5        U R                  (       a  gg[        TU ]9  U5      $ )Nr7   PyNumberPow2r  __Pyx_PyNumber_InPlacePowerOf2__Pyx_PyNumber_PowerOf2)r   rv   rw  r   r   r   rx  r   r   r   r   r   r4  rQ   r~  r  s     rU   r~  PowNode.py_operation_function2  s    II!!--24==88#>>""n4--k.E.EnVb.cd||70w,T22rW   c                 x  >^	 XR                   :X  a  U $ U R                  Gc  U R                  (       a  UR                  (       d  UR                  (       a  U R                   [
        R                  L a  SU	4S jjm	SnOUR                  (       a  S m	SnOS m	T	" U R                  5      u  pET	" U R                  5      u  pgU(       ag  U(       a`  [        U R                  SW-  5        SU l        XPl        Xpl        U R                  U5      nUR                   U:w  a  UR                  X5      nU$ [        T
U ]1  X5      $ )	NTc                    > U R                   R                  (       d  U R                   R                  (       a  SU 4$ U(       a2  [        U [        5      (       a  T" U R
                  SS9U R
                  4$ g)NTF)recurser  )r   rv  rD  r   rL  r  )r3	  r  check_typess     rU   r  &PowNode.coerce_to.<locals>.check_types3  sS    ||,,0C0C#W},:g7J#K#K*7;;FSS&rW   za non-complex C numeric typec                 B    U R                   R                  (       a  SU 4$ g)NTr  rm  r3	  s    rU   r  r  3  s    ||**#W},  +rW   zan integer C numeric typec                     g)Nr  rY   r  s    rU   r  r  3  s    &rW   zTreating '**' as if 'cython.cpow(True)' since it is directly assigned to a %s. This is likely to be fragile and we recommend setting 'cython.cpow' explicitly.r  )r   r  r  rv  rD  r   rM  rw  rx  r   r   rV  r8  rQ   )r[   rP  ry   
msg_detail	check_op1rt  	check_op2ru  r  r  rT   s            @rU   r8  PowNode.coerce_to2  s   yy KLL T%;%;""hoo
 yyJ888' <
+ 9
'(7NI(7NIY #0 3=#= >  $ # #++C0;;(*#--h<Fw //rW   )r  rw  rx  r  r  )r^   r_   r`   ra   r  r  r  r   rV  r  rf  r  r  r~  r8  rb   rc   rd   s   @rU   r  r  2  sD     G.
'*F.(T
%
3*0 *0rW   r  c                       \ rS rSrSrSS/rSrSrSrSr	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rSrS rS rS rS rSrg)BoolBinopNodei+3  aK  
Short-circuiting boolean operation.

Note that this node provides the same code generation method as
BoolBinopResultNode to simplify expression nesting.

operator  string                              "and"/"or"
operand1  BoolBinopNode/BoolBinopResultNode   left operand
operand2  BoolBinopNode/BoolBinopResultNode   right operand
rw  rx  TNc                     U R                   R                  U5      nU R                  R                  U5      n[        R                  " X#5      $ rO   )rw  r   rx  r   independent_spanning_typer  s       rU   r   BoolBinopNode.infer_type<3  s;    ((-((-33EAArW   c                     U R                   S:X  a  U R                  R                  5       $ U R                  R                  5       =(       d    U R                  R                  5       $ )Nor)r   rx  r  rw  rZ   s    rU   r  BoolBinopNode.may_be_noneA3  sF    ==D ==,,..==,,.M$--2K2K2MMrW   c                     U R                   R                  nU R                  R                  nU R                  S:X  a  U=(       a    UU l        g U=(       d    UU l        g Nand)rw  r   rx  r   )r[   rw  rx  s      rU   r8  'BoolBinopNode.calculate_constant_resultG3  sF    ==00==00==E!#+#8D #+#7xD rW   c                     U R                   R                  U5      nU R                  R                  U5      nU R                  S:X  a  U=(       a    U$ U=(       d    U$ r
  )rw  rD  rx  r   )r[   rC  rw  rx  s       rU   rD   BoolBinopNode.compile_time_valueO3  sL    ==33D9==33D9==E!(('x'rW   c                 x    U R                   R                  5       =(       d    U R                  R                  5       $ rO   )rw  r  rx  rZ   s    rU   r  BoolBinopNode.is_ephemeralW3  s'    }}))+Kt}}/I/I/KKrW   c                 *   U R                   R                  U5      nU R                  R                  U5      n[        R                  " UR
                  UR
                  5      U l        U R                  X!5      U l         U R                  X15      U l        U $ rO   )rw  rV  rx  r   r  r   _wrap_operandrR  s       rU   rV  BoolBinopNode.analyse_typesZ3  st     ==..s3==..s388MM8==*	**89**89rW   c                 h    [        U[        [        45      (       d  [        XR                  U5      nU$ rO   )r   r  BoolBinopResultNoder   )r[   r3	  ry   s      rU   r  BoolBinopNode._wrap_operandf3  s*    'M3F#GHH)'99cBGrW   c                     U R                  U R                  U5      U l        U R                  U R                  U5      U l        g)zj
Must get called by transforms that want to create a correct BoolBinopNode
after the type analysis phase.
N)r  rw  rx  r   s     rU   wrap_operandsBoolBinopNode.wrap_operandsk3  s4    
 **4==#>**4==#>rW   c                 B    U R                  [        R                  U5      $ rO   r8  r   ru  r   s     rU   re  BoolBinopNode.coerce_to_booleans3      ~~j44c::rW   c                     U R                   R                  X5      nU R                  R                  X5      n[        R	                  XU R
                  X4S9$ )N)r   r   rw  rx  )rw  r8  rx  r  r  r   )r[   rP  ry   rw  rx  s        rU   r8  BoolBinopNode.coerce_tov3  sO    ==**89==**89&&]] ' 2 	2rW   c           	      L   UR                  U R                  5        XE4nU R                  S:X  a  UR                  S5      =pOUR                  S5      =pU R                  R                  XX4XVU	5        Uu  pEUR                  U	5        U R                  R                  XX4XVU5        g )Nr  next_andnext_or)r  r   r   r  rw  generate_bool_evaluation_coder  rx  )
r[   r   final_result_tempfinal_result_type	and_labelor_label	end_labelfall_throughouter_labelsmy_labels
             rU   r#  +BoolBinopNode.generate_bool_evaluation_code~3  s    dhh!,==E!#'>>*#==Hy"&..";;H33%68X`	b +	x 33%68Xd	frW   c           	      "   U R                  U5        U R                  R                  (       a  [        R                  OU R                  nS =p4UR                  S5      nU R                  XR                  5       X$X5U5        UR                  U5        g )Nbool_binop_done)	r  r   rv   r   r   r  r#  r  r  )r[   r   r  r'  r&  r(  s         rU   r  &BoolBinopNode.generate_evaluation_code3  sl    !!$'37993H3Hj//dii##NN#45	**4X`mvwy!rW   Truth-testing Python objectc                 x    U R                   R                  5       =(       a    U R                  R                  5       $ rO   r  rZ   s    rU   rW  BoolBinopNode.check_const3  r  rW   c                     g rO   rY   r  s     rU   r  ,BoolBinopNode.generate_subexpr_disposal_code3  r   rW   c                     g rO   rY   r  s     rU   r   BoolBinopNode.free_subexpr_temps3  r   rW   c           
         U R                   R                  (       av  UR                  R                  [        R
                  SS9nUR                  U< SU R                  R                  5       < SUR                  X R                  5      < 35        OU R                  R                  5       nX R                   R                  4$ NFr  rQ  r=  )r   rv   r  r  r   ru  r   rw  r   r  r   r  r[   r   test_results      rU   generate_operand1_test$BoolBinopNode.generate_operand1_test3  s    99  ..66&&5 7 :KJJMM++-**;ACD --..0KYY2233rW   )r   rw  rx  r   )r^   r_   r`   ra   r  r   r  r   rw  rx  r   r  r8  rD  r  rV  r  r  re  r8  r#  r  r@  rW  r  r  r;  rb   rY   rW   rU   r  r  +3  s    	 J'HGHHHB
N8(L

?;2f"" 0KK4rW   r  c                   d   ^  \ rS rSrSrSS/rSrSrSrU 4S jr	S r
S	 rS
 rS rS rS rSrU =r$ )r  i3  a  
Intermediate result of a short-circuiting and/or expression.
Tests the result for 'truthiness' and takes care of coercing the final result
of the overall expression to the target type.

Note that this node provides the same code generation method as
BoolBinopNode to simplify expression nesting.

arg     ExprNode    the argument to test
value   ExprNode    the coerced result value node
r  r   TNc           	         > UR                  U5      n[        U5      n[        TU ]  UR                  X[        U5      R                  X#5      S9  g )N)r  r   r   )rj  	ProxyNoderQ   r  r   r  r8  )r[   r  r  ry   rT   s       rU   r  BoolBinopResultNode.__init__3  sI    ""3'nGGC.**;< 	 	>rW   c                 B    U R                  [        R                  U5      $ rO   r  r   s     rU   re  %BoolBinopResultNode.coerce_to_boolean3  r  rW   c                     U R                   R                   nU[        R                  L a  UR                  U5      n[	        X1U5      $ rO   )r  r   ru  re  r  )r[   rP  ry   r  s       rU   r8  BoolBinopResultNode.coerce_to3  s:    hhllz---'',C"3#66rW   c                     g rO   rY   r   s     rU   r  BoolBinopResultNode.nogil_check3  r~  rW   c           
         U R                   R                  R                  (       av  UR                  R	                  [
        R                  SS9nUR                  U< SU R                   R                  5       < SUR                  X R                  5      < 35        OU R                   R                  5       nX R                   R                  R                  4$ r8  )r  r   rv   r  r  r   ru  r   r   r  r   r  r9  s      rU   generate_operand_test)BoolBinopResultNode.generate_operand_test3  s    88==$$..66&&5 7 :KJJHH&&(**;ACD ((//+KXX]]6677rW   c                 T   UR                  U R                  5        U R                  R                  U5        U(       d  U(       Ga-  U R	                  U5      u  pU	(       a)  U(       a"  U(       a  U R                  R                  U5        U(       a  SOSn
UR                  SU
< U< S35        U	(       a  UR                  R                  U5        U	(       a  U(       a  U(       d  U R                  R                  U5        U(       a  XW:w  a  UR                  U5        U(       aP  U(       a3  UR                  S5        U	(       d  U R                  R                  U5        XG:w  a  UR                  U5        U(       a  U(       d  U(       d  U(       a  UR                  S5        U R                  R                  U5        U R                  R                  U5        UR                  U< SU R                  R                  U5      < S35        U R                  R                  U5        U R                  R                  U5        U R                  R                  U5        Xg:w  a  UR                  U5        U(       d  U(       a  UR                  S5        U R                  R                  U5        g )	Nr  r&  r  z) {r  r  r  r   )r  r   r  r  rH  r  r   r  r  r  r   r  r  r  r  )r[   r   r$  r%  r&  r'  r(  r)  r:  	uses_tempsenses              rU   r#  1BoolBinopResultNode.generate_bool_evaluation_code3  s   dhh 	))$/%)%?%?%E"KiH //5#CEJJ{;<++K8Y8//5H4h'JJz*$77=,MM),H

:&JJ//5JJ++D1JJ%6

8L8LM^8_`aJJ44T:HH++D1JJ!!$'(i(JJsOD!rW   c                     U $ rO   rY   r   s     rU   rV  !BoolBinopResultNode.analyse_types 4  r  rW   rY   )r^   r_   r`   ra   r  r   r  r  r   r  re  r8  r  rH  r#  rV  rb   rc   rd   s   @rU   r  r  3  sL    
 wHG
CE>;785"n rW   r  c                      ^  \ rS rSrSrSrSr/ SQrS rS r	S r
S rS	 rS
 rU 4S jrU 4S jrS rS rS rS rS rS rSrU =r$ )r}  i$4  NT)r{  ry  rz  c                 p    U R                   R                  U5      U R                  R                  U5      -   $ rO   )ry  ro  rz  r   s     rU   ro  CondExprNode.type_dependencies14  s,    }}..s3dnn6V6VWZ6[[[rW   c                     [         R                  " U R                  R                  U5      U R                  R                  U5      5      $ rO   )r   r  ry  r   rz  r   s     rU   r   CondExprNode.infer_type44  s9    33MM$$S)NN%%c*, 	,rW   c                     U R                   R                  (       a  U R                  R                  U l        g U R                  R                  U l        g rO   )r{  r   ry  rz  rZ   s    rU   r8  &CondExprNode.calculate_constant_result94  s3    99$$#'==#@#@D #'>>#A#AD rW   c                 x    U R                   R                  5       =(       d    U R                  R                  5       $ rO   )ry  r  rz  rZ   s    rU   r  CondExprNode.is_ephemeral?4  s'    }}))+Lt~~/J/J/LLrW   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  R                  U5      U l        U R                  U5      $ rO   )r{  rk  ry  rV  rz  r  r   s     rU   rV  CondExprNode.analyse_typesB4  sU    II==cB	33C855c:'',,rW   c                 `   U R                   R                  nU R                  R                  n[        R                  " X#5      U l        U R                  R
                  (       a/  [        R                  " U R                  R                  5      U l        U R                  R                  (       a  [        U l
        OU R                  R                  (       a~  U R                   R                  5       (       a   [        U R                   R                  S5        U R                  R                  5       (       a   [        U R                  R                  S5        UR                  (       d,  UR                  (       d  U R                  R                  (       at  X R                  :w  a+  U R                   R                  U R                  U5      U l         X0R                  :w  a+  U R                  R                  U R                  U5      U l        U R                  R                   (       a  U R#                  5         U $ )NzPUnsafe C derivative of temporary Python reference used in conditional expression)ry  r   rz  r   r  r  rW	  r-  rv   r   r2  r0  r  r   r   r8  r<  r  )r[   ry   true_val_typefalse_val_types       rU   r   CondExprNode.analyse_result_typeH4  sR   **,,88W	99!!"55dii6M6MNDI99   .DYY}}))++dmm''){|~~**,,dnn((*|}$$(B(BdiiF[F[		) $ 7 7		3 G*!%!9!9$))S!I99OOrW   c                   > U R                   R                  R                  (       d   U R                   R                  U5      U l         U R                  R                  R                  (       d   U R                  R                  U5      U l        S U l        U R                  U5      nUR                  R                  (       d*  X L a  [        [        U]  U5      nU$ UR                  U5      nU$ rO   )	ry  r   rD  r  rz  r2  r  rQ   r}  )r[   ry   outrT   s      rU   r  CondExprNode.coerce_to_indexa4  s    }}!!(( MM99#>DM~~""))!^^;;C@DN &&s+xx{L#>sC
 
 ))#.
rW   c                   > U R                   R                  U:w  a   U R                   R                  X5      U l         U R                  R                  U:w  a   U R                  R                  X5      U l        S U l        U R                  U5      nUR                  U:w  a*  X0L a  [        [        U]  X5      nU$ UR                  X5      nU$ rO   )ry  r   r8  rz  r2  r  rQ   r}  )r[   rP  ry   r`  rT   s       rU   r8  CondExprNode.coerce_tor4  s    ==) MM33HBDM>>(*!^^55hDDN &&s+88x{L#8G
 
 mmH2
rW   c                 P   U R                   R                  R                  (       dl  U R                  R                  R                  (       dG  [	        U R
                  SU R                   R                  < SU R                  R                  < S35        [        R                  U l        g )Nz.Incompatible types in conditional expression (rh  r9  )ry  r   r<  rz  r   r   r   r3   rZ   s    rU   r  CondExprNode.type_error4  s`    ""++t~~/B/B/K/K$((##T^^%8%8: ;))	rW   c                     U R                   R                  5       =(       a;    U R                  R                  5       =(       a    U R                  R                  5       $ rO   )r{  rW  ry  rz  rZ   s    rU   rW  CondExprNode.check_const4  sA    		%%' -))+-**,	.rW   c                    UR                  U R                  5        U R                  U5        U R                  R	                  U5        UR                  SU R                  R                  5       -  5        U R                  XR                  5        UR                  S5        U R                  XR                  5        UR                  S5        U R                  R                  U5        U R                  R                  U5        g )NrL  r  r   )r  r   r  r{  r  r   r  eval_and_getry  rz  r  r  r  s     rU   r  %CondExprNode.generate_evaluation_code4  s     	dhh!!$'		**40

;!1!1!334$.

:$/

3		((.		T"rW   c                 n   UR                  U5        U R                  R                  (       a  UR                  U5        OUR	                  U5        UR                  U R                  5       < SUR                  U R                  5       5      < S35        UR                  U5        UR                  U5        g r  )r  r   r   r  r  r   r  r  r,  r  r  )r[   r   r  s      rU   ri  CondExprNode.eval_and_get4  sy    %%d+99''++D1%%d+

tzz|0LMN**40rW   c                     g rO   rY   r  s     rU   r  +CondExprNode.generate_subexpr_disposal_code4  r   rW   c                     g rO   rY   r  s     rU   r  CondExprNode.free_subexpr_temps4  r   rW   )r   rz  r2  r{  ry  r   )r^   r_   r`   ra   ry  rz  r  r   ro  r   r8  r  rV  r  r  r8  r  rW  r  ri  r  r  rb   rc   rd   s   @rU   r}  r}  $4  sg     HIG0H\,
BM-2""*.
# rW   r}  Py_LTPy_LEPy_EQPy_NEPy_GTPy_GE)	r  r  r  r  z<>r  r  r  r  c                       \ rS rSrSrSr/ rS rS rS r	S r
S rSS jrS	 rS
 rS rS rS rS rSS jrS rS rSrg)CmpNodei4  Nc                     [         $ rO   r0  r   s     rU   r   CmpNode.infer_type4  r  rW   c                    [         U R                     nU R                  R                  n[	        U[
        5      (       a.  [	        U[
        5      (       a  [        U5      [        U5      :w  a  g U R                  S;   a  [	        U R                  [        [        [        45      (       a  U R                  R                  (       d  U R                  S:H  U l        g [	        U R                  [        5      (       a0  U R                  (       d  U R                  R                  5       U l        OO[	        U R                  [        5      (       a0  U R                  R                  (       d  U R                  S:H  U l        g U" X5      U l        g )Nr  r  r  )r  r   rx  r   r   any_string_typer   r  r^  rN  r   cascader  r	  r	  )r[   operand1_resultr  operand2_results       rU   "calculate_cascaded_constant_result*CmpNode.calculate_cascaded_constant_result4  s    ,T]];--7788?O<<_%o)>>==,,$--(Iw)GHH}}))+/==H+DD(x88$(MM$:$:$<DMDMM844}}44+/==H+DD(#OErW   c                     [        U 5      nU R                  R                  U5      n U" X5      nU(       a-  U R
                  nU(       a  U=(       a    UR                  XB5      nU$ ! [         a  nU R	                  U5        S n S nANXS nAff = frO   )r  rx  rD  r  rI  r~  cascaded_compile_time_value)r[   rw  rC  r  rx  r  rH  r~  s           rU   r  #CmpNode.cascaded_compile_time_value4  s    %d+==33D9	(-F llGWG$G$G$W  	))!,F	s   A& &
B0BBc                     U R                   R                  R                  =(       d     U R                  R                  R                  $ rO   r  rZ   s    rU   is_cpp_comparisonCmpNode.is_cpp_comparison4  s-    }}!!..Q$--2D2D2Q2QQrW   c                    UR                   nUR                   nSnSnUR                  (       a  UR                  5       (       a  SnUR                  (       a  UR                  5       (       a  SnUR                  (       a  U(       a  U$  g UR                  (       a  U(       a  U$  g U(       a<  U(       a5  [        R
                  XV4;   a  [        R                  $ [        R                  $ g r  )	r   r  r  rD  r   r   r   r,  r-  )	r[   ry   r  rw  rx  r  r  type1_can_be_inttype2_can_be_ints	            rU   find_common_int_typeCmpNode.find_common_int_type4  s      %%(*M*M*O*O#%%(*M*M*O*O#<<    \\    ''E>9%444%222rW   c                    U R                   nUR                  nUR                  nS nUR                  (       d  UR                  (       Ga  US;  ab  UR                  (       d  UR                  (       a@  UR                  (       d  UR                  (       a  [	        U R
                  S5        [        nGOUR                  (       a;  UR                  [        R                  5      (       a  [        R                  O[        nOUR                  (       a;  UR                  [        R                  5      (       a  [        R                  O[        nOv[        R                  " Xg5      nO_UR                  (       a(  UR                  (       a  [        R                  " Xg5      nO&Ub  UR                  (       d  U R                  XX55      nUGc  UR                  (       d  UR                  (       a  [        nGOWXg:X  a  UnGONUR                  (       d  UR                  (       a  UR                  (       d  UR                   (       a$  UR#                  Xa5      (       a  [        nO[        nOUR                  (       d  UR                   (       a$  UR#                  Xq5      (       a  [        nO[        nO[        R$                  " U5      (       a"  [        R$                  " U5      (       a  [        nOcU R'                  X2U5        [        nOJUR%                  U5      (       a  UnO1UR%                  U5      (       a  UnOU R'                  X2U5        [        nUR                   (       a0  [)        U[*        5      (       d  [)        U[*        5      (       a  [,        nUb  UR.                  (       a  UnO[        R0                  " XH5      nU R2                  (       a&  U R2                  R5                  XR6                  XT5      nU$ )Nr  r  zcomplex types are unordered)rx  r   rJ  rp  r   r   r3   rv   rG  r   r6  r   r   rh  r  r}  r  r,  rK  invalid_types_errorr   r3  r   r<  spanning_typer~  find_common_typer   )	r[   ry   r  rw  common_typerx  r  r  new_common_types	            rU   r  CmpNode.find_common_type5  s   == u///,&))U-=-=))U-=-=dhh =>","":?:J:J7K_K_:`:`'"6"6ft"":?:J:J7K_K_:`:`'"6"6ft","@"@"N%"2"2(<<UJO (?(?"77TO"%//"0"'""e&7&7##u88DD*4*8%%88DD*4*8#33E::~?]?]^c?d?d&4O ,,X8D&0O&&u--"'&&u--"' ((x@",$$*Xy*I*I*4Xy*I*I )O /":":)K
 %22;PK<<,,77]]HbKrW   c           
      r    [        U R                  SU< SUR                  < SUR                  < S35        g )NInvalid types for 'r  r  r9  )r   r   r   )r[   rw  r  rx  s       rU   r  CmpNode.invalid_types_errorX5  s$    dhh8==(--1 	2rW   c                 &   U R                  5       (       + =(       av    U R                  5       (       + =(       aZ    U R                  5       =(       dC    U R                  =(       a    U R                  R	                  5       =(       d    U R
                  S;   $ Nr|  )is_ptr_containsis_c_string_containshas_python_operandsr~  is_python_comparisonr   rZ   s    rU   r  CmpNode.is_python_comparison\5  sk    ((** 7--//7))+ 6\\Idll&G&G&I6MM%55		8rW   c                     U R                   nUR                  U:w  a  UR                  X5      U l         U R                  (       a  U R                  R	                  X5        g g rO   )rx  r   r8  r~  coerce_operands_to)r[   rP  ry   rx  s       rU   r  CmpNode.coerce_operands_toc5  sG    ====H$$..x=DM<<LL++H: rW   c                 P   U R                  5       =(       a\    U R                  S L =(       aG    U R                  S;  =(       a1    U R                  5       (       + =(       a    U R	                  5       (       + =(       d-    U R
                  =(       a    U R
                  R                  5       $ )N)rv  r  r  r  )r  special_bool_cmp_functionr   r  r  r~  is_python_resultrZ   s    rU   r  CmpNode.is_python_resultj5  s    ))+ ,//47,&FF, ..00, ))++	B
 @!>!>!@	CrW   c                    U R                   S;   =(       a    U R                  R                  R                  =(       aC    U R                  R                  R
                  =(       d    U R                  R                  [        L =(       dC    U R                  R                  R                  =(       a    U R                  R                  [        L $ r  )	r   rw  r   rD  rx  r  r   r  r   rZ   s    rU   r  CmpNode.is_c_string_containsr5  s    }} 00 :##** Xmm((22Vdmm6H6HJ6V9##33 8]]''<7		:rW   c                     U R                   S;   aM  U R                  R                  nUR                  =(       d    UR                  =(       a    UR
                  (       + $ g r  )r   rx  r   r0  ru  r  )r[   container_types     rU   r  CmpNode.is_ptr_containsy5  sM    ==,,!]]//N"))D^-D-D 1&0001 -rW   c                    U R                   S;   GaA  UR                  U R                  R                  pTU(       d#  UR                  (       Ga  UR                  (       a  U[        R
                  L d  U[        R
                  L a$  [        R                  " SS5      U l        SU l	        gU[        R                  L d  U[        R                  L a$  [        R                  " SS5      U l        SU l	        gU(       aZ  SS	KJn  U" U R                   S
:X  a  SOSU [        R                  UU R                  5      nU(       a  Uu  U l	        U l        U l        nggU R                   S;   Ga  U R                  R                  [        R                   L aD  U R                  R#                  S5      U l        [        R                  " SS5      U l        SU l	        gU R                  R                  [        R$                  L aD  U R                  R#                  S5      U l        [        R                  " SS5      U l        SU l	        gU R                  R                  [        R
                  L aD  U R                  R#                  S5      U l        [        R                  " SS5      U l        SU l	        gU R                  R                  R&                  (       d   U R                  R)                  U5      U l        [        R                  " SS5      U l        SU l	        gg)Nr  UnicodeEqualsr  __Pyx_PyUnicode_EqualsTBytesEquals__Pyx_PyBytes_Equalsr,   )optimise_numeric_binopr  EqNer|  r  PyDictContainsr  __Pyx_PyDict_ContainsTFPySetContains__Pyx_PySet_ContainsTFPyUnicodeContains__Pyx_PyUnicode_ContainsTFPySequenceContains__Pyx_PySequence_ContainsTFF)r   r   rx  r_  r   r   r   r   special_bool_cmp_utility_coder  r   Optimizer  r   ru  special_bool_extra_argsr   r  r   rv   rk  )	r[   ry   rw  result_is_boolr  r  r  r  r  s	            rU   "find_special_bool_compare_function*CmpNode.find_special_bool_compare_function5  sc   ==L(#==$--*<*<5%"7"7"7E<Q<QG000EW=Q=Q4Q9D9P9PQ`bq9rD65MD2g000EW=O=O4O9D9P9PQ^`o9pD65KD2#@3 $ 54".. F  %7;5#. - ]]..}}!!W%6%66 $ ? ?@c d5@5L5LM]_q5r21J.##w'7'77 $ ? ?@c d5@5L5L_^p5q21I.##w';';; $ ? ?@c d5@5L5LM`bq5r21M.}}))55$(MM$D$DS$IDM5@5L5LMacu5v21N.rW   c                 F	   U R                   R                  (       aX  UR                  nSU-  nU R                  (       a3  UR                  R                  [        R                  " SS5      5        SnOSnOUR                  nSnSnU R                  (       GaK  UR                   R                  (       a  UR                  5       n	OUR                  5       n	UR                   R                  (       a  UR                  5       n
OUR                  5       n
SR                  U R                   Vs/ s H  oR                  5       PM     sn5      nU R                  (       a%  UR                  R                  U R                  5        UR                  U< SU< S	U R                  < S	U	< SU
< SU R                  (       a  UO[        U   < S
U< U" X R                   5      < 35        g UR                   R                  (       a  US;  a  US;  d   U5       eU R                   R                  (       d  U R                   ["        R$                  L d   eUR                  U< SU R                   R                  (       a  SOS< S	UR                  5       < SUR                  5       < S[        U   < SU< U" X R                   5      < 35        g UR                   R&                  (       as  UR                  U< SU< S	US:H  =(       a    S=(       d    S< UR                   R)                  S5      < S	UR                  5       < SUR                  5       < S35        g UR                   nUR                   nUR*                  (       d  UR*                  (       a  UR-                  U5      (       d  [.        nO*UR0                  (       a  ["        R2                  " X5      nOUnUR5                  U5      nUR5                  U5      nU< SU< S	U< SU R7                  U5      < SU< S3
nU R9                  5       (       a\  U R:                  S:X  aL  [=        UU R                   UU R                   R                  (       a  UOS U R>                  U R@                  5        g UR                  U5        g s  snf )Nz__Pyx_XGOTREF(%s); PyBoolOrNullFromLongr  __Pyx_PyBoolOrNull_FromLong__Pyx_PyBool_FromLongr&  r  r  r  z)); )rv  r  r|  z = PyObject_RichCompareBoolr=  r  r  eqr  r4  r  r   )!r   rv   r   r  r   r   r   r   r  r   r  r  r  r  r   richcmp_constantsr   r   ru  rJ  r  r^  r3  r   rp  rh  r  
c_operatorr  r   r   r   r  )r[   r   rw  rw  r  rx  error_clausegot_refcoerce_resultr  r  	extra_argspecial_bool_extra_args_resultr  r  r  code1code2	statements                      rU   rG  CmpNode.generate_operation_code5  sx   99  22L+k9G--  11++,BDVWY = 711LGM)))}}((",,."//+}}((",,."//+-1YY484P4P84Py  "4P8 .* 11  11$2T2TUJJ!22W6:6R6R2XijlXmm hh79: ]]&&25E+E--1r1-99((DII9O9O,OOOJJ))//BV;&&(&&(%b) hh79 : ]]%%JJd
"s(b(&&t,!!# $ MMEMME''5+B+B!MM%00,!!(<<UJ#&&{3E&&{3E#I %%''D,@,@C,G'HH#'99#8#8Kd(())+ 

9%8s   'Rc                 "    US:X  a  gUS:X  a  gU$ )Nrv  r  r  r  rY   )r[   r  s     rU   r  CmpNode.c_operator6  s    :8^IrW   )r   rx  r  r  r  rO   r  )r^   r_   r`   ra   r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  rG  r  rb   rY   rW   rU   rx  rx  4  si     !%$(! F0R6KZ28;C:12hX&trW   rx  c                       \ rS rSr/ SQrSrSrSrS rS r	S r
S rS	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)r~  i6  )rw  rx  coerced_operand2r~  r  NFc                 8   U R                   R                  U5      nU R                  R                  U5      n[        U5      (       d  [        U5      (       a?  [	        U5      (       a/  [	        U5      (       a  [        [        U R                  X#5      5      $ [        $ rO   )	rw  r   rx  r>   r<   rJ   r@   r   r   r  s       rU   r   PrimaryCmpNode.infer_type*6  st    ((-((-5!!_U%;%;(//4Me4T4T"#5dmmU#RSS rW   c                     grX  rY   r   s     rU   ro   PrimaryCmpNode.type_dependencies56  ra
  rW   c                 t    U R                   (       a   eU R                  U R                  R                  5        g rO   )r~  r  rw  r   rZ   s    rU   r8  (PrimaryCmpNode.calculate_constant_result86  s'    <<//0M0MNrW   c                 Z    U R                   R                  U5      nU R                  X!5      $ rO   )rw  rD  r  )r[   rC  rw  s      rU   rD  !PrimaryCmpNode.compile_time_value<6  s'    ==33D9//??rW   c                 x    U R                   nU(       a'  U R                  Ul        UR                   nU(       a  M&  g g rO   )r~  r   )r[   cdrs     rU   unify_cascade_type!PrimaryCmpNode.unify_cascade_type@6  s)    llyyCH++C crW   c                    U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  5       (       a:  U R	                  U5        U R
                  (       a  [        U R                  S5        U $ U R                   R                  nU R                  R                  n[        U5      (       d  [        U5      (       aM  [        U5      (       a=  [        U5      (       a-  [        [        U R                  X#5      5      U l        SU l        U $ U R                  U5      (       a  U $ U R
                  (       a   U R
                  R                  U5      U l        U R                  S;   Ga<  U R!                  5       (       GaV  SU l        S nU R
                  (       a  [        U R                  S5        U $ U R                  R                  ["        L a'  UR%                  [&        R(                  " SS5      5        OU R                   R                  [*        R,                  L a/  U R                   R/                  [*        R0                  U5      U l         U R                  R                  [2        La%  U R                  R/                  [2        U5      U l        UR%                  [&        R(                  " SS5      5        U R                  R5                  S5      U l        GOvU R7                  5       (       a>  U R
                  (       a  [        U R                  S	5        [*        R8                  U l        U $ U R;                  XR                   5      (       aO  U R                   R                  R<                  (       d   U R                   R?                  U5      U l         S nSU l        O[@        nS
U l        OU R;                  XR                   5      (       aO  U R                   R                  R<                  (       d   U R                   R?                  U5      U l         S nSU l        O7U RC                  XR                  U R                   5      nUR<                  U l        Ub\  URD                  (       dK  U R                   R                  U:w  a   U R                   R/                  XA5      U l         U RG                  XA5        U R
                  (       au  U R                  RI                  U5      U l        U R
                  RK                  U5        U R
                  RM                  U R                  U5      nXPR                  La  XPl'        U RQ                  5       (       a  [*        R@                  U l        O[*        R8                  U l        U RS                  5         U R                  (       d"  U R
                  (       d  U RT                  (       a  SU l+        U $ )Nz5Cascading comparison not yet supported for cpp types.Fr|  z?Cascading comparison not yet supported for 'int_val in string'.PyUCS4InUnicoder  BytesContainsz+argument of type 'NoneType' is not iterablez?Cascading comparison not supported for 'val in sliced pointer'.Tr,   ),rw  rV  rx  r  analyse_cpp_comparisonr~  r   r   r   r>   r<   rJ   r@   r   is_pycmp"analyse_memoryviewslice_comparisonr  r   r   r   r   r   r-  r8  r   r   r  r  ru  r  rv   rk  r   r  r<  r  rj   coerce_cascaded_operands_to_tempoptimise_comparisonr  r  r  r  r  )r[   ry   r  r  r  rx  s         rU   rV  PrimaryCmpNode.analyse_typesF6  s    33C833C8!!##'',||dhh WXK""""5!!_U%;%;(//4Me4T4T'(:4==%(WX	 %22377K<<<<55c:DL==,,((** %"<<$(($efK==%%5(()@)@ARTc)de}}))Z-D-DD(,(?(?
@V@VX[(\}}));(,(?(?
C(P(()@)@Ra)bc $ ? ?A!C%%''<<$(($ef&22	88mmLL}}))55$(MM$D$DS$IDM" %, $44S--HH==%%11 $ @ @ EK!DM//]]DMMRK'33DM";+?+?}}!![0 $ 7 7 I##K5<< MM::3?DMLL99#>||77sKH}},(0%  """11DI"..DI!==DLLD,J,JDLrW   c           
      >   U R                   R                  nU R                  R                  nSU l        UR	                  U R
                  U R                   U R                  /5      nUcJ  [        U R                  SU R
                  < SU< SU< S35        [        R                  U l        SU l
        g UR                  nUR                  (       a  UR                  nUR                  U l        UR                  U l        U R                  S:X  a=  SU l        [!        U 5      (       a&  UR#                  [$        R&                  " S	S
5      5        [)        UR*                  5      S:X  a9  U R                  R-                  UR*                  S   R                  U5      U l        OpU R                   R-                  UR*                  S   R                  U5      U l         U R                  R-                  UR*                  S   R                  U5      U l        UR.                  U l        g )NFr  r  r  r9  r  r   TrW  r  r,   r   )rw  r   rx  r  r/  r   r   r   r   r3   rw  r0  r1  r   r   r  r   r   r   r   r   r   r8  r  )r[   ry   r  r  r   rX  s         rU   r  %PrimaryCmpNode.analyse_cpp_comparison6  s   """"##DMMDMM4==3QR=$((u. /"--DI(DJJ	!++I(88(883&DL-d33$$[%<%<=UWg%hiy~~!# MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM))	rW   c                    U R                   R                  =(       d    U R                  R                  nU R                   R                  R                  =(       d     U R                  R                  R                  nSnU(       a;  U(       a4  U R
                  U;   a$  SU l        [        R                  U l        SU l	        gg)N)r  r  rv  r  FT)
rw  rB  rx  r   r   r   r  r   ru  is_memslice_nonecheck)r[   ry   	have_none
have_sliceopss        rU   r  1PrimaryCmpNode.analyse_memoryviewslice_comparison6  s    MM))BT]]-B-B	mm((;; <mm((;; 	*)(<!DM"..DI)-D&rW   c                    U R                   (       a  U R                  XR                  SS9(       a  SU l         [        R                  U l        SU l        U R                  (       a9  U R                  R                  U R                  USS9nX R                  La  X l
        U R                  5         U $ [        R                  X5      $ )NT)r  Fr,   )r  r  rw  r   ru  r   r  r~  r  rx  r  r  r   re  )r[   ry   rx  s      rU   re   PrimaryCmpNode.coerce_to_boolean6  s    ==66t 7 = %&22	 <<#||??s4  @  AH}}408-'')))$44rW   c                     U R                   R                  R                  =(       d     U R                  R                  R                  $ rO   )rw  r   rv   rx  rZ   s    rU   r  "PrimaryCmpNode.has_python_operands6  s2    "".. .}}!!--	/rW   c                     U R                   (       a  U R                  5         gU R                  R                  5       =(       a    U R                  R                  5       $ r  )r~  r  rw  rW  rx  rZ   s    rU   rW  PrimaryCmpNode.check_const6  s;    <<NN==,,.N4==3L3L3NNrW   c                 n   U R                   U R                  p!UR                  R                  (       a\  U R                  S:X  a  SnOSnSU< UR                  R                  S5      < SUR                  5       < SUR                  5       < S3$ U R                  5       (       a[  UR                  [        L a  SnOS	nU R                  S
:X  a  SnOSnSU< U< SUR                  5       < SUR                  5       < S3$ [        U R                  5      (       a   UR                  5       UR                  5       peOVUR                  5       UR                  5       peU R                  (       a&  UR                  R                  (       a  SU-  nOSU-  nSU< SU R                  U R                  5      < SU< S3$ )Nr  r  r&  r  r  r  z))__Pyx_UnicodeContainsUCS4__Pyx_BytesContainsr  ((PyObject *) %s.memview)r4  r9  )rw  rx  r   rJ  r   r  r  r  r   r>   r&  r  r   r  )r[   rw  rx  negationr(	  r  r  s          rU   r  $PrimaryCmpNode.calculate_result_code6  sV   !]]DMM(==##}}$''-!!	# #
 &&((}},4.}}(!!	# # tyy))#+#:#:#<h>U>U>W#+??#4hoo6G--}}77"="G"="G . rW   c                    U R                   R                  U5        U R                  R                  U5        U R                   H  nUR                  U5        M     U R                  (       Ga!  U R                  U5        U R                  XR                  5       U R                   U R                  U R                  5        U R                  (       aR  U R                  R                  XR                  5       U R                  =(       d    U R                  U R                  S LS9  U R                   R                  U5        U R                   R                  U5        U R                  R                  U5        U R                  R                  U5        g g )Nneeds_evaluation)rw  r  rx  r  r  r  rG  r  r   r~  r  r  r  )r[   r   r  s      rU   r  'PrimaryCmpNode.generate_evaluation_code	7  s   ..t4..t455I..t4 6<<<%%d+(({{}t}}dmm=||55++-)>)>)O$--%)%:%:$%F 6 H MM006MM$$T*MM006MM$$T* rW   c                 p    U R                   R                  U5        U R                  R                  U5        g rO   )rw  r  rx  r  s     rU   r  -PrimaryCmpNode.generate_subexpr_disposal_code7  s(     	,,T2,,T2rW   c                 p    U R                   R                  U5        U R                  R                  U5        g rO   )rw  r  rx  r  s     rU   r  !PrimaryCmpNode.free_subexpr_temps!7  s(     	  &  &rW   c                     U R                   R                  U5        U R                  R                  U5        U R                  (       a  U R                  R                  U5        g g rO   )rw  r#  rx  r~  r  s     rU   r#  PrimaryCmpNode.annotate'7  sD    t$t$<<LL!!$' rW   )r~  r  r   r   r  r  r  rw  rx  rw  r   )r^   r_   r`   ra   r   r~  r  r  r   ro  r8  rD  r  rV  r  r  re  r  rW  r  r  r  r  r#  rb   rY   rW   rU   r~  r~  6  sr    .K G!	O@Rh*65$/O(T+$3'(rW   r~  c                   r    \ rS rSr/ SQrSrSr\rS r	S r
S rS rS rS	 rSS
 jrS rS rSS jrS rSrg)CascadedCmpNodei.7  )rx  r  r~  r  Nc                     [         $ rO   r0  r   s     rU   r   CascadedCmpNode.infer_type?7  r  rW   c                     grX  rY   r   s     rU   ro  !CascadedCmpNode.type_dependenciesC7  ra
  rW   c                 X    U R                   [        L=(       a    U R                   [        L$ rO   r;  rZ   s    rU   r   #CascadedCmpNode.has_constant_resultF7  r?  rW   c                     U R                   R                  U5      U l         U R                  (       a   U R                  R                  U5      U l        U $ rO   )rx  rV  r~  r   s     rU   rV  CascadedCmpNode.analyse_typesJ7  s:    33C8<<<<55c:DLrW   c                 B    U R                   R                  R                  $ rO   )rx  r   rv   rZ   s    rU   r  #CascadedCmpNode.has_python_operandsP7  s    }}!!---rW   c                     gr  rY   rZ   s    rU   r  !CascadedCmpNode.is_cpp_comparisonS7  r  rW   c                 Z   U R                  X!U5      (       aH  SU l        [        R                  U l        UR                  R
                  (       d  UR                  U5      nU R                  (       a:  U R                  R                  U R                  X#5      nX@R                  La  X@l
        U$ r  )r  r  r   ru  r   rv   rk  r~  r  rx  r  )r[   rw  ry   r  rx  s        rU   r  #CascadedCmpNode.optimise_comparisonW7  s|    223.QQ!DM"..DI==,,#66s;<<||77s[H}},(0%rW   c                 8   U R                   R                  U5      U l         U R                   R                  [        L a0  U R                  S;   a   U R                   R                  S5      U l         U R                  (       a  U R                  R                  U5        g g )Nr|  r  )rx  rk  r   r   r   r  r~  r  r   s     rU   r  ,CascadedCmpNode.coerce_operands_to_pyobjectsc7  sk    88===*t}}@P/P MM;;<_`DM<<LL55c: rW   c                     U R                   (       a<  U R                  R                  U5      U l        U R                   R                  U5        g g rO   )r~  rx  rj  r  r   s     rU   r  0CascadedCmpNode.coerce_cascaded_operands_to_tempj7  s6    << MM::3?DMLL99#> rW   c                 H   U R                   R                  (       a0  UR                  SU-  5        UR                  X R                   5        OUR                  SU-  5        U(       a  UR	                  U5        U R
                  R	                  U5        U R                   H  nUR	                  U5        M     U R                  XX0R                  U R
                  5        U R                  (       aD  U R                  R	                  XU R                  =(       d    U R
                  U R                  S LS9  U(       a"  UR                  U5        UR                  U5        U R
                  R                  U5        U R
                  R                  U5        UR                  S5        g )Nz if (__Pyx_PyObject_IsTrue(%s)) {rL  r  r   )r   rv   r   r
  r  rx  r  rG  r   r~  r  r  r  )r[   r   r  rw  r  r  s         rU   r  (CascadedCmpNode.generate_evaluation_codep7  s1   99  JJ9FBCOOFII.JJ{V+,--d3..t455I..t4 6$$TmmT]]	4<<LL11d33Dt}}!%!6!6d!B 2 D ++D1%,,T2  &

3rW   c                     U R                   R                  U5        U R                  (       a  U R                  R                  U5        g g rO   )rx  r#  r~  r  s     rU   r#  CascadedCmpNode.annotate7  s2    t$<<LL!!$' rW   )r~  r  r  rx  r   r  )r^   r_   r`   ra   r   r~  r  r<  r   r   ro  r   rV  r  r  r  r  r  r  r#  rb   rY   rW   rU   r  r  .7  sR    .K G,O:.
;?2(rW   r  )r  r  r  r  r  r  r  r   r|  r   r  r  r  r  r  c                 ,    [         U   " U 4UUUUS.UD6$ )N)r   rw  rx  r4  )binop_node_classes)r   r   rw  rx  r4  r  s         rU   r7  r7  7  s4     h'  rW   c                   D   ^  \ rS rSrS/r\rU 4S jrS rS r	S r
SrU =r$ )r  i7  r  c                    > [         TU ]  UR                  5        Xl        [        (       a  [        U < SU R                  < 35        g g )Nz
 Coercing )rQ   r  r   r  r   r  r[   r  rT   s     rU   r  CoercionNode.__init__7  s4    !>dDHH56 rW   c                     g rO   rY   rZ   s    rU   r8  &CoercionNode.calculate_constant_result7  r~  rW   c                 0   U R                   R                  U5        U R                   R                  U R                  :w  aW  U R                  u  p#nUR                  X#US-
  4[	        SSSU R                   R                  < SU R                  < S3S95        g g )Nr,   coercer  z] to [])rD  tagrE  )r  r#  r   r   r8   )r[   r   filelinecols        rU   r#  CoercionNode.annotate7  su    $88==DII%"hhODMM4s1u-~HTXX]]TXT]T]3^0` a &rW   c                     U $ rO   rY   r   s     rU   rV  CoercionNode.analyse_types7  r  rW   r  )r^   r_   r`   ra   r   r=  r   r  r8  r#  rV  rb   rc   rd   s   @rU   r  r  7  s+    
 wH$O7a rW   r  c                   $    \ rS rSrSrS rS rSrg)r9  i7  zW
Coerce an object to a memoryview slice. This holds a new reference in
a managed temp.
c                     UR                   (       d   eUR                  R                   (       a   e[        R                  X5        X l        SU l        SU l        Xl        U R                  R                  U5        g r'  )r   r   r  r  r  r  r  r  r[   r  rP  ry   s       rU   r  !CoerceToMemViewSliceNode.__init__7  s]    ****88....d(	#		--c2rW   c                     UR                  U R                  R                  U R                  R	                  5       U R                  5       U R                  U5      5        g rO   )r   r   from_py_call_coder  r   r  r   r  s     rU   r  -CoerceToMemViewSliceNode.generate_result_code7  sB    

499..HH KKMHH	
 	rW   )r  r  r   r  N)r^   r_   r`   ra   r  r  r  rb   rY   rW   rU   r9  r9  7  s    
3rW   r9  c                   ,    \ rS rSrS rS rS rS rSrg)r  i7  c                 :    [         R                  X5        X l        g rO   )r  r  r   )r[   r  new_types      rU   r  CastNode.__init__7  s    d(	rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  CastNode.may_be_none7  r  rW   c                 L    U R                   R                  U R                  5      $ rO   )r  r  r   rZ   s    rU   r  CastNode.calculate_result_code7  s    xx!!$)),,rW   c                     g rO   rY   r  s     rU   r  CastNode.generate_result_code7  r   rW   r+  N)	r^   r_   r`   ra   r  r  r  r  rb   rY   rW   rU   r  r  7  s    &-rW   r  c                       \ rS rSrSrSS jr\R                  rSr	S r
S rS rS rS	 rS
 rS rS rS rS rS rS rS rS rS rS rSrg)rH  i 8  Tc                     UR                   (       d*  UR                  (       d   SUR                  < SU< 35       e[        R	                  X5        X l        UR                  5       U l        X@l        g )NzPyTypeTest for z against non extension type )r^  r_  r   r  r  r,  r2  r  )r[   r  rP  ry   r  s        rU   r  PyTypeTestNode.__init__8  sV     ))X-E-E 	UAD8T	UEd(	IIKrW   zPython type testc                     U $ rO   rY   r   s     rU   rV  PyTypeTestNode.analyse_types8  r  rW   c                 Z    U R                   (       a  gU R                  R                  5       $ r  )r  r  r  rZ   s    rU   r  PyTypeTestNode.may_be_none8  s    <<xx##%%rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  PyTypeTestNode.is_simple8  r  rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  PyTypeTestNode.result_in_temp8  r  rW   c                 6    U R                   R                  5       $ rO   )r  r  rZ   s    rU   r  PyTypeTestNode.is_ephemeral"8  s    xx$$&&rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   rw  #PyTypeTestNode.nonlocally_immutable%8  r  rW   c                 F    U R                   R                  U5      U l         U $ rO   )r  r  r   s     rU   r  PyTypeTestNode.coerce_to_temp(8  s    88**3/rW   c                    U R                   U R                  R                   :w  d  U R                  R                  5       (       d  U $ U R                   R                  5       (       d  U $ U R                  R	                  5       (       aC  U R
                  (       a2  U R                  R                  SU R                   R                  -  5      $ U R                  $ )Nz!Cannot convert NoneType to %.200s)r   r  r  typeobj_is_availabler  r  r  rw   rZ   s    rU   	reanalysePyTypeTestNode.reanalyse,8  s    99%TXX-D-D-F-FKyy--//K88!!dll88--.QTXT]T]TbTb.bccxxrW   c                     g rO   rY   rZ   s    rU   r8  (PyTypeTestNode.calculate_constant_result58  r~  rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  $PyTypeTestNode.calculate_result_code98  r  rW   c                 &   U R                   R                  5       (       Ga[  U R                  (       + nU R                   R                  (       a  U R                   R	                  UR
                  R                  U R                  R                  5       UU R                  S9nUR                  R                  [        R                  " SS5      5        OyU R                   R	                  UR
                  R                  U R                  R                  5       U5      nUR                  R                  [        R                  " SS5      5        UR                  SU< SUR                  U R                   5      < 35        g [#        U R                   S5        g )N)exactRaiseUnexpectedTypeErrorr  ExtTypeTestzif (!(rJ  zICannot test type of extern C class without type object name specification)r   rW  r  r_  type_test_coder  rx  r  r   rR	  r   r   r   r   r   r   r   r   )r[   r   r  	type_tests       rU   r  #PyTypeTestNode.generate_result_code<8  s1   99))++!\\)Jyy(( II44NN((HH&&(11	 5 	   11+2I2I.0B3D E !II44NN((HH&&(	
   11++M;MNPJJ4??48846 7 $(( 9 :rW   c                 :    U R                   R                  U5        g rO   r  r  s     rU   r  ,PyTypeTestNode.generate_post_assignment_codeV8  r  rW   c                     g rO   rY   r  s     rU   r  #PyTypeTestNode.allocate_temp_resultY8  r   rW   c                     g rO   rY   r  s     rU   r  "PyTypeTestNode.release_temp_result\8  r   rW   c                 :    U R                   R                  U5        g rO   r  r  s     rU   r  PyTypeTestNode.free_temps_8  r  rW   c                 :    U R                   R                  U5        g rO   )r  r  r  s     rU   r  !PyTypeTestNode.free_subexpr_tempsb8  s    ##D)rW   )r  r  r2  r   Nr  )r^   r_   r`   ra   rR	  r  r/   r  r  r@  rV  r  r  r  r  rw  r  rX  r8  r  r  r  r  r  r  r  rb   rY   rW   rU   rH  rH   8  so    
  ..K$K&
$)'/!:45"*rW   rH  c                      ^  \ rS rSrSrSr SU 4S jjrSrS rS r	S r
\ SS j5       r\ SS	 j5       rS
 rS rSrU =r$ )r  if8  TNc                    > [         TU ]  UR                  U5        UR                  U l        UR	                  5       U l        X l        X0l        [        U=(       d    S5      U l	        g rX  )
rQ   r  r   r   r,  r2  exception_type_cnameexception_messager   exception_format_args)r[   r  rq  rr  rs  rT   s        rU   r  NoneCheckNode.__init__n8  sN    #&HH	IIK$8!!2%*+@+FB%G"rW   c                     U $ rO   rY   r   s     rU   rV  NoneCheckNode.analyse_typesy8  s	     rW   c                     gr  rY   rZ   s    rU   r  NoneCheckNode.may_be_none~8  r   rW   c                     U R                   R                  (       a  U R                  R                  5       $ U R                   R                  (       a  SU R                  R                  5       -  $ [        S5      e)Nr  zunsupported type)r   rv   r  r   r   r  r  rZ   s    rU   	conditionNoneCheckNode.condition8  sQ    99  88%%''YY)).1BBB.//rW   c                 D    U " XX55      nXgl         UR                  U5        g rO   )r  put_nonecheck)rS   r  r   rr  rq  rs  r  r   s           rU   generateNoneCheckNode.generate8  s%     3.?W 04 rW   c                 V    UR                  5       (       a  U R                  XX4XV5        g g rO   )r  r~  )rS   r  r   rr  rq  rs  r  s          rU   generate_if_needed NoneCheckNode.generate_if_needed8  s(     ??LL$5Mbu rW   c                 V   UR                  SU R                  5       -  5        U R                  (       a  UR                  5         [        R
                  nU R                  (       a  UR                  SU R                  < S[        R
                  " U R                  R                  S5      5      < SSR                  U R                   Vs/ s H&  nSU" [        U5      R                  S5      5      -  PM(     sn5      < S35        OCUR                  S	U R                  < SU" U R                  R                  S5      5      < S
35        U R                  (       a  UR                  5         UR                  UR                  U R                  5      5        UR                  S5        g s  snf )Nzif (unlikely(%s == Py_None)) {zPyErr_Format(r=  zUTF-8z", r  z"%s"r  zPyErr_SetString(z");r   )r   rz  r  r   r
   escape_byte_stringrs  rq  rr  r  r  r~   r   r   r   )r[   r   escaper  s       rU   r}  NoneCheckNode.put_nonecheck8  sF   

,t~~/??	A   !22%%JJ))11**11':<		'+'A'AD'A #VCHOOG,D%EE'AD E	F G JJ))t--44W=>@ A   ((*

4??488,-

3Ds   	-F&c                 &    U R                  U5        g rO   )r}  r  s     rU   r  "NoneCheckNode.generate_result_code8  s    4 rW   )rs  rr  rq  r2  r   )rY   )r  rY   F)r^   r_   r`   ra   r  r   r  r  rV  r  rz  r  r~  r  r}  r  rb   rc   rd   s   @rU   r  r  f8  so    
 LD (*H K
0 di! ! nsv v
4! !rW   r  c                   N    \ rS rSr\r\rSr\4S jrSr	S r
S rS rS rS	 rS
rg)rF  i8  r,   c                    UR                   R                  U5      (       d$  [        UR                  SUR                   -  5        O,UR                   R                  (       a  UR                  U5      n[        R                  X5        U[        L a  UR                   R                  (       d  UR                   R                  (       a  [        U5      U l         OrUR                   R                  (       d  UR                   R                  (       a  [        U l         O0UR                   R                  (       a  [        R                   U l         U R                   U l        g UR                   R                  (       d  UR                   R                  (       a\  U[$        [&        4;  a=  UR(                  S   (       d)  [        UR                  SUR                   < SU< S35        U=U l         U l        g X0l        g )Nz$Cannot convert '%s' to Python objectrf   r  r  rZ  )r   rP  r   r   rJ  rj  r  r  r   r  r  r   r  r  r   r   r6  target_typer   r    rq   )r[   r  ry   r   s       rU   r  CoerceToPyTypeNode.__init__8  s7   xx11#66#''ACHHLMXX   &&s+Cd(>!xx!!SXX%;%;,S1	**chh.F.F(	$$#00	#yyDXX388#9#9Z88NN+>?cggXXt%& ,0/DI(  $rW   zConverting to Python objectc                     gr  rY   rZ   s    rU   r  CoerceToPyTypeNode.may_be_none8  r  rW   c                     U R                   R                  nU[        R                  :X  d!  UR                  (       a+  UR
                  S:X  a  U R                   R                  U5      $ [        X5      $ )Nrf  )r  r   r   ru  rv   rw   r  rw  )r[   ry   r  s      rU   re  $CoerceToPyTypeNode.coerce_to_boolean8  sQ    88==
...%%(--6*A88**3//&t11rW   c                 8    U R                   R                  U5      $ rO   )r  r  r   s     rU   r  "CoerceToPyTypeNode.coerce_to_index8  s    xx'',,rW   c                     U $ rO   rY   r   s     rU   rV   CoerceToPyTypeNode.analyse_types8  r  rW   c                 P   UR                  U R                  R                  R                  U R                  R	                  5       U R	                  5       U R
                  5      < SUR                  U R	                  5       U R                  5      < 35        U R                  U5        g )Nrh  )	r   r  r   to_py_call_coder  r  r   r   r  r  s     rU   r  'CoerceToPyTypeNode.generate_result_code8  su    

HHMM))!  " ##DKKM488<> 	? 	T"rW   )r  r   N)r^   r_   r`   ra   r   r   r  r  r  r@  r  re  r  rV  r  rb   rY   rW   rU   rF  rF  8  s;     D KG&4 $: 0K2-#rW   rF  c                   $    \ rS rSrSrS rS rSrg)rE  i8  r,   c                 z    UR                  U5      n[        R                  X5        [        R                  U l        g rO   )rj  r  r  r   r   r   r[   r  ry   s      rU   r  CoerceIntToBytesNode.__init__8  s-    ""3'd(&&	rW   c           
         U R                   nUR                  5       nUR                  [        R                  [        R
                  [        R                  4;  a  UR                  R                  (       a  UR                  SU< SU< S35        OUR                  SU-  5        UR                  SUR                  U R                  5      -  5        UR                  S5        S nUR                  [        R                  LaC  UR                  R                  [        R                  SS9nUR                  U< S	U< S
35        UnUR                  U R                  5       < SU< SUR                  U R                  5       U R                  5      < 35        Ub  UR                  R                  U5        U R                  U5        g )Nzif ((z
 < 0) || (z
 > 255)) {zif (%s > 255) {zOPyErr_SetString(PyExc_OverflowError, "value too large to pack into a byte"); %sr   Fr  z	 = (char)r  z = PyBytes_FromStringAndSize(&z, 1); )r  r  r   r   r   r-  r  rO  r   r   r   r  r  r   r  r  )r[   r   r  
arg_resultr  s        rU   r  )CoerceIntToBytesNode.generate_result_code9  sX   hhZZ\
88J22&33&335 5 xx


, - 

,z9:JJ D??48846 7 JJsO88:111>>//
0F0FSX/YDJJ4<=J

KKM##DKKM488<> 	? NN''-T"rW   r+  N)r^   r_   r`   ra   r  r  r  rb   rY   rW   rU   rE  rE  8  s     G'
#rW   rE  c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g)	rI  i!9  Nc                 \   [         R                  X5        Xl        SU l        UR	                  U5      (       d  [        UR                  SU-  5        U R                  R                  (       d  U R                  R                  (       a  U R                  R                  (       aX  U R                  R                  (       a=  U R                  R                  R                  (       a  [        UR                  SU-  SS9  U R                  R                  (       a  [        UR                  SSS9  g g g )Nr,   z$Cannot convert Python object to '%s'z=Obtaining '%s' from externally modifiable global Python valuer   a  Py_UNICODE* has been removed in Python 3.12. This conversion to a Py_UNICODE* will no longer compile in the latest Python versions. Use Python C API functions like PyUnicode_AsWideCharString if you need to obtain a wchar_t* on Windows (and free the string manually after use).)r  r  r   r  r  r   r   r  r  r  r   r   r  r   )r[   r  r  ry   s       rU   r  CoerceFromPyTypeNode.__init__(9  s    d(	66s;;#''8;FH99$))"<"<xxDHHNNtxx~~7Q7QWZee! yy))i  ! * #=rW   c                     U $ rO   rY   r   s     rU   rV  "CoerceFromPyTypeNode.analyse_types<9  r  rW   c                     U R                   R                  =(       a    U R                   R                  (       + =(       a    U R                  R	                  5       $ rO   )r   r0  ru  r  r  rZ   s    rU   r  !CoerceFromPyTypeNode.is_ephemeral@9  s6    		  ;););%;XAVAVAXXrW   c                    S nU R                   R                  (       a  U R                  R                   [        L ap  U R                   R                  R                  S5      (       aF  SU R                   R                  [        S5      S  -   n[        R                  U R                  US5        UR                  U R                   R                  U R                  R                  5       U R                  5       U R                  UUU R                  S95        U R                   R                  (       a  U R!                  U5        g g )N__Pyx_PyObject_As__Pyx_PyBytes__Pyx_PyObjectzexpected bytes, NoneType found)from_py_functionspecial_none_cvalue)r   r  r  r   r  r
  r   r  r  r   r9  r   r  r   r  rv   r  )r[   r   r  s      rU   r  )CoerceFromPyTypeNode.generate_result_codeC9  s    99488==J#>yy))445HII#2TYY5O5OPSTdPePf5g#g 004Aab

499..HH $++-4- $ 8 8 / 
 	
 99    & !rW   c                 0    [        U R                  S5        g )Nz0Coercion from Python not allowed without the GILrA  r   s     rU   r   CoerceFromPyTypeNode.nogil_checkS9  s    dhhJKrW   r  )r^   r_   r`   ra   r  r  rV  r  r  r  rb   rY   rW   rU   rI  rI  !9  s%    
 !(Y' LrW   rI  c                       \ rS rSr\R
                  r\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S\R                  S0rS rS	 rS
rS rS rS rS rSrg)rw  iW9  r  r  __Pyx_PySet_GET_SIZE__Pyx_PyBytes_GET_SIZE__Pyx_PyByteArray_GET_SIZE__Pyx_PyUnicode_IS_TRUEc                 t    [         R                  X5        UR                  R                  (       a  SU l        g g r  )r  r  r   rv   r  r  s      rU   r  CoerceToBooleanNode.__init__j9  s)    d(88DL  rW   c                     U R                   R                  R                  (       aB  U R                  R	                  U R                   R                  5      c  U R                  5         g g g rO   )r  r   rv   _special_builtinsrp   r  r   s     rU   r  CoerceToBooleanNode.nogil_checko9  sD    88==$$)?)?)C)CDHHMM)R)ZNN *[$rW   r0  c                 z    U R                   (       a  U R                  5         gU R                  R                  5       $ r  )r  r  r  rW  rZ   s    rU   rW  CoerceToBooleanNode.check_constu9  s)    <<NNxx##%%rW   c                 <    SU R                   R                  5       -  $ )Nz	(%s != 0)r  rZ   s    rU   r  )CoerceToBooleanNode.calculate_result_code{9  s    TXX__...rW   c           
         U R                   (       d  g U R                  R                  U R                  R                  5      nUGbR  U R                  R                  5       (       aO  UR                  SU R                  R                  5        SU R                  5        S35        UR                  S5        UR                  S5        UR                  S[        R                   SU SU R                  R                  5        S	35        UR                  UR                  S
[        R                   S3U R                  5      5        UR                  U R                  5        S[        R                   S35        UR                  S5        UR                  5         g UR                  U R                  5       < SU R                  R                  5       < SUR                  U R                  5       U R                  5      < 35        g )Nr  z == Py_None) r	  elser  r  r  r  r  z((!CYTHON_ASSUME_SAFE_SIZE) && z < 0)z = (z != 0);r   rQ  r=  )r  r  rp   r  r   r  r   r   r  r   r  r   r   r  )r[   r   	test_funcs      rU   r  (CoerceToBooleanNode.generate_result_code~9  sz   ||**..txx}}=	 xx##%%

T$(("4"4"6!7}T[[]OSXYZ

6"JJsO JJV%<%<$=S1TXXM_M_MaLbbdefJJt))1&2I2I1J%PRVRZRZ\ ]JJ$++-V-D-D,EWMNJJsOJJLJJKKMHH&&(**4;;=$((CEFrW   c                     U $ rO   rY   r   s     rU   rV  !CoerceToBooleanNode.analyse_types9  r  rW   r  N)r^   r_   r`   ra   r   ru  r   r   r   r   r   frozenset_typer   r    r   r  r  r  r@  rW  r  r  rV  rb   rY   rW   rU   rw  rw  W9  s     !!D 	!8!9!7!7!9!=!:
 0K&/F0rW   rw  c                   ,    \ rS rSrS rS rS rS rSrg)rL  i9  c                     UR                   R                  (       a  UR                  U5      nX l         [        R	                  X5        UR                  U5        g rO   )r   rJ  rj  r  r  r1  r6  s       rU   r  CoerceToComplexNode.__init__9  s@    88&&s+C	d(005rW   c                    U R                   R                  R                  (       a{  U R                   R                  R                  U R                   R	                  5       5      nU R                   R                  R                  U R                   R	                  5       5      nOU R                   R	                  5       nSnU R                  R                  < SU< SU< S3$ r	  )r  r   rJ  r  r  r  r:  )r[   r  r  s      rU   r  )CoerceToComplexNode.calculate_result_code9  s    88==##//0ABI//0ABI)II		$$ 	rW   c                     g rO   rY   r  s     rU   r  (CoerceToComplexNode.generate_result_code9  r   rW   c                     U $ rO   rY   r   s     rU   rV  !CoerceToComplexNode.analyse_types9  r  rW   r+  N)	r^   r_   r`   ra   r  r  r  rV  rb   rY   rW   rU   rL  rL  9  s    6
rW   rL  c           
         SSK Jn  [        R                  " [        R                  [        R
                  " S[        R                  S 5      [        R
                  " S[        R                  S 5      /SSSS9n[        U R                  SU[        R                  " S	S
5      X" U R                  5      /S9nUR                  U5      nUR                  U:w  a  UR                  X5      nU$ )Nr,   )HasNoGilNoder   r  rX  T)r   r   r   __Pyx_SoftComplexToDoubleSoftComplexToDoublez	Complex.c)r  r   )r|  r  r   r  r  r  rM  ru  r
  r   r   r   rV  r   r8  )r  rP  ry   r  
cfunc_typer  s         rU   rN  rN  9  s    '%%  

!
!':+G+G
N

!
!*j.D.Dd
K	NJ #"../DkR\#''*+D c"DyyH~~h,KrW   c                   6    \ rS rSrS rSrS rS rS rS r	Sr
g	)
r  i9  c                    [         R                  X5        U R                  R                  R	                  5       U l        U R                  R
                  U l        SU l        U R                  R                  (       a  [        U l	        g g r  )
r  r  r  r   as_argument_typer   r  rv   r   r2  r  s      rU   r  CoerceToTempNode.__init__9  s[    d(HHMM224	#xx7799   .D !rW   z#Creating temporary Python referencec                     U $ rO   rY   r   s     rU   rV  CoerceToTempNode.analyse_types9  r  rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  CoerceToTempNode.may_be_none9  r  rW   c                     U R                   R                  U5      U l         U R                   R                  5       (       a  U R                   $ U R                   R                  U l        U R                  U l        U $ rO   )r  re  r  r   r2  r   s     rU   re  "CoerceToTempNode.coerce_to_boolean9  sT    88--c28888OHHMM	 IIrW   c                    UR                  U R                  5       < SU R                  R                  U R	                  5       5      < S35        U R
                  (       a  U R                  R                  (       d/  UR                  U R                  5       U R	                  5       5        g UR                  U R                  5       U R                  U R                  (       + S9  g g )Nr  r  r  )r   r  r  r  r,  r  r   r   r  r  r  r  s     rU   r  %CoerceToTempNode.generate_result_code9  s     	

KKM488--djjl;= 	>99//tzz|<//tyy9=9N9N5N 0 P	  rW   )r  r   r  r2  r   N)r^   r_   r`   ra   r  r@  rV  r  re  r  rb   rY   rW   rU   r  r  9  s#    
/ 8K&
PrW   r  c                   l   ^  \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 rS
 rS rS rS rS rSrU =r$ )r?  i9  z
A node that should not be replaced by transforms or other means,
and hence can be useful to wrap the argument to a clone node

MyNode    -> ProxyNode -> ArgNode
CloneNode -^
Nc                 f   > [         TU ]  U5        UR                  U l        U R                  5         g rO   )rQ   r  r   update_type_and_entryr&  s     rU   r  ProxyNode.__init__:  s*    "22""$rW   c                 f    U R                   R                  U5      U l         U R                  5         U $ rO   )r  r]  r  r   s     rU   rV  ProxyNode.analyse_types:  s)    88//4""$rW   c                 8    U R                   R                  U5      $ rO   r  r   s     rU   r   ProxyNode.infer_type:  r  rW   c                     [        U R                  SS 5      nU(       a!  Xl        U R                  R                  U l        [        U R                  SS 5      nU(       a  X l        g g Nr   r   )r  r  r   r2  r   )r[   r   	arg_entrys      rU   r  ProxyNode.update_type_and_entry:  sM    txx.I $ 5 5DDHHgt4	"J rW   c                 :    U R                   R                  U5        g rO   )r  r  r  s     rU   r  ProxyNode.generate_result_code:  s    %%d+rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  ProxyNode.result:  r  rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  ProxyNode.is_simple:  r  rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  ProxyNode.may_be_none":  r  rW   c                 :    U R                   R                  U5        g rO   )r  r  r  s     rU   r  "ProxyNode.generate_evaluation_code%:  s    ))$/rW   c                 :    U R                   R                  U5        g rO   )r  r  r  s     rU   r   ProxyNode.generate_disposal_code(:  s    ''-rW   c                 :    U R                   R                  U5        g rO   r  r  s     rU   r  ProxyNode.free_temps+:  r  rW   )r  r   r   r2  r   )r^   r_   r`   ra   r  r  r  rV  r   r  r  r  r  r  r  r  r  rb   rc   rd   s   @rU   r?  r?  9  sK     K%

(#,!$&0." "rW   r?  c                   x   ^  \ rS rSr/ rSrS rS rS rS r	S r
S rU 4S	 jrS
 rS rS rS rS rS rSrU =r$ )r  i.:  Nc                     [         R                  X5        UR                  U l        [        USS 5      nU(       a  X l        UR
                  U l        [        USS 5      nU(       a  X0l        g g r  )r  r  r   r  r   r2  r   )r[   r  r   r  s       rU   r  CloneNode.__init__9:  s]    d("22sFD)I # 0 0DC$/	"J rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  CloneNode.resultD:  r  rW   c                 6    U R                   R                  5       $ rO   r  rZ   s    rU   r  CloneNode.may_be_noneG:  r  rW   c                 8    U R                   R                  U5      $ rO   )r  ro  r   s     rU   ro  CloneNode.type_dependenciesJ:  r
  rW   c                 8    U R                   R                  U5      $ rO   r  r   s     rU   r   CloneNode.infer_typeM:  r  rW   c                     U R                   R                  U l        U R                   R                  U l        SU l        [	        U R                   SS 5      nU(       a  X l        U $ )Nr,   r   )r  r   r2  r  r  r   )r[   ry   r  s      rU   rV  CloneNode.analyse_typesP:  sI    HHMM	 HH11DHHgt4	"JrW   c                    > U R                   R                  (       a  U R                   R                  X5      $ [        TU ]	  X5      $ rO   )r  r   r8  rQ   )r[   	dest_typery   rT   s      rU   r8  CloneNode.coerce_toY:  s5    8888%%i55w 00rW   c                     gr  rY   rZ   s    rU   r  CloneNode.is_simple^:  r  rW   c                     g rO   rY   r  s     rU   r  "CloneNode.generate_evaluation_codea:  r   rW   c                     g rO   rY   r  s     rU   r  CloneNode.generate_result_coded:  r   rW   c                     g rO   rY   r  s     rU   r   CloneNode.generate_disposal_codeg:  r   rW   c                     U R                   (       a/  UR                  U R                  5       U R                  5       5        g g rO   )r  r  r  r,  r  s     rU   r  'CloneNode.generate_post_assignment_codej:  s*     <<OODKKM4::<8 rW   c                     g rO   rY   r  s     rU   r  CloneNode.free_tempsp:  r   rW   )r   r   r  r2  r   )r^   r_   r`   ra   r   r  r  r  r  ro  r   rV  r8  r  r  r  r  r  r  rb   rc   rd   s   @rU   r  r  .:  sU     HK	#!&/(1
9 rW   r  c                   V   ^  \ rS rSrSrSr\S 5       rS rS r	S r
S
U 4S jjrS	rU =r$ )CppOptionalTempCoercionit:  z
Used only in CoerceCppTemps - handles cases the temp is actually a OptionalCppClassType (and thus needs dereferencing when on the rhs)
Fc                 .    U R                   R                  $ rO   r  rZ   s    rU   r   CppOptionalTempCoercion.typez:  r  rW   c                 <    SU R                   R                  5       -  $ r  r  rZ   s    rU   r  -CppOptionalTempCoercion.calculate_result_code~:  s    ***rW   c                     g rO   rY   r  s     rU   r  ,CppOptionalTempCoercion.generate_result_code:  r   rW   c                 0    [        U R                  S5        g )NziUsing C++ classes in boolean binary operators with the 'cpp_locals' directive is not currently supported.rA  )r[   r   r`  s      rU   r#  5CppOptionalTempCoercion.generate_bool_evaluation_code:  s     	dhh I 	JrW   c                     > [         TU ]  USS9$ )NFr  )rQ   r  )r[   r  r  rT   s      rU   r  -CppOptionalTempCoercion._make_move_result_rhs:  s     w,Ve,DDrW   rY   r  )r^   r_   r`   ra   r  r  r  r   r  r  r#  r  rb   rc   rd   s   @rU   r  r  t:  s=     G +JE ErW   r  c                       \ rS rSrS rSrg)rQ	  i:  c                     UR                   (       a"  U R                  R                  U5      (       a  U $ [        R	                  XU5      $ rO   )r_  r   rG  r  r8  rE  s      rU   r8  CMethodSelfCloneNode.coerce_to:  s7    ##		(<(<X(F(FK""4377rW   rY   N)r^   r_   r`   ra   r8  rb   rY   rW   rU   rQ	  rQ	  :  s    8rW   rQ	  c                   8    \ rS rSr\rSr/ rS rS r	S r
S rSrg)	ModuleRefNodei:  Fc                     U $ rO   rY   r   s     rU   rV  ModuleRefNode.analyse_types:  r  rW   c                     gr  rY   rZ   s    rU   r  ModuleRefNode.may_be_none:  r   rW   c                 "    [         R                  $ rO   )r   r9  rZ   s    rU   r  #ModuleRefNode.calculate_result_code:  s    """rW   c                     g rO   rY   r  s     rU   r  "ModuleRefNode.generate_result_code:  r   rW   rY   N)r^   r_   r`   ra   r   r   r  r   rV  r  r  r  rb   rY   rW   rU   r$  r$  :  s'     DGH#rW   r$  c                   4    \ rS rSrS/r\rSrS rS r	S r
Srg)	DocstringRefNodei:  r  Tc                 t    [         R                  X5        UR                  R                  (       d   eX l        g rO   )r   r  r   rv   r  )r[   r   r  s      rU   r  DocstringRefNode.__init__:  s(    $$yy$$$$	rW   c                     U $ rO   rY   r   s     rU   rV  DocstringRefNode.analyse_types:  r  rW   c                 H   UR                  U R                  5       < SU R                  R                  5       < SUR                  [        R
                  " S5      5      < SUR                  U R                  5       U R                  5      < 35        U R                  U5        g )Nz = __Pyx_GetAttr(r  r  r=  )	r   r  r  r  r
   r|  r   r   r  r  s     rU   r  %DocstringRefNode.generate_result_code:  sn    

KKM499++-"">#?#?	#JK##DKKM488<> 	? 	T"rW   )r  N)r^   r_   r`   ra   r   r   r   r  r  rV  r  rb   rY   rW   rU   r.  r.  :  s$     xHDG
#rW   r.  c                   B    \ rS rSr/ rSrS
S jrS rS rS r	S
S jr
S	rg)AnnotationNodei:  FNc                     [         R                  X5        Uc8  SSKJn  [        R
                  " U" SS9R                  U5      5      n[        XS9nX0l        X l	        g)z6string is expected to already be a UnicodeNode or NoneNr,   r  r  )descriptionr  )
r   r  r  r  r
   r|  writer4  r  r  )r[   r   r  r  r  string_values         rU   r  AnnotationNode.__init__:  sP    $$>;)77 \:@@FHL 9F	rW   c                     U $ rO   rY   r   s     rU   rV  AnnotationNode.analyse_types:  r  rW   c                 *    U R                  U5      S   $ r  )r}  r   s     rU   r  AnnotationNode.analyse_as_type:  s    ++C033rW   c                    [        U[        5      (       a  UR                  nUR                  (       aN  UR	                  UR
                  5      (       d-  [        UR                  SU R                  R                  -  SS9  ggUR                  (       Gab  UR                  R                  (       GaF  UR	                  UR                  R
                  5      (       d-  [        UR                  SU R                  R                  -  SS9  gUR                  R                  (       ar  UR                  R                  U5      nU(       aO  UR                  UR                  5      (       d.  [!        UR                  SU R                  R                  -  5        gggUR                  R                  U5      nU(       a?  UR"                  (       a-  [        UR                  SU R                  R                  -  SS9  ggg[        UR                  S5        g)zZMethod checks for cases when user should be warned that annotation contains unknown types.z5Unknown type declaration '%s' in annotation, ignoringr,   r   z+Unknown type declaration '%s' in annotationz0Unknown type declaration in annotation, ignoringN)r   ra  r|  r   ry  rw   r   r   r  r   r  ro  r  r  r
  rp  r   pxd_file_loaded)r[   ry   r  r
  s       rU   _warn_on_unknown_annotation*AnnotationNode._warn_on_unknown_annotation:  s   j.11#J::joo..
ORVR]R]RcRcckln / $$$)?)?)?::jnn1122
ORVR]R]RcRcckln00)~~??D(@(@AUAU(V(V*..IDKKL]L]]_ )W<  *~~??DL$@$@JNNSVZVaVaVgVggopr %A< JNN$VWrW   c                 D   U R                   (       a  / S 4$ U R                  nS=pEUR                  (       a  [        UR                  SSS9  UR
                   HM  u  pgUR                  (       d  M  UR                  S;   a  SnU(       d  UnM5  M7  UR                  S;   d  MI  SnUnMO     U(       a  U(       a  [        UR                  SSS9  O.[        U[        5      (       a  [        UR                  S	SS9  / S 4$ UR                  US
9   UR                  U5      nUc  U R                  X5        / U4sS S S 5        $ UR                  (       a  [        UR                  SSS9  U(       a?  U(       d8  UR                  (       d'  UR                  (       d  [        UR                  S5        UR                  (       a  UR!                  U5        UR"                  (       d  [        U[$        5      (       a  UR'                  U5      O/ n	S S S 5        X4$ ! , (       d  f       W	W4$ = f)NFzSDicts should no longer be used as type annotations. Use 'cython.int' etc. directly.r,   r   )r   s   typeT)r,  s   ctypez9Duplicate type declarations found in signature annotationzTTuples cannot be declared as simple tuples of types. Use 'tuple[type1, type2, ...]'.)r  zWStrings should no longer be used for type declarations. Use 'cython.int' etc. directly.zOPython type declaration in signature annotation does not refer to a Python type)untypedr  r  r   r   r	  r  r   r   r^  r/  r  rB  rv   r  rJ  r1  r  r+  r  )
r[   ry   assigned_valuer  explicit_pytypeexplicit_ctyperw   r   r  r  s
             rU   r}  &AnnotationNode.analyse_type_annotation;  s   <<t8OYY
+00%%JNNiqrt)99--::!22&*O)%*
 *ZZ#66%)N!&J  : >
(cklm
I..JNNjrsut8O##n#E!11#6H00A8| FE ++
q! ~x?S?SW_WoWo
ik""88= GQF]F]aklv  yF  bG  bG
==cB  MOI' F* ""+ FE* (""s   	)H<CH
H)r  r  rO   )r^   r_   r`   ra   r   rE  r  rV  r  rB  r}  rb   rY   rW   rU   r6  r6  :  s*     H
 G
4X:/#rW   r6  c                      ^  \ rS rSr% SrS/rSS/rSr\\	S'   Sr
\\   \	S'   \\	S'   Sr\\	S'   S	\S\4U 4S
 jjr\S 5       r\S 5       rS rS rS rU 4S jrS rS rSrU =r$ )AssignmentExpressionNodei9;  z
Also known as a named expression or the walrus operator

Arguments
lhs - NameNode - not stored directly as an attribute of the node
rhs - ExprNode

Attributes
rhs        - ExprNode
assignment - SingleAssignmentNode
r   r  Fr  Nassignment_is_independentr  c                 H   > [         TU ]  " U40 UD6  [        XUSS9U l        g )NT)r  r   r  )rQ   r  r0   r  )r[   r   r  r   r`  rT   s        rU   r  !AssignmentExpressionNode.__init__N;  s)    %%.cDBrW   c                     U R                   b  U R                   R                  $ U R                  R                   R                  $ rO   )r   r   r  rZ   s    rU   r   AssignmentExpressionNode.typeS;  s0    8888== ""'''rW   c                 B    U R                   R                  R                  $ rO   )r  r  rw   rZ   s    rU   target_name$AssignmentExpressionNode.target_nameY;  s    ""'''rW   c                 v    U R                   =(       d    U R                  R                   nUR                  U5      $ rO   )r   r  r   ra  s      rU   r   #AssignmentExpressionNode.infer_type];  s)    hh-$//--~~c""rW   c                 :    U R                   R                  U5        g rO   )r  ry  r   s     rU   ry  -AssignmentExpressionNode.analyse_declarationsa;  s    ,,S1rW   c                    U R                   R                  U5      U l         U R                   R                  nUR                  5       (       dY  UR                  (       a7  [
        R
                  " U R                   R                  5      U l        SU l        OUR                  U5      nU R                  (       dh  [        U5      U l        [        U R                  5      U R                   l        U R                  R                  R                  U5      U R                  l
        U R                  R                  (       a,  U R                  (       a  SU R                   R                  l        U $ r  )r  rV  r   r  r   r&   rL  r  r?  r  r  r   r   r  ra  s      rU   rV  &AssignmentExpressionNode.analyse_typesd;  s     //77<oo!!!!##~~  99T__%8%8915. ((--- ~DH"+DHH"5DOO88<<66s;DHHL 99''D,J,J
 +0DOO'rW   c                 f  > U R                   (       a"  U R                  R                  X5      U l        U $ XR                  R                  R                  :X  GaK  U R                  c   eU R                  R
                  n[        U[        5      (       a  UR
                  nUR                  X5      nXCLa  X@R                  l        U R                  R                  5         [        U R                  R                  [        5      (       a  [        U R                  R                  [        5      (       dr  U R                  R                  R
                  U R                  l        U R                  R                  R
                  R                  U R                  R                  l        U $ [        TU ]	  X5      $ rO   )rL  r   r8  r  r   r  r   r  r  r  r  rQ   )r[   rP  ry   old_rhs_argrhs_argrT   s        rU   r8  "AssignmentExpressionNode.coerce_to;  s)   ))xx))(8DHK**///88''' ((,,K+'788)oo!++H:G)&..0t22LAA *4??+>+>	 J J*.//*=*=*A*ADOO'/3/B/B/F/F/K/KDOO'',w //rW   c                 6    U R                   R                  5       $ rO   )r   r  rZ   s    rU   r  .AssignmentExpressionNode.calculate_result_code;  r  rW   c                 :    U R                   R                  U5        g rO   )r  r  r  s     rU   r  -AssignmentExpressionNode.generate_result_code;  s    //5rW   )r  rL  r   )r^   r_   r`   ra   r  r   r   r  rf  r  r   r+   r   r0   rL  r7  r  r  r   rR  r   ry  rV  r8  r  r  rb   rc   rd   s   @rU   rK  rK  9;  s    
 wH,'KGT"C(	"$$&+t+B B B
 ( (
 ( (#2(T02!6 6rW   rK  c                   B    \ rS rSrS/rSr\R                  rS r	S r
Srg)#FirstArgumentForCriticalSectionNodei;  	name_nodeNc                 `   [        U R                  R                  5      S:  a  [        U R                  S5        g [        U R                  U R                  R                  S   R                  5       S9U l        U R                  R                  U5        U R                  R                  U l	        g )Nr,   zbcritical_section directive can only be applied to a function with one or more positional argumentsr   ri  )
r   	func_noder   r   r   r7  declared_namerd  ry  r   r   s     rU   ry  8FirstArgumentForCriticalSectionNode.analyse_declarations;  s~    t~~""#a'$((  A  B!$((1D1DQ1G1U1U1WX++C0NN''	rW   c                 ^    U R                   (       a  U R                   R                  U5      $ U $ rO   )rd  r]  r   s     rU   r]  7FirstArgumentForCriticalSectionNode.analyse_expressions;  s#    >>>>55c::rW   )rd  r   )r^   r_   r`   ra   r   rd  r   r   r   ry  r]  rb   rY   rW   rU   rc  rc  ;  s%     }HI$$D(rW   rc  rY   r%  r  (2  cythondeclarer  r&   r%   r   os.pathr'   r(   r)   r*   typingr+   Errorsr   r   r   r   r   r   r-   r.   Coder   r	   	LineTabler$   r&  r
   r   r   r/   r0   r   r1   r   r2   r3   r4   r5   r   r   r   r   r   r   r   r   r    r!   r6   r#   r"   r   r   Annotater8   r9   	Debuggingr:   
DebugFlagsr   r   Pythranr;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   r|   r~   r}  rL   r=  r<  rt   rs   ru   c_py_unicode_ptr_typer  cy_pymutex_typecy_pythread_type_lock_typero   r   r   r   r   r   r   r   r   r   r   r   r  r  r  rC  r  r  rs  r1  r   r  r2  r  r3  r4  r'  r)  rB  r7  rJ  rR  rp  r  r  r  r.  r=  rG  rX  rh  r  r  r  r  r  r  r  r~  rt  rq  rp  r@  r-  r,  ra  r  rs  r  rz  r=	  r	  r	  r	
  r
  r
  r&
  rE
  rU
  r{  r  r  r^  r  r  r   r  r  r6  rN  r	  r	  r  r  r  r	  r	  r  r  r  r  r	  rY  r_  rn  r  r  r"  r#  r  r  r  r  r  r  r  r)  r2  r6  r<  rJ  not_invnegr   rP  rN  r  r  r  r  r  r  r  r  r  r  r  r  r"  r#  r%  r   r!  r:  rO  r  rW  rj  r  matmulr  r   ltler  negegtis_r  r  and_truedivfloordivr%  modr$  or_r  rshiftr  xorr  r  r  r  r  r  r'  r+  r8  rH  rM  rg  rp  compilefindall_find_formatting_types	frozenset_safe_bytes_formatsr  r  r  r  r}  r  rx  r~  r  r#  r7  r  r9  r  rH  r  rF  rE  rI  rw  rL  rN  r  r?  r  r  rQ	  r$  r.  r6  rK  rc  rY   rW   rU   <module>r     s     V V v V "06KQ$/5DJY_  %+ 8> OU  	 -3	 >D	 PV	
 #
 06
 BH  '- 5; QW $* =C TZ % 28 JP '- @F  %+ 06 @F KQ W]      	 
 ( ( ( 2 '    -      
    $  ( ;V V V V V $#,
  
   
 : i:--.0g:3346m:../1h:4457n d1124n778B.0q%%|4I  ,/1r&&5I!;!;<)**J,Q,QR4) ."+*:(6.D ":Ut Up0" 0"r
X 
. .0{ 0*; 8 8v8y 8Dy 
?y 
?T/i T/l0'	 0'fBU 	 U p) D; 
/'~ /'p!A. !AH}~ }@#H #FS& S&lX2X X2va(> a(HO(h O(d+J~ +J\# #L#N #<9x 9x> ..x .`E Ex 8e"H e"PZ# Z#F> :> < <S&! S&lF)' F)Rk/ k\O- OdX .n 44~ 4nTX TnA( A(F49 4nd3x d3NAX AD:( :8gx gT	u#X u#pX $5 5*#( #@g#h g#T'#( '#Te X e Pq	H q	t08 0fn#8 n#bX6 X6v[=| [=|9! 9!x'!d '!R'"9 'D+#X +#\h  h V-!h -!`|Ix |I~!,8 !,H+< +<\Z& Z, ,7#/ 7#tG#8 G#T!#8 !#H'#8_ '#T,H ,47H 74_Gh _GD		 	< <<vX vr6H 6>Lx L0Q	 Q"5 5 +"  +F0#j 0#fpCH pCf.} .b,0 , ,, ,&M 6#n #(	 	 $N (( ==				  Zx Zz/h /D)H )&#X #</ /& 
/i /0EY E:k.=I .=d 

 
R98 R9j %	84	FIlh l\	 	/)Z /)dJ @I/ I/V4 4LooO!!(++! 	(++! 	(++	!
 	(++! ! 	(,,! hoo! ! ! 		! 	(

! 	(//! ! !  !!" 	(,,#!$ //			
!)/! 4G* G*T 6
S9 Sl0< 0L <73l 73t
$l 
$QCl QCh/, /|il |i~ 

 7    !  E3g E3P[0l [0|C4H C4Lp( pfG8 GV 





 X Xt
V(Xw V(r^(dG ^(D  &	.8 :| 2| "c*\ c*LK!% K!\B# B#J%#- %#P3L< 3Ll@, @F, 8.(P| (PV4" 4"lC CLEl E8	89 	8H &#x #.p#X p#fs6x s6l( ge  s   1o 
o+*o+