o
    2h!I                     @   s   d Z ddlZddlZddlZddlmZmZ G dd deZG dd deZ	G d	d
 d
eZ
G dd deZG dd deZG dd deZG dd deZG dd deZG dd deZdd ZG dd deZdS )a  
    Tests the h5py.Dataset.__getitem__ method.

    This module does not specifically test type conversion.  The "type" axis
    therefore only tests objects which interact with the slicing system in
    unreliable ways; for example, compound and array types.

    See test_dataset_getitem_types for type-conversion tests.

    Tests are organized into TestCases by dataset shape and type.  Test
    methods vary by slicing arg type.

    1. Dataset shape:
        Empty
        Scalar
        1D
        3D

    2. Type:
        Float
        Compound
        Array

    3. Slicing arg types:
        Ellipsis
        Empty tuple
        Regular slice
        MultiBlockSlice
        Indexing
        Index list
        Boolean mask
        Field names
    N   )utTestCasec                   @   t   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )	TestEmptyc                 C   sh   t |  tjtjj}tjj }|	d tj
| jjd||}t|| _ttd| _d S )N
      xS10)r   setUph5pyh5screateNULLh5tC_S1copyset_sizeh5dfidDatasetdsetEmptynpdtype	empty_obj)selfsidtiddsid r    Z/var/www/html/chatgem/venv/lib/python3.10/site-packages/h5py/tests/test_dataset_getitem.pyr
   6   s   

zTestEmpty.setUpc                 C      |  | jjd dS  Verify number of dimensions r   NassertEqualr   ndimr   r    r    r!   	test_ndim?      zTestEmpty.test_ndimc                 C      |  | jjd dS  Verify shape Nr&   r   shaper(   r    r    r!   
test_shapeC   r*   zTestEmpty.test_shapec                 C   r+   r,   r&   r   sizer(   r    r    r!   	test_sizeG   r*   zTestEmpty.test_sizec                 C   r"   ) Verify nbytes r   N)r&   r   nbytesr(   r    r    r!   test_nbytesK   r*   zTestEmpty.test_nbytesc                 C      |  | jd | j d S N.r&   r   r   r(   r    r    r!   test_ellipsisO      zTestEmpty.test_ellipsisc                 C   r7   Nr    r9   r(   r    r    r!   
test_tupleR   r;   zTestEmpty.test_tuplec                 C   >   |  t | jdd  W d   dS 1 sw   Y  dS z slice -> ValueError r      NassertRaises
ValueErrorr   r(   r    r    r!   
test_sliceU      "zTestEmpty.test_slicec                 C   >   |  t | jt   W d   dS 1 sw   Y  dS z MultiBlockSlice -> ValueError NrB   rC   r   r   MultiBlockSlicer(   r    r    r!   test_multi_block_sliceZ   rE   z TestEmpty.test_multi_block_slicec                 C   :   |  t | jd  W d   dS 1 sw   Y  dS z index -> ValueError r   NrA   r(   r    r    r!   
test_index_      "zTestEmpty.test_indexc                 C   >   |  t | jg d  W d   dS 1 sw   Y  dS  index list -> ValueError r         NrA   r(   r    r    r!   test_indexlistd   rE   zTestEmpty.test_indexlistc                 C   H   t jddd}| t | j|  W d   dS 1 sw   Y  dS z mask -> ValueError Tboolr   Nr   arrayrB   rC   r   r   maskr    r    r!   	test_maski      "zTestEmpty.test_maskc                 C   rK   )z field name -> ValueError fieldNrA   r(   r    r    r!   test_fieldnameso   rN   zTestEmpty.test_fieldnamesN__name__
__module____qualname__r
   r)   r0   r3   r6   r:   r=   rD   rJ   rM   rU   r^   ra   r    r    r    r!   r   4   s    	r   c                   @   r   )TestScalarFloatc                 C   s4   t |  tjdtjd| _| jjd| jd| _d S )N     @E@rY   xdata)	r   r
   r   r[   doublerj   r   create_datasetr   r(   r    r    r!   r
   w      
zTestScalarFloat.setUpc                 C   r"   r#   r%   r(   r    r    r!   r)   |   r*   zTestScalarFloat.test_ndimc                 C   r"    Verify size r   Nr1   r(   r    r    r!   r3      r*   zTestScalarFloat.test_sizec                 C      |  | jj| jjj dS r4   Nr&   r   r5   rj   r   itemsizer(   r    r    r!   r6         zTestScalarFloat.test_nbytesc                 C      |  | jjt  dS r,   r&   r   r/   tupler(   r    r    r!   r0         zTestScalarFloat.test_shapec                 C      | j d }| || j dS z Ellipsis -> scalar ndarray .Nr   assertArrayEqualrj   r   outr    r    r!   r:         
zTestScalarFloat.test_ellipsisc                 C   s    | j d }| || j  dS )z () -> bare item r    N)r   r|   rj   itemr}   r    r    r!   r=      s   
zTestScalarFloat.test_tuplec                 C   r>   r?   rA   r(   r    r    r!   rD      rE   zTestScalarFloat.test_slicec                 C   rF   rG   rH   r(   r    r    r!   rJ      rE   z&TestScalarFloat.test_multi_block_slicec                 C   rK   rL   rA   r(   r    r    r!   rM      rN   zTestScalarFloat.test_indexc                 C   rO   rP   rA   r(   r    r    r!   rU      rE   zTestScalarFloat.test_indexlistc                 C   rV   rW   rZ   r\   r    r    r!   r^      r_   zTestScalarFloat.test_maskc                 C   rK   z& field name -> ValueError (no fields) r`   NrA   r(   r    r    r!   ra      rN   zTestScalarFloat.test_fieldnamesNrc   rd   re   r
   r)   r3   r6   r0   r:   r=   rD   rJ   rM   rU   r^   ra   r    r    r    r!   rf   u   s    rf   c                   @   r   )TestScalarCompoundc                 C   s6   t |  tjdg dd| _| jjd| jd| _d S )N)rg   iHello))ar   )bi)cz|S10rY   rh   ri   )r   r
   r   r[   rj   r   rl   r   r(   r    r    r!   r
         
zTestScalarCompound.setUpc                 C   r"   r#   r%   r(   r    r    r!   r)      r*   zTestScalarCompound.test_ndimc                 C   ru   r,   rv   r(   r    r    r!   r0      rx   zTestScalarCompound.test_shapec                 C   r"   rn   r1   r(   r    r    r!   r3      r*   zTestScalarCompound.test_sizec                 C   rp   rq   rr   r(   r    r    r!   r6      rt   zTestScalarCompound.test_nbytesc                 C   s@   | j d }| |tj | |j| jj | |j| jj dS rz   )r   assertIsInstancer   ndarrayr&   r/   rj   r   r}   r    r    r!   r:      s   
z TestScalarCompound.test_ellipsisc                 C   s.   | j d }| |tj | |j| jj dS )z () -> np.void instance r    N)r   r   r   voidr&   r   rj   r}   r    r    r!   r=         
zTestScalarCompound.test_tuplec                 C   r>   r?   rA   r(   r    r    r!   rD      rE   zTestScalarCompound.test_slicec                 C   rF   rG   rH   r(   r    r    r!   rJ      rE   z)TestScalarCompound.test_multi_block_slicec                 C   rK   rL   rA   r(   r    r    r!   rM      rN   zTestScalarCompound.test_indexc                 C   rO   rP   rA   r(   r    r    r!   rU      rE   z!TestScalarCompound.test_indexlistc                 C   rV   )z mask -> ValueError  TrX   rY   NrZ   r\   r    r    r!   r^      r_   zTestScalarCompound.test_maskc                 C   s.   | j d }| |tj | || j d  dS )z field name -> bare value r   N)r   r   r   float32r&   r}   r    r    r!   ra      r   z"TestScalarCompound.test_fieldnamesNrb   r    r    r    r!   r      s    r   c                   @   r   )TestScalarArrayc                 C   sP   t |  td| _tjg ddd| _| jjdd| jd| _	| j| j	d< d S )Nz(3,2)f))g	@i)*   g33333X@)gQ	@r   r   rY   rh   r    .)
r   r
   r   r   dtr[   rj   r   rl   r   r(   r    r    r!   r
     s
   
zTestScalarArray.setUpc                 C   s$   |  | jjd |  | jjd dS )r$   rS   r   N)r&   rj   r'   r   r(   r    r    r!   r)   
  s   zTestScalarArray.test_ndimc                 C   r"   rn   r1   r(   r    r    r!   r3     r*   zTestScalarArray.test_sizec                 C   s   |  | jj| jjj dS rq   )r&   r   r5   r   rs   r(   r    r    r!   r6     rt   zTestScalarArray.test_nbytesc                 C   s&   |  | jjd |  | jjt  dS )r-   )   rS   N)r&   rj   r/   r   rw   r(   r    r    r!   r0     s   zTestScalarArray.test_shapec                 C   ry   )z2 Ellipsis -> ndarray promoted to underlying shape .Nr{   r}   r    r    r!   r:     r   zTestScalarArray.test_ellipsisc                 C   ry   ) () -> same as ellipsis .Nr{   r}   r    r    r!   r=   !  r   zTestScalarArray.test_tuplec                 C   r>   r?   rA   r(   r    r    r!   rD   &  rE   zTestScalarArray.test_slicec                 C   rF   rG   rH   r(   r    r    r!   rJ   +  rE   z&TestScalarArray.test_multi_block_slicec                 C   rK   rL   rA   r(   r    r    r!   rM   0  rN   zTestScalarArray.test_indexc                 C   s:   |  t | jg   W d   dS 1 sw   Y  dS )rQ   NrA   r(   r    r    r!   rU   5  rN   zTestScalarArray.test_indexlistc                 C   rV   rW   rZ   r\   r    r    r!   r^   :  r_   zTestScalarArray.test_maskc                 C   rK   r   rA   r(   r    r    r!   ra   @  rN   zTestScalarArray.test_fieldnamesNr   r    r    r    r!   r     s    r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )Test1DZeroFloatc                 C   2   t |  tjddd| _| jjd| jd| _d S )Nr   r   rY   rh   ri   r   r
   r   onesrj   r   rl   r   r(   r    r    r!   r
   H     
zTest1DZeroFloat.setUpc                 C   r"   r$   r   Nr%   r(   r    r    r!   r)   M  r*   zTest1DZeroFloat.test_ndimc                 C   r"   )r-   r   Nr.   r(   r    r    r!   r0   Q  r*   zTest1DZeroFloat.test_shapec                 C      |  | j| jtjd  dS )z' Ellipsis -> ndarray of matching shape .NassertNumpyBehaviorr   rj   r   s_r(   r    r    r!   r:   U     zTest1DZeroFloat.test_ellipsisc                 C   r   )r   r    Nr   r(   r    r    r!   r=   Y  r   zTest1DZeroFloat.test_tuplec                 C   s    |  | j| jtjdd  dS )z  slice -> ndarray of shape (0,) r   r@   Nr   r(   r    r    r!   rD   ]  s    zTest1DZeroFloat.test_slicec                 C       |  | j| jtjdd  d S N   rT   r   r(   r    r    r!   test_slice_stop_less_than_starta      z/Test1DZeroFloat.test_slice_stop_less_than_startc                 C   rK   )z index -> out of range r   NrB   
IndexErrorr   r(   r    r    r!   rM   d  rN   zTest1DZeroFloat.test_indexc                 C   s   |  | j| jtjg   dS )z index list Nr   r(   r    r    r!   rU   i  r   zTest1DZeroFloat.test_indexlistc                 C   s.   t jddd}| j| j| jt j| dd dS )z# mask -> ndarray of matching shape r   rX   rY   Tskip_fast_readerN)r   r   r   r   rj   r   r\   r    r    r!   r^   m  s   
zTest1DZeroFloat.test_maskc                 C   rK   r   rA   r(   r    r    r!   ra   x  rN   zTest1DZeroFloat.test_fieldnamesN)rc   rd   re   r
   r)   r0   r:   r=   rD   r   rM   rU   r^   ra   r    r    r    r!   r   F  s    r   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCS )DTest1DFloatc                 C   s4   t |  tdd| _| jjd| jd| _d S )N   r   rh   ri   )	r   r
   r   arangeastyperj   r   rl   r   r(   r    r    r!   r
     rm   zTest1DFloat.setUpc                 C   r"   r   r%   r(   r    r    r!   r)     r*   zTest1DFloat.test_ndimc                 C   r"   )r-   )r   Nr.   r(   r    r    r!   r0     r*   zTest1DFloat.test_shapec                 C      |  | j| jtjd  d S r8   r   r(   r    r    r!   r:        zTest1DFloat.test_ellipsisc                 C   r   r<   r   r(   r    r    r!   r=     r   zTest1DFloat.test_tuplec                 C   r   )Nr   r@   r   r(   r    r    r!   test_slice_simple  r   zTest1DFloat.test_slice_simplec                 C   s    |  | j| jtjdd  d S )Nr@   r   r(   r    r    r!   test_slice_zerosize  r   zTest1DFloat.test_slice_zerosizec                 C   "   |  | j| jtjddd  d S )Nr   r   r   r   r(   r    r    r!   test_slice_strides     "zTest1DFloat.test_slice_stridesc                 C   r   )Nir   r   r(   r    r    r!   test_slice_negindexes  r   z!Test1DFloat.test_slice_negindexesc                 C   r   r   r   r(   r    r    r!   r     r   z+Test1DFloat.test_slice_stop_less_than_startc                 C   r   )Nd   i  r   r   r(   r    r    r!   test_slice_outofrange  r   z!Test1DFloat.test_slice_outofrangec                 C   s@   |  t | jddd  W d   dS 1 sw   Y  dS )z we disallow negative steps NrA   r(   r    r    r!   test_slice_backwards  s   "z Test1DFloat.test_slice_backwardsc                 C   s"   |  | j| jtjd d d  d S )Nr   r   r(   r    r    r!   test_slice_zerostride  r   z!Test1DFloat.test_slice_zerostridec                 C   r   )Nr   r   r(   r    r    r!   test_index_simple  r   zTest1DFloat.test_index_simplec                 C   r   )Nr   r(   r    r    r!   test_index_neg  r   zTest1DFloat.test_index_negc                 C   s:   |  t | jd   W d    d S 1 sw   Y  d S NrB   	TypeErrorr   r(   r    r    r!   test_index_none     "zTest1DFloat.test_index_nonec                 C   s:   |  t | ji   W d   dS 1 sw   Y  dS )z Illegal slicing argument Nr   r(   r    r    r!   test_index_illegal  rN   zTest1DFloat.test_index_illegalc                 C   s:   |  t | jd  W d    d S 1 sw   Y  d S Nr   r   r(   r    r    r!   test_index_outofrange  r   z!Test1DFloat.test_index_outofrangec                 C   s    |  | j| jtjg d  d S NrR   r   r(   r    r    r!   test_indexlist_simple  r   z!Test1DFloat.test_indexlist_simplec              	   C   s&   |  | j| jtjtg d  d S r   r   r   rj   r   r   r[   r(   r    r    r!   test_indexlist_numpyarray  s   &z%Test1DFloat.test_indexlist_numpyarrayc                 C   s"   |  | j| jtjdgdf  d S Nr   .r   r(   r    r    r!   $test_indexlist_single_index_ellipsis  r   z0Test1DFloat.test_indexlist_single_index_ellipsisc                 C   s(   |  | j| jtjtdgdf  d S r   r   r(   r    r    r!   /test_indexlist_numpyarray_single_index_ellipsis  s   (z;Test1DFloat.test_indexlist_numpyarray_single_index_ellipsisc              	   C   s*   |  | j| jtjtg ddf  d S )NrR   .r   r(   r    r    r!   "test_indexlist_numpyarray_ellipsis  s   *z.Test1DFloat.test_indexlist_numpyarray_ellipsisc                 C   s   |  | j| jtjg   d S r   r   r(   r    r    r!   test_indexlist_empty  r   z Test1DFloat.test_indexlist_emptyc                 C   s<   |  t | jdg  W d    d S 1 sw   Y  d S r   r   r(   r    r    r!   test_indexlist_outofrange  s   "z%Test1DFloat.test_indexlist_outofrangec                 C   rO   )z8 we require index list values to be strictly increasing )r   r   rS   Nr   r(   r    r    r!   test_indexlist_nonmonotonic  rE   z'Test1DFloat.test_indexlist_nonmonotonicc                 C   sZ   |  | j| jtjg d  | t | jddg  W d    d S 1 s&w   Y  d S )N)r   rS   r   r   )r   r   rj   r   r   rB   r   r(   r    r    r!   !test_indexlist_monotonic_negative  s   "z-Test1DFloat.test_indexlist_monotonic_negativec                 C   rO   )z! we forbid repeated index values )r   r   rS   Nr   r(   r    r    r!   test_indexlist_repeated  rE   z#Test1DFloat.test_indexlist_repeatedc                 C   &   | j | j| jtj| jdk dd d S )NiTr   r   r(   r    r    r!   test_mask_true     
zTest1DFloat.test_mask_truec                 C   r   )Nr   Tr   r   r(   r    r    r!   test_mask_false  r   zTest1DFloat.test_mask_falsec                 C   r   )NrT   Tr   r   r(   r    r    r!   test_mask_partial  r   zTest1DFloat.test_mask_partialc                 C   sD   |  t | jtjddd  W d   dS 1 sw   Y  dS )z4 we require the boolean mask shape to match exactly )rS   rX   rY   N)rB   r   r   r   r   r(   r    r    r!   test_mask_wrongsize  s   "zTest1DFloat.test_mask_wrongsizec                 C   rK   r   rA   r(   r    r    r!   ra     rN   zTest1DFloat.test_fieldnamesN)$rc   rd   re   r
   r)   r0   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   ra   r    r    r    r!   r   ~  sD    			r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Test2DZeroFloatc                 C   r   )Nr   r   r   rY   rh   ri   r   r(   r    r    r!   r
     r   zTest2DZeroFloat.setUpc                 C   r"   r$   rS   Nr%   r(   r    r    r!   r)     r*   zTest2DZeroFloat.test_ndimc                 C   r"   )r-   r   Nr.   r(   r    r    r!   r0     r*   zTest2DZeroFloat.test_shapec                 C   (   |  | j| jtjddg df  dS z see issue #473 N)r   r   rS   r   r(   r    r    r!   rU        (zTest2DZeroFloat.test_indexlistN)rc   rd   re   r
   r)   r0   rU   r    r    r    r!   r     s
    r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )Test2DFloatc                 C   r   )NrT   r   r   rY   rh   ri   r   r(   r    r    r!   r
   $  r   zTest2DFloat.setUpc                 C   r"   r   r%   r(   r    r    r!   r)   )  r*   zTest2DFloat.test_ndimc                 C   r"   )ro      Nr1   r(   r    r    r!   r3   -  r*   zTest2DFloat.test_sizec                 C   s   |  | jjd| jjj  dS )r4   r   Nrr   r(   r    r    r!   r6   1  s   zTest2DFloat.test_nbytesc                 C   r"   )r-   r   Nr.   r(   r    r    r!   r0   5  r*   zTest2DFloat.test_shapec                 C   r   r   r   r(   r    r    r!   rU   9  r   zTest2DFloat.test_indexlistc                 C   s<   |  | j| jtjd d g f  |  | j| jtjg   d S r   r   r(   r    r    r!   test_index_emptylist=  s    z Test2DFloat.test_index_emptylistN)
rc   rd   re   r
   r)   r3   r6   r0   rU   r   r    r    r    r!   r   "  s    r   c                   @   s.   e Zd Zdd Zeejdk ddd ZdS )TestVeryLargeArrayc                 C   s    t |  | jjddd| _d S )Nrh   )i   i   )r/   )r   r
   r   rl   r   r(   r    r    r!   r
   D  s   
zTestVeryLargeArray.setUp        z&Maximum integer size >= 2**31 requiredc                 C   s   |  | jjd d S )Nr   r1   r(   r    r    r!   r3   H  r*   zTestVeryLargeArray.test_sizeN)	rc   rd   re   r
   r   skipIfsysmaxsizer3   r    r    r    r!   r   B  s    r   c              
   C   st   t jt jj}|d |t jj t t j| j	dt j
jt jd|}tj|d d tdtj d S )N)r      a)rT   r   )r   h5pr   DATASET_CREATE	set_chunkset_fill_timer   FILL_TIME_NEVERr   r   r   
IEEE_F64LEr   create_simpler   testingassert_array_equalzerosfloat64)writable_filedcpldsr    r    r!   test_read_no_fill_valueM  s   

$r   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )TestBoolIndexz0
    Tests for indexing with Boolean arrays
    c                    s6   t    tddd| _| jjd| jd| _d S )N	   r   r   rh   ri   )	superr
   r   r   reshapearrr   rl   r   r(   	__class__r    r!   r
   ^  r   zTestBoolIndex.setUpc                 C   s,   t jg dd d f }| | j| j| d S )N)FTF)r   r   r   r   r   r   selr    r    r!   test_select_first_axisc  s   z$TestBoolIndex.test_select_first_axisc                 C   sP   t jg dd d f }| t | j|  W d    d S 1 s!w   Y  d S )N)FTFF)r   r   rB   r   r   r   r    r    r!   test_wrong_sizeg  s   "zTestBoolIndex.test_wrong_size)rc   rd   re   __doc__r
   r  r  __classcell__r    r    r   r!   r   Z  s
    r   )r  r   numpyr   r   commonr   r   r   rf   r   r   r   r   r   r   r   r   r   r    r    r    r!   <module>   s"   	"ACIE8  