o
    ªi es   ã                   @   s€   d dl Z d dlZddlmZmZ d dlmZmZm	Z	 d dl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S )é    Né   )ÚutÚTestCase)ÚFileÚGroupÚDatasetc                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚBaseDatasetaP  
    data is a 3-dimensional dataset with dimensions [z, y, x]

    The z dimension is labeled. It does not have any attached scales.
    The y dimension is not labeled. It has one attached scale.
    The x dimension is labeled. It has two attached scales.

    data2 is a 3-dimensional dataset with no associated dimension scales.
    c                 C   sP  t |  ¡ dƒ| _t dd¡| jd< t dd¡| jd< t dd¡| jd< tj | jd j¡ tj 	| jd j| jd jd¡ t dd¡| jd< tj | jd jd	¡ tj 	| jd j| jd jd¡ t d
d¡| jd< tj | jd jd¡ tj 	| jd j| jd jd¡ t dd¡| jd< tj 
| jd jdd¡ tj 
| jd jdd¡ d S )NÚw)é   é   é   ÚfÚdataÚdata2r   Úx1Úx2ó   x2 namer   Úy1s   y1 namer   r
   Úz1r   ó   zó   x)r   Úmktempr   ÚnpÚonesÚh5pyÚh5dsÚ	set_scaleÚidÚattach_scaleÚ	set_label©Úself© r"   úO/var/www/myenv/lib/python3.10/site-packages/h5py/tests/test_dimension_scales.pyÚsetUp   s      zBaseDataset.setUpc                 C   s   | j r
| j  ¡  d S d S )N)r   Úcloser    r"   r"   r#   ÚtearDown1   s   ÿzBaseDataset.tearDownN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   r&   r"   r"   r"   r#   r      s    
r   c                   @   sL   e Zd ZdZdd„ Zdd„ Zdd„ Ze e	j
jdkd	¡d
d„ ƒZdd„ ZdS )ÚTestH5DSBindingszA
        Feature: Datasets can be created from existing data
    c                 C   sn   |   tj | jd j¡¡ |  tj | jd j¡d¡ |  | jd jd d¡ |  tj | jd j¡d¡ dS )z0 Create a dimension scale from existing dataset r   ó    ÚCLASSs   DIMENSION_SCALEr   r   N)	Ú
assertTruer   r   Úis_scaler   r   ÚassertEqualÚget_scale_nameÚattrsr    r"   r"   r#   Útest_create_dimensionscale<   s    z+TestH5DSBindings.test_create_dimensionscalec                 C   sª   |   tj | jd j| jd jd¡¡ |  tj | jd j| jd jd¡¡ |  tj | jd jd¡d¡ |  tj | jd jd¡d¡ |  tj | jd jd¡d¡ d S )Nr   r   r   r   r   )	r.   r   r   Úis_attachedr   r   ÚassertFalser0   Úget_num_scalesr    r"   r"   r#   Útest_attach_dimensionscaleC   s   ÿÿ"z+TestH5DSBindings.test_attach_dimensionscalec                 C   sŽ   |   tj | jd j| jd jd¡¡ tj | jd j| jd jd¡ |  tj | jd j| jd jd¡¡ |  tj 	| jd jd¡d¡ d S )Nr   r   r   r   )
r.   r   r   r4   r   r   Údetach_scaler5   r0   r6   r    r"   r"   r#   Útest_detach_dimensionscaleM   s   ÿ ÿ"z+TestH5DSBindings.test_detach_dimensionscale)r   r   r   z$Reading non-existent label segfaultsc                 C   s^   |   tj | jd jd¡d¡ |   tj | jd jd¡d¡ |   tj | jd jd¡d¡ d S )Nr   r   r   r   r,   r   r   )r0   r   r   Ú	get_labelr   r   r    r"   r"   r#   Útest_label_dimensionscaleX   s   "z*TestH5DSBindings.test_label_dimensionscalec                 C   s:   dd„ }t j | jd jd|d¡}|  t j |¡d¡ d S )Nc                 S   s   t j | ¡}|dkr| S d S )Nr   )r   r   r1   )ÚdsidÚresr"   r"   r#   Úfuncb   s   ÿz8TestH5DSBindings.test_iter_dimensionscales.<locals>.funcr   r   r   r   )r   r   Úiterater   r   r0   r1   )r!   r>   r=   r"   r"   r#   Útest_iter_dimensionscalesa   s   z*TestH5DSBindings.test_iter_dimensionscalesN)r'   r(   r)   r*   r3   r7   r9   r   Ú
skipUnlessr   ÚversionÚhdf5_version_tupler;   r@   r"   r"   r"   r#   r+   6   s    

þ
r+   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestDimensionManagerc                 C   s„   | j d  d¡ |  | j d jd d | j d ¡ | j d  d¡ | j d jd  | j d ¡ |  | j d jd d | j d ¡ d S )	Nr   s   foobarr   r   Úfoobarr   s   foobazÚfoobaz)r   Ú
make_scaler0   Údimsr   r    r"   r"   r#   Útest_make_scalem   s
   "&z$TestDimensionManager.test_make_scalec                 C   s@   |   t¡ | jd jd  W d   ƒ d S 1 sw   Y  d S )Nr   r   )ÚassertRaisesÚ
IndexErrorr   rH   r    r"   r"   r#   Útest_get_dimensionv   s   "ÿz'TestDimensionManager.test_get_dimensionc                 C   s4   |   t| jd jƒd¡ |   t| jd jƒd¡ d S )Nr   r   r   ©r0   Úlenr   rH   r    r"   r"   r#   Útest_lenz   s   zTestDimensionManager.test_lenc                 C   s8   | j d j}|  dd„ |D ƒ|d |d |d g¡ d S )Nr   c                 S   ó   g | ]}|‘qS r"   r"   )Ú.0Údr"   r"   r#   Ú
<listcomp>   ó    z2TestDimensionManager.test_iter.<locals>.<listcomp>r   r   r   )r   rH   r0   )r!   rH   r"   r"   r#   Ú	test_iter~   s
   þzTestDimensionManager.test_iterc                 C   s@   | j  dd¡}|  t|jƒt¡ | j  ¡  |  t|jƒt¡ d S )NÚx)r   r   )r   Úcreate_datasetÚassertIsInstanceÚreprrH   Ústrr%   ©r!   Údsr"   r"   r#   Ú	test_repr…   s   
zTestDimensionManager.test_reprN)r'   r(   r)   rI   rL   rO   rU   r]   r"   r"   r"   r#   rD   k   s    	rD   c                   @   st   e 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d„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestDimensionsHighLevelc                 C   s¬   |   t| jd jd ƒd¡ |   t| jd jd ƒd¡ |   t| jd jd ƒd¡ |   t| jd jd ƒd¡ |   t| jd jd ƒd¡ |   t| jd jd ƒd¡ d S )Nr   r   r   r   r   rM   r    r"   r"   r#   rO   Ž   s    z TestDimensionsHighLevel.test_lenc                 C   s    |   | jd jd jd¡ |   | jd jd jd¡ |   | jd jd jd¡ |   | jd jd jd¡ |   | jd jd jd¡ |   | jd jd jd¡ d S )	Nr   r   rV   r   Ú r   Úzr   )r0   r   rH   Úlabelr    r"   r"   r#   Útest_get_label–   s   z&TestDimensionsHighLevel.test_get_labelc                 C   sd   d| j d jd _|  | j d jd jd¡ |  | j d jd jd¡ |  | j d jd jd¡ d S )NÚfoor   r   r   rV   r   r_   )r   rH   ra   r0   r    r"   r"   r#   Útest_set_labelž   s   z&TestDimensionsHighLevel.test_set_labelc                 C   s–   | j d jd  | j d ¡ |  t| j d jd ƒd¡ |  | j d jd d | j d ¡ | j d jd  | j d ¡ |  t| j d jd ƒd¡ d S )Nr   r   r   r   r   r   )r   rH   r8   r0   rN   r    r"   r"   r#   Útest_detach_scale¤   s
   " z)TestDimensionsHighLevel.test_detach_scalec                 C   sr   | j d d | j d< | j d jd  | j d ¡ |  t| j d jd ƒd¡ |  | j d jd d | j d ¡ d S )Nr   .Úx3r   r   r   )r   rH   r   r0   rN   r    r"   r"   r#   Útest_attach_scale«   s   &z)TestDimensionsHighLevel.test_attach_scalec                 C   s²   |   | jd jd d | jd ¡ |  t¡ | jd jd d | jd f W d   ƒ n1 s0w   Y  |   | jd jd d | jd ¡ |   | jd jd d | jd ¡ d S )	Nr   r   r   r   r   r   r_   úx2 name)r0   r   rH   rJ   ÚRuntimeErrorr    r"   r"   r#   Útest_get_dimension_scale±   s   " ÿ"&z0TestDimensionsHighLevel.test_get_dimension_scalec                 C   s8   |   | jd jd  ¡ d| jd fd| jd fg¡ d S )Nr   r   r_   r   rh   r   )r0   r   rH   Úitemsr    r"   r"   r#   Útest_get_items¸   s   þz&TestDimensionsHighLevel.test_get_itemsc                 C   s$   |   | jd jd  ¡ ddg¡ d S )Nr   r   r_   rh   )r0   r   rH   Úkeysr    r"   r"   r#   Útest_get_keys¾   s   $z%TestDimensionsHighLevel.test_get_keysc                 C   s0   |   | jd jd  ¡ | jd | jd g¡ d S )Nr   r   r   r   )r0   r   rH   Úvaluesr    r"   r"   r#   Útest_get_valuesÁ   s   þz'TestDimensionsHighLevel.test_get_valuesc                 C   s*   |   dd„ | jd jd D ƒddg¡ d S )Nc                 S   rP   r"   r"   )rQ   Úir"   r"   r#   rS   È   rT   z5TestDimensionsHighLevel.test_iter.<locals>.<listcomp>r   r   r_   rh   )r0   r   rH   r    r"   r"   r#   rU   Ç   s   *z!TestDimensionsHighLevel.test_iterc                 C   sH   | j d }|  t|jd ƒdd… d¡ | j  ¡  |  t|jƒt¡ d S )Nr   r   r   é   z"x" dimension 2)r   r0   rY   rH   r%   rX   rZ   r[   r"   r"   r#   r]   Ê   s   

z!TestDimensionsHighLevel.test_reprc                 C   st   | j d jd | j d jd< |  t| j d jd ƒd¡ |  t| j d jd ƒd¡ |  t| j d jd ƒd¡ d S )Nr   ÚDIMENSION_LISTr   r   r   r   )r   r2   r0   rN   rH   r    r"   r"   r#   Útest_attributesÐ   s   
ÿ z'TestDimensionsHighLevel.test_attributesc                 C   sp   |   | jd j¡ |   | jd j¡ |   | jd j¡ |  | jd j¡ |  | jd j¡ |  | jd j¡ dS )zTest Dataset.is_scale propertyr   r   r   r   r   r   N)r.   r   r/   r5   r    r"   r"   r#   Útest_is_scale×   s   z%TestDimensionsHighLevel.test_is_scaleN)r'   r(   r)   rO   rb   rd   re   rg   rj   rl   rn   rp   rU   r]   rt   ru   r"   r"   r"   r#   r^   Œ   s    r^   )ÚsysÚnumpyr   Úcommonr   r   r   r   r   r   r   r+   rD   r^   r"   r"   r"   r#   Ú<module>   s   	#5!