
    1Vh26                         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e      Z G d	 d
e      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)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                       e Zd Zd Zd Zy)BaseSlicingc                 B    t        | j                         d      | _        y )Nw)r	   mktempfselfs    G/home/dcms/DCMS/lib/python3.12/site-packages/h5py/tests/test_slicing.pysetUpzBaseSlicing.setUp   s    dkkmS)    c                 R    | j                   r| j                   j                          y y Nr   closer   s    r   tearDownzBaseSlicing.tearDown        66FFLLN r   N)__name__
__module____qualname__r   r    r   r   r   r      s    *r   r   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestSingleElementzM
        Feature: Retrieving a single element works with NumPy semantics
    c                     | j                   j                  ddd      }|d   }| j                  |t        j                         y)z; Single-element selection with [index] yields array scalar xr   i1dtyper   Nr   create_datasetassertIsInstancenpint8r   dsetouts      r   test_single_indexz#TestSingleElement.test_single_index*   s:    vv$$S$d$;1gc277+r   c                     | j                   j                  ddd      }|d   }| j                  |t        j                         | j                  |j                  d       y)z3 Single-element selection with [()] yields ndarray r#   r$   r%   r&   r   Nr   r)   r*   r+   ndarrayassertEqualshaper-   s      r   test_single_nullz"TestSingleElement.test_single_null0   sN    vv$$S$d$;2hc2::.D)r   c                     | j                   j                  ddd      }|d   }| j                  |t        j                         | j                  |j                  d       y)z* Slicing with [...] yields scalar ndarray r#   r   r   r5   r'   .Nr2   r-   s      r   test_scalar_indexz#TestSingleElement.test_scalar_index7   sN    vv$$S#$>3ic2::.B'r   c                     | j                   j                  ddd      }|d   }| j                  |t        j                         y)z' Slicing with [()] yields array scalar r#   r   r%   r8   Nr(   r-   s      r   test_scalar_nullz"TestSingleElement.test_scalar_null>   s:    vv$$S$$?2hc277+r   c                    t        j                  ddg      }t        j                  d|      }| j                  j	                  dd|      }| j                  |d   |d          | j                  |d   t         j                         y)	z6 Compound scalar is numpy.void, not tuple (issue 135) )ai4)bf8)   r&   foodatar   N)r+   r'   onesr   r)   r4   r*   void)r   dtvr.   s       r   test_compoundzTestSingleElement.test_compoundD   sp    XXz*-.GGD#vv$$UDq$9a!A$'d1grww/r   N)	r   r   r   __doc__r0   r6   r9   r;   rI   r   r   r   r!   r!   $   s     ,*(,0r   r!   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestObjectIndexzH
        Feature: numpy.object_ subtypes map to real Python objects
    c                     | j                   j                  ddt        j                        }| j                   j                  |d<   | j                  t        |d         t        j                         y)z@ Indexing a reference dataset returns a h5py.Reference instance r#   r$   r&   r   Nr   r)   h5py	ref_dtyperefr4   type	Referencer   r.   s     r   test_referencezTestObjectIndex.test_referenceR   sN    vv$$S$dnn$E&&**Qd1g7r   c                    | j                   j                  dd      }|j                  d   }| j                   j                  ddt        j                        }||d<   | j                  t        |d         t        j                         y)	zL Indexing a region reference dataset returns a h5py.RegionReference
        r#   )
   rW   .yr$   r&   r   N)r   r)   	regionrefrO   regionref_dtyper4   rR   RegionReference)r   dset1regrefdset2s       r   test_regrefzTestObjectIndex.test_regrefX   sp     %%c73%%%c4t7K7K%LaeAh)=)=>r   c                 ,   t        j                  ddt        j                  fg      }| j                  j                  dd|      }d| j                  d   j                  f|d<   |d   }| j                  t        |d	         t        j                         y
)z> Compound types of which a reference is an element work right )r=   ir?   r#   r$   r&   *   /r   r   N)
r+   r'   rO   rP   r   r)   rQ   r4   rR   rS   r   rG   r.   r/   s       r   test_reference_fieldz$TestObjectIndex.test_reference_fielda   sx    XXz3"789vv$$S$b$9tvvc{'Q1gc!ft~~6r   c                     | j                   j                  ddt        j                        }| j                   j                  |d<   | j                  t        |d         t        j                         y)z: Indexing returns a real Python object on scalar datasets r#   r   r&   NrN   rT   s     r   test_scalarzTestObjectIndex.test_scalark   sN    vv$$S"DNN$C66::Rd2h8r   c                     | j                   j                  ddt        j                  d            }d|d<   | j	                  t        |d         t               y)	zJ Indexing a byte string dataset returns a real python byte string
        r#   r$   ascii)encodingr&   s   Hello there!r   N)r   r)   rO   string_dtyper4   rR   bytesrT   s     r   test_bytestrzTestObjectIndex.test_bytestrq   sL     vv$$S$d6G6GQX6Y$Z!Qd1g.r   N)	r   r   r   rJ   rU   r_   re   rg   rm   r   r   r   rL   rL   L   s     8?79/r   rL   c                   (    e Zd ZdZd Zd Zd Zd Zy)TestSimpleSlicingzQ
        Feature: Simple NumPy-style slices (start:stop:step) are supported.
    c                     t        | j                         d      | _        t        j                  d      | _        | j                  j                  d| j
                        | _        y )Nr   rW   r#   rC   )r	   r   r   r+   arangearrr)   r.   r   s    r   r   zTestSimpleSlicing.setUp~   sD    dkkmS)99R=FF))#DHH)=	r   c                 R    | j                   r| j                   j                          y y r   r   r   s    r   r   zTestSimpleSlicing.tearDown   r   r   c                 \    | j                  | j                  dd | j                  dd        y)z0 Negative stop indexes work as they do in NumPy    N)assertArrayEqualr.   rr   r   s    r   test_negative_stopz$TestSimpleSlicing.test_negative_stop   s&    dii"otxx"~>r   c                     | j                   j                  dd      }t        j                  d      }|dddf   |dddf<   | j	                  t
              5  ||dddf<   ddd       y# 1 sw Y   yxY w)z0Assigning to a 1D slice of a 2D dataset
        x2)rW   ru   )rW   r   Nr   r   )r   r)   r+   zerosassertRaises	TypeError)r   r.   r#   s      r   
test_writezTestSimpleSlicing.test_write   sm     vv$$T73HHWq!tWQT
y) 	DAJ	 	 	s   
A**A3N)r   r   r   rJ   r   r   rx   r~   r   r   r   ro   ro   x   s    >
?r   ro   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)TestArraySlicingz<
        Feature: Array types are handled appropriately
    c                    t        j                  d      }| j                  j                  dd|      }| j	                  |j
                  d       | j	                  |j                  |       |d   }| j	                  |j                  t        j                  d             | j	                  |j
                  d       |d   }| j	                  |j                  t        j                  d             | j	                  |j
                  d	       |d
dd
   }| j	                  |j                  t        j                  d             | j	                  |j
                  d       y)z; Read arrays tack array dimensions onto end of shape tuple (3,)f8r#   rW   r&   .r@   )rW      r   r   ru      )r   r   N)r+   r'   r   r)   r4   r5   rd   s       r   	test_readzTestArraySlicing.test_read   s
   XXhvv$$SR$8U+R( 3iBHHTN3F+ 1gBHHTN3D) 1Qq5kBHHTN3E*r   c                     t        j                  d      }| j                  j                  dd|      }| j	                  t
              5  d|d<   ddd       y# 1 sw Y   yxY w)z@ Array fill from constant is not supported (issue 211).
        (3,)ir#   r   r&   rb   .N)r+   r'   r   r)   r|   r}   )r   rG   r.   s      r   test_write_broadcastz%TestArraySlicing.test_write_broadcast   sY     XXgvv$$S%r$:y) 	DI	 	 	s   	AA!c                     t        j                  d      }| j                  j                  dd|      }t        j                  g d      }||d<   |d   }| j                  t        j                  ||k(               y)zA Write a single element to the array

        Issue 211.
        r   r#   r   r&   )r   ru   g      @rA   N)r+   r'   r   r)   array
assertTrueall)r   rG   r.   rD   r/   s        r   test_write_elementz#TestArraySlicing.test_write_element   sf    
 XXhvv$$S%r$:xx	"Q1gsd{+,r   c                 ^   t        j                  d      }t        j                  d|      }t        j                  d|      }| j                  j	                  dd|      }||dddd	f<   | j                  |dddd	f   |       ||d
ddddf<   | j                  |d
ddddf   |       y)z Write slices to array type r   )ru   r&   )rA      r#   )rW   	      r   ru   rA   r   r   r      r   N)r+   r'   rE   r   r)   rw   )r   rG   data1data2r.   s        r   test_write_slicesz"TestArraySlicing.test_write_slices   s    XXgB'R(vv$$S)2$>Qq1Wd1Qqs7mU3"Q!QrT\d1ac1R4<0%8r   c                     t        j                  d      }| j                  j                  dd|      }|d   }||d<   | j	                  t        j
                  |d   |k(               y)zO Read the contents of an array and write them back

        Issue 211.
        r   r#   r   r&   .N)r+   r'   r   r)   r   r   rd   s       r   test_roundtripzTestArraySlicing.test_roundtrip   s]    
 XXhvv$$S%r$:3iS	tCyC/01r   N)	r   r   r   rJ   r   r   r   r   r   r   r   r   r   r      s     +,-9 2r   r   c                   "    e Zd ZdZd Zd Zd Zy)TestZeroLengthSlicingz.
        Slices resulting in empty arrays
    c           
         t        g d      D ]/  \  }}| j                  j                  d|z  |t        dt	        |      z        }| j                  |j                  |       |d   }| j                  |t        j                         | j                  |j                  |       |dd }| j                  |t        j                         | j                  |j                  |       t	        |      dkD  s|ddddf   }| j                  |t        j                         | j                  |j                  dd d	       2 y)
z] Slice a dataset with a zero in its shape vector
            along the zero-length dimension )r   )r   r   )r   ru   r   x%dr   r'   maxshape.Nr   ru   )r   r   
	enumerater   r)   intlenr4   r5   r*   r+   r3   r   ra   r5   r.   r/   s        r    test_slice_zero_length_dimensionz6TestZeroLengthSlicing.test_slice_zero_length_dimension   s
    "";< 	8HAu66((q%sWUXY^U_M_(`DTZZ/s)C!!#rzz2SYY.q'C!!#rzz2SYY.5zA~1bqb5k%%c2::6  2A7	8r   c           
      X   t        g d      D ]  \  }}| j                  j                  d|z  |t        dt	        |      z        }| j                  |j                  |       |dd }| j                  |t        j                         | j                  |j                  d|dd z           y)z_ Slice a dataset with a zero in its shape vector
            along a non-zero-length dimension ))r   r   )r   ru   r   )ru   r   r   r   r   r   Nr   r$   r   r   s        r   test_slice_other_dimensionz0TestZeroLengthSlicing.test_slice_other_dimension   s     ""@A 	8HAu66((q%sWUXY^U_M_(`DTZZ/r(C!!#rzz2SYYU12Y7	8r   c           	      ~   t        g d      D ]  \  }}| j                  j                  d|z  t        j                  |t
              dt        |      z        }| j                  |j                  |       |dd }| j                  |t        j                         | j                  |j                  d|dd z           y)z5 Get a slice of length zero from a non-empty dataset )r   )ru   ru   )ru   r   r   r   r   )rD   r   r   r   N)r   r   r)   r+   r{   r   r   r4   r5   r*   r3   r   s        r   test_slice_of_length_zeroz/TestZeroLengthSlicing.test_slice_of_length_zero  s    !"=> 	8HAu66((qrxxs7KV]^abg^hVh(iDTZZ/q)C!!#rzz2SYYU12Y7	8r   N)r   r   r   rJ   r   r   r   r   r   r   r   r      s    8"88r   r   c                   ~    e Zd ZdZ ej
                  g d      Z ej                  de      Zd Z	d Z
d Zd Zd	 Zy
)TestFieldNamesz*
        Field names for read & write
    ))r=   r   )r?   ra   )cf4d   r&   c                     t         j                  |        | j                  j                  dd| j                        | _        | j                  | j
                  d<   y )Nr#   r   r&   .)r   r   r   r)   rG   r.   rD   r   s    r   r   zTestFieldNames.setUp  sB    $FF))#vTWW)E			#r   c                 \    | j                  | j                  d   | j                  d          y)z! Test read with field selections r=   N)rw   r.   rD   r   s    r   r   zTestFieldNames.test_read  s"    diindiin=r   c                     | j                  | j                  d   | j                  d          d| j                  d<   | j                  j                         }d|d<   | j                  | j                  d   |d          y)z, Unicode field names for for read and write r=   rb   N)rw   r.   rD   copy)r   rD   s     r   test_unicode_namesz!TestFieldNames.test_unicode_names#  sd    diindiin=		#yy~~S	diind3i8r   c                 2   | j                   j                         }|dxx   dz  cc<   || j                  d<   | j                  t	        j
                  | j                  d   |k(               |dxx   dz  cc<   || j                  d<   | j                  t	        j
                  | j                  d   |k(               |dxx   dz  cc<   |dxx   dz  cc<   || j                  d<   | j                  t	        j
                  | j                  d   |k(               y	)
z" Test write with field selections r=   ru   .r?   rA   r   r   )r=   r   NrD   r   r.   r   r+   r   r   r   s     r   r~   zTestFieldNames.test_write+  s    		 c
a
		#tyy~678c
a
		#tyy~678c
a
c
a
"		'tyy~678r   c                     | j                   j                         }d|d<   d| j                  d<   | j                  t	        j
                  | j                  d   |k(               y)z4 Test write with non-compound source (single-field) g      ?r?   .Nr   r   s     r   test_write_noncompoundz%TestFieldNames.test_write_noncompound9  sJ    		 c
		#tyy~678r   N)r   r   r   rJ   r+   r'   rG   rE   rD   r   r   r   r~   r   r   r   r   r   r     sE     
7	8B2776$D#
>999r   r   c                   r     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Z xZS )TestMultiBlockSlicec                     t         |           t        j                  d      | _        | j
                  j                  d| j                        | _        y )NrW   r#   rC   )superr   r+   rq   rr   r   r)   r.   )r   	__class__s    r   r   zTestMultiBlockSlice.setUpC  s:    99R=FF))#DHH)=	r   c                     t               }| j                  |j                  d      d       t        j                  j                  | j                  |   | j                         y )NrW   r   r   rW   r   r
   r4   indicesr+   testingassert_array_equalr.   rr   r   mbslices     r   test_defaultz TestMultiBlockSlice.test_defaultH  sD    !#,m<


%%dii&8$((Cr   c                     t        dddd      }| j                  |j                  d      d       t        j                  j                  | j                  |   | j                         y )Nr   rW   r   startcountstrideblockr   r   r   s     r   test_default_explicitz)TestMultiBlockSlice.test_default_explicitO  sL    !AQG,m<


%%dii&8$((Cr   c                     t        d      }| j                  |j                  d      d       t        j                  j                  | j                  |   t        j                  g d             y )NrA   )r   rW   )rA   r   r   r   )rA   r   r      r   r   r
   r4   r   r+   r   r   r.   r   r   s     r   
test_startzTestMultiBlockSlice.test_startU  sL    !*,l;


%%dii&8"((CU:VWr   c                     t        d      }| j                  |j                  d      d       t        j                  j                  | j                  |   t        j                  g d             y )Nr   r   rW   )r   r   r   r   )r   r   ru   r   rA   r   r   r   r   s     r   
test_countzTestMultiBlockSlice.test_count[  sO    !*,l;


%%IIg)> ?	
r   c                     t        d      }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   rW   r
   r|   
ValueErrorr   r   s     r   !test_count_more_than_length_errorz5TestMultiBlockSlice.test_count_more_than_length_errorc  s;    !+z* 	 OOB	  	  	 s	   =Ac                     t        d      }| j                  |j                  d      d       t        j                  j                  | j                  |   t        j                  g d             y )Nru   )r   rW   )r   ru   r   r   )r   ru   rA   r   r   r   r   s     r   test_stridezTestMultiBlockSlice.test_strideh  sK    !+,l;


%%dii&8"((?:STr   c                     | j                  t              5  t        dd      j                  d       d d d        y # 1 sw Y   y xY w)Nr   r   r   rW   )r|   r   r
   r   r   s    r   test_stride_zero_errorz*TestMultiBlockSlice.test_stride_zero_errorn  s:    z* 	;1A.66r:	; 	; 	;s	   <Ac                     t        dd      }| j                  |j                  d      d       t        j                  j                  | j                  |   | j                         y )Nru   r   rW   )r   ru   r   ru   r   r   s     r   test_stride_block_equalz+TestMultiBlockSlice.test_stride_block_equals  sH    !!4,l;


%%dii&8$((Cr   c                     | j                  t              5  t        d       d d d        | j                  t              5  t        dd       d d d        y # 1 sw Y   5xY w# 1 sw Y   y xY w)Nr   )r   ru   r   )r|   r   r
   r   s    r   !test_block_more_than_stride_errorz5TestMultiBlockSlice.test_block_more_than_stride_errory  sa    z* 	%!$	% z* 	/1A.	/ 	/	% 	%	/ 	/s   A A#A #A,c                     t        dd      }| j                  |j                  d      d       t        j                  j                  | j                  |   t        j                  g d             y )Nr   ru   r   rW   )r   r   r   ru   )r   r   r   rA   r   r   r   r   s     r   test_stride_more_than_blockz/TestMultiBlockSlice.test_stride_more_than_block  sN    !!4,l;


%%dii&8"((CU:VWr   c                     t        dddd      }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nru   r   rA   r   rW   r   r   s     r    test_block_overruns_extent_errorz4TestMultiBlockSlice.test_block_overruns_extent_error  sA    !1AFz* 	 OOB	  	  	 s   A  A	c                     t        dddd      }| j                  |j                  d      d       t        j                  j                  | j                  |   t        j                  g d             y )	Nr   ru   r   rA   r   rW   )r   r   ru   rA   )r   ru   r   rA   r   r   r   r   r   r   s     r   test_fully_describedz(TestMultiBlockSlice.test_fully_described  sU    !1AF,l;


%%IIg)A B	
r   c                     t        ddd      }| j                  |j                  d      d       t        j                  j                  | j                  |   t        j                  g d             y )Nr   r   ru   r   r   r   rW   )r   r   r   ru   )r   ru   rA   r   r   r   r   r   s     r   test_count_calculatedz)TestMultiBlockSlice.test_count_calculated  sP    !!1=,l;


%%dii&8"((CU:VWr   c                     t        ddd      }| j                  t              5  |j                  d       d d d        y # 1 sw Y   y xY w)Nr   rA   r   r   rW   r   r   s     r    test_zero_count_calculated_errorz4TestMultiBlockSlice.test_zero_count_calculated_error  s?    !!1=z* 	 OOB	  	  	 s	   ?A)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __classcell__)r   s   @r   r   r   A  sU    >
DDX
 
U;
D/X 
X r   r   )rJ   numpyr+   commonr   r   rO   r   r   r   r	   r
   r   r!   rL   ro   r   r   r   r   r   r   r   <module>r      s          &( &0 &0P*/k */X :O2{ O2d(8K (8T-9[ -9`_ + _ r   