
    hJi                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJrJr  S SK	J
r
  S SK	Jr  S SK	Jr  S S	K	Jr  S S
K	Jr  S:S jr " S S\5      rSrS SSSS.rS rSrSrSrSrSrSrSrSrS;S jr " S S5      rS rS  rS! r S" r!S# r"S$ r#S% r$S& r%S' r&S( r'S) r(S* r)S+ r*S, r+S- r,S<S. jr-S<S/ jr.\/" \
R`                  S09r1\." S1\1S29r2\." S35      r3\." S45      r4\." S55      r5\." S65      r6\." S7\1S29r7\." S8\1S29r8\." S95      r9g)=   )CythonTransform)
ModuleNode)CompileError)CythonUtilityCode)UtilityCodeTempitaUtilityCode)Options)Interpreter)
PyrexTypes)Naming)Symtabc                     SSK Jn  U" U 5      n US:  a8  SU-  nSR                  U R                  S5       Vs/ s H  oCU-   PM	     sn5      n U $ s  snf )N    )dedent 
)textwrapr   joinsplit)textreindentr   indentxs        P/var/www/fran/franai/venv/lib/python3.13/site-packages/Cython/Compiler/Buffer.pyr   r      sS    $<D!|xyydjj.>?.>1*.>?@K @s   Ac                   B   ^  \ rS rSrSrSrU 4S jrS rS rS r	Sr
U =r$ )IntroduceBufferAuxiliaryVars   Fc                    > [        U[        5      (       d   eSU l        [        TU ]  U5      nU R
                  (       a  [        UR                  5        U$ )Nr   )
isinstancer   max_ndimsuper__call__buffers_existsuse_bufstruct_declare_codescope)selfnoderesult	__class__s      r   r"   %IntroduceBufferAuxiliaryVars.__call__   sF    $
++++!$'&tzz2    c           	      T  ^^^^ TR                   R                  5       nU VVs/ s H$  u  pEUR                  R                  (       d  M"  UPM&     nnn[	        U5      S:  a  UR                  S S9  SU l        U VVs/ s H$  u  pEUR                  R                  (       d  M"  UPM&     nnn[	        U5      S:  a  SU l        U H6  u  mmTS:X  d  M  [        TR                  [        5      (       d  M/  SU l          O   A[        T[        5      (       a%  [	        U5      S:  a  [        TR                  S5      eU GHJ  mTR                  R                  R                   (       a  [        TR                  S5      eTR"                  mTR                  nUR$                  [&        R(                  :  a'  [        TR                  S[&        R(                  -  5      eUR$                  U R*                  :  a  UR$                  U l        UUUU4S	 jn	[,        R.                  [0        R2                  4[,        R4                  [0        R6                  44n
U
 VVs/ s H  u  pU	" X5      PM     snnu  p[8        R:                  " X5      Tl        GMM     UTl        TU l         g s  snnf s  snnf s  snnf )
Nr   c                     U R                   $ N)name)entrys    r   <lambda>;IntroduceBufferAuxiliaryVars.handle_scope.<locals>.<lambda>2   s    5::r+   )keyT
memoryviewz'Buffer vars not allowed in module scopez-Buffers with pointer types not yet supported.z1Buffer ndims exceeds Options.buffer_max_dims = %dc                    > TR                  UT5      nTR                  S UU TR                  S9nTR                  (       a  SUl        U$ )N)r/   cnametypeposT)mangledeclare_varr8   is_argused)r7   prefixr6   aux_varr0   r/   r'   r%   s       r   decvar9IntroduceBufferAuxiliaryVars.handle_scope.<locals>.decvarP   sI    VT2++U15488 , E<<#'GLr+   )!entriesitemsr7   	is_bufferlensortr#   is_memoryviewslicer   utility_code_definitionr   using_memoryviewr   r   r8   dtypeis_ptrr/   ndimr	   buffer_max_dimsr    r   c_pyx_buffer_nd_typer   pybuffernd_prefixc_pyx_buffer_typepybufferstruct_prefixr   	BufferAux
buffer_auxbuffer_entriesr%   )r&   r'   r%   scope_itemsr/   r0   bufvarsmemviewslicevarsbuftyper?   auxvarsr7   r=   
pybufferndrcbuffers    `` ``         r   handle_scope)IntroduceBufferAuxiliaryVars.handle_scope+   s    mm))+,7PK[T5::;O;O5KPw<!LL5L6"&D5@b[kdEJJDaDaE[b 1$"&D )MT5|#
53P3PRc(d(d(,% ) dJ''CL1,<txx)RSSEzz&&"488-\]]::DjjG||g555"488KgNeNeeg g||dmm+ '  #779Q9QR"44f6R6RSUGOV#Ww^dF4$8w#W J%//
EE5 8  '
a Q
 cL $Xs   !J	J=!J"JJ$c                 ^    U R                  XR                  5        U R                  U5        U$ r.   )r[   r%   visitchildrenr&   r'   s     r   visit_ModuleNode-IntroduceBufferAuxiliaryVars.visit_ModuleNodeb   s'    $

+4 r+   c                 ^    U R                  XR                  5        U R                  U5        U$ r.   )r[   local_scoper^   r_   s     r   visit_FuncDefNode.IntroduceBufferAuxiliaryVars.visit_FuncDefNodeg   s)    $ 0 014 r+   )r#   r    r%   rH   )__name__
__module____qualname____firstlineno__r#   rH   r"   r[   r`   rd   __static_attributes____classcell__)r)   s   @r   r   r      s*     N5n
 r+   r   )rI   rK   modenegative_indicescastfullTF)rK   rl   rm   rn   z"%s" is not a buffer optionzToo many buffer optionsz#"%s" buffer option already suppliedz"%s" missingz[Only allowed buffer modes are: "c", "fortran", "full", "strided" (as a compile-time string)z#ndim must be a non-negative integerz0dtype must be "object", numeric type or a structz"%s" must be a booleanNc                   ^ ^ Uc  [         n[        R                  " X#USS9u  p#[        U5      [        :  a  [        US   S   [        5      e0 mUR                  5        H*  u  nu  pxU[        ;  a  [        U[        U-  5      eUTU'   M,     [        [        U5       HC  u  nu  pxU[        ;  a  [        U[        U-  5      eUT;   a  [        U[        U-  5      eUTU'   ME     [         H  nUT;  d  M   XF   TU'   M     TR                  S5      n	U	(       a!  U	R                  (       a  [        T [         5      eTR                  S5      n
U
(       a+  [#        U
[$        5      (       a  U
S:  a  [        T [&        5      eTR                  S5      nU(       a  US	;  a  [        T [(        5      eU U4S
 jnU" S5        U" S5        T$ ! [         a    U(       a  [        T [        U-  5      e GM  f = f)a3  
Must be called during type analysis, as analyse is called
on the dtype argument.

posargs and dictargs should consist of a list and a dict
of tuples (value, pos). Defaults should be a dict of values.

Returns a dict containing all the options a buffer can have and
its value (with the positions stripped).
)r   rI   )type_env	type_argsr   rI   rK   r   rl   )ro   stridedcfortranc                 x   > TR                  U 5      n[        U[        5      (       d  [        T[        U -  5      eg r.   )getr   boolr   ERR_BUF_BOOL)r/   r   	globalposoptionss     r   assert_bool+analyse_buffer_options.<locals>.assert_bool   s5    KK!T""y,*=>> #r+   rm   rn   )buffer_defaultsr
   interpret_compiletime_optionsrD   buffer_positional_options_countr   ERR_BUF_TOO_MANYrB   buffer_optionsERR_BUF_OPTION_UNKNOWNzipERR_BUF_DUPKeyErrorERR_BUF_MISSINGrx   is_extension_typeERR_BUF_DTYPEr   intERR_BUF_NDIMERR_BUF_MODE)r{   envposargsdictargsdefaultsneed_completer/   valuer8   rI   rK   rl   r}   r|   s   `            @r   analyse_buffer_optionsr   |   s    "#AAC<AG 7|5572;q>+;<<G&nn.lu~%s$:T$ABB /
 ".':lu~%s$:T$ABB7?sK$$677 ; wJ (  KK E((9m44;;vDZc**dQh9l33;;vDT@@9l33?
 "#N1  J &y/D2HII !Js   6G$G-,G-c                   >    \ rS rSrS rS rS rS rS rS r	S r
S	rg
)BufferEntry   c                     Xl         UR                  U l        UR                  R                  R                  U l        SU R                  -  U l        UR                  R                  U l        U R                  5         g )Nz%s.rcbuffer->pybuffer.buf)	r0   r7   rR   buflocal_nd_varr6   buf_ptrbuffer_ptr_typebuf_ptr_typeinit_attributes)r&   r0   s     r   __init__BufferEntry.__init__   sY    
JJ	%%55;;
2TZZ?!JJ66r+   c                     U R                  5       U l        U R                  5       U l        U R	                  5       U l        g r.   )get_buf_shapevarsshapeget_buf_stridevarsstridesget_buf_suboffsetvars
suboffsetsr&   s    r   r   BufferEntry.init_attributes   s2    ++-
..0446r+   c                 $    U R                  S5      $ )Nz%s.diminfo[%d].suboffsets_for_all_ndimr   s    r   r   !BufferEntry.get_buf_suboffsetvars   s    !!"=>>r+   c                 $    U R                  S5      $ )Nz%s.diminfo[%d].stridesr   r   s    r   r   BufferEntry.get_buf_stridevars   s    !!":;;r+   c                 $    U R                  S5      $ )Nz%s.diminfo[%d].shaper   r   s    r   r   BufferEntry.get_buf_shapevars   s    !!"899r+   c                     [        U R                  R                  5       Vs/ s H  o!U R                  U4-  PM     sn$ s  snf r.   )ranger7   rK   r6   )r&   sis      r   r   BufferEntry._for_all_ndim   s4    -2499>>-BC-BTZZO#-BCCCs   ?c           	         / nU R                   R                  nU R                   R                  nUS:X  ar  [        UU R	                  5       U R                  5       5       H9  u  pgnUR                  U5        UR                  U5        UR                  U5        M;     SU-  n	[        n
O|US:X  a  SU-  n	[        n
O&US:X  a  SU-  n	[        n
OUS:X  a  SU-  n	[        n
O e[        X R	                  5       5       H'  u  pgUR                  U5        UR                  U5        M)     XR                  R                  ;  aJ  UR                  R                  R                  U	5        UR                  S	   nUR                  S
   nU
" XXS9  U R                  R                  5       nU	< SU< SU R                   < SSR#                  U5      < S3nU$ )Nro   z__Pyx_BufPtrFull%ddrt   z__Pyx_BufPtrStrided%ddru   z__Pyx_BufPtrCContig%ddrv   z__Pyx_BufPtrFortranContig%ddutility_code_protoutility_code_def)r/   nd(, ))r7   rK   rl   r   r   r   appendbuf_lookup_full_codebuf_lookup_strided_codebuf_lookup_c_codebuf_lookup_fortran_codeglobalstateutility_codesaddr   empty_declaration_coder   r   )r&   codeindex_cnamesparamsr   rl   r   r   ofuncnamefuncgen	protocodedefcodebuf_ptr_type_codeptrcodes                  r   generate_buffer_lookup_code'BufferEntry.generate_buffer_lookup_code   s    YY^^yy~~6>|#668#99;=a a a a = -r1H*Gy 3b813b8+"9B>1uL*A*A*CDa a  E
 ++999**..x8(()=>I&&'9:GIX= --DDF&.0A4<<&*ii&79r+   )r   r   r6   r0   r   r   r   r7   N)rf   rg   rh   ri   r   r   r   r   r   r   r   rj    r+   r   r   r      s&    7
?<:D*r+   r   c                     SnUR                   nUS:X  a  US-  nO&US:X  a  US-  nOUS:X  a  US-  nOUS:X  a  US	-  nO eU R                  (       a  US
-  nU$ )NPyBUF_FORMATro   z| PyBUF_INDIRECTrt   z| PyBUF_STRIDESru   z| PyBUF_C_CONTIGUOUSrv   z| PyBUF_F_CONTIGUOUSz| PyBUF_WRITABLE)rl   writable_needed)rR   buffer_typeflagsrl   s       r   	get_flagsr     sy    EDv~##		""	''		''u!!5,>#>5Lr+   c                 `    U R                   nSUR                  l        SUR                  l        g NT)rR   r   r<   	rcbuf_var)r0   rR   s     r   used_buffer_aux_varsr     s)    !!J&*J# $Jr+   c                 z   U R                   U R                  R                  p2UR                  R                  nSS/nUS:X  a  UR                  S5        / n[        U R                  R                  5       H$  nU H  nUR                  SXGUXHU4-  5        M     M&     UR                  SR                  U5      5        g )Nr   r   ro   r   z1%s.diminfo[%d].%s = %s.rcbuffer->pybuffer.%s[%d];r   )
rR   r7   rl   r   r6   r   r   rK   putlnr   )		buf_entryr   rR   rl   pybuffernd_structfldnameslnr   fldnames	            r    put_unpack_buffer_aux_into_scoper     s     !++Y^^-@-@"22887#Hv~%	B9>>&&'GIII!g!AM     ( 	JJsxx|r+   c                    U R                   nUR                  R                  nUR                  R                  nUR	                  SU-  5        UR	                  SU-  5        UR	                  SU-  5        UR	                  U< SU< S35        g )Nz%s.pybuffer.buf = NULL;z%s.refcount = 0;z%s.data = NULL;z.rcbuffer = &;)rR   r   r6   r   r   )r0   r   bufauxr   pybuffer_structs        r   put_init_varsr   0  s{    F..44&&,,OJJ(?:;JJ!O34 	JJ #445JJ'8/JKr+   c                 j   U R                   n[        XR                  X0R                  5      nUR	                  S5        UR	                  SU R                  R
                  R                  5       -  5        UR	                  UR                  SU-  U5      5        UR	                  S5        [        X5        g )N{'__Pyx_BufFmt_StackElem __pyx_stack[%d];%s == -1})	rR   get_getbuffer_callr6   r7   r   rI   struct_nesting_deptherror_goto_ifr   )r0   r   r8   rR   	getbuffers        r   put_acquire_arg_bufferr   >  s    !!J"4j**MI 	JJsOJJ85::;K;K;`;`;bbcJJt!!*y"8#>?JJsO %U1r+   c                     U R                   R                  [        5        U R                  SUR                  R
                  R                  -  5        g )N0__Pyx_SafeReleaseBuffer(&%s.rcbuffer->pybuffer);)r   use_utility_codeacquire_utility_coder   rR   r   r6   )r   r0   s     r   put_release_buffer_coder   L  s;    %%&:;JJAEDTDTDdDdDjDjjkr+   c                    UR                   n[        UR                  5      n[        X#5      nUR                  R
                  n[        XR                  5      nU R                  R                  [        5        S[        5       -  $ )Nz__Pyx_GetBufferAndValidate(&%(pybuffernd_struct)s.rcbuffer->pybuffer, (PyObject*)%(obj_cname)s, &%(dtype_typeinfo)s, %(flags)s, %(ndim)d, %(cast)d, __pyx_stack))rK   r   rn   r   r   r6   get_type_information_cnamerI   r   r   r   locals)	r   	obj_cnamerR   r   rK   rn   r   r   dtype_typeinfos	            r   r   r   Q  sr    D{ Dj.E"2288/6G6GHN%%&:;%'-x0 1r+   c           	      n  ^ UR                   UR                  pvUR                  R                  n[	        Xg5      n	TR                  S5        TR                  SUR                  R                  5       -  5        [        TSXg5      n
U(       Ga  TR                  SU-  5        TR                  R                  [        R                  SS9nTR                  U< SX-  < S35        TR                  S	TR                  S
U-  5      -  5        [        U4S j[        S5       5       5      nTR                  SU-  5        TR                  S	TR                  SX-  -  5      -  5        TR                  SU-  5        TR                   R#                  [$        5        TR                  S5        TR                  S5        TR                  SU-  5        TR                  S5        TR                  SU-  5        U H  nTR                  R'                  U5        M      TR                  S5        [)        UT5        TR                  TR+                  X5      5        TR                  R'                  U5        OTR                  S	TR                  SX-  -  5      -  5        TR                  U < S[        R,                  " U[        R.                  S5      < SU< S35        TR                  TR1                  U5      5        TR3                  S5        [)        UT5        TR                  S5        TR                  S5        g)a"  
Generate code for reassigning a buffer variables. This only deals with getting
the buffer auxiliary structure and variables set up correctly, the assignment
itself and refcounting is the responsibility of the caller.

However, the assignment operation may throw an exception so that the reassignment
never happens.

Depending on the circumstances there are two possible outcomes:
- Old buffer released, new acquired, rhs assigned to lhs
- Old buffer released, new acquired which fails, reaqcuire old lhs buffer
  (which may or may not succeed).
r   r   z%sr   F
manage_refz = r   	if (%s) {%s < 0c              3   t   >#    U  H-  nTR                   R                  [        R                  S S9v   M/     g7f)Fr   N)	funcstateallocate_tempr   py_object_type).0_r   s     r   	<genexpr>'put_assign_to_buffer.<locals>.<genexpr>  s3      -#+a ..66z7P7P]b6c#+s   58   zPyErr_Fetch(&%s, &%s, &%s);r   z/Py_XDECREF(%s); Py_XDECREF(%s); Py_XDECREF(%s);z!__Pyx_RaiseBufferFallbackError();z} else {zPyErr_Restore(%s, %s, %s);r   z%s = %s = %s = 0;Py_Nonez; __Pyx_INCREF(Py_None); z.rcbuffer->pybuffer.buf = NULL;N)rR   r7   r   r6   r   r   rI   r   r   r  r  r   
c_int_typeunlikelytupler   r   r   raise_buffer_fallback_coderelease_tempr   error_goto_if_negtypecastr  
error_gotoput)	lhs_cname	rhs_cnamer   is_initializedr8   r   rR   r   r   r   r   retcode_cname	exc_tempsts        `        r   put_assign_to_bufferr  _  s     (22INN"2288j.EJJsOJJ8;;L;L;a;a;ccd"4zGI

EHYYZ44Z5J5JW\4]

	0EFG

;$--=0H"IJK
  -#(8- -	

09<=

;zY=R/S!TTU

DyPQ))*DE

67

:

/);<

3

&23ANN''* 

3(D9

4))-=>##M2
 	

;zY=R/S!TTU

''Z5N5NPYZ%' 	( 	

4??3'((D9

3JJsOr+   c           
         US   =(       a    UnUS   (       Ga  UR                   R                  [        R                  SS9nUR	                  SU-  5        [        [        XU R                  5       5      5       H  u  n	u  pnU
S:w  a  UR	                  SU-  5        U(       aB  UR	                  U< SU< S	35        UR	                  S
UR                  SU-  5      X4-  5        OUR	                  SX4-  5        UR                  S5        U
S:w  a  SnOSnUR	                  S
UR                  U< SU< U< 35      X4-  5        M     U(       a"  UR                  R                  [        5        SnO!UR                  R                  [        5        SnUR	                  SUR                  SU-  5      -  5        UR	                  U< SU< S35        UR	                  UR                  U5      5        UR	                  S5        UR                   R                  U5        OQU(       aJ  [        XU R                  5       5       H,  u  pnU
S:w  d  M  UR	                  SU< SU< SU< S	35        M.     U R!                  XR5      $ )a=  
Generates code to process indices and calculate an offset into
a buffer. Returns a C string which gives a pointer which can be
read from or written to at will (it is an expression so caller should
store it in a temporary if it is used more than once).

As the bounds checking can have any number of combinations of unsigned
arguments, smart optimizations etc. we insert it directly in the function
body. The lookup however is delegated to a inline function that is instantiated
once per ndim (lookup with suboffsets tend to get quite complicated).

entry is a BufferEntry

wraparoundboundscheckFr   z%s = -1;r   zif (%s < 0) {z += r   zif (%s) %s = %d;r  z%s = %d;z} else  z(size_t)z >=  __Pyx_RaiseBufferIndexErrorNogil__Pyx_RaiseBufferIndexErrorr  z%s != -1r   );r   zif (z < 0) )r  r  r   r  r   	enumerater   r   r  r  r   r   raise_indexerror_nogilraise_indexerror_coder  r  r   )r0   index_signedsr   
directivesr8   r   rm   in_nogil_contextfailed_dim_tempdimsignedr6   r   rn   funcs                  r   put_buffer_lookup_coder.    s$    ",/D4D-  
 ..66z7L7LY^6_

:/0+4SV[VmVmVo5p+q'C'&{

?U23#JJeU;<JJ1h&67'5.  . / JJz_,BBC#{!JJ)eT5AB-& & '# ,r* --.DE5D--.CD0D

;zO/K!LLM

o67

4??3'(

3##O4	$'UE\E\E^$_ F5{

eUEJK %` ,,T@@r+   c                 .    U R                  [        5        g r.   )r   buffer_struct_declare_code)r   s    r   r$   r$     s    34r+   c                    SR                  [        U5       Vs/ s H
  nSXDU4-  PM     sn5      nU R                  SU< SU< SU< SU< S3	5        SR                  [        U5       Vs/ s H
  nSXDU4-  PM     sn5      nU R                  S	U< S
U< S35        UR                  [        S5      X&4-  SR                  [        U5       Vs/ s H  n[        S5      XDXD4-  PM     sn5      -   S-   5        gs  snf s  snf s  snf )
Generates a buffer lookup function for the right number
of dimensions. The function gives back a void* at the right location.
r   zi%d, s%d, o%d#define (type, buf, z	) (type)(z
_imp(buf, z))z.Py_ssize_t i%d, Py_ssize_t s%d, Py_ssize_t o%dzstatic CYTHON_INLINE void* z_imp(void* buf, r#  zf
        static CYTHON_INLINE void* %s_imp(void* buf, %s) {
          char* ptr = (char*)buf;
        r   zX          ptr += s%d * i%d;
          if (o%d >= 0) ptr = *((char**)ptr) + o%d;
        z
return ptr;
}N)r   r   r   r   )protodefinr/   r   r   	macroargsfuncargss          r   r   r     s    		b	J	1?aAY6	JKI	KKtYX\^ghiyy`efh`ij`i[\JaTUYV`ijkH	KKtXVW	KK     #%'' &+2Y+0 &/ ,2 3 , a|, &/+0 #

    K k
+0s   C9+C>Dc           	         SR                  [        U5       Vs/ s H	  nSXD4-  PM     sn5      nSR                  [        U5       Vs/ s H	  nSXD4-  PM     sn5      nU R                  SU< SU< SU< S35        g	s  snf s  snf )
r2  r   i%d, s%d + 	i%d * s%dr3  r4  z) (type)((char*)buf + r   N)r   r   r   r5  r6  r/   r   r   argsoffsets          r   r   r     sp     9959=9ajA6)9=>DZZuRyAy!v-yABF	KKtTSYZ[ >As   A>Bc                 B   US:X  a  U R                  SU-  5        gSR                  [        U5       Vs/ s H	  nSXD4-  PM     sn5      nSR                  [        US-
  5       Vs/ s H	  nSXD4-  PM     sn5      nU R                  SX%XcS-
  4-  5        gs  snf s  snf )	z
Similar to strided lookup, but can assume that the last dimension
doesn't need a multiplication as long as.
Still we keep the same signature for now.
r   .#define %s(type, buf, i0, s0) ((type)buf + i0)r   r:  r;  r<  9#define %s(type, buf, %s) ((type)((char*)buf + %s) + i%d)Nr   r   r   r=  s          r   r   r     s     
QwDtKLyyuRyAy!*v-yAB5a=I=a[A61=IJOSW_elmgmRnno BIs   B&Bc                 :   US:X  a  U R                  SU-  5        g	SR                  [        U5       Vs/ s H	  nSXD4-  PM     sn5      nSR                  [        SU5       Vs/ s H	  nSXD4-  PM     sn5      nU R                  SX%US4-  5        g	s  snf s  snf )
z:
Like C lookup, but the first index is optimized instead.
r   rA  r   r:  r;  r<  rB  r   NrC  r=  s          r   r   r     s     
QwDtKLyyuRyAy!*v-yAB5B<H<a[A61<HIOSW_eghRiij BHs   B$Bc                     U R                   (       a  gU R                  (       a  gU R                  (       d  U R                  (       a  SnOSnXR	                  5       -   $ )Nobjectptrnn_r   )is_pyobjectrJ   
is_typedefis_struct_or_unionspecialization_name)rI   r=   s     r   mangle_dtype_namerM  '  sG     	u77FF11333r+   c                 (   [        U5      nSU-  nSU-  nUR                  (       a  gUc  UR                  5       nUS::  a   eX@R                  R                  ;  Ga+  U R                  R                  R                  U5        U R                  S   n/ nUR                  (       aK  UR                  (       a:  UR                  UR                  5        UR                  nUR                  (       a  M:  UR                  =(       a    UR                  5       nUR                  5       n	UR                  5       (       a  SnGO<UR                  (       Ga(  UR                  n
UR                   (       a  U
R"                  n
U
R$                  n['        U5      S:  d   eU Vs/ s H  n[)        XR*                  US-
  5      PM     nnUR-                  SU-  S	S
9  UR                   (       a  UR.                  R                  5       nOUR                  5       n[1        X5       H:  u  pUR-                  SU< SUR2                  < SU< SUR4                  < S3	S	S
9  M<     UR-                  SS	S
9  UR-                  SS	S
9  O e[7        U5      nSnSnU[8        R:                  L a  SU	-  nSnOUR<                  (       a  SU	-  nSU-  nOqU(       d  UR>                  (       a  SnOVUR@                  (       a  SnOBUR                  (       a  SnURB                  (       a  SnOURD                  (       a  SnO U5       eSnUUXYSRG                  U Vs/ s H  n[7        U5      PM     sn5      =(       d    S['        U5      UUU4	nUR-                  UU-  S	S
9  U$ s  snf s  snf )aV  
Output the run-time type information (__Pyx_TypeInfo) for given dtype,
and return the name of the type info struct.

Structs with two floats of the same size are encoded as complex numbers.
One can separate between complex numbers declared as struct or with native
encoding by inspecting to see if the fields field of the type is
filled in.
z__Pyx_TypeInfo_%sz__Pyx_StructFields_%sz<error>r   typeinfoNULLr   z'static const __Pyx_StructField %s[] = {T)safez  {&z, "z", offsetof(r   z)},z  {NULL, NULL, 0}z};0z__PYX_IS_UNSIGNED(%s)z'H'z%s ? 'U' : 'I'z'C'z'R'z'S'__PYX_BUF_FLAGS_PACKED_STRUCTz'O'zRstatic const __Pyx_TypeInfo %s = { "%s", %s, sizeof(%s), { %s }, %s, %s, %s, %s };)$rM  is_errorr   r   r   r   is_arrayr   size	base_typerK  can_be_complexr   is_simple_buffer_dtype	is_structr%   is_cv_qualifiedbase_type_scopevar_entriesrD   r   r7   r   cv_base_typer   r/   r6   strr   c_char_typeis_int
is_complexis_floatpackedrI  r   )r   rI   maxdepth
namesuffixr/   structinfo_nametypecode
arraysizescomplex_possibledeclcodestruct_scopefieldsftypesstruct_typerO  repr   is_unsigned	typegroupr   tups                         r   r   r   5  s    #5)J+D-
:O~~i E$>$>$@1}u##111&&**40##J/
>>..!!%**- ... !33N8L8L8N//1''))$O___ ;;L$$+;;!--Fv;?"?$&$ 0ffhlK$  &NNDV]aNb$$#00GGI#::<"61 (!&&+qww HNR  T  2 NN.TN:NN4dN+5%jJ***1H<KI\\1H<K(;6I!1!1I^^I__I||7I%5LS/yy*5*Q#a&*56=#s:+u. 	x#~D1Kc&Z 6s   #N
Nc                 l    Uc  [         R                  " U S40 UD6$ [        R                  " U S4SU0UD6$ )NzBuffer.ccontext)r   loadr   )util_code_namerv  kwargss      r   load_buffer_utilityrz    s=    
EfEE!&&~z]7]V\]]r+   )max_dimsBufferStructDeclare)rv  BufferFormatStructsBufferIndexErrorBufferIndexErrorNogilBufferFallbackErrorBufferGetAndValidateBufferFormatCheckTypeInfoToFormat)r   r   r.   ):Visitorr   r   Errorsr   r   r   Coder   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   r   r   r   r   r   r   r   r   r   r  r.  r$   r   r   r   r   rM  r   rz  dictrL   rv  r0  buffer_formats_declare_coder&  r%  r  r   buffer_format_check_code_typeinfo_to_format_coder   r+   r   <module>r     so   $ "   * 1     U? Ut Gf$PUV"# 6 , 3 l4B'>JD DN %
&L2l
1EP?AD5 *\p	k4]~^ //
001FPWX 12GH  ,,>? ,-DE 01FG *+A7S ./BGT  //AB r+   