
    di%                     |   d Z ddlZddlmZ ddlmZmZ ddlZddlm	Z	 ddlm
Z
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 G d de          Z G d de          Z G d de          Z G d de          Zd ZdS )z
    Attributes testing module

    Covers all operations which access the .attrs property, with the
    exception of data read/write and type conversion.  Those operations
    are tested by module test_attrs_data.
    N)MutableMapping   )TestCaseut)File)h5ah5t)AttributeManagerc                       e Zd Zd Zd ZdS )	BaseAttrsc                 T    t          |                                 d          | _        d S )Nw)r   mktempfselfs    5lib/python3.11/site-packages/h5py/tests/test_attrs.pysetUpzBaseAttrs.setUp    s    dkkmmS))    c                 J    | j         r| j                                          d S d S N)r   closer   s    r   tearDownzBaseAttrs.tearDown#   s)    6 	FLLNNNNN	 	r   N)__name__
__module____qualname__r   r    r   r   r   r      s2        * * *    r   r   c                       e Zd ZdZd ZdS )TestReprzI Feature: AttributeManager provide a helpful
        __repr__ string
    c                 V   | j                             d          }|j                            dd           |                     t          |j                  t                     |j                                         |                     t          |j                  t                     d S )Ngrpattr   )	r   create_groupattrscreateassertIsInstancereprstridr   )r   r!   s     r   	test_reprzTestRepr.test_repr-   s    f!!%((	"""d39oos333d39oos33333r   N)r   r   r   __doc__r*   r   r   r   r   r   '   s-         4 4 4 4 4r   r   c                   H    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZdS )
TestAccesszG
        Feature: Attribute creation/retrieval via special methods
    c                     d| j         j        d<   |                     t          | j         j                                                  dg           |                     | j         j        d         d           dS )z) Attribute creation by direct assignment       @aNr   r$   assertEquallistkeysr   s    r   test_createzTestAccess.test_create;   se    Sdfl//1122SE:::c*C00000r   c                    | j         j                            dd           |                     t	          | j         j                                                  dg           |                     | j         j        d         d           dS )z' Attribute creation by create() method r0   r/   N)r   r$   r%   r2   r3   r4   r   s    r   test_create_2zTestAccess.test_create_2A   sq    C%%%dfl//1122SE:::c*C00000r   c                    d| j         j        d<   |                     t          | j         j                                                  dg           |                     | j         j        d         d           d| j         j        d<   |                     t          | j         j                                                  dg           |                     | j         j        d         d           dS )z- Attributes are modified by direct assignment   r0      Nr1   r   s    r   test_modifyzTestAccess.test_modifyG   s    Sdfl//1122SE:::c*A...Sdfl//1122SE:::c*A.....r   c                 F   | j         j                            dd           |                     t	          | j         j                                                  dg           |                     | j         j        d         d           | j         j                            dd           |                     t	          | j         j                                                  dg           |                     | j         j        d         d           | j         j                            dd           |                     t	          | j         j                                                  ddg           |                     | j         j        d         d           |                     | j         j        d         d           t          j        d          }|                     t                    5  | j         j                            d|           ddd           dS # 1 swxY w Y   dS )z, Attributes are modified by modify() method r0   r9   r:   b   N)
r   r$   modifyr2   r3   r4   nparangeassertRaises	TypeError)r   	new_values     r   test_modify_2zTestAccess.test_modify_2P   s   C"""dfl//1122SE:::c*A...C###dfl//1122SE:::c*A... 	C###dfl//1122S#J???c*A...c*A... IaLL	y)) 	0 	0FLY///	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0 	0s   (!HHHc                     d| j         j        d<   d| j         j        d<   |                     | j         j        d         d           dS )z% Attributes are silently overwritten r/   r0         @Nr   r$   r2   r   s    r   test_overwritezTestAccess.test_overwritee   sC    SSc*C00000r   c                     d| j         j        d<   |                     | j         j        d         j        d           |                     | j         j        d         t          j        d                     dS )z Attribute rank is preserved )r/   rG   r0   )   N)r   r$   r2   shapeassertArrayEqualr@   arrayr   s    r   	test_rankzTestAccess.test_rankk   sa    &Sc*0$777dfl3/)1D1DEEEEEr   c                     t          j        d          | j        j        d<   | j        j        d         }|                     |j        d           |                     |d         d           dS )z/ Attributes of shape (1,) don't become scalars r   r0   r   r   N)r@   onesr   r$   r2   rL   r   outs     r   test_singlezTestAccess.test_singleq   s^    GDMMSfl3D)))R!$$$$$r   c                     |                      t                    5  | j        j        d          ddd           dS # 1 swxY w Y   dS )z0 Attempt to access missing item raises KeyError r0   NrB   KeyErrorr   r$   r   s    r   test_access_exczTestAccess.test_access_excx   s    x(( 	 	FL	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   ;??c                 >   d| j         j        d<   | j         j                            d          }t          |t          j                  sJ |                     t                    5  | j         j                            d           d d d            d S # 1 swxY w Y   d S )Nr/   r0   r=   )r   r$   get_id
isinstancer   AttrIDrB   rX   )r   aids     r   test_get_idzTestAccess.test_get_id}   s    Sfl!!#&&#sz*****x(( 	% 	%FL$$$	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	%s   % BBBN)r   r   r   r+   r5   r7   r;   rE   rI   rO   rU   rY   r_   r   r   r   r-   r-   5   s         1 1 11 1 1/ / /0 0 0*1 1 1F F F% % %  
% % % % %r   r-   c                       e Zd ZdZd Zd ZdS )
TestDeletez?
        Feature: Deletion of attributes using __delitem__
    c                     d| j         j        d<   |                     d| j         j                   | j         j        d= |                     d| j         j                   dS )z Deletion via "del" r/   r0   N)r   r$   assertInassertNotInr   s    r   test_deletezTestDelete.test_delete   sT    Sc46<(((FLdfl+++++r   c                     |                      t                    5  | j        j        d= ddd           dS # 1 swxY w Y   dS )z0 Attempt to delete missing item raises KeyError r0   NrW   r   s    r   test_delete_exczTestDelete.test_delete_exc   s    x(( 	" 	"S!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   6::N)r   r   r   r+   re   rg   r   r   r   ra   ra      s<         , , ," " " " "r   ra   c                   $    e Zd ZdZd Zd Zd ZdS )TestUnicodezM
        Feature: Attributes can be accessed via Unicode or byte strings
    c                 t    d| j         j        d<   | j         j        d         }|                     |d           dS )z# Access via pure-ASCII byte string *   s   asciiNrH   rS   s     r   
test_asciizTestUnicode.test_ascii   s:    !#Xfl8$b!!!!!r   c                 x    d}d| j         j        |<   | j         j        |         }|                     |d           dS )z" Access via non-ASCII byte string s
   non-asciirk   NrH   r   namerT   s      r   test_rawzTestUnicode.test_raw   s?    Tfl4 b!!!!!r   c                     dt          d          z   }d| j        j        |<   | j        j        |         }|                     |d           dS )z5 Access via Unicode string with non-ascii characters Omegai  rk   N)chrr   r$   r2   rn   s      r   test_unicodezTestUnicode.test_unicode   sJ    V$Tfl4 b!!!!!r   N)r   r   r   r+   rl   rp   rt   r   r   r   ri   ri      sK         " " "" " "" " " " "r   ri   c                       e Zd ZdZd Zd ZdS )
TestCreatez5
        Options for explicit attribute creation
    c                    t          j        d          | j        d<   | j        j                            dd| j        d                    |                     | j        j        d         d           t          j        | j        j        d          }|	                                }| j        d         j        }|                     ||           | 
                    |                                           dS )zL Attributes created from named types link to the source type object
        u8typexrk   dtype   xN)r@   r|   r   r$   r%   r2   r   openr)   get_type
assertTrue	committed)r   r^   htypehtype2s       r   
test_namedzTestCreate.test_named   s     $vC46&>:::c*B///htvy$''"'''))*****r   c                    | j         j                            dt          j        d                     |                     | j         j        d         t          j        d                     | j         j                            dt          j        d                     |                     | j         j        d         t          j        d                     dS )z0 Create attribute with h5py.Empty value
        emptyr   N)r   r$   r%   h5pyEmptyr2   r   s    r   
test_emptyzTestCreate.test_empty   s     	GTZ__555g.
3@@@GTZ%5%5666g.
40@0@AAAAAr   N)r   r   r   r+   r   r   r   r   r   rv   rv      sA         
+ 
+ 
+B B B B Br   rv   c                       e Zd ZdZd Zd ZdS )TestMutableMappingz^Tests if the registration of AttributeManager as a MutableMapping
    behaves as expected
    c                     t          t          t                    sJ t          | j        j        t                    sJ d S r   )
issubclassr
   r   r\   r   r$   r   s    r   test_resolutionz"TestMutableMapping.test_resolution   s9    *N;;;;;$&,7777777r   c                 ~    t           j         t           j         t           j         t           j         t           j         dS )zC
        Test that the required functions are implemented.
        N)r
   __getitem____setitem____delitem____iter____len__r   s    r   test_validityz TestMutableMapping.test_validity   s7     	$$$$$$!!    r   N)r   r   r   r+   r   r   r   r   r   r   r      s<         8 8 8! ! ! ! !r   r   c                       e Zd Zd Zd ZdS )TestVlenc                 .   t          j        t          j        d          t          j        d          gt          j        t
                              }|| j        j        d<   |                     | j        j        d         d         |d                    d S )Nr9   r:   r{   r0   r   )	r@   rN   rA   r	   
vlen_dtypeintr   r$   rM   )r   r0   s     r   	test_vlenzTestVlen.test_vlen   sx    HbillBIaLL1.%%' ' 'Sdfl3/2AaD99999r   c                 X   t          j        t          j        d                    }t          j        d|          }t          j        ddgd          |d<   | j        j                            d|           | 	                    | j        j        d         d         |d                    d S )NS1rQ   r{      a   br   test)
r   r   r@   r|   r   rN   r   r$   r%   rM   )r   dtr0   s      r   test_vlen_s1zTestVlen.test_vlen_s1   s    _RXd^^,,HT$$$xtD111!FA&&&dfl6215qt<<<<<r   N)r   r   r   r   r   r   r   r   r   r      s2        : : := = = = =r   r   c                       e Zd Zd Z ej        ej        j        dk    d          d             Z	d Z
d Z ej        ej        j        dk    d          d             ZdS )	TestTrackOrderc                     | j                             d|          j        }t          d          D ]}||t	          |          <   |S )Nr   track_orderd   )r   r#   r$   ranger(   )r   r   r$   is       r   
fill_attrszTestTrackOrder.fill_attrs   sJ    ##F#DDJs 	 	AE#a&&MMr   )r   
      zHDF5 1.10.6 requiredc                     |                      d          }|                     t          |          d t          d          D                        d S )NTr   c                 ,    g | ]}t          |          S r   r(   .0r   s     r   
<listcomp>z3TestTrackOrder.test_track_order.<locals>.<listcomp>   s    555Q#a&&555r   r   )r   r2   r3   r   r   r$   s     r   test_track_orderzTestTrackOrder.test_track_order   sX     D11e55%**555	7 	7 	7 	7 	7r   c           	          |                      d          }|                     t          |          t          d t	          d          D                                  d S )NFr   c                 ,    g | ]}t          |          S r   r   r   s     r   r   z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>  s     < < <AQ < < <r   r   )r   r2   r3   sortedr   r   s     r   test_no_track_orderz"TestTrackOrder.test_no_track_order   s_    E22e < <s < < <==	? 	? 	? 	? 	?r   c                     | j                             d|          }t          d          D ]}||j        t	          |          <   |S )Nr   r      )r   r#   r   r$   r(   )r   r   groupr   s       r   fill_attrs2zTestTrackOrder.fill_attrs2  sK    ##F#DDr 	$ 	$A"#EKAr   c                 F   |                      d          }|                     |j        d         d           d|j        d<   |                     |j        d         d           |                     d|j                   |j        d= |                     d|j                   d S )NTr   11   g      E@10)r   r2   r$   rc   rd   )r   r   s     r   !test_track_order_overwrite_deletez0TestTrackOrder.test_track_order_overwrite_delete
  s       T 22T*B/// DT*D111dEK(((Ku{+++++r   N)r   r   r   r   r   
skipUnlessr   versionhdf5_version_tupler   r   r   r   r   r   r   r   r      s           R]4<2j@BXYY7 7 ZY7
? ? ?
   R]4<2j@BXYY
, 
, ZY
, 
, 
,r   r   c                       e Zd Zd ZdS )TestDatatypec                    t          j        d          | j        d<   | j        d         }|                     t	          |j                                                  g            |j                            dd           |                     t	          |j                                                  dg           |                     t	          |j                                                  dg           d S )Nr   foor0   r/   )	r@   r|   r   r2   r3   r$   r4   r%   values)r   r   s     r   test_datatypezTestDatatype.test_datatype  s    uVE]bhmmoo..333
S!!!bhmmoo..666bhoo//003%88888r   N)r   r   r   r   r   r   r   r   r     s#        9 9 9 9 9r   r   c                    | }t          j        t           j                  j        t          j        t           j                  j        dz   g}|j                            d|t           j                   |j        d         j        t          j        t           j                  k    sJ t           j        	                    |j        d         t          j
        |t           j                             |j                            d|           t           j        	                    |j        d         t          j
        |t           j                             d S )Nr   r0   r{   )r@   iinfoint64maxr$   r%   uint64r|   testingassert_array_equalrN   r?   )writable_filer   datas      r   test_python_int_uint64r   "  s    AHRX"BHRX$6$6$:Q$>?D GNN3BIN...73<")!4!44444J!!!'#,RY0O0O0OPPP GNN3J!!!'#,RY0O0O0OPPPPPr   )r+   numpyr@   collections.abcr   commonr   r   r   r   r   r	   r
   r   r   r-   ra   ri   rv   r   r   r   r   r   r   r   r   <module>r      s`        * * * * * *                                ! ! ! ! ! !       4 4 4 4 4x 4 4 4N% N% N% N% N% N% N% N%`" " " " " " " "&" " " " ") " " "6B B B B B B B B8! ! ! ! ! ! ! !$= = = = =y = = = $, $, $, $, $,Y $, $, $,N9 9 9 9 99 9 9 9Q Q Q Q Qr   