
    HR-eq                        d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ erd dlZd dlmZmZmZ d  ej                     D             Z!d  ej                     D             Zej"        ej#        ej$        ej%        ej&        ej'        ej(        ej)        ej*        ej+        ej,        dgZ-d Z.ej/        d             Z0ej1        2                    e d          d             Z3ej1        2                    e d          d             Z4ej1        2                    e d          d             Z5ej1        2                    e d          d             Z6ej1        2                    e d          d             Z7ej1        2                    e d          d             Z8ej1        2                    e d          d             Z9ej1        2                    e d          d             Z:ej1        2                    e d          d             Z;ej1        2                    e d          d             Z<ej1        2                    e d          d             Z=ej1        2                    e d          d             Z>ej1        2                    e d          d              Z?ej1        2                    e d          d!             Z@ej1        2                    e d          d"             ZAej1        2                    e d          d#             ZBej1        2                    e d          d$             ZCej1        2                    e d          d%             ZDej1        2                    e d          d&             ZEej1        2                    e d          d'             ZFej1        2                    e d          d(             ZGej1        2                    e d          d)             ZHej1        2                    e d          d*             ZIej1        2                    e d          d+             ZJej1        2                    e d          d,             ZKej1        2                    e d          d-             ZLej1        2                    e d          ej1        M                    d.e-          d/                         ZNej1        2                    e d          d0             ZOej1        2                    e d          d1             ZPej1        2                    e d          d2             ZQej1        2                    e d          d3             ZRej1        2                    e d          d4             ZSej1        2                    e d          d5             ZTej1        2                    e d          d6             ZUej1        2                    e d          d7             ZVej1        2                    e d          d8             ZWej1        2                    e d          d9             ZXdFd;ZYej1        2                    e d          d<             ZZej1        2                    e d          ej1        M                    d=e	ef          d>                         Z[ej1        2                    e d          ej1        M                    d? e\ ej                                         ej1        M                    d=e	ef          d@                                     Z]ej1        M                    d?e!                                           ej1        ^                    dA          dB                         Z_ej1        2                    e d          dC             Z`ej1        2                    e d          dD             Zaej1        2                    e d          dE             ZbdS )G    N)	meta_path)ColumnQTableTable)simple_table)allclose)QuantityInfo)NUMPY_LT_1_22)HAS_H5PY)get_pkg_data_filename)AstropyUserWarning)_NOT_OVERWRITING_MSG_MATCH)compare_attrs
mixin_colsserialized_namesc                 n    i | ]2\  }}t          |t          j                  r|j        j        d k    /||3S )O)
isinstancenpndarraydtypekind.0namecols      ?lib/python3.11/site-packages/astropy/io/misc/tests/test_hdf5.py
<dictcomp>r      sM       c3
## ),	#(=(= 	#(=(=(=    c                 ,    i | ]\  }}|t           v||S  )unsupported_colsr   s      r   r   r      s0       $TAQ5Q5QD#5Q5Q5Qr   |S3c                 F    | t           j        k    rg dS | dk    rg dS g dS )N)r      r%   r#   )s   abcs   defs   ghir%         )r   bool_r   s    r   _default_valuesr+   2   s8    yy	%''''yyr   c                     |                      dt          |                     |                      dt          |                     dS )z
    Pytest fixture to run a test case with tilde-prefixed paths.

    In the tilde-path case, environment variables are temporarily
    modified so that '~' resolves to the temp directory.
    HOMEUSERPROFILEN)setenvstr)monkeypatchtmp_paths     r   home_is_tmpdirr3   ;   sB     vs8}}---}c(mm44444r   zrequires h5py)reasonc                 4   | dz  }t                      }|                    t          dg d                     t          j        t
          d          5  |                    |           d d d            n# 1 swxY w Y   t          j        |d          }d S )	N	test.hdf5ar&   r   dataz-table path was not set via the path= argumentmatch__astropy_table__path)r   
add_columnr   pytestwarnsUserWarningwritereadr2   	test_filet1s      r   test_write_nopathrH   I   s    ;&I	BMM&c			222333	J
 
 
   	              
 
I$7	8	8	8BBBs   A77A;>A;c                 b   | dz  }t                      }|                    t          dg d                     |                    |d           t	          j        t                    5 }|                    |d           d d d            n# 1 swxY w Y   d	|j        j        d
         v sJ d S )Nr6   r7   r&   r8   bubur=   T)appendz-table path should always be set via the path=r   )	r   r?   r   rC   r@   raises
ValueErrorvalueargsr2   rF   rG   excs       r   test_write_nopath_nonemptyrR   W   s    ;&I	BMM&c			222333HHYVH$$$	z	"	" )c
4((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ;cinQ>OOOOOOOs   *BBBc                     | dz  }t          j        |d                                           t          j        t
          d          5  t          j        |dd           d d d            d S # 1 swxY w Y   d S )Nr6   wzno table found in HDF5 group /r:   /hdf5r>   format)h5pyFilecloser@   rL   rM   r   rD   )r2   rF   s     r   test_read_notable_nopathr\   e   s    ;&IIi##%%%	z)I	J	J	J 7 7
93v66667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7s   A--A14A1c                    | dz  }t                      }|                    t          dg d                     |                    |d           t          j        |          }t          j        |d         |d         k              sJ d S Nr6   r7   r&   r8   	the_tabler=   r   r?   r   rC   rD   r   allr2   rF   rG   t2s       r   test_read_nopathrd   m   s    ;&I	BMM&c			222333HHY[H)))	I		B6"S'RW$%%%%%%%r   c                    | dz  }t                      }|                    t          dg d                     |                    |d           |                    |ddd	           t	          j        t          d
          5  t          j        |          }d d d            n# 1 swxY w Y   t          j	        |d         |d         k              sJ d S )Nr6   r7   r&   r8   r_   r=   the_table_but_differentTr>   rK   	overwritez+path= was not specified but multiple tablesr:   )
r   r?   r   rC   r@   rA   r   rD   r   ra   rb   s       r   test_read_nopath_multi_tablesri   x   s   ;&I	BMM&c			222333HHY[H)))HHY6ttHTTT	"P
 
 
 # # Z	""# # # # # # # # # # # # # # #
 6"S'RW$%%%%%%%s   B&&B*-B*c                 8   | dz  }t                      }|                    t          dg d                     t          j        t
                    5 }|                    |d           d d d            n# 1 swxY w Y   |j        j        d         dk    sJ d S )	Nr6   r7   r&   r8   test/r=   r   z,table path should end with table name, not /)	r   r?   r   r@   rL   rM   rC   rN   rO   rP   s       r   test_write_invalid_pathrl      s    ;&I	BMM&c			222333	z	"	" *c
)))* * * * * * * * * * * * * * *9>! NNNNNNNs   A77A;>A;c                 d   | dz  }t                      }|                    t          dg d                     |                    |d           t	          j        t                    5 }t          j        |d           d d d            n# 1 swxY w Y   |j        j	        d         d	k    sJ d S )
Nr6   r7   r&   r8   r_   r=   rk   r   zPath test/ does not exist)
r   r?   r   rC   r@   rL   OSErrorrD   rN   rO   rP   s       r   test_read_invalid_pathro      s    ;&I	BMM&c			222333HHY[H)))	w		 ,3
97++++, , , , , , , , , , , , , , ,9>! ;;;;;;;s   *BBBc                    | dz  }t          j        |d                                           t          j        t
                    5 }t          j        |d           d d d            n# 1 swxY w Y   |j        j	        d         dk    sJ d S Nr6   rT   test/path/tabler=   r   #Path test/path/table does not exist)
rY   rZ   r[   r@   rL   rn   r   rD   rN   rO   )r2   rF   rQ   s      r   test_read_missing_grouprt      s    ;&IIi##%%%	w		 63
9#455556 6 6 6 6 6 6 6 6 6 6 6 6 6 69>! EEEEEEEs   A))A-0A-c                 x   | dz  }t          j        |d          5 }|                    d                              d           d d d            n# 1 swxY w Y   t          j        t
                    5 }t          j        |d           d d d            n# 1 swxY w Y   |j        j	        d         dk    sJ d S )	Nr6   rT   testr>   rr   r=   r   rs   )
rY   rZ   create_groupr@   rL   rn   r   rD   rN   rO   r2   rF   frQ   s       r   test_read_missing_tablerz      s)   ;&I	9c	"	" 4a	v++F3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4	w		 63
9#455556 6 6 6 6 6 6 6 6 6 6 6 6 6 69>! EEEEEEEs#   )AAA4BBBc                 ,   | dz  }t          j        |d          5 }t          j        t                    5 }t          j        |d           d d d            n# 1 swxY w Y   |j        j        d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S rq   )	rY   rZ   r@   rL   rn   r   rD   rN   rO   rx   s       r   test_read_missing_group_fileobjr|      s(   ;&I	9c	"	" Ja]7## 	2sJq01111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2y~a $IIIIIIJ J J J J J J J J J J J J J J J J Js4   B	AB	A	B	A	 B		BBc                    | dz  }t                      }|                    t          dg d                     |                    |d           t          j        |d          }t          j        |d         g dk              sJ d S r^   r`   rb   s       r   test_read_write_simpler~      s    ;&I	BMM&c			222333HHY[H)))	IK	0	0	0B6"S'YYY&'''''''r   c                 h   | dz  }t                      }|                    t          dg d                     |                    |d           t	          j        t                    5 }|                    |dd           d d d            n# 1 swxY w Y   |j        j        d	         d
k    sJ d S )Nr6   r7   r&   r8   r_   r=   Tr>   rK   r   zTable the_table already exists)	r   r?   r   rC   r@   rL   rn   rN   rO   rP   s       r   test_read_write_existing_tabler      s    ;&I	BMM&c			222333HHY[H)))	w		 ;3
T:::; ; ; ; ; ; ; ; ; ; ; ; ; ; ;9>! @@@@@@@s   *BBBc                  p   t          j        dddd          5 } t                      }|                    t	          dg d                     |                    | d	
           t          j        | d	
          }t          j        |d         g dk              sJ 	 d d d            d S # 1 swxY w Y   d S )Nrv   rT   coreFdriverbacking_storer7   r&   r8   r_   r=   	rY   rZ   r   r?   r   rC   rD   r   ra   )output_filerG   rc   s      r   test_read_write_memoryr      s    	63vU	C	C	C ,{WW
f#III666777
;///Z+666vbg*++++++, , , , , , , , , , , , , , , , , ,s   BB++B/2B/c                 f   | dz  }t          j        |d                                           t                      }|                    t          dg d                     t          j        t          t                    5  |
                    |d           d d d            d S # 1 swxY w Y   d S )	Nr6   rT   r7   r&   r8   r:   r_   r=   )rY   rZ   r[   r   r?   r   r@   rL   rn   r   rC   rE   s      r   test_read_write_existingr      s    ;&IIi##%%%	BMM&c			222333	w&@	A	A	A . .
---. . . . . . . . . . . . . . . . . .s   B&&B*-B*c                 f   | dz  }t          j        |d                                           t                      }|                    t          dg d                     |                    |dd           t          j        |d	          }t          j	        |d         g dk              sJ d S )
Nr6   rT   r7   r&   r8   r_   Tr>   rh   r=   
rY   rZ   r[   r   r?   r   rC   rD   r   ra   rb   s       r   "test_read_write_existing_overwriter      s    ;&IIi##%%%	BMM&c			222333HHY[DH999	IK	0	0	0B6"S'YYY&'''''''r   c                    | dz  }t          j        |d                                           t                      }|                    t          dg d                     |                    |dd           |                    |d	d           t          j        |d
          }t          j	        |d         g dk              sJ t          j        |d	
          }t          j	        |d         g dk              sJ d S )Nr6   rT   r7   r&   r8   the_table_1Tr   the_table_2r=   r   )r2   rF   rG   rc   t3s        r   test_read_write_existing_appendr      s    ;&IIi##%%%	BMM&c			222333HHY]4H888HHY]4H888	IM	2	2	2B6"S'YYY&'''''	IM	2	2	2B6"S'YYY&'''''''r   c                 <   | dz  }t          j        |d          5 }|                    d           d d d            n# 1 swxY w Y   t                      }|                    t          dg d                     |                    |dd	           |                    |d
d	           t          j        |d          }t          j	        |d         g dk              sJ t          j        |d
          }t          j	        |d         g dk              sJ d S )Nr6   rT   test_1r7   r&   r8   ztest_1/the_table_1Tr   ztest_2/the_table_2r=   )
rY   rZ   rw   r   r?   r   rC   rD   r   ra   )r2   rF   ry   rG   rc   r   s         r   &test_read_write_existing_append_groupsr      sV   ;&I	9c	"	" !a	x   ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	BMM&c			222333HHY1$H???HHY1$H???	I$8	9	9	9B6"S'YYY&'''''	I$8	9	9	9B6"S'YYY&'''''''s   =AAc                    | dz  }t                      }|                    t          dg d                     |                    |d           |                    |dd	           t                      }|                    t          dg d
                     t	          j        t                    5 }|                    |dd	           d d d            n# 1 swxY w Y   |j        j        d         dk    sJ |                    |ddd           t          j	        |d          }t          j        |d         g d
k              sJ t          j	        |d          }t          j        |d         g dk              sJ d S )Nr6   r7   r&   r8   table1r=   table2Tr   )         r   zTable table1 already existsrg   )r   r?   r   rC   r@   rL   rn   rN   rO   rD   r   ra   )r2   rF   rG   t1v2rQ   rc   r   s          r   )test_read_write_existing_append_overwriter   	  s   ;&I	BMM&c			222333HHYXH&&&HHYXdH33377DOOF)))444555	w		 :3

98D
999: : : : : : : : : : : : : : :9>! =====JJyxJEEE	IH	-	-	-B6"S'YYY&'''''	IH	-	-	-B6"S'YYY&'''''''s   6CC"Cc                 t   | dz  }t                      }|                    t          dg d                     |                    |d           dd l} |j        |d          5 }t          j        |d          }t          j        |d         g dk              sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr6   r7   r&   r8   r_   r=   r   r	r   r?   r   rC   rY   rZ   rD   r   ra   r2   rF   rG   rY   
input_filerc   s         r   test_read_fileobjr     s   ;&I	BMM&c			222333HHY[H)))KKK	9c	"	" ,jZ
555vbg*++++++, , , , , , , , , , , , , , , , , ,   &9B--B14B1c                 t   | dz  }t                      }|                    t          dg d                     |                    |d           dd l} |j        |d          5 }t          j        |d          }t          j        |d         g dk              sJ 	 d d d            d S # 1 swxY w Y   d S )	Nr6   r7   r&   r8   path/to/data/the_tabler=   r   r   r   r   s         r   test_read_filobj_pathr   +  s   ;&I	BMM&c			222333HHY5H666KKK	9c	"	" ,jZ
)ABBBvbg*++++++, , , , , , , , , , , , , , , , , ,r   c                    | dz  }t                      }|                    t          dg d                     |                    |d           dd l} |j        |d          5 }t          j        |d	         d
          }t          j        |d         g dk              sJ 	 d d d            d S # 1 swxY w Y   d S )Nr6   r7   r&   r8   r   r=   r   r   zpath/tozdata/the_tabler   r   s         r   test_read_filobj_group_pathr   :  s   ;&I	BMM&c			222333HHY5H666KKK	9c	"	" ,jZ
9-4DEEEvbg*++++++, , , , , , , , , , , , , , , , , ,s   &?B33B7:B7c                       G d d          }  |             }t          j        t          d          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nc                       e Zd Zd ZdS ))test_read_wrong_fileobj.<locals>.FakeFilec                     d S Nr!   )selfs    r   rD   z.test_read_wrong_fileobj.<locals>.FakeFile.readL  s    Dr   N)__name__
__module____qualname__rD   r!   r   r   FakeFiler   K  s#        	 	 	 	 	r   r   z h5py can only open regular filesr:   rV   )rX   )r@   rL   	TypeErrorr   rD   )r   ry   s     r   test_read_wrong_fileobjr   I  s            	

A	y(J	K	K	K % %
1V$$$$% % % % % % % % % % % % % % % % % %s   AAAc                 p   | dz  }dd l } |j        |d          5 }t                      }|                    t	          dg d                     |                    |d           d d d            n# 1 swxY w Y   t          j        |d          }t          j        |d         g dk              sJ d S )	Nr6   r   rT   r7   r&   r8   r_   r=   r   r2   rF   rY   r   rG   rc   s         r   test_write_fileobjr   U  s    ;&IKKK	9c	"	" 0kWW
f#III666777
;///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 
IK	0	0	0B6"S'YYY&'''''''   AA33A7:A7c                    | dz  }d}dd l } |j        |d          5 }t                      }|                    t	          dg d                     |                    ||d	           d d d            n# 1 swxY w Y   t                      }|                    t	          dd
dg                      |j        |d          5 }||                             t          |          t          |          z   f           |                                ||         t          |          d <   d d d            n# 1 swxY w Y   t          j	        |d          }t          j        |d         g dk              sJ d S )Nr6   r_   r   rT   r7   r&   r8   r   )r>   maxshaper   r   r=   )r%   r'   r(   r   r   )rY   rZ   r   r?   r   rC   resizelenas_arrayrD   r   ra   )r2   rF   the_pathrY   r   rG   rc   r   s           r    test_write_create_dataset_kwargsr   d  s   ;&IHKKK	9c	"	" ?kWW
f#III666777
8g>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 
BMM&cA///000	9c	"	" 9kH$$c"ggB&7%9:::+-;;==Hc"ggii(9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 
IK	0	0	0B6"S'___,-------s%   AA66A:=A:A&D88D<?D<c                 p   | dz  }dd l } |j        |d          5 }t                      }|                    t	          dg d                     |                    |d           d d d            n# 1 swxY w Y   t          j        |d          }t          j        |d         g dk              sJ d S )	Nr6   r   rT   r7   r&   r8   r   r=   r   r   s         r   test_write_filobj_groupr   |  s    ;&IKKK	9c	"	" =kWW
f#III666777
#;<<<= = = = = = = = = = = = = = =
 
I$<	=	=	=B6"S'YYY&'''''''r   c                  0   t                      } |                     t          dg d                     t          j        t
                    5 }|                     ddd           d d d            n# 1 swxY w Y   |j        j        d         d	k    sJ d S )
Nr7   r&   r8   i  r   rV   rW   r   z9output should be a string or an h5py File or Group object)	r   r?   r   r@   rL   r   rC   rN   rO   )rG   rQ   s     r   test_write_wrong_typer     s    	BMM&c			222333	y	!	! ES
4VDDDE E E E E E E E E E E E E E E 		qXXXXXXXs   A33A7:A7r   c           	      z   | dz  }t          |          }t                      }|                    t          dt	          j        ||                               |                    |d           t          j        |d          }t	          j        |d         |k              sJ |d         j	        |k    sJ d S )Nr6   r7   r*   r8   r_   r=   )
r+   r   r?   r   r   arrayrC   rD   ra   r   )r2   r   rF   valuesrG   rc   s         r   test_preserve_single_dtypesr     s     ;&IU##F	BMM&cu(E(E(EFFFGGGHHY[H)))	IK	0	0	0B6"S'V#$$$$$c7=E!!!!!!r   c           
         | dz  }t                      }t          D ]V}t          |          }|                    t	          t          |          t          j        ||                               W|                    |d           t          j	        |d          }t          D ]^}t          |          }t          j
        |t          |                   |k              sJ |t          |                   j        |k    sJ _d S )Nr6   r*   r8   r_   r=   )r   
ALL_DTYPESr+   r?   r   r0   r   r   rC   rD   ra   r   )r2   rF   rG   r   r   rc   s         r   test_preserve_all_dtypesr     s    ;&I	B S S ''
f#e**28F%3P3P3PQQQRRRRHHY[H)))	IK	0	0	0B - - ''vbUn./////#e**~#u,,,,,- -r   c                    | dz  }t                      }|                    t          dg d                     d|j        d<   d|j        d<   d|j        d	<   d
|j        d<   t	          j        g d          |j        d<   |                    |d           t          j        |d          }|j        D ]2}t	          j        |j        |         |j        |         k              sJ 3d S )Nr6   r7   r&   r8   r%   hellobn!	@cTder_   r=   )	r   r?   r   metar   r   rC   rD   ra   )r2   rF   rG   rc   keys        r   test_preserve_metar     s    ;&I	BMM&c			222333BGCLBGCLBGCLBGCL8III&&BGCLHHY[H)))	IK	0	0	0Bw 4 4vbgclbgcl23333334 4r   c                    | dz  }t                      }t          g dd          |d<   d|d         j        d<   dd	d
gi|d         j        d<   d|d         _        d|d         _        d
|j        d<   dd	d
gi|j        d<   |                    |ddd           t          j        |d          }|d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |j        |j        k    sJ t          j	        |d          }|t          d                   }|j        j        dk    sJ d S )Nr6   r&   sr9   unitr7   A0a0a1r   r%   7.3fA columnr   c0r   r_   Tr>   serialize_metarh   r=   r   S)r   r   r   rX   descriptionrC   rD   r   rY   rZ   r   r   r   )r2   rF   rG   rc   h5
meta_liness         r   test_preserve_serializedr     s   ;&I	B)))#...BsGBsGLABsGLBsGN$BsGBGCL1a&>BGCLHHY[HNNN	IK	0	0	0Bc7<2c7<''''c7>RW^++++c7"S'"55555c7<2c7<''''7bg 
9c	"	"BIk**+J C''''''r   c                  X   t          d          } t                      }t          g dd          |d<   d|d         j        d<   dd	d
gi|d         j        d<   d|d         _        d|d         _        d
|j        d<   dd	d
gi|j        d<   t          j        | d          }|d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |j        |j        k    sJ dS )zdTest the old meta format

    Only for some files created prior to v4.0, in compatibility mode.
    zdata/old_meta_example.hdf5r&   r   r   r7   r   r   r   r   r%   r   r   r   r   r   r_   r=   N)r   r   r   r   rX   r   rD   r   )rF   rG   rc   s      r   (test_preserve_serialized_old_meta_formatr     s7    &&BCCI	B)))#...BsGBsGLABsGLBsGN$BsGBGCL1a&>BGCL	IK	0	0	0Bc7<2c7<''''c7>RW^++++c7"S'"55555c7<2c7<''''7bgr   c                 v   | dz  }t                      }t          g dd          |d<   d|d         j        d<   dd	d
gi|d         j        d<   d|d         _        d|d         _        d
|j        d<   dd	d
gi|j        d<   |                    |ddd           t          j        |d          }|d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |j        |j        k    sJ d S )Nr6   r&   r   r   r7   r   r   r   r   r%   r   r   r   r   r   zthe_table/complicated/pathTr   r=   r   r   r   rX   r   rC   rD   r   rb   s       r   ,test_preserve_serialized_in_complicated_pathr     s[   ;&I	B)))#...BsGBsGLABsGLBsGN$BsGBGCL1a&>BGCLHH)	     
I$@	A	A	ABc7>RW^++++c7<2c7<''''c7"S'"55555c7<2c7<''''7bgr   c                    | dz  }t                      }t          g dd          |d<   d|d         j        d<   dd	d
gi|d         j        d<   d|d         _        d|d         _        d
|j        d<   dd	d
gi|j        d<   ddz  |j        d<   ddz  |j        d<   |                    |ddd           t          j        |d          }|d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |d         j        |d         j        k    sJ |j        |j        k    sJ dS )z(Test that very large datasets work, now!r6   r&   r   r   r7   r   r   r   r   r%   r   r   r   r   r   0i  meta_bigi   meta_biggerstillr_   Tr   r=   Nr   rb   s       r   test_metadata_very_larger   $  so    ;&I	B)))#...BsGBsGLABsGLBsGN$BsGBGCL1a&>BGCL+BGJ"%-BGHHY[HNNN	IK	0	0	0Bc7<2c7<''''c7>RW^++++c7"S'"55555c7<2c7<''''7bgr   c                    | dz  }t                      }|                    t          dg d                     d|j        d<   d|j        d<   d|j        d	<   d
|j        d<   t	          j        g d          |j        d<   t          |j        d<   dt          |j        d                    d}t          j	        t          |          5 }|                    |d           d d d            n# 1 swxY w Y   t          |          dk    sJ d S )Nr6   r7   r&   r8   r%   r   r   r   r   Tr   r   ry   zAttribute `f` of type z+ cannot be written to HDF5 files - skippingr:   r_   r=   )r   r?   r   r   r   r   r0   typer@   rA   r   rC   r   )r2   rF   rG   wtextrT   s        r   test_skip_metar   ?  sH   ;&I	BMM&c			222333BGCLBGCLBGCLBGCL8III&&BGCLBGCL	bgcl!3!3 	 	 	 
 
(	6	6	6 .!
---. . . . . . . . . . . . . . .q66Q;;;;;;s   C,,C03C0c                    | dz  }t                      }|                    t          dg d                     t          |j        d<   t          j        t                    5 }|                    |dd           d d d            n# 1 swxY w Y   d	t          |j	                  v sJ d
t          |j	                  v sJ d S )Nr6   r7   r&   r8   ry   r_   Tr>   r   zcannot represent an objectz<class 'str'>)
r   r?   r   r0   r   r@   rL   	ExceptionrC   rN   )r2   rF   rG   errs       r   test_fail_meta_serializer   V  s   ;&I	BMM&c			222333BGCL	y	!	! CS
TBBBC C C C C C C C C C C C C C C'3sy>>9999c#)nn,,,,,,s   "BBBc                    | dz  }dd l } |j        |d          5 }t                      }|                    t	          dg d                     |                    |d           d d d            n# 1 swxY w Y    |j        |d	
          }t          j        |d          }t          j        |d         g dk              sJ t          j        |d         d          }t          j        |d         g dk              sJ t          j        |d                   }t          j        |d         g dk              sJ |	                                 d S )Nr6   r   rT   r7   r&   r8   r_   r=   r   )moderU   )
rY   rZ   r   r?   r   rC   rD   r   ra   r[   )	r2   rF   rY   r   rG   ry   rc   r   t4s	            r   test_read_h5py_objectsr   d  s    ;&IKKK	9c	"	" 0kWW
f#III666777
;///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 		)#&&&A	AK	(	(	(B6"S'YYY&'''''	AcF	-	-	-B6"S'YYY&'''''	AkN	#	#B6"S'YYY&'''''GGIIIIIr   c                 .   | dz  }t                      }g d|d<   g d|d<   g d|d<   g d|d	<   |                    |d
d           t          j        |d
d          }t          |                                |                                          D ]\  }}t          j        ||k              sJ  t          j        |d         j        j        j	        dk              sJ t          j        |d         j        j        j	        dk              sJ t          j        |d         j        j        j	        dk              sJ t          j        |d	         j        j        j	        dk              sJ t          j        |d
          }t          |                                |                                          D ]\  }}t          j        ||k              sJ  t          j        |d         j        j        j	        dk              sJ t          j        |d         j        j        j	        dk              sJ t          j        |d         j        j        j	        dk              sJ t          j        |d	         j        j        j	        dk              sJ d S )Nr6   )r7   r   r   pr&   q)   a   b   cr   )u   ℙu   ƴu   ☂r   r_   Tr   F)r>   character_as_bytesUir=   r   )
r   rC   rD   zipitercolsr   ra   infor   r   )r2   rF   trG   r   col1rc   s          r   test_read_write_unicode_to_hdf5r    sc   ;&IA__AcFYYAcFAcF+++AcFGGIK4G888	IKE	J	J	JBr{{}}55 # #	TvcTk""""""6"S',$)S0111116"S',$)S0111116"S',$)S0111116"S',$)S011111 
IK	0	0	0Br{{}}55 # #	TvcTk""""""6"S',$)S0111116"S',$)S0111116"S',$)S0111116"S',$)S01111111r   Tc                 z   |r| j         |j         u sJ g d}||z   D ]}| }|}|                    d          D ]C}	 t          ||          }t          ||          }$# t          $ r ||         }||         }Y @w xY w|dk    r|i }|i }t	          |t
          j                  r%|j        j        dk    rt          ||d          sJ t	          |t
          j                  r<t          r|j        r|j        |j        k    sJ t          j        ||d          sJ t          j        ||k              sJ d S )	N)z	info.namezinfo.formatz	info.unitzinfo.description	info.metaz
info.dtype.r  ry   gV瞯<)rtolsafe)casting)	__class__splitgetattrAttributeErrorr   r   r   r   r   quantity_allcloser
   namescan_castra   )	obj1obj2attrscompare_class
info_attrsattrr   a2subattrs	            r   assert_objects_equalr$    s    0~////  J 
" $ $zz# 	! 	!G!R))R))! ! ! ![[! ;zzb"*%% 	$"(-3*>*>$R%8888888BH%% 
	$  ; ;x28+++++{2r6:::::::6"(######?$ $s    AA98A9c                 .   | dz  }t          t                    }t          d |D             |          }|                    |ddd           t	          j        |dd          }|j        |j        k    sJ |j                                        D ]\  }}||         }t          |         }d}	t          |j        t                    r<t          |          t          u sJ d	g}d
}	t          j        |j        |k              sJ t%          ||||	           dS )zWTest writing as QTable and reading as Table.  Ensure correct classes
    come out.
    test_simple.hdf5c                 (    g | ]}t           |         S r!   r   r   r   s     r   
<listcomp>z4test_hdf5_mixins_qtable_to_table.<locals>.<listcomp>  s    333T
4 333r   r  rV   rootTrX   r>   r   rX   r>   r   FN)sortedr   r   rC   r   rD   colnamescolumnsitemsr   r   r  r	   r   r   r   ra   rN   r$  )
r2   filenamer  r  rc   r   r   col2r  r  s
             r    test_hdf5_mixins_qtable_to_tabler5    s.   
 ,,H:E33U3335AAAAGGHV&GFFF	HV&	9	9	9B:$$$$Y__&& > >	c$xd#ch-- 	-::''''HE!M6#)t+,,,,,S$}====> >r   	table_clsc                    |dz  }t          t                    }g }|D ]"}|                    t          |                    # | d |D             |          }d|j        d<   g d|j        d<   g d|j        d	<   |                    |d
dd           |                     |d
d          }|j        d         dk    sJ |j        d         g dk    sJ |j        d	         g dk    sJ |j        |j        k    sJ t          j	        |d          }t          |d         j        j                  }	|	|k    sJ |                                 dS )zGTest write/read all cols at once and validate intermediate column namesr&  c                 (    g | ]}t           |         S r!   r(  r)  s     r   r*  z+test_hdf5_mixins_as_one.<locals>.<listcomp>  s    666:d#666r   r+  spamC)thisisr7   commentcomments)firstsecondthirdhistoryrV   r,  Tr-  r.  r   N)r/  r   extendr   r   rC   rD   r0  rY   rZ   listr   r  r[   )
r6  r2   r3  r  all_serialized_namesr   r  rc   r   h5_namess
             r   test_hdf5_mixins_as_onerG    s    ,,H:E < <##$4T$:;;;;	66666eDDDAAF3K777AF:444AF9GGHV&GFFF	f	=	=B73<6!!!!7:"@"@"@@@@@79!=!=!=====:$$$$ 
8S	!	!BBvJ$*++H+++++HHJJJJJr   name_colc                    |dz  }|\  }}ddg} | |||gd|dg          }d||         j         _        t          t          d                    d	d
id||         j         _        |j        st          j        d           |                    |ddd           | 	                    |dd          }|j
        |j
        k    sJ |j
        D ]3}	|	dv rdgnt          |	         }
t          ||	         ||	         |
           4|                    d          rJ||         j        j        j        t"          j        u sJ ||         j        j        j        t"          j        u sJ dS dS )z<Test write/read one col at a time and do detailed validationr&  g      ?g       @c1c2r+  zmy description2   r7   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)rD  dictz7column is not a mixin (e.g. Quantity subclass in Table)rV   r,  Tr-  r.  )rJ  rK  r9   tmN)r  r   rD  ranger   has_mixin_columnsr@   skiprC   rD   r0  r   r$  
startswith_timejd1r  r   r   jd2)r6  rH  r2   r3  r   r   r   r  rc   colnamecompares              r   test_hdf5_mixins_per_columnrY  
  s   
 ,,HID#	c
A	1c1+dD$%7888A/AdGL!%eBii3	:JKKAdGL OMNNNGGHV&GFFF	f	=	=B:$$$$: ? ?%556((=;QQwZGg>>>> t :$x~!+rz9999$x~!+rz9999: :99r   zcolumn type unsupportedc                 n    |dz  }|\  }}t          |g|g                              |ddd           d S )Nztest_simple.fitsr+  rV   r,  Tr-  )r   rC   )r   rH  r2   r3  r   r   s         r   test_fits_unsupported_mixinr[  )  sY    
 ,,HID#	3%v$$fT %     r   c                 2   | dz  }t          d          }g d|d<   d|d         j        d<   |                    |ddd	           t          j        |          }|j        d
u sJ |j        |j        k    sJ |j        D ]}t          j        ||         j        ||         j        k              sJ t          j        ||         ||         k              sJ d
||         _        d
||         _        t          j        ||         ||         k              sJ dS )aH  Test round-trip of MaskedColumn through HDF5 using default serialization
    that writes a separate mask column.  Note:

    >>> simple_table(masked=True)
    <Table masked=True length=3>
      a      b     c
    int64 float64 str1
    ----- ------- ----
       --     1.0    c
        2     2.0   --
        3      --    e
    ztest.h5T)masked)r     d   er   r%   rV   r,  r-  FN)	r   maskrC   r   rD   r]  r0  r   ra   )r2   r3  r  rc   r   s        r   $test_round_trip_masked_table_defaultra  5  s0    )#HD!!!AAcFAcFKNGGHV&GFFF	H		B9;!*$$$$ + +vbhmqw|344444vbh!D')***** $4vbh!D')******+ +r   c                  
   t          j        dddd          5 } t                      }|                    t	          g dd                     |                    | d	d
           t          j        | d	          }t          ||k              sJ |                    d           |                    d           k    sJ t                      }|                    t	          g dd                     |                    | d	d
d
d
           t          j        | d	          }t          ||k              sJ |                    d           |                    d           k    sJ 	 d d d            d S # 1 swxY w Y   d S )Nztest_data.h5rT   r   Fr   )r         cmr   r9   Tr   r=   )out)      *   g)r>   r   rK   rh   )	rY   rZ   r   r?   r   rC   rD   ra   r  )rf  rG   rc   r   s       r   test_overwrite_serialized_metark  W  s   
 
>3vU	K	K	K 6sWW
f***4888999
6$777Z&)))28}}ww4w  BGGG$5$55555WW
f,,,S999:::
6$ttTTTZ&)))28}}ww4w  BGGG$5$5555556 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6s   EE88E<?E<c                 :   t           j                            dd          }t                      }g d|d<   |                    |d           t          j        |d          }t          j        |dd          }t           j                            |          rJ d S )	N~r6   r&   r7   r_   r=   rV   rW   )osr>   joinr   rC   rD   exists)r3   rF   rG   s      r   test_read_write_tilde_pathrq  n  s    S+..I	BiiBsGHHY[H)))	IK	0	0	0B	IK	?	?	?B w~~i(((((((r   )T)crn  numpyr   r@   astropy.io.misc.hdf5r   astropy.tabler   r   r   astropy.table.table_helpersr   astropy.unitsr   r  astropy.units.quantityr	   astropy.utils.compatr
   "astropy.utils.compat.optional_depsr   astropy.utils.datar   astropy.utils.exceptionsr   astropy.utils.miscr   rY   astropy.io.tests.mixin_columnsr   r   r   r2  r"   uint8uint16uint32uint64int8int16int32int64float32float64r)   r   r+   fixturer3   markskipifrH   rR   r\   rd   ri   rl   ro   rt   rz   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   parametrizer   r   r   r   r   r   r   r   r   r   r  r$  r5  rG  rD  rY  xfailr[  ra  rk  rq  r!   r   r   <module>r     s   
			      * * * * * * / / / / / / / / / / 4 4 4 4 4 4 7 7 7 7 7 7 / / / / / / . . . . . . 7 7 7 7 7 7 4 4 4 4 4 4 7 7 7 7 7 7 9 9 9 9 9 9 KKK V V V V V V V V V V %Z%''   
 /z/11  

 HIIIGHHHJJH	
    
5 
5 
5 L99
9 
9 :9
9 L99
P 
P :9
P L997 7 :97 L99& & :9& L99& & :9& L99O O :9O L99< < :9< L99F F :9F L99F F :9F L99J J :9J L99( ( :9( L99A A :9A L99, , :9, L99. . :9. L99( ( :9( L99
( 
( :9
( L99( ( :9( L99( ( :9($ L99, , :9, L99, , :9, L99, , :9, L99% % :9% L99( ( :9( L99. . :9.. L99( ( :9( L99  :9 L99*--" " .- :9" L99- - :9-& L994 4 :94( L99( ( :9(8 L99  :92 L99  :98 L99  :94 L99  :9, L99
- 
- :9
- L99  :94 L992 2 :928+$ +$ +$ +$\ L99> > :9>@ L99ufo66  76 :9: L99TT*:**:*<*<%=%=>>ufo66: : 76 ?> :9:8 %5%;%;%=%=>>344  54 ?> L99+ + :9+B L996 6 :96, L99) ) :9) ) )r   