U
    {hZ                     @   s  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-d. Z.dd1d2Z/dd3d4Z0d5d6 Z1d7d8 Z2d9d: Z3dd<d=Z4G d>d? d?ej5Z6d@dA Z7dBdC Z8dDdE Z9dFdG Z:dHdI Z;ddJdKZ<G dLdM dMZ=G dNdO dOe=Z>G dPdQ dQe=Z?dRdS Z@dTdU ZAdVdW ZBdXdY ZCdZd[ ZDd\d] ZEd^d_d`dadbdcddZFdedf ZGdgdh ZHdidj ZIdkdl ZJddndoZKddmdqdrdsZLdtdu ZMe,ejNe-ejOjPdvdwZQdxdy ZReLdzd{eQd|ZSd}d~ ZTeLdZUdd ZVdd ZWeLdeQdqZXeLdeQdqZYdd ZZe	j[dd Z\e	j[dd Z]dd Z^dd Z_dZ`dmS )   )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)ZPyBUF_FORMATz#(PyBUF_C_CONTIGUOUS | PyBUF_FORMAT)z#(PyBUF_F_CONTIGUOUS | PyBUF_FORMAT)z%(PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT)ZPyBUF_FULL_ROZPyBUF_RECORDS_ROZ__Pyx_MEMVIEW_DIRECTZ__Pyx_MEMVIEW_PTRZ__Pyx_MEMVIEW_FULLZ__Pyx_MEMVIEW_CONTIGZ__Pyx_MEMVIEW_STRIDEDZ__Pyx_MEMVIEW_FOLLOW)directptrfullcontigstridedfollowdpfcs_z{ 0, 0, { 0 }, { 0 }, { 0 } }
memoryviewZ__pyx_memoryview_typeZ__pyx_memoryview_objZ__Pyx_memviewslicec                 C   s    | d|   | d|   d S )Nz%s.data = NULL;z%s.memview = NULL;)putln)Zmv_cnamecode r!   >/tmp/pip-unpacked-wheel-fhl22ezh/Cython/Compiler/MemoryView.pyput_init_entryB   s    r#   FTc           	   	   C   s|   |j jst| p| }|r*| }n(|jj|dd}|d||	|f  t
| ||||||d |sx|j| dS )zEWe can avoid decreffing the lhs if we know it is the first assignmentFZ
manage_ref%s = %s;)have_gilfirst_assignmentN)typeZis_memoryviewsliceAssertionErrorresult_in_tempZ	is_simpleresult	funcstateallocate_tempr   Z	result_asput_assign_to_memviewslicerelease_temp)		lhs_cnameZlhs_typeZlhs_posrhsr    r&   r'   Z
pretty_rhsZrhstmpr!   r!   r"   put_acquire_memoryviewsliceK   s    
 r2   c                 C   sR   | |kr| d d S |s*|j| ||d | s<|| | d| |f  d S )Nz&/* memoryview self assignment no-op */r&   r%   )r   Zput_xdecrefr*   Zmake_owned_memoryviewslice)r0   r1   Z	rhs_cnameZmemviewslicetyper    r&   r'   r!   r!   r"   r.   `   s    

r.   c                 C   sD   t | \}}|rtS |rtS t|  \}}d|ks8d|kr<tS tS d 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packingr!   r!   r"   get_buf_flagsr   s    r@   c                 C   s$   dg| }| | j t| j|S )Nr   r   )extendaxesr   MemoryViewSliceTypedtype)ZmemoryviewtypenrC   r!   r!   r"   insert_newaxes   s    
rG   c                 C   s<   t | j|j }| j|jk r*t| ||fS | t||fS d S N)absndimrG   )srcdstrF   r!   r!   r"   broadcast_types   s    rM       c                 C   s   | j r| jjrdS | tjkr dS | jrR| jdkrR| jjD ]}t	|j
s8 dS q8dS | jp| jrv|dk rvt	| j|d p| jp| jp| jp| jot	| 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   )Z
is_complexZ	real_typeZis_intr   Zc_bint_typeZ	is_structkindscopeZvar_entriesvalid_memslice_dtyper(   Zis_errorZis_arrayZ	base_typeZ
is_numericis_pyobjectZis_fusedZ
is_typedefZtypedef_base_type)rE   imemberr!   r!   r"   rS      s*    

rS   c                   @   sJ   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdddZ	d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                 C   sD   || _ |j| _|j| _d| j | _| j jj}t|| _|   d S )Nz%s.data)	entryr(   cnamebuf_ptrrE   r   ZCPtrTypeZbuf_ptr_typeZinit_attributes)selfrX   rE   r!   r!   r"   __init__   s    
z#MemoryViewSliceBufferEntry.__init__c                 C   s
   |  dS )N%s.suboffsets[%d]Z_for_all_ndimr[   r!   r!   r"   get_buf_suboffsetvars   s    z0MemoryViewSliceBufferEntry.get_buf_suboffsetvarsc                 C   s
   |  dS )N%s.strides[%d]r^   r_   r!   r!   r"   get_buf_stridevars   s    z-MemoryViewSliceBufferEntry.get_buf_stridevarsc                 C   s
   |  dS )N%s.shape[%d]r^   r_   r!   r!   r"   get_buf_shapevars   s    z,MemoryViewSliceBufferEntry.get_buf_shapevarsc                    s&    fddt | jjD }| ||S )Nc                    s$   g | ]\}\}}| | ||fqS r!   r!   ).0dimr>   r?   index_cnamesr!   r"   
<listcomp>   s   
zJMemoryViewSliceBufferEntry.generate_buffer_lookup_code.<locals>.<listcomp>)	enumerater(   rC   _generate_buffer_lookup_code)r[   r    rh   rC   r!   rg   r"   generate_buffer_lookup_code   s    

z6MemoryViewSliceBufferEntry.generate_buffer_lookup_codeTc                 C   s  | j }| jj }|D ]\}}}}	d| j|f }
d| j|f }d| j|f }t||	}|dkr||jt d||||f }nr|dkrd|||f }d||f }nN|d	krd
|||f }n6|dkrd|||f }n|dkst	|d|||f }d||f }q|rd||f S |S )zl
        Generate a single expression that indexes the memory view slice
        in each dimension.
        rc   ra   r]   )genericgeneric_contiguousz-__pyx_memviewslice_index_full(%s, %s, %s, %s)indirectz(%s + %s * %s)z(*((char **) %s) + %s)indirect_contiguousz(*((char **) %s + %s) + %s)r   
contiguousz((char *) (((%s *) %s) + %s))z( /* dim=%d */ %s )z((%s *) %s))
rZ   r(   rE   empty_declaration_coderY   get_memoryview_flagZglobalstateZuse_utility_codememviewslice_index_helpersr)   )r[   r    rC   Zcast_resultZbufp	type_declrf   indexr>   r?   shapeZstrideZ	suboffsetflagr!   r!   r"   rk      s2    

z7MemoryViewSliceBufferEntry._generate_buffer_lookup_codec              	      s
  | j } dt    dt    j|||d tdd | jjD }	g  fdd}
d}d	}|D ]}|jrd
D ]\}} d||||f  qz|d7 }qj|d7 }| jj| \}}|jrZt	t }d
 D ]8}t||}|j  }|d| < |r| nd||< q|d s<|d s<|d s<||d< d}nd} |j|d< |d7 }nv| }|dk}|r|dk}|d	krt|jd  S t	t t|d t|d d}|d r̈ |j|d< d}tj|d|d\}} | qjr jd	  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;r3   c                 s   s   | ]\}}|d kV  qdS )r   Nr!   )re   r>   r?   r!   r!   r"   	<genexpr>  s     zHMemoryViewSliceBufferEntry.generate_buffer_slice_code.<locals>.<genexpr>c                     s6   s. j jtjdd}  d|   |  d S )NFr$   z%s = -1;rN   )r,   r-   r   Z
c_int_typer   append)Zsuboffset_dimr    Zsuboffset_dim_tempr!   r"   get_suboffset_dim  s
    
zPMemoryViewSliceBufferEntry.generate_buffer_slice_code.<locals>.get_suboffset_dimrN   ))rw   r   )stridesrN   )
suboffsetsr}   z%s.%s[%d] = %d;r   zstart stop stepZhave_0Z
have_startZ	have_stopZ	have_stepr>   ZSimpleSliceZ
ToughSlice
error_gotor   r   z7All preceding dimensions must be indexed and not sliced
wraparoundboundscheck)r   r   Z
SliceIndexMemoryView_C.ccontextN)rY   r   localsZput_incref_memoryviewsliceallr(   rC   is_noneis_slicedictsplitgetattrr+   r   posr   intr   Zload_as_stringputr,   r/   )r[   r    indicesrL   Zdst_typer&   have_slicesZ
directivesrK   Zall_dimensions_directr|   rf   Znew_ndimrv   attribvaluer>   r?   r   r   idxZhave_idxZ	util_namero   rm   r   implr!   r{   r"   generate_buffer_slice_code   sb    







z5MemoryViewSliceBufferEntry.generate_buffer_slice_codeN)T)__name__
__module____qualname____doc__r\   r`   rb   rd   rl   rk   r   r!   r!   r!   r"   rW      s   
.rW   c                 C   s   t | }t j| |||dS )N)startstopstep)r   ZNoneNodeZ	SliceNode)r   noner!   r!   r"   empty_sliceW  s
    
 r   c                 C   s   g }d}d}dd | D }t | t | }| D ]j}t|tjr~d}t|j}|r\|| q|| d }	||g|	  d}q.|p|jp|j	}|| q.t |t | }
|
|k rd}||
 }	|t| d jg|	  |||fS )NFc                 S   s   g | ]}|j r|qS r!   )r   )re   Znewaxisr!   r!   r"   ri   b  s      zunellipsify.<locals>.<listcomp>Tr   r}   )
len
isinstancer   ZEllipsisNoder   r   rz   rB   r   r   )r   rJ   r+   Zseen_ellipsisr   ZnewaxesZ	n_indicesrv   Z
full_sliceZnslicesZresult_lengthr!   r!   r"   unellipsify]  s,    
r   c                 C   s   | dkr|dkrdS | dkr(|dkr(dS | dkr<|dkr<dS | dkrP|dkrPdS | d	krd|dkrdd
S | |fdks|t | |fdS d S )Nr   )r   r   rm   r   rn   r   ro   rp   r   r   r   r   rq   r)   )r>   r?   r!   r!   r"   rs   }  s    rs   c                 C   s   | dkst d| |f S )NCFz!__pyx_memviewslice_is_contig_%s%dr   )contig_typerJ   r!   r!   r"   get_is_contig_func_name  s    r   c                 C   s.   | dkst tt|| d}td|tgd}|S )Nr   )rJ   r   ZMemviewSliceCheckContigr   requires)r)   r   template_contextload_memview_c_utilityis_contig_utility)r   rJ   r   Zutilityr!   r!   r"   get_is_contig_utility  s    r   c                 C   s0   | j s| jr|st| |||S t| |||S d S rH   )r<   r=   ContigSliceIterStridedSliceIter)
slice_typeslice_resultrJ   r    Zforce_stridedr!   r!   r"   
slice_iter  s    r   c                   @   s   e Zd Zdd ZdS )	SliceIterc                 C   s   || _ || _|| _|| _d S rH   )r   r   r    rJ   )r[   r   r   rJ   r    r!   r!   r"   r\     s    zSliceIter.__init__N)r   r   r   r\   r!   r!   r!   r"   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                    st    j }|   jj }d fddt jD }|d|  |d |d|| j	f  |d dS )	Nz * c                 3   s   | ]}d  j |f V  qdS )rc   N)r   )re   rU   r_   r!   r"   ry     s   z.ContigSliceIter.start_loops.<locals>.<genexpr>z"Py_ssize_t __pyx_temp_extent = %s;zPy_ssize_t __pyx_temp_idx;z(%s *__pyx_temp_pointer = (%s *) %s.data;zPfor (__pyx_temp_idx = 0; __pyx_temp_idx < __pyx_temp_extent; __pyx_temp_idx++) {Z__pyx_temp_pointer)
r    begin_blockr   rE   rr   joinrangerJ   r   r   )r[   r    ru   Z
total_sizer!   r_   r"   start_loops  s    
  
zContigSliceIter.start_loopsc                 C   s&   | j d | j d | j   d S )Nz__pyx_temp_pointer += 1;})r    r   	end_blockr_   r!   r!   r"   	end_loops  s    zContigSliceIter.end_loopsNr   r   r   r   r   r!   r!   r!   r"   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )r   c                 C   s   | j }|  t| jD ]H}|| j|f}|d|  |d|  |d|  |d|  q|d| j  t| jD ]8}|dkr|d||d f  |d	||||f  q|d
| jd  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;rN   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    rU   tr!   r!   r"   r     s     
zStridedSliceIter.start_loopsc                 C   sF   | j }t| jd ddD ] }|d||f  |d q|  d S )Nr   r}   z.__pyx_temp_pointer_%d += __pyx_temp_stride_%d;r   )r    r   rJ   r   r   )r[   r    rU   r!   r!   r"   r     s
    zStridedSliceIter.end_loopsNr   r!   r!   r!   r"   r     s   r   c                 C   s    | j rd}nd}d|  |f S )Nr   r   z!__pyx_memoryview_copy_slice_%s_%s)r<   Zspecialization_suffix)ZmemviewZc_or_fr!   r!   r"   copy_c_or_fortran_cname  s     r   c                 C   s   |j |j kr0|j jr"|j j|j ks0t| d d S t|jt|jkrRt| d d S |jsl|jslt| d d S |jD ] \}}|dkrrt| d  d S qr|jrd}t}n|jst	d}t
}t }tdtt||j  ||jt|t|j jd	|gd
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   fortranZCopyContentsUtility)modeZ
dtype_declcontig_flagrJ   Z
func_cnameZdtype_is_objectr   )rE   Zis_cv_qualifiedZcv_base_typer   r   rC   r<   r=   r5   r)   r6   _get_copy_contents_new_utilityr   r   r   rr   rJ   r   r   rT   )r   Zfrom_memviewZ
to_memviewr>   r?   r   r   copy_contents_new_utilityr!   r!   r"   get_copy_new_utility  sJ    





r   c                    s  | j j}|  |j t fdddD }t fdddD }d\}}d\}}|d }	}
g }t|D ]\}}|jjst|jj	t
|jjst|jj	t|jjr|||f qht|jtr|j| d	krt|jj	t||	d
f qht|jttfr:t| |j}|jtkr*|t|j  nt|jj	tqht|jj	tqhd}d}t|D ]@\}\}}|d
krZ|rt|jj	t|}|df||< d}qZ|r|t|d	 krd}n0d}|r||d	  d dkrt|| j	d|r*d}tt|D ](\}\}}|dkr t|| d	 }q |d	 }t|| }t||| D ]Z\}\}}|d	 | }|dkrt|| j	d|dkrt|| j	d||
f||< qN|r|d \}}|df|d< td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                    s   g | ]}  |qS r!   lookupre   name	viewscoper!   r"   ri      s   z"get_axes_specs.<locals>.<listcomp>)r   r   r   c                    s   g | ]}  |qS r!   r   r   r   r!   r"   ri   "  s   r   r   r   )FFrA   r   r   ZcfcontigrN   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                 S   s   g | ]}|j jqS r!   )r   r   re   axisr!   r!   r"   ri     s     )r   cython_scopeload_cythonscoper   tuplerj   r   r   r   r   	START_ERRr   STOP_ERRr   rz   r   r   Zcompile_time_valueSTEP_ERRr   r   _get_resolved_specr   view_constant_to_access_packingINVALID_ERRBOTH_CF_ERRr   reversedvalidate_axes_specs)envrC   Zcythonscopeaccess_specspacking_specsr=   r<   Zdefault_accessZdefault_packingZ	cf_accessZ
cf_packingZ
axes_specsr   r   rX   Z
contig_dimZ	is_contigr>   r?   r   r   ar   r!   r   r"   get_axes_specs  s    



	



r   c                 C   s    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   rC   r!   r!   r"   validate_axes  s    
r   c                 C   s   d }}t | dkr$| dgkr$d}nb| d dkrPtdd | d d D rPd}n6t | dkr| d dkrtd	d | dd  D rd}||fS )
NFr   r   Tr}   c                 s   s   | ]}|d kV  qdS )r   r   Nr!   r   r!   r!   r"   ry     s     zis_cf_contig.<locals>.<genexpr>rN   c                 s   s   | ]}|d kV  qdS r   r!   r   r!   r!   r"   ry     s     )r   r   )r;   r<   r=   r!   r!   r"   r4     s    
r4   c                 C   s<   t | \}}|rdS |rdS | D ]\}}|dkr  dS q dS )Nr   r   r   r   r   )r4   r:   r!   r!   r"   get_mode  s    r   )r   r   rA   )r   r   )r   r   r   )r   r   )rm   r   ro   rn   rq   rp   c                 C   sD  d}d}d } } }}	d}
t |D ]\}\}}|dkr$|}
q$t t| |D ]\}\}\}}||krl||ksvt|d|dkrd}n|d	kr|rt|d
|
d t|d f}||kr|dkr|
d t|d krd| }nd|d  }t|d| |dk}n0|dkr2|rt|d|s2|s2t|d|dkrLd}qLd S )Nr   )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 %drN   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.r   )rj   r7   r   r   )Z	positionsr;   r<   r=   r   r   Z
has_contigZ
has_followZhas_stridedZhas_generic_contigZlast_indirect_dimensionr   r>   r?   r   Zvalid_contig_dimsZdimsr!   r!   r"   r     s>    







r   c                 C   s8   t |trt| |S t |tr(t| |S t|jtd S rH   )r   r   _resolve_NameNoder   _resolve_AttributeNoder   r   r   )r   specr!   r!   r"   r     s
    



r   c                 C   s`   z|  |jj}W n  tk
r2   t|jtY nX | jjj}| |}|d kr\t|jt	|S rH   )
r   r   AttributeErrorr   r   r   r   r   r   NOT_CIMPORTED_ERR)r   nodeZresolved_namer   rX   r!   r!   r"   r     s    

r   c                 C   s   g }t |tr$|d|j |j}qt |tr>|d|j nt|jt	|d d }|s^t
| }|D ].}||}|r~|jst|jd| |j}qf||d }|st|jd|d  |S )NrN   r}   zundeclared name not builtin: %szNo such attribute '%s')r   r   insert	attributeobjr   r   r   r   EXPR_ERRr)   r   Z	as_module)r   r   pathmodnamesrR   modnamemodrX   r!   r!   r"   r     s,    



 r   Nc                 K   s   t j| dfd|i|S )NzMemoryView.pyxr   )r   load)util_code_namer   kwargsr!   r!   r"   load_memview_cy_utility  s
    r   r   r   c                K   s4   |d krt j| |f|S tj| |fd|i|S d S )Nr   )r   r   r   )r   util_code_filenamer   r   r!   r!   r"   r   "  s    r   c                 C   s.   | j jrd S | j j}|  d|jd_d S )NTarray_cwrapper)r   shared_utility_qualified_namer   r   r   r   used)r   r   r!   r!   r"   use_cython_array_utility_code,  s
    r   rP   )Zmemview_struct_nameZmax_dimsZmemviewslice_nameZmemslice_initZTHREAD_LOCKS_PREALLOCATEDc                  C   s   t dtg d} | S )NZMemviewSliceStructr   r   r   )memviewslice_declare_coder!   r!   r"   _get_memviewslice_declare_code;  s    r   ZAtomicszSynchronization.c)r   r   c                 C   s    t dtttjd| tgd}|S )NZMemviewSliceInit)ZBUF_MAX_NDIMSr   )r   r   r   r   r   atomic_utility)r   memviewslice_init_coder!   r!   r"   _get_memviewslice_init_codeE  s    r  ZMemviewSliceIndexc                   C   s   t dtjgdS )NZBufferFormatFromTypeInfo)r   )r   r   Z_typeinfo_to_format_coder!   r!   r!   r"   _get_typeinfo_to_format_codeP  s     r  c                 C   s   | rt d| tg dS t S d S )NzBufferFormatFromTypeInfo.pxdr   r   )r   r   r  r   r!   r!   r"   get_typeinfo_to_format_codeT  s    r  ZMemviewSliceIsContigZOverlappingSlicesc                  C   s   t dtg d} | S )NZMemviewSliceCopyTemplater   r   )r   r!   r!   r"   r   a  s    r   c               	   C   sR   t  } t| }t }tdttjtj|tt	|gd}| j
| |j
| ||fS )NzView.MemoryViewr   )r   r  r   r   r   r   buffer_struct_declare_codebuffer_formats_declare_coder   overlapping_utilityr   rz   )r   r  r   Zmemoryview_utility_coder!   r!   r"   _get_memoryview_utility_codei  s"    r
  c                 C   sN   t  }t|}t }td| ttjtj|gd}|j	| |j	| ||fS )NzMemoryView.pxdr  )
r   r  r   r   r   r   r  r  r   rz   )r   r   r  r   Zshared_utility_coder!   r!   r"   #_get_memoryview_shared_utility_code~  s    
r  c                 C   s   | rt | d S t d S d S )NrN   r  r
  r  r!   r!   r"   get_view_utility_code  s    r  c                 C   s   | rt | d S t d S d S )Nr   r  r  r!   r!   r"   get_memviewslice_init_code  s    r  )arrayr   r   rm   r   ro   rq   rp   )FT)FF)rN   )F)N)r   )aZErrorsr   r    r   r   r   r   r   r
   ZCoder   r   r   r   r   r   r   r   r   r   r   r   r   r   ZCF_ERRZERR_UNINITIALIZEDZformat_flagr5   r6   Zmemview_any_contiguousr8   r9   ZMEMVIEW_DIRECTZMEMVIEW_PTRZMEMVIEW_FULLZMEMVIEW_CONTIGZMEMVIEW_STRIDEDZMEMVIEW_FOLLOWZ_spec_to_constZ_spec_to_abbrevZmemslice_entry_initZmemview_nameZmemview_typeptr_cnameZmemview_objstruct_cnameZmemviewslice_cnamer#   r2   r.   r@   rG   rM   rS   ZBufferEntryrW   r   r   rs   r   r   r   r   r   r   r   r   r   r   r4   r   r   r   r   r   r   r   r   r   r   rD   default_valuer   r   r   r  rt   r  r  r   r	  r   Zcached_functionr
  r  r  r  Zview_utility_allowlistr!   r!   r!   r"   <module>   s   
	
   
   

! ' 
!
(r		.	
 
  	


