o
    bi[.                     @   s   d Z ddlmZ ddlZddlZddlZG dd dejZ	e
dkr%e  	 G dd	 d	ZG d
d dejZ	 G dd dejZ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    Nc                   @   $   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   data   raw_file_4.h5)   r   r      c                       g | ]} j | qS  working_dir.0ixselfr   Y/home/ubuntu/.local/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   rB           )   rC   rC         ?)2   rC   rC   g       @)F   rC   rC         @)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_dspacerA   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   rg   r+   r   r   r   tearDownI      
zTestEigerLowLevel.tearDownN)__name__
__module____qualname__r,   rc   rj   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_dimensions_   s   z&ExcaliburData.sensor_module_dimensionsc                 C   s    | j | j }| j| j }||fS rs   )rt   ru   rv   rw   ry   r   r   r   fem_stripe_dimensionse   s   z#ExcaliburData.fem_stripe_dimensionsuint16c                 C      t j| j|d}|| |S NrQ   dtype)r#   emptyr|   fillr   valuer   dsetr   r   r   generate_sensor_module_imagek      
z*ExcaliburData.generate_sensor_module_imagec                 C   r   r   )r#   r   r}   r   r   r   r   r   generate_fem_stripe_imagep   r   z'ExcaliburData.generate_fem_stripe_imageN)r~   )rl   rm   rn   rt   rv   ru   rw   rx   propertyr|   r}   r   r   r   r   r   r   rp   X   s    


rp   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   r.   r/   r   r~   )rQ   maxshapechunksr   )r}   r!   r"   create_datasetr#   aranger   )r   r    nframesexcalibur_datascalerQ   	max_shapechunkr+   r   data_value_indexr   r   r   $create_excalibur_fem_stripe_datafilew   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    rp   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   rB   r   r   r.   r/   r4   r5   )r7   r9   r:   r;   s   /datar<   r=   r   r3   )r   rC   r   rD   )r   i  r   rF   )r   i^  r   rI   )r   i  r   g      @)r   i  r   g      "@)r   i~  r   g      (@)r   i  r   g      .@)r   r   r)   r}   lenr    r!   r"   rJ   rK   rL   rM   rN   rO   r#   rP   rS   rT   rU   rV   rW   rX   rY   	fillvaluerZ   rR   r%   )r   r   vdset_stripe_shapevdset_stripe_max_shaper[   r\   vdset_y_offsetr+   rb   r]   rA   r   r   r   r   r   test_excalibur_low_level   sT   

$$

z.TestExcaliburLowLevel.test_excalibur_low_levelc                 C   rd   re   rf   ri   r   r   r   rj      rk   zTestExcaliburLowLevel.tearDownN)rl   rm   rn   r   r,   r   rj   r   r   r   r   r   v   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   r.   r/   )r   r   r   r   r2   r   r3   r   r4   r5   r   r6   )   r   r   r;   r<   r=   rr   rC   r   r   )O   r   r   )r   r)   r!   r"   rJ   	UNLIMITEDrK   rL   rM   rN   rO   r#   rP   r    rQ   rR   r%   rS   rT   rU   rV   rW   rX   rY   listr   rZ   testingassert_array_equal)r   r+   r[   numr\   r]   rA   r(   r^   r_   r`   ra   rb   r   shliner   r   r   test_percival_low_level   sH   



"z,TestPercivalLowLevel.test_percival_low_levelc                 C   rd   re   rf   ri   r   r   r   rj   
  rk   zTestPercivalLowLevel.tearDownN)rl   rm   rn   r,   r   rj   r   r   r   r   r      s    *r   c                 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   rB   r   zvds.h5)rB   r   )rQ   r2   )r   )
fill_valuer<   )dapl)mkdirr!   r"   r#   r   VirtualLayoutint64VirtualSourcecreate_virtual_datasetr   r   fullbytesrL   rM   DATASET_ACCESSset_virtual_prefixrV   openrW   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   TestCaser   rl   mainrp   r   r   r   r   r   r   r   <module>   s    CQD