o
    Ŗi ei%  ć                   @   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                   @   ó   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   śD/var/www/myenv/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   sL   | 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   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   dS 1 sw   Y  dS )z, Attributes are modified by modify() method r(   r/   r0   Ś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'   r;   r(   )é   N)r   r   r*   ŚshapeŚassertArrayEqualr5   Ś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)r5   Śonesr   r   r*   r?   ©r   Śoutr   r   r   Śtest_singleq   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 r(   N©r7   ŚKeyErrorr   r   r   r   r   r   Śtest_access_excx   s   "’zTestAccess.test_access_excc                 C   sh   d| j jd< | j j d”}t|tjsJ |  t” | j j d” W d    d S 1 s-w   Y  d S )Nr'   r(   r2   )r   r   Śget_idŚ
isinstancer   ŚAttrIDr7   rI   )r   Śaidr   r   r   Śtest_get_id}   s   "’zTestAccess.test_get_idN)r   r   r   r%   r-   r.   r1   r:   r=   rB   rG   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:   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   s:   |   t” | jjd= W d   dS 1 sw   Y  dS )z0 Attempt to delete missing item raises KeyError r(   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   s(   d| j jd< | j jd }|  |d” dS )z# Access via pure-ASCII byte string é*   s   asciiNr<   rE   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-asciižrW   Nr<   ©r   ŚnamerF   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©  rW   N)Śchrr   r   r*   rY   r   r   r   Śtest_unicode«   s   zTestUnicode.test_unicodeN)r   r   r   r%   rX   r[   r^   r   r   r   r   rV      s
    rV   c                   @   rP   )Ś
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ŚxrW   ©Śdtypeó   xN)r5   rd   r   r   r   r*   r   Śopenr#   Śget_typeŚ
assertTrueŚ	committed)r   rN   ŚhtypeŚ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%   rl   rp   r   r   r   r   r_   ³   s    r_   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%   rs   ry   r   r   r   r   rq   Ļ   s    rq   c                   @   r
   )ŚTestVlenc                 C   sP   t jt  d”t  d”gt t”d}|| jjd< |  | jjd d |d ” d S )Nr/   r0   rc   r(   r   )	r5   rA   r6   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 )NŚS1rC   rc   ó   aó   br   Śtest)
rn   r{   r5   rd   rm   rA   r   r   r   r@   )r   Śdtr(   r   r   r   Śtest_vlen_s1č   s
    zTestVlen.test_vlen_s1N)r   r   r   r}   r   r   r   r   r   rz   į   s    rz   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 )Nr   ©Śtrack_orderéd   )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 )NTr   c                 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 )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   s0   | j jd|d}tdD ]	}||jt|< q|S )Nr   r   é   )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 )NTr   Ś11é   g      E@Ś10)r   r*   r   rR   rS   )r   r   r   r   r   Ś!test_track_order_overwrite_delete
  s   
z0TestTrackOrder.test_track_order_overwrite_deleteN)r   r   r   r   r   Ś
skipUnlessrn   ŚversionŚhdf5_version_tupler   r   r   r   r   r   r   r   r   ń   s    
r   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   Śfoor(   r'   )	r5   rd   r   r*   r+   r   r,   r   Śvalues)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 j”jt  t j”jd g}|jjd|t jd |jd jt  t j”ks*J t j 	|jd t j
|t jd” |j d|” t j 	|jd t j
|t jd” d S )Nr   r(   rc   )r5   ŚiinfoŚint64Śmaxr   r   Śuint64rd   ŚtestingŚassert_array_equalrA   r4   )Śwritable_filer   Śdatar   r   r   Śtest_python_int_uint64"  s     $r­   )r%   Śnumpyr5   Ścollections.abcr   Ścommonr   r   rn   r   r   r   r	   r   r   r&   rQ   rV   r_   rq   rz   r   r”   r­   r   r   r   r   Ś<module>   s&   		P'
