o
    biD                     @   sp  d Z ddlZddlmZ ddlZddlmZ ddl	Z	ddl
Z
ddlZddlmZ ddlmZ eedG d	d
 d
ejZ	 G dd dZeedG dd dejZ	 eedG dd dejZeedG dd dejZeedG dd dejZeedG dd dejZG dd deZeedG dd dejZdd Zedkre  dS dS )z
Unit test for the high level vds interface for eiger
https://support.hdfgroup.org/HDF5/docNewFeatures/VDS/HDF5-VDS-requirements-use-cases-2014-12-10.pdf
    N)assert_array_equal   )ut   )vds_supportzVDS requires HDF5 >= 1.9.233c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestEigerHighLevelc                    s   t   _g d _t jD ]\}}t j|}t|d}t	
d| |d< |  qt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.h5w      r   dataraw_file_4.h5)   r   r   r   c                       g | ]	}t  j|qS  ospjoinworking_dir.0ixselfr   Z/home/ubuntu/.local/lib/python3.10/site-packages/h5py/tests/test_vds/test_highlevel_vds.py
<listcomp>        z,TestEigerHighLevel.setUp.<locals>.<listcomp>)tempfilemkdtempr   fname	enumerater   r   h5Filenponescloseappendr   koutfilefilenamefr   r   r   setUp   s   


zTestEigerHighLevel.setUpc           
      C   s$  t | jd}tjdtd}d}tj|dddC}| jD ]/}t|dd	 }|j}|j	
  ||d  }tj|d	|d
}	|	|||d d d d f< |}q|jd	|dd W d    n1 s^w   Y  t|dd	 }| |d d | |d d | |d d | |d d |j	
  d S )Nzeiger.h5)N   r   r   shapedtyper   r
   latestlibverrr   r1   -   	fillvalue)
   d   r;           )   r<   r<         ?)2   r<   r<   g       @)F   r<   r<         @)r   r   r   r#   VirtualLayoutfloatr$   r!   r1   filer'   VirtualSourcecreate_virtual_datasetassertEqual)
r   r+   layout	M_minus_1r-   fooin_data	src_shapeMvsourcer   r   r   test_eiger_high_level#   s(   

z(TestEigerHighLevel.test_eiger_high_levelc                 C      t | j d S Nshutilrmtreer   r   r   r   r   tearDown;      zTestEigerHighLevel.tearDownN)__name__
__module____qualname__r.   rP   rV   r   r   r   r   r      s    r   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   c                 C   s&   | j | j }| j| j | j }||fS rR   )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_dimensionsJ   s   z&ExcaliburData.sensor_module_dimensionsc                 C   s    | j | j }| j| j }||fS rR   )r_   r`   ra   rb   rd   r   r   r   fem_stripe_dimensionsP   s   z#ExcaliburData.fem_stripe_dimensionsuint16c                 C      t j| j|d}|| |S Nr0   )r%   emptyrg   fillr   valuer2   dsetr   r   r   generate_sensor_module_imageV      
z*ExcaliburData.generate_sensor_module_imagec                 C   rj   rk   )r%   rl   rh   rm   rn   r   r   r   generate_fem_stripe_image[   rr   z'ExcaliburData.generate_fem_stripe_imageN)ri   )rX   rY   rZ   r_   ra   r`   rb   rc   propertyrg   rh   rq   rs   r   r   r   r   r[   C   s    


r[   c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestExcaliburHighLevelc                 C   s   |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
   r3   r4   r   ri   )r1   maxshapechunksr2   )rh   r#   r$   create_datasetr%   arangers   )r   r!   nframesexcalibur_datascaler1   	max_shapechunkr-   rp   data_value_indexr   r   r   $create_excalibur_fem_stripe_datafiled   s   
"z;TestExcaliburHighLevel.create_excalibur_fem_stripe_datafilec                    sl   t   _dd tddD  _ fdd jD  _d}t  _t jD ]\}} || j| q&d S )Nc                 S   s   g | ]}d | qS )zstripe_%d.h5r   )r   striper   r   r   r   o   s    z0TestExcaliburHighLevel.setUp.<locals>.<listcomp>r^      c                    r   r   r   )r   r-   r   r   r   r   p   r      )	r   r    r   ranger!   r[   edatar"   r   )r   r{   r*   raw_filer   r   r   r.   m   s   
zTestExcaliburHighLevel.setUpc                 C   s  t | jd}tj|ddd}d}t| jd d| j}t| jd d| j}d}t| j}|d }|d	 }	|d
 | ||d
   }
||
|	f}tj	||d}d}t
| jD ]%\}}tj|||d}||d d |||d
  d d f< ||d
 | 7 }qW|jd|d
d |  t|dd }| |d d | |d d | |d d | |d d | |d d | |d d | |d d |j  d S )Nzexcalibur.h5r
   r3   r4   r   r   r6   r;   r   r^   r0   r7   r9   )r   r<   r   r=   )r   i  r   r?   )r   i^  r   rB   )r   i  r   g      @)r   i  r   g      "@)r   i~  r   g      (@)r   i  r   g      .@)r   r   r   r#   r$   r!   r1   r2   lenrC   r"   rF   rG   r'   rH   rE   )r   r+   r-   in_keyin_shr2   vertical_gapnfilesr{   widthheightout_shrI   offsetir,   rO   r   r   r   test_excalibur_high_levelv   s8   

"z0TestExcaliburHighLevel.test_excalibur_high_levelc                 C   rQ   rR   rS   r   r   r   r   rV      rW   zTestExcaliburHighLevel.tearDownN)rX   rY   rZ   r   r.   r   rV   r   r   r   r   rv   a   s
    		&rv   c                   @   ru   )
TestPercivalHighLevelc                    s   t   _g d _d} jD ] }t j|}t|d}t	d| |d< |d7 }|
  qtt jdd}t	dd	 |d<  jd  fd
d jD  _|
  d S )Nr	   r   r
   r   r   r^   r   )   r   r   r   c                    r   r   r   r   r   r   r   r      r   z/TestPercivalHighLevel.setUp.<locals>.<listcomp>)r   r    r   r!   r   r   r#   r$   r%   r&   r'   r(   r)   r   r   r   r.      s   



zTestPercivalHighLevel.setUpc                 C   sD  t | jd}tjdtjd}t| jD ]0\}}|dkrdnd}tj	|d|ddfd	}|d d d d d d f ||d
dd d d d f< qtj
|ddd}|jd|dd W d    n1 s`w   Y  tdttd }t
|d"}|d }	|	d dddf }
| |	jd t|
| W d    d S 1 sw   Y  d S )Npercival.h5O   r   r   r0   r   r   r   r   r   r7   r      r
   r3   r4   r9   r   r6   r]   r<   )r   r   r   r#   rC   r%   float64r"   r!   rF   r$   rG   arraylistr   rH   r1   r   )r   r+   rI   r*   r,   dim1rO   r-   rK   dsliner   r   r   test_percival_high_level   s    4"z.TestPercivalHighLevel.test_percival_high_levelc           
   	   C   sB  t | jd}tjdtjd}t| jD ]/\}}t	|d}t
|d }|||ddd d d d f< W d    n1 s>w   Y  qtj	|dd	d
}|jd|dd W d    n1 s_w   Y  tdttd }t	|d"}|d }|d dddf }	| |jd t|	| W d    d S 1 sw   Y  d S )Nr   r   r0   r6   r   r   r   r
   r3   r4   r   r9   r   r]   r<   )r   r   r   r#   rC   r%   r   r"   r!   r$   rF   rG   r   r   r   rH   r1   r   )
r   r+   rI   r*   r,   r-   rO   rK   r   r   r   r   r   !test_percival_source_from_dataset   s$   "z7TestPercivalHighLevel.test_percival_source_from_datasetc                 C   rQ   rR   rS   r   r   r   r   rV      rW   zTestPercivalHighLevel.tearDownN)rX   rY   rZ   r.   r   r   rV   r   r   r   r   r      s
    r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )SlicingTestCasec              	   C   s~   t  | _tddD ]2}tt| jd|d}|	ddd}t
d| |d d < W d    n1 s7w   Y  q
d S )	Nr^   r   {}.h5r
   r   r<   i4r<   )r   r    tmpdirr   r#   r$   r   r   formatry   r%   rz   )r   nr-   dr   r   r   r.      s   
zSlicingTestCase.setUpc                 C   s   t jdddd}tddD ]2}t| jd|}t j|dd	d
}|ddd ||d d df< |ddd ||d dd f< qt| jd}t j|ddd}|j	d|dd W d    |S 1 scw   Y  |S )Nr   r<   r   r   Nrw   r^   r   r   r   r   r7   r   r<   r   r@   VDS.h5r
   r3   r4   /group/datar   r9   )
r#   rC   r   r   r   r   r   rF   r$   rG   )r   rI   r   r,   rO   r+   r-   r   r   r   make_virtual_ds   s    
zSlicingTestCase.make_virtual_dsc                 C   s   |   }t|dE}t|d d d d g d t|d d dd g d t|d d d d g d	 t|d d dd g d
 W d    d S 1 sRw   Y  d S )Nr6   r   r   r   )r^   r   r   r@   5   )r   r      )r   r   r]   )r   r   	   )r   r#   r$   r   )r   r+   r-   r   r   r   test_slice_source  s    "z!SlicingTestCase.test_slice_sourcec                    s   t t jdd}|d jrJ W d    n1 sw   Y    }t |d+}|d }|js6J  fddtddD }d	d | D |ksOJ W d    d S 1 sZw   Y  d S )
N1.h5r6   r   r   c                    s    h | ]}t  jd |qS )r   )r   r   r   r   )r   r   r   r   r   	<setcomp>  s    z2SlicingTestCase.test_inspection.<locals>.<setcomp>r^   r   c                 S   s   h | ]}|j qS r   )	file_name)r   sr   r   r   r     s    )	r#   r$   r   r   r   
is_virtualr   r   virtual_sources)r   r-   r+   r   	src_filesr   r   r   test_inspection  s   

"zSlicingTestCase.test_inspectionc                 C   sz   t jdddd}t| jd}t j|ddd}| td	 |d
dd |d
d df< W d    d S 1 s6w   Y  d S )Nr   r   r   r   r   r   r   r7   zdifferent numberr   r<   r   1   )r#   rC   r   r   r   rF   assertRaisesRegex
ValueError)r   rI   r,   rO   r   r   r   test_mismatched_selections  s   "z*SlicingTestCase.test_mismatched_selectionsc                 C   rQ   rR   rT   rU   r   r   r   r   r   rV   '  rW   zSlicingTestCase.tearDownN)	rX   rY   rZ   r.   r   r   r   r   rV   r   r   r   r   r      s    	r   c                   @   r   )IndexingTestCasec                 C   sj   t  | _tt| jdd}|ddd}t	dd |d d < W d    d S 1 s.w   Y  d S )Nr   r
   r   r;   r   r;   )
r   r    r   r#   r$   r   r   ry   r%   rz   )r   r-   r   r   r   r   r.   .  s
   
"zIndexingTestCase.setUpc                 C   s  t dd}g d}t| jd}t j|ddd}|||< t| jd}t d	d}g d
}|| |dd < t j|ddd}|jd|dd |jd|dd W d    n1 sYw   Y  t |d}|d d }	|d d }
W d    n1 s{w   Y  t|	| t	
dd  t|
dd  g d t	d}d||< | |	|dk  d | |	|dk  d | |
d d d S )Nr   r   )
r   r   r      !   /   rA   K   `   b   r   r   r   r7   r   )r   )r   r^   r   r   r]   r^   r
   r3   r4   z/datar   r9   s   /data2r6   r   z/data2r;   )r   r;   (   r@   P   r<   r   )r#   rC   r   r   r   rF   r$   rG   r   r%   rz   zerosrH   minmax)r   rI   indsr,   rO   r+   layout2inds2r-   r   data2maskr   r   r   test_index_layout5  s0   
z"IndexingTestCase.test_index_layoutc                 C   rQ   rR   r   r   r   r   r   rV   [  rW   zIndexingTestCase.tearDownN)rX   rY   rZ   r.   r   rV   r   r   r   r   r   *  s    &r   c                   @   ru   )
RelativeLinkTestCasec                 C   s   t  | _t| jd| _t| jd| _td| _	tdd | _
t| jd}|ddd}| j	|d d < W d    n1 sCw   Y  t| jd}|ddd}| j
|d d < | | W d    d S 1 snw   Y  d S )	Nztestfile1.h5ztestfile2.h5r;   r
   r   r   f4)r   r    r   r   r   f1f2r%   rz   data1r   r#   r$   ry   make_vds)r   r-   r   r   r   r   r.   b  s   
"zRelativeLinkTestCase.setUpc                 C   sP   t dd}t j| jddd}t j| jddd}||d< ||d< |d| d S )	Nr   r;   r   r   r   r7   r   r^   virtual)r#   rC   rF   r   r   rG   )r   r-   rI   vsource1vsource2r   r   r   r   u  s   zRelativeLinkTestCase.make_vdsc                 C   s  t | j$}|d d d  }tj|d | j tj|d | j W d    n1 s-w   Y  t	| j
d}t| j| t |+}|d d d  }|jdksUJ tj|d | j tj|d | j W d    n1 ssw   Y  t	| j
d}t| j| t |+}|d d d  }|jdksJ tj|d d tj|d | j W d    d S 1 sw   Y  d S )Nr   r   r^   ztestfile3.h5r   ztestfile4.h5)r#   r$   r   r%   testingr   r   r   r   r   r   osrenamer2   r   )r   r-   r   f3r   r   r   r   test_relative_vds~  s*   "z&RelativeLinkTestCase.test_relative_vdsc                 C   rQ   rR   r   r   r   r   r   rV     rW   zRelativeLinkTestCase.tearDownN)rX   rY   rZ   r.   r   r   rV   r   r   r   r   r   ^  s
    	r   c                   @   s   e Zd Zdd ZdS )RelativeLinkBuildVDSTestCasec                 C   sb   |j dddd}tj| jddd|d< tj| jddd|d	< W d    d S 1 s*w   Y  d S )
Nr   r   r   r2   r   r   r7   r   r^   )build_virtual_datasetr#   rF   r   r   )r   r-   rI   r   r   r   r     s   "z%RelativeLinkBuildVDSTestCase.make_vdsN)rX   rY   rZ   r   r   r   r   r   r     s    r   c                   @   r   )VDSUnlimitedTestCasec              	   C   s   t  | _t| jd| _t| jd=}|jdt	
dddddd	}tjdtd
d| _t|}|d tjdf | jd tjdf< |d| j W d    d S 1 sTw   Y  d S )Nz	resize.h5r
   sourcer   )r;   r   )Nr   r;   r^   r   )r   r1   rw   rx   r:   )Nr^   r   r^   r   r   )r   r    r   r   r   pathr#   r$   ry   r%   rz   rC   intrI   rF   	UNLIMITEDrG   )r   r-   source_dsetlayout_sourcer   r   r   r.     s    

""zVDSUnlimitedTestCase.setUpc                 C   s   t ddddd}t |t jdddf}t |t jdddf}t| jd	:}|d
 }|d }t j	|| |j
ddd t j	|| t jdtd|dd df< t j	|| W d    d S 1 sgw   Y  d S )Nr^   r   r   r;   r   r   )r1   
fill_valuer   ar   r   )axisr   r   )r%   rz   reshapevstackfullr#   r$   r   r   r   resizer   r   )r   comp1comp2comp3r-   r   virtual_dsetr   r   r   test_unlimited_axis  s$   "z(VDSUnlimitedTestCase.test_unlimited_axisc                 C   rQ   rR   r   r   r   r   r   rV     rW   zVDSUnlimitedTestCase.tearDownN)rX   rY   rZ   r.   r   rV   r   r   r   r   r     s    r   c                 C   sr   |  ddtj W d    n1 sw   Y  | d }|js!J | g ks)J tj|d tdtj d S )NrK   )r;   r   r   )r   r%   int32r   r   r   r   r   )writable_filerp   r   r   r   test_no_mappings  s   
 r   __main__)__doc__numpyr%   numpy.testingr   r   os.pathr   r   rT   r   h5pyr#   commonr   _hl.vdsr   
skipUnlessTestCaser   r[   rv   r   r   r   r   r   r   r   rX   mainr   r   r   r   <module>   s\    +=@@2<+
