
    1Vh(&                         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
 ddl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y)z{
    Attribute data transfer testing module

    Covers all data read/write and type-conversion operations for attributes.
    N   )TestCaseut)h5ah5sh5t)File)is_empty_dataspacec                       e Zd Zd Zd Zy)	BaseAttrsc                 B    t        | j                         d      | _        y )Nw)r	   mktempfselfs    J/home/dcms/DCMS/lib/python3.12/site-packages/h5py/tests/test_attrs_data.pysetUpzBaseAttrs.setUp   s    dkkmS)    c                 R    | j                   r| j                   j                          y y N)r   closer   s    r   tearDownzBaseAttrs.tearDown   s    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)
TestScalarzB
        Feature: Scalar types map correctly to array scalars
    c                     t        j                  dt         j                        | j                  j                  d<   | j                  j                  d   }| j                  |t         j                         y)z) Integers are read as correct NumPy type r   dtypexN)nparrayint8r   attrsassertIsInstance)r   outs     r   test_intzTestScalar.test_int*   sI    HHQbgg6Sffll3c277+r   c                 X   t        j                  ddg      }t        j                  d|      }|| j                  j                  d<   | j                  j                  d   }| j                  |t         j                         | j                  ||       | j                  |d   |d          y)z) Compound scalars are read as numpy.void )ai)br   )r   g@r!   r#   r.   N)r$   r"   r%   r   r'   r(   voidassertEqualr   dtdatar)   s       r   test_compoundzTestScalar.test_compound0   s    XXz:./xx+ Sffll3c277+d#S49-r   c                 Z   t        j                  dt        j                  t         j                        fdt        j                  t         j                        fg      }t        j
                  t        j
                  t        t        dd            t         j                        t        j
                  t        t        dd            t         j                        f|      d   }|| j                  j                  d	<   | j                  j                  d	   }| j                  ||d
       y)z; Compound scalars with vlen fields can be written and read r,   r.   r      r!      
   r   r#   Fcheck_alignmentN)r$   r"   h5py
vlen_dtypeint32r%   listranger   r'   assertArrayEqualr1   s       r   test_compound_with_vlen_fieldsz)TestScalar.test_compound_with_vlen_fields:   s    XXT__RXX67T__RXX679 : xx$uQ{"3288DeArl!3288DFMOQQSU !Sffll3 	c4?r   c                    t        j                  dt        j                  t         j                        fdt        j                  t         j                        fg      }t        j                  dt        j                  |      fdt         j
                  fg      }t        j                  t        dd      t         j                        t        j                  t        dd	      t         j                        f}t        j                  t        d
d      t         j                        t        j                  t        dd      t         j                        f}t        j                  t        j                  ||g|      df|      d   }|| j                  j                  d<   | j                  j                  d   }| j                  ||d       y)zK Compound scalars with nested compound vlen fields can be written and read r,   r.   f1f2r      r!      	   r8               r   r#   Fr9   N)r$   r"   r;   r<   r=   int64r%   r?   r   r'   r@   )r   dt_innerr2   inner1inner2r3   r)   s          r   &test_nesting_compound_with_vlen_fieldsz1TestScalar.test_nesting_compound_with_vlen_fieldsI   sR   88c4??288#<=!4??288#<=? @ XXdooh78bhh') * ((5A;bhh7((5A;bhh79 ((5R=9((5R=9; xx66"2(C ""$& !Sffll3c4?r   c                    t        j                  dt        j                         fdt        j                         fg      }t        j                  dt        j                  |      fg      }t        j
                  t        j
                  ddg|      f|      d   }|| j                  j                  d<   | j                  j                  d   }| j                  ||d	
       y)zV Compound scalars with vlen compounds containing vlen strings can be written and read r,   r.   r   )s   appless   bananas)s   peachess   orangesr!   r   r#   Fr9   N)	r$   r"   r;   string_dtyper<   r%   r   r'   r@   )r   rM   r2   r3   r)   s        r   #test_vlen_compound_with_vlen_stringz.TestScalar.test_vlen_compound_with_vlen_string_   s    88c4#4#4#67!4#4#4#679 : XXT__X6789xx#:<T"U]efhoqrsuv Sffll3c4?r   N)	r   r   r   __doc__r*   r4   rA   rP   rS   r   r   r   r   r   $   s#    ,.@@,
@r   r   c                       e Zd ZdZd Zd Zy)	TestArrayzK
        Feature: Non-scalar types are correctly retrieved as ndarrays
    c                    t        j                  dd      }|| j                  j                  d<   | j                  j                  d   }| j	                  |t         j                         | j                  |j                  d       y)z/ Single-element arrays are correctly recovered r   r   r!   r#   N)r$   ndarrayr   r'   r(   r0   shaper   r3   r)   s      r   test_singlezTestArray.test_singler   s^    zz$c* Sffll3c2::.D)r   c                 F   t        j                  dd      }d|dd d|dd || j                  j                  d	<   | j                  j                  d	   }| j	                  |t         j                         | j                  |j                  d       | j                  ||       y)
z' Rank-1 arrays are correctly recovered )*   r   r!   g      E@Ng     Gr8   #   r#   )r$   rY   r   r'   r(   r0   rZ   r@   r[   s      r   
test_multizTestArray.test_multiz   s    zz%s+QR Sffll3c2::.E*c4(r   N)r   r   r   rT   r\   r`   r   r   r   rV   rV   l   s    *	)r   rV   c                   @    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)	TestTypeszF
        Feature: All supported types can be stored in attributes
    c                    t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  f}|D ]~  }t        j                  d|      }d|d<   || j                  j                  d<   | j                  j                  d   }| j                  |j                  |       | j                  ||        y)z Storage of integer types rX   r!   r^   .r#   N)r$   r&   int16r=   rL   uint8uint16uint32uint64rY   r   r'   r0   r"   r@   r   dtypesr2   r3   r)   s        r   r*   zTestTypes.test_int   s    ''288RXXrxx((BIIryy"))= 	-B::d"-DDI $DFFLL&&,,s#CSYY+!!#t,	-r   c                 v   t        d dD              }|D ]  }t        j                  d|      }d|d<   || j                  j                  d<   | j                  j                  d   }t        d|j                  |       t        d	||       | j                  |j                  |       | j                  ||        y
)z! Storage of floating point types c              3   F   K   | ]  }t        j                  |        y wr   r$   r"   .0r#   s     r   	<genexpr>z'TestTypes.test_float.<locals>.<genexpr>   s     Iqrxx{I   !)z<f4z>f4z>f8z<f8rX   r!   gfffff&E@.r#   zdtype: zvalue: N)	tupler$   rY   r   r'   printr"   r0   r@   ri   s        r   
test_floatzTestTypes.test_float   s    I,HII 		-B::d"-DDI $DFFLL&&,,s#C)SYY+)S$'SYY+!!#t,		-r   c                 .   t        d dD              }|D ]~  }t        j                  d|      }d|d<   || j                  j                  d<   | j                  j                  d   }| j                  |j                  |       | j                  ||        y)	z Storage of complex types c              3   F   K   | ]  }t        j                  |        y wr   rm   rn   s     r   rp   z)TestTypes.test_complex.<locals>.<genexpr>   s     Kqrxx{Krq   )z<c8z>c8z<c16z>c16rX   r!   y33333A@.r#   N)rr   r$   rY   r   r'   r0   r"   r@   ri   s        r   test_complexzTestTypes.test_complex   s    K,JKK 	-B::d"-D$DI $DFFLL&&,,s#CSYY+!!#t,	-r   c                 :   t        d dD              }|D ]  }t        j                  d|      }d|d<   || j                  j                  d<   | j                  j                  d   }| j                  |j                  |       | j                  |d   |d           y	)
z! Storage of fixed-length strings c              3   F   K   | ]  }t        j                  |        y wr   rm   rn   s     r   rp   z(TestTypes.test_string.<locals>.<genexpr>   s     <qrxx{<rq   )z|S1z|S10rX   r!   h.r#   r   N)rr   r$   rY   r   r'   r0   r"   ri   s        r   test_stringzTestTypes.test_string   s    <O<< 	.B::d"-DDI $DFFLL&&,,s#CSYY+SVT!W-	.r   c                 h   t        j                  dt         j                        }d|d<   || j                  j                  d<   | j                  j                  d   }| j                  |j                  |j                         | j                  |d   |d          | j                  |d   |d          y)	z Storage of NumPy booleans rK   r!   )TF.r#   r   r   N)r$   rY   bool_r   r'   r0   r"   r[   s      r   	test_boolzTestTypes.test_bool   s     zz$bhh/S	 Sffll3DJJ/Qa)Qa)r   c                 d   t        j                  d      }t        j                  d|      }d|d<   || j                  j
                  d<   | j                  j
                  d   }| j                  |j                  |       | j                  |d   |d          | j                  |d	   |d	          y
)z# Storage of vlen byte string arraysascii)encodingr}   r!   )HellozHi there!  This is HDF5!.r#   r   r   N)r;   rR   r$   rY   r   r'   r0   r"   r1   s       r   test_vlen_string_arrayz TestTypes.test_vlen_string_array   s    0zz$b)7S	 Sffll3B'Qa)Qa)r   c                 f   d| j                   j                  d<   | j                   j                  d   }| j                  |d       | j                  t        |      t               t
        j                  j                  | j                   j                  d      }|j                         }| j                  t        |      t
        j                  j                         | j                  |j                         t
        j                  j                         | j                  |j                                y)z@ Storage of variable-length byte string scalars (auto-creation) s   Hellor#   r      xN)r   r'   r0   typestrr;   r   openidget_typer   TypeStringIDget_cset
CSET_ASCII
assertTrueis_variable_strr   r)   aidtids       r   test_string_scalarzTestTypes.test_string_scalar   s     %Sffll3g&cC(hhmmDFFIIt,llncDHH$9$9:)<)<=++-.r   c                    dt        d      z   dz   | j                  j                  d<   | j                  j                  d   }| j                  |dt        d      z   dz          | j                  t	        |      t
               t        j                  j                  | j                  j                  d      }|j                         }| j                  t	        |      t        j                  j                         | j                  |j                         t        j                  j                         | j                  |j!                                y)z< Storage of variable-length unicode strings (auto-creation) r   i@#  z!!r#   r   N)chrr   r'   r0   r   r   r;   r   r   r   r   r   r   r   	CSET_UTF8r   r   r   s       r   test_unicode_scalarzTestTypes.test_unicode_scalar   s     %s6{2U:Sffll3hV4u<=cC(hhmmDFFIIt,llncDHH$9$9:););<++-.r   N)r   r   r   rT   r*   rt   rw   r{   r   r   r   r   r   r   r   rb   rb      s/    
--
-
.	**//r   rb   c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
	TestEmptyc                    t         j                  |        t        j                  t        j                        }t
        j                  j                         }|j                  d       t        j                  | j                  j                  d||      }t        j                  t        j                  d            | _        y )Nr8   r   S10)r   r   r   createNULLr   C_S1copyset_sizer   r   r   r;   Emptyr$   r"   	empty_obj)r   sidr   r   s       r   r   zTestEmpty.setUp   so    jj"hhmmoRjjD#s3BHHUO4r   c                 j    | j                  | j                  | j                  j                  d          y Nr#   )r0   r   r   r'   r   s    r   	test_readzTestEmpty.test_read   s&    NNDFFLL-	
r   c                     | j                   | j                  j                  d<   | j                  t	        t        j                  | j                  j                  d                   y )Ny   y)r   r   r'   r   r
   r   r   r   r   s    r   
test_writezTestEmpty.test_write  s=     NNS*388DFFIIt+DEFr   c                     | j                  t              5  | j                  j                  j	                  dd       d d d        y # 1 sw Y   y xY w)Nr#   r   )assertRaisesOSErrorr   r'   modifyr   s    r   test_modifyzTestEmpty.test_modify  s=    w' 	(FFLLQ'	( 	( 	(s   'AAc                     t        | j                  j                  j                               }| j	                  | j
                  g|       y r   r>   r   r'   valuesr0   r   r   r   s     r   test_valueszTestEmpty.test_values  s7    dffll))+,^^f	
r   c                     t        | j                  j                  j                               }| j	                  d| j
                  fg|       y r   r>   r   r'   itemsr0   r   r   r   s     r   
test_itemszTestEmpty.test_items  <    TVV\\'')*DNN#$e	
r   c                     t        | j                  j                  j                               }| j	                  | j
                  g|       y r   r   r   s     r   test_itervalueszTestEmpty.test_itervalues  s7    dffll))+,^^f	
r   c                     t        | j                  j                  j                               }| j	                  d| j
                  fg|       y r   r   r   s     r   test_iteritemszTestEmpty.test_iteritems  r   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s+    5

G(



r   r   c                       e Zd ZdZd Zy)TestWriteExceptionzH
        Ensure failed attribute writes don't leave garbage behind.
    c                     d}	 || j                   j                  d<   | j                  t              5  | j                   j                  d    ddd       y# t        $ r Y Cw xY w# 1 sw Y   yxY w)z0 ValueError on string write wipes out attribute s   Hello Hellor#   N)r   r'   
ValueErrorr   KeyError)r   ss     r   r   zTestWriteException.test_write,  sn     	 !DFFLL x( 	FFLL	 	  			 	s   A A$	A! A!$A-N)r   r   r   rT   r   r   r   r   r   r   &  s    r   r   )rT   numpyr$   commonr   r   r;   r   r   r   r	   h5py._hl.baser
   r   r   rV   rb   r   r   r   r   r   <module>r      sr           , E@ E@P)	 )4l/	 l/^.
	 .
b r   