o
    g×iN7  ć                   @   sø   d Z ddlZddlmZm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dS )a  
    Dataset slicing test module.

    Tests all supported slicing operations, including read/write and
    broadcasting operations.  Does not test type conversion except for
    corner cases overlapping with slicing; for example, when selecting
    specific fields of a compound type.
é    Né   )ŚTestCaseŚ	make_name)ŚFileŚMultiBlockSlicec                   @   s   e Zd Zdd Zdd ZdS )ŚBaseSlicingc                 C   s   t |  ” d| _d S )NŚw)r   ŚmktempŚf©Śself© r   śU/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/h5py/tests/test_slicing.pyŚsetUp   s   zBaseSlicing.setUpc                 C   ó   | j r
| j  ”  d S d S ©N©r
   Ścloser   r   r   r   ŚtearDown   ó   ’zBaseSlicing.tearDownN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r   r   r      s    r   c                   @   ó8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )ŚTestSingleElementzM
        Feature: Retrieving a single element works with NumPy semantics
    c                 C   s.   | j jt ddd}|d }|  |tj” dS )z; Single-element selection with [index] yields array scalar ©r   Śi1©Śdtyper   N©r
   Ścreate_datasetr   ŚassertIsInstanceŚnpŚint8©r   ŚdsetŚoutr   r   r   Śtest_single_index)   ó   z#TestSingleElement.test_single_indexc                 C   ó<   | j jt ddd}|d }|  |tj” |  |jd” dS )z3 Single-element selection with [()] yields ndarray r   r   r   r   N©r
   r    r   r!   r"   ŚndarrayŚassertEqualŚshaper$   r   r   r   Śtest_single_null/   ó   z"TestSingleElement.test_single_nullc                 C   r)   )z* Slicing with [...] yields scalar ndarray r   r
   ©r-   r   .Nr*   r$   r   r   r   Śtest_scalar_index6   r/   z#TestSingleElement.test_scalar_indexc                 C   s.   | j jt ddd}|d }|  |tj” dS )z' Slicing with [()] yields array scalar r   r   r0   Nr   r$   r   r   r   Śtest_scalar_null=   r(   z"TestSingleElement.test_scalar_nullc                 C   sZ   t  ddg”}t jd|d}| jjt d|d}|  |d |d ” |  |d t j” dS )z6 Compound scalar is numpy.void, not tuple (issue 135) )ŚaŚi4)ŚbŚf8)é   r   ©Śdatar   N)	r"   r   Śonesr
   r    r   r,   r!   Śvoid)r   ŚdtŚvr%   r   r   r   Śtest_compoundC   s
   zTestSingleElement.test_compoundN)	r   r   r   Ś__doc__r'   r.   r1   r2   r>   r   r   r   r   r   #   s    r   c                   @   r   )ŚTestObjectIndexzH
        Feature: numpy.object_ subtypes map to real Python objects
    c                 C   s<   | j jt dtjd}| j j|d< |  t|d tj” dS )z@ Indexing a reference dataset returns a h5py.Reference instance r   r   r   N©	r
   r    r   Śh5pyŚ	ref_dtypeŚrefr,   ŚtypeŚ	Reference©r   r%   r   r   r   Śtest_referenceQ   ó   zTestObjectIndex.test_referencec                 C   sX   | j  tddd”}|jd }| j jtddtjd}||d< |  t|d tj” d	S )
zL Indexing a region reference dataset returns a h5py.RegionReference
        Śx)é
   rK   Śf4.Śyr   r   r   N)	r
   r    r   Ś	regionrefrB   Śregionref_dtyper,   rE   ŚRegionReference)r   Śdset1ŚregrefŚdset2r   r   r   Śtest_regrefW   s
   
zTestObjectIndex.test_regrefc                 C   s^   t  ddtjfg”}| jjt d|d}d| jd jf|d< |d }|  t	|d tj
” d	S )
z> Compound types of which a reference is an element work right )r3   Śir5   r   r   é*   ś/r   r   N)r"   r   rB   rC   r
   r    r   rD   r,   rE   rF   ©r   r<   r%   r&   r   r   r   Śtest_reference_field`   s
   z$TestObjectIndex.test_reference_fieldc                 C   s<   | j jt dtjd}| j j|d< |  t|d tj” dS )z: Indexing returns a real Python object on scalar datasets r   r   NrA   rG   r   r   r   Śtest_scalarj   rI   zTestObjectIndex.test_scalarc                 C   s<   | j jt dtjddd}d|d< |  t|d t” dS )zJ Indexing a byte string dataset returns a real python byte string
        r   Śascii)Śencodingr   s   Hello there!r   N)r
   r    r   rB   Śstring_dtyper,   rE   ŚbytesrG   r   r   r   Śtest_bytestrp   s   zTestObjectIndex.test_bytestrN)	r   r   r   r?   rH   rT   rY   rZ   r_   r   r   r   r   r@   K   s    	
r@   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ŚTestSimpleSlicingzQ
        Feature: Simple NumPy-style slices (start:stop:step) are supported.
    c                 C   s4   t |  ” d| _t d”| _| jjd| jd| _d S )Nr   rK   rJ   r8   )r   r	   r
   r"   ŚarangeŚarrr    r%   r   r   r   r   r   }   s   zTestSimpleSlicing.setUpc                 C   r   r   r   r   r   r   r   r      r   zTestSimpleSlicing.tearDownc                 C   s$   |   | jdd | jdd ” dS )z0 Negative stop indexes work as they do in NumPy é   éž’’’N)ŚassertArrayEqualr%   rb   r   r   r   r   Śtest_negative_stop   s   $z$TestSimpleSlicing.test_negative_stopc                 C   sx   | j  t dd”}t d”}|dddf |dddf< |  t” ||dddf< W d   dS 1 s5w   Y  dS )z0Assigning to a 1D slice of a 2D dataset
        )rK   rc   rL   )rK   r   Nr   r   )r
   r    r   r"   ŚzerosŚassertRaisesŚ	TypeError)r   r%   rJ   r   r   r   Ś
test_write   s   
"’zTestSimpleSlicing.test_writeN)r   r   r   r?   r   r   rf   rj   r   r   r   r   r`   w   s    r`   c                   @   r   )ŚTestArraySlicingz<
        Feature: Array types are handled appropriately
    c                 C   sĀ   t  d”}| jjt d|d}|  |jd” |  |j|” |d }|  |jt  d”” |  |jd” |d }|  |jt  d”” |  |jd” |d	d
d	 }|  |jt  d”” |  |jd” dS )z; Read arrays tack array dimensions onto end of shape tuple ś(3,)f8©rK   r   .r6   )rK   é   r   ©rn   rc   é   )rn   rn   N)r"   r   r
   r    r   r,   r-   rX   r   r   r   Ś	test_read   s   
zTestArraySlicing.test_readc                 C   sV   t  d”}| jjt d|d}|  t” d|d< W d   dS 1 s$w   Y  dS )z@ Array fill from constant is not supported (issue 211).
        ś(3,)irm   r   rV   .N)r"   r   r
   r    r   rh   ri   )r   r<   r%   r   r   r   Śtest_write_broadcast°   s
   

"’z%TestArraySlicing.test_write_broadcastc                 C   sT   t  d”}| jjt d|d}t  g d¢”}||d< |d }|  t  ||k”” dS )zA Write a single element to the array

        Issue 211.
        rl   rm   r   )r   rc   g      @r7   N)r"   r   r
   r    r   ŚarrayŚ
assertTrueŚall)r   r<   r%   r9   r&   r   r   r   Śtest_write_elementŗ   s   
z#TestArraySlicing.test_write_elementc                 C   s   t  d”}t jd|d}t jd|d}| jjt d|d}||ddddf< |  |ddddf |” ||d	d
dddf< |  |d	d
dddf |” dS )z Write slices to array type rr   )rc   r   )r7   é   )rK   é	   é   r   rc   r7   rn   r   rx   é   rz   N)r"   r   r:   r
   r    r   re   )r   r<   Śdata1Śdata2r%   r   r   r   Śtest_write_slicesČ   s   
"z"TestArraySlicing.test_write_slicesc                 C   sJ   t  d”}| jjt d|d}|d }||d< |  t  |d |k”” dS )zO Read the contents of an array and write them back

        Issue 211.
        rl   rm   r   .N)r"   r   r
   r    r   ru   rv   rX   r   r   r   Śtest_roundtripŲ   s
   
zTestArraySlicing.test_roundtripN)	r   r   r   r?   rq   rs   rw   r~   r   r   r   r   r   rk      s    
rk   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	ŚTestZeroLengthSlicingz.
        Slices resulting in empty arrays
    c                 C   sŽ   t g d¢D ]f\}}| jjtd| |tdt| d}|  |j|” |d }|  |t	j
” |  |j|” |dd }|  |t	j
” |  |j|” t|dkrl|ddddf }|  |t	j
” |  |jdd d	” qdS )
z] Slice a dataset with a zero in its shape vector
            along the zero-length dimension )©r   )r   rn   )r   rc   r   rJ   r   ©r   Śmaxshape.Nr   rc   )r   r   ©Ś	enumerater
   r    r   ŚintŚlenr,   r-   r!   r"   r+   ©r   rU   r-   r%   r&   r   r   r   Ś test_slice_zero_length_dimensionģ   s   &ōz6TestZeroLengthSlicing.test_slice_zero_length_dimensionc                 C   s   t g d¢D ]8\}}| jjtd| |tdt| d}|  |j|” |dd }|  |t	j
” |  |jd|dd  ” qdS )z_ Slice a dataset with a zero in its shape vector
            along a non-zero-length dimension ))rn   r   )r   rc   r   )rc   r   r   rJ   r   r   Nr   r   r   r   r   r   r   Śtest_slice_other_dimensionż   s   &ūz0TestZeroLengthSlicing.test_slice_other_dimensionc                 C   s   t g d¢D ];\}}| jjtd| t |t”dt| d}|  |j	|” |dd }|  
|tj” |  |j	d|dd  ” qdS )z5 Get a slice of length zero from a non-empty dataset )ro   )rc   rc   )rc   r   rx   rJ   r   )r9   r   r   r   N)r   r
   r    r   r"   rg   r   r   r,   r-   r!   r+   r   r   r   r   Śtest_slice_of_length_zero  s   ,ūz/TestZeroLengthSlicing.test_slice_of_length_zeroN)r   r   r   r?   r   r   r   r   r   r   r   r   ę   s
    
r   c                   @   sT   e Zd ZdZe g d¢”ZejdedZdd Z	dd Z
d	d
 Zdd Zdd ZdS )ŚTestFieldNamesz*
        Field names for read & write
    ))r3   r
   )r5   rU   )ŚcrL   ©éd   r   c                 C   s0   t  | ” | jjdd| jd| _| j| jd< d S )NrJ   r   r   .)r   r   r
   r    r<   r%   r9   r   r   r   r   r     s   
zTestFieldNames.setUpc                 C   s   |   | jd | jd ” dS )z! Test read with field selections r3   N)re   r%   r9   r   r   r   r   rq     s   zTestFieldNames.test_readc                 C   s\   |   | jd | jd ” | j ” }| jjt |d}d|d< d|d< |   |d |d ” dS )z, Unicode field names for for read and write r3   r8   rV   N)re   r%   r9   Ścopyr
   r    r   ©r   r9   r%   r   r   r   Śtest_unicode_names"  s   
z!TestFieldNames.test_unicode_namesc                 C   sĄ   | j  ” }| jjt |d}|d  d9  < ||d< |  t |d |k”” |d  d9  < ||d< |  t |d |k”” |d  d9  < |d  d9  < ||d	< |  t |d |k”” d
S )z" Test write with field selections r8   r3   rc   .r5   r7   rn   r   )r3   r   N©r9   r   r
   r    r   ru   r"   rv   r   r   r   r   rj   ,  s   
zTestFieldNames.test_writec                 C   sH   | j  ” }| jjt |d}d|d< d|d< |  t |d |k”” dS )z4 Test write with non-compound source (single-field) r8   g      š?r5   .Nr   r   r   r   r   Śtest_write_noncompound<  s
   
z%TestFieldNames.test_write_noncompoundN)r   r   r   r?   r"   r   r<   r:   r9   r   rq   r   rj   r   r   r   r   r   r     s    
r   c                       s   e Zd Z f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  ZS )ŚTestMultiBlockSlicec                    s.   t   ”  t d”| _| jjd| jd| _d S )NrK   rJ   r8   )Śsuperr   r"   ra   rb   r
   r    r%   r   ©Ś	__class__r   r   r   H  s   
zTestMultiBlockSlice.setUpc                 C   s2   t  }|  | d”d” tj | j| | j” d S )NrK   ©r   r   rK   r   ©r   r,   Śindicesr"   ŚtestingŚassert_array_equalr%   rb   ©r   Śmbslicer   r   r   Śtest_defaultM  s   z TestMultiBlockSlice.test_defaultc                 C   s<   t ddddd}|  | d”d” tj | j| | j” d S )Nr   rK   r   ©ŚstartŚcountŚstrideŚblockr   r   r   r   r   r   Śtest_default_explicitT  s   z)TestMultiBlockSlice.test_default_explicitc                 C   ó>   t dd}|  | d”d” tj | j| t g d¢”” d S )Nr7   )r¢   rK   )r7   r   r{   r   )r7   rx   r{   é   rp   ry   ©r   r,   r   r"   r   r   r%   rt   r   r   r   r   Ś
test_startZ  ó   
"zTestMultiBlockSlice.test_startc                 C   r§   )NrØ   ©r£   rK   )r   r   rØ   r   )r   r   rc   rn   r7   rx   r{   r©   r   r   r   r   Ś
test_count`  s
   
’zTestMultiBlockSlice.test_countc                 C   sD   t dd}|  t” | d” W d    d S 1 sw   Y  d S )Nrz   r¬   rK   ©r   rh   Ś
ValueErrorr   r   r   r   r   Ś!test_count_more_than_length_errorh  s   
"’z5TestMultiBlockSlice.test_count_more_than_length_errorc                 C   r§   )Nrc   )r¤   rK   )r   rc   rx   r   )r   rc   r7   r{   rp   r©   r   r   r   r   Śtest_stridem  r«   zTestMultiBlockSlice.test_stridec                 C   sB   |   t” tddd d” W d    d S 1 sw   Y  d S )Nr   ©r¤   r„   rK   )rh   rÆ   r   r   r   r   r   r   Śtest_stride_zero_errors  s   "žz*TestMultiBlockSlice.test_stride_zero_errorc                 C   s8   t ddd}|  | d”d” tj | j| | j” d S )Nrc   r²   rK   )r   rc   rx   rc   r   r   r   r   r   Śtest_stride_block_equalx  s   z+TestMultiBlockSlice.test_stride_block_equalc                 C   sp   |   t” tdd W d    n1 sw   Y  |   t” tddd W d    d S 1 s1w   Y  d S )Nrn   )r„   rc   r²   )rh   rÆ   r   r   r   r   r   Ś!test_block_more_than_stride_error~  s   ’"’z5TestMultiBlockSlice.test_block_more_than_stride_errorc                 C   s@   t ddd}|  | d”d” tj | j| t g d¢”” d S )Nrn   rc   r²   rK   )r   rn   rn   rc   )r   r   rn   r7   r{   rØ   r©   r   r   r   r   Śtest_stride_more_than_block  s   "z/TestMultiBlockSlice.test_stride_more_than_blockc                 C   sJ   t ddddd}|  t” | d” W d    d S 1 sw   Y  d S )Nrc   rx   r7   r”   rK   r®   r   r   r   r   Ś test_block_overruns_extent_error  s   "’z4TestMultiBlockSlice.test_block_overruns_extent_errorc                 C   sD   t ddddd}|  | d”d” tj | j| t g d¢”” d S )	Nr   rc   rx   r7   r”   rK   )r   rx   rc   r7   )r   rc   rn   r7   r{   rØ   rp   ry   r©   r   r   r   r   Śtest_fully_described  s
   ’z(TestMultiBlockSlice.test_fully_describedc                 C   sB   t dddd}|  | d”d” tj | j| t g d¢”” d S )Nr   rn   rc   ©r¢   r¤   r„   rK   )r   rn   rn   rc   )r   rc   r7   rx   rØ   rp   r©   r   r   r   r   Śtest_count_calculated  s   "z)TestMultiBlockSlice.test_count_calculatedc                 C   sH   t dddd}|  t” | d” W d    d S 1 sw   Y  d S )Nrp   r7   rn   r¹   rK   r®   r   r   r   r   Ś test_zero_count_calculated_error   s   "’z4TestMultiBlockSlice.test_zero_count_calculated_error)r   r   r   r   r    r¦   rŖ   r­   r°   r±   r³   r“   rµ   r¶   r·   rø   rŗ   r»   Ś__classcell__r   r   r   r   r   F  s     r   )r?   Śnumpyr"   Ścommonr   r   rB   r   r   r   r   r@   r`   rk   r   r   r   r   r   r   r   Ś<module>   s   			(,R*6