Server : LiteSpeed
System : Linux server51.dnsbootclub.com 4.18.0-553.62.1.lve.el8.x86_64 #1 SMP Mon Jul 21 17:50:35 UTC 2025 x86_64
User : nandedex ( 1060)
PHP Version : 8.1.33
Disable Function : NONE
Directory :  /opt/cppython/lib/python3.8/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]


Current File : //opt/cppython/lib/python3.8/test/__pycache__/test_buffer.cpython-38.opt-1.pyc
U

>��g'��@sddlZddlZddlmZddlmZmZddlmZm	Z	m
Z
ddlZddlZddl
Z
ddlZddlZddlmZddlmZzddlTWnek
r�dZYnXzddlZWnek
r�dZYnXzddlZWnek
r�dZYnXz:e���(e_e���ddlmZW5QRXW5QRXWnek
�rFdZYnXd	Zdddddddddddddddd
�Ze�r�ed=ed=e�r�z e� d
d�ded<ded
<Wnej!k
�r�YnXddddddddddddddd>dd>fd�Z"dd�Z#eee"e"e"e"d�Z$e�r2e$dD]Z%e#e%�e$de%<�qe�&�Z'e�&�Z(eD]Z)e)d k�rFe(e)=�qFe�&�Z*eD]Z)e)d!k�rje*e)=�qje'e$d"<e'e$d#<e(e$d$<e*e$d%<e*e$d&<dZ+dZ,d'dd(d)d*d+gd'd,d-d.gfd$gd'gfd'gd'gfd#d"gd'gfd&d%gd'gfd/�Z-d0d1�Z.d2d3�Z/d4d5�Z0d6d7�Z1d�d9d:�Z2d�d;d<�Z3d�d=d>�Z4d?d@�Z5dAdB�Z6dCdD�e$dD�Z7dEdF�Z8dGdH�Z9dIdJ�Z:dKdL�Z;dMdN�Z<dOdP�Z=dQdR�Z>dSdT�Z?dUdV�Z@dWdX�ZAdYdZ�ZBd[d\�ZCd]d^�ZDd_d`�ZEdadb�ZFdcdd�ZGdedf�ZHdgdh�ZIdidj�ZJdkdl�ZKdmdn�ZLdodp�ZMd�dtdu�ZNdvdw�ZOdxdy�ZPd�dzd{�ZQd|d}�ZRd�d~d�ZSd�d��ZTd�d�d��ZUd�d��ZVd�d��ZWd�d��ZXd�d�d��ZYd�d�d��ZZd�d�d��Z[d�d�d��Z\d�d��Z]d�Z^dqZ_d�Z`e�r�d�Z^d�Z_d�Z`eZZWe[ZXe\Ze�aed��e�aed��Gd�d��d�ejb���Zcedd�k�re�e�dS)��N)�support)�permutations�product)�	randrange�sample�choice)�Decimal)�Fraction)�*)�ndarrayT)�?�c�b�B�h�H�i�I�l�L�n�N�f�d�Prr�Q������q�r��r�)i�����)i�����)ri)���)rl�l������r���)rr
rrrrrrrrrrrrc	Cs�|dkrd}n�|dkrd}n�|dkr*d}n�|dkrFdd	>dd	>f}nfd
D]:}zt�|d|>d�Wq�WqJtjk
r�YqJXqJ|d@r�d|>d|>fn
dd|>f}|S)zReturn range of a native type.r
r rrrr&rr*r+)
r"��@�?� �����r)�struct�pack�error)�fmt�lh�exp�r;�//opt/cppython/lib/python3.8/test/test_buffer.py�native_type_rangeYs 
&r=)��@�<�>�=�!r?Z
bBhHiIlLfdZBbc�m�@m�ar�@br>r@rArBrC�1�2�3)r�array�numpy�
memoryview�bytefmtcCsvtt||�}|dkr6t|g�}|dkr6|dkr6d}|dkrFt|�}|dksV|dkrrt�||�}t�||�d}|S)	zWReturn random item for a type specified by a mode and a single
       format character.r
rL��rrrr)r�fmtdict�bytes�boolr5r6�unpack)�mode�char�obj�xr;r;r<�
randrange_fmt�s
rYcCsJ|�d�\}}g}|D]}|�t|||��qt|�dkrB|dSt|�S)zReturn single random item.�#r*r)�split�appendrY�len�tuple)r8rWrU�charsrXr
r;r;r<�gen_item�s
r`cCs<|dkrt||�Sdg|}t|�D]}t||�||<q$|S)z,Return a list of random items (or a scalar).r)r`�range)rr8rW�lstrr;r;r<�	gen_items�s

rccCs�tt|t�}|d}|�d�}tdd�}t|�D]H}ttt|��}tt|t�}||t	|rf|nd�7}|||7}q4t
|||�}	t||�}
||	|
fS)NrZ�ambr�
r*)r�cap�MODE�striprrar^rQ�MULT�intrcr`)rrWrUZxfmtr8�nmemb�_rV�
multiplier�items�itemr;r;r<�struct_items�s


rprcCs�|dkrtt|t�}|dkr0ttt|��}tt|t�}|d|t|rR|nd�}t|||�}t||�}|�	d�||}|||fS)z"Return random format, items, item.NrZr*rd)
rrfrgr^rQrirjrcr`rh)rrWrUrVrmr8rnror;r;r<�	randitems�s
rqccs4t|tD]"}t|D]}t||||�VqqdS)z1Iterate through supported mode/char combinations.N)rfrgrQrq)rrWrUrVr;r;r<�	iter_mode�srrccs2t||�D]
}|Vq
|dkr"dSt||�VdS)zwYield (format, items, item) for all possible modes and format
       characters plus one random compound format string.rN)rrrp)�nitemsZtestobj�tr;r;r<�iter_format�s
rucCsd|kpd|kpd|kS)Nr
rrr;)r8r;r;r<�is_byte_format�srvcCs4t|�}|dks$|dko2|ddko2||dtkS)zformat suitable for memoryviewr*rrr?)r]�
MEMORYVIEW)r8rXr;r;r<�is_memoryview_format�s�rxcCsg|]}t|�s|�qSr;)rv��.0r
r;r;r<�
<listcomp>�sr{cCst|t�S)z9Tuple items (representing structs) are regarded as atoms.��
isinstance�list�rbr;r;r<�atomp�sr�cCs
t|t�S�Nr|rr;r;r<�listp�sr�cCs6t|�dkrdS|d}|dd�D]}||9}q$|S)zProduct of list elements.rr*N)r])rbrX�vr;r;r<�prod�s
r�cCs�|dkrdS|dkrZt|dd��|g}t|ddd�D]}||||d9<q:n>|gt|dd��}td|�D]}||||d9<qz|S)zOCalculate strides of a contiguous array. Layout is 'C' or
       'F' (Fortran).rr;�Cr*Nr���)r~ra)�ndim�shape�itemsizeZlayout�stridesrr;r;r<�strides_from_shapesr�cCs�t|�r|St|�dkr |dSdg|d}|drFt|�|dnd}t|d�D].}||}t||||�|dd��||<qV|S)zmConvert flat item list to the nested list representation of a
       multidimensional C array with shape 's'.rr*N)r�r]ra�_ca)rn�srb�strider�startr;r;r<r�s$r�cCslt|�r|St|�dkr |dSdg|d}|d}t|d�D]$}t||d|�|dd��||<qB|S)zsConvert flat item list to the nested list representation of a
       multidimensional Fortran array with shape 's'.rNr*)r�r]ra�_fa)rnr�rbr�rr;r;r<r�s"r�cCs2t|�r(d|kr(t|�t|�kr(td��t||�S�Nrzprod(shape) != len(items))r�r�r]�
ValueErrorr��rnr�r;r;r<�carray,s r�cCs2t|�r(d|kr(t|�t|�kr(td��t||�Sr�)r�r�r]r�r�r�r;r;r<�farray1s r�cCsdd�|D�}t|�S)z(Generate all possible tuples of indices.cSsg|]}t|��qSr;�ra�rzr�r;r;r<r{8szindices.<locals>.<listcomp>)r)r��	iterablesr;r;r<�indices6sr�cCs*d}t|�D]}|||||7}q|S)zAConvert multi-dimensional index to the position in the flat list.rr�)r��indr��retrr;r;r<�getindex;sr�c	Cs�|s|St|�}t||dd�}t||ddd�dd�}dgt|�}t|�D]2}t|||�}t||ddd�|�}||||<qL|S)z�Transpose flat item list that is regarded as a multi-dimensional
       matrix defined by shape: dest...[k][j][i] = src[i][j][k]...  r*r�Nr�r)r]r�r�r�)	�srcr�r�ZsstridesZdstrides�destr��fr�tor;r;r<�	transposeBsr�cCs6|gkr|St|�r|gSt|d�t|dd��S)zflatten listrr*N�r��_flattenrr;r;r<r�Qs
r�cCst|�r|St|�S)zflatten list or return scalarr�rr;r;r<�flattenYsr�cCs4t|�rgSt||d�gt|d|dd��S)zMGet the shape of lst after slicing: slices is a list of slice
       objects.rr*N)r�r]�slice_shape�rb�slicesr;r;r<r�_sr�cs&t|�r|S�fdd�|�dD�S)z=Multi-dimensional slicing: slices is a list of slice objects.csg|]}t|�dd���qS�r*N)�
multislice)rzZsublst�r�r;r<r{jszmultislice.<locals>.<listcomp>r)r�r�r;r�r<r�fsr�csFt|�r|S��fdd�t|�d|�d�D�}||�d<|S)a�Multi-dimensional slice assignment: llst and rlst are the operands,
       lslices and rslices are lists of slice objects. llst and rlst must
       have the same structure.

       For a two-dimensional example, this is not implemented in Python:

         llst[0:3:2, 0:3:2] = rlst[1:3:1, 1:3:1]

       Instead we write:

         lslices = [slice(0,3,2), slice(0,3,2)]
         rslices = [slice(1,3,1), slice(1,3,1)]
         multislice_assign(llst, rlst, lslices, rslices)
    c	s.g|]&\}}t||�dd��dd���qSr�)�m_assign)rzr�r��lslices�rslicesr;r<r{}s�zm_assign.<locals>.<listcomp>r)r��zip��llst�rlstr�r�r;r�r<r�ls�r�cCsft||�}t||�}t|�t|�kr(dStt|��D],}||||krNdS||dkr4dSq4dS)z9Compare the structure of llst[lslices] and rlst[rslices].r�r)r�r]ra)r�r�r�r��lshape�rshaperr;r;r<�
cmp_structure�s

r�cCs(t||||�dkrtd��t||||�S)z:Return llst after assigning: llst[lslices] = rlst[rslices]rz+lvalue and rvalue have different structures)r�r�r�r�r;r;r<�multislice_assign�sr�cs�|�rdS|dks |�|kr$dSt�fdd��D��r>dS|dkrZ|dkoX�oX�Sd�krfdSt��fdd�t|�D��}t��fdd�t|�D��}d||ko�||�|kS)z�Verify that the parameters represent a valid array within
       the bounds of the allocated memory:
           char *mem: start of the physical memory block
           memlen: length of the physical memory block
           offset: (char *)buf - mem
    Frc3s|]}|�VqdSr�r;r��r�r;r<�	<genexpr>�sz#verify_structure.<locals>.<genexpr>Tc3s.|]&}�|dkr�|�|dVqdS�rr*Nr;�rz�j�r�r�r;r<r��s�c3s.|]&}�|dkr�|�|dVqdSr�r;r�r�r;r<r��s�)�any�sumra)�memlenr�r�r�r��offset�imin�imaxr;)r�r�r�r<�verify_structure�sr�cCs|D]}||}q|Sr�r;)rbr�rr;r;r<�get_item�s
r�c
Cs:|\}}}}}}|}t|�D]}	|||	||	7}q|S)z-Location of an item in the underlying memory.r�)
r�rtr�r�r�r�r�r��prr;r;r<�memory_index�s
r�cCsR|\}}}}}}d|>}t|�D],}t||�}	d|	>}
||
@rDdS||
O}q dS)z�The structure 't' is overlapping if at least one memory location
       is visited twice while iterating through all possible tuples of
       indices.r*TF)r�r�)rtr�r�r�r�r�r�Zvisitedr�r�bitr;r;r<�is_overlapping�s

r��r1r;csZ�s�t|d�}|dkrd|r,|||dddfStdd�}||}td�dkrP|n|}|||dd|fSd}	td�}
|
dkr�|r�d}	n|
dkr�d}	dg|�t|�D]}t|	|d��|<q�nt��}d	}td�}
|
dkr�|
d@r�d
nd}
dg|�|t||d��|d<|
�s0�|ddk�r0|�|d<t|ddd�D]j}|�|d�r`�|dnd9}|
�r�|t||d��|<n"d
td�|td|d��|<�q@d}}d�k�r�t��fdd�t|�D��}t��fdd�t|�D��}||}|�r ||}||d|}n*|||}td�dk�rF||n|}|||��|fS)z�Return random structure:
           (memlen, itemsize, ndim, shape, strides, offset)
       If 'valid' is true, the returned structure is valid, otherwise invalid.
       If 'shape' is given, use that instead of creating a random shape.
    r*rr;�r�d�_�Zr�TFr��r*r�c3s.|]&}�|dkr�|�|dVqdSr�r;r�r�r;r<r�s�z!rand_structure.<locals>.<genexpr>c3s.|]&}�|dkr�|�|dVqdSr�r;r�r�r;r<r�s�)rrar]r�)r�Zvalid�maxdim�maxshaper�r�rsr�r��minshaperrZ	maxstrideZzero_strider�r�r;r�r<�rand_structure�s\


"
��

r�c
Csp||}t|d�}|r$|||nd}td|d�}|||}t|||�}t||�\}}}}	|	|krlt�|S)z=Create a random slice of len slicelen that fits into listlen.r*)r�slice�
slice_indices�RuntimeError)
�slicelenZlistlenZmaxstartr�Zmaxstep�step�stopr�rlZcontrolr;r;r<�randslice_from_slicelen!sr�cCspdg|}dg|}t|�D]B}||}|dkr>td|d�nd}t||�||<t||�||<qt|�t|�fS)zxCreate two sets of slices for an array x with shape 'shape'
       such that shapeof(x[lslices]) == shapeof(x[rslices]).rr*)rarr�r^)r�r�r�r�rrr�r;r;r<�randslice_from_shape.s

r�cCs�td|d�}d}td�}|dkr(d}n|dkr4d}td�dkrDdnd	}dg|}dg|}dg|}dg|}	t|�D�]}t||d�}
t||d�}||
kr�|
|}}
|�rt|
|
d�}t|
|
d�}
d
td�td|
d�}t||
|�}t||
�\}}}}n&|
dk�r$td|
d�nd}t||
�}t||�}td�dk�rp||
||<||<|||	|<||<qx|
|||<||<|||	|<||<qx||t|�t|	�fS)z�Create (lshape, rshape, tuple(lslices), tuple(rslices)) such that
       shapeof(x[lslices]) == shapeof(y[rslices]), where x is an array
       with shape 'lshape' and y is an array with shape 'rshape'.r*rr�r�rr��PTFr�)rrar�r�r�r^)r�r�r�r�rZ
all_randomr�r�r�r�Zsmall�bigr�r�r�Zs_smallrlr�Zs_bigr;r;r<�rand_aligned_slices:s@






r�cCs$|\}}}}}}t||d|d�S)zMReturn a list of random items for structure 't' with format
       'fmtchar'.rZrL)rc)r8rtr�r�rlr;r;r<�randitems_from_structureesr�c
Cs(|\}}}}}}	t|||||	t|Bd�S)z:Return ndarray from the tuple returned by rand_structure()�r�r��formatr��flags)r�ND_WRITABLE)
rnr8rtr�r�r�r�r�r�r�r;r;r<�ndarray_from_structureks

�r�cCsP|\}}}}}}t|�}	t|�D]\}
}t�||	|
||�q t|	||||d�S)z>Return numpy_array from the tuple returned by rand_structure())�bufferr�r��dtyper�)�	bytearray�	enumerater5�	pack_into�numpy_array)rnr8rtr�r�r�r�r�r��bufr�r�r;r;r<�numpy_array_from_structureqs�r�cs�|j}|r$t|��|krld|fSnH|gkrH|jdks>�|krld|fSn$t|��\}}|g}|dkrld|fS|�����fdd�tdt����D�}g}|D]2}	t�||	�d}
|
|
kr�d|fS|�	|
�q�|gkr�||fS|d|fS)a�Interpret the raw memory of 'exporter' as a list of items with
       size 'itemsize'. If shape=None, the new structure is assumed to
       be 1-D with n * itemsize = bytelen. If shape is given, the usual
       constraint for contiguous arrays prod(shape) * itemsize = bytelen
       applies. On success, return (items, shape). If the constraints
       cannot be met, return (None, None). If a chunk of bytes is interpreted
       as NaN as a result of float conversion, return ('nan', None).Nrcsg|]}�||���qSr;r;)rzr�r�Zmemr;r<r{�szcast_items.<locals>.<listcomp>�nan)
�nbytesr�r��divmod�tobytesrar]r5rTr\)Zexporterr8r�r�Zbytelenrr�Z	byteitemsrnr�ror;r�r<�
cast_itemss(

 r�c#s�td�D]}|gVqtdd�}td�dkr0dnd��fdd	�t|�D�Vtdd�}td�dkrfdnd��fd
d	�t|�D�VdS)z Generate shapes to test casting.r/��r�r�r*rcsg|]}t�d��qS�r��r�rzrl�r�r;r<r{�sz!gencastshapes.<locals>.<listcomp>csg|]}t�d��qSr�r�r�r�r;r<r{�sN)rar)rr�r;r�r<�
gencastshapes�s


r�cCs0tt||d�t||d�t||d��S)z4Generate all possible slices for a single dimension.r*)rra)rr;r;r<�	genslices�sr�cs�fdd�t|�D�}t|�S)z/Generate all possible slice tuples for 'shape'.csg|]}t�|��qSr;)r��rzr�r�r;r<r{�sz"genslices_ndim.<locals>.<listcomp>)rar)r�r�r�r;r�r<�genslices_ndim�sr�FcCs,|s|dkrdnd}t||d�}t||�S)z�Generate random slice for a single dimension of length n.
       If zero=True, the slices may be empty, otherwise they will
       be non-empty.rr*)rr�)r�allow_emptyZminlenr�r;r;r<�rslice�sr�ccstd�D]}t||�VqdS)z.Generate random slices for a single dimension.r�N)rar�)rr�rlr;r;r<r��sr�c#spt|�D] }t�fdd�t|�D��Vqt|�D] }t�fdd�t|�D��Vq2tdd�t|�D��VdS)z)Generate random slice tuples for 'shape'.c3s|]}t�|�VqdSr��r�r�r�r;r<r��szrslices_ndim.<locals>.<genexpr>c3s|]}t�|dd�VqdS)T)r�Nrr�r�r;r<r��scss|]}tddd�VqdSr�)r�r�r;r;r<r��sN)rar^)r�r�Z
iterationsrlr;r�r<�rslices_ndim�s
rccs0t|�}|dkrt|�n|}tt||��VdSr�)r^r]r)�iterabler��poolr;r;r<�rpermutation�src
Cs�z|��}Wn ttfk
r,|��}YnXt|t�rF|j}|j}nd}d}td||j	|j
|j||j|j
|f�tj��dS)zPrint ndarray for debugging.�unknownz_ndarray(%s, shape=%s, strides=%s, suboffsets=%s, offset=%s, format='%s', itemsize=%s, flags=%s)N)�tolist�	TypeError�NotImplementedErrorr�r}rr�r��printr�r��
suboffsetsr�r��sys�stdout�flush)�ndrXr�r�r;r;r<�
ndarray_print�s"
��rr�re�r�z%struct module required for this test.z%ndarray object required for this testc@s�eZdZdd�Zddd�dd�Zd�dd�Zd	d
�Zdd�Zd
d�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�Zd;d<�Zd=d>�Z d?d@�Z!dAdB�Z"dCdD�Z#dEdF�Z$dGdH�Z%dIdJ�Z&dKdL�Z'dMdN�Z(dOdP�Z)e*j+Z+dQdR�Z,dSdT�Z-dUdV�Z.dWdX�Z/dYdZ�Z0d[d\�Z1d]d^�Z2d_d`�Z3dadb�Z4e5j6dcdd��Z7dedf�Z8dgdh�Z9didj�Z:dkdl�Z;dmdn�Z<dodp�Z=dqdr�Z>dsdt�Z?dudv�Z@dwdx�ZAdydz�ZBd{d|�ZCd}d~�ZDdd��ZEd�d��ZFd�d��ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�S)��TestBufferProtocolcCst�|_dSr�)Zget_sizeof_void_p�
sizeof_void_p��selfr;r;r<�setUp�szTestBufferProtocol.setUpF)�sliced�castc
%
s(�	rt�	���n�s t���n��d��jrΈ��d�d}td��D]:}
�	|
dkr\q��|
dkrH|�|
�	|
d7}qH|gdd�t�d�D���j}�ddkr�|}|gt�dd������j|���	�j
����	�j����	�j�����j
|���	�j����	�jt�	���
�r@��sR��	�jt�����	�jt���t�t��szt���r���r����n���}��	|����s�dS|�s�t�}d}t�	�D]�}zLt�|�}t�|�}t|t��r�tj�f|��}nt��|�}|�|�Wn"tk
�r0d}Y�qBYnX��	||��q�|�s���	���|�t��}d� dd	�|D��}��	|�!�|���r��nd
}t"��}dD�]�}�}|dk�r�t#�d
��r�t#�d��rt$|�	�}t|�	|t%d�}n0t#�d
��rt#�d��r|dk�rt|�	|d�}t&�t'|����	���|���(t)�|���dk�rP�q�t|�}|�rbdnt*}t+�dt,����	t��|�����fdd�t|�D�}t|d�dk�r�dd�|D�}t|�	|�d�} ��	t| �t���t����}!��	|!��t��jdd�}!��	|!��t��jdd�}!��	|!��t+�dt,����	t��|�����fdd�t|�D�}t|d�dk�r�dd�|D�}t|�	|t%B�d�} ��	t| �t���t��jdd�}!��	|!��t+�d
t,����	t��|�����fdd�t|�D�}t|d�dk�r,dd�|D�}t#�d��r<t%nd}"t|�	|"|B�d�} ��	t| �t���t��jd
d�}!��	|!���q�t���r$zt��}Wntk
�r�YdSXt�t��rʈjn��|f���������	�
��fdd�	}#|#|�|�-��}$|#|$dd�W5QRX|��dS)Nr;rr*cSsg|]}d�qS)r�r;r�r;r;r<r{sz-TestBufferProtocol.verify.<locals>.<listcomp>Tr>css|]}d|VqdS)z%02xNr;ryr;r;r<r�Osz,TestBufferProtocol.verify.<locals>.<genexpr>r�r��F�Arrr��r�r�r��r�r�csg|]}t���|���qSr;�r5�unpack_fromr���contigr8r�r;r<r{zs�cSsg|]}|d�qS�rr;r�r;r;r<r{}s�r�r�r���ordercsg|]}t���|���qSr;rr�rr;r<r{�s�cSsg|]}|d�qSr!r;r�r;r;r<r{�scsg|]}t���|���qSr;rr�rr;r<r{�s�cSsg|]}|d�qSr!r;r�r;r;r<r{�scs���|j����|j����|j����|j����|j|���|j����|jt	����	rn�s���|j
t	�
����|jt	����dkr�dnt��}��t|�|��rˆ�
�n���}��|����|��dS)Nrr*)�assertIsrW�assertEqualr�r�r��readonlyr�r�r^r�r
r]rr�)rD�expected_readonlyr�rep)�ex�expected_lenr8r�rbr��resultrr�rr�r
r;r<�check_memoryview�sz3TestBufferProtocol.verify.<locals>.check_memoryview)r().r�r]r
Z
assertGreaterrarr~r%rWr&r�r�r�r'r�r�r^r�r}rrxrr�r�r��get_pointerr�r5r6�extend�BufferErrorrM�join�hexr��
is_contiguousr��
ND_FORTRAN�get_contiguous�
PyBUF_READ�
assertTrue�
cmp_contigr��py_buffer_to_contiguous�
PyBUF_FULL_RO�
toreadonly)%rr,rWr�r8r'r�r�r�rbrrZ
suboffset0rZstride0r)rZbuf_errr�Zitem1Zitem2rXrDrZffZ	flattenedr$�expectedZtransrk�roZinitlst�yZcontig_bytesrr-Zmmr;)
r r*r+r8r�rbr�r,rr�rr�r
r<�verify�s




�
���
����
&
zTestBufferProtocol.verifycCstdd�}dd�}|jr ||t�s�||t�r0|jr�||t�r@|jr�||t�rP|jr�||t�s`|j	s�||t
�sp|jr�||t�s�||t�r�|j
tt||d�dSt|t�s�t|j�r�|��}nt|td�}|��}||t�r�dn|j}	|j}
|j}|j}||t��s
d}
|��}||t��sd}||t��r,|jnd	}
||t
��rB|jnd	}t||d�}|j||||
|	||
|||d
�
dS)NcSs|jdkp|jdkS)Nr>r�r��r*r;r;r<�
simple_fmt�sz4TestBufferProtocol.verify_getbuf.<locals>.simple_fmtcSs||@|kSr�r;)�req�flagr;r;r<�match�sz/TestBufferProtocol.verify_getbuf.<locals>.match��getbufFr>r*r;)	rWr�r8r'r�r�r�rbr)r'�PyBUF_WRITABLE�PyBUF_C_CONTIGUOUS�c_contiguous�PyBUF_F_CONTIGUOUS�f_contiguous�PyBUF_ANY_CONTIGUOUS�
contiguous�PyBUF_INDIRECTr
�
PyBUF_STRIDES�PyBUF_ND�PyBUF_FORMAT�assertRaisesr0rr}rxr�rr:r�r�r�r�r�r?)rZorig_exr*rCrrBrErbrr=r8r�r�r�r�r;r;r<�
verify_getbuf�st����������	�	���

�z TestBufferProtocol.verify_getbufcs8tttttttttt	t
ttt
tf}dd�td�D�dfddddd	d
ddd
dddgdfddddd	d
ddd
dddgdfdd�td�D�dff}ggdfdddggdfdggdfdgdgdfd
gdgdfd
gdgdfddggdfddgddgdfddgddgdfddgddgdff
}dttttBtttBf}dttttBf}|D�]�\}}t�|��|D�]x\}}	}
�fdd�|	D�}	|
�9}
|D�]J}|	�r�|t@�r��q||�s�|t@�r��q||�r�|n|d}t|||||	|
d�}
|�r�|
ddd�nd}t|
�}|�r�t|�}|
jdk�s"|
jdk�r.|�r.|	�r.|�||
�|�rX|jdk�rX|�rX|	�rX|�||�|D]h}|D]\}|�|
|
||B�|�|
|||B�|�rd|j||||Bdd�|j||||Bdd��qd�q\�q|�qR�q:ddddd	d
ddd
dddg}t|dgtd�}|�tt|�td
gdg�}t|td�}|jtt|td�|jtt|td�|jtt|td�|jtt|td�|jtt|td�|jtt|td�t|td�}dddgdddgfD]�}dtfD]p}t|||tBd�}|�t |d��|�t |d��|D]2}t||d�}|�t |d��|�t |d���q��q��q�dS) NcSsg|]}|drdnd�qS)rTFr;�rzrXr;r;r<r{sz:TestBufferProtocol.test_ndarray_getbuf.<locals>.<listcomp>�rr*rrr�r�r�r4r3�	re�rrcSs$g|]}|drd|nd|�qS)rr%r$r;rUr;r;r<r{
srrr�������csg|]}|��qSr;r;r�r�r;r<r{%s)r�r�r�r�r�T)r�r�r�rFrr�)!rOrPrQ�PyBUF_SIMPLErIrKrM�
PyBUF_FULLr:�
PyBUF_RECORDS�PyBUF_RECORDS_RO�
PyBUF_STRIDED�PyBUF_STRIDED_RO�PyBUF_CONTIG�PyBUF_CONTIG_ROrar�r4�ND_PILrHrRr5�calcsizerrMr�r&rT�ND_GETBUF_FAILrSr0r7r3)r�requestsZ	items_fmtZ	structureZndflagsZ
real_flagsrnr8r�r�r�r�Z_items�ex1�ex2�m1�m2rC�bitsr*�baserr$r;r�r<�test_ndarray_getbuf�s���
���

�$��z&TestBufferProtocol.test_ndarray_getbufc
Cstdgdg�}tdgdgtd�}t|j|jfD�]z}|�t|dddh�|�t|dddg�|�t|dddg�|jt|dddgdhd�|jt|dddgdgdhd	�|jt|dddgdggd
�|jt|dgdgid�|jt|dgdgid�|jt|dgdgid
�|jt|dgdgdgtd�|jt|dggtd�|jt|gdgd�|jt|dgdgdd�|jtj	|dgdgdd�|jt|ddgdgdd�|jt|dddgdgdd�t
d}|jt|dg|dg|d�|jt|dgdgd�|jt|dddgdgd�|jt|dgddgd�|jt|dddddgddgdd
�|jt|dddgdgdgd	�|jt|dgdgddgd	�|jt|ddgddgdgd	�|jt|ddddgdgdgdd�|jt|dddgdgdd
�|jt|dddgdgddd�|jt|dddgdgdd�|jtj	|dgdgdd�ddddddd d!dd"g
}|jt||ddgd#d$gdd%�|jt|t�d&d'�|jt|dgdgt
d
�|�t|dg�q.|jttd(td)�tdgdgtd�}|jt|jdgdgtd�td(�}|�t|jdgdg�|�t|j�tdgdg�}|�dgdg�t|�}|�t|jdgdg�|�t|j�|��|��|�t|j�~|�ttidddg�|�ttd(i�tttd*��dgd*d�}|�tt|dg�tttd+��ddgd�}|�tt|dddg�|�tt|ddg�|�tt|d#dg�|�tt|d,dg�tdddgdgdd�}t|td)�}|�t|j�tdddgdgdd�}t|�}	t|	�}|�t|j�td-gdgd.d�}|�t|j�t
}ttt|��dg|d�}|�t|j�tdgdgd�}|�ttddddd�|�tt|d/d0�|�tt|d,d0�|�tt|td1�|�tt|td2�|�tt|td3�|�tt|d4d5�tdgdgd�}|�ttddddd�|�tti|�|�tt|i�tdgdgd�}|�ttddddd�|�ttid5�|�tt|d6�dS)7NrWr*�r�rrrJ�rr�r�r��r�r�rr[)r�rG�r�r�r�ZXXXri�r�rrZQLr�r"r�r�rH�r�r�r�)r�r�r�r>�r*rrz@#$r�r4r3re���rY)r�r�r�rr@�123rFr�rVr))�r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*r*Z�LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL�xyzr��u �Z�r��)r�ND_VAREXPORT�pushrSrr4rdr�r5r7ZND_MAX_NDIM�
OverflowErrorr�r]r0rH�poprM�releaser.r~rar\r�memoryview_from_bufferr5r6�UnicodeEncodeErrorr8r3)
rrZndmr
rrnrDr*rhrir;r;r<�test_ndarray_exceptionscs��"������z*TestBufferProtocol.test_ndarray_exceptionscCs�ttd��D]�}dgd}tdddgdgtd�}t|�|d<tdd�D]&}|jdddgdgd�t|�||<qFtd�D]}|||��qv|�t|j	�~qdS)Nr�rr*rrr[r�)
rrarr}rMr~r�rSr0r�)r�permrDrrr;r;r<�test_ndarray_linked_lists
z+TestBufferProtocol.test_ndarray_linked_listcCsLtd�D]>\}}}t�|�}t|d|d�}|j|d||dddd|d�	qdS)Nrr;rT�rWr�r8r'r�r�r�rb)rur5rerr?)rr8Zscalarrlr�rr;r;r<�test_ndarray_format_scalars
�z-TestBufferProtocol.test_ndarray_format_scalarc
Csltdd�}t|�D]T\}}}t�|�}dtfD]6}t||g||d�}|j|d||dd|f|f|d�	q.qdS)Nr*rerrTr�)rrur5rerdrr?)rrsr8rnrlr�r�rr;r;r<�test_ndarray_format_shapes

�z,TestBufferProtocol.test_ndarray_format_shapecCs�tdd�}t|�D]�\}}}t�|�}tdd�D]�}|dkr>q0t|dd|��g}||g}|dkrp||dnd}	dtfD]>}
t|||||	|
d�}|j|d||dd|||dd|�d�	q|q0qdS)	Nr*����r�rr�Tr�)	rrur5rerar]rdrr?)rrsr8rnrlr�r�r�r�r�r�rr;r;r<�test_ndarray_format_strides's0


��z.TestBufferProtocol.test_ndarray_format_stridescCsTddddddddd	d
ddg}t|d
dd�}t|ttBd�}|�|��t|d
��dS)Nr*rrr�r�r�r4r3rWrerXrVrp)r*rr�rF)rrKrRr&rr�)rrnr*rr;r;r<�test_ndarray_fortran<sz'TestBufferProtocol.test_ndarray_fortrancCs^td�D�]N}dd�t|�D�}t|�}t|�D�]$}t|�\}}}t�|�}dtfD]�}	|dkrl|	tkrlqVt||||	d�}
t|||d�}t	||�}|j
|
d||d||||d�	t|��rt|||d	�}
t|
tt
Bd
�}
|�|
jdk�|
��}|j
|d||d||||d�	t||||	tBd�}
t|||d�}t||�}|j
|
d||d||||d�	qVq0qdS)
Nr�cSsg|]}tdd��qS)rrer�r�r;r;r<r{Dsz<TestBufferProtocol.test_ndarray_multidim.<locals>.<listcomp>rrr�Tr�rrFr;r)rar�rrqr5rerdrr�r�r?rxrcrRr7r�r�r4r�)rr��shape_trsr�r8rnrlr�r�rr�rbr*�mvr;r;r<�test_ndarray_multidimBsb

�
��
�z(TestBufferProtocol.test_ndarray_multidimcCs�tdgdgd�}|�t|jdd�t|�}|�||�|�t|jdd�tdgdgtd�}|�t|jd�t|�}|�||�|�t|jd�tdgdgtd�}|�t|j	d�|�t|jdd�t|�}|�||�|�t
|j	d�|�t
|jdd�ddddd	d
ddg}t|t|�gdtd
�}|�tj
|jdd�|�t|jdd�t|�}|�||�|�t|jdd�|�t|jdd�dddg}t|t|�gdtd
�}|�t|jdd�|�tj
|jdd�dS)Nr*r�r3r[r)rrr�r�r�r4rri,)r����r*rrp)r�r�ZLQ)s1r�)rrSr�__setitem__rMr&r��__delitem__r�__getitem__�
IndexErrorr]r5r7r�)rrr�rnr;r;r<�test_ndarray_index_invalidos:
z-TestBufferProtocol.test_ndarray_index_invalidcCsJtddtd�}t|�}|�||�|d}|�|d�|d}|�|��|���|d}|�|d�|d}|�|��|���|�t|jd�|�t|jd�|�t|jdd�|�t|jdd�|�|��d�|�|��d�d|d<|�|��d�d|d<|�|��d�d|d<|�|��d�d|d<|�|��d�dS)	Nr*r;r[.rr3rWr�)	rr�rMr&rrSrr�r�)rrr�rXr;r;r<�test_ndarray_index_scalar�s2z,TestBufferProtocol.test_ndarray_index_scalarcCsRtttd��ddgtd�}t|td�}|�t|jd�|�t|jtddd��dS)	Nr3rr�r[rFr*rr�)	rr~rar�rbrSr0r�r�)rr*rr;r;r<�test_ndarray_index_null_strides�sz2TestBufferProtocol.test_ndarray_index_null_stridescCstd�D]�\}}}t|dg|d�}tdd�D]}|�||||�q,|�t|jd�|�t|jd�t|�rt|�}|�||�tdd�D]}|�||||�q�|�t|jd�|�t|jd�qtd�D]�\}}}t|dgt	|d�}t|t
tBd�}tdd�D]}|�||||��qt|�r�|��}|�
|�|�t�tdd�D]}|�||||��qNq�ddd	d
dg}t|dgd�}t|td�}tdd�D]}|�||||��q�ddd	d
dg}t|dgd�}t|td�}tdd�D]}|�||||��q�dS)Nr�rr����r"rFr*rrr�r�)rurrar&rSr�r�rxrMr�rbrRr�r%�__eq__�NotImplementedrcr\)rr8rnrlrrr�r*r;r;r<�!test_ndarray_index_getitem_single�sBz4TestBufferProtocol.test_ndarray_index_getitem_singlecCs�td�D]�\}}}t|dg|td�}td�D]}|||<|||<q,|�|��|�|�t|jd|�|�t|jd|�t	|�s�qt|dg|td�}t
|�}|�||�td�D]}|||<|||<q�|�|��|�|�t|jd|�|�t|jd|�qtd�D]�\}}}t|dg|td�}tdd�D]&}||d||<||d||<�q(|�|��|�t	|��sn�qt|dg|td�}t
|�}|�||�tdd�D]&}||d||<||d||<�q�|�|��|��qdS)Nr�rr�r�r�r*)rurr�rar&rrSr�r�rxrM)rr8rnZsingle_itemrrr�r;r;r<�!test_ndarray_index_setitem_single�sD


z4TestBufferProtocol.test_ndarray_index_setitem_singlec

Cs�d}t|�}t|�D�]�}t|�\}}}dtfD�]�}t||||d�}t||�}	t|d|d�D]�}
|�|	|
||
���t|d|d�D]b}|�|	|
|||
|���t|d|d�D](}|�|	|
||||
||�q�q�qdt||||t	Bd�}t
||�}	t|d|d�D]�}
|�|	|
||
���t|d|d�D]d}|�|	|
|||
|���t|d|d�D]*}|�|	|
||||
||��q��q\�q,q0qdS)N�rrr�rrr*r)r�rrqrdrr�rar&rr4r�)
rr�rsr�r8rnrlr�rrbrr��kr;r;r<�#test_ndarray_index_getitem_multidims.
 *�
 z6TestBufferProtocol.test_ndarray_index_getitem_multidimcCs�tddd�}|�ttdt��t|�}|�||�|�ttdt��td�D]�\}}}t|dg|d�}t|�D]&\}}|�|||�|�	||k�qnt
|�rLt|�}t|�D]&\}}|�|||�|�	||k�q�qLdS)Nr*r;r�z1 in ndz1 in mvr�r)rrSr�eval�localsrMr&rur�r7rx)rrr�r8rnrlrr�r;r;r<�test_ndarray_sequence6sz(TestBufferProtocol.test_ndarray_sequencec	Cs�ddddddddg}t|dgtd	�}t|�}|�t|jtd
dd�|�|�t|jtd
dd�|�t|dgtd	�}t|dgtd	�}t|td�}|�t|jtd
dd�|�t|dgdtd
�}t|�}|�t	|j
td
dd
��|�t	|j
td
dd
��t|ddgdtd
�}t|�}|�t	|j
td
dd�td
dd
�f�|�t	|j
td
dd
�td
dd�f�|�t|j
d�|�t|j
dtd
dd�f�|�t|j
td
dd�if�|�t|j
td
dd�td
dd
�f�|�t|j
d�t|dgdtd
�}t|dgdd�}t|�}t|�}|�t	|jtd
dd�|dd��|�|�
�|�|�t	|jtd
dd�|dd��|�|�
�|�t|dgdtd
�}t|dgdd�}	t|�}t|�}|�t	|jtd
dd�|dd��|�|�
�|�|�t	|jtd
dd�|dd��|�|�
�|�t|ddgdtd
�}t|dgdd�}t|�}t|�}|�t	|jtd
dd�|dd��|�|�
�ddddgddddgg�|�t|jtd
dd�|dd��t|dgdtd
�}t|dgdd�}t|�}t|�}|�t	|jtd
dd�|dd��|�|�
�|�|�t	|jtd
dd�|dd��|�|�
�|�|�tttd
dd�i�|�ttdd�|�t	ttd
dd
�d�t|dgdtd
�}
|�t|
j�t|dgdd�}t|td�}
|�t|
j�dS)Nr*rrr�r�r�r4r3r[rrFrrz@%$rrrz###########)rr�rMrSrr�r�rQr0r�r�rr&rr�rd�add_suboffsetsr\)rrn�xl�mlr*�xrrr��mr�yrrXr;r;r<�test_ndarray_slice_invalidIs�
�
�
�"""""$
�""z-TestBufferProtocol.test_ndarray_slice_invalidcCsddddddddd	d
ddg}t|dgd
td�}t|dgd
d�}|d	d	�|dd�<|�|��|�t|�}t|�}|�||�|�||�|d	d	�|dd�<|�|��|�t|ddgd
td�}t|ddgd
d�}|dd�dd�f|dd�dd�f<|�|��t|ddg��dS)Nr*rrr�r�r�r4r3rWrerXrVrrr)rr�r&rrMr�)rrnrXr>r�r�r;r;r<�test_ndarray_slice_zero_shape�s$z0TestBufferProtocol.test_ndarray_slice_zero_shapec
Csd}t|�}t|�}t|�D]�}t|�\}}}t�|�}dtfD]�}	t||||	d�}
t||�}t	||�D]�}d}
zt
||�}Wn(tk
r�}z
|j}
W5d}~XYnXd}z|
|}Wn(tk
r�}z
|j}W5d}~XYnX|s�|
r�|�
||
�qh|�|��|�qhq@qdS�Nr�rr)r]r�rrqr5rerdrr�rr��	Exception�	__class__r%r&r)rr�r�rsr�r8rnrlr�r�rrbr��listerrr�e�nderr�ndslicedr;r;r<�test_ndarray_slice_multidim�s.

z.TestBufferProtocol.test_ndarray_slice_multidimcCs.d}t|�}t|�}t|�D�]
}t|�\}}}t�|�}t|||d�}	|	��t|||d�}
|
��t|
�}t	||�}t
||�D]�}
d}zt||
�}Wn(tk
r�}z
|j
}W5d}~XYnXd}z|	|
}Wn(tk
r�}z
|j
}W5d}~XYnX|�s|�r|�||�q�|�|��|�q�qdS)N)rrr�rr)r]r�rrqr5rerr�rMr�rr�r�r�r%r&r)rr�r�rsr�r8rnrlr�rr*r�rbr�r�rr�r�r�r;r;r<�'test_ndarray_slice_redundant_suboffsets�s4

z:TestBufferProtocol.test_ndarray_slice_redundant_suboffsetscCstd�D�]�\}}}td�D�]�}td�D�]�}dtfD�]�}|tB}t|dg||d�}t|dg||d�}	t|	�}
d}d}|dd�}
z0|
|}|
|}|
||
|<t|�t|�k}Wn(tk
r�}z
|j}W5d}~XYnXd}z||||<Wn*tk
�r}z
|j}W5d}~XYnX|�r4|�	|t
�n|�|��|
�|�	||�t
|��s\q8d}z|
||
|<Wn*tk
�r�}z
|j}W5d}~XYnX|�r�|�	|t
�q8|�|
��|
�|�|
|�|�	||�|j|
|	|j|d|j|j|j|��d�	q8q*qqdS)Nr�rrFr�)rur�rdr�rrMr]r�r�r%r�r&rrxr?r�r�r�r�)rr8rnrl�lslicer�r�rrr*r�ZlsterrZdiff_structurerbZlvalZrvalr�r�Zmverrr;r;r<� test_ndarray_slice_assign_single�s`
�z3TestBufferProtocol.test_ndarray_slice_assign_singlec
Cs$d}t|�}t|�}t|�D�]}t|�\}}}dtfD]�}tt�D]�}t||�\}	}
t||||t	Bd�}t
||�}d}
zt|||	|
�}Wn(tk
r�}z
|j
}
W5d}~XYnXd}z||
||	<Wn(tk
r�}z
|j
}W5d}~XYnX|s�|
�r
|�||
�qD|�|��|�qDq8qdSr�)r]r�rrqrdra�
ITERATIONSr�rr�r�r�r�r�r%r&r)rr�r�rsr�r8rnrlr�r�r�rrbr�r,r�r�r;r;r<�"test_ndarray_slice_assign_multidim/s2�

z5TestBufferProtocol.test_ndarray_slice_assign_multidimc
Cs8tt�D�](}tdD�]}t�|�}t|dttd�}|�t	|��t
||�}t|||�}|��}t
|�}t|�r�|��}	|�|	|�|ddkr�t|||td�}
|
��}|�||�t
|
�}t|�r�|�||
�|��}	|�|	|�tr|d}d|kr�qt|||�}
|j|d|
j|d|
j|
j|
j|
��d	�	qqdS)
Nr?T�r�r�rrrorFr�)rar�rQr5rer��MAXDIM�MAXSHAPEr7r�r�r�rrMrxr&rdr�r�r?r�r�r�r�)rrlr8r�rtrnrXZxlistr�Zmvlistr>Zylistr��zr;r;r<�test_ndarray_randomPsJ
�
�z&TestBufferProtocol.test_ndarray_randomcCs�tt�D]�}tdD]�}t�|�}t|dttd�}|�t	|��t
||�}d}zt|||�}Wn(tk
r�}z
|j
}W5d}~XYnX|�|�trd}	zt|||�}
Wqtk
r�}z
|j
}	W5d}~XYqXqqdS)Nr?Fr�)rar�rQr5rer�r�r��assertFalser�r�r�r�r�r7r�r�)rrlr8r�rtrnr�rXr�Z	numpy_errr>r;r;r<�test_ndarray_random_invalidys*
�

z.TestBufferProtocol.test_ndarray_random_invalidc
Cs2tt�D�]"}tdD�]}t�|�}tttd�\}}}}t|d|d�}t|d|d�}	|�	t
|��|�	t
|	��t||�}
t||	�}t|
||�}t|||	�}
|
|||<|�
�}|
�
�}t|�}t|
�}|�|�
�|�|�|�
�|�|ddk�r�|	ddk�r�t|
||td�}t|||	td�}||||<|�
�}|�
�}|�||�|�||�t|�}t|�}|�|�
�|�|�|�
�|�trd|ksd|k�r�qt|
||�}t|||	�}||||<t|��st|	��s|j|d|j|d|j|j|j|�
�d	�	|j|
d|j|d|j|j|j|�
�d	�	qqdS)
Nr?r�Tr�rrroFr�)rar�rQr5rer�r�r�r�r7r�r�r�rrMr&rdr�r�r�r?r�r�r�r�)rrlr8r�r�r�r�r��tl�trZlitemsZritemsr�r�ZxllistZxrlistr�r�Zylr�ZyllistZyrlistZzlZzrr;r;r<� test_ndarray_random_slice_assign�sr

�


��z3TestBufferProtocol.test_ndarray_random_slice_assigncCs�ddddddddd	d
ddg}t|ddgtd
�}t|�}|�|jt@�|�|j|�|�|jd�|�|j	�|�|j
�|�|j�dS)Nr*rrr�r�r�r4r3rWrerXrVr[)rr�)rrdr7r�r%rWr&r
r�rJrLrN)rrnrr*r;r;r<�test_ndarray_re_export�sz)TestBufferProtocol.test_ndarray_re_exportc	Cs�dtfD]�}tdddgdg|d�}t|�}|�||�|�|��g�|�|��g�tdddgdddg|d�}|�|��g�tdddgdddg|d�}|�|��gggg�tdddgdddg|d�}|�|��ggggggggggggg�qdS)Nrr*rrr[�rdrrMr&r�rr�rr�r;r;r<�test_ndarray_zero_shape�s
�z*TestBufferProtocol.test_ndarray_zero_shapec	CspdtfD]b}tdgdgdg|d�}t|�}|�||�|�|��dddddg�|�|��dddddg�qdS)Nrr*r�rrr�r�r;r;r<�test_ndarray_zero_strides�sz,TestBufferProtocol.test_ndarray_zero_stridescCs@tttd��dgdd�}|�|jd�|�|��dddg�dS)N�rr4rqr3rW)rr~rar&r�r�rrr;r;r<�test_ndarray_offset�sz&TestBufferProtocol.test_ndarray_offsetcCs>dtfD]0}tttd��dg|d�}|��}|�||�qdS�Nrrr[)rdrr~rar�r&)rr�rrDr;r;r<�#test_ndarray_memoryview_from_buffersz6TestBufferProtocol.test_ndarray_memoryview_from_buffercCsPdtfD]B}tttd��dg|d�}td�D]}|�||t||g��q,qdSr�)rdrr~rar&r.)rr�rrr;r;r<�test_ndarray_get_pointersz+TestBufferProtocol.test_ndarray_get_pointercCs^tttd��dddgd�}t|ttBd�}|�|��|���t|�}|�|��|���dS)Nr�rr�r�rF)rr~rarQrRr&rrM)rr*rrDr;r;r<� test_ndarray_tolist_null_strides
s
z3TestBufferProtocol.test_ndarray_tolist_null_stridescCs�|�tdd��tttd��ddgd�}tttd��ddgd�}|�t||��tdgdgdd	�}|�t|d
��|�td
|��dS)Nrws456rVrr�r�r*rrrP)r�r8rr~rar7)rrXr>r;r;r<�test_ndarray_cmp_contigsz*TestBufferProtocol.test_ndarray_cmp_contigcCs�t�ddddg�}t|�}|�tt|�tttd���}tttd��dgd�}|�t|�t|��tttd��ddgd�}|�t|�t|��tttd��dddgd�}|�t|�t|��tt	ttd��ddgd��}tttd��ddgt
d�}|�t|�t|��tt	ttd��dddgd��}tttd��dddgt
d�}|�t|�t|��tttd���}tttd��dddgtd�}|�t|�t|��tttd��dddgdd	�}|�t|�t|����dS)
Nrr*rrrVr�r�r[r)
rKrrSr��hashrRr~rar&r�r4rdr�)rrFrrr;r;r<�test_ndarray_hash"s*z$TestBufferProtocol.test_ndarray_hashc
Csdtttttttttt	t
tf}|�t
tidt�tdddtd�}dD]*}|D] }t|||�}|�||���qJqBtdgdgdtd�}dD]&}|D]}t|||�}|�|d	�q�q�tttd
��dddgdtd�}dD]&}|D]}t|||�}|�|d	�q�q�dtfD]�}tdgdgd
|tBd�}|��}dD]*}|D]}t|||�}|�||��q0�q(tdddgdgd|tBd�}|��}dD]*}|D]}t|||�}|�||��q��q|�qtdddgdgdgtd�}|��}dD].}ttfD]}t|||�}|�||��qސq�|ddd�}|��}dD]L}|D]@}zt|||�}Wntk
�rTY�q$YnX|�||��q$�qttd��}dtfD�]�}t|ddg|tBd�}t�r�tt|�ddgd|dk�r�dndd�}	|tk�r�tt|ddg�ddgtd�}
|
��}n|��}|D]�}zt|d|�}Wntk
�r2Y�qYnX|�||�tdd�|D�ddgtd�}|�t|�t|��t�r|�||	jdd���q|dk�r�tt|ddg�ddgtd�}
nt|ddgtd�}
|
��}tttttfD]�}zt|d|�}Wntk
�rY�q�YnX|�||�tdd�|D�ddgttBd�}|�t|�t|��t�r�|�||	jdd���q�|tk�r�t|ddgtd�}
|
��}n|��}tttttfD]�}zt|d|�}Wntk
�r�Y�q�YnX|�||�tdd�|D�ddg|tBd�}|�t|�t|��t�r�|�||	jdd���q��q~tttd��ddgttBd�}t|dt�}|�||���tdd�|D�ddgtd�}|�t|�t|��t|dt�}tt|ddg�ddgtd�}
|�||
���tdd�|D�ddgttBd�}|�t|�t|��t|dt�}|�||���td d�|D�ddgtd�}|�t|�t|��dS)!NrrWr;rrrr*r�r3rr4rrrrrr�rVr�r[rr�)r�r�r�r$cSsg|]}|�qSr;r;r�r;r;r<r{�szCTestBufferProtocol.test_py_buffer_to_contiguous.<locals>.<listcomp>r#cSsg|]}|�qSr;r;r�r;r;r<r{	srcSsg|]}|�qSr;r;r�r;r;r<r{	scSsg|]}|�qSr;r;r�r;r;r<r{'	scSsg|]}|�qSr;r;r�r;r;r<r{.	scSsg|]}|�qSr;r;r�r;r;r<r{4	s)rOrPrQr\r]r:r^r_r`rarbrcrSrr9rr�r&r�r~rar4r0r�r�r�rM�tostringrd)
rrgrr$ZrequestrrZndbytesrbZnarXr<r>r;r;r<�test_py_buffer_to_contiguousGs���B�
�

�� 

�  z/TestBufferProtocol.test_py_buffer_to_contiguouscCs�dgfdddgdgfttd��dddgfg}|D�]H\}}t||d�}t|�}|�|j�|�|j�t|�}t||dd�}t	||�}|j
||dd	d
||||d�	t|�}	|j
|	|dd	d
||||d�	t|ttBd�}
|�
|
jd
�|
��}|j
|ddd	d
||||d�	t|td�}
|�
|
jd�|�
|
jd
�|�
|
jd
�|
��}|dk�rV|gn|}|j
|ddd	d
d|jgd|d�	q0|D]�\}}t||td�}t|�}|�|j�|�|j�t|�}t||dd�}t||�}|j
||dd	d
||||d�	t|�}	|j
|	|dd	d
||||d�	�q�|dd�D]v\}}t||td�}t|�}t|�}t	||�}|j
||dd	d
|||j|d�	t|�}	|j
|	|dd	d
|||j|d�	�q&|�ttdd�|�tti�tdddgdgd�}t|td�}
|�tt|
�t|ttBd�}
|�tt|
�tdgddgddd�}
|�tt|
�|�t|
j�|�tt|
td�|�tt|
td�|�tt|
ddd�td�dS)NrWr*rrr�r�r�r�rTr�rFr;r>r�r*r[r�9rXr"rrr�)r~rarrMr7rJrNr]r�r�r?rcrRr&r�r�r\r�r�r�r4rLr�rdrSrr0r�r5r6)rZitems_shapernr�r*rDr�r�rbrkrr;r;r<�test_memoryview_construction7	s�,
����
��

��
z/TestBufferProtocol.test_memoryview_constructioncCs�dddg}dddgdddgdddgfD]4}t||d�}|�|j�t|�}|�t|jd�q&tdd�D]<\}}}td�}|�|�}|�|�	�d�|�|�
�g�qfdS)	Nr*rrrr�r
rMr�)rr7rJrMrSrrrur&r�r)rrnr�r*�msrcr8rlrDr;r;r<�test_memoryview_cast_zero_shape�	s
 
z2TestBufferProtocol.test_memoryview_cast_zero_shapecCs�|j}tj}d}d}ttd��}|td�||d|��t|ddgdd	�}|t|�||d|��t|dddgdd	�}|t|�||d
|��dS)NzPnin 2P2n2i5P PZ3nr3r�r*rr�rrr)�check_sizeofrZcalcvobjsizer~rarMr)r�checkZvsizeZbase_structZper_dimrnrFr;r;r<�test_memoryview_sizeof�	sz)TestBufferProtocol.test_memoryview_sizeofcCs�Gdd�dt�}Gdd�dt�}dd�}|d�|d�dtd	�d
tdd�d
ddgdddhddidddddtddtd�td�dddd|dd�g}tdd�D�]6\}}}t|dg|td�}t|dg|td�}	t|�}
t	�
||	d |�||
d <|�|
d |	d �t	�|�}d!|k�rq�|D]�}d}
zt	�
||	||�Wnt	j
k
�rNt	j
}
YnXd}z||
d
<Wn.ttfk
�r�}z
|j}W5d}~XYnX|
�s�|�r�|�|
d�|�|d�n|�|
d
|	d
��qq�dS)"Nc@seZdZdd�Zdd�ZdS)z=TestBufferProtocol.test_memoryview_struct_module.<locals>.INTcSs
||_dSr���val�rr�r;r;r<�__init__�	szFTestBufferProtocol.test_memoryview_struct_module.<locals>.INT.__init__cSs|jSr�r�rr;r;r<�__int__�	szETestBufferProtocol.test_memoryview_struct_module.<locals>.INT.__int__N)�__name__�
__module__�__qualname__r�r�r;r;r;r<�INT�	sr�c@seZdZdd�Zdd�ZdS)z=TestBufferProtocol.test_memoryview_struct_module.<locals>.IDXcSs
||_dSr�r�r�r;r;r<r��	szFTestBufferProtocol.test_memoryview_struct_module.<locals>.IDX.__init__cSs|jSr�r�rr;r;r<�	__index__�	szGTestBufferProtocol.test_memoryview_struct_module.<locals>.IDX.__index__N)r�r�r�r�r�r;r;r;r<�IDX�	sr�cSsdS)Nr4r;r;r;r;r<r�	r�z;TestBufferProtocol.test_memoryview_struct_module.<locals>.frWy������@@z-21.1gffffff(@r�rr*rr�r�r4r3r;�rWTF�asabcrF�abccSs|Sr�r;)rXr;r;r<�<lambda>�	r�zBTestBufferProtocol.test_memoryview_struct_module.<locals>.<lambda>rerMrrr)�objectrr	r�r�rurr�rMr5r�r&rer7rr�r�ZassertIsNot)rr�r�r�valuesr8rnror*rrDr�r�Z
struct_errZmv_errr�r;r;r<�test_memoryview_struct_module�	sj�

z0TestBufferProtocol.test_memoryview_struct_modulecCs@tdddgdgdgd�}|�|j�t|�}|�t|jd�dS)Nr*rrrr�r
)rr�rJrMrSrr)rr*r�r;r;r<�!test_memoryview_cast_zero_strides
sz4TestBufferProtocol.test_memoryview_cast_zero_stridescCs�tD]�}td�rd|n|}t�|�}tD]^}td�r>d|n|}t�|�}tttd��d|g|d�}t|�}|�t	|j
|d|g�q*qtd�D]�\}}	}
t|	dg|d�}t|�}td�D]T\}}
}
t|�s�|�t
|j
|d|g�q�t|�s�t|�s�|�t	|j
|d|g�q�q�t�d�}t�d�}tttd|��dd|gdd�}t|�}|jt	|j
dd|gdd�tttd	��ddd
ddgd�}t|�}
|�t	|
j
�|�t	|
j
ddd
�|�t	|
j
i�|�t
|
j
d
�|�t
|
j
d�|�t
|
j
d�|�t
|
j
d�|�t
|
j
d�|�t
|
j
d�|�t
|
j
d�|�t
|
j
d�|�t
|
j
d�tddgdgdd�}t|�}
|�t|
jd�|�t|
jdd�|�t|
j�tttd	��ddd
ddgd�}t|�}
|jt	|
j
did�tttd	��d	gd�}t|�}
|jt|
j
ddgd�|jt
|
j
ddgd�|jt
|
j
ddd
dddddgd�|jt
|
j
ddd
dddddgd�|jt	|
j
ddd
ddddd gd�ttd!d"�td#�D��d
ddd$gd�}t|�}
|jt	|
j
d%dd
ddgd�tttd&��d&gd%d�}t|�}
|�t
|
j
d%dgd&�ttd'd"�td#�D��d#gd�}t|�}
|jt	|
j
d%dd
ddgd�ttd(d"�td#�D��d#gd�}t|�}
|jt	|
j
ddd
ddgd�tttd&��d&gd%d�}t|�}tttd&��d&gdd�}t|�}tjd)k�r:|�t	|j
dddd*d+d,d-d.g�|�t
|j
dd/d/d0d0dg�|�t
|j
d%d/d/d0d0dg�nN|�t	|j
ddd1g�|�t
|j
dd0d0dddg�|�t
|j
d%d0d0dddg�dS)2Nrr?r/rr*rrr��xrr�r��Xz@Xz@XYz=Bz!Lz<Pz>lZBIZxBIr�rpZIIrr3rr)r�r�r4rXcSsg|]}d�qSr�r;r�r;r;r<r{Z
szCTestBufferProtocol.test_memoryview_cast_invalid.<locals>.<listcomp>i�rXrr"cSsg|]}d�qSr�r;r�r;r;r<r{d
scSsg|]}d�qSr�r;r�r;r;r<r{i
sl�����Ir,iQiAji��	i���)�NON_BYTE_FORMATrr5rerr~rarMrSrrrurxr�rvrr�r�rrr�maxsize)rZsfmtZsformatZssizeZdfmtZdformatZdsizer*r�ZsitemsrlZsize_hZsize_drDrrjrkr;r;r<�test_memoryview_cast_invalid
s�

��

 """&  ������z/TestBufferProtocol.test_memoryview_cast_invalidcslddd�fddd�fddd�ff���fdd	�}t�d
�}tdgd
d�}t|dd
�\}}t|�}|�d�}�j||d
ddd
|d|dd�
t�d
�}tdg||gdd�}t|d
|gd�\}}t|�}|jd
gd�}�j|||d
dddd|dd�
tdd�D],\}	}
}t�|	|
�}t|�}||||
|	�q�tdd�D]4\}	}
}t|
dg|	t	d�}t|�}||||
|	��q2dS)NrcSst|���Sr��r~r�rAr;r;r<r��
r�z9TestBufferProtocol.test_memoryview_cast.<locals>.<lambda>rcSsdd�t|���D�S)NcSs g|]}|dkr|dn|�qS)r,r!r;rUr;r;r<r{�
s�MTestBufferProtocol.test_memoryview_cast.<locals>.<lambda>.<locals>.<listcomp>r�rAr;r;r<r��
r�r
cSsdd�t|���D�S)NcSsg|]}tt|�d��qS)zlatin-1)rR�chrrUr;r;r<r{�
sr�r�rAr;r;r<r��
r�c

s�t�|�}�D]~\}}|�|�}||�}�j||d|ddd|gd|dd�
|�|�}	��|	|�|��}�j|	|||dddg|f|dd�
qdS)Nr*Fr0r�T�	rWr�r8r'r�r�r�rbr)r5rerr?r&r)
r*rDrnr8�srcsizerNZto_bytelistrkrb�m3�Zbytespecrr;r<�iter_roundtrip�
s6

�
�z?TestBufferProtocol.test_memoryview_cast.<locals>.iter_roundtriprrWrr*Tr�r�r�rr;r0rKrMr)
r5rerr�rMrr?rurKr�)rrr�r*Z	destitemsZ	destshaperDrkZdestsizer8rnrlr;r�r<�test_memoryview_cast�
sV


�

�
�z'TestBufferProtocol.test_memoryview_castcCs�t�D�]�}tdD�]�}|dkr$qdtd�|}t�|�}t|�|}t|�rVdnd}t||�D�]:\}}}	t�|�}
|dkr�|gng}||
g}t|||d�}
t	|
�}t
|
|||d	�\}}|dkr�|�t|j
||�qd|d
kr�qdt|||d�}|j
||d	�}t|�}|j}|��}|j||
||d||||dd�
|�
|�}|j
||d	�}t|�}|
j}|
��}|j||
|
|d||||dd�
|j||
|
|d||||dd�
qdqqt�r�Gd
d�dtj�}|dd�}t	|�}|�
d�}|�|j|�|�|jd�|�|jd�|�|jd�|�|j|jf�|�|jd�|�|jd�t�d�}t	|�}|�
d�}|�|j|�|�|jd�|�|jd�|�|jd�|�|j|jf�|�|jd�|�|jd�dS)Nr?r)r>r?rrMrNrrr�r�Tr�c@s eZdZdejfdejfgZdS)z>TestBufferProtocol.test_memoryview_cast_1D_ND.<locals>.BEPointrXr>N)r�r�r��ctypes�c_long�c_double�_fields_r;r;r;r<�BEPoint�
srr�g33333i@rr*Fr�r;�333333�?r
)r�rQrr5rer�rvrurrMr�rSrrr]r�rr?r�BigEndianStructurer&rWr�r%r'r�r�r�r
r)rZ_tshaperVZtfmtZtsizerrWr8rnrl�sizer�Ztshaper*rDZtitemsrrkr�r�rbr�Zm4r�pointrjrXr;r;r<�test_memoryview_cast_1D_ND�
s�


�
��



z-TestBufferProtocol.test_memoryview_cast_1D_NDcCs@t�dttdd���}t|�}|�||�|�|��|���|ddd�}|ddd�}|�||�|�|��|���tttd��ddddd	gd
d�}t|�}|�|��|���tdd
gdgdd�}t|�}|�t|j�tdgdgdd�}t|�}|�t|j�tddddddgddgdd�}t|�}|�t|j�dS)Nrr�r�rri	rXr4r�rr)rr�)r4rXr9�12345r*r�r��b�c�d�e�f)	rKr~rarMr&rrrSr)rrFrDr*r;r;r<�test_memoryview_tolists( z)TestBufferProtocol.test_memoryview_tolistcCsHttd��}|��}|�|�d��|��|��}|�|�d��dS)NrWz<memoryz	<released)rMr��__repr__r7�
startswithr�)rrDr�r;r;r<�test_memoryview_repr/sz'TestBufferProtocol.test_memoryview_reprcCs|dD]J}td�}t�|d|dg�}t|�}|�d|�|�d|�|�d|�qtdgdd�}t|�}|�ttdt��dS)	N)rrg���?g@g"@rr@z9.0 in m)	�floatrKrMZassertInrrSrr�r�)rr8�infr*rDr;r;r<�test_memoryview_sequence8sz+TestBufferProtocol.test_memoryview_sequencec	cs8|�t��}dVW5QRX|�t|j�d|f�dS)Nz#index out of bounds on dimension %d)rSr�r&�str�	exception)r�dim�cmr;r;r<�assert_out_of_bounds_errorFs
�z-TestBufferProtocol.assert_out_of_bounds_errorc
Cs"tdgdd�}t|�}|�|dd�|�|d|�|�|d|�|�t|jd�tdgdd�}t|�}|�t|jd�tttd	��d	gt	d
�}t|�}|�t
|jd�|�t|jd�|�t|jd
�|�t
|jd�|�t
|jd�tttd��ddgt	d
�}t|�}|�|dd�|�|dd�|�|dd�|�|dd�|�|dd�dD]*}|jdd��||dfW5QRX�qbdD]*}|jdd��|d|fW5QRX�q�|�t
|jd�|�t
|jd�|�t|jd �|�t|jd!�|�t|jd�|�t|jd�dS)"N�)@rrr;.rruZiiir4r[r)�@����r3rVrr��rr)rrrsrX�r�r�)rvrZ�rrZr*�r�r�r�r�r)rr(�rrr�r!r!)rrMr&rSrr�rr~rar�r�r)rr*rD�indexr;r;r<�test_memoryview_indexMsFz(TestBufferProtocol.test_memoryview_indexc
Cs�tdgdtd�}t|�}d|d<|�|dd�d|d<|�|dd�|�t|jdd	�tttd
��d
gd�}t|�}|�t|jdd
�tttd
��d
gtd�}t|�}|�t	|jdd�|�t|jdd
�|�t|jdd�|�t	|jdd�|�t	|jdd�t
dD]t}|dk�s|dk�r(�qtdddgdg|td�}t|�}tdd�}d||<|�||d�|�||||��qtddd gdgdtd�}t|�}d!|d<|�|dd!�td"d#d"gdgdtd�}t|�}d"|d<|�|dd"�td$gdgdtd�}t|�}|�t|jdd%�tttd&��dddd'd(gtd�}t|�}t
d�
�D]�\}}|dk�rj�qT|dk�rx�qT|�|�}|\}	}
|d)k�s�|dk�r�dd*dd*}	}
|d+k�r�|�t|jd|	d�|�t|jdd,�|�t|jd|
��qT|�d�}|�t|jdd-�tttd��dgd.td�}t|�}|�t|jdd�td/gdgd0td�}t|�}|�t|jdd�tttd1��dd'gtd�}t|�}d2|d3<|�|ddd2�d4|d5<|�|ddd4�d6D]*}|jdd7��d||df<W5QRX�q�d8D]*}|jdd7��d|d|f<W5QRX�q|�t	|jd9d�|�t	|jd:d�|�t|jd;d�|�t|jd<d�|�t|jdddg�dS)=Nrrrg�6@r;g�7@.rg33333�8@r4r�rrer[r)rWr r!rXr"r�r3�r?r
rr*rrv�1�2�3r�TF�xr�r�r�r�rr�rrxs��ZxLrr�rV�*)rr*�+r$r%r&r'r(r(r)r*)rr�rMr&rSrr�r~rar�rQrr%rnrr�rr)rr*rDr8rrrjZ_rangerk�lo�hir+r;r;r<�test_memoryview_assign�s�
�� 




z)TestBufferProtocol.test_memoryview_assignc	Cs�tttd��dgtd�}t|�}|�t|jtddd��|�t|j	tddd�t
ddg��|�t|jd�tttd��dgtd�}t|�}|�t|jtddd�tddd�f�|�t|j	tddd�tddd�ft
ddg��|�t|jtddd�if�|�t|j	tddd�ift
ddg��|�t|j	tddd�dg�dt
fD�]l}tttd��dgdgdt|Bd	�}tttd
��dgdg|d�}t|�}t|�}|dd�|dd�<|dd�|dd�<|�||�|�||�|dd�ddd�|dd
�ddd�<|dd�ddd�|dd
�ddd�<|�||�|�||�|ddd�ddd�|ddd�ddd�<|ddd�ddd�|ddd�ddd�<|�||�|�||��qBdS)NrVr[rrr*r;r�rX)r�r�r�r��rrr�rr�rY)rr~rar�rMrSr�r�r�r�r�rrrdr&)rr*rDr�rhrirjrkr;r;r<�test_memoryview_slice�sP
�
�

�
��((,,z(TestBufferProtocol.test_memoryview_slicecCs�dd�}tdd�D�]�}t|d�D�]�\}}}t|�D�]�}t|�D�]�}t�||�}t�||�}	t|	�}
|�|
|�|�|
��|���|�|
��|���|�t|
�t|��||||	|
|�d}d}z0||}
||}||||<t|
�t|�k}Wn*t	k
�r$}z
|j
}W5d}~XYnXd}z|
||
|<Wn*t	k
�rd}z
|j
}W5d}~XYnX|�rz|�|t�qD|�s�|�r�|�||�qD|�|
|�|�|
��|���|�|
��|���||||	|
|�qDq6q"qdS)Nc	Ss�t|�D]�\}}||}||}|�||�|||<||krV|�||�|�||�n|�||�|�||�|||<|�||�|�||�|||<|||<qdSr�)r�r&�assertNotEqual)	ZtestcaserFrrD�
singleitemrrlZai�mir;r;r<�cmptest)sz9TestBufferProtocol.test_memoryview_array.<locals>.cmptestr*r�rK)
rarur�rKrMr&rr�r]r�r�r%r�)rr<rr8rnr:r�r�rFrrDZ	array_errZhave_resizeZal�arr�Zm_errr;r;r<�test_memoryview_array'sFz(TestBufferProtocol.test_memoryview_arrayc	Cs�t�ddddg�}t�ddddg�}t|�}t|�}dD]0}|�t||�|�t�|�t||�|�t�q8t|�}|��|�||�|�||�|�||�t|�}t|�}|��|�||�|�||�t|�}|�|dddg�tdgdgdt	d	�}d
t
d�f|d<|�t|�|�t�d
d�}t|�}|�||�|�||�t�r�Gdd�dtj�}|dd�}t|�}t|�}|�||�|�||�|�||�|�
t|j�dS)Nrr*rrr4)�__lt__�__le__�__gt__�__ge__r#zl x d xrr�r�r�urxc@s eZdZdejfdejfgZdS)zITestBufferProtocol.test_memoryview_compare_special_cases.<locals>.BEPointrXr>N�r�r�r�rrrr;r;r;r<r�srr�r�)rKrMr%�getattrr�r�r&r9rr�rrrrSrr)	rrFrr��w�attrrrr
r;r;r<�%test_memoryview_compare_special_casesesF
z8TestBufferProtocol.test_memoryview_compare_special_casescCsntdgdd�}tdgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�|�||�|�|�|��|�|�|��d|d<|�||�|�||�|�||�|�||�|�||�|�||�|�|�|��|�|�|��ttt	d��dgtt
Bd	�}ttt	d��dgtt
Bd	�}t|�}|�||�d
|d<|�||�tdgd
d�}tdgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�|�||�tdgd
d�}tdgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�|�||�|�||�|�||�dS)N��@Lrrri�r;rVr[r�rW)rIrrZLf5sZhf5s)i?���rr)rr�rMr&r��__ne__r9r�r~rard)r�nd1�nd2r�rFrr*rDr;r;r<�!test_memoryview_compare_ndim_zero�sj��z4TestBufferProtocol.test_memoryview_compare_ndim_zerocCs�tdddddgdgdd�}tddddd	gdgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdddddgdgd
d�}tddddd	gdgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdddgdgdd�}tdddddgdgdd�}t|�}t|�}|�||ddd
��|�|ddd
�|�|�||ddd
��|�|ddd�|ddd��tdddgdgdd�}tdddddgdgdd�}t|�}t|�}|�||ddd
��|�|ddd
�|�|�||ddd
��|�|ddd�|ddd��tdddgdgdd�}tdddddgdgdtd�}t|�}t|�}|�||ddd
��|�|ddd
�|�|�||ddd
��|�|ddd�|ddd��tdddgdgdd�}tdddddgdgdtd�}t|�}t|�}|�||ddd
��|�|ddd
�|�|�||ddd
��|�|ddd�|ddd��dS)N����@�����'���r��@hri�z<iz>hrrr�rYz!hz<lrzh  0cz>  h)rrMr&r9rd�rrLrMr�rFr;r;r<� test_memoryview_compare_ndim_one�sl  � �z3TestBufferProtocol.test_memoryview_compare_ndim_onecCs�tddgdgdd�}tddgdgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tddgdgdd�}tddgdgd	d�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS)
N�ryrrTri|���i?���z= h0cz@   i�rrMr&rUr;r;r<�"test_memoryview_compare_zero_shape!
s$z5TestBufferProtocol.test_memoryview_compare_zero_shapecCs�tddddgdgdd�}tdgdgdgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgddgd	d�}tdgdgdgd
d�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS)NrWr�rJrrrrt)rWrWz@ Liz!L  hrXrUr;r;r<�$test_memoryview_compare_zero_strides;
s$z7TestBufferProtocol.test_memoryview_compare_zero_stridesc
Cs�d}tdD]n}t|dd|�\}}}dtfD]L}t||g||d�}t|�}|�||�|ddd�}t|�}|�||�q,qd}td�D]h}	t|�\}}}dtfD]L}t||g||d�}t|�}|�||�|ddd�}t|�}|�||�q�q�dS)	NrerErMr?rrrvr�)rQrqrdrrMr&ra)
rrrVr8rnr:r�rrDrlr;r;r<�&test_memoryview_compare_random_formatsU
s(z9TestBufferProtocol.test_memoryview_compare_random_formatscCs�tttdd��dddgdd�}tttdd	��dddgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�td
gd	dddgdd�}tdgd	dddgd
d�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd	��dddgdd�}tttd	��dddgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�td
gdddgdd�}td
gdddgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd	��dddgdd�}tttd	��dddgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS)N��r2rrr�rTrrr�)rr*rz=f q xxL)g333333�r*rz< f 2Qr�r4z! b B xLz
= Qx l xxLr�rr~rarMr&r9rUr;r;r<�"test_memoryview_compare_multidim_cq
sZz5TestBufferProtocol.test_memoryview_compare_multidim_ccCs�tttdd��dddgdtd�}tttdd	��dddgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�td
gdddgdtd�}td
gdddgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttdd��dddgdtd�}tttdd��dddgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttdd��dddgdtd�}tttdd��dddgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd	��dddgdtd�}tttd	��dddgdtd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS)Nr\r2r�rrrTrrr��rr�r��=Qq)r�rz=qQrZ0llrG)rr~rar4rMr&r9rUr;r;r<�(test_memoryview_compare_multidim_fortran�
s�����������z;TestBufferProtocol.test_memoryview_compare_multidim_fortranc	Cshttdd��}t|dddg�}t|dddgdd�}t|dddgdtd	�}t|�}t|�}|�||�|�||�|�||�d
gd}d|d<t|dddg�}t|dddgd
d�}t|dddgdtd	�}t|�}t|�}|�||�|�||�|�||�tttd��ddgdd�}|ddd�ddd�f}tttd��ddgdd�}|ddd�ddd�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgdddgdd�}|ddd�ddd�f}tdgdddgdd�}|ddd�ddd�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd��dddgdd�}|dd�ddd�f}tttd��dddgdd�}|dd�ddd�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd��dddgdd�}|dd�ddd�f}tttd��dddgdd�}|dd�ddd�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgddddgdd�}|dd�ddd�f}tdgddddgdd�}|dd�ddd�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS) Nr\r2rrr��@lrrr)gffffff
����r1r�)g�������rdr1zd b czd h c�(r3�@Ir*r�rYr)r�r$�rXz=iiz>iirr)rrwZb3sZi3s)r~rar�rr4rMr&r9)	r�lst1�lst2rLrMr�rFrhrir;r;r<�&test_memoryview_compare_multidim_mixed�
s�
z9TestBufferProtocol.test_memoryview_compare_multidim_mixedcCstttd��dddgdd�}tttd��dddgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd��dddgdd�}tttd��dddgdd�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS)	Nr�rrrrrr�z@ir^rUr;r;r<�+test_memoryview_compare_multidim_zero_shapeXs$z>TestBufferProtocol.test_memoryview_compare_multidim_zero_shapecCstdgddddgdd�}tdgdddgdddgdd	�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�|�|��|���td
gdddgd
d�}td
gddgddgdd	�}t|�}t|�}|�||�|�||�|�||�|�||�|�||�dS)NrWr�r�r�rJrrrrtr�rerz=lQz<lQ)rrMr&rrUr;r;r<�-test_memoryview_compare_multidim_zero_stridesrs&z@TestBufferProtocol.test_memoryview_compare_multidim_zero_stridesc	Csztttd��ddgdd�}|ddd�ddd	�f}tttd��ddgd
td�}|ddd�ddd	�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgdddgd
td�}d|dd<|ddd�ddd	�f}tdgdddgdttBd�}d|dd<|ddd�ddd	�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd��dddgdtd�}|dd�ddd	�f}tttd��dddgdd�}|dd�ddd	�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgddddgdttBd�}|dd�ddd	�f}tdgddddgdd�}|dd�ddd	�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tttd��dddgdtd�}|dd�ddd	�f}tttd��dddgdtd�}|dd�ddd	�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgddddgdttBd�}d|ddd<|dd�ddd	�f}tdgddddgdttBd�}d|ddd<|dd�ddd	�f}t|�}t|�}|�||�|�||�|�||�|�||�|�||�ttdd��}t|dddg�}t|dddgdtd�}t|dddgdt	tBd�}t|�}t|�}|�||�|�||�|�||�dgd}d |d!<t|dddg�}t|dddgd"td�}t|dddgd#t	tBd�}t|�}t|�}|�||�|�||�|�||�dS)$Nrer�r3rfrrr*r�rYrrr`ra)r*rYrr4z>Qqr�r)r{r�ZBbr)shellor�r*�Z5s0sP)ssushir�r*r\r2rcr)ssashimisslicedg�����4@)sramensspicygfffff�"@rXz
< 10p 9p dz
> 10p 9p d)
rr~rardrMr&r9r�r�r4)	rrhrLrirMr�rFrhrir;r;r<�+test_memoryview_compare_multidim_suboffsets�s�������
�z>TestBufferProtocol.test_memoryview_compare_multidim_suboffsetscCsldD�]`}tdgddddddg|dd�}tdgddddddg|dttBd	�}d
|ddd
d
d
<t|�}t|�}|�||�|�||�|�||�|�||�|�||�tdgddddddg|dd�}tdgddddddg|dttBd	�}d
|ddd
d
d
<t|�}t|�}|�||�|�||�|�||�|�||�|�||�qdS)N)rBr@rArCr'r�rr�rrrrr*)r'r%r#ZQLH)r*r*r*)rr�r4rMr&r9)r�	byteorderrXr>rFrr;r;r<�!test_memoryview_compare_not_equals8
"���z4TestBufferProtocol.test_memoryview_compare_not_equalcCst�ddddg�}t|�}|��|�tt|�|�t|jd�|�tt|�|�t|j�|�t|j�|�tt	dt
��|�t|jd�|�t|jdd�d	D]}|�t|j
|�q�t�ddddg�}t|�}t|�}|�||�|��|�||�|�||�|�||�dS)
Nrg�������?g������@gffffff
@r
z1.0 in mrr*)rWr�r'r�r�r�r�r�r
rJrLrN)rKrMr�rSr�rrrr�r�r�r�r��__getattribute__r&r9)rrFrDrGrrjrkr;r;r<�test_memoryview_check_released+s*z1TestBufferProtocol.test_memoryview_check_releasedcsXd�t�dgdd�}t|�}|�||�|�|��|���t�gdgdd�}t|�}|�||�|�|��|���t�fdd�td	�D�d
d
dgdd�}t|�}|�||�|�|��|���t�fd
d�td�D�dd
d
dd
gdd�}t|�}|�||�|�|��|���t�rTGdd�dtj�}|dd�}t|�}|�|��t|��dS)N)rOrPrQrRrSr�rTrr*z>hQiLlcsg|]}��qSr;r;r��rtr;r<r{bsz>TestBufferProtocol.test_memoryview_tobytes.<locals>.<listcomp>rVrrz=hQiLlcsg|]}��qSr;r;r�rsr;r<r{gsr�z<hQiLlc@s eZdZdejfdejfgZdS)z;TestBufferProtocol.test_memoryview_tobytes.<locals>.BEPointrXr>NrDr;r;r;r<rpsrr�r�)rrMr&r�rarrrR)rrrDrr
rFr;rsr<�test_memoryview_tobytesSs0&"�
z*TestBufferProtocol.test_memoryview_tobytescCs|�ttitd�|�ttdtd�tdddgdgdgd�}|�tt|td�td	d
dd�}d
D],}t|t|�}|�||�|�|d
d	�q`td	d
dtd�}d
D],}t|t|�}|�||�|�|d
d	�q�d
D]\}d	|d
<t|t|�}|�||�|�|d
d	�d|d
<|�|d
d�|�|d
d�q�tdgdgdtd�}d
D]>}t|t|�}|�t	|j
d�|�||�|�|��g��qJttt
d��dddgdtd�}d
D]*}t|t|�}|�t|���ggg��q�tdgdgdtd�}d
D]2}t|t|�}|�||�|�|��|����q�tdddgdgdtd�}d
D]2}t|t|�}|�||�|�|��|����q@tdddgdgdgtd�}d
D]d}t|t|�}|�||�|�|��|���|�t|jdd�|�|dd�|�|dd��q�|ddd�}d
D]d}t|t|�}|�||�|�|��|���|�t|jdd�|�|dd�|�|dd��q
ttt
d��ddgtd�}dD]*}t|t|�}|�t|���|����q�|�tt|td�t|t|�}|�t|���|���ttt
d��ddgttBd�}dD]*}t|t|�}|�t|���|����q|�tt|td�t|t|�}|�t|���|���ttt
d��ddgttBd�}d
D]<}|�tt|t|�t|t|�}|�t|���|����q�tdddddgdgdgd�}t|td�}|�|j�dS)Nrr1r�r*rrr�rrWr;rrrrrerr3r4rrrrr�r�rVr�r[)r�r)rrr�)rSrr5r6r0ZPyBUF_WRITErr&r�r�r�rr~rar�r4rdr7rJ)rrr$rDr;r;r<�test_memoryview_get_contiguousvs����z1TestBufferProtocol.test_memoryview_get_contiguouscCs�t�d�}t�ddddddg�}t|�}t�|�}td|�}|�|�|�|�	�|�t�d�}t
ttd��dddgdd	�}t|�}t�|�}td|�}|�|�|�|�	�|�dS)
Nrr*rrr�r�rrVr)
r5rerKrM�io�BytesIOr��readintor&r�rr~ra)rr	rFrDr�rrr;r;r<�test_memoryview_serializing�s





z.TestBufferProtocol.test_memoryview_serializingc	Cs�tttd���}t|�}|�t|�t|��|jdddgd�}|�t|�t|��|ddd�}tttd��ddd��}|�t|�t|��tttd��ddd	gtd
�}t|�}|�t|�t|��tttd��ddd	gd�}|ddd�dd�ddd�f}t|�}|�t|�t|��tttd��dd	dgt	d
�}|ddd�dd�ddd�f}t|�}|�t|�t|��tttd��dgdd
�}t|�}tttd��dgdd
�}t|�}|�||�|�t|�t|��tttd��dddgdd
�}t|�}|�
t|j�tttdd��dddgdd
�}t|�}|�
t|j�tttd��dddgdd
�}t|�}|�
t|j�tttdd��dddgdd
�}t|�}|�
t|j�dS)NrVr
rr�r�rYr�rr�r[r�rrrrr�r�rz= Lz< h)
rRr~rarMr&r�rrr4rdrSr��__hash__)	rrrDZmcZmxrrXrFr>r;r;r<�test_memoryview_hash	sJz'TestBufferProtocol.test_memoryview_hashcCs�tdddg�}t|�}t|�}|�t|j�~|��tdddg�}t|�}t|ttd�}t|ttd�}|�|j	|�|�t|j�~~|��tdddg�}t|�}t|�}t|�}|��|�t|j�~|��tdddg�}t|�}t|�}t|ttd�}t|ttd�}|�|j	|�|��|�t|j�~~|��tdddgdgt
d�}t|�}|jdddd	d
gdgd�t|�}t|�}|�|�
�|�
��t|�}	|�|	�
�|�
��|�|	�
�|�
��|��|	��|��|�|�
�|�
��~|��|��dd
�}
td�}t|��"}|
|�|�|dtd��W5QRXtttd��dddgdd�}t|ttd�}	t|	ttd�}|�|j	|�t|��8}|
|�|�|dd��
�dddgdddggg�W5QRXdtfD�]�}td�}t|���}~t|t|d�}	t|	���}~	t|t|d�}t|��^}
~|
|
�|
|�|
|�|�|dtd��|�|dtd��|�|
dtd��~
W5QRX~W5QRX~W5QRXtd�}t|���}~t|t|d�}	t|	���}~	t|t|d�}t|��b}
~|
|�|
|�|
|
�|�|dtd��|�|dtd��|�|
dtd��~~~
W5QRXW5QRXW5QRX�q�td�}|�t��2t|��}t|�}|dtd�kW5QRXW5QRXdS)Nr*rr�rGr�r[r�r�r�r4r3r�c	Sst|��}W5QRXdSr�)rM)rrkr;r;r<�catch22�s
z;TestBufferProtocol.test_memoryview_release.<locals>.catch22rwrr.rVrrr/r0)r�rMrrSr0r�r:�ND_REDIRECTr%rWr}r~r&rr��ordr~ra)rrFrDrrLrMrjrkrXr>r}r�r�r�r*r;r;r<�test_memoryview_releaseEs�

4





(
z*TestBufferProtocol.test_memoryview_releasecCs0tdd�td�D�dgdd�}t�ddd�td�D��}||fD]�}t|ttd�}t|ttd�}t|�}|�|j|�|�|j|�|�|j|�|�||�|�||�|�||�|�|dd	�|dd	��|�|dd	�|dd	��|�|dd	�|dd	��~~|�|dd	�|dd	��q@dS)
NcSsg|]}d|�qS�rr;rUr;r;r<r{�sz?TestBufferProtocol.test_memoryview_redirect.<locals>.<listcomp>rVrrcSsg|]}d|�qSr�r;rUr;r;r<r{�sr|r*r)	rrarKr:r~rMr%rWr&)rrrFrXr>r�rDr;r;r<�test_memoryview_redirect�s"z+TestBufferProtocol.test_memoryview_redirectcCs�d}dddddddd	d
ddd
g}|�ttddd�t�}t|�}|j||d|dddgdg|d�	td�D]}|�|||�qh~~t�}t|�}~~t�}t|td�}t|td�}t|�}|�	|j
|�|�	|j
|�|j||d|dddgdg|d�	~~~~t�}t|ttd�}t|ttd�}t|�}|�	|j
|�|�	|j
|�|�	|j
|�|j||d|dddgdg|d�	~~~~tdd�}t|�}|j|dd|dddgdg|d�	td�D]}|�|||��q�~~tdd�}t|�}~~tdd�}t|td�}t|td�}t|�}|�	|j
d�|�	|j
|�|j||d|dddgdg|d�	~~~~tdd�}t|ttd�}t|ttd�}t|�}|�	|j
d�|�	|j
|�|�	|j
|�|j||d|dddgdg|d�	~~~~dS)Nrrr*rrr�r�r�r4r3rWrerXTrVr�rFr|)Zlegacy_mode)rSrZstaticarrayrMr?rar&rr:r%rWr~)rr8rbrXr>rr�rDr;r;r<�$test_memoryview_from_static_exporter�s����
�

�
�z7TestBufferProtocol.test_memoryview_from_static_exportercCs,tdddgdgttBd�}|�tt|�dS)Nr*rrro)rrfZND_GETBUF_UNDEFINEDrSr0rMr�r;r;r<�#test_memoryview_getbuffer_undefined;sz6TestBufferProtocol.test_memoryview_getbuffer_undefinedcCs(tdddgdgtd�}|�tt|�dS)Nr*rrr[)rrfrSr0rM)rrXr;r;r<�test_issue_7385Asz"TestBufferProtocol.test_issue_7385N)F)Sr�r�r�rr?rTrnr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�rrrrr�
contextlib�contextmanagerrr,r6r8r>rHrNrVrYrZr[r_rbrjrkrlrnrprrrtruryr{r�r�r�r�r�r;r;r;r<r�s��K
2i
-'	0.Y #6!)>
		%qu
8	s<T	
5m8>5?H>Ha(#u<^r�__main__)rNN)r)r)r�r1r;)r�r1)r)N)F)F)r�)N)fr�Zunittest�testr�	itertoolsrr�randomrrr�warningsrrKrv�osZdecimalrZ	fractionsr	Z_testbuffer�ImportErrorrr5rZEnvironmentVarGuard�environ�catch_warningsrLr�Z
SHORT_TESTZNATIVEr6r7ZSTANDARDr=rQr8�copyrwZARRAYr�ZBYTEFMTrgrirfrYr`rcrprqrrrurvrxr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrr�r�r�Z
skipUnlessZTestCaserr��mainr;r;r;r<�<module>s� 


�$
	��
�	





�	



	


?

+

!





j


F1le Man4ger