
    -Ph                     N   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	 d dl
mZ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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.	 djd0Z/	 dkd1Z0d2 Z1d3 Z2d4 Z3dld6Z4 G d7 d8ej5                  Z6d9 Z7d: Z8d; Z9d< Z:d= Z;dmd>Z< G d? d@          Z= G dA dBe=          Z> G dC dDe=          Z?dE Z@dF ZAdG ZBdH ZCdI ZDdJ ZEdKdLdMdNdOdPdQZFdR ZGdS ZHdT ZIdU ZJdndWZKdndXZLdY ZMe,ejN        e-ejO        jP        dZd[ZQd\ ZR eLd]eQ          ZSd^ ZT eLd_          ZUd` ZVda ZW eLdbeQ          ZX eLdceQ          ZYdd ZZe	j[        de             Z\e	j[        df             Z]dg Z^dh Z_diZ`dVS )o   )CompileErrorerror)	ExprNodes)IntNodeNameNodeAttributeNode)Options   )Utils)UtilityCodeTempitaUtilityCode)CythonUtilityCodeCythonSharedUtilityCode)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     Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/Cython/Compiler/MemoryView.pyput_init_entryr1   B   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/   r8   r9   
pretty_rhsrhstmps	            r0   put_acquire_memoryviewslicerJ   K   s     8&&&&##%%8J C--h5-II

x)@)@)@)@ABBB y#vx(0CSU U U U  ,##F+++++, ,r2   c                     | |k    r|                     d           d S |s|                    | ||           |                                s|                    |           |                     | d|d           d S )Nz&/* memoryview self assignment no-op */r8   r6   r7   )r-   put_xdecrefr<   make_owned_memoryviewslice)rD   rG   	rhs_cnamememviewslicetyper/   r8   r9   s          r0   rB   rB   `   s    I 	

;<<< ,$4"* 	 	, 	, 	,  -&&t,,,JJYYY			233333r2   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        r0   get_buf_flagsr^   r   s\    +E22K $##	 $##5kOFG5F??""%%r2   c                 v    dg|z  }|                     | j                   t          j        | j        |          S )Nr   r    )extendaxesr   MemoryViewSliceTypedtype)memoryviewtypenrb   s      r0   insert_newaxesrg      s:    !"Q&DKK#$$$).*>EEEr2   c                     t          | j        |j        z
            }| j        |j        k     rt          | |          |fS | t          ||          fS N)absndimrg   )srcdstrf   s      r0   broadcast_typesrn      sQ    CHsx  A
x#(c1%%s**N3****r2       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_dtyper:   is_erroris_array	base_type
is_numericis_pyobjectis_fused
is_typedeftypedef_base_type)rd   imembers      r0   r{   r{      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
r2   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)	entryr:   cnamebuf_ptrrd   r   CPtrTypebuf_ptr_typeinit_attributes)selfr   rd   s      r0   __init__z#MemoryViewSliceBufferEntry.__init__   s`    
J	[
 4:-
%&/66r2   c                 ,    |                      d          S )N%s.suboffsets[%d]_for_all_ndimr   s    r0   get_buf_suboffsetvarsz0MemoryViewSliceBufferEntry.get_buf_suboffsetvars   s    !!"5666r2   c                 ,    |                      d          S )N%s.strides[%d]r   r   s    r0   get_buf_stridevarsz-MemoryViewSliceBufferEntry.get_buf_stridevars   s    !!"2333r2   c                 ,    |                      d          S )N%s.shape[%d]r   r   s    r0   get_buf_shapevarsz,MemoryViewSliceBufferEntry.get_buf_shapevars   s    !!.111r2   c                 z    fdt          | j        j                  D             }|                     ||          S )Nc                 4    g | ]\  }\  }}||         ||fS  r   ).0dimr\   r]   index_cnamess       r0   
<listcomp>zJMemoryViewSliceBufferEntry.generate_buffer_lookup_code.<locals>.<listcomp>   sF     M M M..fg l3'9 M M Mr2   )	enumerater:   rb   _generate_buffer_lookup_code)r   r/   r   rb   s     ` r0   generate_buffer_lookup_codez6MemoryViewSliceBufferEntry.generate_buffer_lookup_code   sT    M M M M2;DIN2K2KM M M00t<<<r2   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   r:   rd   empty_declaration_coder   get_memoryview_flagglobalstateuse_utility_codememviewslice_index_helpers)r   r/   rb   cast_resultbufp	type_declr   indexr\   r]   shapestride	suboffsetflags                 r0   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r2   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;rL   c              3   (   K   | ]\  }}|d k    V  dS )r   Nr   )r   r\   r]   s      r0   	<genexpr>zHMemoryViewSliceBufferEntry.generate_buffer_slice_code.<locals>.<genexpr>  s+      #]#]?67Fh$6#]#]#]#]#]#]r2   c                      sSj                             t          j        d          }                     d| z                                 |            d         S )NFr4   z%s = -1;ro   )r?   r@   r   
c_int_typer-   append)suboffset_dimr/   suboffset_dim_temps    r0   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((r2   ro   ))r   r   )stridesro   )
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allr:   rb   is_noneis_slicedictsplitgetattrr>   r   posr   intr   load_as_stringputr?   rC   )r   r/   indicesrm   dst_typer8   have_slices
directivesrl   all_dimensions_directr   r   new_ndimr   attribvaluer\   r]   r"   r&   idxhave_idx	util_namer   r   r'   implr   s    `                         @r0   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(=>>>>>	? 	?r2   N)T)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r2   r0   r   r      s         	 	 	7 7 74 4 42 2 2= = =
, , , ,\W? W? W? W? W?r2   r   c                 Z    t          j        |           }t          j        | |||          S )N)startstopstep)r   NoneNode	SliceNode)r   nones     r0   empty_slicer   W  s5    c""Ds$$(t5 5 5 5r2   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     r0   r   zunellipsify.<locals>.<listcomp>b  s    AAA7AwAAAr2   Tr   r   )
len
isinstancer   EllipsisNoder   r   r   ra   r   r   )r   rk   r>   seen_ellipsisr   newaxes	n_indicesr   
full_slicenslicesresult_lengths              r0   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>???''r2   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     r0   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|r2   c                     | dv sJ d| |fz  S )NCFz!__pyx_memviewslice_is_contig_%s%dr   )contig_typerk   s     r0   get_is_contig_func_namer    s#    *$$$$.+t1DDDr2   c                 p    | dv sJ t          t          ||           }t          d|t          g          }|S )Nr  )rk   r  MemviewSliceCheckContigrequires)r   template_contextload_memview_c_utilityis_contig_utility)r  rk   r  utilitys       r0   get_is_contig_utilityr    sF    *$$$$DkBBBA$%>M^L_```GNr2   c                 j    | j         s| j        r|st          | |||          S t          | |||          S ri   )rZ   r[   ContigSliceIterStridedSliceIter)
slice_typeslice_resultrk   r/   force_strideds        r0   
slice_iterr     sI     F*"8 F- Fz<tDDD
L$EEEr2   c                       e Zd Zd ZdS )	SliceIterc                 >    || _         || _        || _        || _        d S ri   )r  r  r/   rk   )r   r  r  rk   r/   s        r0   r   zSliceIter.__init__  s#    $(				r2   N)r   r   r   r   r   r2   r0   r"  r"    s#            r2   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     r0   r   z.ContigSliceIter.start_loops.<locals>.<genexpr>  sD        ;  ;$% !/$2CQ1G G  ;  ;  ;  ;  ;  ;r2   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  rd   r   joinrangerk   r-   r  )r   r/   r   
total_sizes   `   r0   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

 . 	/ 	/ 	/ $#r2   c                     | j                             d           | j                             d           | j                                          d S )Nz__pyx_temp_pointer += 1;})r/   r-   	end_blockr   s    r0   	end_loopszContigSliceIter.end_loops  sE    	2333		r2   Nr   r   r   r,  r0  r   r2   r0   r  r    s2        $ $ $$    r2   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;ro   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*  rk   r  r-   )r   r/   r   ts       r0   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8r2   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*  rk   r-   r/  )r   r/   r   s      r0   r0  zStridedSliceIter.end_loops  sm    yty1}b"-- 	 	AJJG1a&PQQQJJsOOOOr2   Nr1  r   r2   r0   r  r    s2        9 9 9.    r2   r  c                 N    | j         rd}nd}d|                                 d|S )Nr%   r$   __pyx_memoryview_copy_slice_r'   )rZ   specialization_suffix)memviewc_or_fs     r0   copy_c_or_fortran_cnamer;    s?      ))++++VV5 5r2   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                      }t          dt          t          ||j                                         ||j        t!          |          t#          |j         j                  	          |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_flagrk   
func_cnamedtype_is_objectr   r  )rd   is_cv_qualifiedcv_base_typer   r   rb   rZ   r[   rS   rT   _get_copy_contents_new_utilityr  r   r  r   rk   r;  r   r   )r   from_memview
to_memviewr\   r]   r?  rA  copy_contents_new_utilitys           r0   get_copy_new_utilityrK    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 <==? ? ? ,,
. 
. 
. 
.r2   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        t.          v r'|                    t.          |j                            Zt          |j        j	        t0                    t          |j        j	        t0                    d
}d}t          |          D ]:\  }\  }}|d	k    r,|rt          |j        j	        t2                    |}|df||<   d};|r)|t5          |          dz
  k    rd}n2d}|r.||dz
           d
         dvrt          ||         j	        d          |r@d}t          t7          |                    D ]!\  }\  }}|dv rt5          |          |z
  dz
  }"|dz   }t5          |          |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<   t9          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     r0   r   z"get_axes_specs.<locals>.<listcomp>  s7     ; ; ; $**400 ; ; ;r2   )r   r   r   c                 :    g | ]}                     |          S r   rN  rP  s     r0   r   z"get_axes_specs.<locals>.<listcomp>!  s=     A A A %++D11 A A Ar2   r   r    r!   FFr`   r!   r   cfcontigro   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     r0   r   z"get_axes_specs.<locals>.<listcomp>~  s    999D999r2   )r   cython_scopeload_cythonscoperR  tupler   r   r   r   r   	START_ERRr   STOP_ERRr   r   r   r   compile_time_valueSTEP_ERRr   r   _get_resolved_specrQ  view_constant_to_access_packingINVALID_ERRBOTH_CF_ERRr   reversedvalidate_axes_specs)envrb   cythonscopeaccess_specspacking_specsr[   rZ   default_accessdefault_packing	cf_access
cf_packing
axes_specsr   rZ  r   
contig_dim	is_contigr\   r]   r   r   ar#   rR  s                          @r0   get_axes_specsrt    sm    +*K  """%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"##% % %
 r2   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   rb   s     r0   validate_axesrw    s9    
4yyG+++c 6 	7 	7 	7u4r2   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   rY  s     r0   r   zis_cf_contig.<locals>.<genexpr>  s(      CC++CCCCCCr2   ro   c              3   "   K   | ]
}|d k    V  dS rz  r   rY  s     r0   r   zis_cf_contig.<locals>.<genexpr>  s(      BB++BBBBBBr2   )r   r   )rY   rZ   r[   s      r0   rR   rR     s     %%K+
5zzQ5%9$:::
)*
*
*CCcrc
CCCCC + 
e**q..!H+++BBabb	BBBBB , ##r2   c                 X    t          |           \  }}|rdS |rdS | D ]\  }}|dv r dS dS )Nr%   r=  rW  r   r    )rR   rX   s        r0   get_moder}    s_    +E22K s	 y   _$$66 % 9r2   )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 )NrT  )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 %dro   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.rW  )r   rU   r   r   )	positionsrY   rZ   r[   rk  rj  
has_contig
has_followhas_stridedhas_generic_contiglast_indirect_dimensionr   r\   r]   r   valid_contig_dimsdimss                    r0   rg  rg    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=   r2   c                     t          |t                    rt          | |          S t          |t                    rt	          | |          S t          |j        t                    ri   )r   r   _resolve_NameNoder   _resolve_AttributeNoder   r   rd  )rh  specs     r0   rb  rb    sX    $!! 2 d+++	D-	(	( 2%c400048[111r2   c                    	 |                      |j                  j        }n(# t          $ r t          |j        t
                    w xY w| j        j        j        }|                     |          }|t          |j        t                    |S ri   )
rO  rQ  AttributeErrorr   r   rd  r   r[  rR  NOT_CIMPORTED_ERR)rh  noderesolved_namerR  r   s        r0   r  r    s    2

49--2 2 2 248[1112 (2I]++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 )Nro   r   zundeclared name not builtin: %szNo such attribute '%s')r   r   insert	attributeobjr   rQ  r   r   EXPR_ERRrO  	as_module)rh  r  pathmodnamesry   modnamemodr   s           r0   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Lr2   Nc                 ,    t          j        | dfd|i|S )NzMemoryView.pyxr   )r   loadutil_code_namer   kwargss      r0   load_memview_cy_utilityr    s1    !.2B = =*1=5;= = =r2   c                 V    |t          j        | dfi |S t          j        | dfd|i|S )Nr   r   )r   r  r   r  s      r0   r  r  !  sX    0@KKFKKK!&~7G B B/6B:@B B 	Br2   c                     | j         j        rd S | j         j        }|                                 d|j                            d          _        d S )NTarray_cwrapper)r   shared_utility_qualified_namer[  r\  rR  rO  used)rh  r[  s     r0   use_cython_array_utility_coder  (  sP    
{0 ;+L!!###;?L!!"233888r2   rr   )memview_struct_namemax_dimsmemviewslice_namememslice_initTHREAD_LOCKS_PREALLOCATEDc                  4    t          dt          g           } | S )NMemviewSliceStructrD  r  r  )memviewslice_declare_codes    r0   _get_memviewslice_declare_coder  7  s(     6 $! ! ! %$r2   Atomicsc                 t    t          dt          t          t          j                  | t
          g          }|S )NMemviewSliceInit)BUF_MAX_NDIMSrD  )r  r   r  r	   rv  atomic_utility)r  memviewslice_init_codes     r0   _get_memviewslice_init_coder  @  sA    3%W5LMMM+    "!r2   MemviewSliceIndexc                  :    t          dt          j        g          S )NBufferFormatFromTypeInfor  )r  r   _typeinfo_to_format_coder   r2   r0   _get_typeinfo_to_format_coder  K  s(    ""f.M-NP P P Pr2   c                 R    | rt          d| t          g           S t                      S )NzBufferFormatFromTypeInfo.pxdr  r  )r   r  r  r  s    r0   get_typeinfo_to_format_coder  O  s;    $ .&*)-	   	 ,---r2   MemviewSliceIsContigOverlappingSlicesc                  4    t          dt          g           } | S )NMemviewSliceCopyTemplater  r  )rJ  s    r0   rG  rG  \  s(     6"! ! !
 %$r2   c            
      >   t                      } t          |           }t                      }t          dt          t
          j        t
          j        |t          t          |g          }| j
                            |           |j
                            |           ||fS )NzView.MemoryViewrD  )r  r  rG  r  r  r   buffer_struct_declare_codebuffer_formats_declare_coder  overlapping_utilityr  r   )r  r  rJ  memoryview_utility_codes       r0   _get_memoryview_utility_coder  d  s     > @ @89RSS > @ @5$56*%'-   &--.EFFF&--.EFFF"$:::r2   c                 &   t                      }t          |          }t                      }t          d| t          t
          j        t
          j        |g          }|j        	                    |           |j        	                    |           ||fS )NzMemoryView.pxdr  )
r  r  rG  r   r  r   r  r  r  r   )r  r  r  rJ  shared_utility_codes        r0   #_get_memoryview_shared_utility_coder  y  s     > @ @89RSS > @ @1%)12&		 	 	 &--.ABBB&--.ABBB!788r2   c                 X    | rt          |           d         S t                      d         S )Nro   r  r  r  s    r0   get_view_utility_coder    0    $ 123PQQRSTT+--a00r2   c                 X    | rt          |           d         S t                      d         S )Nr   r  r  s    r0   get_memviewslice_init_coder    r  r2   )arrayr(   r  r   r    r   r   r   )FTrU  )ro   )Fri   )aErrorsr   r    r   r   r   r   r	   r   Coder   r   r   r   r   r   r   r^  r_  ra  re  rd  r  r  CF_ERRERR_UNINITIALIZEDformat_flagrS   rT   memview_any_contiguousrV   rW   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_cnamer1   rJ   rB   r^   rg   rn   r{   BufferEntryr   r   r  r   r  r  r   r"  r  r  r;  rK  rt  rw  rR   r}  rc  rg  rb  r  r  r  r  r  rv  rc   default_valuer  r  r  r  r   r  r  r  r  rG  cached_functionr  r  r  r  view_utility_allowlistr   r2   r0   <module>r     s~   ' ' ' ' ' ' ' '       7 7 7 7 7 7 7 7 7 7             1 1 1 1 1 1 1 1 C C C C C C C C                  &	@;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%. %. %.Po o od  $ $ $(   211000# # ,  ,  , \2 2 2    >= = = =B B B B@ @ @ 3'+3A!"  % % % ('	3CDD" " " 434GHH P P P. . . +*+ACSTT ,,-@BRSS % % % ; ; ;( 9 9 9$1 1 11 1 11   r2   