
    HR-eq                     f   d dl Zd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZmZmZ d dlmZmZ d dlmZmZmZmZ d dlmZ d dl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&  ej'        d          Z(ej)        ej*        ej+        ej,        ej-        ej.        ej/        ej0        ej1        ej2        ej3        ddgZ4 ej5        d           ej5        d           ej5        d           ej5        d          gZ6d Z7d Z8d Z9d Z:d Z;d Z<d Z=d Z>d Z?d Z@d ZAd ZBd  ZCd! ZDejE        F                    d"e4          d#             ZGejE        F                    d"e6          d$             ZHejE        F                    d"e4          d%             ZIejE        F                    d"e6          d&             ZJejE        F                    d"e4          d'             ZKejE        F                    d"e6          d(             ZLd) ZMd* ZNd+ ZOd, ZPd- ZQd. ZRd/ ZSd0 ZTdd2ZU e	d3ejV        z  d4ejV        z  d5ejV        z  6          ZW e	d3d7gejV        z  d4d8gejV        z  d5d9gejV        z  6          ZX ed d3gejY        z  d7d4gejY        z  d3ejZ        z            Z[ ed d3gej\        z  d8d5gej\        z  d:d9gej\        z            Z] ed d3gej^        z  ej_        z  d d3gej^        z  ej_        z  d;ejV        z  ej`        z            Za ee[ea<          Zb ed3d7gd4d8gd=d>d?@          Zc ed3d7gd4d8gd5d9gdAd>d?dBg@          Zdede                                ZfdCef_g         ed3d7gd4d8gd5d9gdDdEd:gej^        z  ej_        z  dFd;gej^        z  ej_        z  G          Zh ed3d7gd4d8gd5d9gdDdEd:gej^        z  ej_        z  dFd;gej^        z  ej_        z  dHdIgejV        z  ej`        z  J          Zi ed3d7gd4d8gd5d9gdDdHdIgejV        z  ej`        z  K          Zj edLdMgdNdOeWP          Zki dQekdR ed3d7gejl        z            dSecdTeddUefdVehdWeidXejdYd3d7gejm        z  dZd;d[g ejn        ejo                  z  d\d]d^g ejp        ejq        ej`        d7z  z            z  d_d`dagejr        z  db e
d3d7gejY        z            dc ed3d7gejY        z  ddejY        z  e          df ed3d7gejY        z            dgeXdhe[e]eaebdiZsg djZti dkdlgdmdlgdQetdRg dndSg dodTg dpdUg dqdVg drdWg dsdXg dtdYdudvgdZdudvgd\dudvgd_dudvgdcg dwdbdudvgdfdudvgg dxg d6g dyg d6g dzg d{d|Zud} ZvejE        F                    d~eef          d             ZwejE        F                    d exesy                                                    ejE        F                    d~eef          d                         Zzd Z{ejE        F                    d~eef          d             Z|ejE        F                    d~eef          d             Z}ejE        F                    d~eef          d             Z~ejE        F                    d~eef          d             Zd Zd ZejE                            e" d          d             ZdS )    N)units)AngleCartesianRepresentationEarthLocationLatitude	LongitudeSkyCoordSphericalCosLatDifferentialSphericalRepresentation)get_pyarrowparquet_identify)ColumnNdarrayMixinQTableTable)simple_table)Time	TimeDelta)allclose)QuantityInfo)
HAS_PANDAS)AstropyUserWarning)_NOT_OVERWRITING_MSG_MATCHpyarrow|S3U3z>i4z>i8z>f4z>f8c                 Z    | t           j        k    rg dS | dk    rg dS | dk    rg dS g dS )N)r      r   r   )s   abcs   defs   ghir   )abcdefghir         )npbool_dtypes    Blib/python3.11/site-packages/astropy/io/misc/tests/test_parquet.py_default_valuesr*   6   sM    yy	%''''	$$$$$yy    c                 X    t          |           fdt          d          D             S )Nc                     g | ]}S  r.   ).0ivaluess     r)   
<listcomp>z)_default_array_values.<locals>.<listcomp>C   s    %%%qF%%%r+   r$   )r*   ranger(   r1   s    @r)   _default_array_valuesr5   A   s0    U##F%%%%E!HH%%%%r+   c                 ~    t          |           }|d         g|d         |d         g|d         |d         |d         ggS )Nr   r   r#   )r*   r4   s     r)    _default_var_length_array_valuesr7   F   sX    U##F 1I	
 1I1I	

 1I1I1I	
 r+   c                    | dz  }t                      }|                    t          dg d                     |                    |           t          j        |          }t          j        |d         g dk              sJ dS )z+Test writing/reading a simple parquet file.test.parquetar"   namedataN)r   
add_columnr   writereadr%   alltmp_path	test_filet1t2s       r)   test_read_write_simplerG   X   s    >)I	BMM&c			222333HHY	I		B6"S'YYY&'''''''r+   c                 f   | dz  }t          |d          5 }	 ddd           n# 1 swxY w Y   t                      }|                    t          dg d                     t	          j        t          t                    5  |                    |           ddd           dS # 1 swxY w Y   dS )z2Test writing an existing file without overwriting.r9   wNr:   r"   r;   match)	openr   r>   r   pytestraisesOSErrorr   r?   )rC   rD   frE   s       r)   test_read_write_existingrQ   b   s)   >)I	i		               	BMM&c			222333	w&@	A	A	A  
                 s   $((B&&B*-B*c                 d   | dz  }t          |d          5 }	 ddd           n# 1 swxY w Y   t                      }|                    t          dg d                     |                    |d           t          j        |          }t          j        |d         g dk              sJ dS )	z"Test overwriting an existing file.r9   rI   Nr:   r"   r;   T	overwrite)rL   r   r>   r   r?   r@   r%   rA   )rC   rD   rP   rE   rF   s        r)   "test_read_write_existing_overwriterU   n   s     >)I	i		               	BMM&c			222333HHY$H'''	I		B6"S'YYY&'''''''s   $((c                 x   | dz  }t                      }|                    t          dg d                     |                    |           ddl}|                    |d          5 }t          j        |          }t          j        |d         g dk              sJ 	 ddd           dS # 1 swxY w Y   dS )	zTest reading a file object.r9   r:   r"   r;   r   Nr)mode)	r   r>   r   r?   ioFileIOr@   r%   rA   )rC   rD   rE   rY   
input_filerF   s         r)   test_read_fileobjr\   {   s    >)I	BMM&c			222333HHYIII	93	'	' ,:Z
##vbg*++++++, , , , , , , , , , , , , , , , , ,s   *7B//B36B3c                 @   | dz  }t                      }|                    t          dg d                     |                    |           ddl}|                    |          }t          j        |          }t          j        |d         g dk              sJ dS )z Test reading a path-like object.r9   r:   r"   r;   r   N)	r   r>   r   r?   pathlibPathr@   r%   rA   )rC   rD   rE   r^   prF   s         r)   test_read_pathlikeobjra      s     >)I	BMM&c			222333HHYNNNYA	AB6"S'YYY&'''''''r+   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 )z*Test reading an incorrect fileobject type.c                       e Zd Zd ZdS ))test_read_wrong_fileobj.<locals>.FakeFilec                     d S Nr.   selfs    r)   not_readz2test_read_wrong_fileobj.<locals>.FakeFile.not_read       Dr+   N__name__
__module____qualname__ri   r.   r+   r)   FakeFilerd      #        	 	 	 	 	r+   ro   z5pyarrow can only open path-like or file-like objects.rJ   parquetformatN)rM   rN   	TypeErrorr   r@   ro   rP   s     r)   test_read_wrong_fileobjrv      s            	

A	P
 
 
 ( ( 	
1Y''''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s   AAAc                  Z     G d d          }  |             }t          dd|          rJ dS )z&Test identifying an incorrect fileobj.c                       e Zd Zd ZdS )-test_identify_wrong_fileobj.<locals>.FakeFilec                     d S rf   r.   rg   s    r)   ri   z6test_identify_wrong_fileobj.<locals>.FakeFile.not_read   rj   r+   Nrk   r.   r+   r)   ro   ry      rp   r+   ro   testNr   ru   s     r)   test_identify_wrong_fileobjr}      sU            	

A2222222r+   c                  ,    t          ddd          rJ dS )(Test identifying an incorrect extension.r{   ztest.notparquetNr|   r.   r+   r)   "test_identify_file_wrong_extensionr      s#      (94@@@@@@@r+   c                  R    t          ddd          sJ t          ddd          sJ dS )r   r{   r9   Nz	test.parqr|   r.   r+   r)   $test_identify_file_correct_extensionr      s:     FND99999FK6666666r+   c                  ,    t          ddd          rJ dS )z-Test running identify with no object or path.r{   Nr|   r.   r+   r)   "test_identify_file_noobject_nopathr      s"      d3333333r+   c                     t                      } |                     t          dg d                     t          j        t
          d          5  |                     dd           d	d	d	           d	S # 1 swxY w Y   d	S )
z-Test writing to a filename of the wrong type.r:   r"   r;   zshould be a stringrJ   i  rq   rr   N)r   r>   r   rM   rN   rt   r?   )rE   s    r)   test_write_wrong_typer      s     
BMM&c			222333	y(<	=	=	= ) )
i((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )s   A55A9<A9r(   c           	      r   | dz  }t          |          }t                      }|                    t          dt	          j        ||                               |                    |           t          j        |          }t	          j        |d         |k              sJ |d         j	        |k    sJ dS )z=Test that round-tripping a single column preserves datatypes.r9   r:   r'   r;   N)
r*   r   r>   r   r%   arrayr?   r@   rA   r(   rC   r(   rD   r1   rE   rF   s         r)   test_preserve_single_dtypesr      s     >)IU##F	BMM&cu(E(E(EFFFGGGHHY	I		B6"S'V#$$$$$c7=E!!!!!!r+   c           	         | dz  }t          |          }t                      }|                    t          dt	          j        ||                               |                    |           t          j        |          }t	          j        |d         |k              sJ |d         j	        |
                    d          k    sJ dS )zCTest that round-tripping a single big-endian column preserves data.r9   r:   r'   r;   <N)r*   r   r>   r   r%   r   r?   r@   rA   r(   newbyteorderr   s         r)   %test_preserve_single_bigendian_dtypesr      s     >)IU##F	BMM&cu(E(E(EFFFGGGHHY	I		B6"S'V#$$$$$c7=E..s33333333r+   c           	         | dz  }t          |          }t                      }|                    t          dt	          j        ||                               |                    |           t          j        |          }t	          j        |d         |d         k              sJ t	          j        |d         j	        t	          j        |          j	        k              sJ |d         j
        |k    sJ dS )zCTest that round-tripping a single array column preserves datatypes.r9   r:   r'   r;   N)r5   r   r>   r   r%   r   r?   r@   rA   shaper(   r   s         r)   !test_preserve_single_array_dtypesr      s     >)I"5))F	BMM&cu(E(E(EFFFGGGHHY	I		B6"S'RW$%%%%%6"S'-28F#3#3#99:::::c7=E!!!!!!r+   c           	         | dz  }t          |          }t                      }|                    t          dt	          j        ||                               |                    |           t          j        |          }t	          j        |d         |d         k              sJ t	          j        |d         j	        t	          j        |          j	        k              sJ |d         j
        |                    d          k    sJ dS )zKTest that round-tripping a single array column (big-endian) preserves data.r9   r:   r'   r;   r   N)r5   r   r>   r   r%   r   r?   r@   rA   r   r(   r   r   s         r)   +test_preserve_single_bigendian_array_dtypesr   
  s     >)I"5))F	BMM&cu(E(E(EFFFGGGHHY	I		B6"S'RW$%%%%%6"S'-28F#3#3#99:::::c7=E..s33333333r+   c                    | dz  }t                    }t                      }t          j        fd|D             t          j                  }|                    t          d|                     |                    |           t          j        |          }t          |d         |d                   D ]1\  }}t          j
        ||k              sJ |j        |j        k    sJ 2dS )za
    Test that round-tripping a single variable length array column preserves
    datatypes.
    r9   c                 <    g | ]}t          j        |           S r'   r%   r   r/   valr(   s     r)   r2   z@test_preserve_single_var_length_array_dtypes.<locals>.<listcomp>)  (    BBBCRXc///BBBr+   r'   r:   r;   N)r7   r   r%   r   object_r>   r   r?   r@   ziprA   r(   	rC   r(   rD   r1   rE   r=   rF   row1row2s	    `       r)   ,test_preserve_single_var_length_array_dtypesr     s     >)I-e44F	B8BBBB6BBB"*UUUDMM&c---...HHY	I		B"S'2c7++ ( (
dvddl#####zTZ'''''( (r+   c                 &   | dz  }t                    }t                      }t          j        fd|D             t          j                  }|                    t          d|                     |                    |           t          j        |          }t          |d         |d                   D ]W\  }}t          j
        ||k              sJ |j                            d          |j                            d          k    sJ XdS )zl
    Test that round-tripping a single big-endian variable length array column preserves
    datatypes.
    r9   c                 <    g | ]}t          j        |           S r   r   r   s     r)   r2   zJtest_preserve_single_bigendian_var_length_array_dtypes.<locals>.<listcomp>@  r   r+   r'   r:   r;   >N)r7   r   r%   r   r   r>   r   r?   r@   r   rA   r(   r   r   s	    `       r)   6test_preserve_single_bigendian_var_length_array_dtypesr   4  s    >)I-e44F	B8BBBB6BBB"*UUUDMM&c---...HHY	I		B"S'2c7++ L L
dvddl#####z&&s++tz/F/Fs/K/KKKKKKL Lr+   c           
         | dz  }t                      }t          D ]}t          |          }|                    t	          t          |          t          j        ||                               t          |          }|                    t	          t          |          dz   t          j        ||                               |	                    |           t          j
        |          }t          D ]
}t          |          }t          j        |t          |                   |k              sJ |t          |                   j        |k    sJ t          |          }t          j        |t          |          dz            |k              sJ |t          |                   j        |k    sJ t          j        |t          |          dz            j        t          j        |          j        k              sJ t          j
        |d          }t          |          dk    sJ |j        |j        k    sJ dS )	zBTest that round-tripping preserves a table with all the datatypes.r9   r'   r;   _arrT)schema_onlyr   N)r   
ALL_DTYPESr*   r>   r   strr%   r   r5   r?   r@   rA   r(   r   len)rC   rD   rE   r(   r1   
arr_valuesrF   schema2s           r)   test_preserve_all_dtypesr   K  s    >)I	B 
 
 ''
f#e**28F%3P3P3PQQQRRR*511

E

V+"(:U2S2S2STTT	
 	
 	
 	
 HHY	I		B S S ''vbUn./////#e**~#u,,,,*511
vbUf,-788888#e**~#u,,,,vbUf,-3rx
7K7K7QQRRRRRR j555Gw<<1=BH$$$$$$r+   c                 d  	 | dz  }t                      }t          D ]q	t          	          }t          j        	fd|D             t          j                  }|                    t          t          	          dz   |                     r|	                    |           t          j
        |          }t          D ]q	t          	          }t          	          dz   }t          ||         ||                   D ]1\  }}t          j        ||k              sJ |j        |j        k    sJ 2rdS )zMTest that round-tripping preserves a table with all the var length datatypes.r9   c                 <    g | ]}t          j        |           S r   r   r   s     r)   r2   z7test_preserve_all_var_length_dtypes.<locals>.<listcomp>y  (    ???CRXc'''???r+   r'   _varrr;   N)r   r   r7   r%   r   r   r>   r   r   r?   r@   r   rA   r(   )
rC   rD   rE   varr_valuesr=   rF   colnamer   r   r(   s
            @r)   #test_preserve_all_var_length_dtypesr   o  sI    >)I	B D D6u==x????;???rz
 
 
 	f#e**w"6TBBBCCCCHHY	I		B , ,6u==e**w&bk2g;77 	, 	,JD$6$$,''''':+++++	,, ,r+   c           
      d   | dz  }t                      }t          D ]t                    }|                    t	          t                    t          j        |                               t                    }|                    t	          t                    dz   t          j        |                               t          j	        d|j
                  }t          |          }|                    |           t          j        |          }|j
        |j
        k    sJ | dz  }t                      }	t          D ]qt                    }
t          j        fd|
D             t          j                  }|	                    t	          t                    d	z   |                     rt          j	        d|	j
                  }t          |          }t          j        t"          d
          5 }|                    |           ddd           dS # 1 swxY w Y   dS )z?Test that we can save an empty table with var length datatypes.r9   r'   r;   r   r   )r=   ztest2.parquetc                 <    g | ]}t          j        |           S r   r   r   s     r)   r2   z+test_write_empty_tables.<locals>.<listcomp>  r   r+   r   z"Cannot serialize zero-length tablerJ   N)r   r   r*   r>   r   r   r%   r   r5   zerosr(   r?   r@   r7   r   rM   rN   
ValueError)rC   rD   rE   r1   r   r=   rF   t3
test_file2t4r   t5errr(   s                @r)   test_write_empty_tablesr     s[    >)I	B 
 
 ''
f#e**28F%3P3P3PQQQRRR*511

E

V+"(:U2S2S2STTT	
 	
 	
 	

 8ARX&&&D	D			BHHY	I		B8rxO+J	B D D6u==x????;???rz
 
 
 	f#e**w"6TBBBCCCC
 8ARX&&&D	D			B	z)M	N	N	N RU
                 s   H%%H),H)c                    | dz  }t                      }t          j        t          j        g dt          j                  t          j        g dt          j                  gt          j                  }|                    t          d|                     t          j	        t          d          5 }|                    |           d	d	d	           d	S # 1 swxY w Y   d	S )
zLTest exception when trying to serialize a mixed-type variable-length column.r9   )r   r   r#   r'   )r   r   r#   r$      r:   r;   z"Cannot serialize mixed-type columnrJ   N)r   r%   r   int32float64r   r>   r   rM   rN   r   r?   )rC   rD   rE   r=   r   s        r)   "test_heterogeneous_var_array_tabler     s    >)I	B8HYYYbh///H___BJ777	
 j  D MM&c---...	z)M	N	N	N RU
                 s   5CCC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        |          }|j        D ]2}t	          j        |j        |         |j        |         k              sJ 3dS )z-Test that writing/reading preserves metadata.r9   r:   r"   r;   r   hellobgn!	@cTdeN)	r   r>   r   metar%   r   r?   r@   rA   )rC   rD   rE   rF   keys        r)   test_preserve_metar     s     >)I	BMM&c			222333BGCLBGCLBGCLBGCL8III&&BGCLHHY	I		Bw 4 4vbgclbgcl23333334 4r+   c                 n   | 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           t          j        |          }|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 writing/reading preserves unit/format/description.r9   r"   sr=   unitr:   A0a0a1r   r   7.3fA columnr   c0r   TrS   Nr   r   r   rs   descriptionr?   r@   r   rB   s       r)   test_preserve_serializedr     sD    >)I	B)))#...BsGBsGLABsGLBsGN$BsGBGCL1a&>BGCLHHY$H'''	I		Bc7<2c7<''''c7>RW^++++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           t          j        |          }|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 workr9   r"   r   r   r:   r   r   r   r   r   r   r   r   r   r   0i  meta_bigi   meta_biggerstillTrS   Nr   rB   s       r)   test_metadata_very_larger     sf    >)I	B)))#...BsGBsGLABsGLBsGN$BsGBGCL1a&>BGCL+BGJ"%-BGHHY$H'''	I		Bc7<2c7<''''c7>RW^++++c7"S'"55555c7<2c7<''''7bgr+   c                    | dz  }t                      }|                    t          dg d                     t          |j        d<   t          j        t                    5 }|                    |           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 )	z1Test that we cannot preserve objects in metadata.r9   r:   r"   r;   rP   Nzcannot represent an objectz<class 'str'>)
r   r>   r   r   r   rM   rN   	Exceptionr?   value)rC   rD   rE   r   s       r)   test_fail_meta_serializer     s     >)I	BMM&c			222333BGCL	y	!	! S
              '3sy>>9999c#)nn,,,,,,s   "BBBTc                    |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          j
        ||k              sJ dS )z9Convenient routine to check objects and attributes match.)z	info.namezinfo.formatz	info.unitzinfo.description	info.meta.r   NrP   gV瞯<)rtol)	__class__splitgetattrAttributeError
isinstancer%   ndarrayr(   kindquantity_allcloserA   )	obj1obj2attrscompare_class
info_attrsattrr   a2subattrs	            r)   assert_objects_equalr   #  sI     0~////  J 
" $ $zz# 	! 	!G!R))R))! ! ! ![[! ;zzb"*%% 	$"(-3*>*>$R%88888886"(######-$ $s    AA87A8r   r$      )xyzr#   r         
   )differentialszdeg,degfk4zJ1990.5)r   frameobstimez	deg,deg,mzJ1991.5	cartesianz
deg,deg,pc   	   )r   pm_ra_cosdecpm_dec      )r   r  r  radial_velocity)r   r
  g   @BAg   BAjdtai)rs   scalelocationtmdtscscdscdcscpmscpmrvscrvr   qdb   qdexg      @g      @qmag      latlong     f@)
wrap_angleangel2sr)crsdsrd)r   r   rs   r  r  c1r=   c2)r   r   rs   r  )radecrepresentation_type
frame.name)r(  r)  distancer*  r+  )r   r   r   r*  r+  )r(  r)  r,  r  r  r*  r+  )r(  r)  r,  r  r  r
  r*  r+  )r(  r)  r,  r
  r*  r+  r   r   )r   r   r  )r   r   r   	ellipsoid)r  r  r,  )d_lon_coslatd_lat
d_distance)r  r  r,  zdifferentials.s.d_lon_coslatzdifferentials.s.d_latzdifferentials.s.d_distance)r!  ndr"  r#  r$  r%  c                 j   | dz  }t          t                    }t          d |D             |          }|                    |d           t	          j        |d          }|j        |j        k    sJ |j                                        D ]\  }}||         }t          |t                    r|j        |_        t          |         }d}	t          |j        t                    r<t          |          t           u sJ dg}d}	t#          j        |j        |k              sJ t)          ||||	           d	S )
zVTest writing as QTable and reading as Table. Ensure correct classes
    come out.
    test_simple.parquetc                 (    g | ]}t           |         S r.   
mixin_colsr/   r<   s     r)   r2   z7test_parquet_mixins_qtable_to_table.<locals>.<listcomp>  s    333T
4 333r+   namesrq   rr   Tr   FN)sortedr6  r   r?   r   r@   colnamescolumnsitemsr   r   rs   compare_attrsinfor   typer   r%   rA   r   r   )
rC   filenamer9  trF   r<   colcol2r   r   s
             r)   #test_parquet_mixins_qtable_to_tablerE    sE    //H:E33U3335AAAAGGHYG'''	HY	/	/	/B:$$$$Y__&& > >	c$x dD!! 	%*DKd#ch-- 	-::''''HE!M6#)t+,,,,,S$}====)> >r+   	table_clsc                    |dz  }t          t                    } | d |D             |          }d|j        d<   g d|j        d<   g d|j        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 dS )zGTest write/read all cols at once and validate intermediate column namesr3  c                 (    g | ]}t           |         S r.   r5  r7  s     r)   r2   z.test_parquet_mixins_as_one.<locals>.<listcomp>      666:d#666r+   r8  spamCthisisr:   commentcommentsfirstsecondthirdhistoryrq   rr   Nr:  r6  r   r?   r@   r;  rF  rC   rA  r9  rB  rF   s         r)   test_parquet_mixins_as_onerX    s	    //H:E	66666eDDDAAF3K777AF:444AF9GGHYG'''		3	3B73<6!!!!7:"@"@"@@@@@79!=!=!=====:$$$$$$r+   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           t          ||         t                    rt          j
        d           |                    |d           |                     |d          }|j        |j        k    sJ |j        D ]*}	t          ||	         ||	         t          |	                    +|                    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 validationr3  g      ?g       @r&  r'  r8  zmy description2   r:   bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb)listdictz7column is not a mixin (e.g. Quantity subclass in Table)zNdarrayMixin not supportedrq   rr   r  N)r?  r   r]  r3   r   has_mixin_columnsrM   skipr   r   xfailr?   r@   r;  r   r>  
startswith_timejd1r   r%   r   jd2)
rF  rY  rC   rA  r<   rC  r   rB  rF   r   s
             r)   test_parquet_mixins_per_columnrf    s    //HID#	c
A	1c1+dD$%7888A/AdGL!%eBii3	:JKKAdGL OMNNN!D'<(( 31222GGHYG'''		3	3B:$$$$: N NQwZGmG6LMMMM t :$x~!+rz9999$x~!+rz9999: :99r+   c                 .   | dz  }t          d          }g d|d<   d|d         j        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 )aK  Test round-trip of MaskedColumn through Parquet 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
    r9   T)masked)   c   d   er   r   rq   rr   FN)	r   maskr?   r   r@   rh  r;  r%   rA   )rC   rA  rB  rF   r<   s        r)   $test_round_trip_masked_table_defaultrm  &  s,    .(HD!!!AAcFAcFKNGGHYG'''	H		B9;!*$$$$ + +vbhmqw|344444vbh!D')***** $4vbh!D')******+ +r+   c                    |dz  }t          t                    } | d |D             |          }d|j        d<   g d|j        d<   g d|j        d	<   |                    |d
           |D ]f}|                     |d
|g          }|j        d         dk    sJ |j        d         g dk    sJ |j        d	         g dk    sJ |j        |gk    sJ gdS )z4Test write all cols at once, and read one at a time.r3  c                 (    g | ]}t           |         S r.   r5  r7  s     r)   r2   z5test_parquet_mixins_read_one_name.<locals>.<listcomp>M  rI  r+   r8  rJ  rK  rL  rP  rQ  rU  rq   rr   rs   include_namesNrV  )rF  rC   rA  r9  rB  r<   rF   s          r)   !test_parquet_mixins_read_one_namerr  G  s#    //H:E	66666eDDDAAF3K777AF:444AF9GGHYG''' % %^^HYtf^MMws|v%%%%wz"&D&D&DDDDDwy!%A%A%AAAAA{tf$$$$$% %r+   c                 L   |dz  }t          t                    } | d |D             |          }d|j        d<   g d|j        d<   g d|j        d	<   |                    |d
           |                     |d
|dd                   }|j        dd         |j        k    sJ dS )z<Test write all cols at once, and read all but one at a time.r3  c                 (    g | ]}t           |         S r.   r5  r7  s     r)   r2   z:test_parquet_mixins_read_exclude_names.<locals>.<listcomp>c  rI  r+   r8  rJ  rK  rL  rP  rQ  rU  rq   rr   r   r   )rs   exclude_namesNrV  rW  s         r)   &test_parquet_mixins_read_exclude_namesrv  ]  s     //H:E	66666eDDDAAF3K777AF:444AF9GGHYG'''	%!*	M	MB:abb>R[((((((r+   c                 t   |dz  }t          t                    } | d |D             |          }d|j        d<   g d|j        d<   g d|j        d	<   |                    |d
           t	          j        t          d          5  |                     |d
ddg          }ddd           dS # 1 swxY w Y   dS )z>Test write all cols at once, and try to read no valid columns.r3  c                 (    g | ]}t           |         S r.   r5  r7  s     r)   r2   z7test_parquet_mixins_read_no_columns.<locals>.<listcomp>t  rI  r+   r8  rJ  rK  rL  rP  rQ  rU  rq   rr   zNo include_names specifiedrJ   not_a_columnalso_not_a_columnrp  N)r:  r6  r   r?   rM   rN   r   r@   rW  s         r)   #test_parquet_mixins_read_no_columnsr{  n  s%    //H:E	66666eDDDAAF3K777AF:444AF9GGHYG'''	z)E	F	F	F 
 
^^)+>?  
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   B--B14B1c                    |dz  }t          t                    } | d |D             |          }d|j        d<   g d|j        d<   g d|j        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          |          dk    sJ dS )z1Test write all cols at once, and read the schema.r3  c                 (    g | ]}t           |         S r.   r5  r7  s     r)   r2   z3test_parquet_mixins_read_schema.<locals>.<listcomp>  rI  r+   r8  rJ  rK  rL  rP  rQ  rU  rq   rr   T)rs   r   r   N)r:  r6  r   r?   r@   r;  r   rW  s         r)   test_parquet_mixins_read_schemar~    s    //H:E	66666eDDDAAF3K777AF:444AF9GGHYG'''		E	EB73<6!!!!7:"@"@"@@@@@79!=!=!=====:$$$$r77a<<<<<<r+   c                    | dz  }t                      }t          t          j        d          t          j                  |d<   t          t          j        ddd          t          j                  |d<   |                    |d	           t          j        |d
g          }|d                                         dk     sJ t          j        |dg          }|d                                         dk     sJ dS )z*Test reading a parquet file with a filter.r3  d   )r=   r(   r:   r   r   TrS   )r:   r   r[  )filtersr[  )r   r   r[  N)	r   r   r%   aranger   r   r?   r@   max)rC   rA  rE   rF   s       r)   test_parquet_filterr    s    //H	B")C..999BsG")CB//rzBBBBsGHHXH&&&	H~&6	7	7	7Bc7;;==2	H~&6	7	7	7Bc7;;==2r+   c           
         | dz  }t                      t          D ]V}t          |          }                    t	          t          |          t          j        ||                               Wj        j	        }fd|D             }t                              |          }t                      \  }}}	|                    |||	          5 }
fd|D             }|
                    t          j                             ||                     ddd           n# 1 swxY w Y   t!          j        t$          d	
          5  t          j        |          }ddd           n# 1 swxY w Y   t          D ]^}t          |          }t          j        |t          |                   |k              sJ |t          |                   j        |k    sJ _dS )z$Test reading a generic parquet file.ztest_generic.parqr'   r;   c                 h    g | ].}|t                               |         j        j                  f/S r.   )r   from_numpy_dtyper(   r@  r/   r<   rE   s     r)   r2   z-test_parquet_read_generic.<locals>.<listcomp>  sB       BFw''4(;<<=  r+   versionc                 Z    g | ]'}t                               |         j                  (S r.   )r   r   r=   r  s     r)   r2   z-test_parquet_read_generic.<locals>.<listcomp>  s+    AAA4'--4..AAAr+   )schemaNNo table::lenrJ   )r   r   r*   r>   r   r   r%   r   r(   r9  r   r  r   ParquetWriterwrite_tablefrom_arraysrM   warnsr   r@   rA   )rC   rA  r(   r1   r9  	type_listr  _rq   writer_versionwriterarraysrF   rE   s                @r)   test_parquet_read_genericr    sk   --H	B S S ''
f#e**28F%3P3P3PQQQRRRR HNE   JO  I ^^I&&F!,Aw			x		H	H MFAAAA5AAA7=44VF4KKLLLM M M M M M M M M M M M M M M 
(	@	@	@ " "Z!!" " " " " " " " " " " " " " "  - - ''vbUn./////#e**~#u,,,,,- -s%   AD  D$'D$E''E+.E+zrequires pandas)reasonc           
         | dz  }t                      }t          D ]V}t          |          }|                    t	          t          |          t          j        ||                               W|                                }t                      \  }}}|
                    ||           t          j        t          d          5  t          j        |          }ddd           n# 1 swxY w Y   t          D ]^}t          |          }t          j        |t          |                   |k              sJ |t          |                   j        |k    sJ _dS )z#Test reading a pandas parquet file.ztest_pandas.parqr'   r;   r  r  rJ   N)r   r   r*   r>   r   r   r%   r   	to_pandasr   
to_parquetrM   r  r   r@   rA   r(   )	rC   rA  rE   r(   r1   dfr  r  rF   s	            r)   test_parquet_read_pandasr    s    ,,H	B S S ''
f#e**28F%3P3P3PQQQRRRR	B&==Aq.MM(NM333	(	@	@	@ " "Z!!" " " " " " " " " " " " " " "  - - ''vbUn./////#e**~#u,,,,,- -s   
C++C/2C/)T)numpyr%   rM   astropyr   uastropy.coordinatesr   r   r   r   r   r	   r
   r   astropy.io.misc.parquetr   r   astropy.tabler   r   r   r   astropy.table.table_helpersr   astropy.timer   r   astropy.unitsr   r   astropy.units.quantityr   "astropy.utils.compat.optional_depsr   astropy.utils.exceptionsr   astropy.utils.miscr   importorskipr   uint8uint16uint32uint64int8int16r   int64float32r   r&   r   r(   BIGENDIAN_DTYPESr*   r5   r7   rG   rQ   rU   r\   ra   rv   r}   r   r   r   r   markparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   kmelr!  degkpcr"  pcr#  masyrr   r$  r%  r  r  copyr  r*  r  r  r  r  daymdBmWdexcmABmagr6  
time_attrsr>  rE  rX  r]  r=  rf  rm  rr  rv  r{  r~  r  r  skipifr  r.   r+   r)   <module>r     s)             	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 B A A A A A A A = = = = = = = = = = = = 4 4 4 4 4 4 ( ( ( ( ( ( ( ( 7 7 7 7 7 7 / / / / / / 9 9 9 9 9 9 7 7 7 7 7 7 9 9 9 9 9 9 &
i
(
( HIIIGHHHJJH	
" BHUOOBHUOOBHUOOBHUOO	   & & &
  $( ( (	 	 	
( 
( 
(, , , ( ( ( ( ( (	3 	3 	3A A A7 7 74 4 4) ) ) *--" " .-"" "2334 4 434$ *--" " .-"$ "2334 4 434$ *--( ( .-(, "233L L 43L,!% !% !%H, , ,4* * *Z  (4 4 4,  2  6- - -#$ #$ #$ #$V ]QXQTQX666mq!fqtm1v}AFFFaVae^aVae^QYGGaVad]QFQTMAq6AD=II  FQUNQTAq6AE>AD0"qt)ac/  b333Xq!fq!f9E9MMMhFFF	
	"   xxzz& xFFF	Q!%!$&r7QU?QT!   
FFF	Q!%!$&r7QU?QT!HqtOac)
 
 
 xFQFQFBx!$QRQT?T   
T9i
 URHHH
"))QFQUN
#
# 	" 
3	
 D D f D !Q!# 
B8dad14jj  S#Jqtac1f}--- RHqw 
88QFQUN## 
99aVae^>>> 
55!Q!%    
3!" 	"#$ 
)  
. ?>>
76(76(7 	*7 	
/
/
/	7
 	
<
<
<7 
III7 @@@7    7"  	 	 	#76    77F '6	G7H 
GVI7J WfK7L WfM7N 
***O7P 
GVQ7R 
GVS7T (''
//
$
$
$
//
1
1
1  _7 7 7t"> "> ">J ufo66% % 76%( TT**:*:*<*<%=%=>>ufo66: : 76 ?>:<+ + +B ufo66% % 76%* ufo66) ) 76)  ufo66
 
 76
( ufo66  76.  &- - -@ 
N+<==- - >=- - -r+   