
    ڏDj	                    H   d dl Z  e j                  di dededededededed	ed
edededededededededededededededededededededed ed!ed"ed#ed$ed%ed&ed'ed(ed)e d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d d*lmZ d+d,lmZmZmZmZmZmZmZmZ d+d-lmZmZ d+d.lmZ d+d/lmZ d+d0lmZ d+d1lmZ d+d2lmZm Z  d+d3lm!Z! d+d4l!m"Z"m#Z#m$Z$m%Z%m&Z& d+d5lm'Z' d+d6l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z3m4Z4 d+d7lm(Z( d+d8lm5Z5 d9d:lm6Z6 d+d;l7m8Z8 d+d<lm9Z9 d9d=l:m;Z; d+d>l<m=Z=m>Z> d+d?l?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZN d+d@l!mOZO ePeQfZR G dA dB      ZS eS       ZT e       ZUdC ZVe.e/fdDe.e!jD                  fdEe.e!j                  fdEe.e!j                  fdEe.e!j                  fdEe/e.fdFe/e!j                  fdGe/e!j                  fdGe!jD                  e.fdHe!j                  e.fdHe!j                  e.fdHe!j                  e.fdH eV e!j                               dI eV e!j                               dJiZ^dK Z_dL Z`dM ZaddNZbdO ZcdP ZddQ ZedR ZfdS ZgdT Zh G dU dVe      Zi G dW dXei      Zj G dY dZei      Zk G d[ d\ek      Zl G d] d^el      Zm G d_ d`el      Zn G da dbek      Zo G dc ddeo      Zp G de dfeo      Zq G dg dheo      Zr G di djeo      Zs G dk dleo      Ztdm Zu G dn doeo      Zv G dp dqeo      Zw G dr dsew      Zx G dt duek      Zy G dv dwek      Zz G dx dyek      Z{ G dz d{ei      Z| G d| d}ei      Z} G d~ dei      Z~ G d de~      Z G d dei      Z G d dek      Z G d de~      Z G d dek      Z G d deiej                        Z G d dek      Z G d dei      Z G d de      Z G d dei      Z G d dei      Z G d dei      Z G d dek      Z G d dek      Z G d dei      Z G d de      Z G d de      Z G d de      Z G d de      Z G d dei      Z G d de      Z G d de      Z G d dei      Z G d dei      Z G d de      Z G d dei      Z G d de      Z G d dei      Z G d de      Z G d de      Z G d dei      Z G d de      Z G d de      Z G d de      Z G dĄ dei      Z G dƄ dei      Z G dȄ dei      Z G dʄ dei      Z G d̄ dei      Z G d΄ de      Z G dЄ de      Z G d҄ de~      Z G dԄ de      Z G dք de      Z G d؄ dei      Z G dڄ dei      Z G d܄ dei      Z G dބ dei      Z G d dei      Z G d dei      Z G d dej      Z G d d      Z G d deie      Z G d dei      Z G d dei      Z G d deie      Z G d dei      Z G d dei      Z G d deie      Z G d de      Z G d d      Z G d dei      Z G d dei      Z G d dei      Z G d  de      Z G d de      Z G d de      Z G d de«      Z G d d	ei      Z G d
 deī      Z G d deū      Z G d deū      Z G d deǫ      Z G d dek      Z G d de      Z G d de      Z G d dek      Z̐d Zej                  ej                  ej                  ej                  dZ G d dei      Z G d deӫ      Z G d  d!eӫ      Z G d" d#eӫ      Z G d$ d%eӫ      Z G d& d'eӫ      Z G d( d)eث      Z G d* d+eث      Zڐd, Z G d- d.eث      Zeeeאd/Zݐd0 Z G d1 d2ei      Zߐd3Zd4Zd5Zd6Zd7Z G d8 d9ei      Z G d: d;ei      Z G d< d=e      Z G d> d?e      Z G d@ dAei      Z G dB dCei      Z	 ej                  Zi dEej                  dFej                  dGej                  dHej                  dIej                  dJej                  dKej                  dLej                  dMej                  dNej                  dOej                  dPej                  dQej                  dRej                  dSej                  dTej                  dUej                  ej                  ej                   ej                  edV dW dXZdY Z G dZ d[ei      Z G d\ d]e      Zd^ Z G d_ d`e      Z G da dbe      Z G dc dde      Z	 G de dfe      Z
 G dg dhe      Z G di dje      Z G dk dle      Z G dm dne      Z e	j                  do      j                   Z eh dp      Z G dq dre      Z G ds dte      Z G du dvei      Z G dw dxei      Z G dy dzei      Zd{d|d}d~d~ddd}d~d	Z G d d      Z G d deie      Z G d dee      Zeee	eeeee
eeeeeeedZddZ G d dei      Z G d de      Z  G d de      Z! G d de      Z" G d dej      Z# G d de      Z$ G d de$      Z% G d de      Z& G d de      Z' G d de'      Z( G d de      Z)d Z* G d de      Z+ G d de      Z, G d de      Z- G d de      Z. G d de-      Z/ G d dei      Z0 G d dei      Z1 G d dei      Z2 G d dei      Z3 G d dei      Z4 G d dei      Z5 G d dei      Z6y# e$ r dD ZY w xY w(      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                   (     e Zd ZdZ fdZd Z xZS )NotConstantNc                 t    t         j                  t        |   |       t         _        t         j                  S N)rL   _objsuper__new__)cls	__class__s    ]C:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Compiler/ExprNodes.pyrQ   zNotConstant.__new__C   s,    #$ws3K    c                      y)Nz<NOT CONSTANT> selfs    rT   __repr__zNotConstant.__repr__I   s    rU   )__name__
__module____qualname__rO   rQ   rZ   __classcell__rS   s   @rT   rL   rL   @   s    D  rU   rL   c                 
    | | fS rN   rW   )tps    rT   _type_to_itselfrb   O   s    r6MrU   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                 d    t         j                         }||S |j                  d   rt         fdt        j
                  t        j                  t        j                  t        j                  fD              r6 d   j                  r|S |j                  d   dv r|S d d   j                  z  S |S )Nc_string_encodingc              3   &   K   | ]  }|v  
 y wrN   rW   ).0t
type_tuples     rT   	<genexpr>z&find_coercion_error.<locals>.<genexpr>o   s      ra!z/ r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)rh   defaultenverrs   `   rT   r   r   j   s    

!
!*
-C
{
..,
- rJ,F,F
HcHc,6,L,LjNoNo,q r ra=$$N^^/04EENqt~  @A  uB  uG  uG  G  G
rU   c                 h    t         t        t        t        dj                  | j                  d         S )N)bytes	bytearraystrunicodec_string_type)r   r    r   rm   rn   )rv   s    rT   default_str_typer~   {   s-    #	
 
c#..
)*+rU   c                      | D ]M  }| t        |j                  t        t        f      s&|j                  dk  s6t	        |j
                  dd       O y)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     rT   check_negative_indicesr      sR    
  *<z$*>*>eM!#DHH '(*	*rU   c                 |   |j                   sY||j                  |       }|t        u r>|j                  r2t	        |j                        dk(  r	 |j                  d   j
                  }|j                   r=|;|j                         r+	 |j                  |j                     }|j                  |       S |j                   s|j                  r;|j                  D cg c]  }|j                  r| }}t	        |      t	        |j                        k  }|D ch c]+  }|j                  rt!        | |      n|j                  |       - }}d |v ry |D ch c](  }|j"                  r|j$                  r|j$                  n|* }}t	        |      dk(  rx|j'                         }|r|j"                  s|j$                  }|S |sH|t(        t*        fv r:t-        d |D              r(|t(        u rt.        j0                  nt.        j2                  }|S y # t        $ r Y w xY w# t        t        t        f$ r Y |w xY wc c}w c c}w c c}w )Nr,   r   c              3   X   K   | ]"  }|j                   xr |j                          $ y wrN   )is_string_literalcan_coerce_to_char_literalrf   args     rT   ri   z+infer_sequence_item_type.<locals>.<genexpr>   s(     oVYs,,Q1O1O1QQos   (*)is_sequence_constructor
infer_typer   cf_statelenrhsAttributeErrorhas_constant_resultargsr   
ValueError	TypeError
IndexErroris_set_literalis_none
is_starredinfer_sequence_item_typers   equivalent_typepopr   r   allr   c_py_ucs4_typec_uchar_type)	rv   seq_node
index_nodeseq_typeitemargs_without_nonehas_none
item_types	item_types	            rT   r   r      s+   ++**3/Hz!  S):):%;q%@'00377H ''!j&D&D&F,}}Z%?%?@ s++''8+B+B.6mmPd4<<TPP()C,>> *
 48??$S$/X[H\\

 
 : (
 *3)>)>9C\C\I%%bkk

 
 z?a"(I	 5 5%55	
 	 )j/I"Io]noo=F,=V
 9 9\f\s\sIK &  	:6  Q

s<   H H H/(H/0H4-H9	HHH,+H,c           	      ,   |D cg c]  }|t         dt        d      fn|j                  r<t        |j                  |j                  r|j
                  ndg|j                  z         n|j                  r7t        |j                  |j                  |j                  |j                  f      nQ|j                         r@|j                  |j                  |j                  t         u rt        |j                        ndfnd }}d|v ry| t        |      fS c c}w )a  
    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       rT   r   r      s   $ 
  /3ltDz*gk  hD  hD^DIIDOO(8(8QU'VY]YbYb'bcNRmm^DII

DIItyy'IJ W[VnVnVp ii--,0II,Gd4''(TS	
I 
 yuY'''
s   C8Dc                 *   | y| j                   t        j                  k(  r| j                  dk(  ry| j                   j                  r3d| j
                  j                  d| j
                  j                  ddfS d| j
                  j                  z  dfS )	N)__Pyx_CppExn2PyErr();F*)r   TzLtry { throw; } catch(const std::exception& exn) {PyErr_SetString((PyObject*)z6, exn.what());} catch(...) { PyErr_SetNone((PyObject*)z); }Fzc%s(); if (!PyErr_Occurred())PyErr_SetString(PyExc_RuntimeError, "Error converting c++ exception.");)r   r   c_char_typevaluers   entrycname)exception_values    rT   get_exception_handlerr      s    -


*"8"8
8##s*,				)	)
  %%++%%++	-
  	2  %%++-  	rU   c                     |ru|rQ| j                   j                  t        j                  dd             | j	                  | j                  d|             y | j	                  | j                  d|             y y )NErrOccurredWithGILExceptions.c__Pyx_ErrOccurredWithGIL()PyErr_Occurred())globalstateuse_utility_coder   load_cachedputlnerror_goto_if)codecheck_py_exceptionr   nogils       rT   maybe_check_py_errorr      sg    --''(<nMOJJt))*FLMJJt))*<cBC rU   c                    t        |      \  }}| j                  d       | j                  d|z         |r!| j                  | j                  ||             t        | |||       | j                  d       |r| j	                  d       | j                  |       |r| j                          | j                  | j                  |             | j                  d       y )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           rT   translate_cpp_exceptionr      s    -B?-S**JJwJJtf}

4**9c:;13>JJ T2JJ!"$$&JJts#$JJsOrU   c                     | j                   dk(  sJ | j                  y| j                  j                  ryt        | j                  t              r| j                  j
                  dk(  ryy)N+TFr   )exception_checkr   is_namer   CharNoder   )r   s    rT   needs_cpp_exception_conversionr     s`    3&&# ##$&&1d6J6J6P6PTW6WrU   c                 
   t        |      \  }}	t        |      \  }
}| j                  d       | j                  |j                  d|z               t        | |	||       | j                  d       | j                  d|z         t        | |||       | j                  d       |r| j	                  d       | j                  |
       |r| j                          | j                  | j                  |             | j                  d       | j                  d       |r| j	                  d       | j                  |       |r| j                          | j                  | j                  |             | j                  d       y )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               rT   translate_double_cpp_exceptionr   !  sA   '<['I$N$5J>5Z22JJwJJx(()Ch)NOP/e<JJwJJ)H456UCJJ T2JJ$%$$&JJts#$JJsOJJ T2JJ~$$&JJts#$JJsOrU   c                      e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZeZe jB                  jD                  dk(  r e# e$jJ                  d            Z&ne#d        Z&d Z'd	 Z(d
 Z)d Z*d Z+d Z,d Z-d^dZ.d Z/d Z0d_dZ1d Z2d_dZ3d Z4d Z5d Z6d Z7d Z8d Z9d Z:d Z;de<fdZ=d Z>d  Z?d! Z@d" ZAd# ZBd$ ZCd% ZDd& ZEd' ZFd( ZGd`d)ZHd* ZId+ ZJd, ZKd- ZLd. ZMd/ ZNd0 ZOd1 ZPd2 ZQd3 ZRd4 ZSd5 ZTd6 ZUd7 ZVd8 ZWd9 ZXd: ZYd; ZZd< Z[d= Z\d> Z]d? Z^d@ Z_dA Z`dB Za	 	 dadCZbd^dDZcdE ZddF ZedG ZfdH ZgdI Zh	 	 dbdJZidK ZjdL ZkdM ZldN ZmdO ZndP ZodcdQZpdR ZqdS ZrdT ZsdU ZtdV ZudW ZvdX ZwdY ZxdZ Zyddd[Zze{d\        Z|d] Z}y)eExprNodeNTFcpythonsubexprs)fgetc                     | j                   S rN   )r   rX   s    rT   child_attrszExprNode.child_attrs  s    == rU   c                      y rN   rW   rY   rv   s     rT   analyse_annotationszExprNode.analyse_annotations      rU   c                 d    t        |d       t        | j                  j                  d|d      )Nznot implemented.z not implemented)r:   r   rS   r[   )rY   method_names     rT   not_implementedzExprNode.not_implemented  s.    &78'+~~'>'>LN 	NrU   c                      yNr   rW   rX   s    rT   	is_lvaluezExprNode.is_lvalue      rU   c                 T    | j                         xr | j                  j                   S rN   )r  r   is_memoryviewslicerX   s    rT   is_addressablezExprNode.is_addressable  s!    ~~D		(D(D$DDrU   c                 J    | j                   j                  xr | j                  S rN   )r   rs   is_temprX   s    rT   is_ephemeralzExprNode.is_ephemeral  s     yy$$55rU   c                     g }| j                   D ]E  }t        | |      }|t        |      t        u r|j	                  |       5|j                  |       G |S rN   )r   getattrr   listextendappend)rY   r   rt   r   s       rT   subexpr_nodeszExprNode.subexpr_nodes  sY     MM 	'D4&D:%LL&LL&	' rU   c                 R    | j                   r| j                  S | j                         S rN   )r  	temp_codecalculate_result_coderX   s    rT   resultzExprNode.result  s$    <<
 >>!--//rU   c                     |r:| j                   r,| j                  j                  r| j                  j                  r|S d| _        dj                  |rd|      S d|      S )NTz{}({})__PYX_STD_MOVE_IF_SUPPORTEDz	std::move)r  r   is_cpp_classis_referencehas_temp_movedformat)rY   r  optionals      rT   _make_move_result_rhszExprNode._make_move_result_rhs  sP    T\\dii.D.DTYYMcMcM"<[abbk[abbrU   c                 D    | j                  | j                         d      S )NTr  )r  r  rX   s    rT   move_result_rhszExprNode.move_result_rhs  s    ))$++-$)GGrU   c                     | j                  |      }|j                  s:|j                  s.|j                  xr | j                  }| j                  ||       }|S )Nr  )	result_asr  needs_refcountingis_rvalue_referencer  r  )rY   r   r  requires_moves       rT   move_result_rhs_aszExprNode.move_result_rhs_as  sR    %!!T%;%; 44EM//]AR/SFrU   c                 N    t        |       rt        |       S |J t        | |      S rN   )rE   r;   )rY   type_s     rT   pythran_resultzExprNode.pythran_result%  s+    ,T2d##  $&&rU   c                      y)zZ
        Subtypes may return False here if result temp allocation can be skipped.
        TrW   rX   s    rT   is_c_result_requiredzExprNode.is_c_result_required,  s     rU   c                     | j                   r>| j                  j                  r(|t        k7  rt	        |t        | j                               S t	        || j                         | j                               S rN   )r  r   rs   r   r2   r  ctyperY   r   s     rT   r  zExprNode.result_as2  sO    LLTYY22& D.$++-@@djjlDKKM::rU   c                 ,    | j                  t              S rN   )r  r   rX   s    rT   r   zExprNode.py_result;  s    ~~n--rU   c                 6    | j                   xs | j                  S rN   )result_ctyper   rX   s    rT   r*  zExprNode.ctype?  s       -DII-rU   c                      y rN   rW   rX   s    rT   get_constant_c_result_codez#ExprNode.get_constant_c_result_codeD  s     rU   c                      y rN   rW   rX   s    rT   calculate_constant_resultz"ExprNode.calculate_constant_resultO  s     	rU   c                 N    | j                   t        uxr | j                   t        uS rN   r   constant_value_not_setnot_a_constantrX   s    rT   r   zExprNode.has_constant_result[  )    ##+AA :##>9	:rU   c                 0    t        | j                  d       y )NzInvalid compile-time expressionr   r   rY   denvs     rT   compile_time_valuezExprNode.compile_time_value_  s    dhh9:rU   c                 d    t        | j                  d|j                  j                  d|       y )Nz"Error in compile-time expression: : )r   r   rS   r[   )rY   es     rT   compile_time_value_errorz!ExprNode.compile_time_value_errorc  s$    dhhKK  !% 	&rU   c                     | j                         }|t        | j                  d       y| j                         r| j                  n|}t
        j                  j                  ||| j                        S )z
        Returns a PyrexTypes.CFuncType.ExceptionValue (or None)

        The python_value attribute of the result can be either a Python constant
        or a string for types that can't be represented by a Python constant
        (e.g. enums)
        Nz Exception value must be constant)	r0  r   r   r   r   r   	CFuncTypeExceptionValuer   )rY   rv   c_resultr   s       rT   as_exception_valuezExprNode.as_exception_valueg  sc     224$((>? -1,D,D,FD((H	##229h		RRrU   returnc                 2   | j                   ry| j                  ryt        | d      r| j                  y| j                  j                  ry| j                  j
                  j                  r-| j                  j                  s| j                  j                  syy)N&__Pyx_ReferenceSharing_SharedReference)__Pyx_ReferenceSharing_OwnStrongReferencer   '__Pyx_ReferenceSharing_FunctionArgument)	in_parallel_blockr  hasattrr   is_argscopeis_local_scope
in_closurefrom_closurerX   s    rT   may_be_unsafe_sharedzExprNode.may_be_unsafe_sharedy  sv     !!;<< ?tW%);;::<JJ++ JJ))$**2I2I>7rU   c                 0    t        | j                  d       y )NzCannot assign to or delete thisr9  r   s     rT   analyse_target_declarationz#ExprNode.analyse_target_declaration  s    dhh9:rU   c                 0    t        | j                  d       y )Nz=Cannot use anything except a name in an assignment expressionr9  r   s     rT   0analyse_assignment_expression_target_declarationz9ExprNode.analyse_assignment_expression_target_declaration  s    dhhWXrU   c                 H    | j                  |      }|j                          |S rN   )analyse_typescheck_constrY   rv   r   s      rT   analyse_const_expressionz!ExprNode.analyse_const_expression  s%    
 !!#&rU   c                 $    | j                  |      S rN   rX  r   s     rT   analyse_expressionszExprNode.analyse_expressions  s     !!#&&rU   c                 $    | j                  |      S rN   )analyse_target_typesrY   rv   r   s      rT   analyse_target_expressionz"ExprNode.analyse_target_expression  s     ((--rU   c                 J    | j                  |      }|j                  |      }|S rN   )rX  coerce_to_boolean)rY   rv   r   bools       rT   analyse_boolean_expressionz#ExprNode.analyse_boolean_expression  s'    !!#&%%c*rU   c                 d    | j                  |      }|j                  |      j                  |      S rN   )rX  rd  coerce_to_simplerZ  s      rT   analyse_temp_boolean_expressionz(ExprNode.analyse_temp_boolean_expression  s0     !!#&%%c*;;C@@rU   c                     t        | dd       yt        | j                         D cg c]  }|j                  |       c}d      S c c}w )Nr   rW   )r
  sumr  type_dependenciesrZ  s      rT   rl  zExprNode.type_dependencies  sF     4&2D<N<N<PQDD**3/QSUVVQs   Ac                 ~    t        | dd       }||S t        | dd       }||j                  S | j                  d       y )Nr   r   r   )r
  r   r   rY   rv   r   r   s       rT   r   zExprNode.infer_type  sI    
 tVT*Kgt,::\*rU   c                     | j                   xs< | j                  xs. | j                  j                  xs | j                  j                  S rN   )r   r  r   is_arrayis_cfunctionrX   s    rT   nonlocally_immutablezExprNode.nonlocally_immutable  s5     ^$,,^$))2D2D^		H^H^^rU   c                 n    t        | j                  | t        j                  | j                  |            S )z
        Return a node that represents the (type) result of an indexing operation,
        e.g. for tuple unpacking or iteration.
        baseindex)	IndexNoder   IntNodefor_sizerY   rv  s     rT   inferable_item_nodezExprNode.inferable_item_node  s(    
 G4D4DTXXu4UVVrU   c                      y rN   rW   r   s     rT   analyse_as_modulezExprNode.analyse_as_module       rU   c                      y rN   rW   r   s     rT   analyse_as_typezExprNode.analyse_as_type  r~  rU   c                     | j                  |      }|r4|j                  r(|j                  r	 |j                  |j                        S |r"|j                  rt        | j                  d       |S # t        $ r Y 1w xY w)NzType is not specific)r  is_fusedfused_to_specific
specializeKeyErrorr   r   )rY   rv   r   s      rT   analyse_as_specialized_typez$ExprNode.analyse_as_specialized_type  sp    ##C(DMMc&;&;s'<'<== DMM$((23	  s   A. .	A:9A:c                      y rN   rW   r   s     rT   analyse_as_extension_typez"ExprNode.analyse_as_extension_type  r~  rU   c                 &    | j                  d       y )NrX  r   r   s     rT   rX  zExprNode.analyse_types   s    _-rU   c                 $    | j                  |      S rN   r]  r   s     rT   r`  zExprNode.analyse_target_types  s    !!#&&rU   c                 l    | j                   r(| j                   j                  r| j                          y y y rN   )r   rs   	gil_errorr   s     rT   nogil_checkzExprNode.nogil_check  s(     99..NN /9rU   c                 x    |j                   r.| j                  j                  rt        | j                  d       y y y )Nz3Assignment of Python object not allowed without gil)r   r   rs   r   r   r   s     rT   gil_assignment_checkzExprNode.gil_assignment_check  s+    99..$((QR /9rU   c                 $    | j                          yNF)	not_constrX   s    rT   rY  zExprNode.check_const  s    rU   c                 0    t        | j                  d       y )Nz$Not allowed in a constant expressionr9  rX   s    rT   r  zExprNode.not_const  s    dhh>?rU   c                 $    | j                          yr  )addr_not_constrX   s    rT   check_const_addrzExprNode.check_const_addr  s    rU   c                 0    t        | j                  d       y )NzAddress is not constantr9  rX   s    rT   r  zExprNode.addr_not_const  s    dhh12rU   c                     | j                   S rN   r  rX   s    rT   result_in_tempzExprNode.result_in_temp!  s     ||rU   c                 "    | j                         S rN   r  rX   s    rT   target_codezExprNode.target_code*  s    ))++rU   c                 &    | j                  d       y )Nr  r  rX   s    rT   r  zExprNode.calculate_result_code.  s    45rU   c                    | j                   r/t        d| j                  j                  d| j                        | j
                  }|j                  sz|j                  rt        j                  }n0| j                  s$|j                  s| j                         sd | _         y |j                  j                  || j                        | _         y d | _         y )Nz!Temp allocated multiple times in r>  
manage_ref)r  RuntimeErrorrS   r[   r   r   is_voidrs   r   r   result_is_usedr  r(  	funcstateallocate_tempuse_managed_ref)rY   r   r   s      rT   allocate_temp_resultzExprNode.allocate_temp_result5  s    >>DNNLcLceiememnooyy||!00))T-D-DHaHaHc!%!^^99!5!5 : 7DN "DNrU   c                 (   | j                   s| j                  sy | j                  rKt        j                  j                  | j                  d   j                               f| j                  dd  z   nd}| j                  r2t        d| j                  d| j                  j                  d|      t        d| j                  j                  d|      |j                  j                  | j                          | j                   | _        d | _         y )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  rS   r[   r  release_temp)rY   r   r   s      rT   release_temp_resultzExprNode.release_temp_resultD  s    ~~&&W[W_W_277##DHHQK$?$?$ABDtxxPQPR|SejC}}"MM4>>#:#:C$A B B #NN++S$2 3 3##DNN3rU   c                     | j                         s/|j                  | j                         | j                                yy)z|
        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*  rY   r   s     rT   make_owned_referencezExprNode.make_owned_referenceV  s/    
 ""$OODKKM4::<8 %rU   c                     | j                         s8|j                  | j                         | j                  | j                          yy)zJ
        Make sure we own the reference to this memoryview slice.
        have_gilN)r  put_incref_memoryviewslicer  r   in_nogil_contextr  s     rT   make_owned_memoryviewslicez#ExprNode.make_owned_memoryviewslice^  sC    
 ""$++DKKM4999=9N9N5N , P %rU   c                 r   | j                  |       |j                  | j                         | j                  r| j	                  |       | j                  |       | j                  rQ| j                  j                  s:| j                  j                  s#| j                  |       | j                  |       y y y y rN   ) generate_subexpr_evaluation_codemark_posr   r  r  generate_result_coder   	is_stringis_pyunicode_ptrgenerate_subexpr_disposal_codefree_subexpr_tempsr  s     rT   generate_evaluation_codez!ExprNode.generate_evaluation_codeg  s     	--d3dhh<<%%d+!!$'<<!4!4		8R8R //5##D)	 9S!4<rU   c                 P    | j                         D ]  }|j                  |        y rN   )r  r  rY   r   r   s      rT   r  z)ExprNode.generate_subexpr_evaluation_codex  s(    &&( 	0D))$/	0rU   c                 &    | j                  d       y )Nr  r  r  s     rT   r  zExprNode.generate_result_code|  s    34rU   c                    | j                   r/|j                  j                  t        j                  dd             | j
                  r| j                  j                  s| j                  j                  r"| j                  |       | j                  |       | j                         r<|j                  | j                         | j                         | j                          y y | j                  |       y )NMoveIfSupportedCppSupport.cppr  )r  r   r   r   r   r  r   r  r  r  r  r  put_decref_clearr*  r  r  s     rT   generate_disposal_codezExprNode.generate_disposal_code  s    --++,=?OPR<<yy""dii&@&@33D9''-{{}%%dkkmTZZ\595J5J1J & L 
 //5rU   c                 P    | j                         D ]  }|j                  |        y rN   )r  r  r  s      rT   r  z'ExprNode.generate_subexpr_disposal_code  s*     &&( 	.D''-	.rU   c                 ~   | j                   r| j                  j                  s| j                  j                  r#| j	                  |       | j                  |       n| j                  j                  r#|j                  d| j                         z         nZ| j                  j                  rD|j                  d| j                         z         |j                  d| j                         z         | j                  r0|j                  j                  t        j                  dd             y y | j	                  |       y )N%s = 0;z%s.memview = NULL;z%s.data = NULL;r  r  )r  r   r  r  r  r  rs   r   r  r  r  r   r   r   r   r  s     rT   generate_post_assignment_codez&ExprNode.generate_post_assignment_code  s    <<yy""dii&@&@33D9''-&&

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

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

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

5rU   c                 `    |j                  | j                         | j                                y rN   )put_giverefr  r*  r  s     rT   generate_giverefzExprNode.generate_giveref  r  rU   c                 `    |j                  | j                         | j                                y rN   )put_xgiverefr  r*  r  s     rT   generate_xgiverefzExprNode.generate_xgiveref  s    $++-6rU   c                 P    | j                         D ]  }|j                  |        y rN   )r  annotater  s      rT   r  zExprNode.annotate  s&    &&( 	 DMM$	 rU   c                    | }| j                   }| j                  ||      r| S |j                  }|r|j                  s|j                  }|j                  r|j
                  }|j                  s|j                  r|j                  r|j                  s|j                  r|j                  j                  ri|j                  }|j                         D ]J  }|j                  |      s||_         |j                   j                  |_        d|j                  _        | c S  |j                  rt        | j                  d       n0|j                   r|j                  r| S t        | j                  d       t"        | _         | S | j$                  4t'        | j                  d| j$                        }|j)                  ||       |j*                  ruddlm} |j                   j*                  s|j                   j0                  rt3        |||      }|S |j                   j4                  r(t6        j9                  ||      j)                  ||      }|S |j:                  st        | j                  d|d	       |S |j                   j<                  rd|_        |j                   j?                  || j@                  | jB                  
      s}|j                   jD                  j                  |jD                        rd}	|j                   |f}
n$d}	|j                   jD                  |jD                  f}
t        | j                  |	|
z         |S |j0                  r|jF                  r	 |S |jH                  'tK        |j                        j)                  ||      }|S |j                   j0                  r*|j                   jM                  |      sptO        |||      }|S |tP        u r#|j                   jR                  rtU        ||      }ntW        |||      }|j                   jM                  |      stO        |||      }|S tY        |      rt[        |j                         r|S tY        |j                         rt[        |      r|S tW        |||      }|S |j                   j0                  r6|r%|j\                  rt_        | j                  d|z         ta        |||      }|S |jb                  r%||k7  r |je                  |      rtg        |||      }|S |th        jj                  u r%||k7  r |je                  |      stm        |||      }|S |j                   |k(  sCto        |j                         to        |      k(  s"|je                  |      s| jq                  |       |S )NTzType is not specializedz/Cannot coerce to a type that is not specialized )rt   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  rq  is_ptr	base_type"get_all_specialized_function_typessame_asr   usedr   r   is_null_ptrr3   coercion_typeNameNode	coerce_tor  r  r  rs   CoerceToMemViewSliceNoderp  CythonArrayNodefrom_carrayis_errorwritable_neededconforms_tois_memview_broadcastis_memview_copy_assignmentdtyper   r   NoneNode
subtype_ofPyTypeTestNoder   is_intCoerceIntToBytesNodeCoerceToPyTypeNoder>   r<   r  r   CoerceFromPyTypeNode
is_complexassignable_fromCoerceToComplexNoder   soft_complex_typecoerce_from_soft_complexr{   fail_assignment)rY   dst_typerv   srcsrc_typeused_as_reference	signaturer   r  msgtups              rT   r  zExprNode.coerce_to  s     99((37K$11X%:%:--H##,,H 1 1 %%h.?.?OO(:(:(G(G#--!)!L!L!N $I ((2#,$'HHNN	)-		#$   dhh 9:%%(//dhh QR"DIK)DHH2D4F4FGDNN8S)&&$88..88''23#FCR 
Q XX&&)55c3?II(TWXCN 
M "**$((FNPRJ 
E 88++/3H,xx++H@Y@Y484S4S , Uxx~~--hnn=S!hh0M!hhnnhnn<$((C#I.n 
k !!{{d 
c $$,sww'11(C@` 
_ %%xx**84(h<CX 
U z)chhoo.sC8C,S#HEC
 xx**84(h<CB 
A X&+DSXX+NJSXX&(2 
$S#H=C. 
- XX!! X%:%:HHjmuuw 'xc:C" 
! !!h&**84%c8S9C 
 *666h&..x8*3#>C 
 HH(CMS],JhNfNfgoNp$$X.
rU   c                    t        | d      r| j                  j                  nd }| j                  j                  rd| j                  j                          dnd}|j                  rd|j                          dnd}|j                  | j                  |      }t        | j                  d| j                   d| d| d| |rdnd | 
       y )	Nr   z (alias of '')r  zCannot assign type ''z to 'r   )	rL  r   rt   r   
is_typedefresolveassignment_failure_extra_infor   r   )rY   r"  src_namesrc_resolveddst_resolvedextra_diagnosticss         rT   r!  zExprNode.fail_assignmento  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	
rU   c                     |r|sd}t        | j                  |f||      }|'t        | j                  || j                  |dz         y|r| j	                  |       yy)Nz)Cannot assign type '%(FROM)s' to '%(TO)s')FROMTOTF)r   r   r   r   r!  )rY   r"  rv   failru   messages         rT   r  z!ExprNode.check_for_coercion_errorz  s_    AG%tyy(&;WcJ$((Gtyy&IIJ  *rU   c                 B    | j                  t        j                  |      S rN   )r  r   r   r   s     rT   coerce_to_pyobjectzExprNode.coerce_to_pyobject  s    ~~j77==rU   c           
         | j                         r,t        | j                        }t        | j                  |      S | j
                  }|j                  s|j                  r| S |t        j                  u r| S |j                  s$|j                  s|j                  s|j                  rt        | |      S |j                  rw|j                   rk|j                   j#                  d      rPt%        | j                  t'        | j                  | t)        j*                  d            g       j-                  |      S |j.                  r/t1        |j2                        dk(  }t        | j                  |      S t5        | j                  d|z         | S )Nr   zoperator bool)obj	attributefunctionr   r   z%Type '%s' not acceptable as a boolean)r   re  r   BoolNoder   r   is_enumr  r   c_bint_typers   r  r  is_floatCoerceToBooleanNoder  rN  lookupSimpleCallNodeAttributeNoder
   EncodedStringrX  	is_ctupler   
componentsr   )rY   rv   
bool_valuer   s       rT   rd  zExprNode.coerce_to_boolean  s/   
 ##%d223JDHHJ77yy<<4==KZ+++Kt}}&tS114::$**2C2CO2T!&HH$.2N2N2_a	 's+	,
 ^^T__-2JDHHJ77$((CdJKKrU   c                 r    | j                   j                  r| S | j                  t        j                  |      S rN   )r   r  r  r   c_py_ssize_t_typer   s     rT   coerce_to_indexzExprNode.coerce_to_index  s+    yy''t^T^^J<X<XZ]-^^rU   c                 >    | j                         r| S t        | |      S rN   )r  CoerceToTempNoder   s     rT   coerce_to_tempzExprNode.coerce_to_temp  s      K#D#..rU   c                 H    | j                         r| S | j                  |      S rN   )	is_simplerQ  r   s     rT   rh  zExprNode.coerce_to_simple  s"    >>K&&s++rU   c                 "    | j                         S rN   )r  rX   s    rT   rS  zExprNode.is_simple  s    
 ""$$rU   c                 B    	 | j                         S # t        $ r Y yw xY wr  )rS  	ExceptionrX   s    rT   try_is_simplezExprNode.try_is_simple  s&    	>>## 		s    	c                     | j                   r-| j                   j                  s| j                   j                  sy| j                         r| j                  d uS yNFT)r   rs   r  r   r   rX   s    rT   may_be_nonezExprNode.may_be_none  sE    99dii33"ii::##%''t33rU   c                      y rN   rW   rX   s    rT   as_cython_attributezExprNode.as_cython_attribute      rU   c                 B    | j                         rt        | |||      S | S rN   )rZ  NoneCheckNode)rY   r7  r   format_argss       rT   as_none_safe_nodezExprNode.as_none_safe_node  s&      ug{CCKrU   c                     dj                         }|D ]  }||v r	 t        ||      }|||<     | |j                  fi |S # t        $ r Y :w xY w)zInstantiate 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   )rR   r   kwargs
attributes	attr_namer   s         rT   	from_nodezExprNode.from_node  st    
 INNP
# 	*IF"*i0 %*y!	* 488&v&&	 " s   A	AAc                      y)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.
        NrW   rX   s    rT   !get_known_standard_library_importz*ExprNode.get_known_standard_library_import  s     rU   FrN   r   FNN)FTFN)PyExc_TypeErrorrW   )~r[   r\   r]   r.  r   
annotationr  r  r  r  is_numpy_attributegenerator_arg_tagrK  r   is_dict_literalr   r   is_attributeis_subscriptr   is_buffer_accessis_memview_indexis_memview_slicer  r  r  r  	is_targetr   is_annotationr5  r   r*   implementationrt   propertyr   
attrgetterr   r   r   r  r  r  r  r  r  r  r#  r&  r(  r  r   r*  r0  r2  r   r<  r@  rE  r{   rR  rT  rV  r[  r^  rb  rf  ri  rl  r   rr  r{  r}  r  r  r  rX  r`  r  r  rY  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  r9  rd  rN  rQ  rh  rS  rW  rZ  r\  ra  classmethodrg  ri  rW   rU   rT   r   r   >  s   " LDJIHONf $ONLLH !&GNIJM,O
)+$7H$7$7
$CD		! 
	!N
E60cH';..
	
:;&S$8c 82;Y
'.	AW+_
W


.'S@3
,6"$9P*"056 .6$ INGK*!
>? 16/3=667
 IV	

>:_/,% ' ' rU   r   c                        e Zd ZdZdgZdZ fdZed        Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Z xZS )_TempModifierNodez[Base class for nodes that inherit the result of their temp argument and can modify it.
    r   Fc                 (    t         |   ||       y N)r   )rP   __init__rY   r   r   rS   s      rT   r  z_TempModifierNode.__init__  s    #&rU   c                 .    | j                   j                  S rN   r   r   rX   s    rT   r   z_TempModifierNode.type      xx}}rU   c                 8    | j                   j                  |      S rN   r   r   r   s     rT   r   z_TempModifierNode.infer_type      xx""3''rU   c                 F    | j                   j                  |      | _         | S rN   )r   rX  r   s     rT   rX  z_TempModifierNode.analyse_types  s    88))#.rU   c                 6    | j                   j                         S rN   )r   r2  rX   s    rT   r2  z+_TempModifierNode.calculate_constant_result  s    xx1133rU   c                 6    | j                   j                         S rN   r   rZ  rX   s    rT   rZ  z_TempModifierNode.may_be_none      xx##%%rU   c                 6    | j                   j                         S rN   r   rS  rX   s    rT   rS  z_TempModifierNode.is_simple      xx!!##rU   c                 6    | j                   j                         S rN   r   r  rX   s    rT   r  z _TempModifierNode.result_in_temp      xx&&((rU   c                 6    | j                   j                         S rN   r   rr  rX   s    rT   rr  z&_TempModifierNode.nonlocally_immutable      xx,,..rU   c                 6    | j                   j                         S rN   r   r  rX   s    rT   r  z'_TempModifierNode.calculate_result_code      xx  rU   c                      y rN   rW   r  s     rT   r  z&_TempModifierNode.generate_result_code  r   rU   c                 :    | j                   j                  |       y rN   r   r  r  s     rT   r  z/_TempModifierNode.generate_post_assignment_code      ..t4rU   c                 8    | j                   j                  |      S rN   )r   r  r  s     rT   r  z&_TempModifierNode.allocate_temp_result   s    xx,,T22rU   c                 :    | j                   j                  |       y rN   r   r  r  s     rT   r  z_TempModifierNode.free_temps#      D!rU   )r[   r\   r]   __doc__r   r  r  r{  r   r   rX  r2  rZ  rS  r  rr  r  r  r  r  r  r^   r_   s   @rT   r  r    si    wHG'  (4&$)/!53"rU   r  c                       e Zd Zg Zd Zd Zy)AtomicExprNodec                      y rN   rW   r  s     rT   r  z/AtomicExprNode.generate_subexpr_evaluation_code4  r   rU   c                      y rN   rW   r  s     rT   r  z-AtomicExprNode.generate_subexpr_disposal_code6  r   rU   N)r[   r\   r]   r   r  r  rW   rU   rT   r  r  -  s     HrU   r  c                   6    e Zd ZdZeZdZd Zd Zd Z	d Z
d Zy)PyConstNoder,   Nc                      yNr,   rW   rX   s    rT   rS  zPyConstNode.is_simpleA  r  rU   c                      yr  rW   rX   s    rT   rZ  zPyConstNode.may_be_noneD      rU   c                     | S rN   rW   r   s     rT   rX  zPyConstNode.analyse_typesG      rU   c                     | j                   S rN   r;  rX   s    rT   r  z!PyConstNode.calculate_result_codeJ      zzrU   c                      y rN   rW   r  s     rT   r  z PyConstNode.generate_result_codeM  r   rU   )r[   r\   r]   r   r   r   r  rS  rZ  rX  r  r  rW   rU   rT   r  r  :  s,     JDKrU   r  c                   6     e Zd ZdZdZdZd Zd Z fdZ xZ	S )r  r,   Py_NoneNc                      y rN   rW   r:  s     rT   r<  zNoneNode.compile_time_valueY  r]  rU   c                      yNTrW   rX   s    rT   rZ  zNoneNode.may_be_none\  r]  rU   c                     |j                   s1|j                  s%|j                  st        | j                  d|z         t
        |   ||      S )NzCannot assign None to %s)rs   r  r  r   r   rP   r  rY   r"  rv   rS   s      rT   r  zNoneNode.coerce_to_  sB    $$(C(CxGXGX$((6ABw 3//rU   )
r[   r\   r]   r   r   r   r<  rZ  r  r^   r_   s   @rT   r  r  Q  s(     GEO0 0rU   r  c                       e Zd ZdZeZd Zy)EllipsisNodePy_Ellipsisc                     t         S rN   )Ellipsisr:  s     rT   r<  zEllipsisNode.compile_time_valuem  s    rU   N)r[   r\   r]   r   r  r   r<  rW   rU   rT   r  r  f  s     EOrU   r  c                   X    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zeefd       Zy)	ConstNoder,   Nc                      yr  rW   rX   s    rT   rS  zConstNode.is_simpley  r  rU   c                      yr  rW   rX   s    rT   rr  zConstNode.nonlocally_immutable|  r  rU   c                      yr  rW   rX   s    rT   rZ  zConstNode.may_be_none  r  rU   c                     | S rN   rW   r   s     rT   rX  zConstNode.analyse_types  r  rU   c                      yr  rW   rX   s    rT   rY  zConstNode.check_const  r]  rU   c                 "    | j                         S rN   r  rX   s    rT   r0  z$ConstNode.get_constant_c_result_code  s    ))++rU   c                 ,    t        | j                        S rN   )r{   r   rX   s    rT   r  zConstNode.calculate_result_code      4::rU   c                      y rN   rW   r  s     rT   r  zConstNode.generate_result_code  r   rU   c                 l   t         }|t        j                  u s|dk(  s|dk(  r|j                  rt	        |       S |j
                  st        j                  rt        }n0|j                  rt        }n|t        u rt        }n|t        u rt        }|j                  |u r || ||      }|S  || |||      }|S )NNULLr   r   r   r   r   r   )r  r   c_null_ptr_typer  NullNoder  rB  rx  rC  	FloatNoder   	BytesNoder   UnicodeNoder   )r   r   r   r   rR   r  s         rT   for_typezConstNode.for_type  s    :---&EQJDKKC= [[J22 C]]CZC\!C88tE?KF  EoVFrU   )r[   r\   r]   r   r  rS  rr  rZ  rX  rY  r0  r  r  staticmethodr5  r  rW   rU   rT   r  r  q  sM    
 JK, 3I  rU   r  c                   b     e Zd Zej                  Zd	def fdZd Zd Z	d Z
d Zd Zd Z xZS )
r@  r   c                     |du s|du sJ t        |             t        | 	  |||       |0|| j                  ur!|t        j
                  u sJ |       || _        y y y )NTFr  )reprrP   r  r   r   	bool_type)rY   r   r   r   rS   s       rT   r  zBoolNode.__init__  sf    };U;E5ADII 57,,,2d2DI !6rU   c                 &    | j                   | _        y rN   r  rX   s    rT   r2  z"BoolNode.calculate_constant_result      #zzrU   c                     | j                   S rN   r;  r:  s     rT   r<  zBoolNode.compile_time_value  r  rU   c                 n    | j                   j                  r| j                  rdS dS | j                  rdS dS )NPy_TruePy_False10)r   rs   r   rX   s    rT   r  zBoolNode.calculate_result_code  s1    99   $

9:
:**3-#-rU   c                     | j                   j                  r| S t        | j                  | j                  t
        j                        S )Nr   r   )r   rs   r@  r   r   r   r  r   s     rT   r9  zBoolNode.coerce_to_pyobject  s1    99  K

9J9JKKrU   c                 t    | j                   j                  r| S t        | j                  | j                        S Nr;  )r   r  r@  r   r   r   s     rT   rd  zBoolNode.coerce_to_boolean  s)    99K

33rU   c                    || j                   k(  r| S |t        u r| j                   t        j                  u r| S |j                  rF| j                   j
                  r0t        | j                  | j                  t        j                        S |j
                  r7| j                   j                  r!t        | j                  | j                        S t        j                  | ||      S )Nr  r;  )r   r   r   r  rs   r  r@  r   r   r  r  rY   r"  rv   s      rT   r  zBoolNode.coerce_to  s    tyy K~%$))w7H7H*HKDII$4$4DHHDJJW=N=NOO??tyy44DHHDJJ77""4377rU   rN   )r[   r\   r]   r   rB  r   re  r  r2  r<  r  r9  rd  r  r^   r_   s   @rT   r@  r@    s9    !!D4 *.L
4
	8rU   r@  c                   2    e Zd Zej                  ZdZdZd Zy)r  r  r   c                     | j                   S rN   r;  rX   s    rT   r0  z#NullNode.get_constant_c_result_code  r  rU   N)	r[   r\   r]   r   r  r   r   r   r0  rW   rU   rT   r  r    s    %%DEOrU   r  c                   6    e Zd Zej                  Zd Zd Zd Zy)r   c                 8    t        | j                        | _        y rN   )ordr   r   rX   s    rT   r2  z"CharNode.calculate_constant_result  s    "4::rU   c                 ,    t        | j                        S rN   )r  r   r:  s     rT   r<  zCharNode.compile_time_value  r  rU   c                 F    dt        j                  | j                        z  S )Nz'%s')r
   escape_charr   rX   s    rT   r  zCharNode.calculate_result_code  s    224::>>>rU   N)	r[   r\   r]   r   r   r   r2  r<  r  rW   rU   rT   r   r     s    !!D/?rU   r   c                       e Zd ZdZdZdZed        Zed        Zd Z	e
ej                  fd       Ze
d        Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)rx  r  Nc                 x    t        j                  t        t        j                  | j                                    S rN   )r   strip_py2_long_suffixhexstr_to_numberr   rX   s    rT   	hex_valuezIntNode.hex_value  s'    **3u/B/B4::/N+OPPrU   c                 R    t        t        j                  | j                              S rN   )r{   r   r  r   rX   s    rT   base_10_valuezIntNode.base_10_value  s    5&&tzz233rU   c                 f    t        j                  | |fi | d|vr| j                         | _        y y )Nr   )r   r  find_suitable_type_for_valuer   )rY   r   kwdss      rT   r  zIntNode.__init__  s4    $,t,99;DI rU   c                 n    t        |t              sJ t        |              | |t        |      ||d      S )NT)r   r   r   is_c_literal)r   r   r  r{   )rR   r   	int_valuer   s       rT   for_intzIntNode.for_int  s0    )S):4	?:3c)nidaeffrU   c                 F    | j                  ||t        j                        S Nr  )r  r   rM  )rR   r   r  s      rT   ry  zIntNode.for_size  s    {{3	
0L0L{MMrU   c                 z   | j                   t        u r	 | j                          | j                  s+| j                         r| j                  s| j                  dk(  rf| j                  dk(  xr dxs d}t        j                  | j                   |df   }| j                  r t        j                  || j                        }|S d| j                   cxk  rdk  rEn nB| j                  r$| j                  j                  r| j                  }|S t        j                  }|S t        j                  }|S # t        $ r Y w xY w)NLLr7   r,   r   i   l        )r   r5  r2  r   r  r   unsignedlongnessr   modifiers_and_name_to_typer   widest_numeric_typer  c_long_typer   int_type)rY   ranksuitable_types      rT   r  z$IntNode.find_suitable_type_for_value  s   #99..0
 ++-}} 5MMT)0q5AD&AAdmmBSUY[`B`aMyy * > >}dii X  --5599!1!1$(IIM
  %/$:$:M  !( 0 0+  s   D- -	D:9D:c           	      |   | j                   |u r| S |j                  s|t        j                  u ry| j	                         rBt        | j                  dt        | j                        z  |t        | j                              S t        | j                  | j                  |t              S |j                  rR|j                  sFt        | j                  | j                  | j                  |d| j                  | j                         }|S |j"                  rSt        | j                  | j                  | j                  t        j$                  d| j                  | j                         }nBt        | j                  | j                  | j                  | j                  | j                         }t&        j)                  |||      S )Nz%d.0r  T)r   r   r   r  r  r  F)r   r   r  r  )r   rC  r   
float_typer   r  r   r   r   r   r   r6  
is_numericr  rx  r  r  rs   r  r  r  rY   r"  rv   r   s       rT   r  z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
 ""4377rU   c                     t        | j                  | j                  | j                  t        j
                  | j                  | j                        S )N)r   r   r   r  r  )rx  r   r   r   r   rB  r  r  r   s     rT   rd  zIntNode.coerce_to_booleanI  s;    HHDJJ 00'']]T]]	< 	<rU   c                 8   | j                   j                  rot        j                  | j                        }|dkD  rt
        nt        } ||      }t        j                  |      }|j                  || j                        | _
        y | j                         | _
        y )Nl     a$)r   rs   r   r  r   r  r{   r  
get_py_intr  result_coder0  )rY   r   r   	formatterplain_integer_strings        rT   r  z IntNode.generate_evaluation_codeP  sy    99  
 ''

3E$/SI#,U#3 #(#>#>?S#T #/CT]]SD#>>@DrU   c                    | j                   | j                  }}| j                         }|s|s| j                  j                  rw|d   dk(  ro|d   dk7  rg| j                  j
                  t        j                  j
                  k\  rd}n3| j                  j
                  t        j                  j
                  k\  rd}||z   |z   S )Nr   -r,   r  r  L)	r  r  value_as_c_integer_stringr   r  r  r   c_longlong_typer  )rY   r  r  literals       rT   r0  z"IntNode.get_constant_c_result_code^  s    !]]DMM(002H$))*:*:wqzS?PU\]^U_cfUfyy~~!;!;!@!@@:#9#9#>#>>!H,,rU   c                    | j                   }t        |      dk  r|S d}|d   dk(  rd}|dd  }|d   dk(  rs|d   }|r:|dv r6|dd  j                         r#t        t	        j
                  |            }||z   S |dv rd|dd  z   }||z   S |d	v rt        t        |dd  d            }||z   S |j                         r(| j                  s| j                  s|sd
t        |      z  }||z   S )Nr7   r  r   r  r,   r  oOxX0123456789oObBz0x%X)	r   r   isdigitr{   r   r  r   r  r  )rY   r   neg_signliteral_types       rT   r  z!IntNode.value_as_c_integer_stringi  s   

u:?L8s?H!"IE8s? 8L L,<<qrARARAT E//67 % %eABi % %Cab	1-. % ]]_T]]4== U+%rU   c                     | j                   S rN   r  rX   s    rT   r  zIntNode.calculate_result_code      rU   c                 L    t        j                  | j                        | _        y rN   )r   r  r   r   rX   s    rT   r2  z!IntNode.calculate_constant_result  s    $224::>rU   c                 @    t        j                  | j                        S rN   )r   r  r   r:  s     rT   r<  zIntNode.compile_time_value  s    ""4::..rU   )r[   r\   r]   r  r  r  r{  r  r  r  r}  r   
c_int_typer  ry  r  r  rd  r  r0  r  r  r2  r<  rW   rU   rT   rx  rx    s     HHL Q Q 4 4<
 *4*?*? g g N N68:<A	- 8 ?/rU   rx  c                   H    e Zd Zej                  Zd Zd Zd Zd Z	d Z
d Zy)r  c                 8    t        | j                        | _        y rN   )r   r   r   rX   s    rT   r2  z#FloatNode.calculate_constant_result  s    $TZZ0rU   c                    t        | j                        }d|z  j                  d      }t        j                  | j                        }||t        |      j                  d      fvrt        | j                  d|z         |S )Nz%.330fr  zEUsing this floating point value with DEF may lose precision, using %r)	r   r   stripr   normalise_float_reprr  lstripr   r   )rY   r;  float_valuestr_float_value	str_values        rT   r<  zFloatNode.compile_time_value  sq    DJJ'#k188=..tzz:	_d;.?.F.Fs.KLLDHHehsstrU   c                    |j                   rQ| j                  j                  r;t        | j                  | j
                  | j                  t        j                        S |j                  rC| j                  j                   r-t        | j                  | j
                  | j                  |      S t        j                  | ||      S )N)r   r   r   )rs   r   rC  r  r   r   r   r   r  r  r  r  s      rT   r  zFloatNode.coerce_to  s    DII$6$6

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

 $ 4 4  ""4377rU   c                     | j                   S rN   r"  rX   s    rT   r  zFloatNode.calculate_result_code  r#  rU   c                     | j                   }t        |t              sJ t        t	        |            }|dk(  ry|dk(  ry|dk(  ry|S )Nnanz(Py_HUGE_VAL * 0)infPy_HUGE_VALz-infz(-Py_HUGE_VAL))r   r   r{   r  r   )rY   strvalcmpvals      rT   r0  z$FloatNode.get_constant_c_result_code  sJ    &#&&eFm$U?&u_ v#MrU   c                     | j                         }| j                  j                  r"|j                  | j                  |      | _        y || _        y rN   )r0  r   rs   get_py_floatr   r  )rY   r   c_values      rT   r  z"FloatNode.generate_evaluation_code  s>    11399  #00WED&DrU   N)r[   r\   r]   r   c_double_typer   r2  r<  r  r  r0  r  rW   rU   rT   r  r    s+    ##D18 'rU   r  c                    t        j                  |       }||j                  r|S |j                         }|j	                  |       }|r:|j
                  r.|j                  }|r|j                  s|j                  r|S |xs |}ddlm} t        d      5  |d   |d   |d   dz
  f}	  |d| z  |d   j                  |	      }|j                  j                  d   j                  }	t        |	t              rY|	j!                  |      }	t        |	t              r8|	j"                  }|r#|j                  s|j                  r|cd d d        S |xs |}	 d d d        |S # t$        $ r Y w xY w# 1 sw Y   |S xY w)
Nr,   )TreeFragmentTignorer   r7      
sizeof(%s))rt   initial_pos)r   parse_basic_typein_c_type_contextglobal_scoperE  is_typer   rs   r=  r   filenamerootstatsexprr   SizeofTypeNoderX  arg_typer   )
rt   r   rv   r*  rE  global_entryr   r=  declarationsizeof_nodes
             rT   _analyse_name_as_typerP    sn   ''-ES22##%L&&t,L,,  T%%)>)>K +	T	" *1vs1vs1vax(	*&|d':Q^abK &**00388K+~6)77<k>:&//D!1!1S5J5J#* * "MTE* L  			* Ls7   E((EA;E(E(	E%"E($E%%E((E2c                   R    e Zd ZdZeZd ZddZd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)r  Tc                 &    | j                   | _        y rN   r  rX   s    rT   r2  z#BytesNode.calculate_constant_result  r  rU   Nc                     t        j                  | j                  |||   | j                  j                        }t	        | j
                  ||      S Nr  )r
   bytes_literalr   encodingr  r   )rY   r   r   r   r   s        rT   as_sliced_nodezBytesNode.as_sliced_node  s@    ,,TZZd4-H$**J]J]^FFrU   c                 6    | j                   j                         S rN   )r   
byteencoder:  s     rT   r<  zBytesNode.compile_time_value  s    zz$$&&rU   c                 b    t        | j                  j                  d      | j                  |      S )Nz	ISO8859-1)rP  r   decoder   r   s     rT   r  zBytesNode.analyse_as_type  s$    $TZZ%6%6{%CTXXsSSrU   c                 2    t        | j                        dk(  S r  r   r   rX   s    rT   r   z$BytesNode.can_coerce_to_char_literal      4::!##rU   c                 V    t        | j                  t        | j                              S r  )r@  r   re  r   r   s     rT   rd  zBytesNode.coerce_to_boolean  s     TZZ(899rU   c                 ,   | j                   |k(  r| S |j                  r| j                         st        | j                  d       | S |j
                  rt        | j                  d       | S t        | j                  | j                  t        | j                              S t        | j                  | j                  | j                        }|j                  rE|t        t        j                  fv rt        j                  |_         |S | j                  ||d       |S |t         j"                  t         j$                  fv r	||_         |S |t         j&                  t         j(                  t         j*                  fv rG|j,                  j.                  rt         j$                  nt         j"                  |_         t1        ||      S |j3                  t         j"                        r!|j4                  r|j.                  r	||_         |S t6        j9                  |||      S )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.r  Tr6  )r   r  r   r   r   is_unicode_charr   r   r  r  r   rs   r   r   r   r  r   r1   rq   rp   rr   c_void_ptr_typer  is_constCastNoder  r  r  r  r  s       rT   r  zBytesNode.coerce_to   s   99 K??224dhh ab''dhh tuDHHDJJ,/

O= = TEYEYZNG,>,>??#..	 K --h$-GK*44j6V6VWW DIK*55z7X7XZdZtZtuu=E=O=O=X=X99(88 ID(++%%j&@&@A((H,=,=$	
 ""4377rU   c                    | j                   j                  r#|j                  | j                        }|| _        y | j                   j                  s| j                   j
                  rC| j                   j                  j                  r#|j                  | j                        }|| _        y | j                  j                         }t        | j                   t        j                  |      }|| _        y rN   )r   rs   get_py_string_constr   r  rp  r  rd  get_string_constas_c_string_literalr2   r   rc  r  )rY   r   r  r  s       rT   r  z"BytesNode.generate_evaluation_code&  s    99  --djj9F " ii$))"4"4$)):M:M:V:V**4::6F " jj446Gdii)C)CWMF!rU   c                      y rN   rW   rX   s    rT   r0  z$BytesNode.get_constant_c_result_code2  r]  rU   c                     | j                   S rN   r"  rX   s    rT   r  zBytesNode.calculate_result_code5  r#  rU   rN   )r[   r\   r]   r   r   r   r2  rW  r<  r  r   rd  r  r  r0  r  rW   rU   rT   r  r    sD    
 D*G'T$:
$8L
" rU   r  c                   n     e Zd ZdZdZdZeZd fd	Zd Z	d Z
ddZd Zd Zd	 Zd
 Zd Zd Zd Z xZS )r  TNc                 b    t         |   |||       ||| _        ||t        ur|| _        y y y rT  )rP   r  bytes_valuer   r   )rY   r   r   rn  r   rS   s        rT   r  zUnicodeNode.__init__F  sA    E5A"*DL 8DI !9rU   c                 &    | j                   | _        y rN   r  rX   s    rT   r2  z%UnicodeNode.calculate_constant_resultM  r  rU   c                 D    t        | j                  | j                  |      S rN   )rP  r   r   r   s     rT   r  zUnicodeNode.analyse_as_typeP  s    $TZZ3??rU   c                 8   t        j                  | j                  |||   | j                  j                        }| j                  ;t        j
                  | j                  |||   | j                  j                        }nd }t        | j                  ||      S )N)r   rn  )r
   encoded_stringr   rV  rn  rU  r  r   )rY   r   r   r   r   rn  s         rT   rW  zUnicodeNode.as_sliced_nodeS  s    --JJuT$')<)<>'(66  tD143C3C3L3LNK K4885kJJrU   c                    || j                   u r	 | S |j                  r_| j                         st        | j                  d       | S t        | j                        }t        j                  | j                  ||      S |j                  r"t        | j                  | j                  |      S |j                  s|j                  s<|j                  s0|j                  s$|j                  r<|j                   j"                  r%| j$                  M|j&                  r|j)                         }t+        | j                  | j$                        j-                  ||      S |j.                  d   rP	 | j                  j1                  |j.                  d         }t+        | j                  |      j-                  ||      S | j                  j7                         rSt+        | j                  t9        j:                  | j                  j1                  d                  j-                  ||      S t        | j                  d       | S |t<        ur| j?                  ||d	       | S # t2        t4        f$ r Y w xY w)
NzhOnly single-character Unicode string literals or surrogate pairs can be coerced into Py_UCS4/Py_UNICODE.r  r  r;  rd   rj   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).Tra  ) r   rb  r   r   r   r  r   rx  r  r  r  rs   r  is_cpp_stringr  r  r  r  rn  rp  element_ptr_typer  r  rn   encodeUnicodeEncodeErrorLookupErrorisasciir
   BytesLiteralr   r  )rY   r"  rv   r  byte_strings        rT   r  zUnicodeNode.coerce_to]  s   tyy H G %%224dhhPQ DJJI??488YX?FF&&txxtzzII%%!!X%;%;xOO(:(:(B(B##/((#+#<#<#>$TXXT5E5EFPPQY[^__>>"56_&*jj&7&7GZ8[&\  )EOOPXZ]^^::%%'$TXX^5P5PQUQ[Q[QbQbcjQk5l ''0y3'?@$((MN  ^+))(Cd)C /< s   )(I I-,I-c                 2    t        | j                        dk(  S r  r]  rX   s    rT   r   z&UnicodeNode.can_coerce_to_char_literal  r^  rU   c                 Z    t        | j                        }t        | j                  |      S r  )re  r   r@  r   )rY   rv   rK  s      rT   rd  zUnicodeNode.coerce_to_boolean  s!    $**%

33rU   c                     | j                   j                         ryt        t        | j                               }|dk  ry|dk  ryy)N      i  i )r   ry  r  max)rY   max_charvals     rT   estimate_max_charvalz UnicodeNode.estimate_max_charval  s@    ::#djj/*#E!rU   c                 N   | j                   j                  rnt        j                  | j                        r |j                  d      | _        |j                  t        j                  | j                  j                  d                  }|j                  | j                        }|y |j                  | j                         |j                  | j                  d|d|d|j                  | j                  | j                               |j                  | j                  d| j                  z         y | j                   r!|j#                  | j                        | _        y |j%                  | j                        | _        y |j'                  | j                        | _        y )Nustringunicode_escapez! = PyUnicode_DecodeUnicodeEscape(	, sizeof(z) - 1, NULL); z__Pyx_PyUnicode_READY(%s))r   rs   r
   string_contains_lone_surrogatesr   get_py_constr  rh  rz  rv  get_cached_constants_writerr  r   r   r   put_error_if_negis_identifierintern_identifierrg  get_pyunicode_ptr_const)rY   r   
data_cname
const_codes       rT   r  z$UnicodeNode.generate_evaluation_code  sH   99  ==djj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rU   c                     | j                   S rN   r"  rX   s    rT   r  z!UnicodeNode.calculate_result_code  r#  rU   c                     | j                   S rN   r;  r:  s     rT   r<  zUnicodeNode.compile_time_value  r  rU   NNrN   )r[   r\   r]   r   r  rn  r   r   r  r2  r  rW  r  r   rd  r  r  r  r<  r^   r_   s   @rT   r  r  9  sU     MKD*@K&P$4
H6 rU   r  c                       e Zd ZdZy)IdentifierStringNodeTN)r[   r\   r]   r  rW   rU   rT   r  r    s    MrU   r  c                   R    e Zd Zej                  Zd Zd Zd Zd Z	d Z
dZd Zd Zy	)
ImagNodec                 L    t        dt        | j                              | _        y Ng        )complexr   r   r   rX   s    rT   r2  z"ImagNode.calculate_constant_result  s    &sE$**,=>rU   c                 @    t        dt        | j                              S r  )r  r   r   r:  s     rT   r<  zImagNode.compile_time_value  s    sE$**-..rU   c                 <    | j                   j                  |       | S rN   )r   create_declaration_utility_coder   s     rT   rX  zImagNode.analyse_types  s    		11#6rU   c                      yr  rW   rX   s    rT   rZ  zImagNode.may_be_none  r  rU   c                     | j                   |u r| S t        | j                  | j                        }|j                  rd|_        t        j                  |_         t        j                  |||      S )Nr;  r,   )
r   r  r   r   rs   r  r   complex_typer  r  r  s       rT   r  zImagNode.coerce_to  s[    99 K

3DL,,DI ''h<<rU   zConstructing complex numberc                     | j                   j                  r| j                         S | j                   j                  dt	        | j
                        dS )Nz(0, ))r   rs   r  
from_partsr   r   rX   s    rT   r  zImagNode.calculate_result_code  s9    99  ;;= "&))"6"6djj8IJJrU   c           
         | j                   j                  rt|j                  | j                         dt	        | j
                        d|j                  | j                         | j                               | j                  |       y y )Nz = PyComplex_FromDoubles(0.0, ); )	r   rs   r   r  r   r   r   r   r  r  s     rT   r  zImagNode.generate_result_code  sf    99  JJKKM$**%++DKKM488DFG
   & !rU   N)r[   r\   r]   r   c_double_complex_typer   r2  r<  rX  rZ  r  gil_messager  r  rW   rU   rT   r  r    s:    
 ++D?/
= 0KK'rU   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)NewExprNodeNc                 F   | j                   j                  |      }||j                  s"t        | j                  d       t
        | _        y | j                  |       |j                  | j                        }|| _	        || _
        |j                  | _        | j                  S )Nz/new operator can only be applied to a C++ class)cppclassr  r  r   r   r3   r   	cpp_checkget_constructor
class_typer   )rY   rv   r   constructors       rT   r   zNewExprNode.infer_type  s    }},,S1<t00$((MN"DIs**4884 
$$	yyrU   c                 @    | j                   | j                  |       | S rN   )r   r   r   s     rT   rX  zNewExprNode.analyse_types  s    99OOC rU   c                      yr  rW   rX   s    rT   rZ  zNewExprNode.may_be_none  r  rU   c                      y rN   rW   r  s     rT   r  z NewExprNode.generate_result_code  r   rU   c                 <    d| j                   j                         z   S )Nznew )r  empty_declaration_coderX   s    rT   r  z!NewExprNode.calculate_result_code  s    >>@@@rU   )	r[   r\   r]   r   r   rX  rZ  r  r  rW   rU   rT   r  r    s#     D
ArU   r  c                   >    e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZd Zd Zd Zd	 Zd
 Z fdZd,dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z dZ!d,dZ"d Z#d Z$d Z% fdZ&d Z'd Z(d Z)d  Z*d! Z+d" Z,d# Z-d$ Z.d% Z/	 	 d-d&Z0d' Z1d( Z2d,d)Z3d* Z4d+ Z5 xZ6S ).r
  TFNr   r  c                     | j                   S rN   )cython_attributerX   s    rT   r\  zNameNode.as_cython_attribute4  s    $$$rU   c                     | j                    |j                  | j                        | _         | j                   #| j                   j                  j                  r| fS yNrW   )r   rE  rt   r   is_unspecifiedr   s     rT   rl  zNameNode.type_dependencies7  sD    ::DII.DJ::!djjoo&D&D7NrU   c                 X   | j                    |j                  | j                        | _         | j                   | j                   j                  t        u r| j
                  | j
                  S t        S | j                   j                  j                  s | j                   j                  j                  r3| j                   | j                   j                  j                   k(  rt        S | j                   j                  t        u rA| j                   | j                   j                  j                   k(  r| j                  dv rt        S | j                   j                  j                  rO| j                   j                  j                  rt        S t        j                  | j                   j                        S | j                   j                  j                   rD| j
                  r8| j
                  j"                  r| j                   j$                  s| j
                  S | j                   j                  S )N)r|   
basestring)r   rE  rt   r   r4   inferred_typer   is_extension_typeis_builtin_typer   r   rq  rN  is_builtin_scoper   CPtrTypers   r  might_overflowr   s     rT   r   z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---::??"rU   c                     	 |j                  | j                        S # t        $ r& t        | j                  d| j                  z         Y y w xY w)Nz"Compile-time name '%s' not defined)rE  rt   r  r   r   r:  s     rT   r<  zNameNode.compile_time_value`  sD    	N;;tyy)) 	N$((@499LM	Ns    ,AAc                     | j                   r | j                   j                  j                  ry | j                   j                  S rN   )r   r   rs   r   rX   s    rT   r0  z#NameNode.get_constant_c_result_codef  s,    zzTZZ__88zzrU   c                 v   |t         u r| j                  }|r|j                  r|j                  }|ry|j                  r2|j
                  r&|j                  |j                  | j                        }t        | j                  | j                        }||_        |j                  |       |S t        | 1  ||      S )Nrt   )r   r   rq  as_variable
is_builtinrd  declare_builtinrt   r   r
  analyse_rvalue_entryrP   r  )rY   r"  rv   r   	var_entryr   rS   s         rT   r  zNameNode.coerce_tok  s    
 ~%JJE++!--	 ++	0B0B$'$7$7	$Q	#DHHTYY?D!*DJ--c2Kw 3//rU   c                    | j                   }| j                  }| j                  xs |j                  |      }|sa|j                  ryd}|j
                  j                  s|j                  d   sd}n'|j                  rt        }n|j                  |      \  }}|!|r|j                  d   dk7  rt        nt        }n4|j                  r(|j                  r	 |j                  |j                        }d}|j&                  r2|j&                  dk(  }	|j(                  s|j+                  |      r|	rd	nd
}|rA|j,                  r5|j(                  s)|j.                  st        }t1        |j"                  dd       |j3                  ||| j"                  | ||      x}| _        |r|j                  s||_        yyy# t        $ r, t!        | j"                  d| j                   z         t$        }Y w xY w)as  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.
        NrW   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)rt   ro  r   lookup_hereis_module_scoperJ  r   rn   is_py_class_scoper   analyse_type_annotationr4   r  r  r  r-   r   r   r3   is_c_dataclass_scopers   can_coerce_to_pyobjectis_c_class_scoper  r   declare_var)
rY   rv   	as_targetrt   ro  r   	modifiersatyper  	is_frozens
             rT   declare_from_annotationz NameNode.declare_from_annotation~  s    yy__


3cood3""I 11~~&9:&&&#-#E#Ec#J 	5},5#..:W[`:`(ftC$9$9'!,,S-B-BCE #J''  44@	$$(D(DS(I/8hJ S115;L;LPUP^P^&
 )KLMO "%eTXX9}#, "1 ". .EDJ
 e..)E /:5 ( '$((n))$% 'E	's   F4 42G)(G)c                    | j                   }|s|j                  | j                        }|r|j                  r|j                  S |r;|j                  r/t        j                  |j                        }|r|j                  r|S y rN   )r   rE  rt   	as_moduleknown_standard_library_importr   'get_known_standard_library_module_scoper  )rY   rv   r   rN  s       rT   r}  zNameNode.analyse_as_module  si     

JJtyy)EU__??"U88CCEDgDghE..rU   c                 "   d }| j                   r t        j                  | j                         }n+|j                  rt        j                  | j
                        }|r|S | j                  }|s|j                  | j
                        }|r7|j                  s+|j                  rt        j                  |j                        }|r>|j                  r2|j                  }|j                  r|j                  r|j                  }|S | j
                  dk(  rt        S |j                  rt        j                  | j
                        S t        j                  | j
                        r1t!        | j"                  d| j
                   d| j
                   d       y )NobjectzFound C type name 'z6' in a Python annotation. Did you mean to use 'cython.z'?)r  r   rC  rD  parse_basic_ctypert   r   rE  rF  r  r    get_known_standard_library_entryr   rs   r   r   r   r   rn  s       rT   r  zNameNode.analyse_as_type  s@     ..t/D/DED""//		:DK

JJtyy)E5+N+N<<U=`=`aEU]]::DD$8$8++K99 !!   ..tyy99((3DHH 3DII;>tuyu~u~t  @B  C  DrU   c                     | j                   }|s|j                  | j                        }|rD|j                  r8|j                  j
                  s|j                  j                  r|j                  S y rN   )r   rE  rt   rF  r   r  r  rY   rv   r   s      rT   r  z"NameNode.analyse_as_extension_type  sQ     

JJtyy)EU]]zz++uzz/I/Izz!rU   c                 (    | j                  |d      S )NFis_assignment_expression_analyse_target_declarationr   s     rT   rT  z#NameNode.analyse_target_declaration  s    //e/TTrU   c                 (    | j                  |d      S )NTr  r  r   s     rT   rV  z9NameNode.analyse_assignment_expression_target_declaration 	  s    //d/SSrU   c                     d| _         | j                  sC|r!|j                  | j                        | _        n |j	                  | j                        | _        | j                  rd| j                  _        | j                  s-| j                  !|j                  }| j                  ||        nP| j                  rD| j                  j                  r.| j                  r"|j                  rt        | j                  d       | j                  s|j                  d   r$t        | j                  d| j                  z  d       |j                  d   d	k7  rt        }nt        }|r-|j!                  | j                  || j                        | _        n,|j#                  | j                  || j                        | _        | j                  j$                  rt        | _        | j                  j(                  rd| j                  _        y y )
NTr  )r  z7Cannot redeclare inherited fields in Cython dataclasseszwarn.undeclaredzimplicit declaration of '%s'r,   r  F)rx  r   #lookup_assignment_expression_targetrt   r  r  ro  r  r  is_inheritedr   r   rn   r   r4   r   $declare_assignment_expression_targetr  is_declared_genericr.  r  is_variable)rY   rv   r  is_dataclassr   s        rT   r  z$NameNode._analyse_target_declaration	  sq   zz' DDTYYO
 __TYY7
::79DJJ4zzdoo933L ((L8H(IjjTZZ44C$<$<$((UVzz~~/0"@499"LaP~~m,5'%' EEdiiQUW[W_W_`
 __TYYdhhG
::)) .D::%&DJJ"  rU   c                    |j                   d   | _        | j                  }||j                  | j                        }|sG|j                  | j                  | j                        }|r|j                  r|j                  rd| _	        |st        j                  | _        | S || _        d|_        |j                  j                  rddlm} |j#                  |       | j%                  |       | S )NinitializedcheckTr,   Buffer)rn   initialized_checkr   rE  rt   r  r   r  rd  r   r   r3   r   r  	is_bufferr  r  used_buffer_aux_varsr  rY   rv   r   r  s       rT   rX  zNameNode.analyse_types&	  s    !$0B!C

=JJtyy)E++DIItxx@U--%..&*DO&11	DJ
:: ''.!!#&rU   c                 0   | j                  |d       | j                  }|j                  rn|j                  rb|j                  s2|j
                  j                  s| j                         s0|j                  r$|j                  x}| _        |j
                  | _        | j                         s8t        | j                  d| j                  z         t        j                  | _        d|_        |j
                  j                  rddlm} |j#                  |       | S )NTrx  zAssignment to non-lvalue '%s'r,   r  )analyse_entryr   rq  r  is_overridabler   r  fused_cfunctionr   r   rt   r   r3   r  r  r  r  r   r  s       rT   r`  zNameNode.analyse_target_types:	  s    3$/

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

(A(A$..JZ_d_t_t%*%6%66
!JJ	~~$((;diiGH"--DI
:: ''.rU   c                 T   | j                  |       | j                  }|j                  rt        | _        |j
                  s|j                  r0|j                  r|j                  rd| _        nd| _        d| _	        | S |j                  j                  rd| _        d| _	        d| _        | S )Nr   r,   FT)r  r   r  r   r.  is_pyglobalr  rd  r  is_used_as_rvaluer   r  r  r  s      rT   r  zNameNode.analyse_rvalue_entryN	  s     	3

$$ .D 0 0ENN  %&D"
 	 ZZ** DL%)D"#'D rU   c                     d| _         | j                  rT| j                  }|j                  r|j                  s| j                          y y |j                  r| j                          y y y r  )r   r	  r   r  rd  r  r  r  s      rT   r  zNameNode.nogil_checkd	  sW    
!!JJE~~NN$ &""  # "rU   z"Accessing Python global or builtinc                 f   | j                          | j                  }|j                  }|s:|j                  r.| j                  r"| j                  j
                  r| j                  }|| _        |j                  j                  r0|j                  s|j                  r|j                  d      | _        y y y Nr  )check_identifier_kindr   r   rs   r  r  rN  r  r  is_cclass_var_entryname_in_module_statemodule_state_lookup)rY   rv   rx  r   r   s        rT   r  zNameNode.analyse_entryp	  s    ""$

zzd..43E3E""22%%D	;;&&!!U%>%>'*'?'?'CD$ &? 'rU   c                    | j                   }|j                  r|j                  j                  r|| _        |j                  r|j                  j
                  s|j                  j                  r[|j                  rOt        j                  | j                  d t              }d|_        | j                   j                  |_        || _         y |j                  s|j                  s|j                   s}|j"                  sp|j$                  sc| j                   j&                  r| j                   j&                  | _         y | j(                  s$t+        | j,                  d| j                  z         y y y y y y y )NTz7'%s' is not a constant, variable or function identifier)r   rF  r   r  
type_entryrA  is_cpp_enumcreate_wrapperr   Entryrt   r   r  rN  rd  r  r  rq  r  r  is_cython_moduler   r   )rY   r   py_entrys      rT   r  zNameNode.check_identifier_kind	  s	    

==UZZ99#DO==ejj00EJJ4J4JPUPdPd||DIIt^DH#'H !ZZ--HN!DJ..E$5$5""e&8&8$$zz%%!ZZ33
**dhh Y\`\e\e ef + % '9" %6.rU   c                     | j                   s| j                  ry| j                  xs |j                  | j                        }|j
                  xr |j                   S r  )r  r  r   rE  rt   r  r  r  s      rT   "is_cimported_module_without_shadowz+NameNode.is_cimported_module_without_shadow	  sI      D$9$9

3cjj38u'8'8#88rU   c                      yr  rW   rX   s    rT   rS  zNameNode.is_simple	  s    rU   c                 B   | j                   r| j                  ry| j                  j                  s| j                  j                  rMt	        | dd      ryd| _        d}| j                   D ]#  }|j                  j                         sd} | `|S  | `|S t        |          S )N_none_checkingFT)	r   r   rs   r  r
  r  r   rZ  rP   )rY   rZ  
assignmentrS   s      rT   rZ  zNameNode.may_be_none	  s    ==TYYDII,A,A,0II,H,Ht-u5 "&D  K"mm 
>>--/"&K# #w"$$rU   c                     t         j                  |       ry| j                  }|r|j                  ry|j                  xs( |j
                  xs |j                  xs |j                  S NTF)r   rr  r   rP  is_localrM  r  is_readonlyrY   r   s     rT   rr  zNameNode.nonlocally_immutable	  sS    ((.

((~~VV1A1AVUEVEVVrU   c                      y rN   rW   r   s     rT   calculate_target_resultsz!NameNode.calculate_target_results	  r   rU   c                     | j                   }|K|j                  s?|j                  s3|j                  s'|j                  j                  s| j                          yyrY  )r   rd  rq  r  r   r  r"  s     rT   rY  zNameNode.check_const	  sG    

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

##NNrU   c                     | j                   }|j                  s)|j                  s|j                  s| j	                          yyrY  )r   
is_cglobalrq  r  r  r"  s     rT   r  zNameNode.check_const_addr	  s6    

  E$6$6%:J:J!rU   c                     | j                   j                  xr | j                   j                   xs. | j                   j                  xr | j                   j                  S rN   )r   r  r!  rq  r  rX   s    rT   r  zNameNode.is_lvalue	  sO    JJ"" '

&&&
 JJ## &JJ%%	
rU   c                 `    | j                   j                  xr | j                  j                   S rN   )r   r  r   r  rX   s    rT   r  zNameNode.is_addressable	  s$    zz%%Jdii.J.J*JJrU   c                      yr   rW   rX   s    rT   r  zNameNode.is_ephemeral	  s     rU   c                     | j                   }|sy| j                   j                  r| j                  sd|j                  z  S | j                  |j                  z   S )N<error>(*%s))r   is_cpp_optionalrx  r   r  r"  s     rT   r  zNameNode.calculate_result_code	  sH    

::%%dnnU[[((''%++55rU   c                     | j                   }|y |j                  r%|j                  j                  |j                         |j                  r|j
                  ry |j                  r|j                  j                  sJ d       |j                  | j                   j                        }|j                  rt        j                  }n|j                  j                  }| j                  s[|j!                  | j#                         d|d|d       |j!                  d| j#                         z         |j!                  d       |j                  j                  t%        j&                  dd             |j!                  d	| j#                         d|d       | j                  s|j!                  d
       |j!                  |j)                  | j#                         | j*                               | j-                  |       y |j                  r|j                  j.                  s|j                  j                  sJ d       |j                  | j                   j                        }|j                  j                  t%        j&                  dd             |j!                  | j#                         d|d|j)                  | j#                         | j*                               | j-                  |       y |j0                  s$|j                  r|j                  j.                  r|j                  j                  sJ d       |j                  | j                   j                        }|j                  j.                  r|j                  j                  t%        j&                  dd             |j!                  d	| j#                         d|d|j)                  | j#                         | j*                               n|j3                  |j                        }| j                   j                  j4                  }|j                  j                  t%        j&                  dd             |j!                  d| j#                         d|rdnd|d|d|j)                  | j#                         | j*                        	       | j-                  |       y |j6                  s.|j8                  s"|j:                  s|j                  j<                  r| j>                  xs | j                  xr | j@                   }|j                  j<                  xr | jB                  }|jD                  xr | jB                  }	|	r&|j                  jG                  |jH                        }
n%|j                  jK                  |jH                        }
|
rH|rE|j                  j                  s|s|	r*|jM                  | j*                  || jN                  |
       y y y y |jP                  ri|jD                  r\| jB                  rO|j                  jG                  |jH                        }
|jM                  | j*                  || jN                  |
       y y y y )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   r  rd  is_pyclass_attrr   rs   r  rt   r   builtins_cnamerN  namespace_cnamer  r   r  r   r   r   r   r  r  r  namespace_cname_in_module_statenamespace_cname_is_typer   rP  rQ  r  r  
allow_nullr  r.   cpp_optional_check_for_null_coder   check_for_null_codeput_error_if_unboundr  r'  )rY   r   r   interned_cname	namespacer>  r@  raise_unboundmemslice_checkoptional_cpp_checkr:  s              rT   r  z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8S8S::))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IfIf ##6tO<O  #ZZ::Ut?U?UN!&!6!6!Q4;Q;Q!%*ZZ%P%PQVQ\Q\%]"%*ZZ%C%CEKK%P"!m9O9OSaew))$((E4;P;Pew)x fxm! %"7"7D<R<R!&!L!LU[[!Y%%dhht7L7Las%t =S"7rU   c                    | j                   }|y | j                   j                  j                  r>t        |t              r.| j
                  s"|j                  st        | j                  d       |j                  r|j                  j                  sJ d       |j                  | j                   j                        }|j                  | j                   j                        }| j                   j                  j                  }	d}
|j                   r4d}d}
|j"                  j%                  t'        j(                  dd             n|j                  j*                  r"d}|j-                  t.        j0                        }nd|j2                  rH| j                  d	k(  rd
nd}|j"                  j%                  t'        j(                  |d             d|z   }nJ t5        |             |	r|
sd| d}|
r|	sJ |j7                  | j                  |d|d|d|j9                         d       t:        rt=        d       t=        d|z         |j?                  |       |jA                  |       y | j                  jB                  r| jE                  ||       n(| j                  jF                  r| jI                  ||       d}| j                  jJ                  rd}| j                  j                  r:| jL                  r-|jO                  |       |jP                  xs. | j                   jR                  xs | j                   jT                  }|r| jW                  |d       d}|jP                  r0| jY                  ||j[                  | j]                                      nz| j^                  sl| j`                  r0| jc                  ||j[                  | j]                                      n2| jY                  ||j[                  | j]                                      nd}|r|je                  |       | j                  jB                  st|s@|r|jg                         }|dk(  r_ti        || j                  | jk                         d|d| j                  j                  r| jk                         nd || jl                         n|jo                  | jk                         d|d       n|jq                  | j]                               }ts        | j                        r8|jo                  d| jk                         d| jk                         d|d       n8|| jk                         k7  r%|jo                  | jk                         d|d       t:        rt=        d       t=        d|z         |ju                  |       n!|jw                         r|ju                  |       |jA                  |       y )Nz?Literal list must be assigned to pointer at time of declarationr0  F__Pyx_SetItemOnTypeDictTSetItemOnTypeDictzExtensionTypes.cPyDict_SetItemrQ   SetNewInClassSetNameInClassr6  __Pyx_((PyObject*)r  (r1  z"NameNode.generate_assignment_code:z"...generating disposal code for %s)r  r    = ;new (&) decltype(){};z)...generating post-assignment code for %s)<r   r   r  r   ListNodelhs_of_first_assignmentin_module_scoper   r   r  rs   r  rt   r?  rN  r@  	is_memberr   r   r   r   r  r  r   moddict_cnamer<  r  r  r   r   printr  r  r   generate_acquire_memoryviewslicer  generate_acquire_bufferrd  r  r  r'  rP  rQ  r  r  r  r*  r  r  r  r  r  r   r  r  r   r#  r>   r  r  )rY   r   r   r  r   r   r   rE  rF  namespace_is_typenamespace_needs_typesetternassignedis_external_refr  s                   rT   r  z!NameNode.generate_assignment_codeF
  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) )=*9+Q7	,5FG!!"MMO	%& #:;:S@A&&t,NN4 yy++55c4@$$ ,,S$7Hyy!!yy$$
 '',,T2&+&6&6&j$**:O:O&jSWS]S]SjSjO&,,Tt,D#H''00s}}TZZ\7RS##11 $ 9 9$djjl@[ \ $ 8 8s}}TZZ\?Z [',H&,,T299//,!$!4!4!6*c13 $dhh.2kkmV D151F1FD /1F1F	H !JJT[[]F'KL!$!7!7

!E*4995 JJW[WbWbWdfl'mn#t{{}4 JJT[[]F'KL&>?EKL11$7##%11$7NN4 rU   c           	          ddl m} |j                  | j                         | j                  | j
                  ||| j                   | j                         y)z
        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  )rY   r   r   r  s       rT   r_  z)NameNode.generate_acquire_memoryviewslice
  sJ    
 	!..kkmYYHH...!__ 	/ 	.rU   c                 N   t        |t              xs |j                         }|r |j                  | j	                               }ne|j
                  j                  | j                  j                  d      }|j                  |d|j                  | j	                               d       ddl
m} |j                  | j                         || j                  | j                   | j                  |       |s0|j                  d|z         |j
                  j!                  |       y y )	NFr  rS  rT  r,   r  )is_initializedr   r   r  )r   r
  r  r  r*  r  r  r   r   r   r  r  put_assign_to_bufferr  rZ  r   r  )rY   r   r   
pretty_rhsrhstmpr  s         rT   r`  z NameNode.generate_acquire_buffer
  s      X.F#2D2D2F
]]4::<0F^^11$**//e1TFJJVS]]4::<-HIJ##DKKM64::7;7S7S3S(,t 	$ 	= JJy6)*NN''/ rU   c                    | j                   y | j                   j                  r| j                   j                  j                  }|j	                  | j                   j
                        }|rd}nd| j                   j
                  z  }|j                  d|d|d|d|j                  | j                        d	       y | j                   j                  r|j                  j                  t        j                  dd	             |j	                  | j                   j
                        }d
t        j                  d|d}|r2|j                  d|d|j                  | j                        d       y |j!                  | j                  |       y | j                   j"                  j$                  s | j                   j"                  j&                  r| j(                  s| j*                  r3|s1|j-                  | j                  | j                   | j.                         | j                   j0                  r| j3                  |d|       |rH| j*                  r<|j5                  | j7                         | j9                         | j:                          y |j=                  | j7                         | j9                         | j:                          y y t?        | j                  d       y )NzPyErr_Clear(); elsezT{ PyErr_Clear(); PyErr_Format(PyExc_NameError, "name '%%s' is not defined", "%s"); }zif (unlikely(PyObject_DelItem(r1  z>) < 0)) { if (likely(PyErr_ExceptionMatches(PyExc_KeyError)))   }PyObjectSetAttrStrr6  __Pyx_PyObject_DelAttrStr(r  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<  rN  r>  r  rt   r   r   r   r  r   r   r   r   r   module_cnamer  r   rs   r  r  r  rD  r  rP  r  put_xdecref_clearr  r*  r   r  r   )rY   r   r  rF  rE  key_error_codedel_codes          rT   r  zNameNode.generate_deletion_code
  s-   ::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??%%.@--dhh

DDYDYZ::((((4Xj(k%$*<*<**4;;=$**,59ZZ + A ))$++-7;zz> * C # $((?@rU   c           
      h   t        | dd      r| j                  d   | j                  d   | j                  d   t        | j                        z
  dz
  f}| j                  j
                  rd\  }}nd\  }}|j                  |t        ||| j                  z  t        | j                                     y y )	N	is_calledFr   r,   r7   )py_callzpython function (%s))c_callzc function (%s)size)r
  r   r   rt   r   rs   r  r8   )rY   r   r   styletexts        rT   r  zNameNode.annotate  s    4e,88A;TXXa[3tyy>-IA-MNCyy$$?t9tMM#~eTDII5ECPTPYPYN[\ -rU   c                 H    | j                   r| j                   j                  S y rN   )r   r  rX   s    rT   ri  z*NameNode.get_known_standard_library_import  s    ::::;;;rU   rj  rl  )7r[   r\   r]   r   r  r  rZ  r	  r   r  r  r  rA  r   r  r  r\  rl  r   r<  r0  r  r  r}  r  r  rT  rV  r  rX  r`  r  r  r  r  r  r  rS  rZ  rr  r$  rY  r  r  r  r  r  r  r  r_  r`  r  r  ri  r^   r_   s   @rT   r
  r
    s(    G#EJMJJEM%#BN 
0&>*@$L	UT!'F((,! 7KDg(9%*W	
K
6\u| INGKv!p. 0(0Ad]rU   r
  c                   ,    e Zd ZeZdgZd ZdZd Zd Z	y)BackquoteNoder   c                     | j                   j                  |      | _         | j                   j                  |      | _         d| _        | S r  )r   rX  r9  r  r   s     rT   rX  zBackquoteNode.analyse_types,  s:    88))#.88..s3rU   zBackquote expressionc                 L    t        | j                  j                        | _        y rN   )r  r   r   rX   s    rT   r2  z'BackquoteNode.calculate_constant_result4  s    #DHH$<$<=rU   c           
          |j                  | j                         d| j                  j                         d|j	                  | j                         | j
                               | j                  |       y )Nz = PyObject_Repr(r  )r   r  r   r   r   r   r  r  s     rT   r  z"BackquoteNode.generate_result_code7  sX    

""$''txx@B	C
 	T"rU   N)
r[   r\   r]   r   r   r   rX  r  r2  r  rW   rU   rT   r  r  #  s&    
 DwH )K>#rU   r  c                   2    e Zd ZeZdZddgZd ZdZd Z	d Z
y)	
ImportNodeTmodule_nameimported_namesc                 8   | j                   ^|j                         j                  r=|j                  d   s&t        j
                  |j                  j                  vrd| _         nd| _         | j                  j                  |      }|j                  |      | _        | j                  j                  sJ | j                  .| j                  D cg c]  }|j                  |       c}| _        | j                   dk7  r| j                   dkD  r| j                   nd}|j                         j                  }t        |      D ]  }|j                  d      \  }}} t!        j"                  | d| j                  j$                         | _        | S d | _        | S c c}w )N
py2_importr   r,   r   )r   rE  parent_modulern   r9   absolute_importcontextfuture_directivesr  rX  r9  r   r  qualified_namerange
rpartitionr
   rH  r   module_qualname)rY   rv   r  rt   r   qualname_s          rT   rX  zImportNode.analyse_types]  se   ::!//NN<0**#++2O2OO

&&44S9&99#>111*484G4G#,0""3'#D ::?"&**q.DJJaE'')88H5\ :!)!4!4S!9!Q:#1#?#?8*AdN^N^NdNdMe@f#gD   $(D #s   FzPython importc           
         | j                   j                  sJ d}| j                  |j                  | j                        }|j                  j                  t        j                  dd             | j                  F|j                  d       |j                  ddj                  d | j                  D               d       d	| j                   j                         | j                  d
nd| j                  t        | j                        nd|| j                  fz  }|j                  j                  | j                   d      }|j                  | d| d|j#                  || j$                                | j                  |j                  d       | j&                  rNd| j                   j(                  v r5|j                  j                  t        j                  dd             |j                  j                  | j                   d      }| j                   j(                  j+                  d      }|dd  D ]  }|j                  t-        j.                  |            }|j                  | d| d| d       |j                  d| d       |j                  |j#                  || j$                               |j                  | d| d        |j                  j1                  |       |j                  | j3                          d| d       |j                  j1                  |       | j5                  |       y )Nr  ImportzImportExport.c{z*PyObject* const __pyx_imported_names[] = {,c              3   <   K   | ]  }|j                           y wrN   )r  )rf   rd  s     rT   ri   z2ImportNode.generate_result_code.<locals>.<genexpr>  s     FoVWqxxzFo   rX  z __Pyx_Import(%s, %s, %d, %s, %d)__pyx_imported_namesr  r   Fr  rS  ; r   r   
ImportFromr,   z = __Pyx_ImportFrom(r1  r2  z
Py_DECREF(rT  )r  r   r  rg  r   r   r   r   r  r   joinr   r   r   r  r  r   r   r   is_import_as_namer   rc  r
   rH  r  r  r  )	rY   r   r  import_codetmp_submodule	submodulemodulesmodule
module_objs	            rT   r  zImportNode.generate_result_code|  s   111 +"66t7K7KLO))+*A*A(L\*]^*JJsOJJ=chhFo[_[n[nFo>o=ppstv 9&&(&*&9&9&E"3(,(;(;(GC##$QJJ<  44TYY54Q

oSR0G0GW[W_W_0`/ab	
 *JJsO!!cT-=-=-C-C&C--k.E.ElTd.ef44TYY54QI&&,,2237G!!"+ >!55n6R6RSY6Z[


i[(<]O2j\Y[\]

Zb9:

4229dhhGH

m_C	{!<=> NN''	2

dkkm_Ca89##M2T"rU   c                 .    | j                   j                  S rN   )r  r   rX   s    rT   ri  z,ImportNode.get_known_standard_library_import  s    %%%rU   N)r[   r\   r]   r   r   r  r   rX  r  r  ri  rW   rU   rT   r  r  F  s0    $ DG/0H: "K*#X&rU   r  c                   P     e Zd Zg ZdZdZd
dZd Zd Zd Z	d Z
 fdZd	 Z xZS )ScopedExprNodeNTc                     ||| _         y | j                  rt        j                  |      | _         y | j                   sd | _         y y rN   )
expr_scopehas_local_scoper   ComprehensionScope)rY   outer_scoper  s      rT   
init_scopezScopedExprNode.init_scope  s=    !(DO!!$77DDO"DO !rU   c                 &    | j                  |       y rN   )r  r   s     rT   analyse_declarationsz#ScopedExprNode.analyse_declarations  s    rU   c                      y rN   rW   r   s     rT   analyse_scoped_declarationsz*ScopedExprNode.analyse_scoped_declarations      rU   c                     | S rN   rW   r   s     rT   rX  zScopedExprNode.analyse_types      rU   c                     | S rN   rW   r   s     rT   analyse_scoped_expressionsz)ScopedExprNode.analyse_scoped_expressions  r  rU   c                    t         |   }| j                  r| j                  j                  s	 ||       y |j                  d       g }t        d | j                  j                  j                         D              D ]G  \  }}|j                  r|j                  j                  s*|j                  s7|j                  |       I |s ||       |j                  d       y |j                         }|j                         } ||       | j!                  ||       |j#                  d      }|j%                  |       |j&                  |fgt)        t+        |j-                         |            z   D ]K  \  }	}
|j/                  |	      s|j1                  |	       | j!                  ||       |j%                  |
       M |j1                  |       |j                  d       |j3                  |       ||_        y )Nz{ /* enter inner scope */c              3   ,   K   | ]  }|d    s	|  yw)r   NrW   )rf   r   s     rT   ri   z:ScopedExprNode.generate_evaluation_code.<locals>.<genexpr>  s     [SWXYSZt[s   
z} /* exit inner scope */
exit_scope)rP   r  r  r  var_entriesr   sortedentriesitemsrP  r   rs   r  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)rY   r   generate_inner_evaluation_code
py_entriesr  r   old_loop_labelsold_error_labelr  label	old_labelrS   s              rT   r  z'ScopedExprNode.generate_evaluation_code  s   ).)I&##4??+F+F*40

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

-._-*rU   c                     |D ]C  }|j                   r$|j                  |       |j                  |d       3|j                  |       E y )Nr  )r'  put_var_gotrefput_var_decref_setput_var_xdecref_clear)rY   r   r  r   s       rT   r  z%ScopedExprNode._generate_vars_cleanup  sF     	2E##E*''y9**51	2rU   rN   )r[   r\   r]   r   r  r  r  r  r  rX  r  r  r  r^   r_   s   @rT   r  r    s:     HJ O#*+X2rU   r  c            
           e Zd ZeZdZdZdZdZdZ	dgZ
d ZdZ ej                   ej                  ej                   ej                   dej                  d      g            Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zy)IteratorNodeNFsequencec                    | j                   r| j                   }| j                  j                  |      | _        | j                  j                  j                  s | j                  j                  j
                  r=| j                  j                  j                  s| j                  j                  | _        n| j                  j                  j                  r0t        | j                  | j                        j                  |      S | j                         rT| j                  j                  j                  d   j                  }t        | j                  |d      j                  |      S | j                  j                  |      | _        | j                  j                  t        t         fv r | j                  j#                  d      | _        d| _        | S )N)r  r   T)r  reversed!'NoneType' object is not iterabler,   )r  r  rX  r   rp  r  r  r  CppIteratorNoder   is_reversed_cpp_iteration	arg_tupler   r   r9  r   r   ra  r  )rY   rv   r  s      rT   rX  zIteratorNode.analyse_types  s@   ??//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rU   zIterating over Python objectitc                 8   t        | j                  t              rB| j                  j                  r,t	        | j                  j                  j
                        dk(  sy| j                  j                  }|j                  r|j                  dk(  r|j                  j                  sy| j                  j                  j
                  d   }t        |t              rB|j                  j                  r,|j                  j                  }|j                  j                  S y)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  rF  r  r   r   r?  r   rt   r   r  CoercionNoder   r   r  )rY   funcr   s      rT   r  z&IteratorNode.is_reversed_cpp_iteration2  s     4==.9''C0G0G0L0L,MQR,R}}%%<<DII3::((--))..q1C#|,ggmmxx,,,rU   c                 T    | j                   j                  | j                  xs |      S rN   )r  rl  r  r   s     rT   rl  zIteratorNode.type_dependenciesE  s     }}..t/E#FFrU   c                    | j                   j                  |      }|j                  s|j                  r|S |j                  r9|j
                  j                  d      }||j                  j                  S t        S |j                  r|S t        S )Nbegin)r  r   rp  r  r  rN  rE  r   return_typers   r   )rY   rv   sequence_typer  s       rT   r   zIteratorNode.infer_typeH  s    005!!]%9%9  ''!''..w7E zz---  &&  rU   c           
         | j                   j                  }|j                  rJ d       |j                  s|j                  rt        d      |t        t        fv }|s| j                  rJ d       |j                   | _
        | j                  rH|j                  d| j                   j                         d| j                   j                         d       |s| j                  r]|j                  | j                         d| j                   j                         d	| j                         d
       |j                  j                  t         j"                  d      | _        | j                  r|t        u rd}nd}|j                  | j$                  d|d| j                         d
       |j                  d       |j                  |j'                  | j$                  | j(                               |j                  d       |j                  d| j$                  z         n|j                  d| j$                  z         |sa|j                  j                  | j*                  d      | _        | j                  rM|j                  d| j,                  z         |j                  d       |j/                  d| j$                  z         |j                  | j                         d| j                   j                         d|j1                  | j                         | j(                               | j3                  |       |j/                  | j,                   d| j                          d       |j                  |j1                  | j,                  | j(                               | j                  r|j                  d       y y )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()) {rS  z; __Pyx_INCREF(r2  r  __Pyx_PyList_GET_SIZE__Pyx_PyTuple_GET_SIZErR  #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  rp  r  r   r   r   r  r  may_be_a_sequencer   r   r  r  r  r   rM  counter_cnameerror_goto_if_negr   _func_iternext_typeiter_func_ptrputr   r  )rY   r   r  is_builtin_sequencelen_funcs        rT   r  z!IteratorNode.generate_result_codeT  s   **%%GGG!!]%9%9 EFF+	:/FF"}}j&jj%2%B%B!B!!JJMM++-MM++-/0
 $"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 "rU   c                 &    |j                  d       y Nz;;r  r  s     rT   generate_for_loop_headerz%IteratorNode.generate_for_loop_header      rU   c           
         | j                   sJ d       |dv sJ d| d| j                          d}d}| j                  j                  rt	        | j                  j
                        }| j                  j                  |}d}nSt        | j                  j                  j                  t              r%|| j                  j                  j                  z  }d}|r#|j                  d| j                   d	|d
       n|j                  d       |j                  dt        j                  d|d       |j                  d       |j                  |j                  t        j                  | j                               |j                  d       |j                  d| j                   d	t        j                  d
       |j                  d       | j                  rdnd}|dk(  rD|j                  | d| j                          d| j                    d| j!                          d       n|j                  d       |j                  | d| j                          d| j                    d       |j                  d       |j                  | d| j                          d| j                    d       |j                  d       |j                  | | j                    d       y )Nz/internal error: counter_cname temp not prepared)ListTuple__Pyx_Pyz
_GET_SIZE(r  FTif (z >= z) break;r  Py_ssize_t rS  rT  r  r  r   z--++r  z = __Pyx_PyList_GetItemRefFast(r1  r2  <#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  rR  )rY   	test_nameresult_namer   
final_sizesize_is_safe
item_countinc_decs           rT   generate_next_sequence_itemz(IteratorNode.generate_next_sequence_item  s[   !!T#TT---	{*T^^5E4FaH
==00T]]//0J}}((0'
#DMM55EEs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->>>#$Bt'9'9&:"T=V=V=X<YY[]^ JJUVJJ+&GHXGYY[\`\n\n[oorstJJwJJ+&?@P?QQSTXTfTfSggijkJJx 

gYt112!45rU   c                    | j                   j                  }| j                  r|j                  d| j                   d       |t
        u rU| j                  d||       |j                  |j                  || j                               |j                  |t               y |t        u rU| j                  d||       |j                  |j                  || j                               |j                  |t               y | j                  r|j                  d| j                  z         |j                  d| j                         z         | j                  d||       |j                  d       | j                  d||       |j                  d       |j                  |j                  || j                               |j                  d	       |j                  d
       |j                  | d| j                   d| j                          d       |j                  d|z         |j                  d       |j                  d       |j                  |j!                  d| j                               |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       |j                  |t               y )Nr  z < 0) break;r  r  zif (likely(!%s)) {z$if (likely(PyList_CheckExact(%s))) {r  r   z} else r  rS  rR  r2  r3  z&PyObject* exc_type = PyErr_Occurred();zif (exc_type) {zA!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)r4  break;)r  r   r  r   r  r   r  r   r   r  r   r   r  r  r   r  r   )rY   r  r   r  s       rT   generate_iter_next_result_codez+IteratorNode.generate_iter_next_result_code  s0   **==JJd001>?I%,,V[$GJJt..{DHHEFOOK8j(,,Wk4HJJt..{DHHEFOOK8!!JJ+d.@.@@AJJ=@PPQ,,V[$GJJz",,Wk4HJJsOJJt..{DHH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^4rU   c                    | j                   r%|j                  j                  | j                          | j                  r,|j                  j                  | j                         d | _        t        j                  | |       y rN   )r  r  r  r  r   r  r  s     rT   r  zIteratorNode.free_temps  s\    NN''(:(:;NN''(:(:;!%DD$'rU   )r[   r\   r]   r   r   r  r  r  is_asyncr  r   rX  r  r   r  rB  CFuncTypeArgr  r  rl  r   r  r   r  r  r  rW   rU   rT   r  r    s     DMMHHO|H( 1K-*--.Bj.B.B!!#J##D**C*CTJ$/ 
&G
=~&6P$5L(rU   r  c                   \    e Zd ZdZdZdZdZdZdgZd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)r  Nr   r  TFr  c                 "    | j                   sdS dS )N)r  end)rbeginrend)r  rX   s    rT   get_iterator_func_namesz'CppIteratorNode.get_iterator_func_names  s    '+}}L:LLrU   c                    | j                   j                  }|j                  r|j                  }| j	                         \  }}|j
                  j                  |      }|j
                  j                  |      }|,|j                  j                  r|j                  j                  r=t        | j                  d|d| j                   j                         t        | _        | S |,|j                  j                  r|j                  j                  r=t        | j                  d|d| j                   j                         t        | _        | S |j                  j                  }|j                  rF|j                  d   rd| _        |j!                  | j                  d||j                  j                  g      	 =t        | j                  d|d| j                   j                         t        | _        | S |j!                  | j                  d|g      =t        | j                  d|d| j                   j                         t        | _        | S |j!                  | j                  d|g      =t        | j                  d	|d| j                   j                         t        | _        | S || _        | S |j                  r?||j                  j                  k(  st        | j                  d
|d|d       || _        | S t        | j                  d|d| j                   j                  d       t        | _        | S )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   r  r  r  rN  rE  rq  r   r   r   r3   r  r  rn   extra_dereferencelookup_operator_for_types)rY   rv   r  
begin_nameend_namer  r  	iter_types           rT   rX  zCppIteratorNode.analyse_types  s   **)33M#;;=
H##**: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&	!DI  !5!55dhh*V^ _`!DI  $((Zdfjfsfsfxfxyz"DIrU   c                 $   | j                   j                  }| j                         \  }}| j                   j                         rL|j	                  | j                         d| j                   j                         | j                  |d       y |}|j                  rt        j                  |j                        }|j                  s|j                  j                  d   rd| _        |j                  j                  |d      | _        |j	                  | j                   d|j                  rdnd| j                   j#                         d	       |j	                  | j                         d| j                   | j                  |d       y )
NrS  z();r!  ->Fr  &r  rT  )r  r   r  rS  r   r  cpp_attribute_opr  r   r  r   r  r   rn   r  r  cpp_sequence_cnamer  )rY   r   r  r%  r  	temp_types         rT   r  z$CppIteratorNode.generate_result_code+  sH   **446
A ==""$ JJ$$&%%	   "	!! #++M,G,GHIt//::<H$(D! #'..">">yUZ">"[

####C+MM))+
 	
 	

KKM##!!	
 	rU   c                 .   | j                         \  }}|j                  d| j                  | j                         d| j                  xs | j
                  j                         | j                  |d| j                  | j                         
       y )Nr  z != z(); ++)r  r  r#  r  r,  r  r+  )rY   r   r  r&  s       rT   r   z(CppIteratorNode.generate_for_loop_headerV  su     2248""KKM##=t}}';';'==!!""KKM 	rU   c                 f    |j                  |d| j                  | j                         d       y )Nz = *rT  )r   r#  r  )rY   r  r   s      rT   r  z.CppIteratorNode.generate_iter_next_result_codec  s(    

#..' 	(rU   c                 J    | j                   sy t        j                  | |       y rN   )r,  r   r  r  s     rT   r  z.CppIteratorNode.generate_subexpr_disposal_codei  s     && //d;rU   c                 J    | j                   sy t        j                  | |       y rN   )r,  r   r  r  s     rT   r  z"CppIteratorNode.free_subexpr_tempsp  s     && ##D$/rU   c                     | j                   s,t        j                  | |       t        j                  | |       t        j	                  | |       y rN   )r,  r   r  r  r  r  s     rT   r  z&CppIteratorNode.generate_disposal_codew  s=    && 33D$?''d3''d3rU   c                     | j                   r%|j                  j                  | j                          t        j	                  | |       y rN   )r,  r  r  r   r  r  s     rT   r  zCppIteratorNode.free_temps  s3    ""NN''(?(?@D$'rU   )r[   r\   r]   r,  r+  r#  r  r  r   r  rX  r  r   r  r  r  r  r  rW   rU   rT   r  r    sW     GH|HM.`)V(<04(rU   r  c                   6    e Zd ZdZd Zd Zd Zd	dZd Zd Z	y)
NextNodeTc                 R    t         j                  | |j                         || _        y rN   r  r  r   iteratorrY   r8  s     rT   r  zNextNode.__init__      hll3 rU   c                      y rN   rW   r   s     rT   r  zNextNode.nogil_check  r  rU   c                 8    | j                   j                  |      S rN   )r8  rl  r   s     rT   rl  zNextNode.type_dependencies  s    }}..s33rU   Nc           	         || j                   j                  |      }|j                  s|j                  r|j                  S |j
                  rK|j                  | j                  d|g      j                  j                  }t        j                  |d      }|S t        | j                  | j                   j                  t        | j                  dt        j                              }|j                  |      S )Nr   Tremove_fakerefPY_SSIZE_T_MAXr  rt  )r8  r   r  rp  r  r  r$  r   r   r  r   remove_cv_refrw  r  rx  rM  )rY   rv   iterator_typer   fake_index_nodes        rT   r   zNextNode.infer_type  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2rU   c                    | j                  || j                  j                        }| j                  j                  j                  r7|j                  s+|j                  xs t
        | _        | j                  ||      S || _        | S rN   )r   r8  r   rs   r   r   r  )rY   rv   r   s      rT   rX  zNextNode.analyse_types  sh    OOC););<	==)))2G2G "11C^DI>>)S11!DIKrU   c                 X    | j                   j                  | j                         |       y rN   )r8  r  r  r  s     rT   r  zNextNode.generate_result_code  s    44T[[]DIrU   rN   )
r[   r\   r]   r  r  r  rl  r   rX  r  rW   rU   rT   r5  r5    s(     G!43$	JrU   r5  c                   :    e Zd ZdgZdZeZdZdZd Z	d Z
d Zd Zy	)
AsyncIteratorNoder  Tr,   Fc                     t         S rN   r   r   s     rT   r   zAsyncIteratorNode.infer_type      rU   c                 "   | j                   r| j                   }| j                  j                  |      | _        | j                  j                  j                  s6t        | j                  d       | j                  j                  |      | _        | S )Nz*async for loops not allowed on C/C++ types)r  r  rX  r   rs   r   r   r9  r   s     rT   rX  zAsyncIteratorNode.analyse_types  se    ??//C33C8}}!!--$((HI MM<<SADMrU   c           
      R   |j                   j                  t        j                  dd             |j	                  | j                         d| j                  j                         d|j                  | j                         | j                               | j                  |       y )N	AsyncIterCoroutine.cz  = __Pyx_Coroutine_GetAsyncIter(r  )r   r   r   r   r   r  r  r   r   r   r  r  s     rT   r  z&AsyncIteratorNode.generate_result_code  w    ))+*A*A+}*]^

KKMMM##%##DKKM488<> 	? 	T"rU   c                 &    |j                  d       y r  r  r  s     rT   r   z*AsyncIteratorNode.generate_for_loop_header  r  rU   N)r[   r\   r]   r   r  r   r   r  r  r   rX  r  r   rW   rU   rT   rG  rG    s3     |HHDGO#rU   rG  c                   ,    e Zd ZeZdZd Zd Zd Zd Z	y)AsyncNextNoder,   c                 R    t         j                  | |j                         || _        y rN   r7  r9  s     rT   r  zAsyncNextNode.__init__  r:  rU   c                     t         S rN   rI  r   s     rT   r   zAsyncNextNode.infer_type  rJ  rU   c                     | S rN   rW   r   s     rT   rX  zAsyncNextNode.analyse_types  r  rU   c           
      R   |j                   j                  t        j                  dd             |j	                  | j                         d| j                  j                         d|j                  | j                         | j                               | j                  |       y )NrM  rN  z! = __Pyx_Coroutine_AsyncIterNext(r  )r   r   r   r   r   r  r8  r   r   r   r  r  s     rT   r  z"AsyncNextNode.generate_result_code  rO  rU   N)
r[   r\   r]   r   r   r  r  r   rX  r  rW   rU   rT   rR  rR    s"     DG!#rU   rR  c                   .    e Zd ZddgZdgZdZdZd Zd Zy)WithExitCallNoder   
await_expr	with_statTNc                     | j                   j                  |      | _         | j                  r | j                  j                  |      | _        t        j                  | _        d| _        | S r  )r   rX  rY  r   rB  r   r  r   s     rT   rX  zWithExitCallNode.analyse_types  sN    II++C0	??"oo;;C@DO**	rU   c                    | j                   r(|j                  d| j                  j                  z         | j                  j                  |       |j                  j                  t        d      }|j                  | j                         |j                  j                  t        j                  dd             |j                  |d| j                  j                  d| j                  j                         d       |j!                  | j                  j                  t        	       | j                  j#                  |       | j                  j%                  |       |j                  |j'                  || j                               |j)                  |t               | j*                  r| j*                  j                  ||d
       |j                  |d| j*                  j-                         d       | j*                  j/                  |       | j*                  j%                  |       | j0                  r6| j3                  |       |j                  | j                         d|d       |j!                  |t        	       | j0                  r*|j5                  | j                  | j                                |j                  j7                  |       | j                   r|j                  d       y y )N	if (%s) {Fr  PyObjectCallr6   = __Pyx_PyObject_Call(r1  z, NULL);r  T)source_cnamedecref_sourcerS  rT   = __Pyx_PyObject_IsTrue(r2  r   )test_if_runr   rZ  exit_varr   r  r  r  r   r  r   r   r   r   r   r  r  r  r  r   r  rY  r   r  r  r  r  r  )rY   r   
result_vars      rT   r  z)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**:txx@A
N3??OO44T
bf4gJJZ1J1J1LMNOO99$?OO&&t,%%d+JJDKKM:VWj~>!!$((DKKM:##J/JJsO rU   )	r[   r\   r]   r   uptree_ref_attrsrc  rY  rX  r  rW   rU   rT   rX  rX     s*     %H#}KJ%rU   rX  c                   .    e Zd ZefdZd Zd Zd Zd Zy)ExcValueNodec                 4    t         j                  | ||       y r  )r  r  )rY   r   r   s      rT   r  zExcValueNode.__init__B  s    c5rU   c                     || _         y rN   var)rY   rl  s     rT   set_varzExcValueNode.set_varE  s	    rU   c                     | j                   S rN   rk  rX   s    rT   r  z"ExcValueNode.calculate_result_codeH  s    xxrU   c                      y rN   rW   r  s     rT   r  z!ExcValueNode.generate_result_codeK  r   rU   c                     | S rN   rW   r   s     rT   rX  zExcValueNode.analyse_typesN  r  rU   N)	r[   r\   r]   r   r  rm  r  r  rX  rW   rU   rT   rh  rh  =  s     
 "0 6rU   rh  c                   H    e Zd Zg ZddZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TempNodeNc                 z    t         j                  | |       || _        |j                  rt        | _        d| _        y r  )r   r  r   rs   r   r.  r  )rY   r   r   rv   s       rT   r  zTempNode.__init__]  s1    $$	 .DrU   c                     | S rN   rW   r   s     rT   rX  zTempNode.analyse_typesd  r  rU   c                     d| _         y r  r  r   s     rT   rT  z#TempNode.analyse_target_declarationg  	    rU   c                      y rN   rW   r  s     rT   r  zTempNode.generate_result_codej  r   rU   c                 \    |j                   j                  | j                  d      | _        y )NTr  )r  r  r   
temp_cnamer  s     rT   allocatezTempNode.allocatem  s!    ..66tyyT6RrU   c                 \    |j                   j                  | j                         d | _        y rN   )r  r  ry  r  s     rT   releasezTempNode.releasep  s    ##DOO4rU   c                 4    	 | j                   S #  J d       xY w)Nz-Remember to call allocate/release on TempNode)ry  rX   s    rT   r  zTempNode.resultt  s!    	??"	IIIs    	c                      y rN   rW   r  s     rT   r  zTempNode.allocate_temp_result|  r   rU   c                      y rN   rW   r  s     rT   r  zTempNode.release_temp_result  r   rU   rN   )r[   r\   r]   r   r  rX  rT  r  rz  r|  r  r  r  rW   rU   rT   rr  rr  R  s7     HSrU   rr  c                       e Zd Zd Zy)
PyTempNodec                 P    t         j                  | |t        j                  |       y rN   )rr  r  r   r   )rY   r   rv   s      rT   r  zPyTempNode.__init__  s    $Z%>%>DrU   Nr[   r\   r]   r  rW   rU   rT   r  r    s    ErU   r  c                   0    e Zd Zg ZddZd Zd Zd Zd Zy)RawCNameExprNodeNc                 H    t         j                  | ||       ||| _        y y r  )r   r  r   )rY   r   r   r   s       rT   r  zRawCNameExprNode.__init__  s)    $$/DJ rU   c                     | S rN   rW   r   s     rT   rX  zRawCNameExprNode.analyse_types  r  rU   c                     || _         y rN   r   )rY   r   s     rT   	set_cnamezRawCNameExprNode.set_cname  s	    
rU   c                     | j                   S rN   r  rX   s    rT   r  zRawCNameExprNode.result  r  rU   c                      y rN   rW   r  s     rT   r  z%RawCNameExprNode.generate_result_code  r   rU   r  )	r[   r\   r]   r   r  rX  r  r  r  rW   rU   rT   r  r    s     H
rU   r  c                   0    e Zd ZeZdZdZdgZd Zd Z	d Z
y)JoinedStrNodeTzString concatenationvaluesc                     | j                   D cg c]"  }|j                  |      j                  |      $ c}| _         | S c c}w rN   )r  rX  r9  )rY   rv   vs      rT   rX  zJoinedStrNode.analyse_types  s7    MQ[[Yqs+>>sCY Zs   'A c                      yr  rW   rX   s    rT   rZ  zJoinedStrNode.may_be_none      rU   c           
         |j                  | j                         t        | j                        }|dk  }t	               }d}| j                  D ]  }t        |t              rt        ||j                               }.t        |t              r0|j                  dk7  r!|j                  j                  j                  rnt        |t              r|j                  |        g }i }t!        |      g}	| j                  D ]  }|j#                  |       t        |t              rt!        t        |j                              }
n;d|j%                          d}
||v r#|	j'                  d|j%                          d       |
|v r||
xx   dz  cc<   |j'                  |
       d||
<    |r@|j(                  j+                  t-        j.                  t,        j0                  |      d	      }n|j(                  j+                  t-        j2                  t,        j0                        d	      }|j5                  d
||fz         |j5                  d|z         |j5                  d|j7                  | j                        z         |j5                  d       t9        | j                        D ]*  \  }}|j5                  d|||j%                         fz         , |D cg c]  }||   dkD  r
| d||    n| }}|j                  | j                         | j;                  |       |j<                  j?                  tA        jB                  dd             |j5                  d| jE                         ||djG                  |      djG                  |	      fz         |s|j5                  d|z         |j(                  jI                  |       |j5                  |jK                  | j%                         | j                               | jM                  |       | j                  D ]$  }|jO                  |       |jQ                  |       & y c c}w )N    r  cz__Pyx_PyUnicode_GET_LENGTH(r  z__Pyx_PyUnicode_MAX_CHAR_VALUE(r,   Fr  z7%s = (PyObject **) PyMem_Calloc(%d, sizeof(PyObject*));r3  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   r  r  r  FormattedValueNodec_format_specr   r   r  	CloneNodeaddr{   r  r   r  r  r  r   c_array_typer   r  r   r   	enumerater  r   r   r   r   r  r  r  r   r  r  r  )rY   r   	num_itemsuse_stack_memoryunknown_nodesmax_char_valuer   length_partscountscharval_partslength_partvalues_arrayiparts                 rT   r  z&JoinedStrNode.generate_evaluation_code  s   dhh$	$r>KK 	(D$,!$^T5N5N5P!QT#56&&#-$**//2L2LD),!!$'	( ^,-KK 	(D))$/$,!#djj/2 !<DNN<L;MQO=(!((+J4>>K[J\\])^_f${#q(###K0&'{#	(" >>77''
(A(A9MZ_ 8 aL  >>77##J$=$=>5 8 RLJJPT`bkSllmJJ-<=JJ-0IIJJJsO - 	MGAtJJ~q$..:J(KKL	M
 %
 +1,*:tfCt~&D
 

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

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

4**4>>+;TXXFGT"KK 	"D''-OOD!	"3
s   P>N)r[   r\   r]   r   r   r  r  r   rX  rZ  r  rW   rU   rT   r  r    s*     DG(KzHQ"rU   r  c                   X    e Zd ZddgZeZdZdZdZdddd	d
j                  Z
d Zd Zd Zy)r  r   format_specTNzString formattingPyObject_StrPyObject_ReprPyObject_ASCII__Pyx_PyNumber_Long)sradc                      yr  rW   rX   s    rT   rZ  zFormattedValueNode.may_be_none#  r  rU   c                    | j                   j                  |      | _         | j                   j                  j                         }| j                  r| j                  j
                  r\| j                  r| j                  j                   n|j                  }| j                   j                  j                  ||      r|| _        | j                  r/| j                  j                  |      j                  |      | _        | j                  u| j                   j                  |      | _         | j                  sI| j                  r| j                  dk(  r.|t        u r&| j                   j                         s| j                   S | S )N)r  r  )r   rX  r   r-  r  r   default_format_speccan_coerce_to_pystringr  r9  conversion_charr   rZ  )rY   rv   resolved_typer  s       rT   rX  z FormattedValueNode.analyse_types'  s   ZZ--c2


//14#3#3#E#E6:6F6FD,,22MLmLmMzz55c}5U%2"#//==cBUUVYZD%66s;DJ##T-A-ATEYEY]`E` L09O9O9Q::%rU   c                 n   | j                   | j                  j                  j                  s| j                  j                  j	                  | j                  j                         || j                         }|j                  | j                         d|d|j                  | j                         | j                               | j                  |       y | j                  j                         }| j                  j                  t        u xr | j                  j                          }| j                  rd}| j                  j                         }n!d}|j                  t        j                         }| j"                  }|dk(  r|rd }|rZ| j%                  |      }|
J d|z         |d|d}|j&                  j)                  t+        j,                  d	d
             |dz  }nk| j                  r0|j&                  j)                  t+        j,                  dd
             n/|j&                  j)                  t+        j,                  dd
             |j                  | j                         d|d|d|d|j                  | j                         | j                        	       | j                  |       y )NrS  r  __Pyx_PyObject_Format__Pyx_PyObject_FormatSimpler  z(invalid conversion character found: '%s'rR  r  PyObjectFormatAndDecrefr  	AndDecrefPyObjectFormatPyObjectFormatSimpler1  r  )r  r   r   rs   convert_to_pystringr  r   r   r   r  r   r   rZ  r  r  r   empty_unicoder  find_conversion_funcr   r   r   r   )	rY   r   convert_func_callvalue_resultvalue_is_unicodeformat_funcr  r  fns	            rT   r  z'FormattedValueNode.generate_result_code9  s8   )$**//2M2M $

 C C

!!#T4+=+=!?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"rU   )r[   r\   r]   r   r   r   r  r  r  rm   r  rZ  rX  r  rW   rU   rT   r  r    sP     'HDGM%K "	
 
c $/#rU   r  c                   :    e Zd ZdZej
                  Zd Zd Zd Z	y)ParallelThreadsAvailableNodea*  
    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                     d| _         | S r  r  r   s     rT   rX  z*ParallelThreadsAvailableNode.analyse_types|      rU   c                    |j                  d       |j                  d| j                  z         |j                  d| j                  z         |j                  d       |j                  d| j                  z         |j                  d       y )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     rT   r  z1ParallelThreadsAvailableNode.generate_result_code  so    

#$

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

5FG

7

9t~~-.

8rU   c                     | j                   S rN   r  rX   s    rT   r  z#ParallelThreadsAvailableNode.result      ~~rU   N
r[   r\   r]   r  r   r&  r   rX  r  r  rW   rU   rT   r  r  q  s#       D
rU   r  c                   :    e Zd ZdZej
                  Zd Zd Zd Z	y)ParallelThreadIdNodez/
    Implements cython.parallel.threadid()
    c                     d| _         | S r  r  r   s     rT   rX  z"ParallelThreadIdNode.analyse_types  r  rU   c                     |j                  d       |j                  d| j                  z         |j                  d       |j                  d| j                  z         |j                  d       y )Nr  z%s = omp_get_thread_num();r  r  r  r  r  s     rT   r  z)ParallelThreadIdNode.generate_result_code  sR    

#$

/$..@A

7

9t~~-.

8rU   c                     | j                   S rN   r  rX   s    rT   r  zParallelThreadIdNode.result  r  rU   Nr  rW   rU   rT   r  r    s#       D
rU   r  c                       e Zd Zd Zd Zd Zy)_IndexingBaseNodec                     | j                   j                         xs' | j                   j                  t        t        t
        fv S rN   )ru  r  r   r   r   r    rX   s    rT   r  z_IndexingBaseNode.is_ephemeral  s9     yy%%' 6499>>*n>6 ,6 	6rU   c                 n    | j                   j                         xr | j                  j                         S rN   )ru  r  rv  rY  rX   s    rT   r  z"_IndexingBaseNode.check_const_addr  s'    yy))+H

0F0F0HHrU   c                     | j                   j                  r"| j                   j                  j                  ryy| j                   j                  ryyrY  )r   r  r   rp  r  rX   s    rT   r  z_IndexingBaseNode.is_lvalue  sC     99!!yy&&//  YY rU   N)r[   r\   r]   r  r  r  rW   rU   rT   r  r    s    
6IrU   r  c                       e Zd ZddgZdZdZdZd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd#dZd Zd Zd Zd Zd Zd Zd Zd$dZd ZdZd Zd Zd Zd Z 	 	 d%d Z!d! Z"d&d"Z#y)'rw  ru  rv  NTFc                 h    | j                   j                  | j                  j                     | _        y rN   )ru  r   rv  rX   s    rT   r2  z#IndexNode.calculate_constant_result  s#    #yy889S9STrU   c                     | j                   j                  |      }| j                  j                  |      }	 ||   S # t        $ r}| j	                  |       Y d }~y d }~ww xY wrN   )ru  r<  rv  rV  r@  )rY   r;  ru  rv  r?  s        rT   r<  zIndexNode.compile_time_value  sZ    yy++D1

--d3	-; 	-))!,,	-s   = 	A!AA!c                     | j                   }|j                         xrX | j                  j                         xr< |j                  xr. |j                  j                  xs |j                  j
                  S rN   )ru  rS  rv  r   r  rp  rY   ru  s     rT   rS  zIndexNode.is_simple  s_    yy  KTZZ%9%9%; KIIK#'99#3#3#Ityy7I7I	LrU   c                     | j                   j                  }|rH|j                  ry|t        t        t
        fv ryt        | j                  t              r|j                  ryt        j                  |       S r  )ru  r   r  r   r   r    r   rv  	SliceNoder  r   rZ  rY   r  s     rT   rZ  zIndexNode.may_be_none  s]    IINN	""\:~FF$**i0,, !##D))rU   c                      y rN   rW   r   s     rT   rT  z$IndexNode.analyse_target_declaration  r   rU   c                 j   | j                   j                         }|-|dv r(| j                  j                  |      }|%t	        | j                   j
                  d| d       y |dk(  rt        j                  |      S |dk(  }| }|j                  rl|j                  r$|r t	        | j                   j
                  d       d}|j                  r$|r t	        | j                   j
                  d       d}|j                  }|j                  r't	        | j                   j
                  d	| d
| d       t        j                  |||       S | j                   j                  |      }|r|j                  s|j                  ro| j                  j                   r| j                  j"                  }n| j                  g}t%        j&                  | j
                  |d       }|j)                  ||      S | j                  j*                  s| j                  j                   rddlm} |j1                  |j3                  |j4                  j6                               | j                  j*                  r| j                  gnt9        | j                  j"                        }	t        j:                  ||j=                  ||	            S |j>                  sU| j                  jA                  |      }
|
"	 tC        |
      }
t        jD                  ||
      S t	        | j
                  d       y # tF        tH        f$ r Y (w xY w)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][:]' ?)rd  is_volatile)r   positional_argskeyword_args)r  r,   r  z*Array size must be a compile time constant)%ru  r\  rv  r  r   r   r   r  r  rd  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_specsrs   r<  r   
CArrayTyper   r   )rY   rv   modifierr  rd  r  template_values	type_noder  axesrv  s              rT   r  z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Hh,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5iAZAZ[^`dAeff**

55c:$G #E
  *44YFFdhh LM '	2 s   (L   L21L2c                    g }| }|j                   r{|j                  j                  |      }|rE|j                  r9|j                  r-|j                  |j                         rdn|j                         |j                  }|j                   r{|S Nztyping.Optional)rt  ru  r  r  modifier_namer  allows_nonerv  )rY   rv   r  modifier_nodemodifier_types        rT   analyse_pytyping_modifiersz$IndexNode.analyse_pytyping_modifiers?  s     	(()..>>sCM-"L"L%33  m6O6O6Q!2WdWrWrs)//M (( rU   c                 p    | j                   j                  |      | j                  j                  |      z   S rN   )ru  rl  rv  r   s     rT   rl  zIndexNode.type_dependenciesM  s+    yy**3/$**2N2Ns2SSSrU   c                    | j                   j                  |      }| j                  j                  rW|j                  rt
        S |j                  rt        S |t        t
        t        t        t        fv r|S |j                  r|S t        S | j                  j                  |      }|r|j                  st        | j                  t              r|t        u rt         j"                  S |t        u s|t
        u rt         j$                  S |t        t        t&        fv r(t)        || j                   | j                  |      }|N|S |j*                  s|j,                  r|j.                  S |j0                  rt        | j                  t              r| j                  j3                         rQ| j                  j4                  }|dk  r||j6                  z  }d|cxk  r|j6                  k  rn n|j8                  |   S t;        |j8                        }t=        |      dk(  rt|j?                         S |j                  rX|j@                  dk(  r	 |j@                  dk(  r|jB                  S t!        jD                  |jB                  |jF                  dd        S | j                  jH                  r|j                  rs|}| j                  jJ                  D ]V  }|j                  s nJtM        | jN                  tQ        | j                   jN                  |      |      j                  |      }X |S |jR                  r\ G d d      }	 |	| jN                  |       |	| jN                  |      g}
|jU                  d	|
      }||jV                  jX                  S t[        |      r/t[        |      r$| j                  |f}t]        t_        ||g            S |t        u r|S t        S )
Nr   r   r,   r  rt  c                       e Zd Zd Zy))IndexNode.infer_type.<locals>.FakeOperandc                 :    | j                   j                  |       y rN   )__dict__update)rY   r  s     rT   r  z2IndexNode.infer_type.<locals>.FakeOperand.__init__  s    MM((.rU   Nr  rW   rU   rT   FakeOperandr
    s    /rU   r  )r   r   [])0ru  r   rv  r   r  r   r  r   r    r   r   r  r   r  r   rx  r   r   r   r   r   r  rp  r  rI  r   r   r  rJ  r  r   r   ndimr  r  r  r   r   rw  r   r   r  lookup_operatorr   r  r>   rJ   rD   )rY   rv   r  
index_typer   rv  r   r  r  r  operands
index_funcindex_with_types                rT   r   zIndexNode.infer_typeP  s-   II((-	::""!!++##|ZT^__  --   &%ZZ**3/
*++z$**g/NL( "000n,	Z0G!...z9h??4DJJD	($$!!Y%7%7 ***$$DJJ)H::113 JJ66Eqy/E2INN2(33E:: !5!56
z?a'%>>++-->>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#zz:6O4Y@QRSS $ rU   c                 h    | j                   j                  |      | _         | j                  |d      S )NTgetting)ru  rX  analyse_base_and_index_typesr   s     rT   rX  zIndexNode.analyse_types  s.    II++C0	00d0CCrU   c                 2   | j                   j                  |      | _         | j                  |d      }|j                  j                  rt        | j                  d       || u r3|j                         s#t        | j                  d|j                  z         |S )NT)settingzAssignment to const dereference%Assignment to non-lvalue of type '%s')ru  rX  r  r   rd  r   r   r  rZ  s      rT   r`  zIndexNode.analyse_target_types  sv    II++C0	00d0C99$((=>4< 0$((CdiiOPrU   c                    | j                   j                  j                  rt        j                  | _        | S | j
                  j                  }|j                  d   sL|r5t        | j
                  j                  | j
                  j                         nt        | j
                         |sct        | j
                  t              rIt        j                  | j
                  j                        r | j
                  j!                  |      | _        | j                   j                  j"                  }|st        | j                   t$              s|r| j                   j                  j&                  s@| j                   j                  j(                  s@| j                   j                  j*                  s | j                   j!                  |      | _         | j-                  ||      }||S |j.                  | _        | j                   j                  }|j0                  s| j
                  j3                  |      | _        | j
                  j                  | _        | j4                  j6                  r| j4                  j8                  | _        |j:                  ru|rt=        | j>                  dd       n$| j
                  j@                  dv r| j                   S | j                   j!                  |      | _         | j                   j                  }|jB                  r| jE                  ||||      S |j(                  s|j*                  r| jG                  ||      S |jH                  r| jK                  ||      S |j0                  r| jM                  |      S |jN                  r| jQ                  |||      S tS        | j>                  d|z         t        j                  | _        | S )N
wraparoundz%cannot assign to Unicode string indexr,   r   )r   r  z'Attempting to index non-array type '%s')*ru  r   r  r   r3   rv  r   rn   r   r   r   r   rx  r   long_literalr   r9  r  r  r  r  rp  analyse_as_buffer_operationr   rq  rX  original_index_typer  r   rb  r   r   r   rs   analyse_as_pyobjectanalyse_as_c_arrayr  analyse_as_cppanalyse_as_c_functionrI  analyse_as_c_tupler   )rY   rv   r  r  r   is_memslicereplacement_noder  s           rT   r  z&IndexNode.analyse_base_and_index_types  s    99>>"" #--DIK::&&~~l+&tzz'7'7I&tzz2 Jtzz7;@R@RSWS]S]ScSc@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	  ++C7GLL!3!3**399##&&sG44##--c22  **3AA$((; #--DIKrU   c                    | j                   j                  }| j                  j                  j                  rI|t        urAt        | j                  dd       | j                  j                  |      | _        d| _        nZ| j                  j                  j                  r|t        ur	|r|j                  d   s|t        t        t        fv r| j                  j                  j                  r\|j                  d   rMt        | j                  t               r;| j                  j#                         r!| j                  j$                  dk\  rd| _        nd| _        | j                  j'                  t(        j*                  |      j-                  |      | _        | j.                  j1                  |       n'| j                  j                  |      | _        d| _        | xr  | j                  j                  j                  }|r|t2        u rt(        j4                  | _        n|r<|t        t6        fv r.|rt(        j8                  | _        nt(        j:                  | _        n|r%|t6        t        t2        t        t        fv r|| _        nd }|r2|t        t        fv r$t=        || j                   | j                  |      }n.| j                   j>                  rt=        || j                   |      }|t        t        t        fv r | j                   jA                  d      | _         ||jB                  stD        | _        n|| _        | jG                  ||       | S )	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)$ru  r   rv  rb  r   r   r   r9  r  r  rn   r   r   r    signedr   rx  r   r   r  r   rM  rh  r!  create_to_py_utility_coder   r   r   r   r&  r   r   ra  rs   r   wrap_in_nonecheck_node)rY   rv   r   r  r  r  is_int_indexingr   s           rT   r"  zIndexNode.analyse_as_pyobject  sn   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&,A4::??+A+AyL8 #11DI~z.J!J&33	 '11	)
NLR[]g'hh!DII9J0G#G4S$))TZZZcd	%%4S$))iX	Y
I>> II778`a	 	(=(= +	%	##C1rU   c                    | j                   j                  }|j                  | _        | j                  j                  r$t	        j
                  | j                        | _        |r	|| _        | S | j                  j                  j                  r1| j                  j                  t        j                  |      | _        | S | j                  j                  j                  s-t        | j                  d| j                  j                  z         | S )NzInvalid index type '%s')ru  r   r  r  r   CReferenceTyperv  rs   r  rM  r  r   r   )rY   rv   r   r  s       rT   r#  zIndexNode.analyse_as_c_array=  s    IINN	''	99!!"11$))<DI!DI
 	 ZZ__((--j.J.JCPDJ  ''$((5

GHrU   c                 B   | j                   j                  }|j                  d| j                   | j                  g      }|Ot	        | j
                  d|d| j                  j                  d       t        j                  | _        d| _        | S |j                  }|j                  r|j                  }|j                  | _        |j                  | _        | j                  r9|sd| _        t        |       r%|j                  t!        j"                  dd             | j                  j%                  |j&                  d	   j                  |      | _        |j(                  | _        |r9|j(                  j*                  s#t	        | j
                  d
| j                  z         | S )Nr  z
Indexing 'z ' not supported for index type 'r+  r,  TCppExceptionConversionr  r   z#Can't set non-reference result '%s')ru  r   r  rv  r   r   r   r3   r  r  r  r   r   r  r   r   r   r   r  r   r  r  )rY   rv   r  r  r?  	func_types         rT   r$  zIndexNode.analyse_as_cppJ  sB   IINN	&&tdii-DE$((QZ\`\f\f\k\klm"--DI(DKMM	!++I(88(88#-d3$$[%<%<=UWg%hiZZ)))..*;*@*@#F
))	900==$((ADIIMNrU   c           	         | j                   j                  }|j                  r| j                  |       | S | j	                  |      | _        d | _        |j                  #t        | j                  d       t        | _        | S | j
                  t        | _        | S t        |j                        t        | j
                        k7  rOt        | j                  dt        |j                        dt        | j
                               t        | _        | S |j                  t        t        |j                  | j
                                    | _        | S )Nz)Can only parameterize template functions.z-Wrong number of template arguments: expected , got )ru  r   r  parse_indexed_fused_cdefparse_index_as_typestype_indicesrv  	templatesr   r   r3   r   r  dictr  rY   rv   r  s      rT   r%  zIndexNode.analyse_as_c_functionb  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	rU   c                 ,   | j                   j                  }t        | j                  t              r| j                  j                         r| j                  j                  }|j                   |cxk  r|j                  k  r-n n*|dk  r||j                  z  }|j                  |   | _        | S t        | j                  d|d|d       t        j                  | _        | S | j                   j                  |      | _         | j                  |||      S )Nr   zIndex z out of bounds for 'r+  r  r  )ru  r   r   rv  rx  r   r   r  rJ  r   r   r   r3   r9  r  )rY   rv   r  r  r  rv  s         rT   r&  zIndexNode.analyse_as_c_tuplex  s    IINN	djj'*tzz/M/M/OJJ..E%8)..819Y^^+E%007	 K	 dhhi)* '11	K		44S9DI44S'SZ4[[rU   c                    t        | j                  t              r| j                  j                  }n| j                  g}| j                  }|j
                  }d}|j                  rddlm} |j                  r-|j                  |      }||j                  }|j
                  }|}|j                  ||j                        \  }	}}
|	rt        | j                  ||      }nMt        | j                  ||      }n3|j                   s|j"                  r|j"                  st%        |      |j                  k(  rd}|D cg c]  }|j'                  |       }}|j"                  rt)        d |D              }|rt+        |      D ]_  \  }}|j,                  st/        |j                  |j0                  |j2                  |j4                        }|j'                  |      }|||<   a nt)        d |D              }|r4t7        | j                  ||      }t        | j                  t8              rJ ||j'                  ||      }|S c c}w )	zI
        Analyse buffer indexing and memoryview indexing/slicing
        Nr,   r  )indicesru  Tc              3      K   | ]@  }|j                   j                  xs$ |j                  xs |j                   j                   B y wrN   )r   r  r   r>   rf   rv  s     rT   ri   z8IndexNode.analyse_as_buffer_operation.<locals>.<genexpr>  s=      ).! 

))YU^^Yuzz?Y?YY).s   AAr   r   r   c              3   H   K   | ]  }|j                   j                    y wrN   r   r  rB  s     rT   ri   z8IndexNode.analyse_as_buffer_operation.<locals>.<genexpr>  s     (Pu):):(Ps    ")r   rv  	TupleNoder   ru  r   r  r  r  rw  merged_indicesunellipsifyr  MemoryViewSliceNoder   MemoryViewIndexNoder  r>   r   rX  r   r  r   SliceIntNoder   r   r   BufferIndexNoder  )rY   rv   r  r@  ru  r  r(  r  rG  have_slicesnewaxesru  rv  do_replacementr  s                  rT   r   z%IndexNode.analyse_as_buffer_operation  s    djj),jjooGzzlGyyII	''$$$!%!4!4W!=!-99D $		I,G,6,B,B7INN,[)K'#6txxW[#\ #6txxW[#\   I$=$=((CLINN,J#' AHI5..s3II,,%( ).%,). &.N &'0'9 3GAe$~~(4UYYekkX]XbXbinisis(t(-(;(;C(@-2
	3 &)(P(P%PN!'6txxW['\$)$**i@@'/==c7K) Js   =Ic                     |j                   d   r| j                  j                         sy | j                  j                  d      | _        y )N	nonecheckr+  )rn   ru  rZ  ra  rY   rv   r  s      rT   r.  z IndexNode.wrap_in_nonecheck_node  s7    ~~k*$))2G2G2III//0XY	rU   c                    t        | j                  t              r| j                  j                  }n| j                  g}g }|D ]A  }|j	                  |j                  |             |d   )|rt        |j                  d        y  |S )Nr  znot parsable as a type)r   rv  rF  r   r  r  r   r   )rY   rv   requiredr@  r9  rv  s         rT   r8  zIndexNode.parse_index_as_types  s}    djj),jjooGzzlG 	E 5 5c :;B'%))%=>	 rU   c           	      "   t         j                  | _        d| _        | j                  j                  }g }| j
                  j                  s| j
                  j                  r&|j                  | j
                  j                         nPt        | j
                  t              r6| j
                  j                  D ]  }|j                  |j                          | j                  |d      }|| j
                  j                  |      | _        | j                  j                  j                   st#        | j                  d       d| _        y| j                  j                  j                   x| j                  _        | _        | j                  j                  x| j                  _        | _        d| j                  _        d| _        d| j                  _        d| _        yt)        |      D ]  \  }}|j+                  |      ||<    |j-                         }t/        |      t/        |      kD  rt#        | j                  d      S t/        |      t/        |      k  r'|t/        |         }	t#        | j                  d|	z        S t1        |||      D ]V  \  }
}}t3        |j4                  D 	cg c]  }	|j7                  |	       c}	      st#        |
d      c S ||j8                  sV y t;        t1        ||            }|j=                  |      }|j>                  rt#        | j                  d	       y| j                  j                  jA                         D ]  }|j7                  |      s|| _        | j                  j                  r3|j                  | _        d| _        | j                  jB                  | _!        d| j                  j                  _        || j                  _        |j                  | j                  _         y tE        d
      c c}	w )aK  
        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)rT  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_indexru  rv  r   rs  r  r   r   rF  r   r8  rX  r   r  r   r  r  r  specialize_fusedget_fused_typesr   r  ro   typesr  r  r;  r  r  r  r<  r   )rY   rv   r  	positionsr   specific_typesr  r   fused_typesrg   r   specific_type
fused_typer  r&  s                  rT   r7  z"IndexNode.parse_indexed_fused_cdef  sL    ))	"IINN		::!8!8TZZ^^,

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

"'D 0 	;GAt $ 5 5c :N1	;  //1~[!11#=>> 3{#33C/0A $EGH$I J J /2)2@2=/? 	*C
 *:J:JKQ--a0KLS":;;$(>(>	 ![.!AB##$56==$((JL "YY^^NNP I	<<	* )DIyy-- &/__
,0)#'99==+/DIIOO(%.DIIN&/ooDIIOI$ $$GHHC Ls   &P
zIndexing Python objectc           	      x   | j                   j                  t        t        t        fv r~| j                   j                  t        u rd}n| j                   j                  t        u rd}n| j                   j                  t        u rd}nxJ d| j                   j                  z         | j                   j                  j
                  rU| j                   j                         ddj                  | j                  D cg c]  }|j                          c}      dS | j                   j                  j                  r]| j                  j                  }|dk  r#|| j                   j                  j                  z  }| j                   j                         d	|S | j                  j                  s| j                  j                  r:| j                  | j                   j                  k(  rt!        | j"                  d
       y d}|| j                   j                         | j                  j                         fz  S c c}w )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  >r   .fzInvalid use of pointer slicez(%s[%s]))ru  r   r   r   r    rq  r  r  r9  r  rI  rv  r   r  r  rp  r   r   )rY   
index_codeparamrv  s       rT   r  zIndexNode.calculate_result_code/  s   99>>i^DD yy~~*<
:-=
>1T
UDtyy~~UUYY^^((		  "dFWFWXU%668XY[ [ YY^^%%JJ..Eqy,,,#yy//1599		  DII$6$6DII<Wdhh >?#JTYY--/1B1B1DEEE Ys   :H7c           	      R   | j                   j                  j                  r| j                  j                  t        u }t        |j                  j                  d         xrX | j                  j                  xr@ t        | j                   j                  t              xr | j                   j                  dk\   }t        |j                  j                  d         }| j                   }| j                  j                         }| j                  j                  t        u r4|s2|r0|j                  j                  d   rt!        | j"                  dd       d| j                  j%                         | j                  j                  xr dxs d| j                  j&                  |||||fz  S y)	Nr  r   r*  freethreading_compatiblezIndexing a bytearray with 'boundscheck' enabled and without the GIL is not thread-safe on freethreaded Python (disable 'boundscheck' to turn off this warning)r,   z , %s, %d, %s, %d, %d, %d, %d, %sr  )rv  r   r  ru  r   re  r   rn   r!  r,  r   r   r   r  rR  r    r   r   r  to_py_function)rY   r   is_listr  r*  has_gilunsafe_shareds          rT   extra_index_paramszIndexNode.extra_index_paramsL  sn   ::??!!iinn	1GT%%00>? :((//:

 : :C@ 933q8: 
 t//::=IJK///G II::<M		.0[((334NO HH GHIK 6((??A((//5A:((77['=	9J J J rU   c                    | j                   sy | j                  j                  }d }d }| j                  j                  rd}| j                  j                  j
                  r0|t        u rd}n|t        u rd}nd}t        j                  dd      }n|t        u rd}t        j                  dd      }n|t        u r6| j                  j                  t        u rd	}t        j                  dd      }nd
}|j                  j                  t        j                  dd             t        j                  dd      }nR| j                  j                   rE|t        u r=| j                  j                  j
                  sJ d}d}t        j                  dd      }n|t"        u rU| j                  j                  j
                  sJ | j                  j
                  sJ d}d}t        j                  dd      }n|t$        u rU| j                  j                  j
                  sJ | j                  j
                  sJ d}d}t        j                  dd      }n=|j&                  r| j(                  s%J d| j                  d|d| j*                  d       ||j                  j                  |       | j                  j                  j
                  r| j                  j-                         }n| j                  j/                         }|j&                  r| j(                  rt1        || j*                  | j-                         d| j                  j-                         d| j                  j-                         d| j                  j                  r| j-                         nd | j2                  | j4                         n|dk(  rdnd|z  }|j7                  | j-                         dd| j                  j/                         d|| j9                  |      d |j;                  || j-                         z  | j*                        
       | j                  j                  r| j=                  |       y y )!Nr  __Pyx_GetItemInt_List__Pyx_GetItemInt_Tuple__Pyx_GetItemInt
GetItemIntr6  __Pyx_PyDict_GetItemDictGetItem__Pyx_PyObject_Dict_GetItem__Pyx_PyObject_GetItemObjectGetItem__Pyx_GetItemInt_Unicodez(Py_UCS4)-1GetItemIntUnicoder  __Pyx_GetItemInt_Bytesz-1GetItemIntBytes__Pyx_GetItemInt_ByteArrayGetItemIntByteArrayzunexpected type z and base type z for indexing (r  rS  [z];!%sz	%%s == %srR  r1  r  )r  ru  r   rs   rv  r  r   r   r	   r   r   r   r   r   r   r   rb  r   r    r  r   r   r  r   r   r   r  r   rk  r   r  )rY   r   r  r;  error_valuer?  rc  error_checks           rT   r  zIndexNode.generate_result_codeg  sh   ||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###/HK&223DoVL.(::??)))99###3HK&223H/ZL((T-A-A0		9dhh0 0 #--l;::??!!**,J--/J!!d&:&:#D$(("&++-1A1A1C"&**"3"3"57!%!6!6D$$d&;&;	= $/&#8%kK>WKJJKKMII'')++D1&&{T[[]'BDHHMOP 99    & !rU   c                    | j                   j                  j                  r| j                  j                  t        u r2|j
                  j                  t        j                  dd             d}n1|j
                  j                  t        j                  dd             d}| j                   j                         }n;| j                   j                         }| j                  j                  t        u rd}nd}|j                  |j                  |d	| j                  j                         d
|d
|| j                  |      d	| j                               y )NSetItemIntByteArrayr  __Pyx_SetItemInt_ByteArray
SetItemIntr6  __Pyx_SetItemIntrM  PyObject_SetItemrR  r1  r  )rv  r   r  ru  r    r   r   r   r   r  r   r   r   r  rk  r   )rY   
value_coder   r?  rc  s        rT   generate_setitem_codezIndexNode.generate_setitem_code  s   ::??!!yy~~/  11++,A?SU7  11++L:LMO-**,J--/Jyy~~*+ .

4))		##%''-/ HH 	rU   c           
      @   | j                  |       | j                  j                  r"| j                  |j	                         |       n| j
                  j                  t        u r&| j                  ||      }| j                  ||       nO| j
                  j                  j                  r| j                  r| j                  dk(  r|rh|rf| j                  |k7  rWt        || j                  | j                  | j                         |j                         | j                  || j                         nt        || j                  | j                         d|j                         d| j                  j                  r| j                         nd | j                  | j                         n3|j!                  | j                         d|j                         d       | j#                  |       | j%                  |       |j'                  |       |j)                  |       y )Nr   rS  rT  )r  r   rs   r  r   ru  r    _check_byte_valuer  r   r   r   r   r  r  r   r   r  r  r  r  )rY   r   r   r  r   r   r  s          rT   r  z"IndexNode.generate_assignment_code  s   --d399  &&s}}=YY^^~-//c:J&&z48YY^^((T-A-AdFZFZ^aFa$T=Q=QUd=d /tTXXtyyKKM3::<1E1E#T%:%:< (dhh"&++->%)YY%:%:DKKM(($*?*?A
 JJ"kkmSZZ\:< 	++D1%""4(trU   c                    |j                   j                  sJ t        |j                                |j                         }|j	                         r@d|j
                  cxk  rdk  r|S  d}t        |j                  d|j
                  z  d       n|j                   t        j                  k7  }| j                  sg }|j                  s|j                   j                  r|j                  d|z         |j                  sK|j                         r;|j                   t        j                  t        j                  t        j                   fv s|j                  d|z         |ra|j#                  d	d
j%                  |      z         |j#                  d|j'                  | j                        z         |j#                  d       |rd|z  }|S )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   r  r  r  r   r   r   r   r   r   r   r   r,  r  r  r   c_schar_typer   r  r   )rY   r   r   r  
needs_cast
conditionss         rT   r  zIndexNode._check_byte_value  sx   xx.SXX.ZZ\
""$C''-#-!! .JCGG2474G4GH
 Z%<%<<JzzJ~~!!(Z"78'')chh"//1G1G"//;1 /1 !!*z"9:

06;;z3JJK

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

3.;JrU   c                 r   | j                  |       | j                  j                  j                  rLd}| j                  j	                         }|j
                  j                  t        j                  dd             n;| j                  j                         }| j                  j                  t        u rd}nd}|j                  |j                  |d| j                  j                         d|| j                  |      d| j                               | j!                  |       | j#                  |       y )	N__Pyx_DelItemInt
DelItemIntr6  PyDict_DelItemPyObject_DelItemrR  r1  r  )r  rv  r   r  r  r   r   r   r   r   ru  r   r   r  rk  r   r  r  )rY   r   r  r?  rc  s        rT   r  z IndexNode.generate_deletion_code  s    --d3::??!!)H**,J--''6HIK --/Jyy~~*+-

4))		##%''-	/
 HH 	 	++D1%rU   )FFTrl  rj  )$r[   r\   r]   r   r9  rt  rV  r2  r<  rS  rZ  rT  r  r  rl  r   rX  r`  r  r"  r#  r$  r%  r&  r   r.  r8  r7  r  r  rk  r  r  r  r  r  rW   rU   rT   rw  rw    s      HLLNU-L
*AFT[zDBH=~0,\$3 jZ
YIv +KF:6M'^B INGKB"H&rU   rw  c                        e Zd ZdZddgZdZdZdZd ZddZ	d	 Z
d
 Zd Zd Zd Zd Zd Zd ZddZddZd Z fdZ xZS )rL  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
    ru  r@  TFrW   c                 *    | j                  |d       y NFr  r]  r   s     rT   r`  z$BufferIndexNode.analyse_target_typesI  s    3.rU   c                 (   | j                   j                  sBt        | j                   j                        s#t	        | j
                  d       t        | _        | S |s| j                   j                  j                  j                  st	        | j
                  d       nLd| _	        | j                   j                  j                  r%d| j                   j                  j                  _	        d| _        | j                  ||       | j                  |       | S )zz
        Analyse types for buffer indexing only. Overridden by memoryview
        indexing and slicing subclasses
        zCan only index buffer variableszWriting to readonly bufferTr+  )ru  r   r>   r   r   r   r3   r   writabler  r  
buffer_auxnone_error_messageanalyse_buffer_indexr.  rR  s      rT   rX  zBufferIndexNode.analyse_typesL  s     yy  )H$((=>"DIK99??''00dhh <='+$99>>++AEDIIOO..>"J!!#w/##C(rU   c                 "   t        | j                  j                        rT| j                  D cg c]  }||j                  f }}t	        t        | j                  j                  |            | _        nE| j                  j                  |      | _        | j                  j                  j                  | _        | j                  j                  | _        |r5| j                  j                  s| j                  j                   rd| _
        y y y c c}w r  )r>   ru  r   r@  rJ   rD   rh  r  buffer_typers   r  )rY   rv   r  idxindex_with_type_lists        rT   r  z$BufferIndexNode.analyse_buffer_indexd  s    499>>*?C||#LS#((O#L #L#$9$))..J^$_`DI		2237DI		,,DI99>>		--1J1JDL 2K7 $Ms   Dc                      y)zk
        Called by IndexNode when this node is assigned to,
        with the rhs of the assignment
        NrW   rY   r   s     rT   analyse_assignmentz"BufferIndexNode.analyse_assignmentp  s    rU   c                     |j                   d   r| j                  j                         sy | j                  j                  | j                        | _        y )NrQ  )rn   ru  rZ  ra  r  r   s     rT   r.  z&BufferIndexNode.wrap_in_nonecheck_nodev  s<    ~~k*$))2G2G2III//0G0GH	rU   c                     | j                   s| j                  r9| j                  j                  r"t	        | j
                  d       t        | _        y y y )Nz2Cannot access buffer with object dtype without gil)ru  rv  r   rs   r   r   r3   r   s     rT   r  zBufferIndexNode.nogil_check{  s@      D$9$9yy$$dhh TU&	 % %:rU   c                      d| j                   z  S Nr-  )buffer_ptr_coderX   s    rT   r  z%BufferIndexNode.calculate_result_code  s    ----rU   c                     | j                   }| j                   j                  r|j                  }|j                  j	                  |      S rN   )ru  is_nonecheckr   r   	get_entryr  s     rT   buffer_entryzBufferIndexNode.buffer_entry  s6    yy99!!88Dyy""4((rU   c                 .   |j                   j                  t        j                  |j                  |j                  j
                  rt        j                  nt        j                        d      }|j                  |d|j                         d       |S )NFr  rS  rT  )
r  r  r   r  r   r,  c_ssize_t_typec_size_t_typer   r  )rY   r   ivarrets       rT   get_index_in_tempz!BufferIndexNode.get_index_in_temp  sq    nn****		-1YY-=-=
)):C[C[] 	 + 
 	

dkkm45
rU   c                    | j                   rR| j                  s| j                  r:|j                  j                  d   r!t        | j                  d|j                         | j                  D cg c]  }| j                  ||       c}x| _	        }ddl
m} | j                         }|j                  j                  r|j                  j                  }n|j                   d   }||j#                  || j                  D cg c]  }|j                  j$                   c}||j                  j                  | j                  ||| j                         fS c c}w c c}w )z8
        ndarray[1, 2, 3] and memslice[1, 2, 3]
        r*  z(Use boundscheck(False) for faster accessr,   r  negative_indices)r   index_signedsindex_cnamesrn   r   r   r  r  )r  ru  rv  r   rn   r.   r   r@  r  index_tempsr  r  r  r   r  r  buffer_defaultsput_buffer_lookup_coder,  )rY   r   r  r  r  r  r  s          rT   buffer_lookup_codez"BufferIndexNode.buffer_lookup_code  s1      $$(=(=##..}=$TXX/Y[_[k[kl Y]XdXd)ePT$*@*@d*K)ee; 	((*&&+00AA%556HIV::8<E499++E$''22t-!22 ; 4 4 	4 *f Fs   -E=Ec                     | j                  |       | j                  ||       | j                  |       | j                  |       |j	                  |       |j                  |       y rN   )r  generate_buffer_setitem_coder  r  r  r  rY   r   r   r  s       rT   r  z(BufferIndexNode.generate_assignment_code  sV    --d3))#t4++D1%""4(trU   c           	         | j                   j                  }t        |      rt        |j                        r|j                  j                  t        t        | j                   j                              d      }|j                  d|z         |j                  d|d|d| j                   j                         d       |j                  |t        | j                        d|d	|j                         d
       |j                  j                  |       y | j                  |      \  }}| j                  j                  j                   r|j                  j                  |j"                  d      }|j%                         }	|j                  |d|d
       |j'                  d|z  | j                  j                         |j                  d|	d|d       |j                  d|d|d	|	d
       |j)                  d|z  | j                  j                         |j                  j                  |       y |j                  d|d|d	|j%                         d
       y )NFr  __Pyx_call_destructor(%s);rU  rV  rW  rX  rr  z= rT  rS  z*%sz__Pyx_INCREF(z); __Pyx_XDECREF(*r2  r   )ru  r   r>   r<   r  r  rJ   rF   r   r&  rC   r@  r  r  r  r  rs   buf_ptr_typer  r  r  )
rY   r   r   opr  r<  r  ptrexprptrr   s
             rT   r  z,BufferIndexNode.generate_buffer_setitem_code  s   IINN	9%*CCHH*M....{<		;W/Xej.kC JJ3c9:JJS$))BZBZB\]^JJ%dll3""$	& '
 NN'', !% 7 7 =g!!-- ....|/H/H:? / ACzz|HJJS'23US[$*:*:*@*@AJJ#  JJR:;eck4+;+;+A+ABNN'', JJSZZ\BCrU   c                 6   t        | j                  j                        rm| j                         }|j	                  d|z         |j	                  d|d|d| j                  j                         t        | j                        d       y | j                  |      \  }| _	        | j                  j                  r^| j                         }|j	                  |d| j                  d       |j	                  d|d	|d
       |j	                  d|z         y y )Nr  rU  rV  rW  rX  z = (PyObject *) *rT  rv  z == NULL)) z = Py_None;z__Pyx_INCREF((PyObject*)%s);)r>   ru  r   r  r   r&  rC   r@  r  r  rs   )rY   r   resr  s       rT   r  z$BufferIndexNode.generate_result_code  s    499>>*++-CJJ3c9:JJ		((*%dll3	5 6
 -1-D-DT-J*d*99   ++-CJJ38L8LMNJJCMNJJ5;< !rU   c                     | j                   D ]  }|j                  j                  |        d| _         t        |   |       y r  )r  r  r  rP   r  )rY   r   temprS   s      rT   r  z"BufferIndexNode.free_subexpr_temps  s?    $$ 	.DNN''-	."4(rU   r  rj  )r  )r[   r\   r]   r  r   ru  r  r  r`  rX  r  r  r.  r  r  r  r  r  r  r  r  r  r^   r_   s   @rT   rL  rL  5  sv     	"H O K/0
 I
'.)4:(DT=*) )rU   rL  c                   .    e Zd ZdZdZddZd Zd Zd Zy)	rJ  TFc                    ddl m} t        |      | _        | j                  }|j                  || j                  j                  j                        \  }}}|sXd| _	        | j                  j                  s| j                  j                  r%d| j                  j                  j                  _	        | xr, t        |      | j                  j                  j                  k(  | _        g }t        j                   }g }	t        |      t        |      z
  | j                  j                  j                  kD  r[t"        | _        t%        || j                  j                  j                     j&                  d| j                  j                  z         | S d}
t)        |      D ]  \  }}|j+                  |      }|j,                  r*d| _        |	j1                  |       |j1                  d       N| j                  j                  j2                  |
   \  }}|
dz  }
|j4                  rd| _        |j6                  j,                  r|j1                  ||f       n|j1                  |df       dD ]K  }t9        ||      }|j,                  r|j;                  ||      }t=        |||       |	j1                  |       M |j                  j>                  s|j                  j@                  r^|j                  j@                  rtC        |j&                  d	|       d| _"        |j;                  ||      }|||<   |	j1                  |       t"        | _        t%        |j&                  d
|j                  z         | c S  | jD                  xr | j.                   | _"        |	| _        || _#        |jH                  | _$        | jK                  |||      }|jM                  |       |S )Nr,   r  Tz&Too many indices specified for type %sr   )directstridedr  rC  z/Index should be typed for more efficient accessz/Invalid index for memoryview specified, type %s)'r  r  rB   is_pythran_moder@  rH  ru  r   r  r  r   rs  r   r   memslice_indexr   rM  r3   r   r   r  rX  r   rw  r  r  r   r   r
  r  setattrr  rs   r.   rv  original_indicesr   analyse_operationr.  )rY   rv   r  r  r@  rM  rN  r  r  new_indicesaxis_idxr  rv  accesspackingattrr   r   s                     rT   rX  z!MemoryViewIndexNode.analyse_types  s    -c2,,(2(>(>w		H[H[(\%Wg#'D yy  DII$:$:7;		$$4#*{Rs7|tyy~~?R?R/R11
w<#g,&)<)<<"DI'$))..--.22:TYY^^KMK!'* '	HAu'',E}}(,%""5)12"iinn11(;OFGMH~~(,%::%%KK 12KK 34 6 2D#E40E == %
C @tU3#**512 ""ejj&<&<::))$UYY0acfg(,%
C8"
""5) '	eii!RUZU_U_!_`O'	T !% 5 5 Sd>S>S:S" !(YY
%%c7D9##C(rU   c                 8    d| _         | j                  ||       | S )Nz"Cannot index None memoryview slice)r  r  )rY   rv   r  r  s       rT   r  z%MemoryViewIndexNode.analyse_operationR  s    "F!!#w/rU   c                     | j                   j                  r*| }|j                  s|j                  rd|_        d|_        yyy)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  rY   r   lhss      rT   analyse_broadcast_operationz/MemoryViewIndexNode.analyse_broadcast_operationW  sB     99''C''3+C+C+/(+/( ,D (rU   c                 R    | j                  |      }|r|j                  |_        |S | S rN   )r  r  r  s      rT   $analyse_as_memview_scalar_assignmentz8MemoryViewIndexNode.analyse_as_memview_scalar_assignmentd  s-    %%c*-0-K-KC*JrU   Nr  )	r[   r\   r]   rv  ru  rX  r  r  r  rW   rU   rT   rJ  rJ    s$    M^
0rU   rJ  c                   R    e Zd ZdZdZdZdZdZd Zd Z	d Z
d Zd Zd Zd	 Zdd
Zy)rI  TFc                     t        d | j                  D              | _        | j                  r| j                  j                  | _        yy)z@Slicing operations needing no evaluation, i.e. m[...] or m[:, :]c              3      K   | ]X  }|j                   xrF |j                  j                  xr. |j                  j                  xr |j                  j                   Z y wrN   )r   r   r   r   r   rB  s     rT   ri   z<MemoryViewSliceNode.analyse_ellipsis_noop.<locals>.<genexpr>y  sL      $' NN`u{{22`uzz7I7I`ejjN`N``$'   AA N)r   r@  is_ellipsis_noopru  r   rR  s      rT   analyse_ellipsis_noopz)MemoryViewSliceNode.analyse_ellipsis_noopv  sA     !$ $'$' !'   		DI !rU   c                    ddl m} |sd| _        d| _        nd| _        | j	                  ||       | j
                  r| S d | _        d| _        d| _        |j                  | j                  |      st        | _        | S t        j                  | j                  j                  j                   |      | _        | j                  j#                         s:| j                  j%                         s | j                  j'                  |      | _        | S )Nr,   r  Tz&Cannot assign to None memoryview slicez"Cannot slice None memoryview slice)r  r  r  r  r  r  rv  r  r  validate_axesr   r3   r   r   r  ru  r  rS  r  rQ  )rY   rv   r  r  r  s        rT   r  z%MemoryViewSliceNode.analyse_operation  s     (,D%&ND#&JD#""30  K
#''$7"DIK22499>>3G3GN			##%)A)A)C		005DIrU   c                    |j                   j                  s[| j                   j                  j                  |j                         s|j                   j                  rt        | j                  |       S t        | j                  |       S rN   )r   r  r  r  rs   MemoryCopyScalarr   MemoryCopySlicer  s     rT   r  z&MemoryViewSliceNode.analyse_assignment  sX    xx**		//9$$#DHHd33"488T22rU   c                    |sy| j                   dd }|dd }t        | j                         D ]  \  }}|j                  rd|j                  j                  rL|j
                  j                  r6|j                  j                  r |d   ||<   |j                  d       |rp|c S  y|j                  j                  r y |r>t        |      t        |      z   | j                  j                  j                  kD  ry||z  }|S )a  Return 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   r   r   r   r   r   r  r   ru  r  )rY   r@  r  r  r  s        rT   rG  z"MemoryViewSliceNode.merged_indices  s     ++A.!*d334 	DAqzz77??qvv~~!&&..%,QZKNKKN"**  VV]]	 ;#g,.1D1DD7"KrU   c                     | j                   r6| j                  j                         xs | j                  j                         S | j                         S rN   )r  ru  rS  r  rX   s    rT   rS  zMemoryViewSliceNode.is_simple  s?      99&&(FDII,D,D,FF""$$rU   c                 6    | j                   j                         S )z3This is called in case this is a no-op slicing node)ru  r  rX   s    rT   r  z)MemoryViewSliceNode.calculate_result_code  s    yy!!rU   c           	      x   | j                   ry | j                         }| j                   }d}t        | j                        }| j
                  D ]  }|j                  rvd}|j                  j                  st        |      |_        |j                  j                  st        |      |_
        |j                  j                  rtt        |      |_        t        |        t        |      rJ |j                  || j
                  | j                         | j                  |||j                   j"                         y )NFT)r  rM  rn   )r  r  r  iterr@  r  r   r   r   nextr   r   r  generate_buffer_slice_coder  r   r   rn   )rY   r   r  r  rM  r  rv  s          rT   r  z(MemoryViewSliceNode.generate_result_code  s      ((*,,, $,,** 
	E~~"{{**"&r(EKzz))!%bEJzz))!%bEJR
	 8//$''		;''22 	0 	4rU   c                 f   | j                   r| j                  |       n| j                  |       | j                  r| j	                  ||       n| j                  ||       | j                   r| j                  |       n| j                  |       |j                  |       |j                  |       y rN   )	r  r  r  is_memview_scalar_assignment+generate_memoryviewslice_assign_scalar_code&generate_memoryviewslice_setslice_coder  r  r  r  s       rT   r  z,MemoryViewSliceNode.generate_assignment_code  s      11$7))$/,,<<S$G77TB  //5''-""4(trU   Nrj  )r[   r\   r]   rw  r  r  rv  r  r  r  r  rG  rS  r  r  r  rW   rU   rT   rI  rI  l  sJ     #(  '63>%"48rU   rI  c                   0     e Zd ZdZdgZ fdZddZ xZS )MemoryCopyNodeze
    Wraps a memoryview slice for slice assignment.

        dst: destination mememoryview slice
    dstc                 T    t         |   |       || _        |j                  | _        y rN   )rP   r  r  r   rY   r   r  rS   s      rT   r  zMemoryCopyNode.__init__  s"    HH	rU   c                    | j                   j                  |       | j                  ||       | j                   j                  |       | j                   j	                  |       |j                  |       |j	                  |       y rN   )r  r  _generate_assignment_coder  r  r  s       rT   r  z'MemoryCopyNode.generate_assignment_code  sb    ))$/&&sD1''-D!""4(trU   rj  )r[   r\   r]   r  r   r  r  r^   r_   s   @rT   r  r    s     wH
rU   r  c                       e Zd ZdZdZdZd Zy)r  z
    Copy the contents of slice src to slice dst. Does not support indirect
    slices.

        memslice1[...] = memslice2
        memslice1[:] = memslice2
    T__pyx_memoryview_copy_contentsc                    | j                   }|j                  j                  |j                         |j                  j                  |j                         |j	                  |j                  d| j                  |j                         |j                         |j                  j                  |j                  j                  |j                  j                  j                  fz  |j                               y )Nz%s(%s, %s, %d, %d, %d))r  r   assert_direct_dimsr   r   r  copy_slice_cnamer  r  r  rs   )rY   r#  r   r  s       rT   r  z)MemoryCopySlice._generate_assignment_code!  s    hh##CGG,##CGG,

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

cjjl(+sxx}}(+(B(B(D D GG 	rU   N)r[   r\   r]   r  r  r  r  rW   rU   rT   r  r    s     "&7rU   r  c                   (     e Zd ZdZ fdZd Z xZS )r  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                 \    t         |   ||       |j                  j                  | _        y rN   )rP   r  r   r  r  s      rT   r  zMemoryCopyScalar.__init__8  s!    c"HHNN	rU   c                    ddl m} | j                  j                  j	                  | j                  j
                         | j                  j                  j                  }|j                  d      }| j                  j                  j                  d      }|j                          |j                  |d|j                         d       | j                  j                         s| j                  j                         r| j                  j                         }n1|j                  |d| j                  j                         d       d}d}| j                  j                  }	|	D ]X  }
t        |
t              s|
j                   j"                  r-|
j$                  j"                  r|
j&                  j"                  rWd	}Z |j)                  | j                  j                  || j                  j                  j*                  ||
      }|j-                         }|j.                  r|j                  d|z         |j                  d|d|d       |j.                  r|j                  d       |j1                          |j3                          y )Nr,   r  r  z __pyx_temp_scalar = rT  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  r  r   r  r   r  r   begin_blockr   r  r  rS  r  r   r  r   r   r   r   
slice_iterr  start_loopsrs   	end_loops	end_block)rY   scalarr   r  r  	type_decl
slice_decldst_tempr  r@  r  slice_iter_objps                rT   r  z*MemoryCopyScalar._generate_assignment_code<  s    ((6##**2.	XX]]33B7


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

)QGHJJ67  "rU   )r[   r\   r]   r  r  r  r^   r_   s   @rT   r  r  /  s    #'rU   r  c                   
    e Zd Zg dZdZdZd ZddZd Zd Z	d Z
d	 Zd
 ZddZd Z fdZdZ ej$                  ddddi      Z ej$                  ddddi      Z fdZd Z	 	 d dZd!dZd Zd Zd Zd Zd Z xZS )"SliceIndexNode)ru  r   r   sliceFNc                 R   | j                   j                  |      }|j                  s|j                  rt        S |j
                  rt        S |t        t        t        t        t        fv r|S |j                  s|j                  r t        j                  |j                  d       S t        S rN   )ru  r   r  r  r   r  r   r    r   r   r  rp  r   r  r  r   r<  s      rT   r   zSliceIndexNode.infer_typet  s    II((-	)"8"8'':~|$j2 2!3!3**9+>+>EErU   c                     |t         urF| j                  r:| j                  j                         r|| j                  j                  z  }nt         }| j                  j                  |      S rN   )r6  r   r   r   ru  r{  rz  s     rT   r{  z"SliceIndexNode.inferable_item_node  sN    &4::zz--/333&yy,,U33rU   c                     | j                   j                  }|r+|j                  ry|t        t        t
        t        t        fv ryt        j                  |       S r  )
ru  r   r  r   r    r   r   r   r   rZ  r  s     rT   rZ  zSliceIndexNode.may_be_none  sJ    IINN	""Z&
4 4##D))rU   c                     | j                   d }n| j                   j                  }| j                  d }n| j                  j                  }| j                  j                  || | _        y rN   )r   r   r   ru  )rY   r   r   s      rT   r2  z(SliceIndexNode.calculate_constant_result  sW    ::EJJ..E99D99,,D#yy88tDrU   c                 :   | j                   j                  |      }| j                  d}n| j                  j                  |      }| j                  d }n| j                  j                  |      }	 ||| S # t        $ r}| j                  |       Y d }~y d }~ww xY wr   )ru  r<  r   r   rV  r@  )rY   r;  ru  r   r   r?  s         rT   r<  z!SliceIndexNode.compile_time_value  s    yy++D1::EJJ11$7E99D99//5D	-d## 	-))!,,	-s   1A6 6	B?BBc                      y rN   rW   r   s     rT   rT  z)SliceIndexNode.analyse_target_declaration  r   rU   c                 n    | j                  |d      }|j                  j                  rt        |_        |S r  )rX  r   rs   r   rZ  s      rT   r`  z#SliceIndexNode.analyse_target_types  s0    !!#u!599  &DIrU   c                 <	   | j                   j                  |      | _         | j                   j                  j                  s@| j                   j                  j                  s | j                   j                  j
                  rt        | j                        }t        | j                  | j                  xs || j                  xs ||      }t        | j                  || j                         }|j                  |||       S | j                  r | j                  j                  |      | _	        | j                  r | j                  j                  |      | _
        |j                  d   s t        | j                  | j                         | j                   j                  }|j                  rG|sE| j                  s| j                  s|| _        nt!        j"                  |j$                        | _        n|j&                  s|j(                  rt+        |      | _        n|j,                  rt.        | _        np|j0                  r|| _        n\|j                  r%t!        j"                  |j$                        | _        n+| j                   j3                  |      | _         t4        | _        |j6                  r'|| _        | j                   j9                  d      | _         | j                  t4        u r| j                  r| j                  j:                  r| j                  r| j                  j:                  rft        | j                        }t        | j                  t=        j>                  | j                  xs |      t=        j>                  | j                  xs |      |      j                  |      | _         nt         jB                  fd}| j                  rZ| j                  j                  jD                  r || j                  d|      | _	        | j                  jG                  |      | _	        | j                  rZ| j                  j                  jD                  r || j                  d|      | _
        | j                  jG                  |      | _
        d	| _$        | S )
NrC  )rv  ru  r>  r  r+  c                    ddl m}m}  ||       }t        | j                  t        | j                  ||j                         rt        |      nt              |j                  |      t        | j                  |dt        | j                              j                  |            j                  |      } |||      S )Nr,   EvalWithTempExprNodeResultRefNode)r   r   r   is)operand1r   operand2)true_val	false_valtest)	UtilNodesr  r  CondExprNoder   rx  r  r   r6  r  PrimaryCmpNoder  rX  analyse_result_type)r   default_valuerv   r  r  node_refnew_exprc_ints          rT   
allow_nonez0SliceIndexNode.analyse_types.<locals>.allow_none  s    J(.'HH$"+>K>S>S>UM(:[i	 '00<'!)!%!)$((!3	
 $mC( &%c*   ,Hh??rU   r  r@  r,   )%ru  rX  r   r  r>   r  r  r   r  r   r   rw  r  rn   r   rp  r   r  r  r  rt  r~   r  r   r  r9  r   r  ra  r   r&   deepcopyr  rM  rs   r  r  )	rY   rv   r  	none_noderv  r   r  r-  r,  s	           @rT   rX  zSliceIndexNode.analyse_types  s7   II++C0	99>>##tyy~~'E'EIjIj *Idhh$(JJ$;)#'99#9	#,.E #4885tyyIJ::W'k ; ; ; ::11#6DJ99		//4DI~~l+"4::tyy9IINN	g::dii%	&//	0C0CD	  I$;$;(-DI''$DI!DI #++I,?,?@DI		44S9DI&DI$$!DI		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;	rU   c                    | j                   j                  |      }|r| j                  s| j                  sddlm} |j                  |j                  |j                  j                               t        | j                        }t        | j                  |||      }t        j                  ||j                  ||g            S y )Nr,   r  rC  )ru  r  r   r   r  r  r   r  r  r  r  r   r  r   r  r  )rY   rv   r  r  r/  
slice_nodes         rT   r  zSliceIndexNode.analyse_as_type  s    II--c2	::dii($$44AA
 %TXX.	&HH#""	
 "55z88zlKM MrU   c                 D    |j                   | _         t        | 	  |      S rN   )r   rP   r  rY   rv   rS   s     rT   r  zSliceIndexNode.nogil_check-  s    YY
w"3''rU   zSlicing Python objectSliceObjectr6  r  Get)r  Setc                 (   | j                   j                  j                  s | j                   j                  j                  rb|t        t
        t        fv rO|t        u r@|j                  d   s1t        | j                  d| j                   j                  d|d       || _        |j                  rT| j                   j                  j                  r4| j                  s(| j                  s| j                   j                  ||      S t        | 5  ||      S )Nrd   /default encoding required for conversion from '' to 'r+  )ru  r   r  rt  r   r    r   rn   r   r   rp  r   r   r  rP   r  s      rT   r  zSliceIndexNode.coerce_to9  s    YY^^%%)E)E^\ JJL(@S1TdhhYY^^X/0 !DI!8!8::diiyy**8S99w 3//rU   c                 Z   | j                   j                  s$t        | j                  d| j                   z         y | j                  j                   }| j                         }| j                         }| j                         }|j                  r| j                  j                  t        j                        }| j                   t        u rd}n9| j                   t        u rd}n$| j                   j                  j                         }| j                   d| d| d| d}nJd| d| d| d	| d
| d}n6|j"                  r| j                  j                  t        j$                        }|j&                  j)                  t+        j,                  dd             | j                   d| d| d}nd| d| d	| d
| d	}n|t        u rW| j                  j                         }|j&                  j)                  t+        j,                  dd             d| d	| d	| d}nK| j                   t.        u r| j                  j1                         }| j3                         \  }	}
}}}}}t5        |j&                  j6                  d         }|j&                  j)                  | j8                         d| d	| d	| d	| d	| d	| d	|	dd	|
dd	|dd}n| j                  j1                         }|t:        u r2|j&                  j)                  t=        j,                  dd             d}n<|t>        u r2|j&                  j)                  t=        j,                  dd             d}nd}| d| d	| d	| d}|jA                  | d| d|jC                  || j                                | jE                  |       y )Nz,Slicing is not currently supported for '%s'.	ByteArrayUnicoder  z_FromString(r  r  z_FromStringAndSize(r1   - pyunicode_from_unicoder  z__Pyx_PyUnicode_FromUnicode(z%__Pyx_PyUnicode_FromUnicodeAndLength(PyUnicode_Substringz__Pyx_PyUnicode_Substring(r  z__Pyx_PyObject_GetSlice(r  SliceTupleAndListr6  __Pyx_PyList_GetSlice__Pyx_PyTuple_GetSlicePySequence_GetSlicerR  rS  r  )#r   rs   r   r   ru  r  
start_code	stop_coder  r  r   rq   r    r   rt   titler   r  c_const_py_unicode_ptr_typer   r   r   r   r   r   get_slice_configre  rn   get_slice_utility_coder   r	   r   r   r   r  )rY   r   r  r  rD  rE  base_result	type_namecallhas_c_start
has_c_stopc_startc_stoppy_startpy_stoppy_slicer  cfuncs                     rT   r  z#SliceIndexNode.generate_result_codeH  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QKWfh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"rU   c                 6   | j                  |       | j                  j                  r|j                  j	                  | j
                         | j                         \  }}}}	}
}}|j                  | j                  d| j                  j                         |j                         ||	|
||||t        |j                  j                  d         f
z         n | j                  r| j                         nd}|j                  j                  r)|j                  j                   }| j#                  ||       n| j%                         d|}|j                  j	                  t'        j(                  dd             |j+                  d| j                  j-                         d|d	|j-                         d
| j                  j-                         d|d       | j/                  |       | j1                  |       |j3                  |       |j5                  |       y )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   rs   r   r   set_slice_utility_coderH  r  r   ru  r   re  rn   r   rD  rp  r  generate_slice_guard_coderE  r   r   r   r  r  r  r  r  )rY   r   r   r  r   r   rM  rN  rO  rP  rQ  rR  rS  start_offsetarray_lengths                  rT   r  z'SliceIndexNode.generate_assignment_code  s   --d399  --d.I.IJTXTiTiTkQKWfh!!$((QII'')MMOVgx))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rU   c                 ,   | j                   j                  j                  s$t        | j                  d| j                  z         y | j                  |       |j                  j                  | j                         | j                         \  }}}}}}}	|j                  | j                  d| j                   j                         |||||	||t        |j                  j                  d         f	z         | j                  |       | j                  |       y )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  )ru  r   rs   r   r   r  r   r   rY  rH  r  r   re  rn   r  r  )
rY   r   r  rM  rN  rO  rP  rQ  rR  rS  s
             rT   r  z%SliceIndexNode.generate_deletion_code  s    yy~~))$((QTXT]T]]_--d3))$*E*EF(,(=(=(?	&j'6	7HdhhI		##%'8ZT%%00>?MA A	B 	++D1%rU   c                 &   d\  }}}| j                   r[| j                   j                  j                   }|r| j                   j                         }nd| j                   j	                         z  }d\  }}}| j
                  r[| j
                  j                  j                   }|r| j
                  j                         }nd| j
                  j	                         z  }| j                  xr d| j                  j	                         z  xs d}|||||||fS )N)Fr  r  &%sr  )r   r   rs   r  r   r   r  )rY   rM  rO  rQ  rN  rP  rR  rS  s           rT   rH  zSliceIndexNode.get_slice_config  s    );&Wh::"jjoo999K**++- 4::#7#7#99&8#
FG99!YY^^777J))+$))"5"5"77::@%$***>*>*@"@JFZ&'8- 	-rU   c                     | j                   j                  j                  sy | j                   j                  j                  }	 t	        |      x}}d x}}| j                  r?| j                  j                         }	 t	        |      }|dk  r|d||fz  }n||z  }n|}d }| j                  rx| j                  j                         }	 t	        |      }|dk  r-|&d| j                   j                  j                  |fz  }n||z  }t        |t              r||z  }n|d|d}d }d }d}	 t	        |      }	t        |t              }|r!|dk  r|	dkD  rVt        | j                  d       n?|r&|$|"|	|k7  r4t        | j                  d|d|       n|||}d	|d
|d}n||}n|}|r|j                  d|d|d       | j                  r|j                          |j                  d|d|d       | j                  r|j                          |j                  |j!                  | j                               |j                  d       y y # t
        $ r d }Y 
w xY w# t
        $ r Y w xY w# t
        $ r Y Ww xY w# t
        $ r d }	Y Iw xY w)Nr   z%s + %dz - (r  FzAssignment to empty slice.z.Assignment to slice of wrong length, expected r6  rR  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   )ru  r   rp  r  r   r   r   r  r   r   r   r   r   r   r   r   r   )
rY   r   target_size
slice_sizetotal_lengthr   r   runtime_checkcompile_time_checkint_target_sizes
             rT   rZ  z(SliceIndexNode.generate_slice_guard_code  s   yy~~&&YY^^((
	 (+J7L: 9999##%D4y!8#+%.*d1C%C
"d*
!%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   I ;$I AI. (I> II	I+*I+.	I;:I;>JJc                 P    | j                   r| j                   j                         S y)Nr  )r   r  rX   s    rT   rD  zSliceIndexNode.start_code)  s    ::::$$&&rU   c                     | j                   r| j                   j                         S | j                  j                  j                  r | j                  j                  j
                  S y)Nr@  )r   r  ru  r   rp  r  rX   s    rT   rE  zSliceIndexNode.stop_code/  sD    9999##%%YY^^$$99>>&&&#rU   c                      y)Nz<unused>rW   rX   s    rT   r  z$SliceIndexNode.calculate_result_code7  s    rU   rk  r  rl  rj  )r[   r\   r]   r   r   r  r   r{  rZ  r2  r<  rT  r`  rX  r  r  r  r	   loadrI  rY  r  r  r  r  rH  rZ  rD  rE  r  r^   r_   s   @rT   r  r  f  s     2HEE4*	E-]~,( *K4/44)He3DF 5/44)He3DF0E#N INGK D&&-&Pd$rU   r  c                   H    e Zd Zg dZdZeZdZd Zd Z	d Z
d ZdZd	 Zd
 Zy)r  rC  Tr,   c                     t        | j                  j                  | j                  j                  | j                  j                        | _        y rN   r  r   r   r   r   rX   s    rT   r2  z#SliceNode.calculate_constant_resultH  6    $JJ&&II%%II%% 'rU   c                    | j                   j                  |      }| j                  j                  |      }| j                  j                  |      }	 t	        |||      S # t
        $ r}| j                  |       Y d }~y d }~ww xY wrN   r   r<  r   r   r  rV  r@  rY   r;  r   r   r   r?  s         rT   r<  zSliceNode.compile_time_valueN  s    

--d3yy++D1yy++D1	-d++ 	-))!,,	-   A   	B)A??Bc                      yr  rW   rX   s    rT   rZ  zSliceNode.may_be_noneW  r  rU   c                    | j                   j                  |      }| j                  j                  |      }| j                  j                  |      }|j	                  |      | _         |j	                  |      | _        |j	                  |      | _        | j                   j
                  r:| j                  j
                  r$| j                  j
                  rd| _        d| _        | S r  )r   rX  r   r   r9  r   r  )rY   rv   r   r   r   s        rT   rX  zSliceNode.analyse_typesZ  s    

((-yy&&s+yy&&s+--c2
++C0	++C0	::  TYY%9%9dii>R>R"DO DLrU   z Constructing Python slice objectc                     | j                   S rN   r"  rX   s    rT   r  zSliceNode.calculate_result_codeh  r#  rU   c                    | j                   rht        | j                  | f      }|j                  d|      | _        |j                  | j                        }|y |j                  | j                         |j                  | j                         d| j                  j                         d| j                  j                         d| j                  j                         d|j                  | j                         | j                        	       | j                  |       | j                   r| j!                  |       y y )Nr  	dedup_keyz = PySlice_New(r1  r  )r   r   r   r  r  r  r  r   r   r  r   r   r   r   r   r  r  )rY   r   r{  s      rT   r  zSliceNode.generate_result_codek  s    ??&tyy4':I#00I0ND33D4D4DED|MM$((#



$$&		##%		##%''txx@B	C 	T"??!!$' rU   N)r[   r\   r]   r   r   r!   r   r  r2  r<  rZ  rX  r  r  r  rW   rU   rT   r  r  <  s=     )HHDG'-
 5K (rU   r  c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	rK  r   c                     t        | j                  j                  | j                  j                  | j                  j                        | _        y rN   ro  rX   s    rT   r2  z&SliceIntNode.calculate_constant_result  rp  rU   c                    | j                   j                  |      }| j                  j                  |      }| j                  j                  |      }	 t	        |||      S # t
        $ r}| j                  |       Y d }~y d }~ww xY wrN   rr  rs  s         rT   r<  zSliceIntNode.compile_time_value  rt  ru  c                      yr  rW   rX   s    rT   rZ  zSliceIntNode.may_be_none  r  rU   c                    | j                   j                  |      | _         | j                  j                  |      | _        | j                  j                  |      | _        | j                   j                  s | j                   j                  |      | _         | j                  j                  s | j                  j                  |      | _        | j                  j                  s | j                  j                  |      | _        | j                   j                  r:| j                  j                  r$| j                  j                  rd| _        d| _        | S r  )r   rX  r   r   r   rN  r   r  r   s     rT   rX  z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rU   c                      y rN   rW   rX   s    rT   r  z"SliceIntNode.calculate_result_code  r   rU   c                     | j                   | j                  | j                  fD ]-  }t        |t              s|j
                  j                          / y rN   )r   r   r   r   r  r   r  )rY   r   r  s      rT   r  z!SliceIntNode.generate_result_code  s;    DIIdii/ 	A!Y'	rU   N)
r[   r\   r]   r  r2  r<  rZ  rX  r  r  rW   rU   rT   rK  rK    s'     G'-"rU   rK  c                   L    e Zd ZdZd Zd Zd Zd ZddZd Z	d Z
d	 Zd
 ZdZy)CallNodeNc                 @   | j                   }|j                  |      }t        |t              rt	        j
                  |j                        S |t        u r||j                  rQ|j                  j                  |      }|j                  r*t        j                  ||j                        }|t        ur|S t        |dd       }||j                  xs |}|j                   r|j"                  }|j$                  rt        | j                   dd       rt'        | d      r| j(                  D cg c]  }|j                  |       }}| j                   j*                  j-                  ||      }	|	r0|	j                  }|j                   r|j"                  }|j.                  S |j.                  S |t0        u r|j2                  r|j*                  r|j*                  j                  r|j*                  j                  }|j4                  r|S |j                  rT|j*                  j6                  }
|
dk(  rt        j8                  S |
dk(  rt        j:                  S |
t        j<                  v r|S | j                   j?                  |      }|r|j@                  s|jB                  r|S t        S c c}w )Nr   r   r   re  )"r?  r   r   r  r   r  r  r   rs  r<  r  r   "find_return_type_of_builtin_methodr=  r
  r   r  r  rq  rL  r   r   best_function_matchr  r   r   r  rt   r;  rB  #types_that_construct_their_instancer  is_struct_or_unionr  )rY   rv   r?  r4  method_obj_typeresult_typer   r   	arg_types
func_entry	func_names              rT   r   zCallNode.infer_type  s+   =='',	h,&&x':':;;&$$"*,,"9"9#">"22")"L"L_^f^p^p"qK".8**Hgt4E !JJ3)	!++I!!t}}gt4v9N<@IIFSS^^C0F	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   &Jc                 8    | j                   j                  |      S rN   )r?  rl  r   s     rT   rl  zCallNode.type_dependencies  s     }}..s33rU   c                      yr  rW   rX   s    rT   rS  zCallNode.is_simple  s    
 rU   c                    | j                   | j                   S | j                  j                  }|t        u rv| j                  j                  r`| j                  j
                  }|j                  j                  ry|j                  j                  r|j                  t        j                  v ryt        j                  |       S r  )may_return_noner?  r   r   r   r   r  r  rt   r   r  r   rZ  )rY   r4  r   s      rT   rZ  zCallNode.may_be_none  s    +'''MM&&		!dmm&;&;MM''Ezz++

**JJ'"M"MM##D))rU   c                 x   t         | _        ||j                  }|j                  r|j                  }|t        j
                  u r|r|j                  r|j                  t        j                  v rot         | _	        d| _
        |j                  dk(  r+t        j                  | _        t        j                  | _	        y t        j                  |j                     | _        y |j                  r.|j                  j                  | _        t         | _	        d| _
        y y |j                  r|j                   j                  j"                  rv|j                   j                  }t	        j$                  ||j&                        }|t         u | _
        |j(                  r|| _        y |j*                  r|j*                  | _        y y y y )NFr   )r   r   r   r   r   r   r  rt   r  r.  r  r   r;  builtin_typesr  rs  r<  r  r  r=  rs   r   )rY   r?  r4  r   r  r  s         rT   set_py_result_typezCallNode.set_py_result_type  sZ   "	 INNEG---e..5::AlAl3l$2!',$::( * 8 8DI(2(@(@D% ' 5 5ejj ADI$$ %//44	$2!',$ % ""x||'8'8'H'H&ll//O!DD_V^VhVhiK#..#@D &&'	,,'77	 - (I"rU   c           
      B   | j                   j                  |      }|r|j                  r| j                         \  }}g }t	        ||j
                  j                        D ]K  \  }}|j                  t        |j                  t        |j                  |j                        |             M |r||j                  z  }t        | j                  |      }|j                  |      j                  ||      }|S |r |j                   r| j"                  D cg c]  }|j                  |       c}| _        |j
                  j%                  d      }	|	sDt'        | j                   j                  d| j                   j                  z         t(        | _        | S t-        | j                   j                  |	j*                        | _         |	| j                   _        | j                   j1                  |j3                                | j5                  |       || _        | S yyc c}w )z4
        Returns a replacement node or None
        r;  keyr   key_value_pairsz<init>z'no constructor found for C++  type '%s'N)r?  r  r  explicit_args_kwdsr  rN  r  r  DictItemNoder   r  rt   r  DictNoderX  r  r  r   rE  r   r3   r   r  r   r  r  analyse_c_function_call)
rY   rv   r   r   r  r  r   memberr   r  s
             rT   analyse_as_type_constructorz$CallNode.analyse_as_type_constructor%  s    }},,S1D++002JD$E"4)?)?@ lV\#''{377RXR]R]7^fijkl---DHHe<D%%c*44T3?DKd''<@IIGS#++C0GDI**++H5Kdmm'')RUYUbUbUgUg)gh&	,T]]->->@P@PQDM"-DMMMM##D$?$?$AB((-DIK (TGs   Hc                 b    | j                   j                  }|j                  r|j                  }|S rN   )r?  r   r  r  rY   r4  s     rT   function_typezCallNode.function_typeC  s-     MM&&	!++IrU   c                 .    | j                   j                  S rN   )r   r  rX   s    rT   r  zCallNode.is_lvalueM  s    yy%%%rU   c                     | j                         }|j                  r| j                          y |j                  st	        |dd      s| j                          y y y )Nr   F)r  rs   r  r  r
  )rY   rv   r4  s      rT   r  zCallNode.nogil_checkP  sJ    &&(	  NN##GIw,NNN -O#rU   zCalling gil-requiring functionrN   )r[   r\   r]   r  r   rl  rS  rZ  r  r  r  r  r  r  rW   rU   rT   r  r    s?     O.`4
*8B<& 3KrU   r  c                        e Zd Zg dZdZdZdZdZdZdZ	dZ
dZd Zd Zed        Zd Zd Zd	 Zd
 Zd Zd Zd Z fdZd Z xZS )rF  )rY   coerced_selfr?  r   r  NFc                     | j                   j                  |      }| j                  D cg c]  }|j                  |       }}	  || S c c}w # t        $ r}| j	                  |       Y d }~y d }~ww xY wrN   )r?  r<  r   rV  r@  )rY   r;  r?  r   r   r?  s         rT   r<  z!SimpleCallNode.compile_time_valueq  sp    ==33D98<		B&&t,BB	-T?" C  	-))!,,	-s   A
A 	A3A..A3c                 <   | j                   j                  r | j                   j                  j                  r| j                   j                  }t        j                  |      st        j                  |      r|j                  }| j                   j                  j                  }|r|j                  nt        |j                        j                  }t        j                  ||      r.| j                  D cg c]  }|j                   }} || | _        y y y y y c c}w rN   )r?  rs  r<  r   r   r%   	isbuiltinismethodr[   r   rt   __self__r   is_safe_compile_time_methodr   )rY   methodr   object_typeobject_type_namer   r   s          rT   r2  z(SimpleCallNode.calculate_constant_resulty  s    ==%%$--*;*;*F*F]]22F  (G,<,<V,D$oo"mm//447B;#3#3V__H]HfHf 667GU;?99ECC//EDE+14=D( V -E +G% Fs   5Dc                     |j                   }|j                  |j                        }|sJ d|d|j                         t	        ||j                  ||j
                        } | |||g      }|S )NzGetter not found in scope r>  )rt   r   r   r>  )rN  r  rt   r  r
  r   )rR   r   r<  r   property_scopegetter_entryr?  r   s           rT   for_cpropertyzSimpleCallNode.for_cproperty  sg     %11%**=j>SaSiSijjCejj<K\K\]36rU   c                 4   | j                   j                         }|dk(  rt        | j                        dk7  r!t	        | j                  j
                  d       y | j                  d   j                  |      }|s$t	        | j                  d   j
                  d       y t        j                  |      S |dk(  rbt        | j                        dk7  r t	        | j                  j
                  d       | j                  d   j                  |      }|j                  S y )Nr  r,   zonly one type allowed.r   zUnknown typetypeof)r?  r\  r   r   r   r   r  r   r  rX  r   )rY   rv   r  r   operands        rT   r  z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<<	 rU   c                     | j                   d fS rN   r   rX   s    rT   r  z!SimpleCallNode.explicit_args_kwds  s    yy$rU   c                    | j                   r| S d| _         | j                  |      x}|S d| j                  _        | j                  j	                  |      | _        | j                  }|j
                  rM|j                  rA|j                  j                  r+|j                  | _	        t        | j                        |_        | j                         }d| _        t        |      r|j                  rt        |      rd}t!        | j"                  | j$                        | _        | j&                  j	                  |      | _        | j&                  j$                  D ]  }|t)        |      z  } t+        |      | _        | j                  rm|j-                  t/        |             t0        j3                  | t5        |      | j&                  t7        t9        || j&                  j$                                    S |j:                  rwt!        | j"                  | j$                        | _        | j&                  j	                  |      j=                  |      | _        d | _        | j?                  ||       d| _         | S | j$                  D cg c]  }|j	                  |       c}| _        | jC                  |       |jD                  dk(  rd| _         | S c c}w )NTr,   Fr  )function_cnamer  r   r   )#analysedr  r?  r|  rX  rs  r   
is_cmethodr<  rY   r  r  is_numpy_call_with_exprsrB   rp  rG   rF  r   r   r  rE   re  add_include_filerH   NumPyMethodCallNoderg  rI   rJ   r?   rs   r9  r  r  r  r   )rY   rv   as_type_constructorr?  r4  has_pythran_argsr   s          rT   rX  zSimpleCallNode.analyse_types  sJ   ==K#'#C#CC#HHU&&"#33C8==  X^^8Q8Q !DI$TYY/HL&&(	(-%3H$?$?/9#&txx		BDN!^^99#>DN~~** K $Ec$JJ K,01A,BD)((  !>x!HI&00.x8.. !28T^^=P=P!QR	 1   ""&txx		BDN!^^99#>QQRUVDNDI##Hi8DL  =AIIGS#++C0GDI((-((C/# Hs   Kc           
         | j                   j                  }|t        u rt        | _        y |j                  r[|j                  rO| j
                  r6| j
                  j                  j                  rt        | j                  d       | j                  }n3| j
                  r| j
                  g| j                  z   }n| j                  }|j                  rN| j                   j                  j                  j                  d      }|t        j                  | _        d| _        y t        | j                   d      r| j                   j                   }nO| j                   j"                  r7| j                   j$                  r!| j                   j                  j                   }nd }|r	 |j'                  ||D cg c]  }|j                   c}d|D cg c]  }|j)                          c}      }d|_        |j                  s|| j                   _        |j                  | j                   _        | j1                         }nTd }| j1                         }|j                  s6t        | j                  d|z         t        j                  | _        d| _        y t3        |j                        }	|	|j4                  z
  }
t3        |      }|j4                  r|
|k7  rd| _        d| _        |r|j:                  r|j                  r|j                  s|j                  d	   }|d	   }|j<                  r| j
                  rX| j
                  j?                  d
jA                  t3        |jB                        dk  rdnd      d|jB                  g      | _        n3|j?                  d|jB                  |j                  jB                  g      }| j
                  r[|jD                  rtG        | j
                        }ntI        | j
                        }|jK                  |j                  |      x}| _&        n_|j                  jN                  rI|jK                  |j                  |      }|j                  jN                  rtQ        |tR              rd|_*        ||d	<   d}tW        tY        |	|            D ]  }|j                  |   }|j                  }||   jK                  ||      }|j<                  r|j?                  d      }|j[                         r|d	kD  r`d}n]|j                  j\                  rG|j^                  s;|d	k(  r| j
                  n)|ja                         rn|d	kD  rd}|jc                  |      }|||<    tW        |	|      D ]  }||   }|j                  j\                  r}|j                  td        u rt        jf                  }n|j                  ji                         }|'t        | j                  |dz
     j                  d       n|jK                  ||      x||<   }|j[                         s|d	kD  sd} |rtW        |dz
        D ]  }|d	k(  r| j
                  ||   }|ja                         r+|j                  j                  rB|j^                  r|j                  j\                  re|d	kD  s|dk(  sp| j
                  }tk        |j                  dd	        n || j                  d d  tQ        | j                   tl              r/t        jn                  | j                   jp                        | _        n|jr                  | _        | j                   jt                  s| j                   jv                  r7| j                   j                   }|r|jx                  s|jz                  rd| _        | j                  j\                  rt|        | _?        d| _        n=|j                  |j                  rd| _        n| j                  j                  rd| _        | j8                  rD| j                  j                  r.t        j                  | j                  j                        | _        |jr                  j                  r?d|j                  | j                   j                  |jr                  j                        _        |j                  dk(  r0t        |      r%|j                  t        j                  dd             |j                  d   | _N        y c c}w c c}w # t        j*                  $ rI}t-        |      }|rt        | j                  |       t        j                  | _        d| _        Y d }~y d }~ww xY w)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   r3  r  overflowcheck)Or?  r   r3   rq  is_static_methodrY   r  r   r   r   r  rN  rE  r   r  rL  r   rt  rV  r  r  NoMatchFoundr{   r  r  r   optional_arg_counthas_optional_argsr  r  not_nonera  r  rt   accept_builtin_subtypesCMethodSelfCloneNoder  r  r  r  r   r  exact_builtin_typer  minr  rs   r   rr  rQ  r   r1   default_coerced_ctyper   r  r  r  r  r   rs  r;  utility_code_definitionr   r.  r   r   r  r  CFakeReferenceTyper   rI  declare_tuple_typerJ  r   r   r   r   rn   r  )rY   rv   r4  r   overloaded_entryr   r   excr7  	max_nargsexpected_nargsactual_nargs
formal_argsome_args_in_tempsr  formal_type	arg_ctyper  s                     rT   r  z&SimpleCallNode.analyse_c_function_call  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#(<<)-.#SXX."&DH(IS(I	 =  EJ))&+#!&DMM**,IE**,I))dhh @9 LM&11	#,  	'	"Y%A%AA4y''Nl,J%&D"DL U%%)..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d'00mmJOOS988++
30O-2C*DG #s9l34 	A"*J$//Kq'##K5C""++]_!!#q5)-&%%cii6dii3--/ 1u-1*,,S1CDG7	< y,/ 	*Aq'Cxx##88|+ * : :I # > > @I$$))AaC.,,QS %(MM)S$AADGc!!#A%)"	*   <>* 6dii31g++-XX**YY388#7#7  1uQ499+@)  BC  D), 		! dmm[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$$[%<%<=UWg%hi ^^O<W /(I** c($((G,&11	#, s6   d .c<
d dd <
d e"?ee"c                 "    | j                         S rN   )c_call_coderX   s    rT   r  z$SimpleCallNode.calculate_result_code  s    !!rU   c                    | j                         }| j                  t        j                  u s|j                  sy|j
                  }g }t        t        || j
                              }t        |j
                        }||j                  z
  }t        | j
                        }|d | D ]1  \  }}	|	j                  |j                        }
|j                  |
       3 |j                  rO|j                  t        t        | j                  xs  | j                   j"                  j$                                     |j                  r(||k(  rd}nd| j&                  z  }|j                  |       | j
                  t        |      d  D ]!  }	|j                  |	j)                                # | j                   j+                         ddj-                  |      d}|S )Nr,  r  r_  rR  r1  r  )r  r   r   r3   rq  r   r  r  r   r  r#  r  r  r{   r   wrapper_callr?  r   is_unbound_cmethodopt_arg_structr  r  r  )rY   r4  formal_argsarg_list_coder   r  r  r  r  
actual_argarg_codeoptional_argsr  s                rT   r  zSimpleCallNode.c_call_code  s   &&(	99
---Y5K5KnnCTYY/0	'	"Y%A%AA499~&*?N&; 	+"J
!44Z__EH  *	+ ##  S):):)ddmm>Q>Q>d>d%e!fg''- & %(;(; ;  /))C$4$56 	?J  !;!;!=>	? "]]113TYY}5MNrU   c                 \    | j                         }|j                  |j                  dk(  ryy)Nr   FT)r  r   r   r  s     rT   r(  z#SimpleCallNode.is_c_result_required  s/    &&(	$$,	0I0IS0PrU   c                 x   | j                   }|j                  s|j                  r%|j                  j	                  |j
                         d}| j                  j                  xr | j                  j                  }| j                  r|r|j                         |v r|j                  j                  t        j                  dd             |j                  d| j                  d   j                         d| j                  d   j                  j!                         d|j#                  | j$                        d       |j                  j&                  rNt)        | j*                  j                        d	kD  s,| j*                  j                  r&| j*                  j,                  rt.        | a  |       y | j*                  j                  r| j*                  j                  d   nd }| j2                  | j4                  ||f}|D ]  }||j1                  |        |j7                  | j$                         | j8                  sJ | j;                  |       ||j                  j                  t        j                  d
d             |j                  | j                         d|j=                         d|j?                  | j                         | j$                               n|j                  j                  t        j                  dd             |j                  | j                         d|j=                         d|j=                         d|j?                  | j                         | j$                               | jA                  |       |D ]'  }||jC                  |       |jE                  |       ) y )N)abslabs__Pyx_abs_longlongCommon
Overflow.crv  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,   PyObjectCallNoArgr6  z = __Pyx_PyObject_CallNoArg(r  PyObjectCallOneArgz = __Pyx_PyObject_CallOneArg(r1  )#r?  r   rs  r   use_entry_utility_coder   r   r  r,  r  r  r   r   r   r   r   r  r   r   rs   r   r  r   rP   r  rY   r  r  r  r  r   r   r  r  r  )	rY   r   r?  abs_function_cnamesis_signed_intr   r   subexprrS   s	           rT   r  z'SimpleCallNode.generate_evaluation_code  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(C@ 	7G"006	7 	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(	)rU   c                    | j                         }|j                  r| j                  j                         }|j                  j                  t        j                  dd             |j                  | j                         d| j                  j                         d|d|j                  | j                         | j                               | j                  |       y |j                  r|j                  j                    }| j"                  rDt%        | j&                        }t%        |j&                        |j(                  z
  }|j                  j+                  |j,                  j.                  d      | _        |j                  | j0                  dt2        j4                  d	z   d
t%        | j&                        |z
  d       t7        t9        |j&                  | j&                              }||| D ][  \  }}	|j                  | j0                  d|j;                  |j<                        d
|	j?                  |j@                        d       ] g }
| j@                  j                  r0| jB                  r$|
jE                  d| j                         z         n| j@                  jF                  rH| jB                  sJ |
jE                  | j@                  jI                  | j                                      n1|jJ                  dk7  r!|jL                  }|jJ                  }|/|
jE                  |jO                  | j                         |             |r|r|
stQ        | j                  dd       }tS        jT                  | j                  |j                  jV                  |r|j<                  nd | j@                  jX                  d|xr |jZ                         |j                  j                  t        j                  dd             |
jE                  d       n|
jE                  d       | jB                  s|
rQ| j]                         }| j                         rQd| j                         z  }| jB                  r4| j@                  j                  rt_        t`        | j@                  |      }nd}|jJ                  dk(  rPtc        || j                  ||d| j@                  j                  r| j                         nd |jL                  |       nH|
r,|je                  djg                  |
      | j                        }nd}|j                  ||d|       | j@                  j                  r!| j                         r| j                  |       | j"                  r&|j                  ji                  | j0                         y y y )Nr^  r6  r_  r1  z	, NULL); Tr  r   rd  rS  rT  r}  r   r   )function_namevoid_returnis_callis_from_pxdr   r   r   r   z%s = r  z && r  )5r  rs   r  r   r   r   r   r   r   r  r?  r   r   r  rq  r  	gil_ownedr  r   r   r  r  op_arg_structr  r  r   pyrex_prefixr  r  opt_arg_cnamert   r  r   r  r  r  error_conditionr   r   exception_test_coder
  r   write_noexcept_performance_hintrN  r  defined_in_pxdr  r2   r   r   r   r  r  )rY   r   r4  r  r   r  r  r   r  r  
exc_checksexc_val	exc_checkperf_hint_entryr   r  
goto_errors                    rT   r  z#SimpleCallNode.generate_result_code  sn   &&(	  ~~//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 D*J
JJ //%33JOOD&00A C DD
 Jyy$$!!%$++-"78--||#!!$))";";DKKM"JK**c1#33%55	&%%g&A&A$++-QU&VW).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,?,?@ &C $rU   )r[   r\   r]   r   rY   r  r  r  r  r   r  r  r<  r2  r}  r  r  r  rX  r  r  r  r(  r  r  r^   r_   s   @rT   rF  rF  Z  s     IHDLILEHM-9   ".`N=`"<7)rOArU   rF  c                        e Zd ZdgZdZdZd Zy)r  r  Tc                    |j                  | j                         | j                  |       | j                  j                  J | j                  j
                  }|D ]  }|j                  |        |j                  d       |j                  d| j                         z         |j                  d| j                         d| j                         d| j                  ddj                  d |D              d		       y )
Nz.// function evaluation code for numpy functionr  rU  rV  rW  z{}(r1  c              3   <   K   | ]  }|j                           y wrN   )r&  )rf   r  s     rT   ri   z?NumPyMethodCallNode.generate_evaluation_code.<locals>.<genexpr>o  s     7Qa&&(7r  )};)r  r   r  r  r   r   r  r   r  r  r  )rY   r   r   r   s       rT   r  z,NumPyMethodCallNode.generate_evaluation_code`  s    dhh!!$'~~))11~~"" 	/C((.	/ 	

CD

/$++-?@

KKMKKMII7$77	9 	:rU   N)r[   r\   r]   r   r  r  r  rW   rU   rT   r  r  V  s     }HGO:rU   r  c                        e Zd Zg dZdZdZdZdZdZ fdZ	d Z
ed        Zedd       Zed	        Zd
efdZd Zd Zd Zd Zd Z xZS )PyMethodCallNode)r?  r  kwdictkwargs_key_value_pairsTFNc                    t        |   |fi | | j                         r"d| _        | j                  j
                  | _        | j                  r:| j                  j                  r#| j                  j                  | _
        d | _        y y y r  )rP   r  can_avoid_attribute_lookupuse_method_vectorcallr?  r<  function_objr  rr  r  r  )rY   r   kwrS   s      rT   r  zPyMethodCallNode.__init__  sn    ##**,)-D& $ 1 1D;;4;;66*.++*E*ED'DK 7;rU   c                     | j                   rt        | j                   t              sy| j                  }|j                  sy|j
                  sy|j                  ryt        j                  |      syyrY  )	r  r   r  r?  rs  
is_py_attris_special_lookupr  attribute_is_likely_method)rY   r?  s     rT   r  z+PyMethodCallNode.can_avoid_attribute_lookup  s^     ;;z$++x@==$$""%%::8D rU   c                 b    | j                   }|j                  r|j                  j                  ryyrY  )r<  r   r   r  )r  r<  s     rT   r  z+PyMethodCallNode.attribute_is_likely_method  s$    hh;;39900rU   c                     t        | t              sy| j                  ry| j                  rt	        | j
                        dkD  ryt	        | j
                        s|xs | S y)z~
        Test whether the positional args given are compatible with
        being translated into a PyMethodCallNode.
        Fr,   T)r   rF  r   r   r   r   )r  
has_kwargshas_explicit_kwargss      rT   can_be_used_for_posargsz(PyMethodCallNode.can_be_used_for_posargs  s[     /95&&%%#o.B.B*Ca*G?''( '8j.8rU   c                 ^   d}| j                   r0| j                  r"| j                  j                  j                  rd}|S | j                  ra| j                  }|j                  j                  rd}|S |j
                  r/t        t        t        ft        fd|j
                  D              }|S )zo
        Test whether the function passed is suitable to be translated
        into a PyMethodCallNode
        TFc              3   h   K   | ])  }|j                   xr t        |j                           + y wrN   )r   r   )rf   r  non_method_nodess     rT   ri   z<PyMethodCallNode.can_be_used_for_function.<locals>.<genexpr>  s4      &<" NNW:jnnFV+W'WW&<s   /2)
rs  r   r   rq  r   cf_assignmentsPyCFunctionNode	ClassNodePy3ClassNodero   )r?  may_be_a_methodr   r%  s      @rT   can_be_used_for_functionz)PyMethodCallNode.can_be_used_for_function  s       ~~(.."5"5"B"B"'  NNEzz&&"'  %%$3Y#M "% &<&+&:&:&< #< rU   rF  c                 |   | j                   r| j                  j                  |       |j                  | d| j                  j	                          d       |j                  |t               |j                  | j                  j                        S |j                  | d       | j                  j                  |       | j                  j                         s&| j                  s4| j                  j                         r| j                  j                         S |j                  j                  t        d      }| j                  j!                  |       |j                  |d| j                  j	                         d       | j                  j#                  |       | j                  j%                  |       |S )NrS  rT   = NULL;Tr  r  )r  r  r  r   r   r  r   rg  r?  r=  r  unpackrr  r  r  r  r  r  r  )rY   r   self_argr?  s       rT   generate_evaluate_functionz+PyMethodCallNode.generate_evaluate_function  sD   %%66t<JJ(3t'8'8'B'B'D&EQGHOOHn5++DMM,C,CDD

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

(DMM,C,C,EFG,,T2  &rU   c                    | j                   r7| j                  j                  |       | j                  j                  |       y | j                  j                         s&| j                  sQ| j                  j                         r7| j                  j                  |       | j                  j                  |       y |j                  |t               |j                  j                  |       y rN   )r  r  r  r  r?  r  r.  rr  r  r   r  r  rY   r   r?  s      rT   generate_dispose_functionz*PyMethodCallNode.generate_dispose_function  s    %%44T:((.]]))+DKKDMMDfDfDhMM006MM$$T*!!(N;NN''1rU   c                    | j                   s| j                  sy | j                  j                  r | j	                  | j                        rdnd}n| j                  j
                  r| j                  j                  r| j                  j                  D ]k  }|j                  }|s|j                  s|j                  j                  s6|j                  j                  j                  sW| j	                  |      sid} n d}nd}|j                  d       |j                  d|d|d       |j                  | d| d       |j                  d	| d       |j                  d
| d       |j                  |t               |j                  dt               |j                  |t        d       |j                  | d       |j                  d       |j                  d       y )Nlikelyunlikelyz#if CYTHON_UNPACK_METHODSr  z(PyMethod_Check(rb  z = PyMethod_GET_SELF(r2  zassert(z2PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx__function = 0;r   r  )r  r.  r?  rs  r  r   r   r   r<  r   rs   r   r  r   r  )rY   r   r/  space_for_selfarg_var
method_objlikely_methodr  r   s           rT   &generate_runtime_method_unpacking_codez7PyMethodCallNode.generate_runtime_method_unpacking_code  s~   %%T[[==%%(,(G(G(VH\fM]]""t}}'='="mm44 +
"U//EIINNuyy~~GaGa66u=(0+ !+&M 	

./

mZPQ

hZ4ZLCD

WXJb)*

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

+,E23

3

8rU   c                 V   |j                  | dt        |       d|j                  || j                                |j	                  |t
               t        |      D ]  \  }}|j                  j                  t        j                  u xr |j                  j                          }|j                  | j                  d|rdnd d|j                  j                          d|j                  j                          d| dt        j                    dt        |      d	z    d|d
d        y )Nz# = __Pyx_MakeVectorcallBuilderKwds(r  __Pyx_VectorcallBuilder_AddArgr  _CheckrR  r1  r   r,   r  r  )r   r   r   r   r  r   r  r  r   r   r   rZ  r  r   r   r   callargs_cname)rY   r   r   r  kwnames_temprd  keyvalue
key_is_strs           rT   generate_keyvalue_argsz'PyMethodCallNode.generate_keyvalue_args  s   

n?DZ@[?\\_&&|TXX>?A	
 	n5$%;< 	KAx!**g.B.BBe8<<KcKcKeGeJ!!0zx0PPQ<<))+,B>>++-.b.(()3t9q=/Q%		rU   c                     | j                   r| j                  rd}d}n+d}d}n&| j                  rd}d}n| j                  rd}d}nd}d	}|j                  j	                  t        j                  |d
             |S )N!PyObjectVectorCallMethodKwBuilder-__Pyx_Object_VectorcallMethod_CallFromBuilderPyObjectFastCallMethod__Pyx_PyObject_FastCallMethodPyObjectVectorCallKwBuilder'__Pyx_Object_Vectorcall_CallFromBuilderPyObjectFastCall__Pyx_PyObject_FastCallDict__Pyx_PyObject_FastCallr6  )r  r  r  r   r   r   r   )rY   r   rt   rT  s       rT   select_utility_codez$PyMethodCallNode.select_utility_code+  s    %%**:G/7((0D=E[[%D1E%D-E))##D*<=	?rU   c                    |j                  | j                         | j                  |       | j                  }| j                  }|j
                  j                  t        d      }| j                  ||      }| j                  j                  }| j                  j                  J |D ]  }|j                  |        |r|D ]  }|j                  |        n|r|j                  |       |j
                  j                  t        j                  d      }	|j                  |	 d| j                   rdnd d       | j#                  |||	|       | j%                  |      }
|j                  d	       |rd
j'                  d |D              nd}|rdt)        |       dnd}|j                  dt*        j,                   d|rt)        |      dz   ndd| d| d
| d
       d}|r6|j
                  j                  t        d      }| j/                  ||||       n|r|j1                         }|j                  | j1                          d|
 d| d
t*        j,                   d|	 dt)        |      dz   dd|	 d| j                   rdn|	 d|rd
nd | d       |j3                  |t               ||	fD ]  }|j
                  j5                  |        |D ]$  }|j7                  |       |j9                  |       & |r[|D ]$  }|j7                  |       |j9                  |       & |j;                  |t               |j
                  j5                  |       n$|r"|j7                  |       |j9                  |       | j=                  ||       |j                  |j?                  | j1                         | j                               | jA                  |       |j                  d       y )NTr  FrS  r  r  rT  )r/  r9  r:  r  r1  c              3   <   K   | ]  }|j                           y wrN   r   r   s     rT   ri   z<PyMethodCallNode.generate_evaluation_code.<locals>.<genexpr>j  s     >#cmmo>r  r  z + ((CYTHON_VECTORCALL) ? z : 0)r  
PyObject *r|  r,   r7   r  ] = {rX  rQ  r   z, (r  z) | (z&*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET)r2  r   )!r  r   r  r  r  r  r  r   r0  r  r   r   r  r   r  r   r  r<  rO  r  r   r   r@  rD  r  rx  r  r  r  r  r3  r   r  )rY   r   r  r  r/  r?  r   r   rB  space_for_selfargfunction_caller	args_listextra_keyword_argskeyword_variabletmpkw_nodes                   rT   r  z)PyMethodCallNode.generate_evaluation_codeB  s   dhh!!$'!%!<!<>>//4/P224B~~""~~))11 	/C((.	/ "2 811$78++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[;\''d4JL\]%}}

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

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

3rU   rj  )r[   r\   r]   r   r  r  r  r  r  r  r  r  r  r"  r+  r{   r0  r3  r<  rD  rO  r  r^   r_   s   @rT   r  r  r  s     MHG!F!L(    "  ,C .	2!H(.WrU   r  c                   6    e Zd ZddgZdZeZdZdZd Z	d Z
d Zy)InlinedDefNodeCallNoder   r  r,   Nc                     | j                   j                  }|j                  s|j                  ryt	        |j
                        t	        | j
                        k7  ry|j                  ryyrY  )r?  def_nodestar_argstarstar_argr   r   num_kwonly_argsr  s     rT   can_be_inlinedz%InlinedDefNodeCallNode.can_be_inlined  sP    ==))	!7!7y~~#dii.0$$rU   c                    | j                   j                  |      | _         | j                  D cg c]  }|j                  |       c}| _        | j                  j                  }t        | j                        }d}t        |      D ]  }|j                  |   j                  }| j                  |   j                  ||      }|j                         r|dkD  rNd}nK|j                  j                  r5|j                  s)|j                         rn|dkD  rd}|j                  |      }|| j                  |<    |rt        |dz
        D ]{  }| j                  |   }|j                         r#|j                  j                  r:|j                  r|j                  j                  r]|dkD  sct        |j                   dd        | S  | S c c}w )NFr   Tr,   r  )r  rX  r   r?  r_  r   r  r   r  r  rs   r   rr  rQ  r  r   r   )rY   rv   r   r4  r  r  r  r  s           rT   rX  z$InlinedDefNodeCallNode.analyse_types  s   !//==cB8<		Cc'',C	MM**	499~ #|$ 	A#..+00K))A,((c:C!!#q5)-&%%cii++- 1u-1*,,S1CDIIaL'	*  <>* iil++-XX**YY388#7#7  1u)  BC  D'& i Ds   Gc                    | j                   j                         }| j                  j                  j                  s|j                  d       |j                  d       |j                  dt        j                   d| d       |j                  |j                  t        j                   d| j                               |j                  d       |j                  dt        j                   d| d       |j                  d	       t        j                  }|g}| j                  j                  }t        | j                  |j                        D ]e  \  }}|j                  j                  r+|j                  |j                  |j                               G|j                  |j!                                g d
j#                  |      }|j                  | j!                         d| j                  j                  j$                  j&                  d|d|j)                  | j!                         | j                               | j                  j                  j                  s|j                  d       | j+                  |       y )Nr  ##if CYTHON_COMPILING_IN_LIMITED_APIrS  z = PyCFunction_GetSelf(r2  z == NULL && PyErr_Occurred()r  z = PyCFunction_GET_SELF(r  r1  rS  rR  r  r   )r  r   r?  r_  is_cyfunctionr   r   r  r   r   r  r   r   rs   r  r  r  r  r   pyfunc_cnamer   r  )rY   r   	self_coder  r4  r   	proto_args          rT   r  z+InlinedDefNodeCallNode.generate_result_code  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"rU   )r[   r\   r]   r   r  r   r   r?  r  rc  rX  r  rW   rU   rT   r]  r]    s2     (HGDHM7r%#rU   r]  c                   *    e Zd Zg ZddZd Zd Zd Zy)PythonCapiFunctionNodeNc                 :    t         j                  | |||||       y )N)rt   r   r   r;  r   r  )rY   r   py_namer   r4  r;  s         rT   r  zPythonCapiFunctionNode.__init__  s#    $'(| 	 	ErU   c                     | S rN   rW   r   s     rT   rX  z$PythonCapiFunctionNode.analyse_types  r  rU   c                 h    | j                   r&|j                  j                  | j                          y y rN   )r;  r   r   r  s     rT   r  z+PythonCapiFunctionNode.generate_result_code  s*    --d.?.?@ rU   c                     | j                   S rN   r  rX   s    rT   r  z,PythonCapiFunctionNode.calculate_result_code"  r  rU   rN   )r[   r\   r]   r   r  rX  r  r  rW   rU   rT   rl  rl    s    HEArU   rl  c                       e Zd ZdZ	 ddZy)PythonCapiCallNodeFNc                     |j                   | _        | j                  | _        t        |||||      | _        t        j                  | |fi | y )N)r;  )r  r   r.  rl  r?  rF  r  )rY   r   r  r4  r;  ro  rd  s          rT   r  zPythonCapiCallNode.__init__/  sJ    ))	 II.-')
 	c4V4rU   r  )r[   r\   r]   r  r  rW   rU   rT   rt  rt  &  s     O /3	5rU   rt  c                   6     e Zd ZddgZdZ fdZd Zd Z xZS )CachedBuiltinMethodCallNoder<  r   Tc                 l    t         |   |j                  ||||j                  |j                         y )N)r<  r   r   r  r   )rP   r  r   r  r   )rY   	call_noder<  r   r   rS   s        rT   r  z$CachedBuiltinMethodCallNode.__init__A  s3    MM4%55	 	 	!rU   c                 \    | j                   | j                   S t        j                  |       S rN   )r  r   rZ  rX   s    rT   rZ  z'CachedBuiltinMethodCallNode.may_be_noneH  s+    +'''##D))rU   c           
          | j                   j                  j                  }| j                   j                         }| j                  D cg c]  }|j                          }}|j
                  j                  |j                  d      ||| j                  |      }|j                  | j                         d|d|j                  | j                         | j                               | j                  |       y c c}w )Nr  rS  r  )r<  r   typeptr_cnamer   r   r   cached_unbound_method_call_coder  r   r   r  r   r   r  )rY   r   
type_cname	obj_cnamer   r   	call_codes          rT   r  z0CachedBuiltinMethodCallNode.generate_result_codeM  s    XX]]00
HH&&(	+/995C55$$DD%%b)z4#3#3T;	 	

KKM9##DKKM488<
 	 	T" 6s   	C;)	r[   r\   r]   r   r  r  rZ  r  r^   r_   s   @rT   rw  rw  ;  s"     vHG!*
#rU   rw  c                   T    e Zd ZeZg dZej                  Zd Z	d Z
d Zd Zd Zd Zy)	GeneralCallNode)r?  r  r  c                    | j                   j                  |      }| j                  j                  |      }| j                  j                  |      }	  ||i |S # t        $ r}| j                  |       Y d }~y d }~ww xY wrN   )r?  r<  r  r  rV  r@  )rY   r;  r?  r  r  r?  s         rT   r<  z"GeneralCallNode.compile_time_valuei  sx    ==33D9..AA$G((;;DA	-_=== 	-))!,,	-s   A 	A?$A::A?c                 J   | j                   j                  r| j                   j                  j                  r| j                   j                  }t        j                  |      st        j                  |      r|j                  }| j                   j                  j                  }|r|j                  nt        |j                        j                  }t        j                  ||      r:| j                  j                  }| j                  j                  } ||i || _        y y y y y rN   )r?  rs  r<  r   r   r%   r  r  r[   r   rt   r  r   r  r  r  )rY   r  r   r  r  r   rd  s          rT   r2  z)GeneralCallNode.calculate_constant_resultr  s    ==%%$--*;*;*F*F]]22F  (G,<,<V,D$oo"mm//447B;#3#3V__H]HfHf 667GU//??D!..>>F+14+B6+BD( V -E +G%rU   c                     | j                   r| j                   j                  r| j                  j                  st	        | j
                  d      | j                  j                  | j                   fS )Nz0Compile-time keyword arguments must be explicit.)r  rr  r  r   r   r   r   rX   s    rT   r  z"GeneralCallNode.explicit_args_kwds  s]    d&7&7&G&G((@@txxBD D##(($*;*;;;rU   c                    | j                  |      x}|S | j                  j                  |      | _        | j                  j                  j                  s| j                  j                  j
                  rt        | _        | S t        | j                  d      r| j                         }||| ur|j                  |      S | j                  j                  j                  r!| j                  j                  |      | _        n<|| u rt        | j                  d       n!n | j                  j                  |      | _        | j                  r | j                  j                  |      | _        | j                  j                  |      | _        | j                  j                  |      | _        | j!                  | j                         d| _        | S )Nr   zRNon-trivial keyword arguments and starred arguments not allowed in cdef functions.r,   )r  r?  rX  r   rs   r  r3   rL  map_to_simple_call_noder   r  r9  r   r   r  r  r  r  )rY   rv   r  r   s       rT   rX  zGeneralCallNode.analyse_types  sv   #'#C#CC#HHU&&33C8}}!!--}}!!**&	t}}g.335#D(8--c22]]((44$(MM$D$DS$IDMT\$((EF
  $ @ @ E $ 1 1 ? ? DD#33AA#F  33C8 	.rU   c           	      N	   t        | j                  t              s| S | j                  j                  s| S | j
                  }t        |dd      }|s| S |j                  }|j                  r|j                  }|j                  s| S | j                  j                  }| j                  }|j                  }|j                  r|dd }t        |      t        |      kD  r.t        | j                  dt        |      t        |      fz         y|dt        |       D ch c]  }|j                   r|j                    }}|t        |      d }	d}
t#        |      }t%        |      }d}|j&                  D ]H  }|j(                  j*                  }||v rt        |j                  d|z         d}|j-                  |       J t/        |	|j&                        D ]]  \  }}|j(                  j*                  }|j                   |k(  r2|j-                  |       |
dz  }
|j1                  |j*                         ] n dd	lm}m} g }t        |j&                        |
kD  r|t        |      d }	t9        |j&                        D ci c]*  \  }}|j(                  j*                  |t        |      z   |f, }}}d}|	D ]  }|j                   }||vr|s|}|r+|j:                  r| c S t        | j                  d
|z          y||   \  }}|j-                  |       |
dz  }
|j*                  j=                         r|j1                  |j*                          ||j*                        }|j=                         sJ |j1                  |       |j1                  ||f        |rg }g }|d   d   }|D ]T  }||u r nN|j=                         r|j1                  |       + ||      }|j1                  |       |j1                  |       V |r|}|t?        |      D cg c]  \  }}|	 c}}z   }|j&                  D ]8  }|j(                  j*                  }||vsd}t        |j                  d|z         : |rytA        | j                  ||      }|ddd   D ]  } |||      } |S c c}w c c}}w c c}}w )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)r  
LetRefNodez(C function call is missing argument '%s'r  z/C function got unexpected keyword argument '%s'r>  )!r   r  rF  r  rr  r?  r
  r   r  r  rq  r   r  r   r   r   rt   r  r  r  r  r   r  r  r  r%  r  r  r  r  rS  r  rF  )rY   r?  r   r  pos_argsrd  declared_argsr   matched_argsunmatched_argsmatched_kwargs_countr   seen
has_errorsrt   decl_argr  r  tempsr  keywordsfirst_missing_keywordr   r  
final_args	new_tempsfirst_temp_arg	arg_valuer   s                                rT   r  z'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 HH
 
 's8}~6 H~ < 
)) 	C77==Dt|cgg;dBC!
HHTN	 !1G1GH 	MHc77==D}}$  &$)$CII&	 	@v%%&)==*3t9:6N&/0F0F&GI"As #h-'== IH I$(!* .}}x'004-*((
  $$(( %46K%L M#D>S  &$)$99&&(KK		*%cii0D>>++KK%LL#t-7.: 
	!&q"!% 0I N2 **,")))4))4!((."))$/0 %D!ve}$Feac$FF )) 	C77==D<'!
cggG		  dhhE$B$K 	4D'd3D	4Q
HI` %Gs   R7/R
R!c                    | j                   j                  ry | j                  r| j                  j                         }nd}|j                  j                  t        j                  dd             |j                  | j                         d| j                  j                         d| j                  j                         d|d|j                  | j                         | j                        	       | j                  |       y )Nr  r^  r6  r_  r1  r  )r   r  r  r   r   r   r   r   r   r  r?  r  r   r   r  )rY   r   rd  s      rT   r  z$GeneralCallNode.generate_result_code3  s    99v&&002FF))+*A*A.+0 	1

'')$$..0''txx@B	C 	T"rU   N)r[   r\   r]   r   r   r   r/   r  r  r<  r2  r  rX  r  r  rW   rU   rT   r  r  [  s9     D>H..K-C<@JX#rU   r  c                   P    e Zd ZdgZdZd Zd Zd Zd Ze	j                  ZdZd Zy	)
AsTupleNoder   r,   c                 L    t        | j                  j                        | _        y rN   )r   r   r   rX   s    rT   r2  z%AsTupleNode.calculate_constant_resultN  s    $TXX%=%=>rU   c                     | j                   j                  |      }	 t        |      S # t        $ r}| j	                  |       Y d }~y d }~ww xY wrN   )r   r<  r   rV  r@  )rY   r;  r   r?  s       rT   r<  zAsTupleNode.compile_time_valueQ  sF    hh))$/	-: 	-))!,,	-s   
( 	AAAc                     | j                   j                  |      j                  |      | _         | j                   j                  t        u r| j                   j                  d      S t        | _        | S Nr  )r   rX  r9  r   r   ra  r   s     rT   rX  zAsTupleNode.analyse_typesX  sU    88))#.AA#F88==J&88--.QRR	rU   c                      yr  rW   rX   s    rT   rZ  zAsTupleNode.may_be_none_  r  rU   Constructing Python tuplec                 F   | j                   j                  t        t        fv rdnd}|j	                  | j                         d|d| j                   j                         d|j                  | j                         | j                               | j                  |       y )N__Pyx_PySequence_TuplePySequence_TuplerS  rR  r  )
r   r   r   r   r   r  r   r   r   r  )rY   r   rT  s      rT   r  z AsTupleNode.generate_result_codee  sw    ,0HHMMnj=Y,Y(_q

txx))+''txx@B	C
 	T"rU   N)r[   r\   r]   r   r  r2  r<  rX  rZ  r/   r  r  r  r  rW   rU   rT   r  r  E  s9     wHG?- ..K-K#rU   r  c                   R    e Zd ZdgZdZeZdZd Zd Z	d Z
d Zd Zd	 Zd
Zd Zd Zy)MergedDictNoder  r,   Tc                 
   i }| j                   }| j                  D ]_  }|j                  rd |j                  D        }n|j                  j                         }|D ]  \  }}|r||v rt        d|z        |||<     a || _        y )Nc              3   R   K   | ]  \  }}|j                   |j                   f ! y wrN   r   )rf   r  r   s      rT   ri   z;MergedDictNode.calculate_constant_result.<locals>.<genexpr>  s/      A'S% --u/D/DE As   %'$duplicate keyword argument found: %s)reject_duplicatesr  rr  r  r   r  r   )rY   r  r  r   r  r  r   s          rT   r2  z(MergedDictNode.calculate_constant_resulty  s     22%% 	$D##A+/+?+?A ,,224# $
U$$%Kc%QRR#s$	$  &rU   c           	         i }| j                   }| j                  D ]  }|j                  r?|j                  D cg c]'  \  }}|j	                  |      |j	                  |      f) }}}n|j	                  |      j                         }	 |D ]  \  }}|r||v rt        d|z        |||<      |S c c}}w # t        $ r}| j                  |       Y d }~d }~ww xY w)Nr  )	r  r  rr  r  r<  r  r   rV  r@  )	rY   r;  r  r  r   r  r   r  r?  s	            rT   r<  z!MergedDictNode.compile_time_value  s     22%% 	1D## ,0+?+?A'S% 0068P8PQU8VW A A //5;;=1"' (JC(SF]()ORU)UVV"'F3K(	1 A  1--a001s   ,B0	#B66	C?CCc                      yr  rW   r   s     rT   rl  z MergedDictNode.type_dependencies      rU   c                     t         S rN   r   r   s     rT   r   zMergedDictNode.infer_type  s    rU   c                     | j                   D cg c]1  }|j                  |      j                  |      j                  d      3 c}| _         | S c c}w )Nz1argument after ** must be a mapping, not NoneType)r  rX  r9  ra  rY   rv   r   s      rT   rX  zMergedDictNode.analyse_types  sX    
 ((	
  c"55c:LLCE
 
s   6Ac                      yr  rW   rX   s    rT   rZ  zMergedDictNode.may_be_none  r  rU   Constructing Python dictc                    |j                  | j                         | j                  |       t        | j                        }t        |      }|j                  |       |j                  t        ur"|j                  d|j                         z         |j                  rW|j                  |       |j                  | j                         d|j                         d       |j                  |       nl|j                         r|j                  d       |j                  d|j                          d|j!                          d       |j                  | j                         d|j                         d       |j                  |       |j                  d       |j                  d	       |j                  d
       |j                  | j                         d|j                         d|j#                  | j                         |j                               | j%                  |       |j'                  |       |j                         r|j                  d       |j                  t        ur|j                  d       |j(                  j+                  t-        j.                  dd             |j                  | j                         d|j                         d|j#                  | j                         | j                               | j%                  |       |j'                  |       |j                  d       |j1                  |       t3               }|D ]  }|j                  rj|j4                  D ]X  }|j                  |       | j6                  r|j                  d| j                         d|j8                  j                         d       |j;                  d       |j                  d|j8                  j                         d|j=                  | j                               |j                  d       |j?                  |j8                  j                  d| j                         d|j8                  j                         d|j@                  j                         d       |j'                  |       |j1                  |       [ {|j                  |       | j6                  rQ|j;                  d       |j?                  |j                  d| j                         d|j                         d       n|j;                  d       |j                  d| j                         d|j                         d       |j                  d|j                         z         |j                  |j=                  |j                               |j                  d       |j'                  |       |j1                  |        tC        |      D ]1  }|j(                  j+                  t-        j.                  |d             3 y )Nz$if (likely(PyDict_CheckExact(%s))) {rS  rT  zB#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_APIz!if (__Pyx_IS_UNIQUELY_REFERENCED(r1  r  z} elser  r  z = PyDict_Copy(r  r   r  r  r6  z6 = __Pyx_PyObject_CallOneArg((PyObject*)&PyDict_Type, if (unlikely(PyDict_Contains(rb  RaiseDoubleKeywords+__Pyx_RaiseDoubleKeywordsError("function", PyDict_SetItem(r  MergeKeywordsz__Pyx_MergeKeywords(RaiseMappingExpectedzif (unlikely(PyDict_Update(z	) < 0)) {zVif (PyErr_ExceptionMatches(PyExc_AttributeError)) __Pyx_RaiseMappingExpectedError(%s);FunctionArguments.c)"r  r   r  r  r  r  r  r   r   r   r   rr  r  r  r  r  rR  r   r  r  r   r   r   r   r  r  r  r  r  r  r   r  r   r  )rY   r   r   r   helpersr   helpers          rT   r  z'MergedDictNode.generate_evaluation_code  s   dhh!!$'D%%&Dz%%d+99I%JJ=~~'( ) %%d+JJT[[]DNN4DEF..t4""$ 

_`

>t~~?O>PPRSWSlSlSnRootuv

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(#)& --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 Wo 	fF--k.E.EfNc.de	frU   c                 H    | j                   D ]  }|j                  |        y rN   )r  r  rY   r   r   s      rT   r  zMergedDictNode.annotate  s#    %% 	 DMM$	 rU   N)r[   r\   r]   r   r  r   r   r  r2  r<  rl  r   rX  rZ  r  r  r  rW   rU   rT   r  r  o  sN    
 HGD&$( -K\f| rU   r  c                      e Zd ZdZdgZdZdZdZdZdZ	dZ
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd)dZd Zd Zd Zd Zd Zd Zd Zd Zd*dZd+dZd Zd ZdZ d Z!d Z"d Z#d  Z$d! Z%d" Z&d# Z'd$ Z(	 	 d,d%Z)d-d&Z*d' Z+d( Z,y).rG  r,   r<  Nr   TFc                     t        | j                  t              r1| j                  j                  r| j                  dk(  s| j                  S | j                  j                         }|r|d| j                  S y )Nparallelr   )r   r<  r
  r  r=  r\  )rY   cys     rT   r\  z!AttributeNode.as_cython_attribute0  sZ    txx*))*,>>!XX))+ $..11rU   c           	         |t         u r| j                  }|rC|j                  r7|j                  r+d| _        |j                  | _        | j                  |       | S |rU|j                  rH| j                  j                  t        j                  ur!ddl
m}m}  || j                  | j                  j                        }| j                  j                  |_        || _        t        j                  | ||      }t!        j"                  dd      }t%        j&                  t$        j                   t%        j(                  dt$        j                   d       t%        j(                  dt$        j                   d       g      }	t+        | j,                  d|	||g|	      }
 |||
      }|j/                  |      S t        j                  | ||      S )
Nr,   r  r  PyMethodNew2Argr6  r  rY   __Pyx_PyMethod_New2Arg)r  r4  r   r;  )r   r   rq  r  r  analyse_as_python_attributer<  r   r   r   r%  r  r  r.  r   r  r   r   r   rB  r  rt  r   rX  )rY   r"  rv   r   r  r  obj_nodeunbound_noder;  r4  binding_callcomplete_calls               rT   r  zAttributeNode.coerce_to;  sz    ~%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6rU   c                     | j                   }|j                  d      r|j                  d      ry t        | j                  j
                  |      | _        y )N__)r=  
startswithendswithr
  r<  r   )rY   r  s     rT   r2  z'AttributeNode.calculate_constant_resulte  s>    ~~??4 T]]4%8&txx'?'?FrU   c                 0   | j                   }|j                  d      r+|j                  d      rt        | j                  d|z         y | j
                  j                  |      }	 t        ||      S # t        $ r}| j                  |       Y d }~y d }~ww xY w)Nr  z6Invalid attribute name '%s' in compile-time expression)
r=  r  r  r   r   r<  r<  r
  rV  r@  )rY   r;  r  r<  r?  s        rT   r<  z AttributeNode.compile_time_valuek  s    ~~??4 T]]4%8$((JTQShh))$/	-3%% 	-))!,,	-s   %A1 1	B:BBc                 8    | j                   j                  |      S rN   )r<  rl  r   s     rT   rl  zAttributeNode.type_dependenciesw      xx))#..rU   c                 |   | j                  |d      }|u|j                  j                  rI|j                  j                  j                  r)t	        j
                  |j                  j                        S |j                  j                  S | j                  |      }||j                  j                  S | j                  j                  |      }| j                  ||       |j                  r| j                  j                  rt        S | j                  r| j                  j                  rt        S | j                  S )NFtarget)obj_type)#analyse_as_cimported_attribute_noder   r   rq  r   r  analyse_as_type_attributer<  r   analyse_attributer  r   r  )rY   rv   r   r  s       rT   r   zAttributeNode.infer_typez  s    77E7Jzz4::??#?#?!**4::??;;zz&--c2::??"88&&s+sX6##		(>(> "!ZZDJJ11 "!yyrU   c                     d| _         y r  r  r   s     rT   rT  z(AttributeNode.analyse_target_declaration  rv  rU   c                    | j                  |d      }|j                  j                  r#t        | j                  d| j
                  z         |j                         s#t        | j                  d| j                  z         |S )Nr,   r  z"Assignment to const attribute '%s'r  )rX  r   rd  r   r   r=  r  rZ  s      rT   r`  z"AttributeNode.analyse_target_types  sc    !!#!299$((@4>>QR~~$((CdiiOPrU   c                    | j                   st        j                  | _         |j                  d   | _        | j                  ||      }||s| j                  |      }|| j                  ||      }|J |j                  s|j                  r|j                  rd|j                  _        |j                  r|j                  |       |S )Nr  T)r   r   r3   rn   r  r  r  "analyse_as_ordinary_attribute_noders  r   r   r  wrap_obj_in_nonecheck)rY   rv   r  r   s       rT   rX  zAttributeNode.analyse_types  s    yy"--DI!$0B!C77VD<11#6D<::3GD##4::"DJJO&&s+rU   c                    | j                   j                  |      }|r|j                  | j                        }|rO|j                  sC|j
                  s$|j                  s|j                  s|j                  r| j                  |||      S | j                  |      r%t        | j                  d| j                  z         | S y )Nz&cimported module has no attribute '%s')r<  r}  r  r=  r  r'  rq  rF  rd  as_name_noder  r   r   )rY   rv   r  module_scoper   s        rT   r  z1AttributeNode.analyse_as_cimported_attribute_node  s    
 xx11#6 ,,T^^<EU@@$$(:(:}}((eV<<66s;dhh H4>> YZrU   c                 J   | j                   j                  ry | j                   j                  |      }|r|j                  s|j                  s|j
                  r|j                  j                  | j                        }|r|j                  s"|j
                  r|j                  j                  rs|j                  r| j                  sy |}nC| j                  |||      }|j                  D cg c]  }| j                  |||       c}|_        | j                  ||d      S y |j                   s|j"                  r| j                  |j$                  v rp|j&                  j(                  D ]1  }|j*                  | j                  k(  s| j                  ||d      c S  t-        | j.                  | j                  d|       y | j                  j1                  d      r| j                  j3                  d      ry t-        | j.                  | j                  d|       y c c}w )NFr  z not a known value of r  )r<  r   r  r  r  r  rN  r  r=  r  r   rq  r|  _create_unbound_cmethod_entryoverloaded_alternativesr  rA  r  r  r   enum_valuesrt   r   r   r  r  )rY   rv   r   r   
ubcm_entryoverloaded_alternatives         rT   r  z'AttributeNode.analyse_as_type_attribute  s   
 88%%xx'',%%)=)=ARAR

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

H_H_++#~~#'%*
%)%G%GeUX%Y
 ;@:W:W> 6 !>>tE[]`a>
:  ,,S*U,KK  !1!1>>T[[0!%!7!7 _ ::7#'#4#4S%#4#NN_ dhhX\(]^  ^^..t49P9PQU9V$((DNNTX$YZ#>s   ,H c                    |j                   r|j                  j                  |j                   }|j                  j                  s"|j                  r#|j                  j
                  r|j                  }n|j                  r6t        | j                  |j                  d|       t        j                  }nt        j                  |j                        }|j                  d d  |_        t        j                  d|dd       |j                  d<   n'|j                  d|j                   }|j                  }t#        j$                  |j                  ||      }d|_        |j                   |_         d|_        |j*                  |_        |S )Nz not a static member of rY   r   r)  r,   )
func_cnamer   r  r  parent_scopeis_cpp_class_scoper  r   r   rt   r   r3   r&   r   r  vtabptr_cnamer   r   r  rq  r  rN  )rY   r   r   rv   r   r*  r  s          rT   r  z+AttributeNode._create_unbound_cmethod_entry  s#    

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

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

1 $ 2 2EKK@EJJE\\%**eU;
"#
 % 0 0
()
% ;;
rU   c                 >   | j                   j                  |      }|r|j                  | j                        S | j                   j                  sO| j                   j                  |      }|r2t        |dd       %|j                  j                  | j                        S y )NrN  )r<  r}  lookup_typer=  r   r  r
  rN  )rY   rv   r  r  s       rT   r  zAttributeNode.analyse_as_type   s|    xx11#6++DNN;;xx))005IWY>J 224>>BBrU   c                     | j                   j                  |      }|ra|j                  | j                        }|rD|j                  r8|j
                  j                  s|j
                  j                  r|j
                  S y rN   )r<  r}  r  r=  rF  r   r  r  rY   rv   r  r   s       rT   r  z'AttributeNode.analyse_as_extension_type
  s^     xx11#6 ,,T^^<E:://5::3M3M ::%rU   c                     | j                   j                  |      }|r5|j                  | j                        }|r|j                  r|j                  S y rN   )r<  r}  r  r=  r  r  s       rT   r}  zAttributeNode.analyse_as_module  sE     xx11#6 ,,T^^<E&rU   c                     t         j                  | | j                  |      }|r|j                  |      }n|j	                  |      }d|j
                  _        |S )N)rt   r   r,   )r
  rg  r=  r`  r  r   r  )rY   rv   r   r  r   s        rT   r  zAttributeNode.as_name_node  sR     !!$T^^5!I,,S1D,,S1D

rU   c                 z   | j                   j                  |      | _         | j                  |       | j                  r#| j                  j                  r| j
                  s	 | j                  r|sd| _        t        | _	        | S |r8| j                   j                  j                  rt        | j                  d       | S | j                  rr| j                  j                  r\|sDt        j!                  | j                  | j                   | j                        j                  |      S t        | j                  d       | S )Nr,   z'Assignment to an immutable object fieldz"Assignment to a read-only property)r<  rX  r  r   r  r|  r  r  r   r.  r   r  r   r   is_cpropertyrF  r  )rY   rv   r  s      rT   r  z0AttributeNode.analyse_as_ordinary_attribute_node*  s    88))#.s#::$**// ?? $2!  55$((EF  ZZDJJ33%33DHHdhh

Saabeff$((@A rU   c                     |d u}d| _         | j                  | _        |w| j                  j                  j
                  s | j                  j                  j                  r | j                  j                  |      | _        | j                  j                  }n|j
                  s|j                  rt        }|j                  s|j                  r|j                  }d| _        nG|j                  s|j                  rd| _        n'|j                  r|j                   rd| _        nd| _        |j"                  r|j%                         r|j&                  j)                  | j                        }|j*                  r|s| j                  dk(  rJd| _        d| _        d| _        | j                  j                  j3                  | j4                        | _        y |j7                  | j                  || j4                         |j&                  j)                  | j                        }|r>|j8                  r2d }n/t;        | j4                  d|z         t<        j>                  | _        y || _         |r|j                  r%|jB                  dk(  rt;        | j4                  d       |jD                  r|j                  | _        y |jF                  r|jH                  r|jJ                  r#|j                  | _        |jL                  | _        y 	 | jO                  |||       y )	Nr   r)  r   TTz/Cannot select attribute of incomplete type '%s'__weakref__z,Illegal use of special attribute __weakref__)(r  r=  r  r<  r   r  r  r9  r   r  rp  r  r  r  r  r  is_fake_referencehas_attributesattributes_knownrN  r  r  is_memslice_transposer  r  	transposer   declare_attributer\  r   r   r3   r   rt   r  r  r  r  r   r  )rY   rv   r  immutable_objr   s        rT   r  zAttributeNode.analyse_attributeB  sN    ,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	DJ--%**2M$(($RS %% %

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

DI"'++DK
 
 	((hFrU   c                    || j                   j                  }|j                  | j                        | _        | j                  | _        t
        | _        d| _        |j                  s|j                  sr|j                  sj|j                  s^|j                  sR|j                  sF|j                  s:|j                  r|j                  |      s|j                   r5|j                  |      r$|s!| j                   j#                  |      | _         y y |j$                  r| j                   j&                  s| j                   j(                  rx| j                   j*                  j,                  rX| j                   j*                  j,                  j                  j                  r$|s!| j                   j#                  |      | _         y y t/        | j0                  d|d| j                  d       y y y )Nr,   zObject of type 'z' has no attribute 'r+  )r<  r   mangle_class_private_namer=  r  r   r  rs   r  r  rt  r  r  r  rI  r  	is_structr9  rq  r   rs  r   r  r   r   )rY   rv   r  r  s       rT   r  z)AttributeNode.analyse_as_python_attribute  s]   xx}}H66t~~Fnn"	##H,=,=""h&<&<))X-H-H** **x/N/Ns/S **x/N/Ns/S$#xx::3?DH %''TXX-=-=AVAV222277CC$#xx::3?DH % dhh12! ->#rU   c                 L   |j                   d   sy d }d}| j                  j                  j                  rQ| j                  rE| j
                  s9dj                  t        | j                        dk  rdnd      }| j                  f}ny| j                  j                  j                  rY| j                  rd}nJ| j                  j                  j                  j                  | j                        }|rd}|j                  f}|r$| j                  j                  |d	|
      | _        y y )NrQ  rW   r  r  r  r  z&Cannot transpose None memoryview slicez5Cannot access '%s' attribute of None memoryview slicer  r  )rn   r<  r   r  needs_none_checkr  r  r   r=  r  r  rN  r  rt   ra  )rY   rv   r'  r`  r   s        rT   r  z#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 rU   c                 >    | j                   r| j                          y y rN   )r  r  r   s     rT   r  zAttributeNode.nogil_check  s    ??NN rU   zAccessing Python attributec                 8    | j                   j                  |      S rN   )r<  r  r   s     rT   r  z0AttributeNode.is_cimported_module_without_shadow  s    xx::3??rU   c                     | j                   r,| j                         xs | j                   j                         S t        j                  |       S rN   )r<  r  rS  r
  rX   s    rT   rS  zAttributeNode.is_simple  s;    88&&(@DHH,>,>,@@%%d++rU   c                 F    | j                   ryt        j                  |       S r  )r<  r
  r  rX   s    rT   r  zAttributeNode.is_lvalue  s    88%%d++rU   c                 x    | j                   r| j                   j                         S t        j                  |       S rN   )r<  r  r
  rX   s    rT   r  zAttributeNode.is_ephemeral  s-    8888((**((..rU   c                     | j                         }| j                  r'| j                  j                  r| j                  sd|z  }|S r  )calculate_access_coder   r.  rx  )rY   r  s     rT   r  z#AttributeNode.calculate_result_code  s8    ++-::$**44T^^v%FrU   c                    | j                   }|j                  |j                        }| j                  r| j                  j                  r|j                  j
                  r| j                  j                  s| j                  j                  r| j                  j                  S | j                  j                  r| j                  j                  | _
        d|j                  j                  d|| j                  |j                  j                  d| j                  S | j                  r| j                  S y |j                  j                  r!d| j                  j!                         d|dS |j                  j"                  rM| j                  rA| j                  j$                  r+|j                  j'                  |j)                         d      }|| j                  | j                  S )	Nz	((struct z *))->__Pyx_CrR  r  T)to_object_struct)r<  r  r   r   r  r  is_builtin_cmethodfinal_func_cname
from_fusedr   r  vtabstruct_cnamer  vtabslot_cnamer  r  upperr  r  	cast_coder  )rY   r<  obj_codes      rT   r	  z#AttributeNode.calculate_access_code  sO    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'$++>>rU   c                 *   | j                   r| j                  r2|j                  j                  t	        j
                  dd             d}n1|j                  j                  t	        j
                  dd             d}|j                  | j                         d|d| j                  j                         d|j                  | j                        d	|j                  | j                         | j                        	       | j                  |       y | j                  j                   r<| j"                  r| j                  j$                  D ]"  \  }}|d
k(  st'        | j                  d        y  |j                  | j                         d| j                  j                         d       |j)                  | j                         | j                  d       d| j                         z  }|j                  |j+                  || j                               y | j,                  r@|j                  d| j                         d|j/                  | j                        d       y y | j0                  j2                  r| j,                  r| j4                  r| j                         }n| j6                  rJ | j9                         }| j                  j;                  |      }|j=                  | j                  | j0                  | j>                  |       y | j                  j                  r!| j                  j                  j@                  ry | j0                  r=| j0                  jB                  r&|j                  jE                  | j0                         y y y )NPyObjectLookupSpecialr6  __Pyx_PyObject_LookupSpecialPyObjectGetAttrStr__Pyx_PyObject_GetAttrStrrS  rR  r1  r  r  z=Transposing not supported for slices with indirect dimensionsrT  Tr  z__pyx_memslice_transpose(&%s)zif (unlikely(!zR.memview)) {PyErr_SetString(PyExc_AttributeError,"Memoryview is not initialized");r   r9  )#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.  rx  r  r	  rB  rD  r  r  r  r  )rY   r   lookup_func_namer  r  r  undereferenced_resultr:  s           rT   r  z"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~~ OFGdhh )C D	 

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

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


  ;;=$//$((*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rU   c                     | j                   rO| j                  j                  r9| j                  r-|j	                  | j                         | j                  d       y t        j                  | |       y )NTr  )r  r   r  r  rx  r  r   r  r  s     rT   r  z$AttributeNode.generate_disposal_code;   sL    <<DII88T=W=W""4;;=$))d"K++D$7rU   c                 |   | j                   j                  |       | j                  r|j                  j	                  t        j                  dd             |j                  | j                  d| j                   j                         d|j                  | j                        d|j                         d       |j                  |       |j                  |       n'| j                   j                  j                  r|j!                  d| j"                  j%                         | j                   j                  j&                  d| j                   j)                  | j                   j                        d|j)                  | j+                               d       |j                  |       |j                  |       nF| j-                         }| j                  j.                  rk| j0                  r_|j3                  |       |j5                  |       |j7                  || j                         |j9                  || j+                                nI| j                  j:                  r3d	d
lm} |jA                  |||j-                         | j                  |       | j                  j:                  s4|j!                  |d|jC                  | j+                               d       |jE                  |       |j                  |       | j                   j                  |       | j                   j                  |       y )Nrt  r6  z__Pyx_PyObject_SetAttrStr(r1  r  __Pyx_SET_CrR  r2  r,   r  rS  rT  )#r<  r  r  r   r   r   r   r  r   r   r  r=  r  r  r   r  r   r  r	  implementation_suffixr  r*  r  rs   r  r  r  r  
put_decrefr  r  r  put_assign_to_memviewslicer#  r  )rY   r   r   r  r   r   select_coder  s           rT   r  z&AttributeNode.generate_assignment_codeB   s:   ))$/??--''(<>PQS!!$((HH&&(**4>>:MMO%&
 &&t,NN4 XX]]%%JJ!!#33""488==1djjl+	- .
 &&t,NN4 ++-Kyy$$)=)=((.$$T*TYY7TZZ\:--(55#S#**,		4I 99//

#..tzz|<>?
 --d3NN4 ''-D!rU   c           	      v   | j                   j                  |       | j                  sB| j                  j                  j
                  rd| j                  j                  j                  v r|j                  j                  t        j                  dd             |j                  | j                  d| j                   j                         d|j                  | j                        d       nt!        | j                  d       | j                   j#                  |       | j                   j%                  |       y )N__del__rt  r6  ru  r1  r  z+Cannot delete C attribute of extension type)r<  r  r  r   rN  is_property_scoper  r   r   r   r   r  r   r   r  r=  r   r  r  r  s      rT   r  z$AttributeNode.generate_deletion_coden   s    ))$/??tzz//AA#,

0@0@0H0H#H--''(<>PQS!!$((HH&&(**4>>:<=
 $((IJ''-D!rU   c           
          | j                   rd\  }}nd\  }}|j                  | j                  t        ||| j                  z  t        | j                                     y )N)py_attrzpython attribute (%s))c_attrzc attribute (%s)r  )r  r  r   r8   r   r   r=  )rY   r   r  r  s       rT   r  zAttributeNode.annotate}   sK    ??<KE46KE4dhhudTYY6FSQUQ_Q_M` abrU   c                     | j                   j                         }|r$t        j                  |d| j                        S y )Nr   )r<  ri  r
   rH  r=  )rY   r  s     rT   ri  z/AttributeNode.get_known_standard_library_import   s4    hh@@B!//;0WXXrU   rk  rN   r  rl  rj  )-r[   r\   r]   rs  r   r   r|  r	  r  r  r  r\  r  r2  r<  rl  r   rT  r`  rX  r  r  r  r  r  r}  r  r  r  r  r  r  r  r  rS  r  r  r  r	  r  r  r  r  r  ri  rW   rU   rT   rG  rG    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rU   rG  c                   R    e Zd ZdgZdZeZdZdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zy)StarredUnpackingNoder  r,   Fc                 4    t         j                  | ||       y )Nr  rn  )rY   r   r  s      rT   r  zStarredUnpackingNode.__init__   s    $F3rU   c                 ~    | j                   st        | j                  d       | j                  j	                  |       y Nz&starred expression is not allowed here)starred_expr_allowed_herer   r   r  r  r   s     rT   r  z)StarredUnpackingNode.analyse_declarations   s,    --$((DE((-rU   c                 8    | j                   j                  |      S rN   )r  r   r   s     rT   r   zStarredUnpackingNode.infer_type   s    {{%%c**rU   c                     | j                   st        | j                  d       | j                  j	                  |      | _        | j                  j
                  | _        | S r1	  )r2	  r   r   r  rX  r   r   s     rT   rX  z"StarredUnpackingNode.analyse_types   sF    --$((DEkk//4KK$$	rU   c                 :    | j                   j                  |       y rN   )r  rT  r   s     rT   rT  z/StarredUnpackingNode.analyse_target_declaration   s    ..s3rU   c                 |    | j                   j                  |      | _         | j                   j                  | _        | S rN   )r  r`  r   r   s     rT   r`  z)StarredUnpackingNode.analyse_target_types   s.    kk66s;KK$$	rU   c                      yr  rW   rX   s    rT   r  z*StarredUnpackingNode.calculate_result_code   r  rU   c                      y rN   rW   r  s     rT   r  z)StarredUnpackingNode.generate_result_code   r   rU   N)r[   r\   r]   r   r   r   r   r  r2	  r  r  r   rX  rT  r`  r  r  rW   rU   rT   r.	  r.	     sH     zHJDG %4.
+4
rU   r.	  c            
       @    e Zd ZddgZdZdZdZdZdZd Z	d Z
d Zdd	Zd
 Zd Zd Zd Zd Zd ZddZ fdZ	 	 ddZ ej.                   ej0                  ej2                   ej4                  dej2                  d      g            Zd Zd ZddZd Zd Z  xZ!S )SequenceNoder   r   r,   NFc                 ^    | j                   D cg c]  }|j                  |       c}S c c}w rN   )r   r<  )rY   r;  r   s      rT   compile_time_value_listz$SequenceNode.compile_time_value_list   s%    8<		B&&t,BBBs   *c                     d| _         g }| j                  D ][  }|j                  r<| j                   rt        |j                  d       d| _         |j
                  }d|_        |j                  |       ] || _        y )NFz,more than 1 starred expression in assignmentT)starred_assignmentr   r   r   r   r  r  rY   r   r   s      rT   replace_starred_target_nodez(SequenceNode.replace_starred_target_node   sn    "'99 	C~~**#''#QR*.'jj!%KK	 	rU   c                 h    | j                          | j                  D ]  }|j                  |        y rN   )r@	  r   rT  r  s      rT   rT  z'SequenceNode.analyse_target_declaration   s/    ((*99 	0C**3/	0rU   c                    t        | j                        D ]6  \  }}|s|j                  |      }|j                  |      | j                  |<   8 | j                  rX| j                  j                  |      }|j
                  j                  s|j                  |      }|j                  |      | _        d| _        |j                  s.|j                  s"|j                  r|j                  j                  rd| _        | S Nr,   T)r  r   rX  r9  r   r   r  rh  r  r  r  r  r  slow)rY   rv   skip_childrenr  r   r   s         rT   rX  zSequenceNode.analyse_types   s    		* 	7FAs '',11#6DIIaL	7 **88=K##**)<<SA*;;C@D3#7#7&&3??+J+JDIrU   c                    t        j                  |d      }| j                  |k(  r| S | j                  rJ t	        | j
                        |j                  k7  r8t        | j                  d|j                  t	        | j
                        fz         t        | j
                  |j                        D cg c]  \  }}|j                  ||       }}}t        | j                  ||d      S c c}}w )NTr>  zHtrying to coerce sequence to ctuple of wrong length, expected %d, got %d)r   r   r  )r   rA  r   r   r   r   r  r   r   r  rJ  r  rF  )rY   r"  rv   r   r   coerced_argss         rT   coerce_to_ctuplezSequenceNode.coerce_to_ctuple !  s    ++HTJ99 K###tyy>X]]*$((fs499~j/ / 0BEdiiQYQdQdBefYS$dC0ff8TRR gs   4C,c           	         | j                          t        d | j                  D              s| S g }g }| j                  D ]y  }|j                  rZ|r<|j	                  t        |d   j                  |      j                  |d             g }|j	                  |j                         i|j	                  |       { |r:|j	                  t        |d   j                  |      j                  |d             t        | j                  || j                        }| j                  r?t        | j                  d|| j                  j                  |      d| j                  d      }|S )Nc              3   4   K   | ]  }|j                     y wrN   )r   r   s     rT   ri   z?SequenceNode._create_merge_node_if_necessary.<locals>.<genexpr>!  s     7c3>>7   r   r  TrE	  r   )inplacer   r  )_flatten_starred_argsro   r   r   r  rF  r   rX  r  MergedSequenceNoder   r   
binop_noder9  )rY   rv   r   r  r   r   s         rT   _create_merge_node_if_necessaryz,SequenceNode._create_merge_node_if_necessary!  s$   ""$7TYY77K99 	#C~~KK	&)--f E S STWgk S lmFCJJ'c"	# KK	&)--f=KKC_cKde!$((D$))<#tT%5%5%H%H%M499d<D rU   c                 &   g }| j                   D ]q  }|j                  rR|j                  j                  r<|j                  j                  s&|j                  |j                  j                          a|j                  |       s || j                   d d  y rN   )r   r   r  r   r   r  r  r?	  s      rT   rN	  z"SequenceNode._flatten_starred_args%!  sh    99 	!C~~#**"D"DSZZMcMcCJJOO,C 		!
 		!rU   c                      yr  rW   rX   s    rT   rZ  zSequenceNode.may_be_none.!  r  rU   c                    | j                   rt        | j                  d       g | _        g | _        d| _        t        | j                        D ]  \  }}|j                  |      x}| j                  |<   |j                  rR|j                  j                  t              st        |j                  d       |j                  t        u rt        |_
        t        | j                  |      }|j                  |j                  |      }||urd| _        | j                  j!                  |       | j                  j!                  |        t        | _
        | S )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   r  r   r   r  r  r  )rY   rv   r  r   unpacked_itemcoerced_unpacked_items         rT   r`  z!SequenceNode.analyse_target_types1!  s   $((AB &(#!&		* 	FFAs!$!9!9#!>>C$))A,~~xx//	:#''NP88~-(CH&txx5M$1$;$;CHHc$J!$99)-&&&}5''../DE	F #	rU   c                 &    | j                  |       y rN   generate_operation_coder  s     rT   r  z!SequenceNode.generate_result_codeH!      $$T*rU   c                 6
   || j                         }dx}}d }| j                  r|s| j                  }|j                  j                  ro|j                         }t	        |j
                  t              r|j
                  dkD  rd|j
                  z  }n&|j                  j                  r
d|d|d}nd|d}| j                  t        u s| j                  t        u r| j                  s| j                  r|st        | j                        dkD  r| j                  t        u r2d}|j                  j                  t!        j"                  d	d
             nd}|j%                  d||t        | j                        dj'                  d | j                  D              |j)                  || j*                        fz         |j-                  |t.               d| _        nV| j                  j2                  rGt5        | j                        D ]-  \  }}	|j%                  |d|d|	j                         d       / n| j                  t        u rd\  }
}n0| j                  t        u rd\  }
}nt7        d| j                  z        t        | j                        }|j%                  |d|
d||d|j)                  || j*                               |j-                  |t.               |rYt8        j:                  }|j%                  d|z         |dk(  r|}n|d|}|j%                  d|d|d|d|d	       d| _        nd}t=        |      D ]  }| j                  |   }	|s|	j?                         s.|jA                  |	j                         |	jC                                |	jE                  |       |j%                  d |d|d|xr |xr |d!|xs |xs |d|	jG                         d"|jI                  | j*                        d        |r"|j%                  d#       |j%                  d#       ||j                  jJ                  r|j%                  d$t8        j:                  d%|d|jG                         d|j)                  t8        j:                  | j*                               |j-                  t8        j:                  t.               |jM                  |t.               |j%                  |dt8        j:                  d       |j%                  d#       y y y )&Nr  r   z * %sz * ((z<0) ? 0:r  z * (__Pyx_PyList_PackListPackr6  PyTuple_Packz%s = %s(%d, %s); %sr1  c              3   <   K   | ]  }|j                           y wrN   rR  r   s     rT   ri   z>SequenceNode.generate_sequence_packing_code.<locals>.<genexpr>m!  s     ?c#--/?r  Trb  rS  rT  )
PyList_New__Pyx_PyList_SET_ITEM)PyTuple_New__Pyx_PyTuple_SET_ITEMz'sequence packing for unexpected type %srR  r  z{ Py_ssize_t %s;r,   r  zfor (z=0; z < r  z++) {r  r  z
) != (0)) r   z{ PyObject* z = PyNumber_InPlaceMultiply()'r  r   r   r  r   r   r   r,  r   r   r   rD	  r   r   r   r   r   r   r   r  r   r   r  r   needs_subexpr_disposalrI  r  r   r   r  r  r  r  r*  r  r   r   rs   r#	  )rY   r   r  plainsize_factorc_multr   	pack_namer  r   create_funcset_item_func	arg_countcounteroffsets                  rT   generate_sequence_packing_codez+SequenceNode.generate_sequence_packing_codeK!  s&   >[[]F!!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. .3

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% 
0iil!3!3!5OOCJJL#))+>$$T*

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

3

3"{'7'7'C'CJJ''1F1F1H''(?(?J  OOF33^DOOFN3JJVV-D-DEFJJsO (D"rU   c                     | j                   rt        | 	  |       y | j                  D ]  }|j	                  |        | j
                  r| j
                  j                  |       y y rN   )rg	  rP   r  r   r  r   r  )rY   r   r   rS   s      rT   r  z+SequenceNode.generate_subexpr_disposal_code!  s`    &&G248
 yy 811$78   77=  rU   c                     | j                   r| j                  ||       n| j                  ||       | j                  D ]  }|j	                  |        |j                  |       y rN   )r>	   generate_starred_assignment_code!generate_parallel_assignment_coderU	  r|  r  )rY   r   r   r  r   r   r   s          rT   r  z%SequenceNode.generate_assignment_code!  sX    ""11#t<223='' 	DLL	trU   r  c                    | j                   D ]  }|j                  |        |j                  t        u xs1 |j                  t        t
        fv xs |j                  j                   }t        | j                         dkD  }|r| j                  |||       nA|j                  d       | j                  ||| j                   |       |j                  d       | j                  D ]  }|j                  |        t        t        | j                              D ].  }| j                  |   j                  | j                  |   |       0 y )N   use_loopr  r   )rU	  rz  r   r   r   r   r  r   (generate_special_parallel_unpacking_coder   (generate_generic_parallel_unpacking_coderV	  r  r  r   r  )rY   r   r   r   special_unpacklong_enough_for_a_loop
value_noder  s           rT   ru	  z.SequenceNode.generate_parallel_assignment_code!  s8    '' 	 DMM$	 ((n4 : XX*i)@@:!$!9!99 	 "%T%8%8!9A!=99c$: : < JJsO99c4..9O : QJJsO55 	6J//5	6s499~& 	6AIIaL11++A.6	6rU   c                    d}d|j                         z  }|j                  t        u rdg}d}|j                         rb|}n_|j                  t        u rdg}d}|j                         r8|}n5ddg}d}d|j                         z  }d	|j                         z  }	d
|d|	d}|j                  d|z         |j                  d|j                         z         |j                  d|z         |j                  dt        | j                        z         |j                  j                  t        j                  dd             |j                  dt        | j                        t        | j                        fz         |j                  j                  t        j                  dd             |j                  d       |j                  |j                  | j                               |j                  d       |j                  d       t        |      dk(  r|j                  d|d   z         t        | j                        D ]  \  }
}|d   dk(  r|j                  |j!                          d|
 d| j#                          d       |j                  |j%                  |j!                         | j                               |j'                  |j!                         |j)                                |j                  |j!                          d|
 d       |j+                  |j!                         |j)                                 t        |      dk(  r9|j                  d       t        | j                        D ]  \  }
}|d    dk(  r|j                  |j!                          d|
 d| j#                          d       |j                  |j%                  |j!                         | j                               |j'                  |j!                         |j)                                |j                  |j!                          d|
 d       |j+                  |j!                         |j)                                 |j                  d       |j                  d!       |st        | j                        D ]|  \  }
}|j                  d"|j!                         |
|j%                  |j!                         | j                        fz         |j-                  |j!                         |j                         ~ n#|j                  d#       |j                  d$       |j                  d%t        | j                        d&d'j/                  | j                  D cg c]  }d(|j!                         z   c}      d)       |j                  d*t        | j                        z         |j                  d+|j%                  d,| j                        z         |j-                  d,t0               |j                  d-       |j                  d       |j                  d       |j                  d.       |j3                  |       |dk(  r|j                  d       y ||k(  r|j                  d       |j                  j                  t        j                  d/d             |j                  d0|j                  | j                        z         |j                  d       y |j                  d       | j5                  ||| j                  |1       |j                  d       y c c}w )2Nr  zlikely(%s != Py_None)r  r  r  r  __Pyx_PySequence_SIZEzlikely(PyTuple_CheckExact(%s))zPyList_CheckExact(%s)rR  z) || (r  r]  zPyObject* sequence = %s;zPy_ssize_t size = %s(sequence);zif (unlikely(size != %d)) {RaiseTooManyValuesToUnpackr6  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_GetItemRefFast(sequence, r1  r2  z = PyTuple_GET_ITEM(sequence, r  r,   r  z,%s = __Pyx_PySequence_ITEM(sequence, %d); %sr  zPy_ssize_t i;PyObject** temps[rT  r  r_  rX  zfor (i=0; i < %s; i++) {z7PyObject* item = __Pyx_PySequence_ITEM(sequence, i); %sr   z*(temps[i]) = item;r  RaiseNoneIterErrorz%__Pyx_RaiseNoneNotIterableError(); %srx	  )r   r   r   rZ  r   r   r   r   r   r   r   r   r   r   r  rU	  r  rR  r   r  r*  r  r  r  r   r  r{	  )rY   r   r   ry	  sequence_type_test
none_checkr6   get_size_functuple_check
list_checkr  r   s               rT   rz	  z5SequenceNode.generate_special_parallel_unpacking_code!  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5 	=GAta F*

dkkm_ -))*2d.G.G.I-J"N O

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

=

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

7$T%8%89 :4

IKKM1++DKKM488DMF F G tyy9	: JJsOJJ'JJD''(D<O<OPD%$++-/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c4.. : CJJsO3 Qs   ]c                     |j                   j                  t        j                  dd             |j                   j                  t        j                  dd             |j	                  d       |rY|j	                  dt        | j                        ddj                  |D cg c]  }d|j                         z   c}      d	       |j                  j                  t        d
      }|j	                  |d|j                         d|j                  || j                               |j                  |t               |j!                  |       |j                  j                  | j"                  d      }|j	                  | d| d       |j%                  d      }	|d|d}
|r{|j	                  dt        |      z         |j'                  d|
z         |j)                  |	       |j                  dt               |j	                  d       |j	                  d       nit+        |      D ][  \  }}|j'                  d||j                         |
|j                         fz         |j)                  |	       |j-                  |       ] |r|j                   j                  t        j                  dd             |j/                  | j                  d|
t        |      fz         |j	                  d|z         |j1                  |t               |j%                  d      }|j)                  |       |j3                  |	       |j1                  |t               |j	                  d|z         |j	                  d       |j	                  |j5                  | j                               |j3                  |       |j                  j7                  |       |r|j                  j7                  |       d }|S c c}w )Nr	  r6  
IterFinishzPy_ssize_t index = -1;r	  rT  r  r_  rX  Tr  r  r  Fr  r2  unpacking_failedrR  r  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   rU	  r  r  r  r  r   r   r   r   r  r  r  r  r  r  r  r  r  r  r  r   r  )rY   r   r   rU	  ry	  	terminater   iterator_tempiternext_funcunpacking_error_labelunpack_coder  unpacking_done_labels                rT   r{	  z5SequenceNode.generate_generic_parallel_unpacking_codeO"  sg   ))##$ACUV	X))##L2DE	G

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

''txx@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 +4>#	B' '( 34$$T*+ --''(<>PQS!!$((,RN#V% -% & JJ|m34!!-@#~~.>?*+,-m^<

<-/0

XY

4??488,-+,##M2NN''6 M{ Ls   #O;c                 2
   t        | j                        D ]C  \  }}|j                  s| j                  |   }| j                  d | }| j                  |dz   d  } n J d }|r|D ]  }	|	j	                  |        |j                  d       | j                  |||dd      }t        |      D ]%  \  }}	| j                  |   }
|
j                  |       ' |j                  d       |j	                  |       |j                         }|j                  |d|s*|j                         r|j                  t        t        fv rdnd	d
|xs |j                         d|j                  || j                                |j#                  |       |r2|j%                  |t               |j&                  j)                  |       n|j+                  |       |r	|j,                  j/                  t1        j2                  dd             |j&                  j5                  t6        j8                  d      }|j                  |d|d       |j                  d|t;        |      fz         |j                  dt;        |      ||j=                  | j                         fz         |j                  d       |d d d   D ]  }	|	j	                  |        t        t?        |d d d   | j                  d d d               D ]  \  }\  }	}|j                  d       |j                  d|	j                         |||dz   fz         |j                  d|z         |j                  d       |j                  d|	j                         |||dz   fz         |j                  d       |	j#                  |       |j                  |        |j                  d       |j&                  j5                  t        d      }|j                  d|||t;        |      |j                  || j                         fz         |jA                  |t               |j&                  j)                  |       |jC                  |t               |j                  |d|d|d       |j                  d       |j                  d|z         |j&                  j)                  |       |j                  d       t        | j                        D ]$  \  }}|jE                  | j                  |   |       & y )Nr,   Fr  T)ry	  r	  r   rS  __Pyx_PySequence_ListKeepNewPySequence_ListrR  r  r	  r6  r  z = __Pyx_PyList_GET_SIZE(r2  zif (unlikely(%s < %d)) {z)__Pyx_RaiseNeedMoreValuesError(%d+%s); %sr  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); %sr  r-  zCYTHON_UNUSED_VAR(%s);)#r  r   r   rU	  rz  r   r{	  rV	  r  r  r  r   r   r   r   r   r   r  r  r  r  r  r   r   r   r   r  r   rM  r   r   r  r  r#	  r  )rY   r   r   r  r   starred_targetunpacked_fixed_items_leftunpacked_fixed_items_rightr	  r   r~	  target_listlength_tempcoerced_argsublist_temps                  rT   rt	  z-SequenceNode.generate_starred_assignment_code"  s   		* 	FAs~~!%!4!4Q!7-1-@-@!-D)-1-@-@1-F*	 $1 $d#$JJsO IIc4 J 0M %%>? :4!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#$*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k;<V8W''dhh?GA A B OOL.9NN''4OOK8JJ\<XYJJwJJ/,>?NN''5JJx 		* 	OFAs(()D)DQ)GN	OrU   c                     | j                   D ]  }|j                  |        | j                  rE| j                  D ]  }|j                  |        | j                  D ]  }|j                  |        y y rN   )r   r  rU	  rV	  rY   r   r   s      rT   r  zSequenceNode.annotate"  sq    99 	CLL	** #T"#22 #T"# rU   rj  r  rl  r  )"r[   r\   r]   r   r   rU	  r   rD	  rg	  r<	  r@	  rT  rX  rH	  rQ	  rN	  rZ  r`  r  rq	  r  r  r   r  rB  r   r  r  ru	  rz	  r{	  rt	  r  r^   r_   s   @rT   r:	  r:	     s     &HNKD"
C0
$S0.+dL> INGK	 .*--.Bj.B.B!!#J##D**C*CTJ$/ 
64dLGRROh#rU   r:	  c                   \    e Zd ZeZdZdZd ZddZd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zy)rF  Fr  c                    | j                   s| j                  st        S | j                  D cg c]  }|j                  |       }}t	        d |D              rt        S |j                  | j                  |      j                  S c c}w )Nc              3      K   | ]:  }|j                   xs( |j                  xs |j                  xs |j                   < y wrN   )rs   r  r  r  )rf   r   s     rT   ri   z'TupleNode.infer_type.<locals>.<genexpr>#  sC      & b4#:#:bd>Q>QbUYUbUbb &s   A A)r   r   r   r   ro   r  r   r   )rY   rv   r   r  s       rT   r   zTupleNode.infer_type"  st    49948II>SS^^C(>	> &$& &%%dhh	:???	 ?s   Bc                 N   | j                   rd| _         | j                  rd| _        t        | j                        dk(  rd| _        d| _         | S |sNt        | j                        D ]6  \  }}|j                  rd|_        |j                  |      | j                  |<   8 | j                  sat        d | j                  D              sE|j                  | j                  d | j                  D              j                  | _        d| _        | S t        j                  | |d      }|j                  |      }|j                   s|S t#        d |j                  D              s|S |j                  r:|j                  j                   r4t%        |j                  j&                  t(              rd|_        d|_         |S |j                  j                  j*                  s@|j                  j                  j,                  s |j                  j/                  |      |_	        d|_        d|_        |S )	NFr   Tc              3      K   | ]X  }|j                   xsF |j                  j                  xs. |j                  j                  xs |j                  j                   Z y wrN   )r   r   rs   r  r  r   s     rT   ri   z*TupleNode.analyse_types.<locals>.<genexpr>#  sO      . s388+?+?s388C^C^sbebjbjbsbss .r  c              3   4   K   | ]  }|j                     y wrN   r  r   s     rT   ri   z*TupleNode.analyse_types.<locals>.<genexpr>#  s     9Xs#((9XrK	  r,   rL	  c              3   4   K   | ]  }|j                     y wrN   )r   )rf   childs     rT   ri   z*TupleNode.analyse_types.<locals>.<genexpr>$#  s     ;5##;rK	  )r   is_partly_literalr   r   r  r  r   r2	  rX  r   ro   r  r   r   r:	  rQ	  r   r   r   r   r   rs   r  r9  )rY   rv   rE	  r  r   r   s         rT   rX  zTupleNode.analyse_types#  s   ??#DO!!%*D"tyy>Q DL"DOK#DII. 63>>48C1"005		!6    .#'99. ...txx9Xdii9XY^^DIDLK))$4)H33C8++K;;;K  ++4++;;SA DL"DO 	 ##((44T=M=M=R=R=Y=Y#'#3#3#F#Fs#K DL%)D"rU   c                     | j                   sy | j                   D cg c]  }|j                  |       }}t        d |D              ry |j                  | j                  |      }|j
                  S c c}w )Nc              3   $   K   | ]  }|d u  
 y wrN   rW   )rf   rg   s     rT   ri   z,TupleNode.analyse_as_type.<locals>.<genexpr>7#  s     -QqDy-s   )r   r  ro   r  r   r   )rY   rv   r   r   r   s        rT   r  zTupleNode.analyse_as_type2#  se    yy:>))D3c))#.D
D-*--&&txx<zz	 Es   A1c                 `   | j                   j                  r|j                  r5| j                   j                  |j                  k(  r| j                  ||      S |t        u s|t
        u ra| j                  D cg c]  }|j                  |       }}t        | j                  |t        | j                  d      j                  |d      S | j                  |      j                  ||      S |j                  r| j                  s| j                  ||      S t        j                  | ||      S c c}w )Nr,   )r   r   r   r  TrL	  )r   rI  r  rH	  r   r   r   r9  rF  r   r   rX  r  r:	  )rY   r"  rv   r   rG	  s        rT   r  zTupleNode.coerce_to<#  s   99!!diinn&E,,Xs;;Z'8~+EGKyyQ 6 6s ;QQ HH%# $ 0 0  -4-89 ..s3==hLL(8(8((377))$#>>  Rs   6D+c                     t        | j                  | j                  | j                        }t	        | j
                  t              rt        | j
                        |_        |S N)r   r   )rY  r   r   r   r   r   r   r  rY   rg   s     rT   as_listzTupleNode.as_listP#  sF    TXXDII4;K;KLd**E2 $T%9%9 :ArU   c                      yr  rW   rX   s    rT   rS  zTupleNode.is_simpleV#      rU   c                      yr  rW   rX   s    rT   rr  zTupleNode.nonlocally_immutableZ#  r	  rU   c                     | j                   S rN   r"  rX   s    rT   r  zTupleNode.calculate_result_code^#  r#  rU   c                     | j                   r
t               t        | j                  D cg c]  }|j                   c}      | _        y c c}w rN   )r   r   r   r   r   rY   r   s     rT   r2  z#TupleNode.calculate_constant_resulta#  sB    ,$/3yy&:(+##&:  ; &:s   A
c                     | j                  |      }| j                  J | j                         	 t        |      S # t        $ r}| j	                  |       Y d }~y d }~ww xY wrN   )r<	  r   r   rV  r@  )rY   r;  r  r?  s       rT   r<  zTupleNode.compile_time_valueg#  s\    --d3'9)9)99	-=  	-))!,,	-s   
; 	AAAc                 "   t        | j                        dk(  r%|j                  t        j                        | _        y | j                  s| j                  rt        | j                  | j                  r| j                  nd g| j                  z         }|j                  d|      }|j                  |      }|P|j                  | j                         | j                  ||| j                          |j!                  |t"               | j                  r|| _        y | j                  j                  j$                  r|j&                  j)                  t+        j,                  dd             |j/                  | j1                         d|d| j                  j1                         d	|j3                  | j1                         | j                               | j5                  |       y |j/                  | j1                         d
|d| j                  j7                         d	|j3                  | j1                         | j                               | j5                  |       y d| j                  j8                  _        | j                  |       y )Nr   r   rz  )rh	  PySequenceMultiplyr6  z = __Pyx_PySequence_Multiply(r1  r  z = PyNumber_Multiply(T)r   r   r  r   empty_tupler  r   r	  r   r   r   r  r  r  r   rq	  r  r   r  r   r   r   r   r   r  r   r  r   r   r  )rY   r   r{  tuple_targetr  s        rT   r\	  z!TupleNode.generate_operation_codeo#  s   tyy>Q#889K9KLD??d44 'tyyt43C3C\`2adhdmdm2mnI,,W	,JL99,GJ%##DHH-33JX\XgXgTg3h&&|^D#/ !!&&--  11++,@BTUW

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

KKM<1A1A1K1K1M++DKKM488D  $$T*#'DIIOO //5rU   Nrj  )r[   r\   r]   r   r   r	  r  r   rX  r  r  r	  rS  rr  r  r2  r<  r\	  rW   rU   rT   rF  rF  "  sM     D-K@)V?( ;-"6rU   rF  c                   ^    e Zd Zg ZeZdZdZd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zy)rY  FzConstructing Python listc                      yr  rW   r   s     rT   rl  zListNode.type_dependencies#  r  rU   c                     t         S rN   )r   r   s     rT   r   zListNode.infer_type#      rU   c                     | j                   D ]  }|j                  sd|_         t        j	                  | |      }|j                  |      S r  )r   r   r2	  r:	  r^  r9  )rY   rv   r   r   s       rT   r^  zListNode.analyse_expressions#  sI    99 	5C~~04-	5 //c:&&s++rU   c                     t        d      5 }t        | j                        | _        t        j                  | |      }d d d        _        |j                  rd| _        |j                  |      }|S # 1 sw Y   6xY wNTr>  )
r   r  r   original_argsr:	  rX  obj_conversion_errorsr  r[  rQ	  )rY   rv   errorsr   s       rT   rX  zListNode.analyse_types#  ss    & 	9&!%diiD--dC8D	9 &,"#'D 33C8	9 	9s   1A33A<c                    |j                   rY| j                  D ]  }t        |        g | _        | j                  j	                  |      st        | j                  d|z         | S |j                  s|j                  r^|j                  t        j                  urAt        | j                        }| j                  rt        | j                  j                   t"              rM| j                  j                   dk  rt        | j                  d|z         n3|| j                  j                   z  }nt        | j                  d|z         |j                  }t        j$                  ||      | _        t'        t        | j(                              D ]L  }| j                  |   }t        |t*              r|j,                  }|j/                  ||      | j                  |<   N | S |j0                  r6t3        | j                  | t        j4                        j/                  ||      S | j                  rt        | j                  d|z         | S |j6                  r\t        | j                        t        |j8                  j:                        kD  rt        | j                  d|z         nt        | j                        t        |j8                  j:                        k  rt=        | j                  d|z  d	       t?        tA        | j(                  | j                  |j8                  j:                              D ]s  \  }\  }}}	t        |t*              r|j,                  }n$|	j                  jB                  r|jD                  r|}|j/                  |	j                  |      | j                  |<   u || _        | S |jF                  r| jI                  ||      S tJ        | _        t        | j                  d|z         | S )
NzCannot coerce list to type '%s'r   z4Cannot coerce non-positively multiplied list to '%s'z1Cannot coerce dynamically multiplied list to '%s')r  r   z%Cannot coerce multiplied list to '%s'zToo many members for '%s'zToo few members for '%s'r,   )&rs   r	  r   r   r  r   r   rp  r  r  r   c_void_typer   r   r   r   r   r   r  r  r	  r  r   r  r  TypecastNoder   r	  rN  r  r   r  r  r  rr  rI  rH	  r3   )
rY   r"  rv   rw   r\  r  r  r   r	  r  s
             rT   r  zListNode.coerce_to#  s)   11 "S!")+D&99''1dhh AH LMT S 8??8J8JR\RhRh8htyy>L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''C"}}Y<		!	=: 1 ""$Z=V=VWaabjlopp$((ChNO( ' 499~HNN$>$> ??dhh ;h FGtyy>C(B(B$CCDHH&@8&KQO5>s4CUCUW[W`W`bjbpbpb|b|?}5~ C1A1[&!#'9:!gg77K<W<W)#&==c#BDIIaLC !DI  ((377"DI$((=HIrU   c                     | S rN   rW   rX   s    rT   r	  zListNode.as_list#  r  rU   c                     t        | j                  | j                  | j                        }t	        | j
                  t              rt        | j
                        |_        |S r	  )rF  r   r   r   r   r   r  r   r	  s     rT   as_tuplezListNode.as_tuple#  sF    dhhTYYD<L<LMd**D1 %d&:&: ;ArU   c                 .   | j                   j                  ri| j                  r/|j                  j	                  | j                   ddd      | _        y |j                  j	                  | j                   dd      | _        y t        j                  | |       y )NFT)r  staticreusable)r  r	  )r   rp  r[  r  r  r  r:	  r  r  s     rT   r  zListNode.allocate_temp_result#  s|    99##!%!=!=II%u "> "N "&!=!=II%% "> "A --dD9rU   c                     | j                   r
t               | j                  D cg c]  }|j                   c}| _        y c c}w rN   )r   r   r   r   r	  s     rT   r2  z"ListNode.calculate_constant_result$  s:    ,+/99 6$'C 6  6s   Ac                 |    | j                  |      }| j                  r|| j                  j                  |      z  }|S rN   )r<	  r   r<  )rY   r;  ls      rT   r<  zListNode.compile_time_value$  s;    ((.!!44T::ArU   c                    | j                   j                  r.| j                  D ]  }t        |        | j	                  |       y | j                   j
                  r| j                  r|j                  d       |j                  dt        j                  z         |j                  dj                  t        j                  | j                  j                                      dt        | j                        t        j                  fz  }nd}t        | j                        D ]  \  }}|j                   j
                  rz|j                  j!                  t#        j$                  dd             |j                  d	| j                         d
||d|j                         d| j                         d
       |j                  | j                         d
||d|j                         d        | j                  r#|j                  d       |j                  d       y y | j                   j&                  r}t)        | j                  | j                   j*                  j,                        D ]E  \  }}|j                  | j                         d|j.                  d|j                         d       G y t1        d      )Nr  zPy_ssize_t %s;z&for ({i} = 0; {i} < {count}; {i}++) {{)r  countz+ (%d * %s)r  rV  r  rW  r|  rX  r  z[0]));z] = rT  r   r   rS  zList type never specified)r   rs   r	  r   rq	  rp  r   r   r   r  r  r  r   r   r  r   r   r   r   r	  r  rN  r  r   r   )rY   r   rw   rp	  r  r   r  s          rT   r\	  z ListNode.generate_operation_code$  s   99  11 "S!"//5YY

3

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

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

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

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

3

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

KKMLLJJL" ##   ;<<rU   N)r[   r\   r]   r	  r   r   r[  r  rl  r   r^  rX  r  r	  r	  r  r2  r<  r\	  rW   rU   rT   rY  rY  #  sQ     DO,K,0d:6%=rU   rY  c                   P    e Zd ZdgZdZeZd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zy)ComprehensionNodeloopTc                     | j                   S rN   r  r   s     rT   r   zComprehensionNode.infer_type=$      yyrU   c                    | | j                   _        | j                  |       t        | j                  t
        j                        rft        | j                  j                  t              sJ | j                  j                         | j                  j                  j                  d |       y t        | j                  t
        j                        sJ | j                         y rN   )
r  r  r  r   r	  r   _ForInStatNoder8  r  ForFromStatNoder   s     rT   r  z&ComprehensionNode.analyse_declarations@$  s    !dii!5!56dii00.AU499CUCUUII))$4dii)>)>?JJ?rU   c                 :    | j                   j                  |       y rN   )r	  r  r   s     rT   r  z-ComprehensionNode.analyse_scoped_declarationsJ$  s    		&&s+rU   c                 ^    | j                   s | j                  j                  |      | _        | S rN   r  r	  r^  r   s     rT   rX  zComprehensionNode.analyse_typesM$  s&    ##		55c:DIrU   c                 ^    | j                   r | j                  j                  |      | _        | S rN   r	  r   s     rT   r  z,ComprehensionNode.analyse_scoped_expressionsR$  s&    		55c:DIrU   c                      yr  rW   rX   s    rT   rZ  zComprehensionNode.may_be_noneW$  r  rU   c                 &    | j                  |       y rN   r[	  r  s     rT   r  z&ComprehensionNode.generate_result_codeZ$  r]	  rU   c           
         | j                   t        j                  u rd}nV| j                   t        j                  u rd}n7| j                   t        j                  u rd}nt        d| j                   z        |j                  | j                         d|d|j                  | j                         | j                               | j                  |       | j                  j                  |       y )NzPyList_New(0)zPySet_New(NULL)zPyDict_New()z"illegal type for comprehension: %srS  r  )r   r   r   r   r   r   r   r  r   r   r  r	  generate_execution_code)rY   r   create_codes      rT   r\	  z)ComprehensionNode.generate_operation_code]$  s    99))))KYY'***+KYY'+++(K Dtyy PQQ

KKM;##DKKM488<> 	? 	T"		))$/rU   c                 :    | j                   j                  |       y rN   )r	  r  r  s     rT   r  zComprehensionNode.annotatem$      		4 rU   N)r[   r\   r]   r   r  r6  r   r   r  r  rX  r  rZ  r  r\	  r  rW   rU   rT   r	  r	  5$  sC     (KG$OK,

+0 !rU   r	  c                   F    e Zd ZdgZdZej                  Zd Zd Z	d Z
d Zy)ComprehensionAppendNoderJ  Nc                     | j                   j                  |      | _         | j                   j                  j                  s | j                   j	                  |      | _         | S rN   )rJ  r^  r   rs   r9  r   s     rT   r^  z+ComprehensionAppendNode.analyse_expressionsz$  sD    II11#6	yy~~))		44S9DIrU   c           
         | j                   j                  t        u r2|j                  j	                  t        j                  dd             d}nA| j                   j                  t        u rd}n"t        d| j                   j                  z        | j                  j                  |       |j                  |j                  |d| j                   j                         d| j                  j                         d| j                               | j                  j                  |       | j                  j!                  |       y )	NListCompAppend
Optimize.c__Pyx_ListComp_Append	PySet_Addz'Invalid type for comprehension node: %srR  , (PyObject*)r  )r  r   r   r   r   r   r   r   r   rJ  r  r   r   r  r   r  r  r2  s      rT   r	  z/ComprehensionAppendNode.generate_execution_code$  s    ;;y(--''(8,GI.H[[)"H9DKK<L<LLN N 			**40

4%%KK II' xx	 	
 			((.		T"rU   c                 <    | j                   j                  ||       y rN   )rJ  r  r  s      rT   r  z5ComprehensionAppendNode.generate_function_definitions$  s    		//T:rU   c                 :    | j                   j                  |       y rN   )rJ  r  r  s     rT   r  z ComprehensionAppendNode.annotate$  r	  rU   )r[   r\   r]   r   r  r   r&  r   r^  r	  r  r  rW   rU   rT   r	  r	  q$  s/     (KF  D#(;!rU   r	  c                   ,    e Zd ZddgZd Zd Zd Zd Zy)DictComprehensionAppendNodekey_expr
value_exprc                    | j                   j                  |      | _         | j                   j                  j                  s | j                   j	                  |      | _         | j
                  j                  |      | _        | j
                  j                  j                  s | j
                  j	                  |      | _        | S rN   )r	  r^  r   rs   r9  r	  r   s     rT   r^  z/DictComprehensionAppendNode.analyse_expressions$  s    99#>}}!!-- MM<<SADM//==cB##//"oo@@EDOrU   c                 B   | j                   j                  |       | j                  j                  |       |j                  |j	                  d| j
                  j                         d| j                   j                         d| j                  j                         d| j                               | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y )Nr  r	  r  )
r	  r  r	  r   r   r  r  r   r  r  r  s     rT   r	  z3DictComprehensionAppendNode.generate_execution_code$  s    ..t4006

4%%KK MM  "OO""$' xx	 	
 	,,T2  &..t4""4(rU   c                 t    | j                   j                  ||       | j                  j                  ||       y rN   )r	  r  r	  r  s      rT   r  z9DictComprehensionAppendNode.generate_function_definitions$  s*    33C>55c4@rU   c                 p    | j                   j                  |       | j                  j                  |       y rN   )r	  r  r	  r  s     rT   r  z$DictComprehensionAppendNode.annotate$  s&    t$  &rU   N)r[   r\   r]   r   r^  r	  r  r  rW   rU   rT   r	  r	  $  s!    |,K)A'rU   r	  c                   N     e Zd ZdgZdZdZdZeZd	 fd	Z	d Z
d Zd Zd Z xZS )
InlinedGeneratorExpressionNodegenNTc                    |j                   j                  }d|_        |M|t        t        t
        fv sJ |       ||_        |j                  t        ||t        j                        |       t        | 0  |fd|i| y )NT)r  r   r	  )r_  gbody
is_inlinedr   r   r   inlined_comprehension_typer  r  r   retval_cnamerP   r  )rY   r   r	  comprehension_typerd  r	  rS   s         rT   r  z'InlinedGeneratorExpressionNode.__init__$  s    "")%)Xy)II]K]]/AE,MM'-?ATATU'   	0#00rU   c                     | j                   dvS )N)ro   r   r  )	orig_funcrX   s    rT   rZ  z*InlinedGeneratorExpressionNode.may_be_none$  s    ~~%===rU   c                     | j                   S rN   r  r   s     rT   r   z)InlinedGeneratorExpressionNode.infer_type$  r	  rU   c                 F    | j                   j                  |      | _         | S rN   )r	  r^  r   s     rT   rX  z,InlinedGeneratorExpressionNode.analyse_types$  s    88//4rU   c           
          |j                  | j                         d| j                  j                         d|j                  | j                         | j                               | j                  |       y )Nz$ = __Pyx_Generator_GetInlinedResult(r  )r   r  r	  r   r   r  r  s     rT   r  z3InlinedGeneratorExpressionNode.generate_result_code$  sS    

KKM488??,##DKKM488<> 	? 	T"rU   rN   )r[   r\   r]   r   r
  r  r  r   r   r  rZ  r   rX  r  r^   r_   s   @rT   r	  r	  $  s9     wHIFGD
1>#rU   r	  c                   T    e Zd ZdZdgZdZdZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zy)rO	  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                    |t         t        fv r_|r]|d   j                  rN|d   j                  t         ur9t	        |d   j
                  |d   j                  d|d   j                        |d<   t        j                  | |||       y )Nr   T)r   r  r   )r   r   )
r   r   r   r   rY  r   r   r   r   r  )rY   r   r   r   s       rT   r  zMergedSequenceNode.__init__$  su    Iz**tQ8W8WAw||9,"47;;T!W\\4]abc]d]p]pqQ$$T:rU   c                    g }| j                   D ]}  }|j                  r&|j                  r|j                  j                  dk  r5|j                  s|j                  rd |j                   D        }n|j                  }|j                  |        | j                  t        u rt        |      }|| _        y | j                  t        u rt        |      }|| _        y | j                  t        u sJ || _        y )Nr   c              3   4   K   | ]  }|j                     y wrN   r  r   s     rT   ri   z?MergedSequenceNode.calculate_constant_result.<locals>.<genexpr>%  s     B,,BrK	  )r   r   r   r   r   r  r   r   r  r   r   r   )rY   r  r   r  s       rT   r2  z,MergedSequenceNode.calculate_constant_result$  s    II 
	!D++0@0@##33q8""d&B&BB		B,,MM% 
	! 99 [F
  &	 YY*$6]F  & 99	))%rU   c                 2   g }| j                   D ]  }|j                  r+|j                  r|j                  j                        dk  r:|j                  s|j                  rfd|j                   D        }n|j                        }|j                  |        | j                  t        u r	 t        |      }|S | j                  t        u rt        |      }|S | j                  t        u sJ |S # t        $ r}| j                  |       Y d }~|S d }~ww xY w)Nr   c              3   @   K   | ]  }|j                          y wrN   )r<  )rf   r   r;  s     rT   ri   z8MergedSequenceNode.compile_time_value.<locals>.<genexpr>%  s     K#//5Ks   )r   r   r   r<  r   r  r   r   r  rV  r@  r   r   r   )rY   r;  r  r   r  r?  s    `    rT   r<  z%MergedSequenceNode.compile_time_value%  s   II 		!D++0@0@##66t<A""d&B&BKK//5MM% 		! 99 1V 	 YY*$6]F  99	))  1--a00
 1s   /C1 1	D:DDc                      yr  rW   r   s     rT   rl  z$MergedSequenceNode.type_dependencies)%  r  rU   c                     | j                   S rN   r  r   s     rT   r   zMergedSequenceNode.infer_type,%  r	  rU   c                 D   | j                   D cg c]1  }|j                  |      j                  |      j                  d      3 }}t	        |      dk(  r |d   j
                  | j
                  u r|d   S | j
                  t        t        t        fv sJ || _         | S c c}w )Nz2argument after * must be an iterable, not NoneTyper,   r   )	r   rX  r9  ra  r   r   r   r   r   )rY   rv   r   r   s       rT   rX  z MergedSequenceNode.analyse_types/%  s    
 yy	
  c"55c:LLDF
 
 t9>d1glldii77NyyXy*===	
s   6Bc                      yr  rW   rX   s    rT   rZ  zMergedSequenceNode.may_be_none@%  r  rU   c                    |j                  | j                         | j                  |       | j                  t        u }t        | j                        }t        |      }|j                  |       |r|j                  s |sc|j                  rW|j                  t        u rE|j                  | j                         d|j                         d       |j                  |       n|j                  | j                         d|rdn+|j!                         r|j                  t"        t        fv rdndd|j                         d|j%                  | j                         | j                               | j'                  |       |j)                  |       |j+                  |       t-               }|rd}d	}nd
}d}|D ]s  }|r|j                  s$|j                  s|j                  r|j.                  s|s|j                  r|j1                  d       |j                  D ]v  }|j                  |       |j3                  |j                  |d| j                         d|j                         d       |j)                  |       |j+                  |       x |r|j1                  d       n|j1                  d       |j                  |       |j3                  |j                  |d| j                         d|j                         d       |j)                  |       |j+                  |       v | j                  t4        u r|j                  d       |j                  dt6        j8                  d| j                         d       |j;                  | j                         t"               |j                  | j                         dt6        j8                  d|j%                  | j                         | j                               | j'                  |       |j                  d       t=        |      D ]-  }	|j>                  jA                  tC        jD                  |	        / y )NrS  rT  	PySet_Newr	  r	  rR  r  r	  __Pyx_PySet_Updater	  __Pyx_PyList_Extend)r	  r	  r1  r  )PySet_Updatez
Builtins.c)
ListExtendr	  r  rS  z = PyList_AsTuple(r2  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   )
rY   r   is_setr   r   r  add_funcextend_funcr   r  s
             rT   r  z+MergedSequenceNode.generate_evaluation_codeC%  si   dhh!!$'h&DIIDz%%d+t**t;;		Y@VJJT[[]DNN4DEF..t4JJ%;?;N;N;PUYU^U^cqs|b}U}7*+  ''txx@B C   &''-%"H.K.H/K 	"DD//43O3O11$:J:J$))KK @A99 )C006))#'' 4) * ..t4NN4() :;89))$/!!$(( -" # ''-OOD!5	"8 99
"JJsOJJ''   OODKKM>:JJ''''txx@B C   &JJsOWo 	PF--k.E.Ev.NO	PrU   c                 H    | j                   D ]  }|j                  |        y rN   )r   r  r  s      rT   r  zMergedSequenceNode.annotate%  s!    II 	 DMM$	 rU   N)r[   r\   r]   r  r   r  r  r  r2  r<  rl  r   rX  rZ  r  r  rW   rU   rT   rO	  rO	  $  sJ     xHG2K;&*."KPZ rU   rO	  c                   @    e Zd ZdZdgZeZdZdZd Z	d Z
d Zd Zd	 Zy
)SetNodez
    Set constructor.
    r   TzConstructing Python setc                     t        t        | j                              D ]@  }| j                  |   }|j                  |      }|j	                  |      | j                  |<   B t
        | _        d| _        | S r  )r  r   r   rX  r9  r   r   r  )rY   rv   r  r   s       rT   rX  zSetNode.analyse_types%  sh    s499~& 	7A))A,C##C(C11#6DIIaL	7 	rU   c                      yr  rW   rX   s    rT   rZ  zSetNode.may_be_none%  r  rU   c                 `    | j                   D ch c]  }|j                   c}| _        y c c}w rN   )r   r   r	  s     rT   r2  z!SetNode.calculate_constant_result%  s"    ?CyyI 3 3IIs   +c                     | j                   D cg c]  }|j                  |       }}	 t        |      S c c}w # t        $ r}| j	                  |       Y d }~y d }~ww xY wrN   )r   r<  r  rV  r@  )rY   r;  r   r  r?  s        rT   r<  zSetNode.compile_time_value%  s\    :>))D3#((.DD	-v; E  	-))!,,	-s   5
: 	AAAc           	         | j                   D ]  }|j                  |        | j                  |       |j                  | j	                         d|j                  | j	                         | j                               | j                  |       | j                   D ]c  }|j                  | j                  d| j	                         d|j                         d       |j                  |       |j                  |       e y )Nz = PySet_New(0); z
PySet_Add(r1  r  )r   r  r  r   r  r   r   r  r  r   r  r  r	  s      rT   r  z SetNode.generate_evaluation_code%  s    99 	/C((.	/!!$'

''txx@B	C 	T"99 	!C!!'+{{}cmmoFH &&t,NN4 	!rU   N)r[   r\   r]   r  r   r   r   r   r  rX  rZ  r2  r<  r  rW   rU   rT   r
  r
  %  s9     xHDN+KJ-!rU   r
  c                        e Zd ZdgZdZdZeZdZdZ	g Z
ed        Zd Zd Zd Zd	 Zd
 Zd Z fdZd ZdZd Zd Zd Z xZS )r  r  r,   FTc                 `     | ||D cg c]  \  }}t        |||       c}}      S c c}}w )Nr  r  )r  )rR   r   pairskr  s        rT   
from_pairszDictNode.from_pairs%  s;    3>C)E6:aSaq1)E F 	F )Es   *c                 r    t        | j                  D cg c]  }|j                   c}      | _        y c c}w rN   )r;  r  r   )rY   r   s     rT   r2  z"DictNode.calculate_constant_result%  s7    #151E1E%G)-$$%G  H %Gs   4c                    | j                   D cg c]8  }|j                  j                  |      |j                  j                  |      f: }}	 t	        |      S c c}w # t
        $ r}| j                  |       Y d }~y d }~ww xY wrN   )r  r  r<  r   r;  rV  r@  )rY   r;  r   r%
  r?  s        rT   r<  zDictNode.compile_time_value%  s    ,,. ((--d3TZZ5R5RSW5XY . .	-;.  	-))!,,	-s   =A
A 	B(A>>Bc                      yr  rW   r   s     rT   rl  zDictNode.type_dependencies%  r  rU   c                     t         S rN   r  r   s     rT   r   zDictNode.infer_type%  r	  rU   c                     t        d      5 }| j                  D cg c]  }|j                  |       c}| _        d d d        | _        | S c c}w # 1 sw Y   xY wr	  )r   r  rX  r	  )rY   rv   r	  r   s       rT   rX  zDictNode.analyse_types%  sc    & 	& !00$ ""3'$D 	
 &,"$	 	s   AAAAAc                      yr  rW   rX   s    rT   rZ  zDictNode.may_be_none%  r  rU   c                    t        j                  |d      }|j                  r| j                          | j                  j
                  rt        j                  |      st        | j                  d|z         t        | j                  | j                  D cg c]L  }t        |j                  |j                  j                  |      |j                  j                  |            N c}      S | j                  j                  |      st        | j                  d|z         | S |j
                  r|| _        |j                   s2t#        | j                        dk7  rt        | j                  d|z         n[|j                   rOt#        | j                        t#        |j$                  j&                        k  rt)        | j                  d	|z  d       | j                  D ]V  }t+        |j                  t,              r|j                  j.                  |_        |j                  j0                  sZt        |j                  j                  d
       t3        |j                  j                  t5        j6                  d            |_        t9        |j                  j                        }|j$                  j;                  |      }|s)t        |j                  j                  d|d|d       |j                  }t+        |t,              r|j.                  }|j=                  |j                  |      |_        Y | S t>        | y  ||      S c c}w )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 'r+  ) r   rA  rs   release_errorsr   r  r   r  r   r   r  r  r  r  r9  r   r	  r   rN  r  r   r   r  r   r   r  r
   rH  r{   r  r  rP   )rY   r"  rv   r   r  r  r   rS   s          rT   r  zDictNode.coerce_to%  sy   ++HTJ!yy++ ++H5$(($SV^$^_ !% 4 4;6  !txx/J/J3/O'+zz'D'DS'IK;6 7 7 99''1dhh Dx OP2 1 (( DI%%#d.B.B*Cq*Hdhh ^ai ij##D,@,@(ACHbHbDc(c"IH"TVWX,, Gdhh(:;#xx||DHxx11$((,,(IJ*488<<~?[?[\e?fgDHdhhnn-C%^^77<F!dhhllxY\,]^ $

%e-?@$)IIE%*__V[[#%F
G$  7$Xs33;;6s   AM
c                 J    | j                   D ]  }t        |        g | _         y rN   )r	  r   )rY   rw   s     rT   r/
  zDictNode.release_errors!&  s'    -- 	C	%'"rU   r  c                    |j                  | j                         | j                  |       | j                  j                  }|r| j                          |j                  d| j                         t        | j                        |j                  | j                         | j                        fz         | j                  |       d }n| j                  j                  }t               }d }d}| j                  D ]N  }|j                  |       |r| j                  r,|j                  d|j                   j#                         z         |j$                  }| j&                  r||j(                  sd }ny|j                   |v rd }nh|t        |j                         ur6|1t        |j                         }|j+                  |j                          nd }n|j+                  |j                          ||j                  d| j                         d|j#                         d       d}|j                  d|j#                         d	|j-                  |j                               |j                  d
       |j/                  | j                  d| j                         d|j$                  j#                         d|j                   j#                         d       | j&                  r||j                  d       | j                  r#|j                  d       n|j1                  |j$                  j                         }	|	J d|j$                  j                    d       |	j2                  }
|j                   j                         }|j                   j                  j4                  r\|j6                  j9                  t;        j<                  dd             |j                  d| j                          d|
 d| d| d	       n(|j                  | j                          d|
 d| d       |j?                  |       |jA                  |       Q |r0|j6                  j9                  t;        j<                  dd             y y )Nz%%s = __Pyx_PyDict_NewPresized(%d); %sFr]  r  r1  rb  Tr  r  r  r  r  r   zstruct member z1 not found, error was not handled during coercionrV  r  zmemcpy(r   r  r
  rS  rT  r  r  )!r  r   r  r   rs   r/
  r   r  r   r  r   r  rN  r  r  exclude_null_valuesr   r   r  r  r   r  r   r  r  r   rp  r   r   r   r   r  r  )rY   r   is_dictstruct_scope	keys_seenkey_typeneeds_error_helperr   r  r  	key_cnamevalue_cnames               rT   r  z!DictNode.generate_evaluation_code(&  s    	dhh!!$'))''!JJ7KKM,,-++DKKM488D;F FG
   &L99??LE	"(( 5	"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5	"n --''(=?TUW rU   c                 H    | j                   D ]  }|j                  |        y rN   )r  r  r  s      rT   r  zDictNode.annotatez&  s#    (( 	 DMM$	 rU   c                 b    | j                   D ci c]  \  }}|j                  | c}}S c c}}w rN   )r  r   )rY   r  r   s      rT   as_python_dictzDictNode.as_python_dict~&  s+     483G3GHZS%		5 HHHs   +)r[   r\   r]   r   r  r2
  r   r   rr  r  r	  r}  r'
  r2  r<  rl  r   rX  rZ  r  r/
  r  r  r  r<
  r^   r_   s   @rT   r  r  %  s     ""HGDOF FH-%N(
 -KPWd IrU   r  c                   <    e Zd ZddgZdZd Zd Zd Zd Zd Z	d	 Z
y)
r  r  r   Nc                 f    | j                   j                  | j                  j                  f| _        y rN   )r  r   r   rX   s    rT   r2  z&DictItemNode.calculate_constant_result&  s&    HH$$djj&@&@ BrU   c                    | j                   j                  |      | _         | j                  j                  |      | _        | j                   j                  |      | _         | j                  j                  |      | _        | S rN   )r  rX  r   r9  r   s     rT   rX  zDictItemNode.analyse_types&  s_    88))#.ZZ--c2
88..s3ZZ2237
rU   c                 p    | j                   j                  |       | j                  j                  |       y rN   )r  r  r   r  s     rT   r  z%DictItemNode.generate_evaluation_code&  s&    ))$/

++D1rU   c                 p    | j                   j                  |       | j                  j                  |       y rN   )r  r  r   r  s     rT   r  z#DictItemNode.generate_disposal_code&  s&    ''-

))$/rU   c                 p    | j                   j                  |       | j                  j                  |       y rN   )r  r  r   r  s     rT   r  zDictItemNode.free_temps&  s&    D!

d#rU   c                 D    t        | j                  | j                  g      S rN   )r  r  r   rX   s    rT   __iter__zDictItemNode.__iter__&  s    TXXtzz*++rU   )r[   r\   r]   r   r  r2  rX  r  r  r  rD
  rW   rU   rT   r  r  &  s2    
 wHKB20$,rU   r  c                   .    e Zd ZdgZdZd Zd Zd Zd Zy)SortedDictKeysNoder   Tc                 r    t         j                  | |j                  |       t        j                  | _        y r  )r   r  r   r   r   r   r	  s     rT   r  zSortedDictKeysNode.__init__&  s(    $S1%%	rU   c                     | j                   j                  |      }|j                  t        j                  u r|j                  d      }|| _         | S r  )r   rX  r   r   r   ra  r  s      rT   rX  z SortedDictKeysNode.analyse_types&  sG    hh$$S)88w(((''35CrU   c                      yr  rW   rX   s    rT   rZ  zSortedDictKeysNode.may_be_none&  r  rU   c                 N   | j                   j                         }| j                   j                  t        j                  u rb|j                  | j                         d|d|j                  | j                         | j                               | j                  |       nV|j                  j                  t        j                  dd             |j                  t        j                   d            }|j                  | j                         d|d|d|j                  | j                         | j                               | j                  |       |j                  d| j                         z         | j#                  |d	| j                         z         |j                  |j                  | j                         | j                               | j                  |       |j                  d
       |j%                  | j                  d| j                         z         y )Nz = PyDict_Keys(r  PyObjectCallMethod0r6  keysz = __Pyx_PyObject_CallMethod0(r1  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
   rH  r  r  )rY   r   dict_result
keys_cnames       rT   r  z'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'$..*::	<rU   N)	r[   r\   r]   r   r  r  rX  rZ  r  rW   rU   rT   rF
  rF
  &  s"    wHG&<rU   rF
  c                       e Zd ZdZeZd Zy)SortedListNodez0Sorts a newly created Python list in place.
    c                     |j                  |j                  d| j                  j                          d| j                               y )NzPyList_Sort(r  )r   r  r   r  r   r  s     rT   r  z#SortedListNode.generate_result_code&  s4    

4))L9J8K1*MtxxXYrU   N)r[   r\   r]   r  r   r   r  rW   rU   rT   rP
  rP
  &  s    DZrU   rP
  c                       e Zd Zd Zd Zy)ModuleNameMixinc                 <    |j                  | j                  d      S NT
identifier)rg  r  r  s     rT   get_py_mod_namezModuleNameMixin.get_py_mod_name&  s%    '' ( / 	/rU   c                 <    |j                  | j                  d      S rU
  )rg  r  r  s     rT   get_py_qualified_namez%ModuleNameMixin.get_py_qualified_name&  s#    ''MMd ( , 	,rU   N)r[   r\   r]   rX
  rZ
  rW   rU   rT   rS
  rS
  &  s    /,rU   rS
  c                   <    e Zd ZdgZeZdZd Zd Zd Z	d Z
dZd Zy	)
r(  docTc                      y rN   rW   r   s     rT   r   zClassNode.analyse_annotations&  r   rU   c                     t         S rN   rI  r   s     rT   r   zClassNode.infer_type&      rU   c                     | j                   r@| j                   j                  |      | _         | j                   j                  |      | _         |j                  t	        j
                  dd             | S )NCreateClassr6  )r\
  rX  r9  r   r   r   r   s     rT   rX  zClassNode.analyse_types&  sV    88xx--c2DHxx2237DH[44]DVWXrU   c                      yr  rW   rX   s    rT   rZ  zClassNode.may_be_none'  r]  rU   Constructing Python classc                    | j                   }|j                  | j                        }| j                  rx|j	                  | j
                  d|j                  j                         d|j                  t        j                  d            d| j                  j                         d       | j                  |      }| j                  |      }|j                  | j                         d|j                  j                         d|j                  j                         d|d|d|d|j                  | j                         | j
                               | j!                  |       y )Nr  r1  r  r  z = __Pyx_CreateClass(r  )class_def_noder  rt   r\
  r  r   r;  r   r
   rH  rX
  rZ
  r   r  basesr   r  )rY   r   re
  r   py_mod_namer  s         rT   r  zClassNode.generate_result_code
'  s   ,,&&tyy188!!$(("''113**&44Y?AHH&&(	*+ **40--d3

$$..0##--/''txx@B	C 	T"rU   N)r[   r\   r]   r   r   r   r  r   r   rX  rZ  r  r  rW   rU   rT   r(  r(  &  s5     wHDG .K#rU   r(  c                   >    e Zd Zg ZeZdZdZd Zd Z	d Z
dZd Zd Zy	)
r)  FTc                     t         S rN   rI  r   s     rT   r   zPy3ClassNode.infer_type4'  r_
  rU   c                     | S rN   rW   r   s     rT   rX  zPy3ClassNode.analyse_types8'  r  rU   c                      yr  rW   rX   s    rT   rZ  zPy3ClassNode.may_be_none;'  r]  rU   rc
  c           
         ddl m} | j                  j                  }|j                  j                         D cg c]Y  }|j                  rKt        |j                  t        |j                  |j                        |j                  j                        [ }}|rt        ||      }t        |t        j                  d            }|j                  |j                        xs! |j!                  |j                  t"        |      |_        t'        |||      }|j)                  |       | j                  j*                  j,                  j/                  d	|       y y c c}w )
Nr,   AnnotationWriterr;  r  r  __annotations__r  )r  r   r   )AutoDocTransformsrn
  re
  r   r  r  ro  r  r  rt   stringr  r
  r
   rH  r  r  r   r   r0   r  bodyrI  insert)	rY   rv   rn
  positionr   
dict_itemsannotations_dictr  r   s	            rT   r   z Py3ClassNode.analyse_annotations@'  s   7&&** ++-
 1A1A 		(%**E&&--

 
 '*M8.*F*FGX*YZC1cS__SXXyZb5cCI'c?OPD%%c*$$**11!T: 
s   AEc                    |j                   j                  t        j                  dd             |j	                  | j
                        }| j                  }|j                  r|j                  j                         nd}|j                  r|j                  j                         }n| j                  rd}nd}|j                  d| j                         |||j                  j                         |j                  j                         || j                  | j                   |j#                  | j                         | j$                        f	z         | j'                  |       |j)                  | j                                y )NPy3ClassCreater6  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  rt   re
  mkwr   	metaclass
force_typer   r  rf
  r;  calculate_metaclassallow_py2_metaclassr   r   r  put_make_object_deferred)rY   r   r   re
  ry
  rz
  s         rT   r  z!Py3ClassNode.generate_result_codeT'  s3   ))+*A*ABRTf*gh&&tyy1,,0>0B0Bn  **,##&00::<I__3I>I

G$$..0##--/((((''txx@	KB 	B
	C 	T"%%dkkm4rU   N)r[   r\   r]   r   r   r   r{
  r  r   rX  rZ  r  r   r  rW   rU   rT   r)  r)  #'  s8     HDJG .K;(5rU   r)  c                   "    e Zd Zg Zd Zd Zd Zy)PyClassMetaclassNodec                 *    t         | _        d| _        | S r  )r   r   r  r   s     rT   rX  z"PyClassMetaclassNode.analyse_typesu'  s    "	rU   c                      yr  rW   rX   s    rT   rZ  z PyClassMetaclassNode.may_be_nonez'  r]  rU   c           
      N   | j                   j                  }| j                   j                  }|rU|j                  j	                  t        j                  dd             d|j                         d|j                         d}nB|j                  j	                  t        j                  dd             d|j                         z  }|j                  | j                         d|d	|j                  | j                         | j                               | j                  |       y )
NPy3MetaclassGetr6  z__Pyx_Py3MetaclassGet(r1  r  CalculateMetaclassz"__Pyx_CalculateMetaclass(NULL, %s)rS  r  )re
  rf
  ry
  r   r   r   r   r  r   r   r   r  )rY   r   rf
  ry
  rL  s        rT   r  z)PyClassMetaclassNode.generate_result_code}'  s    ##))!!%%--''(9;MNP 

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

t''txx@B	C 	T"rU   Nr[   r\   r]   r   rX  rZ  r  rW   rU   rT   r
  r
  n'  s    
 H
#rU   r
  c                   $    e Zd ZdgZd Zd Zd Zy)PyClassNamespaceNoder\
  c                     | j                   r/| j                   j                  |      j                  |      | _         t        | _        d| _        | S r  )r\
  rX  r9  r   r   r  r   s     rT   rX  z"PyClassNamespaceNode.analyse_types'  s=    88xx--c2EEcJDH"	rU   c                      yr  rW   rX   s    rT   rZ  z PyClassNamespaceNode.may_be_none'  r]  rU   c                    |j                  | j                        }| j                  |      }| j                  |      }| j                  }d}| j
                  r| j
                  j                         n|}|j                  r|j                  j                         n|}|j                  r|j                  j                         n|}	|j                  | j                         d|	d|j                  j                         d|d|d|d|d|d|j                  | j                         | j                               | j                  |       y )Nz(PyObject *) NULLz = __Pyx_Py3MetaclassPrepare(r1  r  )r  rt   rX
  rZ
  re
  r\
  r  ry
  r   rz
  r   rf
  r   r   r  )
rY   r   r   rg
  r  re
  nulldoc_codery
  rz
  s
             rT   r  z)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"rU   Nr
  rW   rU   rT   r
  r
  '  s     wH#rU   r
  c                   .    e Zd ZdZeZg ZdZd Zd Z	d Z
y)ClassCellInjectorNodeTFc                     | S rN   rW   r   s     rT   r^  z)ClassCellInjectorNode.analyse_expressions'  r  rU   c                     | j                   sJ |j                  | j                         d|j                  | j                         | j                               | j                  |       y )Nz = PyList_New(0); )	is_activer   r  r   r   r  r  s     rT   r  z*ClassCellInjectorNode.generate_result_code'  sR    ~~

''txx@B	C 	T"rU   c                     | j                   sJ |j                  j                  t        j                  dd             |j                  | j                  d| j                         d|d       y )NCyFunctionClassCellCythonFunction.cz__Pyx_CyFunction_InitClassCell(r1  r  )r
  r   r   r   r   r  r   r  )rY   r   classobj_cnames      rT   generate_injection_codez-ClassCellInjectorNode.generate_injection_code'  sW    ~~))##$9;MN	PdhhKKM>)+ 	,rU   N)r[   r\   r]   r  r   r   r   r
  r^  r  r
  rW   rU   rT   r
  r
  '  s%    GDHI#,rU   r
  c                   (    e Zd Zg ZdZdZeZd Zd Z	y)ClassCellNodeTFc                     | S rN   rW   r   s     rT   rX  zClassCellNode.analyse_types'  r  rU   c                    | j                   s4|j                  | j                         dt        j                  d       n3|j                  | j                         dt        j
                  d       |j                  d| j                         d|j                  | j                        d       |j                  | j                         t               y )Nz  = __Pyx_CyFunction_GetClassObj(r2  z =  z->classobj;zif (!zJ) { PyErr_SetString(PyExc_RuntimeError, "super(): empty __class__ cell"); rs  )
is_generatorr   r  r   
self_cnamegenerator_cnamer   r   r  r   r  s     rT   r  z"ClassCellNode.generate_result_code'  s      JJ!!# $ JJv557 8

 )+	,
 	~6rU   N)
r[   r\   r]   r   r  r
  r   r   rX  r  rW   rU   rT   r
  r
  '  s     HGLD7rU   r
  c                       e Zd Zg dZdZdZdZdZdZdZ	dZ
eZdZdZdZed        Zed        Zd Zd Zd	 Zd
Zd Zd Zd Zd Zy)r'  )defaults_tupledefaults_kwdictrv
  FNr,   c                      | |j                   ||j                  j                  |xs |j                  |j                        S )N)r_  pymethdef_cnamebindingspecialized_cpdefs)r   r   r
  r
  )rR   r   r
  s      rT   from_defnodezPyCFunctionNode.from_defnode
(  s=    HH JJ666t66#66
 	
rU   c                 .    | j                   j                  S rN   )r_  code_objectrX   s    rT   r
  zPyCFunctionNode.code_object(  s    }}(((rU   c                 @    | j                   r| j                  |       | S rN   )r
  analyse_default_argsr   s     rT   rX  zPyCFunctionNode.analyse_types(  s    <<%%c*rU   c                    g }g }g }g }g }|j                   xs$ | j                  j                  xr |j                  }| j                  j                  D ]  }|j
                  r)|s|j
                  j                  rgt        |j                  |j
                        |_        |j
                  j                  rl|j
                  j                  |j                  |      |_        n@d|_        |j                  j                  r|j                  |       n|j                  |       |j
                  j                  rT|j
                  j                  j                  |      r/|j                  r|j                  |       n|j                  |       |j                   sH|j                   j#                  |      |_        |j                  |j                  |j$                  |j                   j&                  f        | j                  j(                  | j                  j*                  fD ]n  }|s|j                   s|j                   j#                  |      |_        |j                  |j                  |j$                  |j                   j&                  f       p | j                  j,                  }	|	r[|	j#                  |      | j                  _        |j                  |	j                  t/        j0                  d      |	j&                  f       |s|r|j3                         }
g }|D ]7  }|j                  }|j4                  r|j6                  }|j                  |       9 ||D cg c]  }|j                   c}z  }|
j9                  | j                  |      | _        | j:                  j                  j<                  }t?        tA        |jB                  jE                                     }|D cg c]  \  }}|jG                  d      s| }}}g | _$        tK        ||z   |      D ]3  \  }}|jL                  |_'        | jH                  j                  ||f       5 tQ        |      | _)        | jH                  D ])  \  }}tT        jV                  d|jL                  |_,        + |j$                  | j                  _-        |s|r| j:                  |rTt]        | j                  |D cg c]  }|j
                   c}      }|j#                  |      j_                  |      | _0        |r>tc        | j                  |D cg c]C  }te        |j                  tg        |j                  |j$                        |j
                        E c}	      }|j#                  |      | _4        n| jj                  s|r6tm        | j                  || j:                  j                  j<                        }nto        | j                        }|r6tq        | j                  || j:                  j                  j<                        }nto        | j                        }ts        jt                  | j                  g ddts        jv                  | j                  tx        t]        | j                  ||g      
      dt/        j0                  d            }|j3                         }
tr        jz                  j}                  ||
      }|j                  |
       |j                  |
      }|j                  }|j                  j                  |j                        |_A        d|_C        d|_D        || j                  _E        |r[tc        | j                  |D cg c]  \  }}}te        |tg        ||      |      ! c}}}	      }|j#                  |      | _F        yyc c}w c c}}w c c}w c c}w c c}}}w )zB
        Handle non-literal function's default arguments.
        TrF  r   r)  Nr  r;  r  r  )r  r   __defaults__)r   r`  ra  rr
  
decoratorsrt   F)Gr  r_  
is_wrapperr  r   ru   r   DefaultLiteralArgNoder   r   r  
is_dynamicrs   r  r  kw_onlyro  rX  rt   rq
  r`  ra  return_type_annotationr
   rH  rE  r  ru  declare_defaults_c_classdefaults_entryrN  r  r  r  r  r  defaultsr  r   defaults_class_keyr   defaults_pyobjectsr   dynamic_args_cnamer)  defaults_structrF  r9  r
  r  r  r  r
  r
  DefaultsTupleNoder  DefaultsKwDictNoder   DefNodeReturnStatNoder   CompilerDirectivesNodefor_internalr  r^  rr
  local_scopepy_wrapper_requiredpymethdef_requireddefaults_getterrv
  )rY   rv   nonliteral_objectsnonliteral_otherdefault_argsdefault_kwargsannotationsmust_use_constantsr   ro  r  rY  r%  defaults_class_scopearg_entriesrt   r?  r   r
  r
  r
  directives_noder   r   rv
  s                            rT   r
  z$PyCFunctionNode.analyse_default_args(  sy      !11gdmm6N6N6fSVSfSf==%% 	OC{{){{--&;CGGS[[&Q;;++*-++*?*?#*NCK)-88//.55c:,33C8;;##(8(8(O(OPS(T{{&--c2$++C0~~!$!=!=c!B""CGGSXXs~~7L7L#MN)	O, MM**DMM,F,FG 	OCs~~!$!=!=c!B""CGGSXXs~~7L7L#MN	O
 ]]99
3=3K3KC3PDMM0
0L0LX0V * 1 1 3 4 !1++-LE) $??!JJEU#	$
 +;=Csxx==E"."G"GRW"XD#'#6#6#;#;#A#A  !&:&B&B&H&H&J!KLK-8T'$DOOE<RATKTDM!"47G"GU 3
U).&$$c5\23 '**<&=D#"mm <
U--u{{%<!< -A,E,EDMM)>""*%.txx/;?=(+?= &>N*8*F*Fs*K*^*^_b*cD'!&.txx
 $2J3
  	 %GG 4SWWCHH M"%++/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 C5 %Cu 1#TB!C5  6
 %5$B$B3$GD! C > U?=J3RC5s%   "_,__#_
:A_
<$_c                      yr  rW   rX   s    rT   rZ  zPyCFunctionNode.may_be_none(  r  rU   zConstructing Python functionc                      y)Nr  rW   rX   s    rT   closure_result_codez#PyCFunctionNode.closure_result_code(  s    rU   c                 b    | j                   r| j                  |       y | j                  |       y rN   )r
  generate_cyfunction_codegenerate_pycfunction_coder  s     rT   r  z$PyCFunctionNode.generate_result_code(  s%    <<))$/**40rU   c                 "   | j                  |      }|j                  | j                         d| j                  d| j	                         d|d|j                  | j                         | j                        	       | j                  |       y )Nz = PyCFunction_NewEx(&r1  r  )rX
  r   r  r
  r
  r   r   r  )rY   r   rg
  s      rT   r
  z)PyCFunctionNode.generate_pycfunction_code(  sp    **40

$$((*''txx@B	C 	T"rU   c                 $
   | j                   r| j                   d   }n| j                  }| j                   s| j                  r2|j                  j	                  t        j                  dd             d}n1|j                  j	                  t        j                  dd             d}g }|j                  r|j                  d       n|j                  r|j                  d       |j                  j                  j                  r'|j                  j                  s|j                  d	       |j                  r|j                  d
       |rdj!                  |      }nd}|j#                  t$        j&                        }| j(                  j+                  |       |j-                  | j/                         d|d| j0                  d|d| j3                  |      d| j5                         d| j7                  |      d|d| j(                  j9                         d|j;                  | j/                         | j<                               | j?                  |       |jA                  | j/                                |jB                  r`|jD                  sJ d       |jD                  d   }|j-                  d|jF                  j/                         d| j9                         d       | jH                  r|j-                  d| j/                         d|j#                  | jJ                  jL                  jN                        d|jQ                  | j<                               d| jJ                  jL                  jR                  d| j/                         d}| jH                  D ]4  \  }}	|jT                  s|jW                  || d|	jX                          6 | jZ                  r>|j-                  d| j/                         d| jZ                  j9                         d       | j                   s| j\                  r>|j-                  d| j/                         d| j\                  j9                         d       |j^                  rD|j-                  d| j/                         d|j^                  j                  j`                  d       | jb                  r?|j-                  d| j/                         d| jb                  j9                         d       y y y )Nr   FusedFunctionr
  __pyx_FusedFunction_NewCythonFunction__Pyx_CyFunction_New__Pyx_CYFUNCTION_STATICMETHOD__Pyx_CYFUNCTION_CLASSMETHOD__Pyx_CYFUNCTION_CCLASS__Pyx_CYFUNCTION_COROUTINEr  r  rS  z(&r1  r  zpyclass_stack is emptyr  zPyList_Append(r2  z#if (!__Pyx_CyFunction_InitDefaults()) !__Pyx_CyFunction_Defaults(struct r  r)  )cyfunc_struct_targetz"__Pyx_CyFunction_SetDefaultsTuple(z#__Pyx_CyFunction_SetDefaultsKwDict(z#__Pyx_CyFunction_SetDefaultsGetter(z$__Pyx_CyFunction_SetAnnotationsDict()2r
  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
  rZ
  r
  rX
  r   r   r   r  r~
  requires_classobjpyclass_stack
class_cellr
  r
  r   r|  r   objstruct_cnamer
  r  r   r
  r
  r
  rh  rv
  )
rY   r   r_  r  flagsr]  
class_noder
  r   r   s
             rT   r
  z(PyCFunctionNode.generate_cyfunction_code(  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"%%dkkm4%%%%?'??++B/JJJ))002NN$&'
 ==JJKKM--d.A.A.F.F.T.TUOODHH-/0 ##((88$++-IH"mm j
U>>00xjXZ[`[f[fZgLh0ij 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 % 'rU   )r[   r\   r]   r   r
  r_  r
  r
  r
  r
  rv
  r   r   r  r
  r
  r}  r
  r{  r
  rX  r
  rZ  r  r
  r  r
  r
  rW   rU   rT   r'  r'  '  s     IHGHHNNODG
 
 ) )
AHF 1K1
#VGrU   r'  c                       e Zd ZdZdZd Zy)InnerFunctionNodeTc                 B    | j                   rdt        j                  z  S y)Nz((PyObject*)%s)r  )needs_closure_coder   cur_scope_cnamerX   s    rT   r
  z%InnerFunctionNode.closure_result_code)  s    ""$v'='===rU   N)r[   r\   r]   r
  r
  r
  rW   rU   rT   r
  r
  )  s     GrU   r
  c                   V    e Zd ZdZdZdZdZdZdZdZ	dZ
dZd Zed        Zed        Zy)DefFuncLikeNodez\
    Adapter for CFuncDefNode to give it the same attributes as DefNode in CodeObjects.
    Fr   Nc                     |j                   j                  | _        |j                   j                  | _        |j                  | _        |j
                  | _        || _        y rN   )r   rt   rN  r
  r   r   _cfuncdef_node)rY   cfuncdef_nodes     rT   r  zDefFuncLikeNode.__init__-)  sK    !'',,	(..44!&&	 $$+rU   c                 .    | j                   j                  S rN   )r
  node_positionsrX   s    rT   r
  zDefFuncLikeNode.node_positions4)  s    ""111rU   c                 .    | j                   j                  S rN   )r
  node_positions_to_offsetrX   s    rT   r
  z(DefFuncLikeNode.node_positions_to_offset8)  s    "";;;rU   )r[   r\   r]   r  r
  r
  is_asyncgenis_generator_expressionnum_posonly_argsrb  r`  ra  r  r{  r
  r
  rW   rU   rT   r
  r
  )  s`     LLK#OHL, 2 2 < <rU   r
  c                   J    e Zd ZdgZdZdZd Zed        Zd Z	d
dZ
d Zd	 Zy)CodeObjectNodevarnamesFNc                 T   t         j                  | |j                  |       t        |j                        }|j
                  j                  D cg c]  }|j                  s| }}||z   D cg c]#  }t        |j                  |j                        % c}| _	        y c c}w c c}w )N)r_  r;  )
r   r  r   r  r   r
  r  rt   r  r
  )rY   r_  r   r   
local_varss        rT   r  zCodeObjectNode.__init__G)  s    $x@HMM"%-%9%9%E%ERccR
R j(
 !9
 S
s   B "B /(B%c                 $     | t        |            S rN   )r
  )rR   r
  s     rT   	for_cfunczCodeObjectNode.for_cfuncQ)  s    ?=122rU   c                      yr  rW   rX   s    rT   rZ  zCodeObjectNode.may_be_noneU)  r  rU   c                 ^    | j                   |j                  |       | _         | j                   S rN   r  get_py_codeobj_constr  s     rT   r  z$CodeObjectNode.calculate_result_codeX)  s-    ##88>DrU   c                 J    | j                   |j                  |       | _         y y rN   r  r  s     rT   r  z#CodeObjectNode.generate_result_code])  s&    ##88>D $rU   c                    | j                   }| j                  d   }|j                  |j                  d      }|j                  d   j	                         }t
        j                  j                  |      r|j                  d   j                         }t        j                  t        j                  |      j                               }|j                  |      }|j                  rVt        j                  t!        |j                  |      j#                  d      d      }|j                  |      }	t%        |      }
nd}	d}
ddg}|j&                  r|j)                  d	       |j*                  r|j)                  d
       |j,                  r|j)                  d       n;|j.                  r|j)                  d       n|j0                  r|j)                  d       |j2                  rd}nt%        |j4                        }|j6                  }|j8                  }t%        | j:                        }ddj=                  |      z  xs d}|j?                  d       |j?                  d||z
   d| d| d| d| d| d       | j:                  D ]  }|jA                  |        | j:                  D cg c]  }|jC                          c}xs dg}|j?                  ddj=                  |      z         | j:                  D ]$  }|jE                  |       |jG                  |       & |j?                  | jH                   d| d| d|	 d| jH                   d| d       |j?                  d       y c c}w )Nr,   TrV
  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 = {r1  rX  z"PyObject* const varnames[] = {%s};z% = __Pyx_PyCode_New(descr, varnames, z", tuple_dedup_map); if (unlikely(!z)) goto rT  r   )%r_  r   rg  rt   get_filenametable_entryr'   r  isabsr  r
   rH  r(   Pathas_posixr
  rU  r$   rv  r   r`  r  ra  r
  r
  r
  r
  r   r
  rb  r
  r  r   r  r   r  r  r  )rY   r   r  r  first_linenofunc_name_result	file_pathfile_path_result
line_tableline_table_resultline_table_lengthr
  argcountr
  kwonly_argcountnlocalsrl  r
  s                     rT   generate_codeobjzCodeObjectNode.generate_codeobja)  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 $ 8 8 D #J & !  0==LL&LL)*LL-.LL(LL('' H499~H00..dmm$$sxx6=# 	

3

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

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

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

3% >s   'M%rN   )r[   r\   r]   r   r  r  r  r}  r  rZ  r  r  r  rW   rU   rT   r
  r
  =)  sC     |HGK
 3 3 
?QrU   r
  c                   B     e Zd Zg ZdZdZ fdZd Zd Zd Z	d Z
 xZS )r
  TFc                     t         |   |       || _        |j                  | _        | j                  j                  | _        d| _        y r  )rP   r  r   r   r   	evaluatedr  s      rT   r  zDefaultLiteralArgNode.__init__)  s;    "22HHMM	rU   c                     | S rN   rW   r   s     rT   rX  z#DefaultLiteralArgNode.analyse_types)  r  rU   c                      y rN   rW   r  s     rT   r  z*DefaultLiteralArgNode.generate_result_code)  r   rU   c                 b    | j                   s#| j                  j                  |       d| _         y y r  )r"  r   r  r  s     rT   r  z.DefaultLiteralArgNode.generate_evaluation_code)  s'    ~~HH--d3!DN rU   c                 h    | j                   j                  | j                  j                               S rN   )r   r	  r   r  rX   s    rT   r  zDefaultLiteralArgNode.result)  s"    yy""488??#455rU   )r[   r\   r]   r   r   r  r  rX  r  r  r  r^   r_   s   @rT   r
  r
  )  s-    
 HJG"
6rU   r
  c                   4     e Zd Zg Z fdZd Zd Zd Z xZS )DefaultNonLiteralArgNodec                 @    t         |   |       || _        || _        y rN   )rP   r  r   r
  )rY   r   r   r
  rS   s       rT   r  z!DefaultNonLiteralArgNode.__init__)  s    .rU   c                 J    | j                   j                  | _        d| _        | S r  )r   r   r  r   s     rT   rX  z&DefaultNonLiteralArgNode.analyse_types)  s    HHMM	rU   c                      y rN   rW   r  s     rT   r  z-DefaultNonLiteralArgNode.generate_result_code)  r   rU   c                     d| j                   j                  dt        j                  d| j                   j	                  | j
                  j                        j                  S )Nr
  r1  r	  )r
  rt   r   r
  rE  r   r
  r   rX   s    rT   r  zDefaultNonLiteralArgNode.result)  sI      %%v'8'8  ''(C(CDJJL 	LrU   )	r[   r\   r]   r   r  rX  r  r  r^   r_   s   @rT   r(  r(  )  s     H/

LrU   r(  c                   *     e Zd Z fdZd fd	Z xZS )r
  c                     g }|D ]C  }|j                   j                  st        |||      }n|j                   }|j                  |       E t        |   ||       y Nr  )ru   r   r(  r  rP   r  )rY   r   r
  r
  r   r   rS   s         rT   r  zDefaultsTupleNode.__init__)  s[     	C;;)).sCIkkKK	 	4(rU   c                 B    t         |   ||      j                  |      S rN   )rP   rX  r9  )rY   rv   rE	  rS   s      rT   rX  zDefaultsTupleNode.analyse_types)  s     w$S-8KKCPPrU   rj  r[   r\   r]   r  rX  r^   r_   s   @rT   r
  r
  )  s    )Q QrU   r
  c                        e Zd Z fdZ xZS )r
  c                 *   g }|D ]z  }t        |j                  |j                        }|j                  j                  st        |||      }n|j                  }|j                  t        |j                  ||             | t        | %  ||       y )Nr;  r  r  )
r  r   rt   ru   r   r(  r  r  rP   r  )rY   r   r
  r
  r  r   rt   rS   s          rT   r  zDefaultsKwDictNode.__init__ *  s~     	EC'sxx@D;;)).sCIkkLLcgg4sCD	E 	e4rU   )r[   r\   r]   r  r^   r_   s   @rT   r
  r
  )  s    	5 	5rU   r
  c                   X     e Zd ZdgZ ej
                  d      Zd Z fdZ fdZ	 xZ
S )
LambdaNoder_  z<lambda>c                    t        | d      ry |j                  d      x| _        | j                  _        d| j                  _        d| j                  _        d| j                  _        | j                  j                  |       | j                  j                  j                  | _	        |j                  | j                         y )Nlambda_namelambdaT)rL  next_idr7  r_  no_assignment_synthesisr
  rg  r  r   r
  add_lambda_defr   s     rT   r  zLambdaNode.analyse_declarations*  s    4'7:{{87LL4==404-+/(&*#**3/#}}22BB4==)rU   c                 b    | j                   j                  |      | _         t        |   |      S rN   )r_  r^  rP   rX  r3  s     rT   rX  zLambdaNode.analyse_types&*  s)    99#>w$S))rU   c                 Z    | j                   j                  |       t        |   |       y rN   )r_  r	  rP   r  rY   r   rS   s     rT   r  zLambdaNode.generate_result_code**  s"    --d3$T*rU   )r[   r\   r]   r   r
   rH  rt   r  rX  r  r^   r_   s   @rT   r5  r5  *  s2     ,K'>''
3D
**+ +rU   r5  c                        e Zd Z ej                  d      ZdZej                  dgz   Zej                  dgz   Z	 fdZ
 fdZd Z xZS )GeneratorExpressionNodegenexprFcall_parametersc                 :    t        |   |g|i | g | _        y rN   )rP   r  rB  )rY   r   r   r  rS   s       rT   r  z GeneratorExpressionNode.__init__>*  s"    ,t,t,!rU   c                 P   t        | d      ry |j                  d      | _        t        |   |       d| j
                  _        d| j
                  _        d| j
                  _        t        j                  | j
                  j                  _        t        | j                  t        j                         rMt        | j                  j"                  t$              sJ | j                  j"                  j'                  d |       y t        | j                  t        j(                        sJ y )Ngenexpr_namerA  F)rL  r9  rE  rP   r  r_  r
  r
  rg  r5   pyfunction_noargsr   r&  r   r	  r   r	  r8  r  r  r	  r3  s     rT   r  z,GeneratorExpressionNode.analyse_declarationsB*  s    4(KK	2$S)+0(,1)&+#(1(C(C%dii!5!56dii00.AAII))$4dii)>)>???rU   c                    | j                         g| j                  D cg c]  }|j                          c}z   }dj                  |      }|j	                  | j                         d| j
                  j                  j                  d|d|j                  | j                         | j                               | j                  |       y c c}w )Nr1  rS  rR  r  )r
  rB  r  r  r   r_  r   rh  r   r   r  )rY   r   cpargs_to_calls       rT   r  z,GeneratorExpressionNode.generate_result_codeU*  s    1134040D0DF""))+FGyy.

##00''txx@	B	C 	T" Gs   C)r[   r\   r]   r
   rH  rt   r
  r5  r   r   r  r  r  r^   r_   s   @rT   r@  r@  /*  sT     (>''	2DG((,=+>>K""&7%88H"@&
#rU   r@  c                   H    e Zd ZdgZeZdZdZdZdZ	dZ
d Zd Zd Zd Zd	 Zy
)YieldExprNoder   r   Fyieldc                 \   | j                   r| j                  r/| j                  r#t        | j                  d| j
                  z         d| _        | j                  Q| j                  j                  |      | _        | j                  j                  j                  s| j                  |       | S )Nz'%s' not supported herer,   )	label_numis_yield_fromin_async_genr   r   expr_keywordr  r   rX  r   rs   coerce_yield_argumentr   s     rT   rX  zYieldExprNode.analyse_typesq*  s~    ~~$"4"49J9J$((58I8IIJ88xx--c2DH88==,,**3/rU   c                 D    | j                   j                  |      | _         y rN   r   r9  r   s     rT   rR  z#YieldExprNode.coerce_yield_argument{*  s    88..s3rU   c                    | j                   r| j                   j                  |       | j                   j                  |       |j                  t        j
                  d| j                   j                  t              d       | j                   j                  |       | j                   j                  |       n$|j                  t        j
                  t               | j                  |       y NrS  rT  )r   r  r  r   r   r
  r  r   r  r  put_init_to_py_nonegenerate_yield_coder  s     rT   r  z&YieldExprNode.generate_evaluation_code~*  s    88HH--d3HH))$/JJ''HH&&~689 HH2248HH%$$V%8%8.I  &rU   c           	         |j                  | j                  j                  dd            \  }}|j                  |       g }|j                  j
                  j                          |j                  j                         D ]  \  }}}|j                  j
                  j                  |      }|j                  |||f       |j                  r5|j                  j                  t        j                  dd             d|z  }n|j                  ||       |j!                  t"        j$                  d|d|d        |j                  j&                  d	   }	|j                  j&                  d
   }
|	s|
r+|j)                  t"        j*                  | j,                         |j                  t"        j*                  t.               |j1                          |j                  j2                  #|j!                  dt"        j4                  z         n"|j!                  dt"        j4                  z         |j!                  d| j6                  rdndd| j8                  rdndd       |j!                  dt"        j4                  |fz         | j6                  r/| j8                  s#|j!                  dt"        j*                  z         n"|j!                  dt"        j*                  z         |j;                  |       |	s|
r|j=                  | j,                         |D ]  \  }}}t"        j$                  d|}|j                  rd|z  }|j!                  |d|d       |j>                  r'|j!                  d|z         |jA                  ||       w|jB                  s|j!                  |d|d        | jE                  |t"        jF                         | jH                  ri| jK                  |       |jM                  | jO                         dt"        jF                  d       |jQ                  | jO                         t.               yy)z
        Generate the code to return the argument in 'Naming.retval_cname'
        and to continue at the yield label.
        rr  r  r  r  z__PYX_STD_MOVE_IF_SUPPORTED(%s)r)  rS  rT  profile	linetrace)r   Nz"__Pyx_Coroutine_SwapException(%s);z+__Pyx_Coroutine_ResetAndClearException(%s);z/* return from zasync r  zgenerator, awaitrL  zing value */z%s->resume_label = %d;z,return __Pyx__PyAsyncGenValueWrapperNew(%s);z
return %s;r  z.memview = NULL; z.data = NULL;r  ))new_yield_labelrQ  replace	use_labelr  closure_tempsresettemps_in_user  r  r  r   r   r   r   r  r   r   r
  rn   put_trace_yieldr
  r   r   put_finish_refcount_contextcurrent_exceptr
  rP  is_awaitr  put_trace_resumers   r  r  !generate_sent_value_handling_codesent_value_cnamer  r  r  r  r  )rY   r   rN  resume_labelsavedr   r   r  
save_cnamerZ  r[  s              rT   rX  z!YieldExprNode.generate_yield_code*  sj   
 #'"6"6%%c3/#1	<|$$$**,'+~~'B'B'D 		U#E455CCDIJLL%T23    11++,=?OPR9EA!!%.JJ)?)?UST		U ""--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!!$((+', 		\#E:t%+%;%;ZHJ  >K
JJUJ78

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

:zZ[		\ 	..tV5L5LM%%d+HHDKKM63J3JKLOODKKM>: rU   c                 Z    |j                  |j                  || j                               y rN   )r   r   r   rY   r   r9
  s      rT   rh  z/YieldExprNode.generate_sent_value_handling_code*  s    

4**;ABrU   N)r[   r\   r]   r   r   r   rN  rO  rf  rP  rQ  rX  rR  r  rX  rh  rW   rU   rT   rK  rK  b*  sE     wHDIMHLL4'C;JCrU   rK  c                   &    e Zd Zd ZddZd Zd Zy)_YieldDelegationExprNodec                     t               rN   )NotImplementedErrorr  s     rT   yield_from_funcz(_YieldDelegationExprNode.yield_from_func*  s    !##rU   Nc                 &   || j                   j                  |       |j                  j                  t        j
                  d      }|j                  |d| j                  |      dt        j                  d|| j                   j                         n|dt        j                  d
       |7| j                   j                  |       | j                   j                  |       n|r|j                  |t               |j                  d|z         |j!                  t        j                  t               |j                  j#                  |       | j%                  |       |j                  d	|z         |j!                  t        j                  t               | j&                  r| j)                  |       n$|j                  t        j                  t               |j                  d
       | j+                  |       |j                  d       y )NFr  rS  rR  r1  , &r2  zif (likely(%s == PYGEN_NEXT)) {z(} else if (likely(%s == PYGEN_RETURN)) {r  r   )r   r  r  r  r   PySendResult_typer   rs  r   r
  r   r
  r  r  r  r   r  r  rX  r  fetch_iteration_resultpropagate_exception)rY   r   r`  ra  result_temps        rT   r  z1_YieldDelegationExprNode.generate_evaluation_code*  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rU   c                     |j                  t        j                  t               |j	                  |j                  | j                               y rN   )r  r   r
  r   r   r   r   r  s     rT   rx  z,_YieldDelegationExprNode.propagate_exception*  s1    ,,n=

4??488,-rU   c                     |j                  | j                         dt        j                  dt        j                  d       y )NrS  r  r-  )r   r  r   r
  r  s     rT   rw  z/_YieldDelegationExprNode.fetch_iteration_result*  s.    

KKM
 	rU   r  )r[   r\   r]   rs  r  rx  rw  rW   rU   rT   rp  rp  *  s    $>.
rU   rp  c                        e Zd ZdZdZd Zd Zy)YieldFromExprNodeTz
yield fromc                     | j                   j                  j                  st        | j                  d       | j                   j                  |      | _         y )Nz-yielding from non-Python object not supported)r   r   r  r   r   r9  r   s     rT   rR  z'YieldFromExprNode.coerce_yield_argument+  s8    xx}}&&$((KL88..s3rU   c                 b    |j                   j                  t        j                  dd             y)NGeneratorYieldFromrN  __Pyx_Generator_Yield_Fromr   r   r   r   r  s     rT   rs  z!YieldFromExprNode.yield_from_func+  (    ))+*A*ABVXe*fg+rU   N)r[   r\   r]   rO  rQ  rR  rs  rW   rU   rT   r}  r}  +  s    ML4,rU   r}  c                        e Zd ZdZdZd Zd Zy)AwaitExprNodeTr\  c                 ^    | j                   !| j                   j                  |      | _         y y rN   rT  r   s     rT   rR  z#AwaitExprNode.coerce_yield_argument+  s'    88xx2237DH  rU   c                 b    |j                   j                  t        j                  dd             y)NCoroutineYieldFromrN  __Pyx_Coroutine_Yield_Fromr  r  s     rT   rs  zAwaitExprNode.yield_from_func$+  r  rU   N)r[   r\   r]   rf  rQ  rR  rs  rW   rU   rT   r  r  +  s     HL8
,rU   r  c                   *     e Zd Zd Z fdZd Z xZS )AwaitIterNextExprNodec                     |j                  d       |j                  d       |j                  d       |j                  d       |j                  d       y )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))))) {r4  r  r   )r   r  s     rT   _generate_breakz%AwaitIterNextExprNode._generate_break.+  sH    

MN

 b 	c 	

#$

8

3rU   c                 F    | j                  |       t        | 	  |       y rN   )r  rP   rx  r>  s     rT   rx  z)AwaitIterNextExprNode.propagate_exception7+  s    T"#D)rU   c                     |j                   sJ d       |j                  d|z         | j                  |       |j                  |j                  | j                               |j                  d       y )Nz1AwaitIterNextExprNode outside of 'async for' loopr3  r   )break_labelr   r  r   r   rn  s      rT   rh  z7AwaitIterNextExprNode.generate_sent_value_handling_code;+  sX    T!TT

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

4??488,-

3rU   )r[   r\   r]   r  rx  rh  r^   r_   s   @rT   r  r  )+  s    
*rU   r  c                   *    e Zd ZeZdZd ZdZd Zd Z	y)GlobalsExprNoder,   c                 D    |j                  t        j                         | S rN   )r   r   globals_utility_coder   s     rT   rX  zGlobalsExprNode.analyse_typesH+  s    W99:rU   zConstructing globals dictc                      yr  rW   rX   s    rT   rZ  zGlobalsExprNode.may_be_noneN+  r  rU   c                     |j                  | j                         d|j                  | j                         | j                               | j	                  |       y )Nz = __Pyx_Globals(); )r   r  r   r   r  r  s     rT   r  z$GlobalsExprNode.generate_result_codeQ+  sF    

KKM##DKKM488<> 	? 	T"rU   N)
r[   r\   r]   r   r   r  rX  r  rZ  r  rW   rU   rT   r  r  D+  s"    DG .K#rU   r  c                       e Zd Zd Zy)LocalsDictItemNodec                 b   | j                   j                  |      | _         | j                  j                  |      | _        | j                   j                  |      | _         | j                  j                  j                  |      r"| j                  j                  |      | _        | S d | _        | S rN   )r  rX  r   r9  r   r  r   s     rT   rX  z LocalsDictItemNode.analyse_typesY+  s    88))#.ZZ--c2
88..s3::??11#666s;DJ  DJrU   N)r[   r\   r]   rX  rW   rU   rT   r  r  X+  s    rU   r  c                   $     e Zd Zd Z fdZ xZS )FuncLocalsExprNodec                 >   t        |j                  j                         D cg c]  }|j                  s|j                   c}      }|D cg c]'  }t	        |t        ||      t        ||d            ) }}t        j                  | ||d       y c c}w c c}w )Nr;  T)rt   rA  r  )r  r2
  )	r  r  r  rt   r  r  r
  r  r  )rY   r   rv   r   r   rl  r  s          rT   r  zFuncLocalsExprNode.__init__e+  s    $'KK$6$6$8H EJJEJJH I

 '(  $)#S93ST:< ( ( 	$U.2 	 	4H(s   BB,Bc                     t         |   |      }|j                  D cg c]  }|j                  | c}|_        |S c c}w rN   )rP   rX  r  r   )rY   rv   r   r  rS   s       rT   rX  z FuncLocalsExprNode.analyse_typeso+  sF    w$S),0,@,@  :q$%GG$7 "#  : :s   >r1  r_   s   @rT   r  r  d+  s    4 rU   r  c                   *    e Zd Zd Zd Zd Zd Zd Zy)PyClassLocalsExprNodec                 >    t         j                  | |       || _        y rN   )r  r  pyclass_dict)rY   r   r  s      rT   r  zPyClassLocalsExprNode.__init__w+  s    c*(rU   c                 J    | j                   j                  | _        d| _        | S r  )r  r   r  r   s     rT   rX  z#PyClassLocalsExprNode.analyse_types{+  s!    %%**	rU   c                      yr  rW   rX   s    rT   rZ  z!PyClassLocalsExprNode.may_be_none+  r  rU   c                 6    | j                   j                         S rN   )r  r  rX   s    rT   r  zPyClassLocalsExprNode.result+  s      ''))rU   c                      y rN   rW   r  s     rT   r  z*PyClassLocalsExprNode.generate_result_code+  r   rU   N)r[   r\   r]   r  rX  rZ  r  r  rW   rU   rT   r  r  v+  s    )
*rU   r  c                     |j                   rt        |       S |j                  rt        | |j                        S t        | |      S rN   )r  r  r  r  r;  r  )r   
scope_noderv   s      rT   LocalsExprNoder  +  s=    
s##
$S*//::c3''rU   )not~r  r   c                   |    e Zd ZdgZdZdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd ZddZy)UnopNoder  TFc                 l    t         | j                     } || j                  j                        | _        y rN   )compile_time_unary_operatorsr   r  r   rY   r  s     rT   r2  z"UnopNode.calculate_constant_result+  s'    +DMM:#DLL$@$@ArU   c                     t         j                  | j                        }|s#t        | j                  d| j                  z         | j
                  j                  |      }	  ||      S # t        $ r}| j                  |       Y d }~y d }~ww xY w)Nz3Unary '%s' not supported in compile-time expression)	r  rm   r   r   r   r  r<  rV  r@  )rY   r;  r  r  r?  s        rT   r<  zUnopNode.compile_time_value+  s|    +//>$((Emm$% ,,11$7	-=  	-))!,,	-s   !A) )	B2BBc                     | j                   j                  |      }|j                  s|j                  r|j	                  | j
                        }||S | j                  ||      S rN   )r  r   r  r  find_cpp_operation_typer   infer_unop_type)rY   rv   operand_typecpp_types       rT   r   zUnopNode.infer_type+  sY    ||..s3$$(;(;#;;DMMJH###C66rU   c                 B    |j                   r|j                  st        S |S rN   )rs   r  r   rY   rv   r  s      rT   r  zUnopNode.infer_unop_type+  s    ##L,H,H!!rU   c                     | j                   j                  r=| j                   j                  j                  r| j                   j                  t        uryt        j                  |       S r  )r  r   r  r   r   rZ  rX   s    rT   rZ  zUnopNode.may_be_none+  sG    <<!2!2!B!B||  	1##D))rU   c                    | j                   j                  |      | _         | j                  |      rAt        t	        | j
                  | j                   j                              | _        d| _        | S | j                         r%| j                  |       t        | _        d| _        | S | j                         r| j                  |       | S | j                  |       | S r  )r  rX  is_pythran_operationrJ   rA   r   r   r  is_py_operationcoerce_operand_to_pyobjectr   is_cpp_operationanalyse_cpp_operationanalyse_c_operationr   s     rT   rX  zUnopNode.analyse_types+  s    ||11#6$$S)#$8HYHY$Z[DIDL  !!#++C0&DIDL
 	 ""$&&s+  $$S)rU   c                 6    | j                   j                         S rN   r  rY  rX   s    rT   rY  zUnopNode.check_const+      ||''))rU   c                     | j                   j                  j                  xs  | j                   j                  j                  S rN   )r  r   rs   rI  rX   s    rT   r  zUnopNode.is_py_operation+  s-    ||  ,,K0A0A0K0KKrU   c                     t        |      }| j                  j                  }|xr |j                  xs |j                  S rN   )rB   r  r   r  r>   )rY   rv   
np_pythranop_types       rT   r  zUnopNode.is_pythran_operation+  s7    #C(
,,##Lw00KG4K4KLrU   c                 F    | j                         r| j                          y y rN   r  r  r   s     rT   r  zUnopNode.nogil_check+      !NN "rU   c                 F    | j                   j                  }|j                  S rN   )r  r   r  r+  s     rT   r  zUnopNode.is_cpp_operation+  s    ||     rU   c                 D    | j                   j                  |      | _         y rN   )r  r9  r   s     rT   r  z#UnopNode.coerce_operand_to_pyobject+  s    ||66s;rU   c           
         | j                   j                  r|j                  d       |j                  d| j                         z         |j                  d| j                         d| j                         d| j                  | j
                  j                         d       y | j
                  j                   j                  r| j                  |       y | j                  r| j                         r| j                  dk(  rt        || j                  | j                         d| j                  d	| j
                  j                         d
| j                   j                  r| j                         nd | j                  | j                         y |j                  | j                         d| j                  d	| j
                  j                         d
       y y )Nz// Pythran unaryopr  rU  rV  rW  rX  r   rS  rr  rT  )r   r>   r   r  r   r  r&  rs   generate_py_operation_coder  r  r   r   r   r   r  r  s     rT   r  zUnopNode.generate_result_code+  s<   99$$JJ+,JJ3dkkmCDJJ++-	/ 0
 \\**++D1\\$$&4+?+?3+F'dhh%)[[]DMM4<<CVCVCXY%)YY%:%:DKKM(($*?*?A
 

DKKM4==$,,J]J]J_`a rU   c                    | j                  |      }|j                  | j                         d|d| j                  j	                         d|j                  | j                         | j                               | j                  |       y )NrS  rR  r  )py_operation_functionr   r  r  r   r   r   r  r2  s      rT   r  z#UnopNode.generate_py_operation_code,  sk    --d3

&&(''txx@	B	C 	T"rU   c                     | j                   j                  j                  s;t        | j                  d| j
                  d| j                   j                  d       t        j                  | _        y )NzInvalid operand type for '' (r  )r  r   r  r   r   r   r   r3   rX   s    rT   
type_errorzUnopNode.type_error,  sH    ||  ))$(( 1 13 4))	rU   c                    | j                   j                  g}| j                  r+| j                  s|j	                  t
        j                         |j                  | j                  | j                  |      }|r|s| j                          y |r}|j                  j                  | _        |j                  j                  | _        | j                  dk(  rFd| _        t        |       r4|j                  t!        j"                  dd             nd| _        d| _        | j                  rL| j                  s@| j                   j                  j%                  | j                  t
        j                        }n/| j                   j                  j%                  | j                        }|r=|;t'        | j                  d| j                  dt               | j                          y || _        y )	Nr   Tr3  r  r  )r  r+  z' operator not defined for )r  r   is_inc_dec_op	is_prefixr  r   r&  r$  r   r   r  r   r   r  r   r   r   r   r  r   )rY   rv   overload_checkoperand_typesr   r  s         rT   r  zUnopNode.analyse_cpp_operation,  sl   **+dnn  !6!67--dhh}U%OO#(::#=#=D #(::#=#=D ##s*#1$7(()@)@AY[k)lm#%D #%D dnn||((@@J,A,A A H ||((@@OHh.$((t% &OO	rU   Nr  )r[   r\   r]   r   infixr  r2  r<  r   r  rZ  rX  rY  r  r  r  r  r  r  r  r  r  rW   rU   rT   r  r  +  si     {HEMB
-7 **LM
!<b(#*rU   r  c                   F    e Zd ZdZej
                  Zd Zd Zd Z	d Z
d Zy)NotNode!c                 <    | j                   j                   | _        y rN   )r  r   rX   s    rT   r2  z!NotNode.calculate_constant_resultD,  s    #'<<#?#??rU   c                     | j                   j                  |      }	 | S # t        $ r}| j                  |       Y d }~y d }~ww xY wrN   )r  r<  rV  r@  )rY   r;  r  r?  s       rT   r<  zNotNode.compile_time_valueG,  sD    ,,11$7	-; 	-))!,,	-s     	A?Ac                 "    t         j                  S rN   )r   rB  r  s      rT   r  zNotNode.infer_unop_typeN,  s    %%%rU   c                     | j                   j                  |      | _         | j                   j                  }|j                  r| j	                  |       | S | j                   j                  |      | _         | S rN   )r  rX  r   r  r  rd  r  s      rT   rX  zNotNode.analyse_typesQ,  sb    ||11#6||(($$&&s+   <<99#>DLrU   c                 <    d| j                   j                         z  S )Nz(!%s)r  r  rX   s    rT   r  zNotNode.calculate_result_codeZ,      ,,...rU   N)r[   r\   r]   r   r   rB  r   r2  r<  r  rX  r  rW   rU   rT   r  r  <,  s.     H!!D@-&/rU   r  c                   "    e Zd ZdZd Zd Zd Zy)UnaryPlusNoder   c                 ~    t        j                  | j                  j                  t         j                        | _        y rN   )r   r  r  r   r&  r   s     rT   r  z!UnaryPlusNode.analyse_c_operationc,  s)    22LLz446	rU   c                      y)NPyNumber_PositiverW   r  s     rT   r  z#UnaryPlusNode.py_operation_functiong,      "rU   c                     | j                         rd| j                  j                         z  S | j                  j                         S )Nz(+%s))r  r  r  rX   s    rT   r  z#UnaryPlusNode.calculate_result_codej,  s9      "T\\00222<<&&((rU   N)r[   r\   r]   r   r  r  r  rW   rU   rT   r  r  ^,  s     H6#)rU   r  c                   (    e Zd ZdZd Zd Zd Zd Zy)UnaryMinusNoder  c                    | j                   j                  j                  r>t        j                  | j                   j                  t        j
                        | _        nF| j                   j                  j                  rt        j
                  | _        n| j                          | j                  j                  rd| _	        y y r  )
r  r   r  r   r  r&  rA  r  r  r  r   s     rT   r  z"UnaryMinusNode.analyse_c_operationv,  s    <<''"66!!:#8#8:DI\\&&"--DIOO99DJ  rU   c                      y)NPyNumber_NegativerW   r  s     rT   r  z$UnaryMinusNode.py_operation_function,  r  rU   c                     | j                   rd| j                  j                         z  S | j                  j                  j	                  d      d| j                  j                         dS )N(-%s)r  rR  r  )r  r  r  r   unary_oprX   s    rT   r  z$UnaryMinusNode.calculate_result_code,  sN    ::T\\00222#||0099#>@S@S@UVVrU   c                 F    | j                   j                         }|rd|z  S y )Nr  )r  r0  )rY   r   s     rT   r0  z)UnaryMinusNode.get_constant_c_result_code,  s&    779U?" rU   N)r[   r\   r]   r   r  r  r  r0  rW   rU   rT   r  r  q,  s     H	#W#rU   r  c                       e Zd Zd Zd Zd Zy)	TildeNodec                 L   | j                   j                  j                  r>t        j                  | j                   j                  t        j
                        | _        y | j                   j                  j                  rt        j
                  | _        y | j                          y rN   )r  r   r  r   r  r&  rA  r  r   s     rT   r  zTildeNode.analyse_c_operation,  sf    <<##"66!!:#8#8:DI\\&&"--DIOOrU   c                      y)NPyNumber_InvertrW   r  s     rT   r  zTildeNode.py_operation_function,  s     rU   c                 <    d| j                   j                         z  S )Nz(~%s)r  rX   s    rT   r  zTildeNode.calculate_result_code,  r  rU   N)r[   r\   r]   r  r  r  rW   rU   rT   r  r  ,  s    !/rU   r  c                       e Zd Zd Zy)	CUnopNodec                      yr  rW   rX   s    rT   r  zCUnopNode.is_py_operation,  r  rU   N)r[   r\   r]   r  rW   rU   rT   r  r  ,  s    rU   r  c                   "    e Zd ZdZd Zd Zd Zy)DereferenceNoder   c                 R    |j                   r|j                  S t        j                  S rN   )r  r  r   r3   r  s      rT   r  zDereferenceNode.infer_unop_type,  s#    )))(((rU   c                 :   | j                   j                  j                  rk|j                  r9t	        j
                  | j                   j                  j                        | _        y | j                   j                  j                  | _        y | j                          y rN   )r  r   r  is_cppr   r1  r  r  r   s     rT   r  z#DereferenceNode.analyse_c_operation,  s_    <<##zz&55dll6G6G6Q6QR	 LL--77	OOrU   c                 <    d| j                   j                         z  S r  r  rX   s    rT   r  z%DereferenceNode.calculate_result_code,  r  rU   N)r[   r\   r]   r   r  r  r  rW   rU   rT   r  r  ,  s     H)/rU   r  c                   "    e Zd ZdZd Zd Zd Zy)DecrementIncrementNodeTc           
         | j                   j                  j                  s| j                  r<t	        | j
                  d| j                  d| j                   j                  d       nHt	        | j
                  d| j                  d| j                  d| j                   j                  d       t        j                  | _        y )NzNo match for 'operatorz' (operand type is 'r*  zNo 'operatorz(int)' declared for postfix ')	r  r   r  r  r   r   r   r   r3   rX   s    rT   r  z!DecrementIncrementNode.type_error,  s    ||  ))~~dhh]]DLL$5$5!7 8 dhh]]DMM4<<3D3D!F G))	rU   c                 X   | j                   j                  j                  r>t        j                  | j                   j                  t        j
                        | _        y | j                   j                  j                  r| j                   j                  | _        y | j                          y rN   )r  r   r  r   r  r&  r  r  r   s     rT   r  z*DecrementIncrementNode.analyse_c_operation,  sj    <<''"66!!:#8#8:DI\\%%))DIOOrU   c                     | j                   r*d| j                  | j                  j                         dS d| j                  j                         | j                  dS )NrR  r  )r  r   r  r  rX   s    rT   r  z,DecrementIncrementNode.calculate_result_code,  sH    >>#}}dll.A.A.CDD   $||224dmmDDrU   N)r[   r\   r]   r  r  r  r  rW   rU   rT   r  r  ,  s    M*ErU   r  c                       fdS )Nc                 "    t        | fd|S )Nr  r   )r  )r   r  r  r   s     rT   <lambda>z%inc_dec_constructor.<locals>.<lambda>,  s    5cjYYajeij rU   rW   r	  s   ``rT   inc_dec_constructorr  ,  s	    jjrU   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	AmpersandNoder*  c                 ,    t        j                  |      S rN   )r   
c_ptr_typer  s      rT   r  zAmpersandNode.infer_unop_type,  s    $$\22rU   c                    | j                   j                  |      | _         | j                   j                  }|j                  r| j	                  |d       |j
                  s[|j                  sO| j                   j                         s5|j                  r| j                  d       | S | j                  d|z         | S |j                  rt| j                  d| j                   j                  rd| j                   j                  z  n0| j                   j                  rd| j                   j                  z  ndz         | S |j                  r| j                  st        j                   |      | _        | S )	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  )r  rX  r   r  r  rq  r  r  r  r   rs   r   rt   rs  r=  r   r  )rY   rv   argtypes      rT   rX  zAmpersandNode.analyse_types,  s#   ||11#6,,##&&s5&A$$(<(<@[@[@]))

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

CgMNKJJ97;||7K7K$,,"3"33DHLLD]D]'$,,*@*@@  K##499"--g6DIrU   c                 6    | j                   j                         S rN   )r  r  rX   s    rT   rY  zAmpersandNode.check_const,  s    ||,,..rU   c                 h    t        | j                  |       t        j                  | _        d| _        y Nr,  r   r   r   r3   r   r  rY   messs     rT   r   zAmpersandNode.error-  %    dhh))	$rU   c                 <    d| j                   j                         z  S )Nz(&%s)r  rX   s    rT   r  z#AmpersandNode.calculate_result_code-  r  rU   c           
         | j                   j                  j                  r| j                  dk(  rt	        || j
                  | j                         d| j                  d| j                   j                         d| j                  j                  r| j                         nd | j                  | j                         y y y )Nr   rS  rr  rT  )r  r   r  r   r   r   r  r   rs   r   r  r  s     rT   r  z"AmpersandNode.generate_result_code	-  s    LL**t/C/Cs/J#D$((!%t||?R?R?TU!%!6!6D$$d&;&;= 0K*rU   N)
r[   r\   r]   r   r  rX  rY  r   r  r  rW   rU   rT   r  r  ,  s'     H3*/%
/=rU   r  )r   r  r  c                 l   t        |t              rY|dk(  rTt        |j                  t        t	        j
                  |j                               |j                  |j                        S t        |t              r+|j                  |cxk(  rdv rn nt        | d|fdz  z  d       t        |   | ||      S )Nr  )r   r   r  r  z+-zAPython has no increment/decrement operator: %s%sx == %s(%sx) == x      )r   r  )r   rx  r   r{   r   r  r   r  r  r  r   r   unop_node_classes)r   r   r  s      rT   	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 rU   c                   n    e Zd ZdgZdxZxZZd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd ZddZd Zd Zd Zy)r	  r  Nc                      yr  rW   r   s     rT   rl  zTypecastNode.type_dependencies2-  r  rU   c                     | j                   ?| j                  j                  |      }| j                  j                  ||      \  }| _         | j                   S rN   )r   r  r  
declarator)rY   rv   r  r  s       rT   r   zTypecastNode.infer_type5-  sF    99..s3I??229cBLAtyyyrU   c                    | j                   ?| j                  j                  |      }| j                  j                  ||      \  }| _         | j                  j                         r| j                          | j                   j                  r+t        | j                  d       t        j                  | _         | j                  j                  |      | _        | j                   t        j                  u r| j                  j                  |      S | j                   j                  }| j                  j                   j                  }|r^|s\| j                  j!                         rB| j                   j"                  s,| j                   j$                  st        | j                  d       |r|s| j                   t&        u r6| j                  j                   j(                  rt+        | j                  |      S | j                  j                   j-                  |      r8t.        | _        | j                  j3                  | j                   |      | _        n| j                  j                   j4                  rk| j                  j                   j                  j6                  s|| j                  j                   j                  j8                  sRt        | j                  d       n;t;        | j                  d| j                  j                   d| j                   d       | j                  j=                  |      | _        n|r|s| j                   j?                  |      r-| j                  j3                  | j                   |      | _        n| j                   j4                  rZ| j                   j                  j6                  s| j                   j                  j8                  svt        | j                  d       n^t;        | j                  d| j                   d| j                  j                   d       n!|r}|r{| j@                  r)tC        | j                  | j                   |d	      | _        ntE        | j                  tF              r| j                  j3                  | j                   |      | _        n| j                   jH                  rA| j                  j                   jH                  r!| j                  j=                  |      | _        nK| j                  j                   jJ                  r+| j                  j3                  | j                   |      | _        | j                   j4                  r| j                   j                  j                  r}| j                   j                  jL                  r]| j                  j                   }|j4                  r|j                  }|j                  r#|jL                  st;        | j                  d
d       | S )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   r  r  r#  r  r   r2  rq  r   r   r   r3   rX  rB  rd  rs   r  r  r  r   r  r  r  r   r.  r  r  r  r	  r   rh  create_from_py_utility_code	typecheckr  r   r  r  r  r   )rY   rv   r  r  to_pyfrom_pyr  s          rT   rX  zTypecastNode.analyse_types;-  s   99..s3I??229cBLAty<<++-**,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#||55diiE!!		++33tyy7J7J7T7T$(($bcIIt||00#2 3~~-dllDIIsTXYDLL.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rU   c                 6    | j                   j                         S rN   )r  rS  rX   s    rT   rS  zTypecastNode.is_simple{-  s    ||%%''rU   c                 6    | j                   j                         S rN   )r  r  rX   s    rT   r  zTypecastNode.is_ephemeral-  s    ||((**rU   c                 R    | j                   xs | j                  j                         S rN   )r  r  rr  rX   s    rT   rr  z!TypecastNode.nonlocally_immutable-  s    ||Bt||@@BBrU   c                     | j                   r5| j                   j                  r| j                  r| j                          y y y y rN   )r   rs   r  r  r   s     rT   r  zTypecastNode.nogil_check-  s0    99..4<<NN 4@.9rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rY  zTypecastNode.check_const-  r  rU   c                 X    | j                  | j                  j                        | _        y rN   )r  r  r   rX   s    rT   r2  z&TypecastNode.calculate_constant_result-  s    #99$,,:V:VWrU   c                    || j                   j                         }| j                  j                  r| j                   j                         }| j                   j                  j                  r| j                  j                  j                  | j                   j                  j                  |            }| j                  j                  j                  | j                   j                  j                  |            }n'| j                  j                  j                  |      }d}| j                  j                  d|d|dS | j                  j                  |      S Nr  rR  r1  r  )	r  r  r   r  	real_typer	  	real_code	imag_coder  )rY   operand_result	real_part	imag_parts       rT   r  z"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6rU   c                 r    | j                   j                         }|r| j                  j                  |      S y rN   )r  r0  r   r	  )rY   r5  s     rT   r0  z'TypecastNode.get_constant_c_result_code-  s1    @@B99&&~66 rU   c                     | j                   j                  r'| j                  s| j                  j	                  |      S t
        j	                  | |      S rN   )r   rs   r  r  r  r   r+  s     rT   r  zTypecastNode.result_as-  s=    99  <<))$//%%dD11rU   c                     | j                   rl|j                  | j                         d| j                  j                         d       |j	                  | j                         | j                                y y )Nz = (PyObject *)rT  )r  r   r  r  r  r*  r  s     rT   r  z!TypecastNode.generate_result_code-  sT    <<JJKKMLL'')+, OODKKM4::<8 rU   rN   )r[   r\   r]   r   r  r#  r   rl  r   rX  rS  r  rr  r  rY  r2  r  r0  r  r  rW   rU   rT   r	  r	  $-  s^     {H$((I(
T>@(+C*X7(7
29rU   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                   n    e Zd ZdZddgZdZdZdZdZe	j                  Zd Zd Zd	 Zd
 Zd Zed        Zy)r  an  
    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
    r  shapesNTr  c                 l   ddl m} | j                  j                  |      | _        | j                  r| j                  }n%| j
                  j
                  j                  |      }| j
                  j                  }t        | _	        g | _
        t        |      }| j                  j                  }| j                  j                  j                  sF| j                  j                  j                  s&t        | j                  j                  t                | S g }|j                  rA|j                  ri|j#                  |j$                         |j&                  }|j                  r4n4|j                  r|j&                  }nt        | j                  d|z         | S |j)                  |      s2|j*                  s&t        | j                  j                  t,               | S | j                  j                  j                  r>t        |      |k7  r0t        | j                  j                  d|t        |      fz         | S t/        |      D ]s  \  }}	|	j0                  j2                  s(t        |	j0                  j                  t4               | c S |	j6                  j2                  rH|st        |	j                  t8               | c S t:        j=                  | j                  ||         |	_        |	j6                  j                  |      |	_        |	j6                  j?                  | j@                  |      }
|
jB                  s|
jE                  |       | j                  j#                  |
       |d|dz
  fv }|	jF                  j2                  s|r|	jF                  j                  |      |	_#        |	jF                  j                  jH                  sZ|	jF                  jB                  rD|	jF                  j                  jJ                  s$t        |	jF                  j                  d       | c S |	jF                  jM                  |      dk7  r(t        |	jF                  j                  tN               | c S |dk(  s)d| _(        2|	jF                  j2                  rJ|rNt        |	jF                  j                  tN               | c S  | j                  jR                  s | j                  jE                  |      | _        dgt        |      z  }| jP                  dk(  rd	|d<   nd	|d
<   tU        jV                  ||      | _,        | jX                  j[                  | j                         | j]                  |      | _	        |j_                  |       |ja                  |jc                  |jd                  jf                               | S )Nr,   r  zunexpected base type %s foundz/Expected %d dimensions, array has %d dimensionsr   zExpected an integer literalfortran)r  follow)r  contigr  )4r  r  r  rX  array_dtypebase_type_noder  r  r3   r   r<  r   r  rp  r   r   ERR_NOT_POINTERr  r  r  r  r  ERR_BASE_TYPEr  r   r   	ERR_STARTr   ERR_NOT_STOPrx  r  r  
shape_typer   rQ  r   r  r  r<  	ERR_STEPSmoder   r   r  r	  validate_memslice_dtypeget_cython_array_typeuse_cython_array_utility_coder   get_typeinfo_to_format_coder  r  )rY   rv   r  rA  r  r  r  array_dimension_sizesaxis_noaxisshapefirst_or_lasts               rT   rX  zCythonArrayNode.analyse_types-  s9    ||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_ %	MGT::%%djjnni0yy  ,$((L1K#OODHH6KG6TU			//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/K%	N ||##<<66s;DL$%D	199	!*DG+DH';;KN22488<..s3	005223;;3\3\]	
 rU   c                     | j                   rt        d      |j                  j                  | j                  d      | _         y )Nztemp allocated multiple timesT)r  r  r  r  r   r  s     rT   r  z$CythonArrayNode.allocate_temp_resultE.  s1    >>>??55diiFrU   c                 $    | j                  |      S rN   )rK  r   s     rT   r   zCythonArrayNode.infer_typeK.  s    ))#..rU   c                     |j                   j                  }|j                          |j                  j	                  d      j
                  S )Narray)r  cython_scopeload_cythonscope	viewscoperE  r   )rY   rv   rW  s      rT   rK  z%CythonArrayNode.get_cython_array_typeN.  s:    {{//%%'%%,,W5:::rU   c                    ddl m} | j                  D cg c]+  }| j                  j	                  |j                               - }}| j                  j                  }j                  j                  t        d      }j                  j                  t        d      }j                  j                  t        d      }d|j                         z  }	|j                  |      }
| j                  j                  j                   rj#                  d| j                  j                         z         j#                  d       j#                  j%                  | j                  j&                               j#                  d       j#                  |d|
d	j)                  || j&                               j+                  |t               d
t-        |      z  }j#                  |d|ddj/                  |      d	j)                  || j&                               j+                  |t               j#                  d       j#                  |d|d	j)                  || j&                               j#                  d       j#                  |d|d       j#                  d       j#                  | j                         d|d|	d|d| j0                  d| j                  j                         d	j)                  | j                         | j&                               | j3                         fd} ||        ||       j                  j5                  |       y c c}w )Nr,   r  TrA  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 ")", r1  rf  z = PyBytes_AsString(r  z = PyBytes_AS_STRING(r2  r  z = __pyx_array_new(, "z", (char *) c                 h    j                  | t               j                  j                  |        y rN   )r  r   r  r  )r  r   s    rT   disposez5CythonArrayNode.generate_result_code.<locals>.dispose.  s%    !!$7NN''-rU   )r  r  r<  rG  r	  r  r	  r  r  r  r   r1   r  get_type_information_cnamer  r   r  r   r   r   r   r  r   r  rI  r  r  )rY   r   r  rQ  r<  r  shapes_tempformat_tempformat_ptr_tempitemsize	type_infobuildvalue_fmtr]  s    `           rT   r  z$CythonArrayNode.generate_result_codeS.  s    $(;;0 //++ELLN; 0 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

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

7

[
 	 	

8

KKM?DIIt||?R?R?T##DKKM488<
 	
 	T"	. 	##O4w0s   0M3c                    |j                   }|j                  }t        |      }g }|j                  r7|j	                  t        ||||             |j                  }|j                  r7t        j                  |d      |d   _	        t        j                  |||      }t        ||||      }|j                  |      }|S )z@
        Given a C array type, return a CythonArrayNode
        rC  r,   r  )r  rB  )rB  r  rA  )r   r   r  rp  r  r  r  rx  r  r   r   MemoryViewSliceTypeNoder  rX  )	rR   src_noderv   r   r  r/  r  memslicenoder  s	            rT   r  zCythonArrayNode.from_carray.  s    
 llMM	SM	  KK	#YY,57 8!++I     Q/R44StDMO \)1yJ%%c*rU   )r[   r\   r]   r  r   r<  r  rI  rA  r   rM  rG  rX  r  r   rK  r  r}  r  rW   rU   rT   r  r  -  sc    ( 8$HFGDK--JdLG/;
>5@  rU   r  c                   0    e Zd Zej                  Zd Zd Zy)
SizeofNodec                      yr  rW   rX   s    rT   rY  zSizeofNode.check_const.  r]  rU   c                      y rN   rW   r  s     rT   r  zSizeofNode.generate_result_code.  r   rU   N)r[   r\   r]   r   r  r   rY  r  rW   rU   rT   rj  rj  .  s     ##DrU   rj  c                   &    e Zd Zg ZdZd Zd Zd Zy)rK  Nc                     	 | j                  A| j                   j                  |      }| j                  j                  ||      \  }}	|	| _
        | j                          | S rN   )r  module_pathrE  r  r
  r   rG  rt   SizeofVarNoderX  rL  r  r#  
check_type)
rY   rv   r  r<  r  r  r   r  r  rL  s
             rT   rX  zSizeofTypeNode.analyse_types.  sW      == ..s3I//11)SAKAx$DMrU   c                    | j                   }|sy |j                  r#|j                  st        | j                  d       y |j
                  rt        | j                  d       y |j                         st        | j                  d|z         y y )Nz Cannot take sizeof Python objectzCannot take sizeof voidz'Cannot take sizeof incomplete type '%s')rL  rs   r  r   r   r  is_complete)rY   rL  s     rT   rq  zSizeofTypeNode.check_type.  sn    ==(B(B$((>?$((56%%'$((EPQ (rU   c                     | j                   j                  r"| j                   j                  dd      }d|z  S | j                   j                         }d|z  S )Nr  r,   )deref(sizeof(%s)))rL  r  r   r  )rY   r  s     rT   r  z$SizeofTypeNode.calculate_result_code.  sV    ==** }}55b5BH (( }};;=H((rU   )r[   r\   r]   r   rL  rX  rq  r  rW   rU   rT   rK  rK  .  s     HH(	R)rU   rK  c                   $    e Zd ZdgZd Zd Zd Zy)rp  r  c                    | j                   j                  |      }|re|| _        | j                  j                  r+	 | j                  j	                  |j
                        | _        t        | _
        | j                          | S | j                   j                  |      | _         | S # t        $ r# t        | j                   j                  d       Y jw xY w)NzLType cannot be specialized since it is not a fused argument to this function)r  r  rL  r  r  r  r-   r   r   rK  rS   rq  rX  )rY   rv   operand_as_types      rT   rX  zSizeofVarNode.analyse_types.  s     ,,66s;+DM}}%%j$(MM$<$<S=R=R$SDM ,DNOO   <<55c:DL ( j$,,**hjjs   *B% %)CCc                 <    d| j                   j                         z  S )Nrv  r  rX   s    rT   r  z#SizeofVarNode.calculate_result_code/  s     3 3 555rU   c                      y rN   rW   r  s     rT   r  z"SizeofVarNode.generate_result_code/  r   rU   N)r[   r\   r]   r   rX  r  r  rW   rU   rT   rp  rp  .  s    
 {H$6rU   rp  c                   F    e Zd ZdgZdZdZdZd ZdZd Z	d Z
d Zd	 Zd
 Zy)
TypeidNoder  Nr,   c                    |}|j                   s|j                  }|j                   s|j                  d| j                        }|j	                  d      }t        j                  t        j                  |j                  d            S )Nzlibcpp.typeinforc  T)rd  )	r  r  find_moduler   rE  r   r  r  r   )rY   rv   
env_moduletypeinfo_moduletypeinfo_entrys        rT   get_type_info_typezTypeidNode.get_type_info_type/  ss    
,,#//J ,,$001BDHHM(//<,,Z-P-PQ_QdQdos-tuurU   ztypeid operatorc                 T   | j                   st        j                  | _         | j                  |       | j	                  |      }|s| j                  d       | S | j                  | S || _         | j                  j                  |      }|r|| _        d| _	        d | _        n| j                  j                  |      | _        d| _	        d | _        | j                  j                   j                  r| j                  d       | S | j                  j                   j                  r| j                  d       | S | j                  j                   j                         s*| j                  d| j                  j                   z         | S |j                  t        j                   dd             | S )	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'r3  r  )r   r   r3   r  r  r   r  r  rL  rF  rX  rs   r  rs  r   r   r   )rY   rv   rc  as_types       rT   rX  zTypeidNode.analyse_types /  sP   yy"--DIs++C0	JJdeK<<K	,,::3?#DMDLDL LL66s;DM DLDL}}!!--

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

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

FI[I[[\[445MO_`arU   c                 h    t        | j                  |       t        j                  | _        d| _        y r  r  r  s     rT   r   zTypeidNode.error@/  r  rU   c                      yr  rW   rX   s    rT   rY  zTypeidNode.check_constE/  r]  rU   c                     | j                   S rN   r  rX   s    rT   r  z TypeidNode.calculate_result_codeH/  r  rU   c                     | j                   r| j                  j                         }n| j                  j                         }t	        || j
                  | j                  d|dd d | j                         y )Nz
 = typeid(r2  )rF  rL  r  r  r   r   r  r  )rY   r   r  s      rT   r  zTypeidNode.generate_result_codeK/  sV    <<}};;=H}}++-Hdhh"&..(;$--	/rU   )r[   r\   r]   r   rL  r  r  r  cpp_messagerX  r   rY  r  r  rW   rU   rT   r}  r}  	/  sA     {HHKGv $K@%
/rU   r}  c                   8    e Zd ZdZeZdgZd Zd Zd Z	d Z
d Zy)
TypeofNodeNr  c                 &   | j                   j                  |      | _         t        j                  t	        | j                   j
                              }t        | j                  |      }|j                  |      }|j                  |      | _	        | S r  )
r  rX  r
   rH  r{   r   r  r   r9  r  )rY   rv   r   r  s       rT   rX  zTypeofNode.analyse_types_/  sn    ||11#6,,S1B1B-CDdhhe4'',11#6rU   c                 n    | j                   j                  |      | _         | j                   j                  S rN   )r  rX  r   r   s     rT   r  zTypeofNode.analyse_as_typeg/  s(    ||11#6||   rU   c                      yr  rW   rX   s    rT   rZ  zTypeofNode.may_be_nonek/  r  rU   c                 :    | j                   j                  |       y rN   )r  r  r  s     rT   r  z#TypeofNode.generate_evaluation_coden/  s    --d3rU   c                 6    | j                   j                         S rN   )r  r  rX   s    rT   r  z TypeofNode.calculate_result_codeq/  s    ||1133rU   )r[   r\   r]   r  r   r   r   rX  r  rZ  r  r  rW   rU   rT   r  r  T/  s.     GD{H!44rU   r  c                 d    	 | j                   } || |      S # t        $ r |j                  }Y  w xY wrN   )
__matmul__r   __rmatmul__)r  br  s      rT   matmul_operatorr  }/  s8    	!<<D Aqz  	!==D	!s    //r`  <===r"  >=ra  r  is_notr   r*  ///<<%r   r  **c                 
    | |v S rN   rW   xseqs     rT   r
  r
  /  s
    c rU   c                 
    | |vS rN   rW   r  s     rT   r
  r
  /  s
    Qc\ rU   )>>r  ^@innot_inc                     t         j                  | j                        }|s#t        | j                  d| j                  z         |S )Nz4Binary '%s' not supported in compile-time expression)compile_time_binary_operatorsrm   r   r   r   )r   r  s     rT   get_compile_time_binopr  /  s=    (,,T]];DdhhB-- 	! KrU   c                        e Zd ZddgZdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Z fdZd Zd Z xZS )	BinopNoder   r!  Fc                     t         | j                     } || j                  j                  | j                  j                        | _        y rN   )r  r   r   r   r!  r  s     rT   r2  z#BinopNode.calculate_constant_result/  s7    ,T]];#MM))MM)) +rU   c                     t        |       }| j                  j                  |      }| j                  j                  |      }	  |||      S # t        $ r}| j                  |       Y d }~y d }~ww xY wrN   )r  r   r<  r!  rV  r@  )rY   r;  r  r   r!  r?  s         rT   r<  zBinopNode.compile_time_value/  sg    %d+==33D9==33D9	-(++ 	-))!,,	-s   A 	A0A++A0c                     | j                  | j                  j                  |      | j                  j                  |      |      S rN   )r  r   r   r!  r   s     rT   r   zBinopNode.infer_type/  s<     8 8 = $ 8 8 =sD 	DrU   c                     | j                   j                  |      | _         | j                  j                  |      | _        | j                  |      S rN   )r   rX  r!  r  r   s     rT   rX  zBinopNode.analyse_types/  s?    33C833C8%%c**rU   c                    | j                  |      ra| j                  | j                  j                  | j                  j                  |      | _        | j                  j
                  sJ d| _        | S | j                         r| j                  |       | j                  | j                  j                  | j                  j                  |      | _        d| _        | j                  j                  s*| j                  t        c}| _        | j                  ||      S | S | j                         r| j                  |       | S | j                  |       | S r  )r  r  r   r   r!  r>   r  r  coerce_operands_to_pyobjectsrs   r   r  r  r  r  )rY   rv   original_types      rT   r  zBinopNode.analyse_operation/  s   $$S)((););)-););SBDI99,,,DL  !!#--c2((););)-););SBDIDL99((+/99n(ty~~mS99 	 ""$&&s+  $$S)rU   c                 v    | j                  | j                  j                  | j                  j                        S rN   )is_py_operation_typesr   r   r!  rX   s    rT   r  zBinopNode.is_py_operation/  s)    ))$--*<*<dmm>P>PQQrU   c                 n    |j                   xs( |j                   xs |j                  xs |j                  S rN   )rs   rI  rY   type1type2s      rT   r  zBinopNode.is_py_operation_types/  s+      [E$5$5[[EOO[rU   c                 x    | j                  | j                  j                  | j                  j                  |      S rN   )is_pythran_operation_typesr   r   r!  r   s     rT   r  zBinopNode.is_pythran_operation/  s,    ..t}}/A/A4==CUCUWZ[[rU   c                     t        |      xr2 t        |      xr t        |      xr t        |      xs t        |      S rN   )rB   r=   r>   )rY   r  r  rv   s       rT   r  z$BinopNode.is_pythran_operation_types/  sB    c" B3E:i?bch?iB&@/%*@	BrU   c                     | j                   j                  j                  xs  | j                  j                  j                  S rN   r   r   r  r!  rX   s    rT   r  zBinopNode.is_cpp_operation/  s2    ""// /}}!!..	0rU   c                 J   |j                  | j                  | j                  | j                  g      }|s| j	                          y |j
                  }|j                  | _        |j                  | _        | j                  dk(  r7d| _        t        |       r%|j                  t        j                  dd             |j                  r|j                  }t        |j                         dk(  r9| j                  j#                  |j                   d   j
                  |      | _        np| j                  j#                  |j                   d   j
                  |      | _        | j                  j#                  |j                   d   j
                  |      | _        |j$                  | _        y )Nr   r,   r3  r  r   )r  r   r   r!  r  r   r   r   r  r   r   r   r   r  r  r   r   r  r  )rY   rv   r   r4  s       rT   r  zBinopNode.analyse_cpp_operation/  s=   ##DMMDMM4==3QROOJJ	(88(883& DL-d3$$[%<%<=UWg%hi!++Iy~~!# MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM))	rU   c                    | j                  |||      r t        t        | j                  ||            S | j	                  ||      r|j
                  rt        j                  }n|j                  rt        j                  }|j
                  rt        j                  }n|j                  rt        j                  }|j                  s|j                  r2||u r|t        ur| j                  dv r|S | j                  ||      }||S t        S |j                  s|j                  rt        j                   S | j#                  ||      S )Nz**%+|&^)r  rJ   r@   r   r  r  r   r   r  r   r  r   infer_builtin_types_operationr   r  r   r3   compute_c_result_type)rY   r  r  rv   r  s        rT   r  zBinopNode.result_type0  s	   **5%=1$--NOO%%eU3**'',,**'',,$$(=(=E>e9&<R[A[ L"@@N*&&!!^^u~~(((--eU;;rU   c                      y rN   rW   r  s      rT   r  z'BinopNode.infer_builtin_types_operation*0  r]  rU   c                 F    | j                         r| j                          y y rN   r  r   s     rT   r  zBinopNode.nogil_check-0  r  rU   c                     | j                   j                  |      | _         | j                  j                  |      | _        y rN   )r   r9  r!  r   s     rT   r  z&BinopNode.coerce_operands_to_pyobjects10  s.    88=88=rU   c                 n    | j                   j                         xr | j                  j                         S rN   r   rY  r!  rX   s    rT   rY  zBinopNode.check_const50  '    }}((*Jt}}/H/H/JJrU   c                     t         |          xs6 | j                  j                         xs | j                  j                         S rN   )rP   r  r   r!  )rY   rS   s    rT   r  zBinopNode.is_ephemeral80  s@    $& M**,M040J0J0L	NrU   c                    | j                   j                  }| j                  j                  }| j                  j                  r%|j	                  d       |j	                  d| j                         z         | j                  dk(  rk|j	                  d| j                         d| j                         d| j                   j                         d| j                  j                         d	       y |j	                  d| j                         d| j                         d	| j                   j                         d
| j                  d
| j                  j                         d       y |j                  s|j                  r| j                  |      }| j                  dk(  rdnd}|j                  r| j                   j                         n| j                   j                         }|j                  r| j                  j                         n| j                  j                         }|j	                  | j                         d|d|d||d|j                  | j                         | j                        
       | j                  |       y | j                  r| j                         r| j                   dk(  rwt#        || j                  | j                         d| j%                         d| j                  j                  r| j                         nd | j&                  | j(                         y |j	                  | j                         d| j%                         d       y y )Nz// Pythran binopr  r  rU  rV  z$){pythonic::numpy::functor::power{}(r1  r  rW  rr  rX  z	, Py_Noner  rS  rR  r  r   rT  )r   r   r!  r>   r   r  r   r&  rs   r  r   r   r   r  r  r  r   r   r  r   r  )rY   r   r  r  r?  
extra_args
op1_result
op2_results           rT   r  zBinopNode.generate_result_code<0  s`   """"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11$7H(,(=2J6;6G6G002T]]MaMaMcJ6;6G6G002T]]MaMaMcJJJKKM++DKKM488DFG   &\\ $$&4+?+?3+F'dhh6:kkmTE_E_Ea(b9=9N9NTX(,(<(<d>S>SU
 

8R8R8TUV rU   c           
      R   | j                   j                  j                  sr| j                  j                  j                  sRt	        | j
                  d| j                  d| j                   j                  d| j                  j                  d       t        j                  | _        y )NzInvalid operand types for 'r  r  r  )	r   r   r  r!  r   r   r   r   r3   rX   s    rT   r  zBinopNode.type_errorh0  sj    ""++==%%..$(( 2 2MM&&( ) ))	rU   )r[   r\   r]   r   rM	  r2  r<  r   rX  r  r  r  r  r  r  r  r  r  r  r  rY  r  r  r  r^   r_   s   @rT   r  r  /  s|     J'HG+-D+
0R\\B0*.<2>KN*WX*rU   r  c                   $    e Zd Zd Zd Zd Zd Zy)
CBinopNodec                 |    t         j                  | |      }|j                         rt        j                  |_        |S rN   )r  rX  r  r   r3   r   rZ  s      rT   rX  zCBinopNode.analyse_typess0  s2    &&tS1!"--DIrU   c                      yr  rW   r  s     rT   r  z CBinopNode.py_operation_functiony0  r  rU   c                     d| j                   j                         d| j                  d| j                  j                         dS NrR  rr  r  )r   r  r   r!  rX   s    rT   r  z CBinopNode.calculate_result_code|0  s3    MM  "MMMM  "$ 	$rU   c                     d }|j                   s|j                  r|j                  | j                  |      }|4|j                   s|j                  r|j                  | j                  |      }|S rN   )r  r  r  r   )rY   r  r  r  s       rT   r  z CBinopNode.compute_c_result_type0  s[    44T]]EJH!3!3u||44T]]EJHrU   N)r[   r\   r]   rX  r  r  r  rW   rU   rT   r  r  q0  s    $rU   r  c                       fd}|S )Nc                      t        | fdi|S )Nr   )r  )r   r  r   s     rT   make_binop_nodez,c_binop_constructor.<locals>.make_binop_node0  s    #==H==rU   rW   )r   r  s   ` rT   c_binop_constructorr  0  s    >rU   c                        e Zd ZdZdZdZd Zd Zd Z fdZ	d Z
d	 Z fd
Zd Zd Zd ZddddddddddddddZddddd Z xZS )!NumBinopNodeTFNc                 $   | j                   j                  }| j                  j                  }| j                  ||      | _        | j                  s| j	                          y | j                  j
                  rd| _        | j                  j                  r |j                  d   r| j                  | j                  v r| j                  dv rW| j                   j                         r=| j                  j                         s#| j                  | j                   c| _         | _        d| _        |j                  d   | _        | j                  j                  | j                  | j                     || j                  j                               | _        d| _        | j                  r|j"                  rd|j"                  rW| j                   j%                  | j                  |      | _         | j                  j%                  | j                  |      | _        y y y )NFr  )r   r   Tzoverflowcheck.fold)	const_rhs)r   r   r!  r  r  r  r  r  rn   r   overflow_op_namesr   overflow_checkoverflow_foldoverflow_check_binopr  r  r  r  rY   rv   r  r  s       rT   r  z NumBinopNode.analyse_c_operation0  s   """"..ue<	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.rU   c                    | j                  ||      rnt        j                  ||      }|t        j                  u r | j                  dvrt        j
                  }|S t        j                  |t        j
                        }|S y )Nz|^&)c_types_okayr   r  rB  r   r&  rY   r  r  widest_types       rT   r  z"NumBinopNode.compute_c_result_type0  sw    UE*$88FKj444==-","7"7K  )<<!6!68rU   c                 r    |j                   rt        j                  ||      S t        j                  ||      S rN   )r  r    result_type_of_builtin_operationr  s      rT   r  z*NumBinopNode.infer_builtin_types_operation0  s1      >>ueLL>>ueLLrU   c                     | j                   r| j                   j                  ry| j                  j                   }| j                  j                   }|r|j                  r|r|j                  ryt        |          S r  )r   r  r   r!  rP   rZ  rY   r  r  rS   s      rT   rZ  zNumBinopNode.may_be_none0  s_    9922""""U**u9N9N w"$$rU   c                     | j                   j                         }| j                  j                         }|r|rd|d| j                  d|dS y r  )r   r0  r!  r   )rY   value1value2s      rT   r0  z'NumBinopNode.get_constant_c_result_code0  s?    99;99;f#)4==&AArU   c                 n    |j                   xs |j                  xr |j                   xs |j                  S rN   )r  rA  r  s      rT   r  zNumBinopNode.c_types_okay0  s0      1EMM 4!!2U]]	4rU   c                    | j                   rU| | _        |j                  j                  t        j
                  d      | _        |j                  d| j                  z         t        | %  |       | j                   r|j                  d| j                  z         |j                  d       |j                  |j                  | j                               |j                  d       |j                  j                  | j                         y y )NFr  r  r  z8PyErr_SetString(PyExc_OverflowError, "value too large");r   )r  overflow_bit_noder  r  r   r&  overflow_bitr   rP   r  r   r   r  r>  s     rT   r  z%NumBinopNode.generate_evaluation_code0  s    %)D" $ < <Z=R=R_d < eDJJy4#4#445(.JJ,t/@/@@AJJQRJJttxx01JJsONN''(9(9: rU   c                 b   | j                   \| j                  d| j                  j                         d| j                  j                         d| j                   j
                  dS | j                  j                  s| j                  rt        | j                        r5| j                  j                         | j                  j                         }}n4| j                  j                         | j                  j                         }}d|d| j                  d|dS | j                  j                  | j                        }|0t        | j                  d| j                  d| j                         |d| j                  j                         d| j                  j                         dS )NrR  r1  ru  r  rr  zbinary operator z not supported for )r  r  r   r  r!  r  r   r  r  r>   r&  r   	binary_opr   r   )rY   result1result2r  s       rT   r  z"NumBinopNode.calculate_result_code0  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$$&$$&( (rU   c                 h    |j                   xs% |j                   xs t        j                  | ||      S rN   )rb  r  r  r  s      rT   r  z"NumBinopNode.is_py_operation_types1  s8    %% D%%D//eUC	ErU   c                 t    | j                   | j                     }| j                  r|j                  dd      }|S )N	PyNumber_PyNumber_InPlace)py_functionsr   rM	  r^  )rY   r   r  s      rT   r  z"NumBinopNode.py_operation_function	1  s6    ))$--8<<)11+?QRMrU   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]   r  r  r  r  r  r  rZ  r0  r  r  r  r  r  r  r  r^   r_   s   @rT   r  r  0  s     END6M%4
;(,E
 """%%"''3+*($L" 	rU   r  c                       e Zd Zd Zy)IntBinopNodec                 n    |j                   xs |j                  xr |j                   xs |j                  S rN   )r  rA  r  s      rT   r  zIntBinopNode.c_types_okay*1  s,    - 0.	0rU   N)r[   r\   r]   r  rW   rU   rT   r  r  '1  s    0rU   r  c                       e Zd Zd Zd Zd Zy)BitwiseOrNodec                 b    | j                   j                  s| j                  j                  rdgS y r   )r   r   r!  r   s     rT   r  z(BitwiseOrNode.analyse_pytyping_modifiers31  s)    ==  DMM$9$9%&& %:rU   c                    |j                  d      5  |j                  |      }ddd       sy|j                         sA|j                  r|j	                         s|j                  S t        |j                  d|        |S # 1 sw Y   _xY w)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   )rY   rv   operand_nodettypes       rT   _analyse_bitwise_or_nonez&BitwiseOrNode._analyse_bitwise_or_none71  s    ##E* 	6 005E	6$$& $$\-M-M-O,,,l&&*STYSZ([\	6 	6s   BBc                     | j                   j                  r| j                  || j                        S | j                  j                  r| j                  || j                         S y rN   )r   r   r  r!  r   s     rT   r  zBitwiseOrNode.analyse_as_typeF1  sM    ==  00dmmDD]]""00dmmDDrU   N)r[   r\   r]   r  r  r  rW   rU   rT   r  r  01  s    'rU   r  c                   4     e Zd Zd Z fdZd Z fdZ xZS )AddNodec                     |j                   r|j                   s|j                  r|j                  ryt        j                  | ||      S r  )r  r  r  r  r  s      rT   r  zAddNode.is_py_operation_typesQ1  s7    ??u%2H2HUMcMc55dE5IIrU   c                     t         t        t        f}||v r1||v r-|t        |j	                  |      |j	                  |               S t
        |   ||      S rN   )r   r    r   r  rv  rP   r  )rY   r  r  string_typesrS   s       rT   r  z%AddNode.infer_builtin_types_operationW1  sc     #NLAL Ul%:L$6$6u$=$0$6$6u$=!? @ @w4UEBBrU   c                     |j                   s|j                  r|j                  s|j                  r|S |j                   s|j                  r|j                  s|j                  r|S t        j                  | ||      S rN   )r  rp  r  rA  r  r  r  s      rT   r  zAddNode.compute_c_result_type`1  sX    LLENNLllenn5<<5==L55eU$ $rU   c                    | j                   j                  | j                  j                  }}d }|t        u s|t        u r|t        u r|t        u rd}n9t	        | j                   t
              st	        | j                  t
              rd}nd}|rjd}| j                  s| j                   j                         rB|j                  j                  t        j                  dd             || j                         z  }|rf| j                  s| j                   j                         r|dz  }| j                   j                         s| j                  j                         r|dz  }|S t        | =  |      S )NTF__Pyx_PyUnicode_ConcatUnicodeConcatInPlacer6  InPlaceSafe)r   r   r!  r   r   r  rM	  r  r   r   r   r   rR  rZ  rP   r  )rY   r   r  r  r  is_unicode_concatrS   s         rT   r  zAddNode.py_operation_functionj1  s,   }}))4==+=+=uL E\$9$,)>$(!DMM+=>*T]]\nBo$(! %*! /<<4==#?#?#A$$55#//0FHZ[]D5577D||t}};;=	!}}((*dmm.G.G.IKw,T22rU   )r[   r\   r]   r  r  r  r  r^   r_   s   @rT   r  r  N1  s    JC$3 3rU   r  c                       e Zd Zd Zy)SubNodec                    |j                   s|j                  r|j                  s|j                  r|S |j                   s|j                  r(|j                   s|j                  rt        j
                  S t        j                  | ||      S rN   )r  rp  r  rA  r   c_ptrdiff_t_typer  r  r  s      rT   r  zSubNode.compute_c_result_type1  s_    LLENNLllenn5<<5>>...55eU$ $rU   N)r[   r\   r]   r  rW   rU   rT   r&  r&  1  s    $rU   r&  c                   b     e Zd ZdZd Zed        Zd Zd Z fdZ	 fdZ
 fdZ fd	Z xZS )
MulNodeFc                 d   | j                   j                  |      | _         | j                  j                  |      | _        | j                         | _        | j                  r| j                   }| j                  }|j
                  r|j                  | j                  |||      S |j
                  r|j                  | j                  |||      S |j                  t        v r|j                  |      | _        n(|j                  t        v r|j                  |      | _         | j                  |      S rN   )r   rX  r!  calculate_is_sequence_mulis_sequence_mulr   r   analyse_sequence_mulr   r#   rN  r  rY   rv   r   r!  s       rT   rX  zMulNode.analyse_types1  s    33C833C8#==? }}H}}H//H4H4H4P00hII11h6J6J6R00hII"88 ( 8 8 ="88 ( 8 8 =%%c**rU   c                 B    | j                   xr | t        v xr | t        uS rN   )r  r#   r"   r  s    rT   is_builtin_seqmul_typezMulNode.is_builtin_seqmul_type1  s$    ##f0F(Ff4WfKffrU   c                 2   | j                   j                  }| j                  j                  }|t        j                  u s|j
                  r||}}|t        j                  u s|j
                  r+|j                  s|j                  ry| j                  |      ryyr  )	r   r   r!  r   r  r  r  rI  r1  r  s      rT   r,  z!MulNode.calculate_is_sequence_mul1  su    """"G$$$ %5EG$$$%//**51rU   c                     |j                   J |j                  |      }|j                  |      |_         |j                  |      S rN   )r   r9  rN  rX  )rY   rv   r  mults       rT   r.  zMulNode.analyse_sequence_mul1  sB    &&$$S)..s3  %%rU   c                 @   | j                   r| j                  j                  j                  r!| j                  j	                  |      | _        y | j
                  j                  j                  r | j
                  j	                  |      | _        y t        |   |       y rN   )r-  r   r   rI  r9  r!  rP   r  r3  s     rT   r  z$MulNode.coerce_operands_to_pyobjects1  su    }}!!++ $ @ @ E  ##-- $ @ @ E,S1rU   c                 @    | j                   xs t        | 	  ||      S rN   )r-  rP   r  r  s      rT   r  zMulNode.is_py_operation_types1  s     ##Ruw'DUE'RRrU   c                     | j                   rS|j                  j                  t        j                  dd             | j
                  j                  j                  rdS dS t        | %  |      S )Nr	  r6  __Pyx_PySequence_Multiply__Pyx_PySequence_Multiply_Left)
r-  r   r   r   r   r   r   rs   rP   r  r>  s     rT   r  zMulNode.py_operation_function1  sb    --''(<>PQS26--2D2D2P2P.vVvvw,T22rU   c                     |j                   r2|j                   r&| j                  |      r|S | j                  |      r|S |j                  r|S |j                  r|S t        |   ||      S rN   )r  r1  r  rP   r  r  s      rT   r  z%MulNode.infer_builtin_types_operation1  sh       U%:%:**51**51 <<L<<Lw4UEBBrU   )r[   r\   r]   r-  rX  r  r1  r,  r.  r  r  r  r  r^   r_   s   @rT   r*  r*  1  sI    O+( g g&2S3C CrU   r*  c                   *     e Zd Zd Zd Z fdZ xZS )MatMultNodec                      yr  rW   r  s      rT   r  z!MatMultNode.is_py_operation_types1  r]  rU   c                      y rN   rW   r  s      rT   r  z)MatMultNode.infer_builtin_types_operation1  r	  rU   c                     |j                   j                  t        j                  dd             t        |   |       y )NMatrixMultiplyr6  )r   r   r   r   rP   r  r>  s     rT   r  z$MatMultNode.generate_evaluation_code1  s3    ))+*A*ABRTf*gh(.rU   )r[   r\   r]   r  r  r  r^   r_   s   @rT   r<  r<  1  s    / /rU   r<  c                   t     e Zd ZdZdZdZdZdZd Zd Z	d Z
d Zd Z fdZd	 Zd
 Zd Zd Zd Zd Z xZS )DivNodeNFc                     t         | j                     }| j                  dk(  r5| j                  )t        |t              rt        |t              r	t         d   }|S )Nr  r  )r  r   truedivisionr   r   rY   op1op2r  s       rT   !find_compile_time_binary_operatorz)DivNode.find_compile_time_binary_operator2  sI    ,T]];==CD$5$5$=#s#
3(<4T:rU   c                     | j                   j                  }| j                  j                  }| j                  ||      } |||      | _        y rN   )r   r   r!  rH  rE  s       rT   r2  z!DivNode.calculate_constant_result
2  s@    mm++mm++55c3?#C~rU   c                     | j                   j                  |      }| j                  j                  |      }| j                  ||      }	  |||      S # t        $ r}| j                  |       Y d }~y d }~ww xY wrN   )r   r<  r!  rH  rV  r@  )rY   r;  r   r!  r  r?  s         rT   r<  zDivNode.compile_time_value2  so    ==33D9==33D955hI	-(++ 	-))!,,	-s   
A 	A7A22A7c                 l    | j                   s|j                  d   rd| _        y | j                  | _        y )N	cdivisionF)rL  rn   ctruedivisionrD  r   s     rT   _check_truedivisionzDivNode._check_truedivision2  s*    >>S^^K8!&D!%!2!2DrU   c                     | j                  |       | j                  | j                  j                  |      | j                  j                  |      |      S rN   )rN  r  r   r   r!  r   s     rT   r   zDivNode.infer_type2  sI      %MM$$S)MM$$S)30 	0rU   c                 b   t         |   ||      }|| j                  dk(  r| j                  s| j                  rT|t
        j                  u rt        j                  S |j                  r$t        j                  t        j                  |      S |S |t
        j                  u s|j                  rd }|S Nr  )rP   r  r   rD  rM  r   r  r   r;  r  r  )rY   r  r  r  rS   s       rT   r  z%DivNode.infer_builtin_types_operation%2  s    g;E5I"t}}';  D$6$6'"2"22%333 ''%99*:R:RT_``   0 00K4F4F"rU   c                    | j                  |       t        j                  | |      }| j                         rd| _        | j
                  j                  s| j                  d u xrH |j                  d    xr6 | j                  j                          xs | j                  j                  dk(  | _        | j                  s|j                  d   r@| j                  j                  |      | _        | j                  j                  |      | _        |S )NTrL  r   cdivision_warnings)rN  r  r  r  rL  r   rs   rn   r!  r   r   zerodivision_checkr   rh  rY   rv   r  s      rT   r  zDivNode.analyse_operation32  s      %//c:   "!DNyy$$$& 9s~~k/J+J 9::<< 8]]22a7 # &&#..9M*N $ > >s C $ > >s CrU   c                 >   | j                   dk(  rx| j                  rl|j                  s`|j                  sT|j                  sH|j                  s<t	        j
                  |t        j                        }t	        j
                  ||      }|S t        j                  | ||      S rQ  )	r   rM  r  rC  r   r  r;  r  r  r  s       rT   r  zDivNode.compute_c_result_typeH2  sy    ==CD$6$6u?Q?QZ_ZlZl>>%..(<<UJD\D\](<<UKP""11$uEErU   c                 2    | j                   j                  ryy)N"integer division or modulo by zerozfloat divisionrE  rX   s    rT   zero_division_messagezDivNode.zero_division_messageP2      997#rU   c                 h   | j                   j                  s| j                   j                  s| j                  |j                  j
                  d   xs_ | j                   j                  xsG | j                   j                  xs | j                   j                  xr | j                   j                   | _        | j                  sH|j                  j                  t        j                  dd      j                  | j                                t        j                  | |       | j!                  |       y )NrL  DivIntCMath.c)r   rs   r  rL  r   rn   rC  r  rA  r,  r   r   r   r  r  r  generate_div_warning_coder  s     rT   r  z DivNode.generate_evaluation_codeV2  s    yy$$TYY-A-A~~%$$//< ^yy))^--B1B1B\DIIL\L\H\ 
 >>  11++Hi@KKDIIVX--dD9&&t,rU   c           	      	   | j                   }| j                  j                  sh| j                  r| j                  s:| j                  j                  d      d| j                  j                         d}nd| j                  j                         z  }|j                  d|z         |r|j                          |j                  d| j                         z         |r|j                          |j                  |j                  | j                               |j                  d       | j                  j                  r| j                  j                  r| j                   dk7  rs|j"                  j%                  t'        j(                  d	d
             | j                  j                  j                  dk(  rd| j                  j                         z  }nH| j                  j                  j+                         }d|d| j                  j                         d|d}|j                  d| j                  j+                         d|d| j,                  j                         d       |r|j                          |j                  d       |r|j                          |j                  |j                  | j                               |j                  d       |j"                  j.                  d   r| j                   dk7  r|j"                  j%                  t'        j(                  dd             |j                  d| j,                  j                         d| j                  j                         d       dt0        j2                  t0        j4                  dz  }|rzd}|j                  d |z         |j                          |j                  |j7                  | j                  d!"             |j                  |d#|d$       |j                          n.|}|j                  |j7                  | j                  d!"             |j9                  d%|z         |j;                  |j<                         |j                  d       y y y y )&NzerorR  r  z%s == 0r  z/PyErr_SetString(PyExc_ZeroDivisionError, "%s");r   r  UnaryNegOverflowsr  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(rb  zLPyErr_SetString(PyExc_OverflowError, "value too large to perform division");rS  r  CDivisionWarningr]  ra  z	 < 0) ^ (z	 < 0))) {z1__Pyx_cdivision_warning(%(FILENAME)s, %(LINENO)s))FILENAMELINENOr  zint %s;T)r  rS  rT  zif (unlikely(%s)) )r  r   rs   rT  r  r  r!  r  r   r   rY  r   r   r   r  r,  r   r   r   r   r   r  r   rn   r   filename_cnamelineno_cnameset_error_infor  r  r  )rY   r   in_nogil	zero_testminus1_checktype_of_op2warning_coder  s           rT   r^  z!DivNode.generate_div_warning_coded2  sj   ((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(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 %rU   c           
      $   | j                   j                  s| j                         rt        j	                  |       S | j
                  j                         }| j                  j                         }| j                   j                  r| j                  dk(  r	d| d| dS | j                  s| j                  r| j                  r|| j                   | j
                  j                   k7  r| j                   j                  |      }| j                   | j                  j                   k7  r| j                   j                  |      }d| d| dS | j                  j                         }d| j                   j                          d| d| dt        |      dd	S )	Nr  zfloor(z / r  rR  
__Pyx_div_r1  r  )r   r  r  r  r  r   r  r!  rC  r   rD  rL  r	  r   specialization_namere  rY   rF  rG  b_is_constants       rT   r  zDivNode.calculate_result_code2  sJ   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hrU   )r[   r\   r]   rL  rD  rM  rS  rT  rH  r2  r<  rN  r   r  r  r  rY  r  r^  r  r^   r_   s   @rT   rB  rB  1  s_     ILM.-30*F$-= ~irU   rB  s'   %(?:%|(?:\([^)]+\))?[-+#,0-9 ]*([a-z]))>      E   F   G   X   a   b   c   d   e   f   g   i   o   u   xc                   F     e Zd Zd Z fdZd Zd Zd Zd Z fdZ	 xZ
S )ModNodec                 h    |j                   xs% |j                   xs t        j                  | ||      S rN   )r  r  r  r  s      rT   r  zModNode.is_py_operation_types2  s4     J??J55dE5I	KrU   c                     |t         t        t        fv r4|j                  s&|j                  r| j
                  j                         s|S t        | !  ||      S rN   )	r   r   r    r  rs   r   rZ  rP   r  r  s      rT   r  z%ModNode.infer_builtin_types_operation2  sI    \:~>>$$E,=,=T]]E^E^E`w4UEBBrU   c                 2    | j                   j                  ryy)NrX  zfloat divmod()rE  rX   s    rT   rY  zModNode.zero_division_message2  rZ  rU   c                    t         j                  | |      }| j                  j                  s| j                  -|j
                  d   xs | j                  j                   | _        | j                  sO| j                  j                  s9| j                  j                  s#t        | j                  d| j                  z         |S )NrL  z(mod operator not supported for type '%s')rB  r  r   rs   rL  rn   r,  r  rC  r   r   rU  s      rT   r  zModNode.analyse_operation2  s    **45 yy$$~~%!$!<!TDIIDTDT@T>>$))*:*:499CUCUdhh JTYY VWrU   c                    | j                   j                  s| j                  s| j                   j                  rI|j                  j                  t        j                  dd      j                  | j                                n^|j                  j                  t        j                  dd      j                  | j                   | j                   j                               t        j                  | |       | j                  |       y )NModIntr]  ModFloat)math_h_modifier)r   rs   rL  r  r   r   r   r   r  r  r  r  r^  r  s     rT   r  z ModNode.generate_evaluation_code2  s    yy$$T^^yy  11++Hi@KKDIIVX   11++J	BMM		4993L3L N NO 	--dD9&&t,rU   c           
         | j                   j                         }| j                  j                         }| j                  r?| j                  j
                  r d| j                  j                   d| d| dS d| d| dS | j                  j                         }d| j                  j                          d| d| dt        |      dd	S )NfmodrR  r1  r  z % 
__Pyx_mod_r  )
r   r  r!  rL  r   rC  r  r   ro  re  rp  s       rT   r  zModNode.calculate_result_code2  s    mm""$mm""$>>yy!!dii778#bQGG3%s3%q)) MM==?M		 = = ?@#bRPTUbPcdeOffghhrU   c                 @   | j                   j                  | j                  j                  }}|t        u r[| j                   j	                         s?|j
                  r|j                  |      s"|t        u rt        | j                  t              syyt        | -  |      S )N__Pyx_PyUnicode_FormatSafePyUnicode_Format)r   r   r!  r   rZ  r  r  r   r   r  rP   r  )rY   r   r  r  rS   s       rT   r  zModNode.py_operation_function3  sz    }}))4==+=+=uL }}((*++0@0@0G^+Jt}}N`4a3)w,T22rU   )r[   r\   r]   r  r  rY  r  r  r  r  r^   r_   s   @rT   r  r  2  s.    K
C$
-i
3 
3rU   r  c                   f     e Zd ZdZdZd Z fdZ fdZd Zd Z	 fdZ
d	 Z fd
Z fdZ xZS )PowNodeNFc                 F    | j                   y |j                  d   | _         y )Ncpow)is_cpowrn   r   s     rT   _check_cpowzPowNode._check_cpow3  s    <<#~~f-rU   c                 D    | j                  |       t        | 	  |      S rN   )r  rP   r   r3  s     rT   r   zPowNode.infer_type3  s!    w!#&&rU   c                 D    | j                  |       t        | 	  |      S rN   )r  rP   rX  r3  s     rT   rX  zPowNode.analyse_types3  s!    w$S))rU   c                      y rN   rW   r  s      rT   r  z%PowNode.infer_builtin_types_operation"3  r	  rU   c                 b   t         j                  | |       | j                  j                  r| j                  j                  j
                  rw| j                  j                  | j                  |      | _        | j                  j                  | j                  |      | _        | j                  j                  d      | _
        y t        | j                  d       d| _
        y | j                  j
                  rd| j                  j                  z   | _
        y | j                  j                  rd| j                  j                         j!                  dd      z  | _
        |j#                  t%        j&                  dd	      j)                  | j                  | j                  j                         | j                  j*                  xr d
xs d             y | j                  j,                  sEt        | j                  d| j                  j                  d| j                  j                         y y )Nr  z complex int powers not supportedr,  powz__Pyx_pow_%srr  r  IntPowr]  r,   r   )r  r   r,  z+got unexpected types for C power operator: r1  )r  r  r   r  r2  rC  r   r  r!  r  pow_funcr   r   r  r  r  r^  r   r   r   r  r,  r  r   s     rT   r  zPowNode.analyse_c_operation&3  s   ((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 $rU   c                    ddl m} d }t        | j                  j                  |      xr | j                  j                  dk\  xs |j
                  xr |j                  dk(  }|j
                  xst | j                  j                         xrX t        | j                  j                  |      xr6 t        | j                  j                        | j                  j                  k(  }d}| j                  rjt        | 1  ||      }| j                  j                         st        | j                  j                  t              xr | j                  j                  dk  }n|s|rt        | 1  ||      }| j                  j                         s$|j
                  xr |j                  }|rqd| _        nit        | j                  j                  t              xr | j                  j                  dk  }n)| j                  ||      rt        j                   }d| _        |r$t        j"                  |t        j$                        }|S )Nr   )RealFT)numbersr  r   r   r   r  r,  r!  r   r   r  rP   r  type_was_inferredr  r   r  r  r;  )	rY   r  r  r  c_result_typeop1_is_definitely_positivetype2_is_intneeds_wideningrS   s	           rT   r  zPowNode.compute_c_result_type=3  s    t}}44d; 3--2&
 LL.U\\Q.	 	# || 
MM--/ Pt}}44d;P--.$--2O2OO 	
 <<!G9%GM==446t}}<<cBht}}GdGdghGh  (<!G9%GM==446!&!>%,,!-1D* t}}<<cBht}}GdGdghGh  ue, '88M%)D"&::=*JbJbcMrU   c                 x      fd} j                   d | j                        d | j                        dS )Nc                     j                   | j                   k(  r| j                         S j                   j                  | j                               S rN   )r   r  r	  )r  rY   s    rT   r2   z/PowNode.calculate_result_code.<locals>.typecasti3  s<    yyGLL(~~''yy**7>>+;<<rU   rR  r1  r  )r  r   r!  )rY   r2   s   ` rT   r  zPowNode.calculate_result_codeg3  s3    	= MMT]]#T]]#% 	%rU   c                 z   | j                   j                  r| j                  j                  dk(  r}t	        | j                  j                  t
              rY| j                  j                   t        u r=|j                  j                  t        j                  dd             | j                  ryyt        | 9  |      S )Nr7   PyNumberPow2r	  __Pyx_PyNumber_InPlacePowerOf2__Pyx_PyNumber_PowerOf2)r   rs   r   r   r   r   r!  r   r   r   r   r   rM	  rP   r  r>  s     rT   r  zPowNode.py_operation_functions3  s    II!!--24==88#>""n4--k.E.EnVb.cd||70w,T22rU   c                 <  	 || j                   k(  r| S | j                  | j                  r|j                  s|j                  r| j                   t
        j                  u r	d	fd		d}n|j                  rd 	d}nd 	 	| j                        \  }} 	| j                        \  }}|rd|rbt        | j                  dz         d| _        || _        || _        | j                  |      }|j                   |k7  r|j                  ||      }|S t        
| 1  ||      S )	NTc                     | j                   j                  s| j                   j                  rd| fS |r0t        | t              r  | j
                  d      | j
                  fS y)NTF)recurserm  )r   rC  r  r   r  r   )r  r  check_typess     rT   r  z&PowNode.coerce_to.<locals>.check_types3  sP    ||,,0C0C#W},:g7J#K*7;;FSS&rU   za non-complex C numeric typec                 8    | j                   j                  rd| fS y)NTrm  rE  r  s    rT   r  z&PowNode.coerce_to.<locals>.check_types3  s    ||**#W},  +rU   zan integer C numeric typec                      y)Nrm  rW   r  s    rT   r  z&PowNode.coerce_to.<locals>.check_types3  s    &rU   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  rC  r  r   r  r   r!  r   r   rX  r  rP   )rY   r"  rv   
msg_detail	check_op1rF  	check_op2rG  r  r  rS   s            @rT   r  zPowNode.coerce_to3  s   tyy KLL T%;%;""hoo
 yyJ888' <
+ 9
'(7NIs(7NIsY #0 3=#= >  $ # #++C0;;(*#--h<Fw 3//rU   )r[   r\   r]   r  r  r  r   rX  r  r  r  r  r  r  r^   r_   s   @rT   r  r  3  sD     G.
'*F.(T
%
3*0 *0rU   r  c                       e Zd ZdZddgZdZdZdZdZd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd ZdZd Zd Zd Zd Zy)BoolBinopNodeag  
    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
    r   r!  TNc                     | j                   j                  |      }| j                  j                  |      }t        j                  ||      S rN   )r   r   r!  r   independent_spanning_typer  s       rT   r   zBoolBinopNode.infer_type3  s=    ((-((-33E5AArU   c                     | j                   dk(  r| j                  j                         S | j                  j                         xs | j                  j                         S )Nor)r   r!  rZ  r   rX   s    rT   rZ  zBoolBinopNode.may_be_none3  sF    ==D ==,,..==,,.M$--2K2K2MMrU   c                     | j                   j                  }| j                  j                  }| j                  dk(  r|xr || _        y |xs || _        y Nand)r   r   r!  r   )rY   r   r!  s      rT   r2  z'BoolBinopNode.calculate_constant_result3  sF    ==00==00==E!#+#8D #+#7xD rU   c                     | j                   j                  |      }| j                  j                  |      }| j                  dk(  r|xr |S |xs |S r  )r   r<  r!  r   )rY   r;  r   r!  s       rT   r<  z BoolBinopNode.compile_time_value3  sL    ==33D9==33D9==E!(('x'rU   c                 n    | j                   j                         xs | j                  j                         S rN   )r   r  r!  rX   s    rT   r  zBoolBinopNode.is_ephemeral3  s'    }}))+Kt}}/I/I/KKrU   c                 ,   | j                   j                  |      }| j                  j                  |      }t        j                  |j
                  |j
                        | _        | j                  ||      | _         | j                  ||      | _        | S rN   )r   rX  r!  r   r  r   _wrap_operandr/  s       rT   rX  zBoolBinopNode.analyse_types3  sx     ==..s3==..s388MM8==*	**8S9**8S9rU   c                 `    t        |t        t        f      st        || j                  |      }|S rN   )r   r  BoolBinopResultNoder   )rY   r  rv   s      rT   r  zBoolBinopNode._wrap_operand3  s)    'M3F#GH)'499cBGrU   c                     | j                  | j                  |      | _        | j                  | j                  |      | _        y)z
        Must get called by transforms that want to create a correct BoolBinopNode
        after the type analysis phase.
        N)r  r   r!  r   s     rT   wrap_operandszBoolBinopNode.wrap_operands3  s4    
 **4==#>**4==#>rU   c                 B    | j                  t        j                  |      S rN   r  r   rB  r   s     rT   rd  zBoolBinopNode.coerce_to_boolean3      ~~j44c::rU   c                     | j                   j                  ||      }| j                  j                  ||      }t        j	                  | || j
                  ||      S )N)r   r   r   r!  )r   r  r!  r  rg  r   )rY   r"  rv   r   r!  s        rT   r  zBoolBinopNode.coerce_to3  sW    ==**8S9==**8S9&&x]] ' 2 	2rU   c           	      ^   |j                  | j                         ||f}| j                  dk(  r|j                  d      x}	}n|j                  d      x}	}| j                  j                  |||||||	       |\  }}|j                  |	       | j                  j                  |||||||       y )Nr  next_andnext_or)r  r   r   r  r   generate_bool_evaluation_coder  r!  )
rY   r   final_result_tempfinal_result_type	and_labelor_label	end_labelfall_throughouter_labelsmy_labels
             rT   r  z+BoolBinopNode.generate_bool_evaluation_code3  s    dhh!8,==E!#'>>*#==Hy"&..";;Hx33#%6	8YX`	b +	8x 33#%6	8YXd	frU   c           	          | j                  |       | j                  j                  rt        j                  n| j                  }d x}}|j                  d      }| j                  || j                         |||||       |j                  |       y )Nbool_binop_done)	r  r   rs   r   r   r  r  r  r  )rY   r   r  r  r  r  s         rT   r  z&BoolBinopNode.generate_evaluation_code4  su    !!$'37993H3Hj//dii##9NN#45	**4YX`bkmvwy!rU   Truth-testing Python objectc                 n    | j                   j                         xr | j                  j                         S rN   r  rX   s    rT   rY  zBoolBinopNode.check_const4  r  rU   c                      y rN   rW   r  s     rT   r  z,BoolBinopNode.generate_subexpr_disposal_code4  r   rU   c                      y rN   rW   r  s     rT   r  z BoolBinopNode.free_subexpr_temps 4  r   rU   c           
         | j                   j                  rw|j                  j                  t        j
                  d      }|j                  |d| j                  j                         d|j                  || j                               n| j                  j                         }|| j                   j                  fS NFr  rb  r  )r   rs   r  r  r   rB  r   r   r   r  r   r  rY   r   test_results      rT   generate_operand1_testz$BoolBinopNode.generate_operand1_test#4  s    99  ..66&&5 7 :KJJMM++-**;ACD --..0KTYY2233rU   )r[   r\   r]   r  r   r  r   r   r!  r   rZ  r2  r<  r  rX  r  r  rd  r  r  r  r  rY  r  r  r  rW   rU   rT   r  r  3  s    	 J'HGHHHB
N8(L

?;2f"" 0KK4rU   r  c                   Z     e Zd ZdZddgZdZdZdZ fdZd Z	d Z
d	 Zd
 Zd Zd Z xZS )r  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           	          |j                  |      }t        |      }t        |   |j                  ||t        |      j                  ||             y )N)r   r   r   )rh  	ProxyNoderP   r  r   r  r  )rY   r   r  rv   rS   s       rT   r  zBoolBinopResultNode.__init__D4  sM    ""3'nGG;C.**;< 	 	>rU   c                 B    | j                  t        j                  |      S rN   r  r   s     rT   rd  z%BoolBinopResultNode.coerce_to_booleanM4  r  rU   c                     | j                   j                   }|t        j                  u r|j                  |      }t	        |||      S rN   )r   r   rB  rd  r  )rY   r"  rv   r   s       rT   r  zBoolBinopResultNode.coerce_toP4  s<    hhllz---'',C"3#66rU   c                      y rN   rW   r   s     rT   r  zBoolBinopResultNode.nogil_checkX4  r  rU   c           
         | j                   j                  j                  rw|j                  j	                  t
        j                  d      }|j                  |d| j                   j                         d|j                  || j                               n| j                   j                         }|| j                   j                  j                  fS r  )r   r   rs   r  r  r   rB  r   r   r  r   r  r  s      rT   generate_operand_testz)BoolBinopResultNode.generate_operand_test\4  s    88==$$..66&&5 7 :KJJHH&&(**;ACD ((//+KTXX]]6677rU   c                    |j                  | j                         | j                  j                  |       |s|r| j	                  |      \  }}	|	r|r|r| j                  j                  |       |rdnd}
|j                  d|
|d       |	r|j                  j                  |       |	r|r|s| j                  j                  |       |r||k7  r|j                  |       |rF|r.|j                  d       |	s| j                  j                  |       ||k7  r|j                  |       |r|s|s|r|j                  d       | j                  j                  |       | j                  j                  |       |j                  |d| j                  j                  |      d       | j                  j                  |       | j                  j                  |       | j                  j                  |       ||k7  r|j                  |       |s|r|j                  d       | j                  j                  |       y )	Nr  r  r  z) {r  rS  rT  r   )r  r   r   r  r  r  r   r  r  r  r   r  r  r  r  )rY   r   r  r  r  r  r  r  r  	uses_tempsenses              rT   r  z1BoolBinopResultNode.generate_bool_evaluation_codej4  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!!$'L(i(JJsOD!rU   c                     | S rN   rW   r   s     rT   rX  z!BoolBinopResultNode.analyse_types4  r  rU   )r[   r\   r]   r  r   r  r   r   r  rd  r  r  r  r  rX  r^   r_   s   @rT   r  r  24  sG    
 wHG
CE>;785"nrU   r  c                        e Zd ZdZdZdZg dZd Zd Zd Z	d Z
d Zd	 Z fd
Z fdZd Zd Zd Zd Zd Zd Z xZS )r&  NT)r$  r"  r#  c                 p    | j                   j                  |      | j                  j                  |      z   S rN   )r"  rl  r#  r   s     rT   rl  zCondExprNode.type_dependencies4  s,    }}..s3dnn6V6VWZ6[[[rU   c                     t        j                  | j                  j                  |      | j                  j                  |            S rN   )r   r  r"  r   r#  r   s     rT   r   zCondExprNode.infer_type4  s9    33MM$$S)NN%%c*, 	,rU   c                     | j                   j                  r| j                  j                  | _        y | j                  j                  | _        y rN   )r$  r   r"  r#  rX   s    rT   r2  z&CondExprNode.calculate_constant_result4  s3    99$$#'==#@#@D #'>>#A#AD rU   c                 n    | j                   j                         xs | j                  j                         S rN   )r"  r  r#  rX   s    rT   r  zCondExprNode.is_ephemeral4  s'    }}))+Lt~~/J/J/LLrU   c                     | j                   j                  |      | _         | j                  j                  |      | _        | j                  j                  |      | _        | j                  |      S rN   )r$  ri  r"  rX  r#  r(  r   s     rT   rX  zCondExprNode.analyse_types4  sU    II==cB	33C855c:'',,rU   c                    | j                   j                  }| j                  j                  }t        j                  ||      | _        | j                  j
                  r.t        j                  | j                  j                        | _        | j                  j                  rt        | _
        n| j                  j                  rt| j                   j                         r t        | j                   j                  d       | j                  j                         r t        | j                  j                  d       |j                  s"|j                  s| j                  j                  rt|| j                  k7  r+| j                   j                  | j                  |      | _         || j                  k7  r+| j                  j                  | j                  |      | _        | j                  j                   r| j#                          | S )NzPUnsafe C derivative of temporary Python reference used in conditional expression)r"  r   r#  r   r  r  r  r   rs   r   r.  r  r  r   r   r  r  r  )rY   rv   true_val_typefalse_val_types       rT   r(  z CondExprNode.analyse_result_type4  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rU   c                    | j                   j                  j                  s | j                   j                  |      | _         | j                  j                  j                  s | j                  j                  |      | _        d | _        | j                  |      }|j                  j                  s*|| u rt        t        |  |      }|S |j                  |      }|S rN   )	r"  r   r  rN  r#  r.  r(  rP   r&  )rY   rv   outrS   s      rT   rN  zCondExprNode.coerce_to_index4  s    }}!!(( MM99#>DM~~""))!^^;;C@DN &&s+xxd{L#>sC
 
 ))#.
rU   c                    | j                   j                  |k7  r!| j                   j                  ||      | _         | j                  j                  |k7  r!| j                  j                  ||      | _        d | _        | j                  |      }|j                  |k7  r,|| u rt        t        |  ||      }|S |j                  ||      }|S rN   )r"  r   r  r#  r.  r(  rP   r&  )rY   r"  rv   r  rS   s       rT   r  zCondExprNode.coerce_to4  s    ==) MM33HcBDM>>(*!^^55hDDN &&s+88xd{L#83G
 
 mmHc2
rU   c                 8   | j                   j                  j                  se| j                  j                  j                  sEt	        | j
                  d| j                   j                  d| j                  j                  d       t        j                  | _        y )Nz.Incompatible types in conditional expression (r  r  )r"  r   r  r#  r   r   r   r3   rX   s    rT   r  zCondExprNode.type_error5  s`    ""++t~~/B/B/K/K$((##T^^%8%8: ;))	rU   c                     | j                   j                         xr6 | j                  j                         xr | j                  j                         S rN   )r$  rY  r"  r#  rX   s    rT   rY  zCondExprNode.check_const
5  sA    		%%' -))+-**,	.rU   c                 
   |j                  | j                         | j                  |       | j                  j	                  |       |j                  d| j                  j                         z         | j                  || j                         |j                  d       | j                  || j                         |j                  d       | j                  j                  |       | j                  j                  |       y )Nr]  r  r   )r  r   r  r$  r  r   r  eval_and_getr"  r#  r  r  r  s     rT   r  z%CondExprNode.generate_evaluation_code5  s     	dhh!!$'		**40

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

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

3		((.		T"rU   c                 `   |j                  |       | j                  j                  r|j                  |       n|j	                  |       |j                  | j                         d|j                  | j                               d       |j                  |       |j                  |       y rV  )r  r   r  r  r  r   r  r  r*  r  r  )rY   r   rJ  s      rT   r  zCondExprNode.eval_and_get5  sy    %%d+99''++D1%%d+

tzz|0LMN**40rU   c                      y rN   rW   r  s     rT   r  z+CondExprNode.generate_subexpr_disposal_code(5  r   rU   c                      y rN   rW   r  s     rT   r  zCondExprNode.free_subexpr_temps+5  r   rU   )r[   r\   r]   r"  r#  r  r   rl  r   r2  r  rX  r(  rN  r  r  rY  r  r  r  r  r^   r_   s   @rT   r&  r&  4  sb     HIG0H\,
BM-2""*.
#rU   r&  Py_LTPy_LEPy_EQPy_NEPy_GTPy_GE)	r`  r  r  r"  z<>ra  r  r  r  c                   v    e Zd ZdZdZg Zd Zd Zd Zd Z	d Z
ddZd Zd	 Zd
 Zd Zd Zd ZddZd Zd Zy)CmpNodeNc                     t         S rN   rI  r   s     rT   r   zCmpNode.infer_typeD5  r_
  rU   c                    t         | j                     }| j                  j                  }t	        |t
              r(t	        |t
              rt        |      t        |      k7  ry | j                  dv rt	        | j                  t        t        t        f      rq| j                  j                  s| j                  dk(  | _        y t	        | j                  t              rq| j                  se| j                  j                         | _        nEt	        | j                  t              r+| j                  j                  s| j                  dk(  | _        y  |||      | _        y )Nr  r  r  )r  r   r!  r   r   any_string_typer   rY  rF  r
  r   cascader	  r  r  )rY   operand1_resultr  operand2_results       rT   "calculate_cascaded_constant_resultz*CmpNode.calculate_cascaded_constant_resultH5  s    ,T]];--778?O<_%o)>>==,,$--(Iw)GH}}))+/==H+DD(x8$(MM$:$:$<DMDMM84}}44+/==H+DD(#O_ErU   c                    t        |       }| j                  j                  |      }	  |||      }|r$| j
                  }|r|xr |j                  ||      }|S # t        $ r}| j	                  |       d }Y d }~Id }~ww xY wrN   )r  r!  r<  rV  r@  r  cascaded_compile_time_value)rY   r   r;  r  r!  r  r?  r  s           rT   r  z#CmpNode.cascaded_compile_time_value`5  s    %d+==33D9	(H-F llGWG$G$GRV$W  	))!,F	s   	A 	A?"A::A?c                     | j                   j                  j                  xs  | j                  j                  j                  S rN   r  rX   s    rT   is_cpp_comparisonzCmpNode.is_cpp_comparisonn5  s-    }}!!..Q$--2D2D2Q2QQrU   c                 h   |j                   }|j                   }d}d}|j                  r|j                         rd}|j                  r|j                         rd}|j                  r|r|S y |j                  r|r|S y |r6|r4t        j
                  ||fv rt        j                  S t        j                  S y rY  )	r   r   r   r  r   r   r   r   r   )	rY   rv   r  r   r!  r  r  type1_can_be_inttype2_can_be_ints	            rT   find_common_int_typezCmpNode.find_common_int_typeq5  s      %%(*M*M*O#%%(*M*M*O#<<  \\  ''E5>9%444%222rU   c                    | j                   }|j                  }|j                  }d }|j                  s|j                  r|dvrM|j                  s|j                  r5|j                  s|j                  rt	        | j
                  d       t        }n|j                  r6|j                  t        j                        rt        j                  nt        }n|j                  r6|j                  t        j                        rt        j                  nt        }nht        j                  ||      }nQ|j                  r#|j                  rt        j                  ||      }n"||j                  s| j                  ||||      }|=|j                  s|j                  rt        }n||k(  r|}n|j                  s|j                  r|j                  s|j                   r |j#                  ||      rt        }nt        }n|j                  s|j                   r |j#                  ||      rt        }nt        }nt        j$                  |      rt        j$                  |      rt        }n[| j'                  |||       t        }nA|j%                  |      r|}n-|j%                  |      r|}n| j'                  |||       t        }|j                   r&t)        |t*              st)        |t*              rt,        }||j.                  r|}nt        j0                  ||      }| j2                  r(| j2                  j5                  || j6                  ||      }|S )Nr  r"  zcomplex types are unordered)r!  r   r  r  r   r   r3   rs   r  r   r  r   r   r  r  rI  r  r  r  invalid_types_errorr   r  r   r  spanning_typer  find_common_typer   )	rY   rv   r  r   common_typer!  r  r  new_common_types	            rT   r  zCmpNode.find_common_type5  s   == u//,&))U-=-=))U-=-=dhh =>","":?:J:J7K_K_:`'"6"6ft"":?:J:J7K_K_:`'"6"6ft","@"@"N%"2"2(<<UEJO (?(?"77R8TO"%//"0%"'""e&7&7##u88D*4*8%%88D*4*8#33E:~?]?]^c?d&4O ,,Xr8D&0O&&u-"'&&u-"' ((2x@",$$*Xy*I*4Xy*I )O /":":)K
 %22;PK<<,,77T]]HVabKrU   c           
      l    t        | j                  d|d|j                  d|j                  d       y )NInvalid types for 'r  r1  r  )r   r   r   )rY   r   r  r!  s       rT   r  zCmpNode.invalid_types_error5  s$    dhh8==(--1 	2rU   c                     | j                          xr] | j                          xrJ | j                         xs8 | j                  xr | j                  j	                         xs | j
                  dv S Nr  )is_ptr_containsis_c_string_containshas_python_operandsr  is_python_comparisonr   rX   s    rT   r'  zCmpNode.is_python_comparison5  sk    ((** 7--//7))+ 6\\Idll&G&G&I6MM%55		8rU   c                     | j                   }|j                  |k7  r|j                  ||      | _         | j                  r| j                  j	                  ||       y y rN   )r!  r   r  r  coerce_operands_to)rY   r"  rv   r!  s       rT   r)  zCmpNode.coerce_operands_to5  sK    ====H$$..x=DM<<LL++Hc: rU   c                    | j                         xrD | j                  d u xr4 | j                  dvxr$ | j                          xr | j	                          xs( | j
                  xr | j
                  j                         S )N)r  r  r  r  )r&  special_bool_cmp_functionr   r%  r$  r  is_python_resultrX   s    rT   r,  zCmpNode.is_python_result5  s    ))+ ,//47,&FF, ..00, ))++	B
 @!>!>!@	CrU   c                 b   | j                   dv xr | j                  j                  j                  xr> | j                  j                  j
                  xs | j                  j                  t        u xs> | j                  j                  j                  xr | j                  j                  t        u S r#  )	r   r   r   r  r!  r  r   rb  r   rX   s    rT   r%  zCmpNode.is_c_string_contains5  s    }} 00 :##** Xmm((22Vdmm6H6HJ6V9##33 8]]''<7		:rU   c                     | j                   dv r?| j                  j                  }|j                  xs |j                  xr |j
                   S y r#  )r   r!  r   r  rp  r  )rY   container_types     rT   r$  zCmpNode.is_ptr_contains5  sM    ==,,!]]//N"))D^-D-D 1&0001 -rU   c                    | j                   dv r!|j                  | j                  j                  }}|s|j                  r|j                  r|t        j
                  u s|t        j
                  u r#t        j                  dd      | _        d| _	        y|t        j                  u s|t        j                  u r#t        j                  dd      | _        d| _	        y|rTdd	lm}  || j                   d
k(  rdnd| t        j                  || j                        }|r|\  | _	        | _        | _        }yy| j                   dv r| j                  j                  t        j                   u rC| j                  j#                  d      | _        t        j                  dd      | _        d| _	        y| j                  j                  t        j$                  u rC| j                  j#                  d      | _        t        j                  dd      | _        d| _	        y| j                  j                  t        j
                  u rC| j                  j#                  d      | _        t        j                  dd      | _        d| _	        y| j                  j                  j&                  s | j                  j)                  |      | _        t        j                  dd      | _        d| _	        yy)Nr  UnicodeEqualsr  __Pyx_PyUnicode_EqualsTBytesEquals__Pyx_PyBytes_Equalsr,   )optimise_numeric_binopr  EqNer  r  PyDictContainsr6  __Pyx_PyDict_ContainsTFPySetContains__Pyx_PySet_ContainsTFPyUnicodeContains__Pyx_PyUnicode_ContainsTFPySequenceContains__Pyx_PySequence_ContainsTFF)r   r   r!  r  r   r   r   r   special_bool_cmp_utility_coder+  r   Optimizer5  r   rB  special_bool_extra_argsr   ra  r   rs   r9  )	rY   rv   r   result_is_boolr  r  r5  r  r  s	            rT   "find_special_bool_compare_functionz*CmpNode.find_special_bool_compare_function 6  sb   ==L(#==$--*<*<5E%"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.rU   c                 F   | j                   j                  rR|j                  }d|z  }| j                  r2|j                  j                  t        j                  dd             d}nd}n|j                  }d}d}| j                  r.|j                   j                  r|j                         }	n|j                         }	|j                   j                  r|j                         }
n|j                         }
dj                  | j                  D cg c]  }|j                          c}      }| j                  r%|j                  j                  | j                         |j                  |d|d	| j                  d	|	d|
d| j                  r|nt        |   d
| ||| j                                y |j                   j                  r|dvr|dvsJ |       | j                   j                  s| j                   t"        j$                  u sJ |j                  |d| j                   j                  rdndd	|j                         d|j                         dt        |   d| ||| j                                y |j                   j&                  rc|j                  |d|d	|dk(  xr dxs d|j                   j)                  d      d	|j                         d|j                         d       y |j                   }|j                   }|j*                  s|j*                  r|j-                  |      st.        }n%|j0                  rt#        j2                  ||      }n|}|j5                  |      }|j5                  |      }|d|d	|d| j7                  |      d|d
}| j9                         rV| j:                  dk(  rGt=        || j                   || j                   j                  r|nd | j>                  | j@                         y |j                  |       y c c}w )Nz__Pyx_XGOTREF(%s); PyBoolOrNullFromLongr6  __Pyx_PyBoolOrNull_FromLong__Pyx_PyBool_FromLongr  r1  rS  rR  z)); )r  r  r  z = PyObject_RichCompareBoolr  r"  r  eqr
  rr  r2  r   )!r   rs   r   r+  r   r   r   r   r  r   r  r  rB  r@  r   richcmp_constantsr   r   rB  r  r  r  r  r   r  r  r  
c_operatorr  r   r   r   r  )rY   r   r  r   r  r!  error_clausegot_refcoerce_resultr  r  	extra_argspecial_bool_extra_args_resultr  r  r  code1code2	statements                      rT   r\	  zCmpNode.generate_operation_code46  sl   99  22L+k9G--  11++,BDVWY = 711LGM))}}((",,."//+}}((",,."//+-1YY484P4P8'0	  "8 .* 11  11$2T2TUJJ!22W6:6R6R2XijlXmm dhh79: ]]&&25E+E--1r199((DII9O9O,OOJJ))//BV;&&(&&(%b) dhh79 : ]]%%JJd
"s(b(&&t,!!# $ MMEMME''5+B+B!MM%0,!!(<<UEJ#&&{3E&&{3E#I %%'D,@,@C,G'HH#'99#8#8Kd(())+ 

9%8s   Pc                     |dk(  ry|dk(  ry|S )Nr  r  r  r"  rW   )rY   r  s     rT   rL  zCmpNode.c_operator6  s    :8^IrU   rN   rj  )r[   r\   r]   r+  r@  rB  r   r  r  r  r  r  r  r'  r)  r,  r%  r$  rD  r\	  rL  rW   rU   rT   r  r  <5  si     !%$(! F0R6KZ28;C:12hX&trU   r  c                       e Zd Zg dZdZdZdZd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)r'  )r   r!  coerced_operand2r  rB  NFc                    | j                   j                  |      }| j                  j                  |      }t        |      st        |      r6t	        |      r+t	        |      r t        t        | j                  ||            S t        S rN   )	r   r   r!  r>   r<   rJ   r@   r   r   r  s       rT   r   zPrimaryCmpNode.infer_type6  sj    ((-((-5!_U%;(/4Me4T"#5dmmUE#RSS rU   c                      yr  rW   r   s     rT   rl  z PrimaryCmpNode.type_dependencies6  r  rU   c                 j    | j                   rJ | j                  | j                  j                         y rN   )r  r  r   r   rX   s    rT   r2  z(PrimaryCmpNode.calculate_constant_result6  s$    <<//0M0MNrU   c                 \    | j                   j                  |      }| j                  ||      S rN   )r   r<  r  )rY   r;  r   s      rT   r<  z!PrimaryCmpNode.compile_time_value6  s)    ==33D9//$??rU   c                 b    | j                   }|r!| j                  |_        |j                   }|r y y rN   )r  r   )rY   cdrs     rT   unify_cascade_typez!PrimaryCmpNode.unify_cascade_type6  s'    llyyCH++C rU   c                 
   | j                   j                  |      | _         | j                  j                  |      | _        | j                         r5| j	                  |       | j
                  rt        | j                  d       | S | j                   j                  }| j                  j                  }t        |      st        |      rDt        |      r9t        |      r.t        t        | j                  ||            | _        d| _        | S | j                  |      r| S | j
                  r | j
                  j                  |      | _        | j                  dv r| j!                         rLd| _        d }| j
                  rt        | j                  d       | S | j                  j                  t"        u r&|j%                  t'        j(                  dd             n| j                   j                  t*        j,                  u r/| j                   j/                  t*        j0                  |      | _         | j                  j                  t2        ur%| j                  j/                  t2        |      | _        |j%                  t'        j(                  dd             | j                  j5                  d      | _        n[| j7                         r9| j
                  rt        | j                  d	       t*        j8                  | _        | S | j;                  || j                         rJ| j                   j                  j<                  s | j                   j?                  |      | _         d }d| _        nt@        }d
| _        n| j;                  || j                         rJ| j                   j                  j<                  s | j                   j?                  |      | _         d }d| _        n8| jC                  || j                  | j                         }|j<                  | _        |X|jD                  sL| j                   j                  |k7  r!| j                   j/                  ||      | _         | jG                  ||       | j
                  rv| j                  jI                  |      | _        | j
                  jK                  |       | j
                  jM                  | j                  |      }|| j                  ur|| _'        | jQ                         rt*        j@                  | _        nt*        j8                  | _        | jS                          | j                  s| j
                  s| jT                  rd| _+        | S )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,   ),r   rX  r!  r  analyse_cpp_comparisonr  r   r   r   r>   r<   rJ   r@   r   is_pycmp"analyse_memoryviewslice_comparisonr%  r   r   r   r   r   r   r  r   r   ra  r$  rB  rD  rs   r9  r   r  r  r)  rh   coerce_cascaded_operands_to_tempoptimise_comparisonrW  r,  r^  r+  r  )rY   rv   r  r  r  r!  s         rT   rX  zPrimaryCmpNode.analyse_types6  s   33C833C8!!#'',||dhh WXK""""5!_U%;(/4Me4T'(:4==%QV(WX	 %223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dmmL}}))55$(MM$D$DS$IDM" %, $44S$--H==%%11 $ @ @ EK!DM//T]]DMMRK'33DM";+?+?}}!![0 $ 7 7S I##K5<< MM::3?DMLL99#>||77sKHt}},(0%  ""11DI"..DI!==DLLD,J,JDLrU   c           
         | j                   j                  }| j                  j                  }d| _        |j	                  | j
                  | j                   | j                  g      }|Gt        | j                  d| j
                  d|d|d       t        j                  | _        d| _
        y |j                  }|j                  r|j                  }|j                  | _        |j                  | _        | j                  dk(  r7d| _        t!        |       r%|j#                  t%        j&                  d	d
             t)        |j*                        dk(  r9| j                  j-                  |j*                  d   j                  |      | _        np| j                   j-                  |j*                  d   j                  |      | _         | j                  j-                  |j*                  d   j                  |      | _        |j.                  | _        y )NFr!  r  r1  r  r,  r   Tr3  r  r,   r   )r   r   r!  rc  r  r   r   r   r   r3   r  r  r  r   r   r  r   r   r   r   r   r   r  r  )rY   rv   r  r  r   r4  s         rT   rb  z%PrimaryCmpNode.analyse_cpp_comparison7  s   """"##DMMDMM4==3QR=$((u. /"--DI(DJJ	!++I(88(883&DL-d3$$[%<%<=UWg%hiy~~!# MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM MM33INN14E4J4JCPDM))	rU   c                 T   | j                   j                  xs | j                  j                  }| j                   j                  j                  xs  | j                  j                  j                  }d}|r4|r2| j
                  |v r$d| _        t        j                  | _        d| _	        yy)N)r  r"  r  r  FT)
r   r   r!  r   r  r   rc  r   rB  is_memslice_nonecheck)rY   rv   	have_none
have_sliceopss        rT   rd  z1PrimaryCmpNode.analyse_memoryviewslice_comparison67  s    MM))BT]]-B-B	mm((;; <mm((;; 	*)(<!DM"..DI)-D&rU   c                 ~   | j                   r| j                  || j                  d      r~d| _         t        j                  | _        d| _        | j                  r=| j                  j                  | j                  |d      }|| j                  ur|| _
        | j                          | S t        j                  | |      S )NT)rC  Fr,   )rc  rD  r   r   rB  r   r  r  rf  r!  rW  r^  r   rd  )rY   rv   r!  s      rT   rd  z PrimaryCmpNode.coerce_to_booleanC7  s    ==66t 7 = %&22	 <<#||??s4  @  AHt}}408-'')))$44rU   c                     | j                   j                  j                  xs  | j                  j                  j                  S rN   )r   r   rs   r!  rX   s    rT   r&  z"PrimaryCmpNode.has_python_operandsU7  s2    "".. .}}!!--	/rU   c                     | j                   r| j                          y| j                  j                         xr | j                  j                         S r  )r  r  r   rY  r!  rX   s    rT   rY  zPrimaryCmpNode.check_constY7  s;    <<NN==,,.N4==3L3L3NNrU   c                 &   | j                   | j                  }}|j                  j                  rW| j                  dk(  rd}nd}d||j                  j                  d      d|j                         d|j                         dS | j                         rU|j                  t        u rd}nd	}| j                  d
k(  rd}nd}d||d|j                         d|j                         dS t        | j                        r!|j                         |j                         }}nM|j                         |j                         }}| j                  r!|j                  j                  rd|z  }nd|z  }d|d| j                  | j                        d|dS )Nr"  r  r  rR  r  r1  z))__Pyx_UnicodeContainsUCS4__Pyx_BytesContainsr  ((PyObject *) %s.memview)rr  r  )r   r!  r   r  r   r  r  r%  r   r>   r&  ri  r  rL  )rY   r   r!  negationr  r  r  s          rT   r  z$PrimaryCmpNode.calculate_result_code`7  sV   !]]DMM(==##}}$''-!!	# #
 &&(}},4.}}(!!	# # tyy)#+#:#:#<h>U>U>W#+??#4hoo6G--}}77"="G"="G . rU   c                    | j                   j                  |       | j                  j                  |       | j                  D ]  }|j                  |        | j                  r| j                  |       | j                  || j                         | j                   | j                  | j                         | j                  rQ| j                  j                  || j                         | j                  xs | j                  | j                  d u       | j                   j                  |       | j                   j                  |       | j                  j                  |       | j                  j                  |       y y )Nneeds_evaluation)r   r  r!  rB  r  r  r\	  r  r   r  rW  r  r  )rY   r   rP  s      rT   r  z'PrimaryCmpNode.generate_evaluation_code7  s!   ..t4..t455 	5I..t4	5<<%%d+((t{{}t}}dmm=||55$++-)>)>)O$--%)%:%:$%F 6 H MM006MM$$T*MM006MM$$T* rU   c                 p    | j                   j                  |       | j                  j                  |       y rN   )r   r  r!  r  s     rT   r  z-PrimaryCmpNode.generate_subexpr_disposal_code7  s(     	,,T2,,T2rU   c                 p    | j                   j                  |       | j                  j                  |       y rN   )r   r  r!  r  s     rT   r  z!PrimaryCmpNode.free_subexpr_temps7  s(     	  &  &rU   c                     | j                   j                  |       | j                  j                  |       | j                  r| j                  j                  |       y y rN   )r   r  r!  r  r  s     rT   r  zPrimaryCmpNode.annotate7  sD    t$t$<<LL!!$' rU   )r[   r\   r]   r   r  rW  ri  r   rl  r2  r<  r^  rX  rb  rd  rd  r&  rY  r  r  r  r  r  rW   rU   rT   r'  r'  6  sr    .K G!	O@Rh*65$/O(T+$3'(rU   r'  c                   f    e Zd Zg dZdZdZeZd Zd Z	d Z
d Zd Zd Zdd	Zd
 Zd ZddZd Zy)CascadedCmpNode)r!  rW  r  rB  Nc                     t         S rN   rI  r   s     rT   r   zCascadedCmpNode.infer_type7  r_
  rU   c                      yr  rW   r   s     rT   rl  z!CascadedCmpNode.type_dependencies7  r  rU   c                 N    | j                   t        uxr | j                   t        uS rN   r4  rX   s    rT   r   z#CascadedCmpNode.has_constant_result7  r7  rU   c                     | j                   j                  |      | _         | j                  r | j                  j                  |      | _        | S rN   )r!  rX  r  r   s     rT   rX  zCascadedCmpNode.analyse_types7  s:    33C8<<<<55c:DLrU   c                 B    | j                   j                  j                  S rN   )r!  r   rs   rX   s    rT   r&  z#CascadedCmpNode.has_python_operands7  s    }}!!---rU   c                      yr  rW   rX   s    rT   r  z!CascadedCmpNode.is_cpp_comparison7  r  rU   c                 B   | j                  |||      rCd| _        t        j                  | _        |j                  j
                  s|j                  |      }| j                  r<| j                  j                  | j                  ||      }|| j                  ur|| _
        |S r  )rD  rc  r   rB  r   rs   r9  r  rf  r!  rW  )rY   r   rv   rC  r!  s        rT   rf  z#CascadedCmpNode.optimise_comparison7  s    223.Q!DM"..DI==,,#66s;<<||77sN[Ht}},(0%rU   c                 (   | j                   j                  |      | _         | j                   j                  t        u r.| j                  dv r | j                   j                  d      | _         | j                  r| j                  j                  |       y y )Nr  r  )r!  r9  r   r   r   ra  r  r  r   s     rT   r  z,CascadedCmpNode.coerce_operands_to_pyobjects7  sk    88===*t}}@P/P MM;;<_`DM<<LL55c: rU   c                     | j                   r<| j                  j                  |      | _        | j                   j                  |       y y rN   )r  r!  rh  re  r   s     rT   re  z0CascadedCmpNode.coerce_cascaded_operands_to_temp7  s6    << MM::3?DMLL99#> rU   c                     | j                   j                  r1|j                  d|z         |j                  || j                          n|j                  d|z         |r|j	                  |       | j
                  j	                  |       | j                  D ]  }|j	                  |        | j                  |||| j                  | j
                         | j                  rC| j                  j	                  ||| j                  xs | j
                  | j                  d u       |r"|j                  |       |j                  |       | j
                  j                  |       | j
                  j                  |       |j                  d       y )Nz if (__Pyx_PyObject_IsTrue(%s)) {r]  rv  r   )r   rs   r   r#	  r  r!  rB  r\	  r   r  rW  r  r  )rY   r   r  r   rw  rP  s         rT   r  z(CascadedCmpNode.generate_evaluation_code7  s>   99  JJ9FBCOOFDII.JJ{V+,--d3..t455 	5I..t4	5$$T6dmmT]]	4<<LL11fd33Dt}}!%!6!6d!B 2 D ++D1%,,T2  &

3rU   c                     | j                   j                  |       | j                  r| j                  j                  |       y y rN   )r!  r  r  r  s     rT   r  zCascadedCmpNode.annotate
8  s2    t$<<LL!!$' rU   rj  )r[   r\   r]   r   r  rW  r5  r   r   rl  r   rX  r&  r  rf  r  re  r  r  rW   rU   rT   r|  r|  7  sR    .K G,O:.
;?2(rU   r|  )r  r  r  r  r*  r  r  r   r  r   r  r  r  r  r  c                 *    t        |   | f||||d|S )N)r   r   r!  rM	  )binop_node_classes)r   r   r   r!  rM	  rd  s         rT   rP	  rP	  #8  s4     h'  rU   c                   :     e Zd ZdgZeZ fdZd Zd Zd Z	 xZ
S )r  r   c                     t         |   |j                         || _        t        rt        | d| j                         y y )Nz
 Coercing )rP   r  r   r   r   r^  rY   r   rS   s     rT   r  zCoercionNode.__init__B8  s4    !dDHH56 rU   c                      y rN   rW   rX   s    rT   r2  z&CoercionNode.calculate_constant_resultH8  r  rU   c                 4   | j                   j                  |       | j                   j                  | j                  k7  rZ| j                  \  }}}|j                  |||dz
  ft	        ddd| j                   j                  d| j                  d             y y )Nr,   coercer|  z] to [])r  tagr  )r   r  r   r   r8   )rY   r   filelinecols        rT   r  zCoercionNode.annotateL8  sy    $88==DII%"hhOD$MM4s1u-~HTXX]]TXT]T]3^0` a &rU   c                     | S rN   rW   r   s     rT   rX  zCoercionNode.analyse_typesS8  r  rU   )r[   r\   r]   r   r6  r   r  r2  r  rX  r^   r_   s   @rT   r  r  :8  s&    
 wH$O7arU   r  c                       e Zd ZdZd Zd Zy)r  zc
    Coerce an object to a memoryview slice. This holds a new reference in
    a managed temp.
    c                     |j                   sJ |j                  j                   rJ t        j                  | |       || _        d| _        d| _        || _        | j                  j                  |       y rC	  )r  r   r  r  r  r  r   r&  rY   r   r"  rv   s       rT   r  z!CoerceToMemViewSliceNode.__init__]8  s]    ***88...dC(	#		--c2rU   c                     |j                  | j                  j                  | j                  j	                         | j                         | j                  |             y rN   )r   r   from_py_call_coder   r   r  r   r  s     rT   r  z-CoerceToMemViewSliceNode.generate_result_codeg8  sB    

499..HH KKMHH	
 	rU   N)r[   r\   r]   r  r  r  rW   rU   rT   r  r  W8  s    
3rU   r  c                   $    e Zd Zd Zd Zd Zd Zy)re  c                 >    t         j                  | |       || _        y rN   )r  r  r   )rY   r   new_types      rT   r  zCastNode.__init__s8  s    dC(	rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rZ  zCastNode.may_be_nonew8  r  rU   c                 L    | j                   j                  | j                        S rN   )r   r  r   rX   s    rT   r  zCastNode.calculate_result_codez8  s    xx!!$)),,rU   c                      y rN   rW   r  s     rT   r  zCastNode.generate_result_code}8  r   rU   N)r[   r\   r]   r  rZ  r  r  rW   rU   rT   re  re  p8  s    &-rU   re  c                       e Zd ZdZddZej                  ZdZd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)r  Tc                    |j                   s#|j                  sJ d|j                  d|       |j                  r|j                  |      }t        j                  | |       || _        |j                         | _        || _        y )NzPyTypeTest for z against non extension type )	r  r  r   rQ  r  r  r*  r.  r%  )rY   r   r"  rv   r%  s        rT   r  zPyTypeTestNode.__init__8  sr     ))X-E-E 	UAD8T	U##$$S)CdC(	IIKrU   zPython type testc                     | S rN   rW   r   s     rT   rX  zPyTypeTestNode.analyse_types8  r  rU   c                 P    | j                   ry| j                  j                         S r  )r%  r   rZ  rX   s    rT   rZ  zPyTypeTestNode.may_be_none8  s    <<xx##%%rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rS  zPyTypeTestNode.is_simple8  r  rU   c                 6    | j                   j                         S rN   r  rX   s    rT   r  zPyTypeTestNode.result_in_temp8  r  rU   c                 6    | j                   j                         S rN   )r   r  rX   s    rT   r  zPyTypeTestNode.is_ephemeral8  s    xx$$&&rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rr  z#PyTypeTestNode.nonlocally_immutable8  r  rU   c                 F    | j                   j                  |      | _         | S rN   )r   rQ  r   s     rT   rQ  zPyTypeTestNode.coerce_to_temp8  s    88**3/rU   c                    | j                   | j                  j                   k7  s| j                  j                         s| S | j                   j                         s| S | j                  j	                         r>| j
                  r2| j                  j                  d| j                   j                  z        S | j                  S )Nz!Cannot convert NoneType to %.200s)r   r   r  typeobj_is_availablerZ  r%  ra  rt   rX   s    rT   	reanalysezPyTypeTestNode.reanalyse8  s    99%TXX-D-D-FKyy--/K88!dll88--.QTXT]T]TbTb.bccxxrU   c                      y rN   rW   rX   s    rT   r2  z(PyTypeTestNode.calculate_constant_result8  r  rU   c                 6    | j                   j                         S rN   r  rX   s    rT   r  z$PyTypeTestNode.calculate_result_code8  r  rU   c                    | j                   j                         st        | j                  d       y | j                   }| j                   j
                  }| j                  rC|rA| j                   j                  || j                  | j                  j                         |       y | j                   j                  |j                  j                  | j                  j                         ||r| j                  nd      }|j                  j                  t        j                   |rdndd             |j#                  d| d|j%                  | j                                y )	NzICannot test type of extern C class without type object name specificationF)exactRaiseUnexpectedTypeErrorExtTypeTestr6  zif (!(r
  )r   r  r   r   r%  r  r  convert_to_basetyper   r   type_test_coder  rN  r   r   r   r   r   r   )rY   r   r-  r  	type_tests        rT   r  z#PyTypeTestNode.generate_result_code8  s   yy--/$((gh%
))33""II))$$((:L:L:NPZ[II,,NN  HH -<$))%	 - 
	 	))+*A*A*9&}+  	! 	

VI;c$//$((*C)DEFrU   c                 :    | j                   j                  |       y rN   r  r  s     rT   r  z,PyTypeTestNode.generate_post_assignment_code8  r  rU   c                      y rN   rW   r  s     rT   r  z#PyTypeTestNode.allocate_temp_result8  r   rU   c                      y rN   rW   r  s     rT   r  z"PyTypeTestNode.release_temp_result8  r   rU   c                 :    | j                   j                  |       y rN   r  r  s     rT   r  zPyTypeTestNode.free_temps8  r  rU   c                 :    | j                   j                  |       y rN   )r   r  r  s     rT   r  z!PyTypeTestNode.free_subexpr_temps8  s    ##D)rU   Nrj  )r[   r\   r]   r  r  r/   r  r  r  rX  rZ  rS  r  r  rr  rQ  r  r2  r  r  r  r  r  r  r  rW   rU   rT   r  r  8  sp      ..K$K&
$)'/!G05"*rU   r  c                   z     e Zd ZdZdZ	 d fd	ZdZd Zd Zd Z	d Z
e	 dd       Ze	 dd	       Zd
 Zd Z xZS )r_  TNc                     t         |   |j                  |       |j                  | _        |j	                         | _        || _        || _        t        |xs d      | _	        y r  )
rP   r  r   r   r*  r.  exception_type_cnameexception_messager   exception_format_args)rY   r   r  r  r  rS   s        rT   r  zNoneCheckNode.__init__8  sR    #&HH	IIK$8!!2%*+@+FB%G"rU   c                     | S rN   rW   r   s     rT   rX  zNoneCheckNode.analyse_types8  s	     rU   c                      yr  rW   rX   s    rT   rZ  zNoneCheckNode.may_be_none9  r  rU   c                 6    | j                   j                         S rN   )r   rR  rX   s    rT   rR  z"NoneCheckNode.may_be_unsafe_shared9  r  rU   c                     | j                   j                  r| j                  j                         S | j                   j                  rd| j                  j                         z  S t        d      )Nrs  zunsupported type)r   rs   r   r   r  r  rV  rX   s    rT   	conditionzNoneCheckNode.condition	9  sQ    99  88%%''YY)).1BBB.//rU   c                 J     | ||||      }||_         |j                  |       y rN   )r  put_nonecheck)rR   r   r   r  r  r  r  r   s           rT   generatezNoneCheckNode.generate9  s-     3,.?AVW 04 rU   c                 R    |j                         r| j                  ||||||       y y rN   )rZ  r  )rR   r   r   r  r  r  r  s          rT   generate_if_neededz NoneCheckNode.generate_if_needed9  s-     ??LLd$57KMbdtu rU   c                 &   |j                  d| j                         z         | j                  r|j                          t        j
                  }| j                  r|j                  d| j                  dt	        j
                  | j                  j                  d            ddj                  | j                  D cg c]%  }d |t        |      j                  d            z  ' c}      d       nA|j                  d	| j                  d || j                  j                  d            d
       | j                  r|j                          |j                  |j                  | j                               |j                  d       y c c}w )Nzif (unlikely(%s == Py_None)) {zPyErr_Format(r[  zUTF-8z", r1  z"%s"r2  zPyErr_SetString(z");r   )r   r  r  r   r
   escape_byte_stringr  r  r  rv  r  r{   r   r   r   )rY   r   escaper   s       rT   r  zNoneCheckNode.put_nonecheck9  sA   

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

4??488,-

3Ds   <*Fc                 &    | j                  |       y rN   )r  r  s     rT   r  z"NoneCheckNode.generate_result_code89  s    4 rU   )rW   )rn  rW   F)r[   r\   r]   r  r   r  r  rX  rZ  rR  r  r}  r  r  r  r  r^   r_   s   @rT   r_  r_  8  so    
 LD (*H K
/0 di! ! nsv v
4!rU   r_  c                   D    e Zd ZeZeZdZefdZdZd Z	d Z
d Zd Zd Zy	)
r  r,   c                 |   |j                   j                  |      s$t        |j                  d|j                   z         n'|j                   j                  r|j                  |      }t        j                  | |       |t        u r|j                   j                  s|j                   j                  rt        |      | _         nc|j                   j                  s|j                   j                  rt        | _         n+|j                   j                  rt        j                   | _         | j                   | _        y |j                   j                  s|j                   j                  rS|t$        t&        fvr6|j(                  d   s't        |j                  d|j                   d|d       |x| _         | _        y || _        y )Nz$Cannot convert '%s' to Python objectrd   r8  r9  r+  )r   r-  r   r   r  rh  r  r  r   r  rt  r~   r  rb  r   r   r  target_typer   r    rn   )rY   r   rv   r   s       rT   r  zCoerceToPyTypeNode.__init__D9  s8   xx11#6#''ACHHLMXX   &&s+CdC(>!xx!!SXX%;%;,S1	**chh.F.F(	$$#00	#yyDXX388#9#9Z88NN+>?cggXXt%& ,0/DI(  $DrU   zConverting to Python objectc                      yr  rW   rX   s    rT   rZ  zCoerceToPyTypeNode.may_be_nonec9  r  rU   c                 |   | j                   j                  }|t        j                  u s|t        j
                  u r| j                   j                  |      S |j                  rt        | j                   |      S |j                  s|j                  s|j                  rt        | j                   |      S t        | |      S rN   )r   r   r   rB  r   r  rQ  r  CoerceCStringToBooleanNoder  rC  r  rD  )rY   rv   rL  s      rT   rd  z$CoerceToPyTypeNode.coerce_to_booleang9  s    88==z---W=N=N1N88**3// .dhh<<__ 1 1X__&txx55&tS11rU   c                 8    | j                   j                  |      S rN   )r   rN  r   s     rT   rN  z"CoerceToPyTypeNode.coerce_to_indexw9  s    xx'',,rU   c                     | S rN   rW   r   s     rT   rX  z CoerceToPyTypeNode.analyse_typesz9  r  rU   c                 L   |j                  | j                  j                  j                  | j                  j	                         | j	                         | j
                        d|j                  | j	                         | j                               | j                  |       y )Nr  )	r   r   r   to_py_call_coder  r  r   r   r  r  s     rT   r  z'CoerceToPyTypeNode.generate_result_code~9  su    

HHMM))!  " ##DKKM488<> 	? 	T"rU   N)r[   r\   r]   r   r   r  r  r  r  rZ  rd  rN  rX  r  rW   rU   rT   r  r  <9  s;     D KG&4 $: 0K2 -#rU   r  c                       e Zd ZdZd Zd Zy)r  r,   c                 |    |j                  |      }t        j                  | |       t        j                  | _        y rN   )rh  r  r  r   r   r   rY   r   rv   s      rT   r  zCoerceIntToBytesNode.__init__9  s/    ""3'dC(&&	rU   c           
      r   | j                   }|j                         }|j                  t        j                  t        j
                  t        j                  fvr|j                  j                  r|j                  d|d|d       n|j                  d|z         |j                  d|j                  | j                        z         |j                  d       d }|j                  t        j                  urD|j                  j                  t        j                  d      }|j                  |d	|d
       |}|j                  | j                         d|d|j                  | j                         | j                               ||j                  j                  |       | j                  |       y )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)rT  z = PyBytes_FromStringAndSize(&z, 1); )r   r  r   r   r   r   r  r,  r   r   r   r  r  r   r  r  )rY   r   r   
arg_resultr  s        rT   r  z)CoerceIntToBytesNode.generate_result_code9  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"rU   N)r[   r\   r]   r  r  r  rW   rU   rT   r  r  9  s     G'
#rU   r  c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)r  Nc                 &   t         j                  | |       || _        d| _        |j	                  |      st        |j                  d|z         | j                  j                  s| j                  j                  r| j                  j                  rQ| j                  j                  r;| j                  j                  j                  rt        |j                  d|z  d       | j                  j                  rt        |j                  dd       y y y )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   )rY   r  r   rv   s       rT   r  zCoerceFromPyTypeNode.__init__9  s    dC(	66s;#''8;FH99$))"<"<xxDHHNNtxx~~7Q7QWZee! yy))i  ! * #=rU   c                     | S rN   rW   r   s     rT   rX  z"CoerceFromPyTypeNode.analyse_types9  r  rU   c                     | j                   j                  xr | j                   j                   xr | j                  j	                         S rN   )r   is_unowned_viewrp  r   r  rX   s    rT   r  z!CoerceFromPyTypeNode.is_ephemeral9  s6    		))D$))2D2D.Da$((J_J_JaarU   c           
      f   d }| j                   j                  r| j                  j                   t        u rk| j                   j                  j                  d      rFd| j                   j                  t        d      d  z   }t        j                  | j                  |d       |j                  | j                   j                  | j                  j                         | j                         | j                  ||| j                               | j                   j                  r| j!                  |       y y )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   r  r   r  r   r  rs   r  )rY   r   r  s      rT   r  z)CoerceFromPyTypeNode.generate_result_code9  s    99488==J#>yy))445HI#2TYY5O5OPSTdPePf5g#g 004Aab

499..HH $++-4- $ 8 8 / 
 	
 99    & !rU   c                 0    t        | j                  d       y )Nz0Coercion from Python not allowed without the GILr9  r   s     rT   r  z CoerceFromPyTypeNode.nogil_check9  s    dhhJKrU   )	r[   r\   r]   r  r  rX  r  r  r  rW   rU   rT   r  r  9  s%    
 !(b' LrU   r  c                       e Zd Zej                  Zej                  dej                  dej                  dej                  dej                  dej                  dej                  diZd Zd Zd	Zd
 Zd Zd Zd Zy)rD  r  r  __Pyx_PySet_GET_SIZE__Pyx_PyBytes_GET_SIZE__Pyx_PyByteArray_GET_SIZE__Pyx_PyUnicode_IS_TRUEc                 l    t         j                  | |       |j                  j                  rd| _        y y r  )r  r  r   rs   r  r  s      rT   r  zCoerceToBooleanNode.__init__9  s+    dC(88DL  rU   c                     | j                   j                  j                  rA| j                  j	                  | j                   j                        | j                          y y y rN   )r   r   rs   _special_builtinsrm   r  r   s     rT   r  zCoerceToBooleanNode.nogil_check9  sD    88==$$)?)?)C)CDHHMM)R)ZNN *[$rU   r  c                 p    | j                   r| j                          y| j                  j                         S r  )r  r  r   rY  rX   s    rT   rY  zCoerceToBooleanNode.check_const:  s)    <<NNxx##%%rU   c                 <    d| j                   j                         z  S )Nz	(%s != 0)r  rX   s    rT   r  z)CoerceToBooleanNode.calculate_result_code:  s    TXX__...rU   c           
         | j                   sy | j                  j                  | j                  j                        }|M| j                  j                         rO|j                  d| j                  j                          d| j                          d       |j                  d       |j                  d       |j                  dt        j                   d| d| j                  j                          d	       |j                  |j                  d
t        j                   d| j                               |j                  | j                          dt        j                   d       |j                  d       |j                          y |j                  | j                         d| j                  j                         d|j                  | j                         | j                               y )Nr  z == Py_None) r8  elser  r  rS  rR  r2  z((!CYTHON_ASSUME_SAFE_SIZE) && z < 0)z = (z != 0);r   rb  r  )r  r  rm   r   r   rZ  r   r   r  r   r  r   r   r  )rY   r   	test_funcs      rT   r  z(CoerceToBooleanNode.generate_result_code:  sw   ||**..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rU   c                     | S rN   rW   r   s     rT   rX  z!CoerceToBooleanNode.analyse_types&:  r  rU   N)r[   r\   r]   r   rB  r   r   r   r   r   frozenset_typer   r    r   r  r  r  r  rY  r  r  rX  rW   rU   rT   rD  rD  9  s     !!D 	!8!9!7!7!9!=!:
 0K&/F0rU   rD  c                   (     e Zd ZdZ fdZd Z xZS )r  zSpecial 'CoerceToBooleanNode' for C string arguments which checks the pointer
    and additionally that the C string is non-empty.
    c                     |j                   j                  sJ |j                          |j                  |      }t        |   ||       y rN   )r   r  rh  rP   r  )rY   r   rv   rS   s      rT   r  z#CoerceCStringToBooleanNode.__init__.:  s;    xx!!+388+""3'c"rU   c                     | j                   j                         }| j                   j                  j                  rd| dS d| d| dS )Nz((z
)[0] != 0)rR  z
 != 0 && ()r   r  r   rp  r	  s     rT   r  z0CoerceCStringToBooleanNode.calculate_result_code3:  sG    hhoo88==!!uJ''se:cU*55rU   )r[   r\   r]   r  r  r  r^   r_   s   @rT   r  r  *:  s    #
6rU   r  c                   $    e Zd Zd Zd Zd Zd Zy)r  c                     |j                   j                  r|j                  |      }|| _         t        j	                  | |       |j                  |       y rN   )r   r  rh  r  r  r  r  s       rT   r  zCoerceToComplexNode.__init__=:  sD    88&&s+C	dC(005rU   c                    | j                   j                  j                  r{| j                   j                  j                  | j                   j	                               }| j                   j                  j                  | j                   j	                               }n| j                   j	                         }d}| j                  j                  d|d|dS r1  )r   r   r  r3  r  r4  r  )rY   r6  r7  s      rT   r  z)CoerceToComplexNode.calculate_result_codeD:  s    88==##//0ABI//0ABI)II		$$ 	rU   c                      y rN   rW   r  s     rT   r  z(CoerceToComplexNode.generate_result_codeP:  r   rU   c                     | S rN   rW   r   s     rT   rX  z!CoerceToComplexNode.analyse_typesS:  r  rU   N)r[   r\   r]   r  r  r  rX  rW   rU   rT   r  r  ;:  s    6
rU   r  c           
         ddl m} t        j                  t        j                  t        j
                  dt        j                  d       t        j
                  dt        j                  d       gddd      }t        | j                  d|t        j                  d	d
      |  || j                        g      }|j                  |      }|j                  |k7  r|j                  ||      }|S )Nr,   )HasNoGilNoder   r  r  T)r   r   r   __Pyx_SoftComplexToDoubleSoftComplexToDoublez	Complex.c)r;  r   )r%  r  r   rB  r;  r  r  rB  rt  r   r   r   rX  r   r  )r   r"  rv   r  
cfunc_typerL  s         rT   r   r   W:  s    '%%  

!
!':+G+G
N

!
!*j.D.Dd
K	NJ #"../DkR\#''*+D c"DyyH~~h,KrU   c                   .    e Zd Zd ZdZd Zd Zd Zd Zy)rP  c                 
   t         j                  | |       | j                  j                  j	                         | _        | j                  j
                  | _        d| _        | j                  j                  rt        | _	        y y r  )
r  r  r   r   as_argument_typer   r  rs   r   r.  r  s      rT   r  zCoerceToTempNode.__init__s:  s]    dC(HHMM224	#xx7799   .D !rU   z#Creating temporary Python referencec                     | S rN   rW   r   s     rT   rX  zCoerceToTempNode.analyse_types}:  r  rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rZ  zCoerceToTempNode.may_be_none:  r  rU   c                     | j                   j                  |      | _         | j                   j                         r| j                   S | j                   j                  | _        | j                  | _        | S rN   )r   rd  rS  r   r.  r   s     rT   rd  z"CoerceToTempNode.coerce_to_boolean:  sQ    88--c28888OHHMM	 IIrU   c                    |j                  | j                         d| j                  j                  | j	                               d       | j
                  r}| j                  j                  s/|j                  | j                         | j	                                y |j                  | j                         | j                  | j                          y y )NrS  rT  r  )r   r  r   r  r*  r  r   r  r  r  r  r  s     rT   r  z%CoerceToTempNode.generate_result_code:  s     	

KKM488--djjl;= 	>99//tzz|<//tyy9=9N9N5N 0 P	  rU   N)	r[   r\   r]   r  r  rX  rZ  rd  r  rW   rU   rT   rP  rP  n:  s#    
/ 8K&
PrU   rP  c                   b     e Zd ZdZdZ fdZd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Z xZS )r  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         |   |       |j                  | _        | j                          y rN   )rP   r  r   update_type_and_entryr  s     rT   r  zProxyNode.__init__:  s*    "22""$rU   c                 f    | j                   j                  |      | _         | j                          | S rN   )r   r^  r  r   s     rT   rX  zProxyNode.analyse_types:  s)    88//4""$rU   c                 8    | j                   j                  |      S rN   r  r   s     rT   r   zProxyNode.infer_type:  r  rU   c                     t        | j                  dd       }|r"|| _        | j                  j                  | _        t        | j                  dd       }|r|| _        y y Nr   r   )r
  r   r   r.  r   )rY   r   	arg_entrys      rT   r  zProxyNode.update_type_and_entry:  sQ    txx.DI $ 5 5DDHHgt4	"DJ rU   c                 :    | j                   j                  |       y rN   )r   r  r  s     rT   r  zProxyNode.generate_result_code:  s    %%d+rU   c                 6    | j                   j                         S rN   r  rX   s    rT   r  zProxyNode.result:  r  rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rS  zProxyNode.is_simple:  r  rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rZ  zProxyNode.may_be_none:  r  rU   c                 :    | j                   j                  |       y rN   )r   r  r  s     rT   r  z"ProxyNode.generate_evaluation_code:  s    ))$/rU   c                 :    | j                   j                  |       y rN   )r   r  r  s     rT   r  z ProxyNode.generate_disposal_code:  s    ''-rU   c                 :    | j                   j                  |       y rN   r  r  s     rT   r  zProxyNode.free_temps:  r  rU   )r[   r\   r]   r  r  r  rX  r   r  r  r  rS  rZ  r  r  r  r^   r_   s   @rT   r  r  :  sF     K%

(#,!$&0."rU   r  c                   n     e Zd Zg ZdZd Zd Zd Zd Zd Z	d Z
 fdZd	 Zd
 Zd Zd Zd Zd Z xZS )r  Nc                     t         j                  | |       |j                  | _        t        |dd       }|r|| _        |j
                  | _        t        |dd       }|r|| _        y y r  )r  r  r   r
  r   r.  r   )rY   r   r   r  s       rT   r  zCloneNode.__init__:  sc    dC("22sFD)DI # 0 0DC$/	"DJ rU   c                 6    | j                   j                         S rN   r  rX   s    rT   r  zCloneNode.result:  r  rU   c                 6    | j                   j                         S rN   r  rX   s    rT   rZ  zCloneNode.may_be_none:  r  rU   c                 8    | j                   j                  |      S rN   )r   rl  r   s     rT   rl  zCloneNode.type_dependencies:  r  rU   c                 8    | j                   j                  |      S rN   r  r   s     rT   r   zCloneNode.infer_type:  r  rU   c                     | j                   j                  | _        | j                   j                  | _        d| _        t	        | j                   dd       }|r|| _        | S )Nr,   r   )r   r   r.  r  r
  r   )rY   rv   r  s      rT   rX  zCloneNode.analyse_types:  sK    HHMM	 HH11DHHgt4	"DJrU   c                     | j                   j                  r| j                   j                  ||      S t        | 	  ||      S rN   )r   r   r  rP   )rY   	dest_typerv   rS   s      rT   r  zCloneNode.coerce_to:  s9    8888%%i55w C00rU   c                      yr  rW   rX   s    rT   rS  zCloneNode.is_simple:  r]  rU   c                      y rN   rW   r  s     rT   r  z"CloneNode.generate_evaluation_code;  r   rU   c                      y rN   rW   r  s     rT   r  zCloneNode.generate_result_code;  r   rU   c                      y rN   rW   r  s     rT   r  z CloneNode.generate_disposal_code;  r   rU   c                 z    | j                   r/|j                  | j                         | j                                y y rN   )r  r  r  r*  r  s     rT   r  z'CloneNode.generate_post_assignment_code;  s*     <<OODKKM4::<8 rU   c                      y rN   rW   r  s     rT   r  zCloneNode.free_temps;  r   rU   )r[   r\   r]   r   r  r  r  rZ  rl  r   rX  r  rS  r  r  r  r  r  r^   r_   s   @rT   r  r  :  sP     HK	#!&/(1
9rU   r  c                   J     e Zd ZdZdZed        Zd Zd Zd Z	d fd	Z
 xZS )	CppOptionalTempCoercionz
    Used only in CoerceCppTemps - handles cases the temp is actually a OptionalCppClassType (and thus needs dereferencing when on the rhs)
    Fc                 .    | j                   j                  S rN   r  rX   s    rT   r   zCppOptionalTempCoercion.type;  r  rU   c                 <    d| j                   j                         z  S r  r  rX   s    rT   r  z-CppOptionalTempCoercion.calculate_result_code;  s    ***rU   c                      y rN   rW   r  s     rT   r  z,CppOptionalTempCoercion.generate_result_code";  r   rU   c                 0    t        | j                  d       y )NziUsing C++ classes in boolean binary operators with the 'cpp_locals' directive is not currently supported.r9  )rY   r   r  s      rT   r  z5CppOptionalTempCoercion.generate_bool_evaluation_code%;  s     	dhh I 	JrU   c                 &    t         |   |d      S )NFr  )rP   r  )rY   r  r  rS   s      rT   r  z-CppOptionalTempCoercion._make_move_result_rhs+;  s     w,Ve,DDrU   rj  )r[   r\   r]   r  r  r{  r   r  r  r  r  r^   r_   s   @rT   r+  r+  ;  s=     G +JE ErU   r+  c                       e Zd Zd Zy)r  c                     |j                   r| j                  j                  |      r| S t        j	                  | ||      S rN   )r  r   r  r  r  r  s      rT   r  zCMethodSelfCloneNode.coerce_to7;  s6    ##		(<(<X(FK""4377rU   N)r[   r\   r]   r  rW   rU   rT   r  r  1;  s    8rU   r  c                   0    e Zd ZeZdZg Zd Zd Zd Z	d Z
y)ModuleRefNodeFc                     | S rN   rW   r   s     rT   rX  zModuleRefNode.analyse_typesD;  r  rU   c                      yr  rW   rX   s    rT   rZ  zModuleRefNode.may_be_noneG;  r  rU   c                 "    t         j                  S rN   )r   rw  rX   s    rT   r  z#ModuleRefNode.calculate_result_codeJ;  s    """rU   c                      y rN   rW   r  s     rT   r  z"ModuleRefNode.generate_result_codeM;  r   rU   N)r[   r\   r]   r   r   r  r   rX  rZ  r  r  rW   rU   rT   r4  r4  =;  s'     DGH#rU   r4  c                   ,    e Zd ZdgZeZdZd Zd Zd Z	y)DocstringRefNoderr
  Tc                 n    t         j                  | |       |j                  j                  sJ || _        y rN   )r   r  r   rs   rr
  )rY   r   rr
  s      rT   r  zDocstringRefNode.__init__W;  s)    $$yy$$$	rU   c                     | S rN   rW   r   s     rT   rX  zDocstringRefNode.analyse_types\;  r  rU   c                 >   |j                  | j                         d| j                  j                         d|j                  t	        j
                  d            d|j                  | j                         | j                               | j                  |       y )Nz = __Pyx_GetAttr(r1  r  r  )	r   r  rr
  r  r
   rH  r   r   r  r  s     rT   r  z%DocstringRefNode.generate_result_code_;  sn    

KKM499++-"">#?#?	#JK##DKKM488<> 	? 	T"rU   N)
r[   r\   r]   r   r   r   r  r  rX  r  rW   rU   rT   r:  r:  P;  s$     xHDG
#rU   r:  c                   :    e Zd Zg ZdZdZd	dZd Zd Zd Z	d	dZ
y)
AnnotationNodeTFNc                     t         j                  | |       |>ddlm} t	        j
                   |d      j                  |            }t        ||      }|| _        || _	        y)z6string is expected to already be a UnicodeNode or NoneNr,   rm
  ro  )descriptionr;  )
r   r  rp
  rn
  r
   rH  writer  rq
  rJ  )rY   r   rJ  rq
  rn
  string_values         rT   r  zAnnotationNode.__init__y;  sX    $$>;)77 \:@@FHL L9F	rU   c                     | S rN   rW   r   s     rT   rX  zAnnotationNode.analyse_types;  r  rU   c                 *    | j                  |      d   S r  )r  r   s     rT   r  zAnnotationNode.analyse_as_type;  s    ++C033rU   c                    t        |t              r|j                  }|j                  rL|j	                  |j
                        s0t        |j                  d| j                  j                  z  d       yy|j                  rE|j                  j                  r.|j	                  |j                  j
                        s0t        |j                  d| j                  j                  z  d       y|j                  j                  rf|j                  j                  |      }|r|j                  |j                        st!        |j                  d| j                  j                  z         y|j                  j                  |      }|r=|j"                  r0t        |j                  d| j                  j                  z  d       yyyyyt        |j                  d       y)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   r  ru  r   rE  rt   r   r   rq
  r   rs  r<  r  r}  r  r=  r   pxd_file_loaded)rY   rv   ro  r  s       rT   _warn_on_unknown_annotationz*AnnotationNode._warn_on_unknown_annotation;  so   j.1#J::joo.
ORVR]R]RcRcckln / $$)?)?::jnn112
ORVR]R]RcRcckln00)~~??D(@(@AUAU(V*..IDKKL]L]]_  *~~??DL$@$@JNNSVZVaVaVgVggopr %A< )W< JNN$VWrU   c                    | j                   rg d fS | j                  }dx}}|j                  rt        |j                  dd       |j
                  D ];  \  }}|j                  s|j                  dv rd}|r&|})|j                  dv s8d}|}= |rG|rEt        |j                  dd       n,t        |t              rt        |j                  d	d       g d fS |j                  |
      5  |j                  |      }|| j                  ||       g |fcd d d        S |j                  rt        |j                  dd       |r0|s.|j                  s"|j                  st        |j                  d       |j                  r|j!                  |       |j"                  st        |t$              r|j'                  |      ng }	d d d        |	|fS # 1 sw Y   	fS xY w)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, ...]'.)rD  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)untypedrJ  rr  r   r   r  r   r   r   rF  r  r  rH  rs   r   r  r  rt  r  r  )
rY   rv   assigned_valuero  explicit_pytypeexplicit_ctypert   r   rL  r  s
             rT   r  z&AnnotationNode.analyse_type_annotation;  s   <<t8OYY
+00.%%JNNiqrt)99 	'e--::!22&*O)%*
ZZ#66%)N!&J	' >
(cklm
I.JNNjrsut8O##n#E 	O!11#6H00jA8|	O 	O ++
q! ~x?S?SW_WoWo
ik""88= GQF]F]aklv  yF  bG
==cB  MOI'	O* (""+	O* (""s   *)GB"GGrN   )r[   r\   r]   r   ry  rJ  r  rX  r  rH  r  rW   rU   rT   r?  r?  g;  s/     HM
 G
4X:/#rU   r?  c                        e Zd ZU dZdgZddgZdZeed<   dZ	e
e   ed<   eed<   dZeed<   dedef fd	Zed
        Zed        Zd Zd Zd Z fdZd Zd Z xZS )AssignmentExpressionNodez
    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                 N    t        |   |fi | t        |||d      | _        y )NT)r  r   r  )rP   r  r0   r  )rY   r   r  r   r  rS   s        rT   r  z!AssignmentExpressionNode.__init__;  s+    %%.ScDBrU   c                     | j                   | j                   j                  S | j                  j                   j                  S rN   )r   r   r  rX   s    rT   r   zAssignmentExpressionNode.type;  s0    8888== ""'''rU   c                 B    | j                   j                  j                  S rN   )r  r  rt   rX   s    rT   target_namez$AssignmentExpressionNode.target_name;  s    ""'''rU   c                 l    | j                   xs | j                  j                   }|j                  |      S rN   )r   r  r   ra  s      rT   r   z#AssignmentExpressionNode.infer_type;  s)    hh-$//--~~c""rU   c                 :    | j                   j                  |       y rN   )r  r  r   s     rT   r  z-AssignmentExpressionNode.analyse_declarations<  s    ,,S1rU   c                    | j                   j                  |      | _         | j                   j                  }|j                         sS|j                  r6t        j
                  | j                   j                        | _        d| _        n|j                  |      }| j                  sht        |      | _        t        | j                        | j                   _        | j                  j                  j                  |      | j                  _
        | j                  j                  r'| j                  rd| j                   j                  _        | S r  )r  rX  r   r  r   r&   rP  rQ  r  r  r   r   r  r  ra  s      rT   rX  z&AssignmentExpressionNode.analyse_types<  s     //77<oo!!!!#~~  99T__%8%8915. ((--- ~DH"+DHH"5DOO88<<66s;DHHL 99''D,J,J
 +0DOO'rU   c                 D   | j                   r#| j                  j                  ||      | _        | S || j                  j                  j                  k(  r=| j                  J | j                  j
                  }t        |t              r|j
                  }|j                  ||      }||ur|| j                  _        | j                  j                          t        | j                  j                  t              rt        | j                  j                  t              sr| j                  j                  j
                  | j                  _        | j                  j                  j
                  j                  | j                  j                  _        | S t        | 	  ||      S rN   )rP  r   r  r  r   r   r   rP  r  r  r  rP   )rY   r"  rv   old_rhs_argrhs_argrS   s        rT   r  z"AssignmentExpressionNode.coerce_to0<  s)   ))xx))(C8DHKt**///88'' ((,,K+'78)oo!++Hc:Gk)&..0t22LA *4??+>+>	 J*.//*=*=*A*ADOO'/3/B/B/F/F/K/KDOO'',w 3//rU   c                 6    | j                   j                         S rN   )r   r  rX   s    rT   r  z.AssignmentExpressionNode.calculate_result_codeI<  r  rU   c                 :    | j                   j                  |       y rN   )r  r	  r  s     rT   r  z-AssignmentExpressionNode.generate_result_codeL<  s    //5rU   )r[   r\   r]   r  r   r   r  re  ro
  r   r+   r   r0   rP  r
  r  r{  r   rT  r   r  rX  r  r  r  r^   r_   s   @rT   rO  rO  ;  s    
 wH,'KGT"C(	"$$&+t+B B B
 ( (
 ( (#2(T02!6rU   rO  c                   :    e Zd ZdgZdZej                  Zd Zd Z	y)#FirstArgumentForCriticalSectionNode	name_nodeNc                 d   t        | j                  j                        dk  rt        | j                  d       y t        | j                  | j                  j                  d   j                               | _        | j                  j                  |       | j                  j                  | _	        y )Nr,   zbcritical_section directive can only be applied to a function with one or more positional argumentsr   r  )
r   	func_noder   r   r   r
  declared_namer_  r  r   r   s     rT   r  z8FirstArgumentForCriticalSectionNode.analyse_declarations^<  s~    t~~""#a'$((  A  B!$((1D1DQ1G1U1U1WX++C0NN''	rU   c                 T    | j                   r| j                   j                  |      S | S rN   )r_  r^  r   s     rT   r^  z7FirstArgumentForCriticalSectionNode.analyse_expressionsf<  s#    >>>>55c::rU   )
r[   r\   r]   r   r_  r   r   r   r  r^  rW   rU   rT   r^  r^  Q<  s%     }HI$$D(rU   r^  c                   @     e Zd Zg dZdZeZ fdZd Zd Z	d Z
 xZS )TStringInterpolationNode)r   r  expression_strTc                     t        |   |fi | | j                  't        | j                  t        j
                        sJ y y rN   )rP   r  r  r   r
   rH  )rY   r   r  rS   s      rT   r  z!TStringInterpolationNode.__init__s<  sE    %%$$,4//1M1MN	PN -rU   c                     | j                   j                  |       | j                  | j                  j                  |       | j                  j                  |       y rN   )r   r  r  rf  r   s     rT   r  z-TStringInterpolationNode.analyse_declarationsx<  sH    

'','11#6005rU   c                    | j                   j                  |      j                  |      | _         | j                  ;| j                  /t        | j                  t        j                  d            | _        | j                   | j                  j                  |      | _        | j                  j                  |      | _	        | S )Nr  r;  )
r   rX  r9  r  r  r  r   r
   rH  rf  r   s     rT   rX  z&TStringInterpolationNode.analyse_types~<  s    ZZ--c2EEcJ
+0@0@0H* < <R @ BD'#//==cBD"11??DrU   c                    |j                   j                  t        j                  dd             | j                  j                         }| j                  j                         }| j                  r|j                  | j                        nd}| j                  | j                  j                         n|j                  t        j                        }|j                  | j                          d| d| d| d| d
       |j                  |j                  | j                         | j                               |j!                  | j                         t"               y )NMakeTemplateLibInterpolation	TString.cr  z& = __Pyx_MakeTemplateLibInterpolation(r1  r2  )r   r   r   r   r   r  rf  r  rg  r  r  r   r  r   r   r   r  r   )rY   r   r   
expressionr  r  s         rT   r  z-TStringInterpolationNode.generate_result_code<  s1   ))##$BKP	R

!!#((//1
>B>R>RD$$T%9%9: 	 *.)9)9)ED##%**6+?+?@ 	 	

dkkm_$J5'QST^S__abqarrt  vA  uB  BD  E  	F

4**4;;=$((CD~6rU   )r[   r\   r]   r   r  r   r   r  r  rX  r  r^   r_   s   @rT   re  re  m<  s'    9HGDP
67rU   re  c                   J     e Zd ZdZddgZdZeZdef fdZ	d Z
d Zd	 Z xZS )
TemplateStringNodezt-stringstringsinterpolationsTr  c          	      X   d }g }g }|D ]  }t        |t              ra|:|j                  t        |j                  t        j                  d                   n|j                  |       d }|j                  |       tt        |t              rG||}t        |j                  t        j                  |j                  |j                  z               }J t        |              | t        |t        j                  d            }|j                  |       t        | )  |||       y )Nr  r;  )r   r   )rp  rq  )r   re  r  r  r   r
   rH  r   r   rP   r  )rY   r   r  last_string_noderp  rq  r  rS   s          rT   r  zTemplateStringNode.__init__<  s    	&A!56#+NN;^%A%A"%E$  NN#34'+$%%a(A{+#+'($'2.22 . < <,22QWW<!($ &d1g%)	&* #*3n6R6RSU6VW'(gnMrU   c                     | j                   D ]  }|j                  |        | j                  D ]  }|j                  |        y rN   )rp  r  rq  )rY   rv   r  r  s       rT   r  z'TemplateStringNode.analyse_declarations<  sF     	(A""3'	($$ 	(A""3'	(rU   c                     t        | j                  | j                        j                  |      | _        t        | j                  | j                        j                  |      | _        | S r/  )rF  r   rp  rX  rq  r   s     rT   rX  z TemplateStringNode.analyse_types<  sZ     HH4<<

-
 	 (HH4..

-
 	 rU   c                    |j                   j                  t        j                  dd             | j                  j                         }| j                  j                         }|j                  | j                          d| d| d       |j                  |j                  | j                         | j                               |j                  | j                         t               y )NMakeTemplateLibTemplaterl  z! = __Pyx_MakeTemplateLibTemplate(r1  r2  )r   r   r   r   rp  r  rq  r   r   r   r  r   )rY   r   rp  rq  s       rT   r  z'TemplateStringNode.generate_result_code<  s    ))##$={K	M,,%%',,335

dkkm_$EgYbQ_P``bcd

4**4;;=$((CD~6rU   )r[   r\   r]   r  r   r  r   r   r  r  r  rX  r  r^   r_   s   @rT   ro  ro  <  s8    +,HGDNt N<(7rU   ro  rW   r  rj  (7  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   ry   r{   r  rL   r6  r5  rb   rq   rp   rr   c_py_unicode_ptr_typerG  get_cy_pymutex_typeget_cy_pythread_type_lock_typerl   r   r~   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r@  r  r   rx  r  rP  r  r  r  r  r  r
  r  r  r  r  r  r5  rG  rR  CopyWithUpTreeRefsMixinrX  rh  rr  r  r  r  r  r  r  r  rw  rL  rJ  rI  r  r  r  r  r  rK  r  rF  r  r  r]  rl  rt  rw  r  r  r  rG  r.	  r:	  rF  rY  r	  r	  r	  r	  rO	  r
  r  r  rF
  rP
  rS
  r(  r)  r
  r
  r
  r
  r'  r
  r
  r
  r
  r(  r
  r
  r5  r@  rK  rp  r}  r  r  r  r  r  r  r  not_invnegr   r  r  r  r  r  r  r  r  r  r  r  r  r  r	  rE  rF  rH  rC  rD  r  rj  rK  rp  r}  r  matmulr  r   ltlerJ  negegtis_r  r  and_truedivfloordivr  modr
  or_r  rshiftr  xorr  r  r  r  r  r  r  r  r  r&  r*  r<  rB  compilefindall_find_formatting_types	frozenset_safe_bytes_formatsr  r  r  r  r&  rK  r  r'  r|  r  rP	  r  r  re  r  r_  r  r  r  rD  r  r  r   rP  r  r  r+  r  r4  r:  r?  rO  r^  re  ro  rW   rU   rT   <module>r     sQ     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2J2245)=J==?@4) ."+*.b(6.D ":st sl0" 0"r
X 
. .0{ 0*; 8 8v*8y *8Zy 
?y 
?]/i ]/~0'	 0'fBT 	 T n~) ~B; 
/'~ /'p!A. !AHE~ EP#H #Fc& c&LX2X X2vc(> c(LV(h V(r3J~ 3Jl# #L#N #<:x!>!> :z> *.x .`E Ex 8f"H f"R[# [#H> :> < <h&! h&VF)' F)Rk/ k\O- OdX .n 44~ 4nSX SlA( A(F49 4na3x a3HyAX yAx:( :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o#8 o#d[6 [6|^=| ^=B9! 9!x'!d '!R'"9 'D+#X +#\h  h V-!h -!`|Ix |I~!,8 !,H+< +<\Z& Z, ,7#/ 7#tH58 H5V!#8 !#H'#8_ '#T,H ,47H 74`Gh `GF		 	< <<uX up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hh hT	 	/)Z /)dJ @I/ I/V4 4LooO!!(++! 	(++! 	(++	!
 	(++! ! 	(,,! hoo! ! ! 		! 	(

! 	(//! ! !  !!" 	(,,#!$ //			
!)/! 4G* G*T 6
S9 Sl0< 0L <83l 83v
$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| "g*\ g*TN!% N!bJ# J#Z%#- %#P3L< 3Ll@, @F6!4 6", 8.(P| (PV4" 4"lC CLEl E8	89 	8H &#x #.q#X q#hs6x s6l( 8(7x (7V;7 ;7yh  s   >p 	p! p!