a
    v=ic26  ć                   @   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m	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é   )ŚutŚTestCase)Śh5sŚh5tŚh5d)Ś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   śh/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/h5py/tests/test_slicing.pyŚsetUp   s    zBaseSlicing.setUpc                 C   s   | j r| j  ”  d S ©N©r   Ścloser   r   r   r   ŚtearDown    s    zBaseSlicing.tearDownN)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r   r   r
      s   r
   c                   @   s8   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dddd}|d }|  |tj” dS )z; Single-element selection with [index] yields array scalar Śx©r   Śi1©Śdtyper   N©r   Ścreate_datasetŚassertIsInstanceŚnpZint8©r   ŚdsetŚoutr   r   r   Śtest_single_index*   s    z#TestSingleElement.test_single_indexc                 C   s:   | j jdddd}|d }|  |tj” |  |jd” dS )z3 Single-element selection with [()] yields ndarray r   r   r   r   r   N©r   r!   r"   r#   ŚndarrayŚassertEqualŚshaper$   r   r   r   Śtest_single_null0   s    z"TestSingleElement.test_single_nullc                 C   s:   | j jdddd}|d }|  |tj” |  |jd” dS )z* Slicing with [...] yields scalar ndarray r   r   r   ©r+   r   .Nr(   r$   r   r   r   Śtest_scalar_index7   s    z#TestSingleElement.test_scalar_indexc                 C   s,   | j jdddd}|d }|  |tj” dS )z' Slicing with [()] yields array scalar r   r   r   r-   Nr    r$   r   r   r   Śtest_scalar_null>   s    z"TestSingleElement.test_scalar_nullc                 C   sX   t  ddg”}t jd|d}| jjdd|d}|  |d |d ” |  |d t j” dS )	z6 Compound scalar is numpy.void, not tuple (issue 135) )ŚaŚi4)ŚbŚf8)é   r   Zfoo©Śdatar   N)r#   r   Śonesr   r!   r*   r"   Śvoid)r   ŚdtŚvr%   r   r   r   Śtest_compoundD   s
    zTestSingleElement.test_compoundN)	r   r   r   Ś__doc__r'   r,   r.   r/   r;   r   r   r   r   r   $   s   r   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )ŚTestObjectIndexzH
        Feature: numpy.object_ subtypes map to real Python objects
    c                 C   s:   | j jd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   r   N©r   r!   Śh5pyŚ	ref_dtypeŚrefr*   ŚtypeŚ	Reference©r   r%   r   r   r   Śtest_referenceR   s    zTestObjectIndex.test_referencec                 C   sN   | j  dd”}|jd }| j jddtjd}||d< |  t|d tj” dS )	zL Indexing a region reference dataset returns a h5py.RegionReference
        r   )é
   rF   .Śyr   r   r   N)r   r!   Z	regionrefr?   Zregionref_dtyper*   rB   ZRegionReference)r   Zdset1ZregrefZdset2r   r   r   Śtest_regrefX   s
    
zTestObjectIndex.test_regrefc                 C   s\   t  ddtjfg”}| jjd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 )r0   Śir2   r   r   r   é*   ś/r   r   N)
r#   r   r?   r@   r   r!   rA   r*   rB   rC   ©r   r9   r%   r&   r   r   r   Śtest_reference_fielda   s
    z$TestObjectIndex.test_reference_fieldc                 C   s:   | j jd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   r   Nr>   rD   r   r   r   Śtest_scalark   s    zTestObjectIndex.test_scalarc                 C   s:   | j jd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   r   Śascii)Śencodingr   s   Hello there!r   N)r   r!   r?   Zstring_dtyper*   rB   ŚbytesrD   r   r   r   Śtest_bytestrq   s    zTestObjectIndex.test_bytestrN)	r   r   r   r<   rE   rH   rM   rN   rR   r   r   r   r   r=   L   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   rF   r   r5   )r   r   r   r#   ŚarangeŚarrr!   r%   r   r   r   r   r   ~   s    zTestSimpleSlicing.setUpc                 C   s   | j r| j  ”  d S r   r   r   r   r   r   r      s    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%   rU   r   r   r   r   Śtest_negative_stop   s    z$TestSimpleSlicing.test_negative_stopc                 C   sr   | j  dd”}t d”}|dddf |dddf< |  t”  ||dddf< W d   n1 sd0    Y  dS )z0Assigning to a 1D slice of a 2D dataset
        Zx2)rF   rV   )rF   r   Nr   r   )r   r!   r#   ŚzerosŚassertRaisesŚ	TypeError)r   r%   r   r   r   r   Ś
test_write   s
    
zTestSimpleSlicing.test_writeN)r   r   r   r<   r   r   rY   r]   r   r   r   r   rS   x   s
   rS   c                   @   s8   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d ZdS )ŚTestArraySlicingz<
        Feature: Array types are handled appropriately
    c                 C   sĄ   t  d”}| jjd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,)f8r   ©rF   r   .r3   )rF   é   r   ©ra   rV   é   )ra   ra   N)r#   r   r   r!   r*   r+   rL   r   r   r   Ś	test_read   s    
zTestArraySlicing.test_readc                 C   sR   t  d”}| jjdd|d}|  t” d|d< W d   n1 sD0    Y  dS )z@ Array fill from constant is not supported (issue 211).
        ś(3,)ir   r`   r   rJ   .N)r#   r   r   r!   r[   r\   )r   r9   r%   r   r   r   Śtest_write_broadcast±   s    
z%TestArraySlicing.test_write_broadcastc                 C   sR   t  d”}| jjdd|d}t  g d¢”}||d< |d }|  t  ||k”” dS )zA Write a single element to the array

        Issue 211.
        r_   r   r`   r   )r   rV   g      @r4   N)r#   r   r   r!   ŚarrayŚ
assertTrueŚall)r   r9   r%   r6   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d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 re   )rV   r   )r4   é   r   )rF   é	   é   r   rV   r4   ra   r   rk   é   rm   N)r#   r   r7   r   r!   rX   )r   r9   Zdata1Śdata2r%   r   r   r   Śtest_write_slicesÉ   s    
z"TestArraySlicing.test_write_slicesc                 C   sH   t  d”}| jjdd|d}|d }||d< |  t  |d |k”” dS )zO Read the contents of an array and write them back

        Issue 211.
        r_   r   r`   r   .N)r#   r   r   r!   rh   ri   rL   r   r   r   Śtest_roundtripŁ   s
    
zTestArraySlicing.test_roundtripN)	r   r   r   r<   rd   rf   rj   rp   rq   r   r   r   r   r^      s   
r^   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 ]Ę\}}| jjd| |tdt| d}|  |j|” |d }|  |tj	” |  |j|” |dd }|  |tj	” |  |j|” t|dkr|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   ra   )r   rV   r   śx%dr   ©r   Śmaxshape.Nr   rV   )r   r   ©
Ś	enumerater   r!   ŚintŚlenr*   r+   r"   r#   r)   ©r   rI   r+   r%   r&   r   r   r   Ś test_slice_zero_length_dimensionķ   s     z6TestZeroLengthSlicing.test_slice_zero_length_dimensionc                 C   s|   t g d¢D ]j\}}| jj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 ))ra   r   )r   rV   r   )rV   r   r   rt   r   ru   Nr   r   rw   r{   r   r   r   Śtest_slice_other_dimensionž   s     z0TestZeroLengthSlicing.test_slice_other_dimensionc                 C   s   t g d¢D ]p\}}| jj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 )rb   )rV   rV   )rV   r   rk   rt   r   )r6   rv   r   rs   N)rx   r   r!   r#   rZ   ry   rz   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   rr   ē   s   
rr   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
    ))r0   r   )r2   rI   )ŚcZf4©éd   r   c                 C   s0   t  | ” | jjdd| jd| _| j| jd< d S )Nr   r   r   .)r
   r   r   r!   r9   r%   r6   r   r   r   r   r     s    
zTestFieldNames.setUpc                 C   s   |   | jd | jd ” dS )z! Test read with field selections r0   N)rX   r%   r6   r   r   r   r   rd     s    zTestFieldNames.test_readc                 C   sN   |   | jd | jd ” d| jd< | j ” }d|d< |   | jd |d ” dS )z, Unicode field names for for read and write r0   rJ   N)rX   r%   r6   Ścopy)r   r6   r   r   r   Śtest_unicode_names#  s
    

z!TestFieldNames.test_unicode_namesc                 C   sŗ   | j  ” }|d  d9  < || jd< |  t | jd |k”” |d  d9  < || jd< |  t | jd |k”” |d  d9  < |d  d9  < || jd< |  t | jd |k”” d	S )
z" Test write with field selections r0   rV   .r2   r4   ra   r   )r0   r   N©r6   r   r%   rh   r#   ri   ©r   ro   r   r   r   r]   +  s    



zTestFieldNames.test_writec                 C   s:   | j  ” }d|d< d| jd< |  t | jd |k”” dS )z4 Test write with non-compound source (single-field) g      š?r2   .Nr   r   r   r   r   Śtest_write_noncompound9  s    

z%TestFieldNames.test_write_noncompoundN)r   r   r   r<   r#   r   r9   r7   r6   r   rd   r   r]   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 )NrF   r   r5   )Śsuperr   r#   rT   rU   r   r!   r%   r   ©Ś	__class__r   r   r   C  s    
zTestMultiBlockSlice.setUpc                 C   s2   t  }|  | d”d” tj | j| | j” d S )NrF   ©r   r   rF   r   ©r	   r*   Śindicesr#   ŚtestingŚassert_array_equalr%   rU   ©r   Zmbslicer   r   r   Śtest_defaultH  s    z TestMultiBlockSlice.test_defaultc                 C   s<   t ddddd}|  | d”d” tj | j| | j” d S )Nr   rF   r   ©ŚstartŚcountŚstrideŚblockr   r   r   r   r   r   Śtest_default_explicitO  s    z)TestMultiBlockSlice.test_default_explicitc                 C   s>   t dd}|  | d”d” tj | j| t g d¢”” d S )Nr4   )r   rF   )r4   r   rn   r   )r4   rk   rn   é   rc   rl   ©r	   r*   r   r#   r   r   r%   rg   r   r   r   r   Ś
test_startU  s    
zTestMultiBlockSlice.test_startc                 C   s>   t dd}|  | d”d” tj | j| t g d¢”” d S )Nr   ©r   rF   )r   r   r   r   )r   r   rV   ra   r4   rk   rn   r   r   r   r   r   Ś
test_count[  s
    
’zTestMultiBlockSlice.test_countc                 C   sB   t dd}|  t” | d” W d    n1 s40    Y  d S )Nrm   r   rF   ©r	   r[   Ś
ValueErrorr   r   r   r   r   Ś!test_count_more_than_length_errorc  s    
z5TestMultiBlockSlice.test_count_more_than_length_errorc                 C   s>   t dd}|  | d”d” tj | j| t g d¢”” d S )NrV   )r   rF   )r   rV   rk   r   )r   rV   r4   rn   rc   r   r   r   r   r   Śtest_strideh  s    
zTestMultiBlockSlice.test_stridec                 C   s@   |   t”" tddd d” W d    n1 s20    Y  d S )Nr   ©r   r   rF   )r[   r   r	   r   r   r   r   r   Śtest_stride_zero_errorn  s    z*TestMultiBlockSlice.test_stride_zero_errorc                 C   s8   t ddd}|  | d”d” tj | j| | j” d S )NrV   r¢   rF   )r   rV   rk   rV   r   r   r   r   r   Śtest_stride_block_equals  s    z+TestMultiBlockSlice.test_stride_block_equalc                 C   sn   |   t” tdd W d    n1 s*0    Y  |   t” tddd W d    n1 s`0    Y  d S )Nra   )r   rV   r¢   )r[   r   r	   r   r   r   r   Ś!test_block_more_than_stride_errory  s    (z5TestMultiBlockSlice.test_block_more_than_stride_errorc                 C   s@   t ddd}|  | d”d” tj | j| t g d¢”” d S )Nra   rV   r¢   rF   )r   ra   ra   rV   )r   r   ra   r4   rn   r   r   r   r   r   r   Śtest_stride_more_than_block  s    z/TestMultiBlockSlice.test_stride_more_than_blockc                 C   sH   t ddddd}|  t” | d” W d    n1 s:0    Y  d S )NrV   rk   r4   r   rF   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   rV   rk   r4   r   rF   )r   rk   rV   r4   )r   rV   ra   r4   rn   r   rc   rl   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   ra   rV   ©r   r   r   rF   )r   ra   ra   rV   )r   rV   r4   rk   r   rc   r   r   r   r   r   Śtest_count_calculated  s    z)TestMultiBlockSlice.test_count_calculatedc                 C   sF   t dddd}|  t” | d” W d    n1 s80    Y  d S )Nrc   r4   ra   r©   rF   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   A  s   r   )r<   Śnumpyr#   Ścommonr   r   r?   r   r   r   r   r	   r
   r   r=   rS   r^   rr   r   r   r   r   r   r   Ś<module>
   s   		(,R*0