
    1VhD                        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j"                  ed       G d	 d
ej$                               Z	  G d d      Z ej"                  ed       G d dej$                               Z	  ej"                  ed       G d dej$                               Z ej"                  ed       G d dej$                               Z ej"                  ed       G d dej$                               Z ej"                  ed       G d dej$                               Z G d de      Z ej"                  ed       G d dej$                               Zd Zedk(  r ej<                          yy)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 Zd Zd Zy)TestEigerHighLevelc                    t        j                         | _        g d| _        t	        | j                        D ]f  \  }}t        j                  | j                  |      }t        j                  |d      }t        j                  d      |z  |d<   |j                          h t        j                  t        j                  | j                  d      d      }t        j                  d      dz  |d<   | j                  j                  d       | j                  D cg c]"  }t        j                  | j                  |      $ c}| _        |j                          y c c}w )Nzraw_file_1.h5zraw_file_2.h5zraw_file_3.h5w      r   dataraw_file_4.h5)   r   r   r   )tempfilemkdtempworking_dirfname	enumerateospjoinh5Filenponescloseappendselfkoutfilefilenamefixs         V/home/dcms/DCMS/lib/python3.12/site-packages/h5py/tests/test_vds/test_highlevel_vds.pysetUpzTestEigerHighLevel.setUp   s    #++-H
#DJJ/ 	JAwxx 0 0':H#&A/!3AfIGGI		 GGCHHT--?EGGN+a/&	

/*?CzzJchht//4J
		 Ks   'Ec                    t        j                  | j                  d      }t        j                  dt
              }d}t        j                  |dd      5 }| j                  D ]q  }t        j                  |d      d	   }|j                  }|j                  j                          ||d   z   }t        j                  |d	|
      }	|	|||d d d d f<   |}s |j                  d	|d       d d d        t        j                  |d      d	   }| j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       |j                  j                          y # 1 sw Y   xY w)Nzeiger.h5)N   r   r   shapedtyper   r   latestlibverrr   r,   -   	fillvalue)
   d   r6           )   r7   r7         ?)2   r7   r7   g       @)F   r7   r7         @)r   r   r   r   VirtualLayoutfloatr   r   r,   filer   VirtualSourcecreate_virtual_datasetassertEqual)
r!   r#   layout	M_minus_1r%   fooin_data	src_shapeMvsources
             r'   test_eiger_high_levelz(TestEigerHighLevel.test_eiger_high_level#   sb   ((4++Z8!!eD	WWWc(3 		Cqzz ''#s+F3#MM	""$	!,**3iH,3y{Aq()	 $$VVr$B		C GGGS!&);-<#.<#.<#.	!		C 		Cs   BE;;Fc                 B    t        j                  | j                         y Nshutilrmtreer   r!   s    r'   tearDownzTestEigerHighLevel.tearDown;       d&&'    N)__name__
__module____qualname__r(   rK   rR    rT   r'   r	   r	      s    0(rT   r	   c                   P    e Zd ZdZdZdZdZdZed        Z	ed        Z
d
dZd
dZy	)ExcaliburData         r   c                     | j                   | j                  z  }| j                  | j                  z  | j                  z  }||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!   x_pixelsy_pixelss      r'   sensor_module_dimensionsz&ExcaliburData.sensor_module_dimensionsJ   sD    --0K0KK--0K0KKdNiNii""rT   c                 n    | j                   | j                  z  }| j                  | j                  z  }||fS rM   )r_   r`   ra   rb   rd   s      r'   fem_stripe_dimensionsz#ExcaliburData.fem_stripe_dimensionsP   s9    --0K0KK--0K0KK""rT   c                 j    t        j                  | j                  |      }|j                  |       |S Nr+   )r   emptyrg   fillr!   valuer-   dsets       r'   generate_sensor_module_imagez*ExcaliburData.generate_sensor_module_imageV   s)    xxd;;5I		%rT   c                 j    t        j                  | j                  |      }|j                  |       |S rk   )r   rl   ri   rm   rn   s       r'   generate_fem_stripe_imagez'ExcaliburData.generate_fem_stripe_image[   s)    xxd88F		%rT   N)uint16)rU   rV   rW   r_   ra   r`   rb   rc   propertyrg   ri   rq   rs   rX   rT   r'   rZ   rZ   C   sP    # #
 # #

rT   rZ   c                   $    e Zd Zd Zd Zd Zd Zy)TestExcaliburHighLevelc                 0   |f|j                   z   }|}d|j                   z   }t        j                  |dd      5 }|j                  d|||d      }	t	        j
                  |      D ]  }
|j                  |
|z        |	|
<    	 d d d        y # 1 sw Y   y xY w)N)r]   r   r.   r/   r   rt   )r,   maxshapechunksr-   )ri   r   r   create_datasetr   arangers   )r!   r   nframesexcalibur_datascaler,   	max_shapechunkr%   rp   data_value_indexs              r'   $create_excalibur_fem_stripe_datafilez;TestExcaliburHighLevel.create_excalibur_fem_stripe_datafiled   s    
^AAA	~;;;WWUC1 	jQ##F%)TYai#jD$&IIg$6 j )7)Q)QRbchRh)i%&j	j 	j 	js   ABBc                    t        j                         | _        t        dd      D cg c]  }d|z  	 c}| _        | j                  D cg c]"  }t        j                  | j                  |      $ c}| _        d}t               | _        t        | j                        D ]#  \  }}| j                  ||| j                  |       % y c c}w c c}w )Nr]      zstripe_%d.h5   )r   r   r   ranger   r   r   rZ   edatar   r   )r!   striper%   r}   r"   raw_files         r'   r(   zTestExcaliburHighLevel.setUpm   s    #++-<A!AJG&nv-G
=AZZHchht//3H
"_
$TZZ0 	WKAx55hTUV	W	 HHs   C
'Cc                 T   t        j                  | j                  d      }t        j                  |dd      }d}t        j                  | j
                  d   d      |   j                  }t        j                  | j
                  d   d      |   j                  }d}t        | j
                        }|d   }|d	   }	|d
   |z  ||d
z
  z  z   }
||
|	f}t        j                  ||      }d}t        | j
                        D ]<  \  }}t        j                  |||      }||d d |||d
   z   d d f<   ||d
   |z   z  }> |j                  d|d
       |j                          t        j                  |d      d   }| j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       | j                  |d   d       |j                  j                          y )Nzexcalibur.h5r   r.   r/   r   r   r1   r6   r   r]   r+   r2   r4   )r   r7   r   r8   )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   r,   r-   lenr>   r   rA   rB   r   rC   r@   )r!   r#   r%   in_keyin_shr-   vertical_gapnfilesr}   widthheightout_shrD   offsetir$   rJ   s                    r'   test_excalibur_high_levelz0TestExcaliburHighLevel.test_excalibur_high_levelv   s   ((4++^<GGGCx0

1c*6288

1c*6288 TZZ(a(6/lF1H&=>65) !!e<$TZZ0 	.KAx&&xuEG7>F1ffuQx/0!34eAh--F		. 	
  3 ?		GGGC (7S)7S)7S)7S)7S)8d+8d+	rT   c                 B    t        j                  | j                         y rM   rN   rQ   s    r'   rR   zTestExcaliburHighLevel.tearDown   rS   rT   N)rU   rV   rW   r   r(   r   rR   rX   rT   r'   rw   rw   a   s    jW$L(rT   rw   c                   $    e Zd Zd Zd Zd Zd Zy)TestPercivalHighLevelc                    t        j                         | _        g d| _        d}| j                  D ]h  }t	        j
                  | j                  |      }t        j                  |d      }t        j                  d      |z  |d<   |dz  }|j                          j t        j                  t	        j
                  | j                  d      d      }t        j                  d      d	z  |d<   | j                  j                  d       | j                  D cg c]"  }t	        j
                  | j                  |      $ c}| _        |j                          y c c}w )
Nr   r   r   r   r   r]   r   )   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   r    s         r'   r(   zTestPercivalHighLevel.setUp   s   #++-F
zz 	Gxx 0 0':H%A-a/AfIEAGGI	 GGCHHT--?EGGL)!+&	

/*?CzzJchht//4J
		 Ks   'Ec                    t        j                  | j                  d      }t        j                  dt
        j                        }t        | j                        D ]D  \  }}|dk(  rdnd}t        j                  |d|ddf	      }|d d d d d d f   ||d
dd d d d f<   F t        j                  |dd      5 }|j                  d|d       d d d        t        j                  dt        t        d            z        }t        j                  |d      5 }|d   }	|	d dddf   }
| j                  |	j                   d       t#        |
|       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Npercival.h5O   r   r   r+   r   r   r   r   r   r2   r      r   r.   r/   r4   r   r1   r\   r7   )r   r   r   r   r>   r   float64r   r   rA   r   rB   arraylistr   rC   r,   r   )r!   r#   rD   r"   r$   dim1rJ   r%   rF   dslines              r'   test_percival_high_levelz.TestPercivalHighLevel.test_percival_high_level   sX   ((4++m< !!bjjI$TZZ0 	4KAxa2RD&&xtS#>NOG#*1a7#3F1R61a< 	4 WWWc(3 	Cq$$VVr$B	C hhq4a>)*WWWS! 	*Q6BbqbSj>DRXX|5tS)		* 	*		C 	C	* 	*s   :E8E$E!$E-c                    t        j                  | j                  d      }t        j                  dt
        j                        }t        | j                        D ]K  \  }}t        j                  |d      5 }t        j                  |d         }|||ddd d d d f<   d d d        M t        j                  |dd	
      5 }|j                  d|d       d d d        t        j                  dt        t        d            z        }t        j                  |d      5 }|d   }|d dddf   }	| j                  |j                   d       t#        |	|       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r+   r1   r   r   r   r   r.   r/   r   r4   r   r\   r7   )r   r   r   r   r>   r   r   r   r   r   rA   rB   r   r   r   rC   r,   r   )
r!   r#   rD   r"   r$   r%   rJ   rF   r   r   s
             r'   !test_percival_source_from_datasetz7TestPercivalHighLevel.test_percival_source_from_dataset   sc   ((4++m< !!bjjI$TZZ0 	/KAx3' /1**1V95'.qAvq!|$/ /	/ WWWc(3 	Cq$$VVr$B	C hhq4a>)*WWWS! 	*Q6BbqbSj>DRXX|5tS)		* 	*/ /
	C 	C	* 	*s$   7(EE,8E8E)	,E58Fc                 B    t        j                  | j                         y rM   rN   rQ   s    r'   rR   zTestPercivalHighLevel.tearDown   rS   rT   N)rU   rV   rW   r(   r   r   rR   rX   rT   r'   r   r      s    "****(rT   r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)SlicingTestCasec           	      d   t        j                         | _        t        dd      D ]|  }t	        j
                  t        j                  | j                  dj                  |            d      5 }|j                  ddd      }t        j                  d      |z   |d d  d d d        ~ y # 1 sw Y   xY w)	Nr]   r   {}.h5r   r   r7   i4r7   )r   r   tmpdirr   r   r   r   r   formatr{   r   r|   )r!   nr%   ds       r'   r(   zSlicingTestCase.setUp   s    &&(q! 	*A$++w~~a/@A3G *1$$VVT:yy~)!* *	** *s   ,/B&&B/	c                    t        j                  ddd      }t        dd      D ]m  }t        j                  | j
                  dj                  |            }t        j                  |dd	
      }|ddd   ||dz
  d df<   |ddd   ||dz
  dd f<   o t        j                  | j
                  d      }t        j                  |dd      5 }|j                  d|d       d d d        |S # 1 sw Y   |S xY w)Nr   r7   r   r   Nry   r]   r   r   r   r   r2   r   r7   r   r;   VDS.h5r   r.   r/   /group/datar   r4   )
r   r>   r   r   r   r   r   rA   r   rB   )r!   rD   r   r$   rJ   r#   r%   s          r'   make_virtual_dszSlicingTestCase.make_virtual_ds   s    !!(D9Eq! 	2AxxW^^A->?H&&xvFG!(3q!1F1q5#2#:!(3q!1F1q5"#:	2 ((4;;1 WWWc(3 	Jq$$]Fb$I	J 	J s   C,,C6c                 2   | j                         }t        j                  |d      5 }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
       d d d        y # 1 sw Y   y xY w)Nr1   r   r   r   )r]   r   r   r;   5   )r   r      )r   r   r\   )r   r   	   )r   r   r   r   )r!   r#   r%   s      r'   test_slice_sourcez!SlicingTestCase.test_slice_source  s    &&(WWWc" 	Faq/22A6	Bq/22b99Eq/22A6	Bq/22b99E		F 	F 	Fs   ABBc           
      R   t        j                  t        j                  | j                  d      d      5 }|d   j
                  rJ 	 d d d        | j                         }t        j                  |d      5 }|d   }|j
                  sJ t        dd      D ch c]1  }t        j                  | j                  dj                  |            3 }}|j                         D ch c]  }|j                   c}|k(  sJ 	 d d d        y # 1 sw Y   xY wc c}w c c}w # 1 sw Y   y xY w)N1.h5r1   r   r   r]   r   r   )r   r   r   r   r   
is_virtualr   r   r   virtual_sources	file_name)r!   r%   r#   r   r   	src_filesss          r'   test_inspectionzSlicingTestCase.test_inspection  s   WWSXXdkk62C8 	,Ay+++++	, &&(WWWc" 	La=!B== = #(1+/ $++w~~a/@A /I /)+););)=>AAKK>)KKK	L 	L	, 	,/>	L 	Ls5   D6"D6DD"D5DD
DD&c                    t        j                  ddd      }t        j                  | j                  d      }t        j
                  |dd      }| j                  t        d	      5  |d
dd   |d
d df<   d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r2   zdifferent numberr   r7   r   1   )r   r>   r   r   r   rA   assertRaisesRegex
ValueError)r!   rD   r$   rJ   s       r'   test_mismatched_selectionsz*SlicingTestCase.test_mismatched_selections  s    !!(D9E88DKK0""8V6B##J0CD 	.$Qs1W-F1crc6N	. 	. 	.s   'B  B	c                 B    t        j                  | j                         y rM   rO   rP   r   rQ   s    r'   rR   zSlicingTestCase.tearDown'      dkk"rT   N)	rU   rV   rW   r(   r   r   r   r   rR   rX   rT   r'   r   r      s"    *(FL.#rT   r   c                       e Zd Zd Zd Zd Zy)IndexingTestCasec                 $   t        j                         | _        t        j                  t        j                  | j                  d      d      5 }|j                  ddd      }t        j                  d      dz  |d d  d d d        y # 1 sw Y   y xY w)Nr   r   r   r6   r   r6   )
r   r   r   r   r   r   r   r{   r   r|   )r!   r%   r   s      r'   r(   zIndexingTestCase.setUp.  sp    &&(WWSXXdkk62C8 	$A  5A99R=#AaD	$ 	$ 	$s   /BBc                    t        j                  dd      }g d}t        j                  | j                  d      }t        j
                  |dd      }|||<   t        j                  | j                  d      }t        j                  d	d      }g d
}||   |dd  t        j                  |dd      5 }|j                  d|d       |j                  d|d       d d d        t        j                  |d      5 }|d   d   }	|d   d   }
d d d        t        	|   t        j                  d      dz         t        
dd  g d       t        j                  d      }d||<   | j                  |	|dk(     j                         d       | j                  |	|dk(     j                         d       | j                  |
d   d       y # 1 sw Y   xY w# 1 sw Y   xY w)Nr   r   )
r   r   r      !   /   r<   K   `   b   r   r   r   r2   r   )r   )r   r]   r   r   r\   r]   r   r.   r/   z/datar   r4   s   /data2r1   rX   z/data2r6   )r   r6   (   r;   P   r7   r   )r   r>   r   r   r   rA   r   rB   r   r   r|   zerosrC   minmax)r!   rD   indsr$   rJ   r#   layout2inds2r%   r   data2masks               r'   test_index_layoutz"IndexingTestCase.test_index_layout5  s   !!&$/,88DKK0""8V5At((4;;1 ""4.en WWWc(3 	Gq$$Wf$C$$Y2$F	G
 WWWc" 	$aW:b>DhKOE	$
 	4:ryy}R'7859o6xx}T
dai,,.3dai,,.3q2&#	G 	G
	$ 	$s   2)G9GGGc                 B    t        j                  | j                         y rM   r   rQ   s    r'   rR   zIndexingTestCase.tearDown[  r   rT   N)rU   rV   rW   r(   r   rR   rX   rT   r'   r   r   *  s    $$'L#rT   r   c                   $    e Zd Zd Zd Zd Zd Zy)RelativeLinkTestCasec                    t        j                         | _        t        j                  | j                  d      | _        t        j                  | j                  d      | _        t        j                  d      | _	        t        j                  d      dz  | _
        t        j                  | j
                  d      5 }|j                  ddd      }| j                  |d d  d d d        t        j                  | j                  d      5 }|j                  ddd      }| j                  |d d  | j                  |       d d d        y # 1 sw Y   fxY w# 1 sw Y   y xY w)	Nztestfile1.h5ztestfile2.h5r6   r   r   r   f4)r   r   r   r   r   f1f2r   r|   data1r   r   r   r{   make_vds)r!   r%   r   s      r'   r(   zRelativeLinkTestCase.setUpb  s   &&(((4;;7((4;;7YYr]
YYr]R'
WWTWWc" 	a!!&%6BJJBqE	
 WWTWWc" 	a!!&%6BJJBqEMM!		 		 	
	 	s   ;#E4EEEc                     t        j                  dd      }t        j                  | j                  dd      }t        j                  | j                  dd      }||d<   ||d<   |j                  d|       y )	Nr   r6   r   r   r   r2   r   r]   virtual)r   r>   rA   r   r   rB   )r!   r%   rD   vsource1vsource2s        r'   r   zRelativeLinkTestCase.make_vdsu  sf    !!'40##DGGV5A##DGGV5Aq	q		  F3rT   c                    t        j                  | j                        5 }|d   d d  }t        j                  j                  |d   | j                         t        j                  j                  |d   | j                         d d d        t        j                  | j                  d      }t        j                  | j                  |       t        j                  |      5 }|d   d d  }|j                  dk(  sJ t        j                  j                  |d   | j                         t        j                  j                  |d   | j                         d d d        t        j                  | j                  d      }t        j                  | j                  |       t        j                  |      5 }|d   d d  }|j                  dk(  sJ t        j                  j                  |d   d       t        j                  j                  |d   | j                         d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r]   ztestfile3.h5r   ztestfile4.h5)r   r   r   r   testingr   r   r   r   r   r   osrenamer-   r   )r!   r%   r   f3r   s        r'   test_relative_vdsz&RelativeLinkTestCase.test_relative_vds~  s   WWTWW 	?Y<?DJJ))$q'4::>JJ))$q'4::>	? XXdkk>2
		$''2WWR[ 	?AY<?D::%%%JJ))$q'4::>JJ))$q'4::>		? XXdkk>2
		$''2WWR[ 	?AY<?D::%%%JJ))$q'15JJ))$q'4::>	? 	?'	? 	?	? 	?	? 	?s&   A#H$ A4H11A*H=$H.1H:=Ic                 B    t        j                  | j                         y rM   r   rQ   s    r'   rR   zRelativeLinkTestCase.tearDown  r   rT   N)rU   rV   rW   r(   r   r   rR   rX   rT   r'   r   r   ^  s    &4?6#rT   r   c                       e Zd Zd Zy)RelativeLinkBuildVDSTestCasec                     |j                  ddd      5 }t        j                  | j                  dd      |d<   t        j                  | j                  dd      |d	<   d d d        y # 1 sw Y   y xY w)
Nr   r   r   r-   r   r   r2   r   r]   )build_virtual_datasetr   rA   r   r   )r!   r%   rD   s      r'   r   z%RelativeLinkBuildVDSTestCase.make_vds  sj    $$Yt$D 	G((&FF1I((&FF1I	G 	G 	Gs   AA))A2N)rU   rV   rW   r   rX   rT   r'   r   r     s    GrT   r   c                       e Zd Zd Zd Zd Zy)VDSUnlimitedTestCasec           	      N   t        j                         | _        t        j                  | j                  d      | _        t        j                  | j
                  d      5 }|j                  dt        j                  d      dddd	      }t        j                  dt        d
      | _        t        j                  |      }|d t        j                  df   | j                  d t        j                  df<   |j!                  d| j                         d d d        y # 1 sw Y   y xY w)Nz	resize.h5r   sourcer   )r6   r   )Nr   r6   r]   r   )r   r,   ry   rz   r5   )Nr]   r   r]   r   r   )r   r   r   r   r   pathr   r   r{   r   r|   r>   intrD   rA   	UNLIMITEDrB   )r!   r%   source_dsetlayout_sources       r'   r(   zVDSUnlimitedTestCase.setUp  s    &&(HHT[[+6	WWTYY$ 	=**YYr]" + K **7C)LDK,,[9M,9-2<<-:J,KDKKq()$$Y<	= 	= 	=s   B3DD$c                    t        j                  ddd      j                  dd      }t        j                  |t        j                  dd      f      }t        j                  |t        j                  dd      f      }t        j                  | j                  d	      5 }|d
   }|d   }t         j                  j                  ||       |j                  dd       t         j                  j                  ||       t        j                  dt              |dd df<   t         j                  j                  ||       d d d        y # 1 sw Y   y xY w)Nr]   r   r   r6   r  r   )r,   
fill_valuer   ar  r   )axisr   r  )r   r|   reshapevstackfullr   r   r	  r   r   resizer   r
  )r!   comp1comp2comp3r%   r  virtual_dsets          r'   test_unlimited_axisz(VDSUnlimitedTestCase.test_unlimited_axis  s   		!R#++B2		GG'b1
  		GG'a0
  WWTYY$ 	?H+KY<LJJ))%>r*JJ))%>"$((5"<KQJJ))%>	? 	? 	?s    B E		Ec                 B    t        j                  | j                         y rM   r   rQ   s    r'   rR   zVDSUnlimitedTestCase.tearDown  r   rT   N)rU   rV   rW   r(   r  rR   rX   rT   r'   r  r    s    =$?&#rT   r  c                 L   | j                  ddt        j                        5  	 d d d        | d   }|j                  sJ |j	                         g k(  sJ t        j
                  j                  |d   t        j                  dt        j                               y # 1 sw Y   wxY w)NrF   )r6   r   rX   )r  r   int32r   r   r   r   r   )writable_filerp   s     r'   test_no_mappingsr    s    		,	,UHbhh	G  D???!R'''JJ!!$r(BHHXrxx,HI s   BB#__main__)__doc__numpyr   numpy.testingr   r   os.pathr	  r   rO   r   h5pyr   commonr   _hl.vdsr   
skipUnlessTestCaser	   rZ   rw   r   r   r   r   r   r  r  rU   mainrX   rT   r'   <module>r+     s    , 	      " {-/)( )(/)(V
 < {-/:(R[[ :(/:(z {-/>(BKK >(/>(@ {-/>#bkk >#/>#@ {-/0#r{{ 0#/0#d {-/:#2;; :#/:#xG#7 G {-/(#2;; (#/(#VJ zBGGI rT   