a
    v=ici%                     @   s  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
 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G dd deZG dd deZd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                   @   s   e Zd Zdd Zdd ZdS )	BaseAttrsc                 C   s   t |  d| _d S )Nw)r   mktempfself r   f/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/h5py/tests/test_attrs.pysetUp    s    zBaseAttrs.setUpc                 C   s   | j r| j   d S N)r   closer   r   r   r   tearDown#   s    zBaseAttrs.tearDownN)__name__
__module____qualname__r   r   r   r   r   r   r
      s   r
   c                   @   s   e Zd ZdZdd ZdS )TestReprzI Feature: AttributeManager provide a helpful
        __repr__ string
    c                 C   sL   | j d}|jdd | t|jt |j  | t|jt d S )NgrpZattr   )	r   create_groupattrscreateZassertIsInstancereprstridr   )r   r   r   r   r   	test_repr-   s
    
zTestRepr.test_reprN)r   r   r   __doc__r!   r   r   r   r   r   '   s   r   c                   @   sX   e Zd Z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S )
TestAccesszG
        Feature: Attribute creation/retrieval via special methods
    c                 C   s>   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   r   r   r   test_create;   s    zTestAccess.test_createc                 C   sB   | j jdd | t| j j dg | | j jd d dS )z' Attribute creation by create() method r%   r$   N)r   r   r   r'   r(   r)   r   r   r   r   test_create_2A   s    zTestAccess.test_create_2c                 C   sx   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   r%      Nr&   r   r   r   r   test_modifyG   s    zTestAccess.test_modifyc                 C   s  | 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d}| t	  | j jd| W d   n1 s0    Y  dS )z, Attributes are modified by modify() method r%   r,   r-   b   N)
r   r   modifyr'   r(   r)   nparangeassertRaises	TypeError)r   	new_valuer   r   r   test_modify_2P   s    
zTestAccess.test_modify_2c                 C   s0   d| j jd< d| j jd< | | j jd d dS )z% Attributes are silently overwritten r$   r%         @Nr   r   r'   r   r   r   r   test_overwritee   s    zTestAccess.test_overwritec                 C   s@   d| j jd< | | j jd jd | | j jd td dS )z Attribute rank is preserved )r$   r8   r%   )   N)r   r   r'   shapeassertArrayEqualr2   arrayr   r   r   r   	test_rankk   s    zTestAccess.test_rankc                 C   s@   t d| jjd< | jjd }| |jd | |d d dS )z/ Attributes of shape (1,) don't become scalars r   r%   r   r   N)r2   Zonesr   r   r'   r<   r   outr   r   r   test_singleq   s    zTestAccess.test_singlec                 C   s:   |  t | jjd  W d   n1 s,0    Y  dS )z0 Attempt to access missing item raises KeyError r%   Nr4   KeyErrorr   r   r   r   r   r   test_access_excx   s    zTestAccess.test_access_excc                 C   sf   d| j jd< | j jd}t|tjs*J | t | j jd W d    n1 sX0    Y  d S )Nr$   r%   r/   )r   r   Zget_id
isinstancer   ZAttrIDr4   rE   )r   aidr   r   r   test_get_id}   s
    zTestAccess.test_get_idN)r   r   r   r"   r*   r+   r.   r7   r:   r?   rC   rF   rI   r   r   r   r   r#   5   s   	r#   c                   @   s    e Zd ZdZdd Zdd ZdS )
TestDeletez?
        Feature: Deletion of attributes using __delitem__
    c                 C   s:   d| j jd< | d| j j | j jd= | d| j j dS )z Deletion via "del" r$   r%   N)r   r   assertInassertNotInr   r   r   r   test_delete   s    
zTestDelete.test_deletec                 C   s8   |  t | jjd= W d   n1 s*0    Y  dS )z0 Attempt to delete missing item raises KeyError r%   NrD   r   r   r   r   test_delete_exc   s    zTestDelete.test_delete_excN)r   r   r   r"   rM   rN   r   r   r   r   rJ      s   rJ   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	TestUnicodezM
        Feature: Attributes can be accessed via Unicode or byte strings
    c                 C   s(   d| j jd< | j jd }| |d dS )z# Access via pure-ASCII byte string *   s   asciiNr9   rA   r   r   r   
test_ascii   s    zTestUnicode.test_asciic                 C   s,   d}d| j j|< | j j| }| |d dS )z" Access via non-ASCII byte string s
   non-asciirP   Nr9   r   namerB   r   r   r   test_raw   s    zTestUnicode.test_rawc                 C   s4   dt d }d| jj|< | jj| }| |d dS )z5 Access via Unicode string with non-ascii characters Omegai  rP   N)chrr   r   r'   rR   r   r   r   test_unicode   s    zTestUnicode.test_unicodeN)r   r   r   r"   rQ   rT   rW   r   r   r   r   rO      s   rO   c                   @   s    e Zd ZdZdd Zdd ZdS )
TestCreatez5
        Options for explicit attribute creation
    c                 C   s   t d| jd< | jjjdd| jd d | | jjd d t| jjd}|	 }| jd j}| || | 
|  dS )zL Attributes created from named types link to the source type object
        u8typexrP   dtype   xN)r2   r]   r   r   r   r'   r   openr    get_type
assertTrueZ	committed)r   rH   ZhtypeZhtype2r   r   r   
test_named   s    zTestCreate.test_namedc                 C   sd   | j jdtd | | j jd td | j jdtd | | j jd td dS )z0 Create attribute with h5py.Empty value
        emptyr   N)r   r   r   h5pyEmptyr'   r   r   r   r   
test_empty   s    zTestCreate.test_emptyN)r   r   r   r"   rb   rf   r   r   r   r   rX      s   rX   c                   @   s    e Zd ZdZdd Zdd ZdS )TestMutableMappingz^Tests if the registration of AttributeManager as a MutableMapping
    behaves as expected
    c                 C   s$   t ttsJ t| jjts J d S r   )
issubclassr	   r   rG   r   r   r   r   r   r   test_resolution   s    z"TestMutableMapping.test_resolutionc                 C   s"   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   r   r   r   test_validity   s
    z TestMutableMapping.test_validityN)r   r   r   r"   ri   ro   r   r   r   r   rg      s   rg   c                   @   s   e Zd Zdd Zdd ZdS )TestVlenc                 C   sP   t jt dt dgttd}|| jjd< | | jjd d |d  d S )Nr,   r-   r\   r%   r   )	r2   r>   r3   r   
vlen_dtypeintr   r   r=   )r   r%   r   r   r   	test_vlen   s
    zTestVlen.test_vlenc                 C   sd   t td}tjd|d}tjddgdd|d< | jjd| | 	| jjd d |d  d S )NZS1r@   r\      a   br   test)
rd   rq   r2   r]   rc   r>   r   r   r   r=   )r   dtr%   r   r   r   test_vlen_s1   s
    zTestVlen.test_vlen_s1N)r   r   r   rs   rx   r   r   r   r   rp      s   rp   c                   @   s\   e Zd Zdd Zeejjdkddd Z	dd Z
d	d
 Zeejjdkddd ZdS )TestTrackOrderc                 C   s0   | j jd|dj}tdD ]}||t|< q|S )Nrv   track_orderd   )r   r   r   ranger   )r   r{   r   ir   r   r   
fill_attrs   s    zTestTrackOrder.fill_attrs)r   
      zHDF5 1.10.6 requiredc                 C   s.   | j dd}| t|dd tdD  d S )NTrz   c                 S   s   g | ]}t |qS r   r   .0r~   r   r   r   
<listcomp>       z3TestTrackOrder.test_track_order.<locals>.<listcomp>r|   )r   r'   r(   r}   r   r   r   r   r   test_track_order   s    
zTestTrackOrder.test_track_orderc                 C   s2   | j dd}| t|tdd tdD  d S )NFrz   c                 S   s   g | ]}t |qS r   r   r   r   r   r   r     r   z6TestTrackOrder.test_no_track_order.<locals>.<listcomp>r|   )r   r'   r(   sortedr}   r   r   r   r   test_no_track_order   s    
z"TestTrackOrder.test_no_track_orderc                 C   s0   | j jd|d}tdD ]}||jt|< q|S )Nrv   rz      )r   r   r}   r   r   )r   r{   groupr~   r   r   r   fill_attrs2  s    zTestTrackOrder.fill_attrs2c                 C   sb   | j dd}| |jd d d|jd< | |jd d | d|j |jd= | d|j d S )NTrz   Z11   g      E@10)r   r'   r   rK   rL   )r   r   r   r   r   !test_track_order_overwrite_delete
  s    
z0TestTrackOrder.test_track_order_overwrite_deleteN)r   r   r   r   r   Z
skipUnlessrd   versionZhdf5_version_tupler   r   r   r   r   r   r   r   ry      s   
ry   c                   @   s   e Zd Zdd ZdS )TestDatatypec                 C   sr   t d| jd< | jd }| t|j g  |jdd | t|j dg | t|j dg d S )Nr   Zfoor%   r$   )	r2   r]   r   r'   r(   r   r)   r   values)r   rw   r   r   r   test_datatype  s    
zTestDatatype.test_datatypeN)r   r   r   r   r   r   r   r   r     s   r   c                 C   s   | }t t jjt t jjd g}|jjd|t jd |jd jt t jksTJ t j	|jd t j
|t jd |jd| t j	|jd t j
|t jd d S )Nr   r%   r\   )r2   Ziinfoint64maxr   r   Zuint64r]   testingZassert_array_equalr>   r1   )Zwritable_filer   datar   r   r   test_python_int_uint64"  s      r   )r"   numpyr2   collections.abcr   commonr   r   rd   r   r   r   r	   r
   r   r#   rJ   rO   rX   rg   rp   ry   r   r   r   r   r   r   <module>
   s$   	P'
