o
    gi%                     @   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	make_name)File)h5ah5t)AttributeManagerc                   @      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   S/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/h5py/tests/test_attrs.pysetUp    s   zBaseAttrs.setUpc                 C   s   | j r
| j   d S 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   sN   | j t }|jdd | t|jt |j	  | t|jt d S )Nattr   )
r   create_groupr   attrscreateassertIsInstancereprstridr   )r   grpr   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:   t  }d| jj|< || jjv sJ | | jj| d dS )z) Attribute creation by direct assignment       @Nr   r   r   assertEqualr   namer   r   r   test_create;   s   zTestAccess.test_createc                 C   s>   t  }| jj|d || jjv sJ | | jj| d dS )z' Attribute creation by create() method r'   N)r   r   r   r   r)   r*   r   r   r   test_create_2B   s   zTestAccess.test_create_2c                 C   sZ   t  }d| jj|< || jjv sJ | | jj| d d| jj|< | | jj| d dS )z- Attributes are modified by direct assignment      Nr(   r*   r   r   r   test_modifyI   s   zTestAccess.test_modifyc                 C   s  t d}t d}| jj|d || jjv sJ | | jj| d | jj|d || jjv s2J | | jj| d | jj|d || jjv sLJ || jjv sTJ | | jj| d | | jj| d td}| t | jj|| W d   dS 1 sw   Y  dS )z, Attributes are modified by modify() method abr.   r/      N)	r   r   r   modifyr)   nparangeassertRaises	TypeError)r   r1   r2   	new_valuer   r   r   test_modify_2R   s"   
"zTestAccess.test_modify_2c                 C   s6   t  }d| jj|< d| jj|< | | jj| d dS )z% Attributes are silently overwritten r'         @Nr(   r*   r   r   r   test_overwritek   s   zTestAccess.test_overwritec                 C   sF   t  }d| jj|< | | jj| jd | | jj| td dS )z Attribute rank is preserved )r'   r;   )   N)r   r   r   r)   shapeassertArrayEqualr5   arrayr*   r   r   r   	test_rankr   s   zTestAccess.test_rankc                 C   sF   t  }td| jj|< | jj| }| |jd | |d d dS )z/ Attributes of shape (1,) don't become scalars r   r   r   N)r   r5   onesr   r   r)   r>   r   r+   outr   r   r   test_singley   s
   zTestAccess.test_singlec                 C   s<   |  t | jjd  W d   dS 1 sw   Y  dS )z0 Attempt to access missing item raises KeyError notexistNr7   KeyErrorr   r   r   r   r   r   test_access_exc   s   "zTestAccess.test_access_excc                 C   sn   t  }d| jj|< | jj|}t|tjsJ | t | jjd W d    d S 1 s0w   Y  d S )Nr'   rG   )	r   r   r   get_id
isinstancer   AttrIDr7   rI   )r   r+   aidr   r   r   test_get_id   s   "zTestAccess.test_get_idN)r   r   r   r%   r,   r-   r0   r:   r<   rA   rF   rJ   rO   r   r   r   r   r&   5   s    	r&   c                   @       e Zd ZdZdd Zdd ZdS )
TestDeletez?
        Feature: Deletion of attributes using __delitem__
    c                 C   s@   t  }d| jj|< | || jj | jj|= | || jj dS )z Deletion via "del" r'   N)r   r   r   assertInassertNotInr*   r   r   r   test_delete   s
   
zTestDelete.test_deletec                 C   s:   |  t | jjd= W d   dS 1 sw   Y  dS )z0 Attempt to delete missing item raises KeyError rG   NrH   r   r   r   r   test_delete_exc   s   "zTestDelete.test_delete_excN)r   r   r   r%   rT   rU   r   r   r   r   rQ      s    rQ   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   s6   t dd}d| jj|< | jj| }| |d dS )z# Access via pure-ASCII byte string ascii*   Nr   encoder   r   r)   rD   r   r   r   
test_ascii      zTestUnicode.test_asciic                 C   s6   t dd}d| jj|< | jj| }| |d dS )z" Access via non-ASCII byte string u   non-asciiþutf-8rX   NrY   rD   r   r   r   test_raw   r\   zTestUnicode.test_rawc                 C   s8   t dtd }d| jj|< | jj| }| |d dS )z5 Access via Unicode string with non-ascii characters Omegai  rX   N)r   chrr   r   r)   rD   r   r   r   test_unicode   s   zTestUnicode.test_unicodeN)r   r   r   r%   r[   r^   ra   r   r   r   r   rV      s
    rV   c                   @   rP   )
TestCreatez5
        Options for explicit attribute creation
    c                 C   s   t d}t d}td| j|< | jjj|d| j| d | | jj| d t| jj	|
d}| }| j| j	}| || | |  dS )zL Attributes created from named types link to the source type object
        txu8rX   dtyper]   N)r   r5   rg   r   r   r   r)   r   openr"   rZ   get_type
assertTrue	committed)r   rc   rd   rN   htypehtype2r   r   r   
test_named   s   zTestCreate.test_namedc                 C   sj   t  }| jj|td | | jj| td | jj|td | | jj| td dS )z0 Create attribute with h5py.Empty value
        r   N)r   r   r   r   h5pyEmptyr)   r*   r   r   r   
test_empty   s
   zTestCreate.test_emptyN)r   r   r   r%   rn   rq   r   r   r   r   rb      s    rb   c                   @   rP   )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   rL   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%   rt   rz   r   r   r   r   rr      s    rr   c                   @   r
   )TestVlenc                 C   sV   t  }tjtdtdgttd}|| jj|< | 	| jj| d |d  d S )Nr.   r/   rf   r   )
r   r5   r@   r6   r   
vlen_dtypeintr   r   r?   )r   r+   r1   r   r   r   	test_vlen   s    zTestVlen.test_vlenc                 C   sj   t  }ttd}tjd|d}tjddgdd|d< | jj	|| | 
| jj| d |d  d S )NS1rB   rf      a   br   )r   ro   r|   r5   rg   emptyr@   r   r   r   r?   )r   r+   dtr1   r   r   r   test_vlen_s1   s    zTestVlen.test_vlen_s1N)r   r   r   r~   r   r   r   r   r   r{      s    r{   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestTrackOrderc                 C   s2   | j jt |dj}tdD ]}||t|< q|S )Ntrack_orderd   )r   r   r   r   ranger!   )r   r   r   ir   r   r   
fill_attrs  s   zTestTrackOrder.fill_attrsc                 C   s.   | j dd}| t|dd tdD  d S )NTr   c                 S      g | ]}t |qS r   r!   .0r   r   r   r   
<listcomp>      z3TestTrackOrder.test_track_order.<locals>.<listcomp>r   )r   r)   listr   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 )NFr   c                 S   r   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   s   | j jt dd}tdD ]	}||jt|< q| |jd d d|jd< | |jd d | d|j |jd= | d|j d S )NTr      11   g      E@10)	r   r   r   r   r   r!   r)   rR   rS   )r   groupr   r   r   r   !test_track_order_overwrite_delete  s   
z0TestTrackOrder.test_track_order_overwrite_deleteN)r   r   r   r   r   r   r   r   r   r   r   r     s
    r   c                   @   s   e Zd Zdd ZdS )TestDatatypec                 C   sx   t  }td| j|< | j| }| t|j g  |jdd | t|j dg | t|j	 dg d S )Nr   r1   r'   )
r   r5   rg   r   r)   r   r   keysr   values)r   r+   r   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tjjttjjd g}|jj||tjd |j| jttjks-J tj	
|j| tj|tjd |j|| tj	
|j| tj|tjd d S )Nr   rf   )r   r5   iinfoint64maxr   r   uint64rg   testingassert_array_equalr@   r4   )writable_filer   r+   datar   r   r   test_python_int_uint640  s     $r   )r%   numpyr5   collections.abcr   commonr   r   ro   r   r   r   r	   r   r   r&   rQ   rV   rb   rr   r{   r   r   r   r   r   r   r   <module>   s&   		["