
    Ngv                     @   d dl mZ ddlmZmZ ddlmZ ddlmZmZm	Z	 ddlm
Z
 ddlmZmZ ddlmZ dd	lmZ dd
lmZ ddlm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!e"e#e$e%e&d!Z'd"d#d$d%d&d'd!Z(d(Z)d)Z*d*Z+d+Z,d,Z-d- Z.	 dhd0Z/	 did1Z0d2 Z1d3 Z2d4 Z3djd5Z4 G d6 d7ej5                  Z6d8 Z7d9 Z8d: Z9d; Z:d< Z;dkd=Z< G d> d?e=          Z> G d@ dAe>          Z? G dB dCe>          Z@dD ZAdE ZBdF ZCdG ZDdH ZEdI ZFdJdKdLdMdNdOdPZGdQ ZHdR ZIdS ZJdT ZKdldVZLdldWZMdX ZNe,e
jO        e-ejP        jQ        dYdZZR eMd[eRg \          ZS eMd]eR          ZT eMd^ eUeRe
jO        _          eSeTg\          ZV eMd`          ZW eLdaejX        gb          ZY eMdceR          ZZ eMddeR          Z[ eMdeeRg b          Z\ eLdfeR ej]                    ej^        ej_        eVeZe[e\g\          Z`dgZaeSjb        c                    e`           e\jb        c                    e`           dUS )m    )absolute_import   )CompileErrorerror)	ExprNodes)IntNodeNameNodeAttributeNode)Options)UtilityCodeTempitaUtilityCode)CythonUtilityCode)Buffer)
PyrexTypes)
ModuleNodezStart must not be given.z3Axis specification only allowed in the 'step' slot.z.Step must be omitted, 1, or a valid specifier.z>Cannot specify an array that is both C and Fortran contiguous.zInvalid axis specification.z+Variable was not cimported from cython.viewz=no expressions allowed in axis spec, only names and literals.z<Invalid axis specification for a C/Fortran contiguous array.zdCannot check if memoryview %s is initialized without the GIL, consider using initializedcheck(False)PyBUF_FORMATz#(PyBUF_C_CONTIGUOUS | PyBUF_FORMAT)z#(PyBUF_F_CONTIGUOUS | PyBUF_FORMAT)z%(PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT)PyBUF_FULL_ROPyBUF_RECORDS_RO__Pyx_MEMVIEW_DIRECT__Pyx_MEMVIEW_PTR__Pyx_MEMVIEW_FULL__Pyx_MEMVIEW_CONTIG__Pyx_MEMVIEW_STRIDED__Pyx_MEMVIEW_FOLLOW)directptrfullcontigstridedfollowdpfcs_z{ 0, 0, { 0 }, { 0 }, { 0 } }
memoryview__pyx_memoryview_type__pyx_memoryview_obj__Pyx_memviewslicec                 f    |                     d| z             |                     d| z             d S )Nz%s.data = NULL;z%s.memview = NULL;)putln)mv_cnamecodes     V/var/www/html/ai-engine/env/lib/python3.11/site-packages/Cython/Compiler/MemoryView.pyput_init_entryr0   C   s8    JJ 8+,,,JJ#h./////    FTc           	         |j         j        sJ |                                p|                                }|r|                                }nJ|j                            |d          }|                    |d|                    |          d           t          | ||||||           |s|j        
                    |           dS dS )zEWe can avoid decreffing the lhs if we know it is the first assignmentF
manage_ref = ;)have_gilfirst_assignmentN)typeis_memoryviewsliceresult_in_temp	is_simpleresult	funcstateallocate_tempr,   	result_asput_assign_to_memviewslicerelease_temp)		lhs_cnamelhs_typelhs_posrhsr.   r7   r8   
pretty_rhsrhstmps	            r/   put_acquire_memoryviewslicerI   L   s     8&&&&##%%8J C--h5-II

x)@)@)@)@ABBB y#vx(0CSU U U U  ,##F+++++, ,r1   c                     | |k    r|                     d           d S |s|                    | ||           |                                s|                    |           |                     | d|d           d S )Nz&/* memoryview self assignment no-op */r7   r5   r6   )r,   put_xdecrefr;   make_owned_memoryviewslice)rC   rF   	rhs_cnamememviewslicetyper.   r7   r8   s          r/   rA   rA   a   s    I 	

;<<< ,$4"* 	 	, 	, 	,  -&&t,,,JJYYY			233333r1   c                     t          |           \  }}|rt          S |rt          S t          |  \  }}d|v sd|v rt          S t
          S )Nr   r   )is_cf_contigmemview_c_contiguousmemview_f_contiguouszipmemview_full_accessmemview_strided_accessspecsis_c_contigis_f_contigaccesspackings        r/   get_buf_flagsr]   s   s\    +E22K $##	 $##5kOFG5F??""%%r1   c                 v    dg|z  }|                     | j                   t          j        | j        |          S )Nr   r   )extendaxesr   MemoryViewSliceTypedtype)memoryviewtypenra   s      r/   insert_newaxesrf      s:    !"Q&DKK#$$$).*>EEEr1   c                     t          | j        |j        z
            }| j        |j        k     rt          | |          |fS | t          ||          fS N)absndimrf   )srcdstre   s      r/   broadcast_typesrm      sQ    CHsx  A
x#(c1%%s**N3****r1   c                 x   | j         r| j        j        rdS | t          j        u rdS | j        r3| j        dk    r(| j        j        D ]}t          |j
                  s dS dS | j        pT| j        o|dk     ot          | j        |dz             p/| j        p(| j        p!| j        p| j        ot          | j                  S )z
    Return whether type dtype can be used as the base type of a
    memoryview slice.

    We support structs, numeric types and objects
    FstructT   r   )
is_complex	real_typeis_intr   c_bint_type	is_structkindscopevar_entriesvalid_memslice_dtyper9   is_erroris_array	base_type
is_numericis_pyobjectis_fused
is_typedeftypedef_base_type)rc   imembers      r/   ry   ry      s     EO2 u
&&&u 5:11k- 	 	F'44 uu t 	 	M 
 
6AE 
6	eoq1u	5	5		M
 		M 		M 		M 
		K253JKK
r1   c                   >    e Zd ZdZd Zd Zd Zd Zd ZddZ	d	 Z
d
S )MemoryViewSliceBufferEntryz
    May be used during code generation time to be queried for
    shape/strides/suboffsets attributes, or to perform indexing or slicing.
    c                     || _         |j        | _        |j        | _        d| j        z  | _        | j         j        j        }t          j        |          | _        |                                  d S )Nz%s.data)	entryr9   cnamebuf_ptrrc   r   CPtrTypebuf_ptr_typeinit_attributes)selfr   rc   s      r/   __init__z#MemoryViewSliceBufferEntry.__init__   s`    
J	[
 4:-
%&/66r1   c                 ,    |                      d          S )N%s.suboffsets[%d]_for_all_ndimr   s    r/   get_buf_suboffsetvarsz0MemoryViewSliceBufferEntry.get_buf_suboffsetvars   s    !!"5666r1   c                 ,    |                      d          S )N%s.strides[%d]r   r   s    r/   get_buf_stridevarsz-MemoryViewSliceBufferEntry.get_buf_stridevars   s    !!"2333r1   c                 ,    |                      d          S )N%s.shape[%d]r   r   s    r/   get_buf_shapevarsz,MemoryViewSliceBufferEntry.get_buf_shapevars   s    !!.111r1   c                 z    fdt          | j        j                  D             }|                     ||          S )Nc                 4    g | ]\  }\  }}||         ||fS  r   ).0dimr[   r\   index_cnamess       r/   
<listcomp>zJMemoryViewSliceBufferEntry.generate_buffer_lookup_code.<locals>.<listcomp>   sF     M M M..fg l3'9 M M Mr1   )	enumerater9   ra   _generate_buffer_lookup_code)r   r.   r   ra   s     ` r/   generate_buffer_lookup_codez6MemoryViewSliceBufferEntry.generate_buffer_lookup_code   sT    M M M M2;DIN2K2KM M M00t<<<r1   Tc           
         | j         }| j        j                                        }|D ]\  }}}}	d| j        |fz  }
d| j        |fz  }d| j        |fz  }t          ||	          }|dv r/|j                            t                     d|d|d|d|d	}n^|dk    rd	|d
|d|d}d|d|d}nB|dk    rd|d
|d|d}n/|dk    rd	|d
|d|d}n|dk    s
J |            d|d|d|d}d||fz  }|r	d|d|dS |S )zl
        Generate a single expression that indexes the memory view slice
        in each dimension.
        r   r   r   )genericgeneric_contiguousz__pyx_memviewslice_index_full(z, )indirect(z +  * z(*((char **) z) + indirect_contiguousr   
contiguousz((char *) ((( *) z))z( /* dim=%d */ %s )z(()	r   r9   rc   empty_declaration_coder   get_memoryview_flagglobalstateuse_utility_codememviewslice_index_helpers)r   r.   ra   cast_resultbufp	type_declr   indexr[   r\   shapestride	suboffsetflags                 r/   r   z7MemoryViewSliceBufferEntry._generate_buffer_lookup_code   s   
 |IO::<<	+/ 	7 	7'C"dj#%66E%S(99F+tz3.??I&vw77D888
  112LMMMM-1TT555&&&)))M ###+/44?48DD)))D....8<eeeYYYO"""+/44? |+++T++++:C))TTT555Q(C;6DD 	5 	5$-IIttt44r1   c           	      F   | j         }                    dt                      z                                 dt                      z                                 |||           t	          d | j        j        D                       }	g fd}
d}d}|D ]}|j        r*dD ]!\  }}                    d	||||fz             "|d
z  }4|d
z  }| j        j        |         \  }}|j        rt          t                                }d
                                D ]=}t          ||          }|j         x}|d|z   <   |r|                                nd||<   >|d         s|d         s|d         s||d<   d}nd}                    |j                  |d<   |d
z  }n|                                }|dk    }|r#|dk    }|dk    rt          |j        d          c S t          t                      t!          |d                   t!          |d                             }|d         r                    |j                  |d<   d}t#          j        |d|          \  }}                    |           r"j                            d                    dS dS )a  
        Slice a memoryviewslice.

        indices     - list of index nodes. If not a SliceNode, or NoneNode,
                      then it must be coercible to Py_ssize_t

        Simply call __pyx_memoryview_slice_memviewslice with the right
        arguments, unless the dimension is omitted or a bare ':', in which
        case we copy over the shape/strides/suboffsets attributes directly
        for that dimension.
        z%(dst)s.data = %(src)s.data;z"%(dst)s.memview = %(src)s.memview;rK   c              3   (   K   | ]\  }}|d k    V  dS )r   Nr   )r   r[   r\   s      r/   	<genexpr>zHMemoryViewSliceBufferEntry.generate_buffer_slice_code.<locals>.<genexpr>  s+      #]#]?67Fh$6#]#]#]#]#]#]r1   c                      sSj                             t          j        d          }                     d| z                                 |            d         S )NFr3   z%s = -1;r   )r>   r?   r   
c_int_typer,   append)suboffset_dimr.   suboffset_dim_temps    r/   get_suboffset_dimzPMemoryViewSliceBufferEntry.generate_buffer_slice_code.<locals>.get_suboffset_dim  s_    % 9 $ < <Z=R_d < e e

:5666"))-888%a((r1   r   ))r   r   )stridesr   )
suboffsetsr   z%s.%s[%d] = %d;r   zstart stop stephave_0
have_start	have_stop	have_stepr[   SimpleSlice
ToughSlice
error_gotor   r   z7All preceding dimensions must be indexed and not sliced
wraparoundboundscheck)r   r   
SliceIndexMemoryView_C.c)contextN)r   r,   localsput_incref_memoryviewsliceallr9   ra   is_noneis_slicedictsplitgetattrr=   r   posr   intr   load_as_stringputr>   rB   )r   r.   indicesrl   dst_typer7   have_slices
directivesrk   all_dimensions_directr   r   new_ndimr   attribvaluer[   r\   r!   r%   idxhave_idx	util_namer   r   r&   implr   s    `                         @r/   generate_buffer_slice_codez5MemoryViewSliceBufferEntry.generate_buffer_slice_code   s!    j

1FHH<===

7&((BCCC''X'III ##]#]din#]#]#] ] ]	) 	) 	) 	) 	) 	)  4	 4	E} %W S SMFEJJ0C53QQRRRRA1HC"inS1OFG~ %)NN*0022 = =A!%++C47K?Hq1~+3<3::<<<AaDD, A1[> AQ{^ A #)AhK -II ,I&*ooei&@&@AlOA llnn!X- ?$.G1}}$UY&> ?  ? ? ? ? HH":l#;<< #J}$= > >  
 ]# A&*ooei&@&@AlO(	(7	CS]^___GAtHHTNNNN 	?N''(:1(=>>>>>	? 	?r1   N)T)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r1   r/   r   r      s         	 	 	7 7 74 4 42 2 2= = =
, , , ,\W? W? W? W? W?r1   r   c                 Z    t          j        |           }t          j        | |||          S )N)startstopstep)r   NoneNode	SliceNode)r   nones     r/   empty_slicer   X  s5    c""Ds$$(t5 5 5 5r1   c                 T   g }d}d}d | D             }t          |           t          |          z
  }| D ]}t          |t          j                  rRd}t	          |j                  }|r|                    |           J||z
  dz   }	|                    |g|	z             d}n|p|j        p|j	        }|                    |           t          |          t          |          z
  }
|
|k     r8d}||
z
  }	|                    t	          | d         j                  g|	z             |||fS )NFc                      g | ]}|j         	|S r   )r   )r   newaxiss     r/   r   zunellipsify.<locals>.<listcomp>c  s    AAA7AwAAAr1   Tr   r   )
len
isinstancer   EllipsisNoder   r   r   r`   r   r   )r   rj   r=   seen_ellipsisr   newaxes	n_indicesr   
full_slicenslicesresult_lengths              r/   unellipsifyr  ^  sK   FMKAAgAAAGGs7||+I ! !eY344 	!K$UY//J %j))))*Q.zlW4555 $%HH5=KMM%    KK#g,,.Mt&{72;?334w>???''r1   c                     | dk    r|dv rdS | dk    r|dk    rdS | dk    r|dv rdS | dk    r|dk    rdS | d	k    r|dv rd
S | |fdk    sJ | |f            dS )Nr   )r   r    r   r   r   r   r   r   r   r   r   r   r   r   )r[   r\   s     r/   r   r   ~  s    G'<<<y	6		g11##	5W(===z	5W00$$	8		+@ @ @y $888867:K888|r1   c                     | dv sJ d| |fz  S )NCFz!__pyx_memviewslice_is_contig_%s%dr   )contig_typerj   s     r/   get_is_contig_func_namer    s#    *$$$$.+t1DDDr1   c                 p    | dv sJ t          t          ||           }t          d|t          g          }|S )Nr
  )rj   r  MemviewSliceCheckContigrequires)r   r   load_memview_c_utilityis_contig_utility)r  rj   r  utilitys       r/   get_is_contig_utilityr    sE    *$$$$W4[999A$%>M^L_```GNr1   c                 j    | j         s| j        r|st          | |||          S t          | |||          S rh   )rY   rZ   ContigSliceIterStridedSliceIter)
slice_typeslice_resultrj   r.   force_strideds        r/   
slice_iterr    sI     F*"8 F- Fz<tDDD
L$EEEr1   c                       e Zd Zd ZdS )	SliceIterc                 >    || _         || _        || _        || _        d S rh   )r  r  r.   rj   )r   r  r  rj   r.   s        r/   r   zSliceIter.__init__  s#    $(				r1   N)r   r   r   r   r   r1   r/   r  r    s#            r1   r  c                       e Zd Zd Zd ZdS )r  c                      j         }|                                  j        j                                        }d                     fdt           j                  D                       }|                    d|z             |                    d           |                    |d|d j	        d           |                    d           d	S )
Nr   c              3   0   K   | ]}d j         |fz  V  dS )r   N)r  )r   r   r   s     r/   r   z.ContigSliceIter.start_loops.<locals>.<genexpr>  sD        ;  ;$% !/$2CQ1G G  ;  ;  ;  ;  ;  ;r1   z"Py_ssize_t __pyx_temp_extent = %s;zPy_ssize_t __pyx_temp_idx;z *__pyx_temp_pointer = (r   z.data;zPfor (__pyx_temp_idx = 0; __pyx_temp_idx < __pyx_temp_extent; __pyx_temp_idx++) {__pyx_temp_pointer)
r.   begin_blockr  rc   r   joinrangerj   r,   r  )r   r.   r   
total_sizes   `   r/   start_loopszContigSliceIter.start_loops  s    yO)@@BB	ZZ  ;  ;  ;  ;).ty)9)9 ;  ;  ; ; ;


7*DEEE

/000

IIyyy$"3"3"35 	6 	6 	6

 . 	/ 	/ 	/ $#r1   c                     | j                             d           | j                             d           | j                                          d S )Nz__pyx_temp_pointer += 1;})r.   r,   	end_blockr   s    r/   	end_loopszContigSliceIter.end_loops  sE    	2333		r1   Nr   r   r   r)  r-  r   r1   r/   r  r    s2        $ $ $$    r1   r  c                       e Zd Zd Zd ZdS )r  c                 :   | j         }|                                 t          | j                  D ]l}|| j        |f}|                    d|z             |                    d|z             |                    d|z             |                    d|z             m|                    d| j        z             t          | j                  D ]A}|dk    r|                    d||dz
  fz             |                    d	||||fz             Bd
| j        dz
  z  S )Nz/Py_ssize_t __pyx_temp_extent_%d = %s.shape[%d];z1Py_ssize_t __pyx_temp_stride_%d = %s.strides[%d];zchar *__pyx_temp_pointer_%d;zPy_ssize_t __pyx_temp_idx_%d;z__pyx_temp_pointer_0 = %s.data;r   z.__pyx_temp_pointer_%d = __pyx_temp_pointer_%d;r   z\for (__pyx_temp_idx_%d = 0; __pyx_temp_idx_%d < __pyx_temp_extent_%d; __pyx_temp_idx_%d++) {z__pyx_temp_pointer_%d)r.   r%  r'  rj   r  r,   )r   r.   r   ts       r/   r)  zStridedSliceIter.start_loops  sP   yty!! 	< 	<A4$a'AJJH1LMMMJJJQNOOOJJ59:::JJ6:;;;;

4t7HHIIIty!! 	E 	EA1uu

KqRSVWRWjXYYYJJ 5891a|D E E E E '$)a-88r1   c                     | j         }t          | j        dz
  dd          D ]1}|                    d||fz             |                    d           2|                                 d S )Nr   r   z.__pyx_temp_pointer_%d += __pyx_temp_stride_%d;r+  )r.   r'  rj   r,   r,  )r   r.   r   s      r/   r-  zStridedSliceIter.end_loops  sm    yty1}b"-- 	 	AJJG1a&PQQQJJsOOOOr1   Nr.  r   r1   r/   r  r    s2        9 9 9.    r1   r  c                 N    | j         rd}nd}d|                                 d|S )Nr$   r#   __pyx_memoryview_copy_slice_r&   )rY   specialization_suffix)memviewc_or_fs     r/   copy_c_or_fortran_cnamer8    s?      ))++++VV5 5r1   c                    |j         |j         k    r3|j         j        r|j         j        |j         k    st          | d           d S t	          |j                  t	          |j                  k    rt          | d           d S |j        s|j        st          | d           d S |j        D ]\  }}|dk    rt          | d            d S |j        r
d}t          }n|j        sJ d}t          }t          dt          t          ||j                                         ||j        t          |          t!          |j         j                  	          t$          g
          S )Nzdtypes must be the same!z!number of dimensions must be samez%to_memview must be c or f contiguous.r   z2cannot handle 'full' or 'ptr' access at this time.r$   fortranCopyContentsUtility)mode
dtype_declcontig_flagrj   
func_cnamedtype_is_objectr   r  )rc   is_cv_qualifiedcv_base_typer   r   ra   rY   rZ   rR   rS   r  r   r   r   rj   r8  r   r~   copy_contents_new_utility)r   from_memview
to_memviewr[   r\   r<  r>  s          r/   get_copy_new_utilityrG    s   j...#3 	/8D8J8W[e[k8k8kc-...
<Z_!5!555c6777" j&< c:;;;).  X#KLLLFF   +*%%%%*!!'>>@@#.z::
 0 <==? ? ? ,,
. 
. 
. 
.r1   c                    |                                  j        j        }|                                 |j        t          fddD                       }t          fddD                       }d\  }}d\  }}|d}
}	g }t          |          D ]\  }}|j        j        st          |j        j
        t                    |j        j        st          |j        j
        t                    |j        j        r|                    ||f           t!          |j        t"                    rU|j                            |           dk    rt          |j        j
        t&                    |                    |	d	f           t!          |j        t(          t*          f          rit-          | |j                  }|j        t0          v r'|                    t0          |j                            Zt          |j        j
        t2                    t          |j        j
        t2                    d
}d}t          |          D ]:\  }\  }}|d	k    r,|rt          |j        j
        t4                    |}|df||<   d};|r)|t7          |          dz
  k    rd}n2d}|r.||dz
           d
         dvrt          ||         j
        d          |r@d}t          t9          |                    D ]!\  }\  }}|dv rt7          |          |z
  dz
  }"|dz   }t7          |          |z
  }t          |||                   D ]Y\  }\  }}|dz   |z   }|dk    rt          ||         j
        d          |dk    rt          ||         j
        d          ||
f||<   Z|r|d         \  }}|df|d<   t;          d |D             |||           |S )z
    get_axes_specs(env, axes) -> list of (access, packing) specs for each axis.
    access is one of 'full', 'ptr' or 'direct'
    packing is one of 'contig', 'strided' or 'follow'
    c                 :    g | ]}                     |          S r   lookupr   name	viewscopes     r/   r   z"get_axes_specs.<locals>.<listcomp>  s7     ; ; ; $**400 ; ; ;r1   )r   r   r   c                 :    g | ]}                     |          S r   rJ  rL  s     r/   r   z"get_axes_specs.<locals>.<listcomp>   s=     A A A %++D11 A A Ar1   r   r   r    FFr_   r    r   cfcontigr   Fr   T)r   r   z>Fortran contiguous specifier must follow an indirect dimensionr   r   r   r   z>Indirect dimension may not follow Fortran contiguous dimensionzDimension may not be contiguousc                 &    g | ]}|j         j        S r   )r   r   r   axiss     r/   r   z"get_axes_specs.<locals>.<listcomp>}  s    999D999r1   )global_scoper   cython_scopeload_cythonscoperN  tupler   r   r   r   r   	START_ERRr   STOP_ERRr   r   r   r   compile_time_valueSTEP_ERRr	   r
   _get_resolved_specrM  view_constant_to_access_packingINVALID_ERRBOTH_CF_ERRr   reversedvalidate_axes_specs)envra   cythonscopeaccess_specspacking_specsrZ   rY   default_accessdefault_packing	cf_access
cf_packing
axes_specsr   rV  r   
contig_dim	is_contigr[   r\   r   r   ar"   rN  s                          @r/   get_axes_specsrq    sz    ""$$,9K  """%I ; ; ; ; 9; ; ; < <L A A A A ?A A A B BM  ,K&9#NO*HzIJt__ ; ;	Tz! 	;tz~	:::y  	8ty}h7779 	;~?@@@@	7++ 	; y++C00A55"49=(;;;y*56666	Hm#<== 	;&sDI66Ez<<<!!"A%*"MNNNN"49=+>>> ty}k::: JI"+J"7"7  fgj   ?"49=+>>>J%x0JsOI *)TQ&&KKK e*Z!^"<Q"??"R"R"4
#3#7#ce e e  	5J*3HZ4H4H*I*I 5 5&&fg_,,!$TS1!4J Q4yy;&&/
5:0F&G&G 		3 		3"C"&'q.3&C!!"49=$BC C C ("""49=#DF F F%z2JsOO 	) b>DAq[JrN99D999"##% % %
 r1   c                 d    t          |          t          j        k    rt          | d           dS dS )NzGMore dimensions than the maximum number of buffer dimensions were used.FT)r   r   buffer_max_dimsr   )r   ra   s     r/   validate_axesrt    s9    
4yyG+++c 6 	7 	7 	7u4r1   c                 0   dx}}t          |           dk    r
| dgk    rd}nr| d         dk    r$t          d | d d         D                       rd}nBt          |           dk    r/| d         dk    r#t          d | dd          D                       rd}||fS )	NFr   r  Tr   c              3   "   K   | ]
}|d k    V  dS )r   r    Nr   rU  s     r/   r   zis_cf_contig.<locals>.<genexpr>  s(      CC++CCCCCCr1   r   c              3   "   K   | ]
}|d k    V  dS rw  r   rU  s     r/   r   zis_cf_contig.<locals>.<genexpr>  s(      BB++BBBBBBr1   )r   r   )rX   rY   rZ   s      r/   rQ   rQ     s     %%K+
5zzQ5%9$:::
)*
*
*CCcrc
CCCCC + 
e**q..!H+++BBabb	BBBBB , ##r1   c                 X    t          |           \  }}|rdS |rdS | D ]\  }}|dv r dS dS )Nr$   r:  rS  r   r   )rQ   rW   s        r/   get_moderz    s_    +E22K s	 y   _$$66 % 9r1   )r   r   r_   )r   r   )r   r   r  )r   r   )r   r   r   r   r   r   c                 T   d}d}dx}x}x}}	d}
t          |          D ]\  }\  }}|dk    r|}
t          t          | |                    D ]\  }\  }\  }}||v r||v st          |d          |dk    rd}n|d	k    rw|rt          |d
          |
dz   t          |          dz
  f}||vrC|dk    r=|
dz   t          |          dz
  k    rd|z  }nd|d         z  }t          |d|z            |dk    }n,|dk    r&|rt          |d          |s|st          |d          |dv rd}d S )NrP  )r   r   r   Fr   r   zInvalid axes specification.r   Tr   z1Only one direct contiguous axis may be specified.r   zdimensions %d and %dzdimension %dr   z$Only %s may be contiguous and directr    zAA memoryview cannot have both follow and strided axis specifiers.z$Invalid use of the follow specifier.rS  )r   rT   r   r   )	positionsrX   rY   rZ   rh  rg  
has_contig
has_followhas_stridedhas_generic_contiglast_indirect_dimensionr   r[   r\   r   valid_contig_dimsdimss                    r/   rd  rd    s   3M,L BGFJFFk,> "+E"2"2 * *fgU??&)#)23y%3H3H)I)I    %%c$FG,&&=((s$ABBBiKK   B"3 )A B B B !8! ;SZZ!^ K+++%*Q.#e**q.@@14EEDD),=a,@@D"3(NQU(UVVV5JJ   m"3(klll P; P"3(NOOO_$$K=   r1   c                     t          |t                    rt          | |          S t          |t                    rt	          | |          S t          |j        t                    rh   )r   r	   _resolve_NameNoder
   _resolve_AttributeNoder   r   ra  )re  specs     r/   r_  r_    sX    $!! 2 d+++	D-	(	( 2%c400048[111r1   c                 @   	 |                      |j                  j        }n(# t          $ r t          |j        t
                    w xY w|                                 j        j        j	        }|                     |          }|t          |j        t                    |S rh   )rK  rM  AttributeErrorr   r   ra  rW  r   rX  rN  NOT_CIMPORTED_ERR)re  noderesolved_namerN  r   s        r/   r  r    s    2

49--2 2 2 248[1112   ""*7AI]++E}48%6777Ls	   " %Ac                 R   g }t          |t                    r7|                    d|j                   |j        }t          |t                    7t          |t
                    r|                    d|j                   nt          |j        t                    |d d         }|sJ | }|D ]?}|
                    |          }|r|j        st          |j        d|z            |j        }@|
                    |d                   }|st          |j        d|d         z            |S )Nr   r   zundeclared name not builtin: %szNo such attribute '%s')r   r
   insert	attributeobjr	   rM  r   r   EXPR_ERRrK  	as_module)re  r  pathmodnamesrw   modnamemodr   s           r/   r  r    sA   D
T=
)
) At~&&&x T=
)
)  $!! /Aty!!!!48X...CRCyHOOOE  ll7## 	K#- 	KH?'IK K KLLb""E J48%=R%HIIILr1   Nc                 ,    t          j        | dfd|i|S )NzMemoryView.pyxr   )r   loadutil_code_namer   kwargss      r/   load_memview_cy_utilityr    s1    !.2B = =*1=5;= = =r1   c                 V    |t          j        | dfi |S t          j        | dfd|i|S )Nr   r   )r   r  r   r  s      r/   r  r     sX    0@KKFKKK!&~7G B B/6B:@B B 	Br1   c                     |                                  j        j        }|                                 d|j                            d          _        d S )NTarray_cwrapper)rW  r   rX  rY  rN  rK  used)re  rX  s     r/   use_cython_array_utility_coder  '  sK    ##%%-:L!!###;?L!!"233888r1   rp   )memview_struct_namemax_dimsmemviewslice_namememslice_initTHREAD_LOCKS_PREALLOCATEDMemviewSliceStructrA  AtomicsMemviewSliceInit)BUF_MAX_NDIMSMemviewSliceIndexBufferFormatFromTypeInfor  MemviewSliceIsContigOverlappingSlicesMemviewSliceCopyTemplatezView.MemoryView)arrayr'   r  r   r   r   r   r   )FTrQ  )r   )Frh   )d
__future__r   Errorsr   r    r   r   r	   r
   r   Coder   r   r   r   r   r   r[  r\  r^  rb  ra  r  r  CF_ERRERR_UNINITIALIZEDformat_flagrR   rS   memview_any_contiguousrU   rV   MEMVIEW_DIRECTMEMVIEW_PTRMEMVIEW_FULLMEMVIEW_CONTIGMEMVIEW_STRIDEDMEMVIEW_FOLLOW_spec_to_const_spec_to_abbrevmemslice_entry_initmemview_namememview_typeptr_cnamememview_objstruct_cnamememviewslice_cnamer0   rI   rA   r]   rf   rm   ry   BufferEntryr   r   r  r   r  r  r  objectr  r  r  r8  rG  rq  rt  rQ   rz  r`  rd  r_  r  r  r  r  r  rs  rb   default_valuer   memviewslice_declare_codeatomic_utilityr   memviewslice_init_coder   _typeinfo_to_format_codetypeinfo_to_format_coder  overlapping_utilityrD  GetAndReleaseBufferUtilityCodebuffer_struct_declare_codebuffer_formats_declare_codeview_utility_codeview_utility_allowlistr  r   r   r1   r/   <module>r     s   & & & & & & ' ' ' ' ' ' ' '       7 7 7 7 7 7 7 7 7 7       1 1 1 1 1 1 1 1 * * * * * *                  &	@;N+A J	GC  < < @ % + '$%'(' "!"!
 
   6 / 0 * 0 0 0 BF, , , ,, AF4 4 4 4$& & & F F F+ + +   Bc? c? c? c? c?!3 c? c? c?L5 5 5( ( (@   E E E
  F F F F           i   2    y   B5 5 5#. #. #.Lo o od  $ $ $(   211000# # ,  ,  , \2 2 2    >= = = =B B B B@ @ @ 3'+3A!"  32   
 ('	7;;//D(?@@@'    434GHH 11"f.M-NP P P  +*+A7KK ,,-@'JJ 22    ,+7&79934(#%+   1   " ) )*; < < <  " ) )*; < < < < <r1   