o
    i e0                     @   s   d Z ddlmZ ddlZddlZddlZeej	j
dkdG dd dejZed	kr/e  	 G d
d dZeej	j
dkdG dd dejZ	 eej	j
dkdG dd dejZeej	j
dkddd ZdS )z
Unit test for the low level vds interface for eiger
https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
   )ut    N)   	      zVDS requires HDF5 >= 1.9.233c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestEigerLowLevelc                       t   _g d _d} jD ]} j| }t|d}td| |d< |d7 }|  qt jd d}tdd	 |d<  j	d  fd
d jD  _|  d S )Nzraw_file_1.h5zraw_file_2.h5zraw_file_3.h5r   w      r   datar   raw_file_4.h5)   r   r      c                       g | ]} j | qS  working_dir.0ixselfr   T/var/www/myenv/lib/python3.10/site-packages/h5py/tests/test_vds/test_lowlevel_vds.py
<listcomp>       z+TestEigerLowLevel.setUp.<locals>.<listcomp>
tempfilemkdtempr   fnameh5Filenponescloseappendr   koutfilefilenamefr   r   r   setUp      




zTestEigerLowLevel.setUpc                 C   s  | j d | _tj| jdddy}d}|}tj||}tjtjj}|	t
dg d}| jD ]A}t|dd	 }|j}	|	}
|j  tj|	|
}|jd
dd|	d |j|ddfdd|	d |||dd| ||	d 7 }q1tjj|jdtjj||d W d    n1 sw   Y  t| jdd	 }| |d d | |d d | |d d | |d d |j  d S )Nzeiger.h5r   latestlibver)N   r   r   r   rr   r   r   r   r   r   r   startstridecountblockutf-8   datanametidspacedcpl)
   d   rD           )   rE   rE         ?)2   rE   rE   g       @)F   rE   rE         @)r   r+   r#   r$   h5screate_simpleh5pcreateDATASET_CREATEset_fill_valuer%   arrayr"   shapefiler'   select_hyperslabset_virtualencodeh5didh5tNATIVE_INT16assertEqual)r   r-   vdset_shapevdset_max_shapevirt_dspacerC   r*   fooin_data	src_shapemax_src_shape
src_dspacer   r   r   test_eiger_low_level!   sL   

!z&TestEigerLowLevel.test_eiger_low_levelc                 C   .   dd l }| jD ]}|| q|| j d S Nr   osr"   remover+   r   ri   r-   r   r   r   tearDownK      
zTestEigerLowLevel.tearDownN)__name__
__module____qualname__r.   re   rl   r   r   r   r   r      s    *r   __main__c                   @   sL   e Zd ZdZdZdZdZdZedd Z	edd Z
dd
dZdddZdS )ExcaliburData      r   r   c                 C   s&   | j | j }| j| j | j }||fS N)FEM_PIXELS_PER_CHIP_XFEM_CHIPS_PER_STRIPE_XFEM_PIXELS_PER_CHIP_YFEM_CHIPS_PER_STRIPE_YFEM_STRIPES_PER_MODULEr   x_pixelsy_pixelsr   r   r   sensor_module_dimensionsa   s   z&ExcaliburData.sensor_module_dimensionsc                 C   s    | j | j }| j| j }||fS ru   )rv   rw   rx   ry   r{   r   r   r   fem_stripe_dimensionsg   s   z#ExcaliburData.fem_stripe_dimensionsuint16c                 C      t j| j|d}|| |S NrS   dtype)r%   emptyr~   fillr   valuer   dsetr   r   r   generate_sensor_module_imagem      
z*ExcaliburData.generate_sensor_module_imagec                 C   r   r   )r%   r   r   r   r   r   r   r   generate_fem_stripe_imager   r   z'ExcaliburData.generate_fem_stripe_imageN)r   )rn   ro   rp   rv   rx   rw   ry   rz   propertyr~   r   r   r   r   r   r   r   rr   Z   s    


rr   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestExcaliburLowLevelc                 C   s   |f|j  }|f|j  }d|j  }tj|ddd$}|jd|||dd}	t|D ]}
||
| |	|
< q)W d    d S 1 s@w   Y  d S )Nr   r   r0   r1   r   r   )rS   maxshapechunksr   )r   r#   r$   create_datasetr%   aranger   )r   r"   nframesexcalibur_datascalerS   	max_shapechunkr-   r   data_value_indexr   r   r   $create_excalibur_fem_stripe_datafile{   s   
"z:TestExcaliburLowLevel.create_excalibur_fem_stripe_datafilec                    sp   t   _dd tddD  _ fdd jD  _d}t  _d} jD ]} || j| |d7 }q&d S )Nc                 S   s   g | ]}d | qS )zstripe_%d.h5r   )r   striper   r   r   r      s    z/TestExcaliburLowLevel.setUp.<locals>.<listcomp>r      c                    r   r   r   r   r   r   r   r      r      r   )r    r!   r   ranger"   rr   edatar   )r   r   r*   raw_filer   r   r   r.      s   


zTestExcaliburLowLevel.setUpc                 C   s  | j }| jd | _d|j }d|j }d|jd t| j dt| jd   |jd f}d|jd t| j dt| jd   |jd f}d}tj| jdd	d
j}tj	||}tj	||}	tj
tj
j}
|
tdg |jdd|d | jD ] }|	jd|dfd|d |
|	|dd| ||d d 7 }q{tjj|jdtjj|	|
d}|d jdksJ W d    n1 sw   Y  t| jdd }| |d d | |d d | |d d | |d d | |d d | |d d | |d  d! |j  d S )"Nzexcalibur.h5r   )r   r   r   rD   r   r   r0   r1   r6   r7   )r9   r;   r<   r=   s   /datar>   r?   r   r5   )r   rE   r   rF   )r   i  r   rH   )r   i^  r   rK   )r   i  r   g      @)r   i  r   g      "@)r   i~  r   g      (@)r   i  r   g      .@)r   r   r+   r   lenr"   r#   r$   rL   rM   rN   rO   rP   rQ   r%   rR   rU   rV   rW   rX   rY   rZ   r[   	fillvaluer\   rT   r'   )r   r   vdset_stripe_shapevdset_stripe_max_shaper]   r^   vdset_y_offsetr-   rd   r_   rC   r   r   r   r   r   test_excalibur_low_level   sT   

$$

z.TestExcaliburLowLevel.test_excalibur_low_levelc                 C   rf   rg   rh   rk   r   r   r   rl      rm   zTestExcaliburLowLevel.tearDownN)rn   ro   rp   r   r.   r   rl   r   r   r   r   r   x   s
    	6r   c                   @   r   )TestPercivalLowLevelc                    r	   )Nr
   r   r   r   r   r   r   )   r   r   r   c                    r   r   r   r   r   r   r   r      r   z.TestPercivalLowLevel.setUp.<locals>.<listcomp>r   r)   r   r   r   r.      r/   zTestPercivalLowLevel.setUpc              
   C   s  | j d | _tj| jddd}d}tjj}|f|dd   }tj||}tjtjj	}|
tdg d}| jD ]X}t|d	d
 }	|	j}
|f|
dd   }|	j  tj|
|}|jdd|ddfd|
dd   d |j|ddfd|ddfd|
dd   d |||dd| |d7 }q<tjj|jdtjj||d}t| jd	}|d
 j}|d
 d dddf }tdttd }|  | |d tj|| W d    d S 1 sw   Y  d S )Nzpercival.h5r   r0   r1   )r   r   r   r   r4   r   r5   r   r6   r7   r   r8   )   r   r   r=   r>   r?   rt   rE   r   r   )O   r   r   )r   r+   r#   r$   rL   	UNLIMITEDrM   rN   rO   rP   rQ   r%   rR   r"   rS   rT   r'   rU   rV   rW   rX   rY   rZ   r[   listr   r\   testingassert_array_equal)r   r-   r]   numr^   r_   rC   r*   r`   ra   rb   rc   rd   r   shliner   r   r   test_percival_low_level   sH   



"z,TestPercivalLowLevel.test_percival_low_levelc                 C   rf   rg   rh   rk   r   r   r   rl     rm   zTestPercivalLowLevel.tearDownN)rn   ro   rp   r.   r   rl   r   r   r   r   r      s    *r   )r   rD   r   z1get_ / set_virtual_prefix requires HDF5 >= 1.10.2c                 C   s  | d    | d    t| d d d}td|d< t| d d d}tjdtjd	}tjdddd
|d d < |jd|dd tj	
|d tjddd t| d }tjtjj}|| tjj|jd|d}t|}tj	
|d d  td |j  |ksJ d S )Nabzsrc.h5r   rD   r   zvds.h5)rD   r   )rS   r4   )r   )
fill_valuer>   )dapl)mkdirr#   r$   r%   r   VirtualLayoutint64VirtualSourcecreate_virtual_datasetr   r   fullbytesrN   rO   DATASET_ACCESSset_virtual_prefixrX   openrY   Datasetget_access_plistget_virtual_prefix)tmp_pathsrc_filevds_filelayoutpath_ar   vds_idvdsr   r   r   test_virtual_prefix  s    

r   )__doc__commonr   numpyr%   h5pyr#   r    
skipUnlessversionhdf5_version_tupleTestCaser   rn   mainrr   r   r   r   r   r   r   r   <module>   s4    CQD