o
    še&  ć                   @   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   śED:\Projects\ConvertPro\env\Lib\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Ś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   dS 1 sw   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%   r9   r&   )é   N)r   r   r(   ŚshapeŚassertArrayEqualr3   Ś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)r3   Z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©r5   Ś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&   r0   )r   r   Zget_idŚ
isinstancer   ZAttrIDr5   rF   )r   Śaidr   r   r   Śtest_get_id}   s   "’zTestAccess.test_get_idN)r   r   r   r#   r+   r,   r/   r8   r;   r@   rD   rG   rJ   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&   NrE   r   r   r   r   Śtest_delete_exc   s   "’zTestDelete.test_delete_excN)r   r   r   r#   rO   rP   r   r   r   r   rL      s    rL   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:   rB   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žrR   Nr:   ©r   ŚnamerC   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©  rR   N)Śchrr   r   r(   rT   r   r   r   Śtest_unicode«   s   zTestUnicode.test_unicodeN)r   r   r   r#   rS   rV   rY   r   r   r   r   rQ      s
    rQ   c                   @   rK   )Ś
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ŚxrR   ©Śdtypeó   xN)r3   r_   r   r   r   r(   r   Śopenr!   Śget_typeŚ
assertTrueZ	committed)r   rI   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#   rd   rh   r   r   r   r   rZ   ³   s    rZ   c                   @   rK   )Ś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   rH   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#   rk   rq   r   r   r   r   ri   Ļ   s    ri   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-   r.   r^   r&   r   )	r3   r?   r4   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S1rA   r^   ó   aó   br   Śtest)
rf   rs   r3   r_   re   r?   r   r   r   r>   )r   Śdtr&   r   r   r   Śtest_vlen_s1č   s
    zTestVlen.test_vlen_s1N)r   r   r   ru   rz   r   r   r   r   rr   į   s    rr   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 )Nrx   ©Ś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 )Nrx   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|   Z11é   g      E@Ś10)r   r(   r   rM   rN   )r   r   r   r   r   Ś!test_track_order_overwrite_delete
  s   
z0TestTrackOrder.test_track_order_overwrite_deleteN)r   r   r   r   r   Z
skipUnlessrf   ŚversionZ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   Zfoor&   r%   )	r3   r_   r   r(   r)   r   r*   r   Śvalues)r   ry   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&   r^   )r3   ZiinfoZint64Śmaxr   r   Zuint64r_   ŚtestingZassert_array_equalr?   r2   )Zwritable_filer   Śdatar   r   r   Śtest_python_int_uint64"  s     $r   )r#   Śnumpyr3   Ścollections.abcr   Ścommonr   r   rf   r   r   r   r	   r   r   r$   rL   rQ   rZ   ri   rr   r{   r   r   r   r   r   r   Ś<module>   s&   		P'
