o
    7?enC                     @   sh  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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.0Zixselfr   g/home/www/facesmatcher.com/pyenv/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Zlibverrr   r0   -   	fillvalue)
   d   r9           )   r:   r:         ?)2   r:   r:   g       @)F   r:   r:         @)r   r   r   r"   VirtualLayoutfloatr#   r    r0   filer&   VirtualSourcecreate_virtual_datasetassertEqual)
r   r*   layoutZ	M_minus_1r,   fooZin_dataZ	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-   rK   rQ   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 rM   )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   Zx_pixelsZy_pixelsr   r   r   sensor_module_dimensionsJ   s   z&ExcaliburData.sensor_module_dimensionsc                 C   s    | j | j }| j| j }||fS rM   )rZ   r[   r\   r]   r_   r   r   r   fem_stripe_dimensionsP   s   z#ExcaliburData.fem_stripe_dimensionsuint16c                 C      t j| j|d}|| |S Nr/   )r$   emptyr`   fillr   valuer1   dsetr   r   r   generate_sensor_module_imageV      
z*ExcaliburData.generate_sensor_module_imagec                 C   rc   rd   )r$   re   ra   rf   rg   r   r   r   generate_fem_stripe_image[   rk   z'ExcaliburData.generate_fem_stripe_imageN)rb   )rS   rT   rU   rZ   r\   r[   r]   r^   propertyr`   ra   rj   rl   r   r   r   r   rV   C   s    


rV   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)rY   r
   r2   r3   r   rb   )r0   maxshapechunksr1   )ra   r"   r#   create_datasetr$   arangerl   )r   r    nframesZexcalibur_datascaler0   Z	max_shapechunkr,   ri   Z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   Zstriper   r   r   r   o   s    z0TestExcaliburHighLevel.setUp.<locals>.<listcomp>rY      c                    r   r   r   )r   r,   r   r   r   r   p   r      )	r   r   r   ranger    rV   Zedatar!   rw   )r   rt   r)   Z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
   r2   r3   r   r   r4   r9   r   rY   r/   r5   r7   )r   r:   r   r;   )r   i  r   r=   )r   i^  r   r@   )r   i  r   g      @)r   i  r   g      "@)r   i~  r   g      (@)r   i  r   g      .@)r   r   r   r"   r#   r    r0   r1   lenrA   r!   rD   rE   r&   rF   rC   )r   r*   r,   Zin_keyZin_shr1   Zvertical_gapZnfilesrt   widthheightZout_shrG   offsetir+   rJ   r   r   r   test_excalibur_high_levelv   s8   

"z0TestExcaliburHighLevel.test_excalibur_high_levelc                 C   rL   rM   rN   r   r   r   r   rQ      rR   zTestExcaliburHighLevel.tearDownN)rS   rT   rU   rw   r-   r   rQ   r   r   r   r   ro   a   s
    		&ro   c                   @   rn   )
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   rY   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   r/   r   r   r   r   r   r5   r      r
   r2   r3   r7   r   r4   rX   r:   )r   r   r   r"   rA   r$   float64r!   r    rD   r#   rE   arraylistrz   rF   r0   r   )r   r*   rG   r)   r+   Zdim1rJ   r,   rH   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   r/   r4   r   r   r   r
   r2   r3   r   r7   r   rX   r:   )r   r   r   r"   rA   r$   r   r!   r    r#   rD   rE   r   r   rz   rF   r0   r   )
r   r*   rG   r)   r+   r,   rJ   rH   r   r   r   r   r   !test_percival_source_from_dataset   s$   "z7TestPercivalHighLevel.test_percival_source_from_datasetc                 C   rL   rM   rN   r   r   r   r   rQ      rR   zTestPercivalHighLevel.tearDownN)rS   rT   rU   r-   r   r   rQ   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 )	NrY   ry   {}.h5r
   r   r:   i4r:   )r   r   tmpdirrz   r"   r#   r   r   formatrr   r$   rs   )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rp   rY   ry   r   r   r   r5   r   r:   r   r>   VDS.h5r
   r2   r3   /group/datar   r7   )
r"   rA   rz   r   r   r   r   rD   r#   rE   )r   rG   r   r+   rJ   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 )Nr4   r   r   r   )rY   r   ry   r>   5   )r   r      )r   r   rX   )ry   rx   	   )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.h5r4   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>rY   ry   c                 S   s   h | ]}|j qS r   )	file_name)r   sr   r   r   r     s    )	r"   r#   r   r   r   Z
is_virtualr   rz   Zvirtual_sources)r   r,   r*   r   Z	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   r5   zdifferent numberr   r:   r   1   )r"   rA   r   r   r   rD   assertRaisesRegex
ValueError)r   rG   r+   rJ   r   r   r   test_mismatched_selections  s   "z*SlicingTestCase.test_mismatched_selectionsc                 C   rL   rM   rO   rP   r   r   r   r   r   rQ   '  rR   zSlicingTestCase.tearDownN)	rS   rT   rU   r-   r   r   r   r   rQ   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   r9   r   r9   )
r   r   r   r"   r#   r   r   rr   r$   rs   )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      !   /   r?   K   `   b   r   r   r   r5   r   )r   )r   rY   r   ry   rX   rY   r
   r2   r3   z/datar   r7   s   /data2r4   r   z/data2r9   )r   r9   (   r>   P   r:   r   )r"   rA   r   r   r   rD   r#   rE   r   r$   rs   zerosrF   minmax)r   rG   Zindsr+   rJ   r*   Zlayout2Zinds2r,   r   data2maskr   r   r   test_index_layout5  s0   
z"IndexingTestCase.test_index_layoutc                 C   rL   rM   r   r   r   r   r   rQ   [  rR   zIndexingTestCase.tearDownN)rS   rT   rU   r-   r   rQ   r   r   r   r   r   *  s    &r   c                   @   rn   )
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.h5r9   r
   r   r   f4)r   r   r   r   r   f1f2r$   rs   data1r   r"   r#   rr   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   r9   r   r   r   r5   r   rY   virtual)r"   rA   rD   r   r   rE   )r   r,   rG   Zvsource1Z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   rY   ztestfile3.h5r   ztestfile4.h5)r"   r#   r   r$   testingr   r   r   r   r   r   osrenamer1   r   )r   r,   r   Zf3r   r   r   r   test_relative_vds~  s*   "z&RelativeLinkTestCase.test_relative_vdsc                 C   rL   rM   r   r   r   r   r   rQ     rR   zRelativeLinkTestCase.tearDownN)rS   rT   rU   r-   r   r   rQ   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   r1   r   r   r5   r   rY   )Zbuild_virtual_datasetr"   rD   r   r   )r   r,   rG   r   r   r   r     s   "z%RelativeLinkBuildVDSTestCase.make_vdsN)rS   rT   rU   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   )r9   r   )Nr   r9   rY   r   )r   r0   rp   rq   r8   )NrY   r   rY   r   r   )r   r   r   r   r   pathr"   r#   rr   r$   rs   rA   intrG   rD   Z	UNLIMITEDrE   )r   r,   source_dsetZ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 )NrY   r   r   r9   r   r   )r0   Z
fill_valuer   ar   r   )Zaxisr   r   )r$   rs   ZreshapeZvstackfullr"   r#   r   r   r   resizer   r   )r   Zcomp1Zcomp2Zcomp3r,   r   Zvirtual_dsetr   r   r   test_unlimited_axis  s$   "z(VDSUnlimitedTestCase.test_unlimited_axisc                 C   rL   rM   r   r   r   r   r   rQ     rR   zVDSUnlimitedTestCase.tearDownN)rS   rT   rU   r-   r   rQ   r   r   r   r   r     s    r   __main__)__doc__numpyr$   Znumpy.testingr   r   Zos.pathr   r   rO   r   Zh5pyr"   commonr   Z_hl.vdsr   Z
skipUnlessZTestCaser   rV   ro   r   r   r   r   r   r   rS   mainr   r   r   r   <module>   sZ    +=@@2<*