
    Oh                     X   d Z ddlZddlmZ ddlmZ ddlZddlZddlZ	ddl
Z
ddlmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZ ddlZddlmZ dd	lmZ dd
lm Z m!Z!m"Z"m#Z#m$Z$ 	 ddl%Z%dZ&	 ddl(Z(dZ)e
jT                  jW                  d      e
jT                  jW                  d      gZ, e
jZ                   e
j\                  de
jT                  j_                  e) xs  edd      dk(  d      e
jT                  ja                   e       dd      g       e
j\                  de
jT                  j_                  e& d            g      d        Z1e
jZ                  d        Z2e
jZ                  d        Z3e
jZ                  d        Z4e
jZ                  d        Z5e
jZ                  d         Z6 e
jZ                  ej                  jo                  ejp                  jr                        ej                  jo                  ejp                  jt                        ej                  jo                  ejp                  jv                        ej                  jy                  d!d"      ej                  jy                  d#d"      ej                  jy                  d$d"      ej                  jy                  d%d"      g      d&        Z=	 	 	 	 	 	 	 	 	 d:d'Z>d( Z?d) Z@d* ZAd+ ZBd, ZCd- ZDd. ZEd/ ZFd0 ZGd1 ZH G d2 d3      ZI G d4 d5eI      ZJ G d6 d7eI      ZK G d8 d9eI      ZLy# e'$ r dZ&Y w xY w# e'$ r dZ)Y w xY w);z test parquet compat     N)Decimal)BytesIO)using_copy_on_writeusing_string_dtype)_get_option)is_platform_windows)pa_version_under11p0pa_version_under13p0pa_version_under15p0pa_version_under19p0pa_version_under20p0)Version)FastParquetImplPyArrowImpl
get_engineread_parquet
to_parquetTFz2ignore:DataFrame._data is deprecated:FutureWarningz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningfastparquetmode.data_managersilentarrayz4fastparquet is not installed or ArrayManager is usedreasonTODO(infer_string) fastparquetr   strictmarkspyarrowpyarrow is not installed)paramsc                     | j                   S Nparamrequests    d/var/www/html/diagnosisapp-backend/venv/lib/python3.12/site-packages/pandas/tests/io/test_parquet.pyenginer*   @   s    4 ==    c                  :    t         st        j                  d       y)Nr!   r    )_HAVE_PYARROWpytestskip r+   r)   par1   ]   s    ./r+   c                     t         st        j                  d       n%t        dd      dk(  rt        j                  d       t	               r0| j                  t        j                  j                  dd	             y
)Nzfastparquet is not installedr   Tr   r   z.ArrayManager is not supported with fastparquetr   Fr   r   )_HAVE_FASTPARQUETr.   r/   r   r   applymarkermarkxfailr'   s    r)   fpr7   d   s`    23	(	6'	ADEKK%EeT	
 r+   c                  d    t        j                  g dddt        j                  ddg            S )N         fooABr?   r@   columns)pd	DataFrameIndexr0   r+   r)   	df_compatrF   q   s%    <<ie4bhhSz>RSSr+   c            
          t        j                  t        d      t        t        dd            t	        j
                  ddd      g dt        j                  d	d
      d      } | S )Nabcr:            @      @float64dtypeTFT20130101r<   periods)abdef)rC   rD   listrangenparange
date_range)dfs    r)   df_cross_compatr^   v   sR    	eeAqk"395$z15
	

B Ir+   c                     t        j                  t        d      dt        j                  dgg dg dg dt        t        dd            t        j                  d	d
      j                  d      t        j                  ddd      dt        j                  dgg dt        j                  dd	      t        j                  d      t         j                  t        j                  d      gd      S )NrH   rS   crS   Nr`   )   foo   bars   bazr=   barbazr:   rI   r<      u1rJ   rK   rL   rM          @      @rO   rP   rQ   20130103)stringstring_with_nanstring_with_nonebytesunicodeintuintfloatfloat_with_nanbooldatetimedatetime_with_nat)rC   rD   rX   rZ   nanrY   r[   astyper\   	TimestampNaTr0   r+   r)   df_fullr|      s    <<5k #RVVS1 0-,a$IIaO**40YYsCy9"BFFC0'j!<Z(Z("	
 r+   z2019-01-04T16:41:24+0200z%Y-%m-%dT%H:%M:%S%zz2019-01-04T16:41:24+0215z2019-01-04T16:41:24-0200z2019-01-04T16:41:24-0215c                     | j                   S r$   r%   r'   s    r)   timezone_aware_date_listr~      s     ==r+   c
                      xs ddixs i  |r
|d<   |d<    fd}
&t        j                         5  |
|	       ddd       y |
|	       y# 1 sw Y   yxY w)a  Verify parquet serializer and deserializer produce the same results.

    Performs a pandas to disk and disk to pandas round trip,
    then compares the 2 resulting DataFrames to verify equality.

    Parameters
    ----------
    df: Dataframe
    engine: str, optional
        'pyarrow' or 'fastparquet'
    path: str, optional
    write_kwargs: dict of str:str, optional
    read_kwargs: dict of str:str, optional
    expected: DataFrame, optional
        Expected deserialization result, otherwise will be equal to `df`
    check_names: list of str, optional
        Closed set of column names to be compared
    check_like: bool, optional
        If True, ignore the order of index & columns.
    repeat: int, optional
        How many times to repeat the test
    compressionNr*   c                     t        |       D ]N  } j                  fi 
 t        fi 	}dv rd j                  d<   t	        j
                  |       P y )Nrm   r:   rm   )check_names
check_likecheck_dtype)rY   r   r   loctmassert_frame_equal)repeat_actualr   r   r   r]   expectedpathread_kwargswrite_kwargss      r)   comparez!check_round_trip.<locals>.compare   sl    v 	ABMM$/,/!$6+6F H,5912!!'%'	r+   )r   ensure_clean)r]   r*   r   r   r   r   r   r   r   r   r   s   ` ```````  r)   check_round_tripr      s    D  8M4#8L#K!'X &H  |__ 	$FO	 	 		 	s   		A$$A-c                     ddl m} |j                  | d      }|j                  j                  j                  |k(  sJ y)zCheck partitions of a parquet file are as expected.

    Parameters
    ----------
    path: str
        Path of the dataset.
    expected: iterable of str
        Expected partition names.
    r   Nhive)partitioning)pyarrow.datasetdatasetr   schemanames)r   r   dsr   s       r)   check_partition_namesr      s9     !jjFj3G&&,,888r+   c                     d}t        j                  t        |      5  t        | dd       d d d        y # 1 sw Y   y xY w)Nz.engine must be one of 'pyarrow', 'fastparquet'matchr=   re   )r.   raises
ValueErrorr   )rF   msgs     r)   test_invalid_enginer     s6    
:C	z	- 2E512 2 2s   5>c                     |r&t         s | j                  j                  d      | _        t        j                  dd      5  t        |        d d d        y # 1 sw Y   y xY w)Nstrio.parquet.enginer    )r   rB   ry   rC   option_contextr   )rF   r1   using_infer_strings      r)   test_options_pyr     sO    "6%--44U;				.		: $#$ $ $s   AAc                 p    t        j                  dd      5  t        |        d d d        y # 1 sw Y   y xY w)Nr   r   rC   r   r   )rF   r7   s     r)   test_options_fpr     s2     
		.	> $#$ $ $   ,5c                 p    t        j                  dd      5  t        |        d d d        y # 1 sw Y   y xY w)Nr   autor   )rF   r7   r1   s      r)   test_options_autor     s2     
		.	7 $#$ $ $r   c                 ^   t        t        d      t              sJ t        t        d      t              sJ t	        j
                  dd      5  t        t        d      t              sJ t        t        d      t              sJ t        t        d      t              sJ 	 d d d        t	        j
                  dd      5  t        t        d      t              sJ t        t        d      t              sJ t        t        d      t              sJ 	 d d d        t	        j
                  dd      5  t        t        d      t              sJ t        t        d      t              sJ t        t        d      t              sJ 	 d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr    r   r   r   )
isinstancer   r   r   rC   r   )r7   r1   s     r)   test_options_get_enginer     sq   j+[999j/AAA			.		: F*V,k:::*Y/===*]3_EEEF
 
		.	> F*V,o>>>*Y/===*]3_EEEF
 
		.	7 F*V,k:::*Y/===*]3_EEEF FF F
F F
F Fs'   AF>AF/AF#FF #F,c                  D   ddl m}  | j                  d      }| j                  d      }t        sdn$t	        t
        j                        t	        |      k  }t        sdn$t	        t        j                        t	        |      k  }t        xr | }t        xr | }|s|s|r6d| d}t        j                  t        |      5  t        d	       d d d        n1d
}t        j                  t        |      5  t        d	       d d d        |r6d| d}t        j                  t        |      5  t        d	       d d d        y d}t        j                  t        |      5  t        d	       d d d        y y y # 1 sw Y   uxY w# 1 sw Y   xY w# 1 sw Y   y xY w# 1 sw Y   y xY w)Nr   )VERSIONSr    r   FzPandas requires version .z. or newer of .pyarrow.r   r   z%Missing optional dependency .pyarrow.z. or newer of .fastparquet.z)Missing optional dependency .fastparquet.)pandas.compat._optionalr   getr-   r   r    __version__r3   r   r.   r   ImportErrorr   )r   
pa_min_ver
fp_min_verhave_pa_bad_versionhave_fp_bad_versionhave_usable_pahave_usable_fpr   s           r)   "test_get_engine_auto_error_messager   2  s    1 i(Jm,J  	W(()GJ,??  ! 	[,,-
0CC  #>+>'>N&B/B+BN./
|;RSE{%8 #6"# # <E{%8 #6"# /
|;VWE{%8 #6"# # @E{%8 #6"# ## #1># ## #
# ## #s0    E22E>)F
F2E;>F
FFc                    | }t        j                         5 }|j                  ||d        t        ||      }t        j                  ||       t        ||ddg      }t        j                  ||ddg          d d d        y # 1 sw Y   y xY wN)r*   r   r*   rS   rU   )r*   rB   r   r   r   r   r   r^   r1   r7   r]   r   results         r)   test_cross_engine_pa_fpr   ]  s     
B		 6d
d248d2.
fb)d2SzB
fb#sn56 6 6   A#BBc                    | }t        j                         5 }|j                  ||d        t        ||      }t        j                  ||       t        ||ddg      }t        j                  ||ddg          d d d        y # 1 sw Y   y xY wr   r   r   s         r)   test_cross_engine_fp_par   k  s    	B		 6d
d248d2.
fb)d2SzB
fb#sn56 6 6r   c                    t        j                  dg di      }d}t        j                         5 }t        j                  t
        |dd      5  |j                  ||        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrS   r9   zqStarting with pandas version 3.0 all arguments of to_parquet except for the argument 'path' will be keyword-only.F)r   check_stacklevelraise_on_extra_warnings)rC   rD   r   r   assert_produces_warningFutureWarningr   )r*   r]   r   r   s       r)   !test_parquet_pos_args_deprecationr   x  s    	sI&	'B	1  
	 (d''"$)	
 	( MM$'	(( (	( 	(( (s#   A>A2!A>2A;	7A>>Bc                       e Zd Zd Zd Zy)Basec                     t        j                         5 }t        j                  ||      5  t	        |||d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   )r   r   r.   r   r   )selfr]   r*   excerr_msgr   s         r)   check_error_on_writezBase.check_error_on_write  sY    __ 	?$s'2 ?2tV>?	? 	?? ?	? 	?s!   AAAA	AA#c                     t        j                         5 }t        j                  |      5  t        |||d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   )r   r   external_error_raisedr   )r   r]   r*   r   r   s        r)   check_external_error_on_writez"Base.check_external_error_on_write  sY    __ 	?$))#. ?2tV>?	? 	?? ?	? 	?s!   AAAA	AA!N)__name__
__module____qualname__r   r   r0   r+   r)   r   r     s    ??r+   r   c                   Z   e Zd Zd Zd Zej                  j                  dg d      d        Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zej                  j                  dg d      d        Zej                  j,                  ej                  j.                  d               Zy)	TestBasicc                     t        j                  g d      ddt        j                  d      t        j                  g d      fD ]  }d}| j                  ||t        |        y )Nr9   r:   r=   rP   z+to_parquet only supports IO with DataFrames)rC   Seriesrz   rZ   r   r   r   )r   r*   objr   s       r)   
test_errorzTestBasic.test_error  s[    IIi LL$HHY
 	DC @C%%c6:sC	Dr+   c           	          t        j                  t        d      t        t        dd            d      }ddg|_        t        ||       y )NrH   r:   rI   rl   rq   r=   re   rC   rD   rX   rY   rB   r   )r   r*   r]   s      r)   test_columns_dtypeszTestBasic.test_columns_dtypes  s;    \\T%[eAqk9JKL U^
V$r+   r   )Ngzipsnappybrotlic                 V    t        j                  dg di      }t        ||d|i       y )Nr?   r9   r   r   rC   rD   r   )r   r*   r   r]   s       r)   test_compressionzTestBasic.test_compression  s&    \\3	*+V=+2NOr+   c           	          t        j                  t        d      t        t        dd            d      }t        j                  dt        d      i      }t	        |||ddgi       y )NrH   r:   rI   r   rl   rB   r   r   rC   rD   rX   rY   r   )r   r*   r]   r   s       r)   test_read_columnszTestBasic.test_read_columns  sS    \\T%[eAqk9JKL<<4; 78	H:7N	
r+   c           
          t        j                  t        t        d            t        d      d      }t        j                  dddgi      }t	        ||||ddgid	gdgd
d       y )NrI   aabb)rq   partrq   r   r:   partition_colsr   )r   ==rS   )filtersrB   )r   r   r   r   r   r   )r   r*   tmp_pathr]   r   s        r)   test_read_filterszTestBasic.test_read_filters  sm    \\E!H~V
 <<A0*VH5%8$9ugN	
r+   c                    |dk7  }t        j                  dg di      }t        ||       g dt        j                  dd      t	        d      g d	g}|D ]Q  }||_        t        |t         j                        r |j
                  j                  d       |_        t        |||
       S g d|_        d|j
                  _	        t        ||       y )Nr   r?   r9   )r;   r<   rI   rP   r<   rQ   rH   )r:   r<   rI   )r   )r   r:   r;   r=   )
rC   rD   r   r\   rX   indexr   DatetimeIndex
_with_freqname)r   r*   r   r]   indexesr   s         r)   test_write_indexzTestBasic.test_write_index  s    -\\3	*+V$ MM*a0K	
  	BEBH%!1!1288..t4R[A		B V$r+   c                     |}t        j                  dg di      }t         j                  j                  g d      }||_        t        ||       y )Nr?   r9   )rS   r:   )rS   r;   )rT   r:   )rC   rD   
MultiIndexfrom_tuplesr   r   )r   r1   r*   r]   r   s        r)   test_write_multiindexzTestBasic.test_write_multiindex  s@    \\3	*+))*HIV$r+   c           	         |}t        j                  ddd      }t        j                  t        j                  j                  d      j                  dt        |      z  df      t        d            }t         j                  j                  d	d
g|gddg      }|j                  d       }||fD ]-  }||_        t        ||       t        ||dddgi|ddg          / y )Nz01-Jan-2018z01-Dec-2018MS)freqr;   r<   ABCrA   Level1Level2leveldate)r   rB   r?   r@   r   r   )rC   r\   rD   rZ   randomdefault_rngstandard_normallenrX   r  from_productcopyr   r   )r   r1   r*   datesr]   index1index2r   s           r)   test_multiindex_with_columnsz&TestBasic.test_multiindex_with_columns  s    m]F\\II!!!$44a#e*na5HIK
 ++!5)'61B , 
 4(f% 	EBHR(FS#J(?"cSVZ.		r+   c                    t        j                  g dg dd      }d dd}|j                  d      }t        ||||       t        j                  g dg ddg d	
      }t        ||||       g dg dg}t        j                  t	        t        d            t        d      D cg c]  }|  c}d|
      }|j                  d      }t        ||||       y c c}w )Nr9   )qrs)rS   rT   F)r   r   T)dropr   r   )zyxwvutsrr   re   re   rf   rf   r=   r=   quxr%  onetwor'  r(  r'  r(  r'  r(     )r'  r(  )rC   rD   reset_indexr   rX   rY   )r   r*   r]   r   r   arraysis          r)   test_write_ignoring_indexz#TestBasic.test_write_ignoring_index  s     \\	@A'+e< >>t>,V,R \\/2:O
 	V,R ED
 \\qNa+A1QB+AB&
 >>t>,V,R	 ,Bs   )
C 
c                 ,   t         j                  j                  g d      }t        j                  t        j
                  j                  d      j                  d      |      }|dk(  r| j                  ||t        d       y |dk(  rt        ||       y y )Nr  r;   )rI   r<   rA   r   Column name must be a stringr    )rC   r  r  rD   rZ   r  r  r  r   	TypeErrorr   )r   r*   
mi_columnsr]   s       r)   test_write_column_multiindexz&TestBasic.test_write_column_multiindex  s    ]]../MN
\\II!!!$44V<j
 ]"%%FI'E y R( !r+   c                     g dg dg}t        j                  t        j                  j	                  d      j                  d      |      }ddg|j                  _        |dk(  r| j                  ||t        d	       y |d
k(  rt        ||       y y )Nr$  )r:   r;   r:   r;   r:   r;   r:   r;   r;   r)  r)  rA   r  r  r   zColumn namer    )rC   rD   rZ   r  r  r  rB   r   r   r   r   r   r*   r+  r]   s       r)   &test_write_column_multiindex_nonstringz0TestBasic.test_write_column_multiindex_nonstring-  s    
 E$
 \\II!!!$44V<f
 %h/

]"%%b&*mLy R( !r+   c                     |}g dg dg}t        j                  t        j                  j	                  d      j                  d      |      }ddg|j                  _        t        ||       y )Nr$  r&  r;   r4  rA   	ColLevel1	ColLevel2)	rC   rD   rZ   r  r  r  rB   r   r   r   r1   r*   r+  r]   s        r)   #test_write_column_multiindex_stringz-TestBasic.test_write_column_multiindex_string>  se      ED
 \\II!!!$44V<f
 (5

V$r+   c                     |}g d}t        j                  t        j                  j	                  d      j                  d      |      }d|j                  _        t        ||       y )N)re   rf   r=   r%  r;   r)  rI   rA   	StringCol)	rC   rD   rZ   r  r  r  rB   r   r   r:  s        r)   test_write_column_index_stringz(TestBasic.test_write_column_index_stringO  sT      .\\II!!!$44V<f
 &

V$r+   c                    g d}t        j                  t        j                  j	                  d      j                  d      |      }d|j                  _        |dk(  r| j                  ||t        d       y t        ||       y )Nr:   r;   r<   rI   r;   r=  rA   NonStringColr   r/  )rC   rD   rZ   r  r  r  rB   r   r   r0  r   r5  s       r)   !test_write_column_index_nonstringz+TestBasic.test_write_column_index_nonstring]  so     \\II!!!$44V<f
 )

]"%%FI'E R(r+   c                    t        j                  d      }|dk(  r1t         j                  j                  d      }|j	                  |       t        j                  t        j                  g dd      t        j                  g dd      t        j                  g d      t        j                  g d	      t        j                  g d
d      t        j                  g dd      t        j                  g dd      d      }t        j                         5 }|j                  ||       t        ||      }t        ||d      }d d d        d   j                  t        j                  d      k(  sJ t        j                  t        j                  g dd      t        j                  g dd      t        j                  g dd      t        j                  g d	d      t        j                  g d
d      t        j                  g dd      t        j                  g dd      d      }	|dk(  r&j!                  dd      }|	j!                  dd      }	t        j"                  |	       y # 1 sw Y   1xY w)Nzpyarrow.parquetr   z.Fastparquet nullable dtype support is disabledr   r:   r;   r<   Nint64uint8)rS   rT   r`   N)TFTNrA  )      ?ri   rj   Nfloat32rL   )rS   rT   r`   rU   rV   rW   gr   numpy_nullabler*   dtype_backendrS   Int64rM   UInt8rl   booleanFloat32Float64r`   r:   )axis)r.   importorskipr5   r6   r4   r    tabler   r   r   write_tabler   rN   rZ   rC   rD   r  r   )
r   r*   r(   pqr5   rU  r   result1result2r   s
             r)   test_dtype_backendzTestBasic.test_dtype_backendm  s     !23]" ;;$$G % D %]]?G<]]?G<]]#89]]#<=]]<9]]#8)D]]#8)D

 __ 	X$NN5$'"47G"4FVWG		X s|!!RXXi%8888<<XXoW=XXoW=XX38DXX7yIXXl':XX39EXX39E

 ]" ll3Ql/G}}Sq}1H
gx0/	X 	Xs   .I22I<rN   )	rN  rO  rP  objectzdatetime64[ns, UTC]rs   z	period[D]rR  rl   c                     t        j                  dt        j                  g |      i      }d }|dk(  r,t        j                  dt        j                  g d      i      }t        ||ddi|       y )NvaluerM   rs   rR  rM  rK  r  )rC   rD   r   r   )r   r1   rN   r]   r   s        r)   test_read_empty_arrayzTestBasic.test_read_empty_array  sr      \\"E2
 G||RXXb	:H
 	2B Ch	
r+   c                 (   |dk7  rt        j                  |       t         |dddd      d      5 }|j                  |j	                                t        |j                  |	      }d d d        t        j                  |       y # 1 sw Y    xY w)
Nr   iodataparquetzsimple.parquetrb)mode)contentr   )	r.   rT  openserve_contentreadr   urlr   r   )r   
httpserverdatapathrF   r*   rW   r]   s          r)   test_parquet_read_from_urlz$TestBasic.test_parquet_read_from_url  s     V'(44DEDQ 	=UV$$QVVX$6jnnV<B	= 	b),	= 	=s   8BBN)r   r   r   r   r   r.   r5   parametrizer   r   r   r  r  r  r-  r2  r6  r;  r?  rC  rZ  r^  network
single_cpurl  r0   r+   r)   r   r     s    	D% [[],NOP PP

&%0%&S@))"%"%) /1b [[
	


& [[[[-  -r+   r   c                      e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                   e       d	      e
j                  j                  e d
	      e
j                  j!                  deej&                  g      d                      Zd Ze
j                  j,                  d        Ze
j                  j,                  d        Ze
j                  j,                  e
j                  j!                  ddgg g      d               Zd Zd Zd Zd Ze
j                  j!                  ded gddg      d        Zd Zd Z d Z!d Z"d  Z#d! Z$d" Z%d# Z&d$ Z'd% Z(d& Z)e
j                  j!                  d'd(d)g e
jT                  d*d+ge
j                  j                  e+e,d,-      .       e-jZ                  d/d)d)d(d(       e-jZ                  d/d)d)d)d)      gg      d0        Z.d1 Z/d2 Z0d3 Z1e
j                  j                  e2d4	      d5        Z3d6 Z4y7)8TestParquetPyArrowc                     |}t        j                  ddd      }|j                  d       }||d<   g d|d<   t        ||       y )NrP   r<   Europe/BrusselsrR   tzdatetime_tzTNTbool_with_none)rC   r\   r   r   )r   r1   r|   r]   dtis        r)   
test_basiczTestParquetPyArrow.test_basic  sI     mmJ6GHnnT"=1R r+   c                 n    |}t        j                  ddd      |d<   t        |||ddg   dddgi	       y )
NrP   r<   rs  rt  rv  rl   rq   rB   r   )rC   r\   r   )r   r1   r|   r]   s       r)   test_basic_subset_columnsz,TestParquetPyArrow.test_basic_subset_columns  sI     MM*aDUV=5)*"Xu$56		
r+   c                     |j                  |      }t        |t              sJ t        |      }t	        |      }|j                         }d |j                  d<   t        j                  ||       y )Nr   r   )	r   r   ro   r   r   r  r   r   r   )r   r1   r|   	buf_bytes
buf_streamresr   s          r)   *test_to_bytes_without_path_or_buf_providedz=TestParquetPyArrow.test_to_bytes_without_path_or_buf_provided  sc    &&b&1	)U+++Y'
:&<<>-1)*
c8,r+   c                     t        j                  t        j                  d      j	                  dd      t        d            j                         }| j                  ||t        d       y )N   rI   r<   aaarA   zDuplicate column names found	rC   rD   rZ   r[   reshaperX   r  r   r   r   r1   r]   s      r)   test_duplicate_columnsz)TestParquetPyArrow.test_duplicate_columns  sI    \\"))B-//15tE{KPPR!!"b*6TUr+   c                 t    t        j                  dt        j                  dd      i      }t        ||       y )NrS   1 dayr<   rQ   )rC   rD   timedelta_ranger   r  s      r)   test_timedeltaz!TestParquetPyArrow.test_timedelta  s,    \\3 2 27A FGHR r+   c                 x    t        j                  dg di      }| j                  ||t        j                         y )NrS   rS   r:   ri   )rC   rD   r   r    ArrowExceptionr  s      r)   test_unsupportedz#TestParquetPyArrow.test_unsupported  s/    \\3./ 	**2r73I3IJr+   c                     t        j                  ddt         j                        }t        j                  |dg      }t
        r"| j                  ||t        j                         y t        ||       y )Nr;   
   rM   fp16ra  rB   )
rZ   r[   float16rC   rD   r   r   r    r  r   )r   r1   ra  r]   s       r)   test_unsupported_float16z+TestParquetPyArrow.test_unsupported_float16   sQ     yyBbjj1\\tfX6..r2w7M7MNR$r+   zqPyArrow does not cleanup of partial files dumps when unsupported dtypes are passed to_parquet function in windowsr   zfloat16 works on 15	path_typec                    t        j                  ddt         j                        }t        j                  |dg      }t        j                         5 } ||      }t        j                  t        j                        5  |j                  ||       d d d        t        j                  j                  |      rJ 	 d d d        y # 1 sw Y   4xY w# 1 sw Y   y xY w)Nr;   r  rM   r  r  )r   r*   )rZ   r[   r  rC   rD   r   r   r   r    r  r   osr   isfile)r   r1   r  ra  r]   path_strr   s          r)    test_unsupported_float16_cleanupz3TestParquetPyArrow.test_unsupported_float16_cleanup
  s     yyBbjj1\\tfX6__ 	,(X&D))'*@*@A 4434ww~~d++++		, 	,4 4	, 	,s$   ,C?C)CC	CCc           
         t        j                  t        j                  t        d            t        j                  g dt        j                  g d            t        j                  g dg dd      d	      }t        ||       y )
Nabcdef)re   r=   r=   re   Nre   rd   rM   )rS   rT   r`   rS   r`   rT   )rT   r`   rU   T)
categoriesorderedrS   rT   r`   )rC   rD   CategoricalrX   CategoricalDtyper   r  s      r)   test_categoricalz#TestParquetPyArrow.test_categorical   sf    \\^^DN3^^=--.CD
 ^^2. 
" 	R r+   c                     t        j                  d      } |j                  di |}d|i}t        |||j                   d||       y )Ns3fs
filesystem/pyarrow.parquetr   r   r   r0   )r.   rT  S3FileSystemr   r   )r   rF   s3_public_bucketr1   s3sor  s3kws           r)   test_s3_roundtrip_explicit_fsz0TestParquetPyArrow.test_s3_roundtrip_explicit_fs5  sW    ""6*T&&B$))**:;	
r+   c                 H    d|i}t        ||d|j                   d||       y )Nstorage_optionss3://r  r  r   r   )r   rF   r  r1   r  s        r)   test_s3_roundtripz$TestParquetPyArrow.test_s3_roundtripB  s7     "4()..//?@	
r+   partition_colr?   c                 8   t        j                  d       |j                         }|rL|j                  t        j                  |t        j                              }d}||   j                  |      ||<   t        |||d|j                   dd|i|d |ddd	       y )
Nr  categoryr  z/parquet_dirr  )r   r   r  Tr:   )r   r   r   r   r   r   )
r.   rT  r  ry   dictfromkeysrZ   int32r   r   )r   rF   r  r1   r  r  expected_dfpartition_col_types           r)   test_s3_roundtrip_for_dirz,TestParquetPyArrow.test_s3_roundtrip_for_dirN  s     	F#nn& %,,T]]="((-STK!+)4])C)J)J"*K& 	 )../|<*D1"/##'
 	
r+   c                     t        j                  d       t               }|j                  |       t	        |      }|r&t
        s |j                  j                  d      |_        t        j                  ||       y )Nr    r   )
r.   rT  r   r   r   r   rB   ry   r   r   )r   rF   r   bufferdf_from_bufs        r)   test_read_file_like_obj_supportz2TestParquetPyArrow.test_read_file_like_obj_supportu  s^    I&V$"6*&: ) 1 1 8 8 ?I
i5r+   c                 n   t        j                  d       |j                  dd       |j                  dd       t        j                  t        d      5  t        d       d d d        t        j                  t        d      5  |j                  d       d d d        y # 1 sw Y   ?xY w# 1 sw Y   y xY w)Nr    HOMETestingUserUSERPROFILEz.*TestingUser.*r   z~/file.parquet)r.   rT  setenvr   OSErrorr   r   )r   rF   monkeypatchs      r)   test_expand_userz#TestParquetPyArrow.test_expand_user~  s    I&6=1=-8]]7*<= 	+)*	+]]7*<= 	3  !12	3 	3	+ 	+	3 	3s   BB+B(+B4c                     ddg}|}|j                  ||d        t        ||       t        |      j                  |j                  k(  sJ y )Nru   rq   r   r   r   r   r   shape)r   r   r1   r|   r   r]   s         r)   test_partition_cols_supportedz0TestParquetPyArrow.test_partition_cols_supported  sI     %
h~4Ph7H%++rxx777r+   c                     d}|g}|}|j                  ||d        t        ||       t        |      j                  |j                  k(  sJ y )Nru   r  r  )r   r   r1   r|   r   partition_cols_listr]   s          r)   test_partition_cols_stringz-TestParquetPyArrow.test_partition_cols_string  sO    -.
h~4Ph(;<H%++rxx777r+   c                     | S r$   r0   )xs    r)   <lambda>zTestParquetPyArrow.<lambda>  s    Q r+   rl   zpathlib.Path)idsc                     d}|g}|} ||      }|j                  ||       t        |      j                  |j                  k(  sJ y )Nr@   )r   )r   r   r  )	r   r   r1   rF   r  r   r  r]   r   s	            r)   test_partition_cols_pathlibz.TestParquetPyArrow.test_partition_cols_pathlib  sO     -."
d+>?D!''288333r+   c                 J    t        j                  g g       }t        ||       y )N)r   rB   r   r  s      r)   test_empty_dataframez'TestParquetPyArrow.test_empty_dataframe  s    \\B/R r+   c                     dd l }t        j                  dddgi      } |j                   |j                  d |j
                               g      }|j                  t              }t        ||d|i|       y )Nr   r  r:   )typer   r  )	r    rC   rD   r   fieldbool_ry   ru   r   )r   r1   r    r]   r   out_dfs         r)   test_write_with_schemaz)TestParquetPyArrow.test_write_with_schema  sc    \\3A-(s!I JK4Rx.@6Rr+   c                    t        j                  d       t        j                  t        j                  g dd      t        j                  g dd      t        j                  g dd      d      }|r&t
        r t        |||j                  d	d
i             nt        ||       t        j                  dt        j                  g dd      i      }t        ||       y )Nr    r9   rN  rM   UInt32ra   rl   r  r`   r   r   rS   rE  )r.   rT  rC   rD   r   r   r   ry   )r   r1   r   r]   s       r)    test_additional_extension_arraysz3TestParquetPyArrow.test_additional_extension_arrays  s     	I&\\YYy8YYy9YY/x@
 "6Rbiie.EFR$\\3		/ IJKR r+   c                    t        j                  d       t        j                  dt        j                  g dd      i      }t        j
                  d|      5  |rNt        r|j                  d      }n|j                  d| d	      }|j                  j                  d      |_        n|j                  d| d	      }t        |||
       d d d        y # 1 sw Y   y xY w)Nr    rS   ra   string[pyarrow]rM   string_storager   zstring[]r  )
r.   rT  rC   rD   r   r   r   ry   rB   r   )r   r1   r  r   r]   r   s         r)    test_pyarrow_backed_string_arrayz3TestParquetPyArrow.test_pyarrow_backed_string_array  s    I&\\3		*:BS TUV/@ 		8!'!yy/H!yy7>2B!)DEH#+#3#3#:#:5#A 99w~.>a%@ARh7		8 		8 		8s   A4CC c                 H   t        j                  d       t        j                  t        j                  j                  g d      t        j                  ddd      t        j                  j                  t        j                  ddd            d      }t        ||       y )	Nr    ))r   r:   )r:   r;   )r<   rI   z
2012-01-01r<   D)rR   r	  rI   )r`   rU   rV   )
r.   rT  rC   rD   IntervalIndexr  period_rangefrom_breaksr\   r   r  s      r)   test_additional_extension_typesz2TestParquetPyArrow.test_additional_extension_types  sz     	I&\\%%112JK__\13G%%11MM,D		
 	R r+   c                     d}t        j                  dt        j                  ddd      i      }t        ||d|i       y )	Nz2.6rS   z
2017-01-011nsr  r	  rR   versionr   )rC   rD   r\   r   )r   r1   verr]   s       r)   test_timestamp_nanosecondsz-TestParquetPyArrow.test_timestamp_nanoseconds  s;     \\3lPR STURy#.>?r+   c                 h   t        j                  dd       d|gz  }t        j                  |d|i      }|d d  }t        r |j
                  j                  d      |_        |j                  t        j                  j                  k7  r	 dd l}|j
                  j                  j                  |      }|j                  |j                         dz        }|j
                  j!                  |      |_        |d   j"                  j!                  |      |d<   t'        ||d	|
       y # t$        $ r Y w xY w)Nr    11.0.0   index_as_colr   ra  nsr   <   F)r   r   )r.   rT  rC   rD   r	   r   as_unittzinforv   timezoneutcpytzru  	utcoffsetFixedOffsettotal_seconds
tz_convertdtr   r   )	r   r1   r~   idxr]   r   r   offsetru  s	            r)   test_timezone_aware_indexz,TestParquetPyArrow.test_timezone_aware_index  s   Ix0+,,\\>3*?@ a5%^^33D9HN#**h.?.?.C.CCV ../GH%%f&:&:&<r&AB!)!:!:2!>+3N+C+F+F+Q+QRT+U(RUXF  s   	D% %	D10D1c                 6   t        j                  d       t        j                  dt	        t        d            i      }t        j                         5 }|j                  ||       t        ||dg      }d d d        t              dk(  sJ y # 1 sw Y   xY w)Nr    rS   r<   r   rS   r   r   r   r:   )r.   rT  rC   rD   rX   rY   r   r   r   r   r  )r   r1   r]   r   r   s        r)   test_filter_row_groupsz)TestParquetPyArrow.test_filter_row_groups  s    I&\\3U1X/0__ 	F$MM$rM*!$^4DEF	F 6{a	F 	Fs   #BBc                    t        j                  t        j                  j	                  d      j                  d      g d      }t        j                         5 }|j                  ||       t        ||      }d d d        |r;t        j                  t         j                  j                  j                        sJ y t        j                  t         j                  j                  j                        sJ y # 1 sw Y   xY w)Nr;   )r  r<   )r?   r@   CrA   r   )rC   rD   rZ   r  r  r  r   r   r   r   r   _mgrcore	internalsArrayManagerBlockManager)r   r1   using_array_managerr]   r   r   s         r)   test_read_parquet_managerz,TestParquetPyArrow.test_read_parquet_manager  s    \\II!!!$44W=
 __ 	,$MM$rM*!$+F	, fkk277+<+<+I+IJJJfkk277+<+<+I+IJJJ	, 	,s    C::Dc                    dd l }|}t        j                  ddd      }|j                  d       }||d<   g d|d<   |j                  j                  |      }|j                  t        j                  	      }t        rj|d
   j                  d      |d
<   |d   j                  d      |d<   |d   j                  t        j                   |j                  dd                  |d<   t        ||ddi|       y )Nr   rP   r<   rs  rt  rv  rw  rx  )types_mapperrv   ztimestamp[us][pyarrow]rw   us)unitru  rM  r    r*   r   r   )r    rC   r\   r   Tablefrom_pandas	to_pandas
ArrowDtyper
   ry   	timestampr   )r   r1   r|   r    r]   ry  pa_tabler   s           r)   &test_read_dtype_backend_pyarrow_configz9TestParquetPyArrow.test_read_dtype_backend_pyarrow_config%  s     mmJ6GHnnT"=1==,,R0%%2==%A#+J#7#>#>?W#XHZ ,45H,I,P,P(-H() '/}&=&D&D/g//T>OPQ'H]# 	()4		
r+   c                 6   t        j                  dddgit        j                  ddgd      d	      }|j                         }d
d l}t        |j                        t        d      kD  r |j                  j                  d      |_        t        ||ddi|       y )NrS   r:   r;   r<   rI   testr   zint64[pyarrow])r   rN   r   r  rM  r    r  )
rC   rD   rE   r  r    r   r   r   ry   r   )r   r1   r]   r   r    s        r)   ,test_read_dtype_backend_pyarrow_config_indexz?TestParquetPyArrow.test_read_dtype_backend_pyarrow_config_indexC  s    \\1a&M1a&v!>FV
 7797&&''(*;;%^^223CDHN()4		
r+   rB   r   r:   rb   rc   z*https://github.com/apache/arrow/pull/44171)r   r   r     c           	          t        j                  t        d      t        t        dd            d      }||_        t        ||       y )NrH   r:   rI   r   r   )r   r1   rB   r]   s       r)   test_columns_dtypes_not_invalidz2TestParquetPyArrow.test_columns_dtypes_not_invalidS  s7    & \\T%[eAqk9JKL
R r+   c                 v    t        j                  t        j                  g dd            }t        ||       y )Nr  custom namer$  r#  rC   rD   rE   r   r  s      r)   test_empty_columnsz%TestParquetPyArrow.test_empty_columnsk  s%    \\} MNR r+   c                     |dz  }t        j                  ddgi      }ddi|_        |j                  ||       t	        ||      }|j                  |j                  k(  sJ y )Nztest_df_metadata.pr:   ra  test_attributer   )rC   rD   attrsr   r   )r   r   r1   r   r]   new_dfs         r)   test_df_attrs_persistencez,TestParquetPyArrow.test_df_attrs_persistencep  s_    ..\\A3x($a(
d2&d2.||rxx'''r+   c           	         |dz  }t        j                  dddgiddg      }|j                  ||       t        j                  dd	      5  t	        ||      }d d d        t        j
                  t        j                  
      }t        j                  dddgi|t        j                  ddg|      t        j                  dgt        r|st        n|            }t        j                  |       y # 1 sw Y   xY w)Nztest_string_inference.prS   r  yrT   )ra  r   r   future.infer_stringTna_valuerM   )ra  rN   r   rB   )rC   rD   r   r   r   StringDtyperZ   rx   rE   r   r[  r   r   )	r   r   r1   r   r   r]   r   rN   r   s	            r)   test_string_inferencez(TestParquetPyArrow.test_string_inferencex  s    33\\c3Z0c
C
d2&4d; 	3!$r2F	3/<<Sz"((C:U3HH'0B 		

 	fh/	3 	3s   C55C>znot supported before 11.0c           	         dd l }|dz  }t        j                  dt        d      gid      }|j	                  ||j                  d|j                  d      fg             t        |      }t        rt        j                  dd	gid
      }n#t        j                  dt        d      gid      }t        j                  ||       y )Nr   z	decimal.prS   z123.00r  rM   r  )r   123zstring[python]r[  )r    rC   rD   r   r   r   
decimal128r   r   r   r   )r   r   r1   r   r]   r   r   s          r)   test_roundtrip_decimalz)TestParquetPyArrow.test_roundtrip_decimal  s     	+%\\3!2 34<MN
d299sBMM!4D.E-F#GHd#||S5'N:JKH||S78+<*=$>hOH
fh/r+   c           
      0   dd l }dd lm} |dz  }|j                  d|j	                  g d|j                               i      }|j                  ||       t        j                  dd      5  t        |      }d d d        t        j                  dg dit        j                  t        j                        t        j                  dgt        j                  t        j                              	      }t        j                   |       y # 1 sw Y   xY w)
Nr   zlarge_string.prS   )NrT   r`   r5  Tr6  rM   )ra  rN   rB   )r    pyarrow.parquetrb  rU  r   large_stringrV  rC   r   r   rD   r8  rZ   rx   rE   r   r   )r   r   r1   rW  r   rU  r   r   s           r)   #test_infer_string_large_string_typez6TestParquetPyArrow.test_infer_string_large_string_type  s    $**#rxx(8"//:KLMN
ud#4d; 	(!$'F	(<<'(.."&&1HHcU".."&&*IJ

 	fh/	( 	(s   +DDN)5r   r   r   rz  r|  r  r  r  r  r  r.   r5   r6   r   skipifr   rm  r   pathlibPathr  r  ro  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r&   r   NotImplementedErrorrv   r(  r,  r2  r9  r	   r=  rA  r0   r+   r)   rq  rq    s   	!

-V
!K% [[?   [[009NO[[[3*=>, ? P,!* [[

 

 [[	
 	
 [[[[E	

 
>6388 [[c;'h-G  	4	4!
S!&8! @GB K
<
  [[FFLL kk''(.G (  "!!$1a3!!!$1a3	
$!%$!!
(0* [[,5PQ0 R00r+   rq  c                   V   e Zd Zd Zd Zd Zd Zd Zd Zd Z	e
j                  j                  d        Zd	 Zd
 Zd Zd Ze
j                  j%                   e       d      d        Zd Zd Zd Zd Zd Zd Zd Zd Ze
j                  j%                   e       d      d        Zy)TestParquetFastParquetc                     |}t        j                  ddd      }|j                  d       }||d<   t        j                  dd      |d<   t	        ||       y )	NrP   r<   z
US/Easternrt  rv  r  rQ   	timedelta)rC   r\   r   r  r   )r   r7   r|   r]   ry  s        r)   rz  z!TestParquetFastParquet.test_basic  sQ    mmJlCnnT"=,,Wa@;R r+   c           	         t        j                  t        d      t        t        dd            d      }t        }d}ddg|_        | j                  ||||       ddg|_        | j                  ||||       t        j                  d	dddd      t        j                  d	dddd      g|_        | j                  ||||       y )
NrH   r:   rI   r   r/  r   rb   rc   r&  )rC   rD   rX   rY   r0  rB   r   rv   )r   r7   r]   errr   s        r)   test_columns_dtypes_invalidz2TestParquetFastParquet.test_columns_dtypes_invalid  s    \\T%[eAqk9JKL, V
!!"b#s3 f%
!!"b#s3 dAq!Q/dAq!Q/

 	!!"b#s3r+   c                     t        j                  t        j                  d      j	                  dd      t        d            j                         }d}| j                  ||t        |       y )Nr  rI   r<   r  rA   z9Cannot create parquet dataset with duplicate column namesr  r   r7   r]   r   s       r)   r  z-TestParquetFastParquet.test_duplicate_columns  sM    \\"))B-//15tE{KPPRI!!"b*c:r+   c                    dd l }t        |j                        t        d      k  rTt        t        j                        t        d      k\  r/|j	                  t
        j                  j                  d             t        j                  dg di      }t        j                  ddt        j                  d	gid
      }t        |||d       y )Nr   	2024.11.0z2.0.0z$fastparquet uses np.float_ in numpy2r   rS   )TNFrH  g        r  rM   F)r   r   )r   r   r   rZ   r4   r.   r5   r6   rC   rD   rx   r   )r   r7   r(   r   r]   r   s         r)   test_bool_with_nonez*TestParquetFastParquet.test_bool_with_none  s    ;**+gk.BBwNNH
WH !!B " 
 \\3 345<<sBFFC&8 9K 	R(Fr+   c                     t        j                  dt        j                  ddd      i      }| j                  ||t        d        t        j                  dg di      }d}| j                  ||t        |       y )NrS   2013Mr<   r  r  z"Can't infer object conversion type)rC   rD   r  r   r   rN  s       r)   r  z'TestParquetFastParquet.test_unsupported  sd    \\3S! LMN!!"b*d; \\3./2!!"b*c:r+   c                     t        j                  dt        j                  t        d            i      }t	        ||       y )NrS   rH   )rC   rD   r  rX   r   )r   r7   r]   s      r)   r  z'TestParquetFastParquet.test_categorical  s,    \\3tE{ ;<=R r+   c                    dt        t        d            i}t        j                  |      }t	        j
                         5 }|j                  ||d d       t        ||dg      }d d d        t              dk(  sJ y # 1 sw Y   xY w)NrS   r<   r:   )r*   r   row_group_offsetsr
  r  )	rX   rY   rC   rD   r   r   r   r   r  )r   r7   rU   r]   r   r   s         r)   r  z-TestParquetFastParquet.test_filter_row_groups  s    $uQx.!\\!___ 	F$MM$rtqMQ!$^4DEF	F 6{a	F 	Fs    %A>>Bc           	      J    t        ||d|j                   dd|id |d       y )Nr  z/fastparquet.parquetr  )r   r  r  r  )r   rF   r  r7   r  s        r)   r  z(TestParquetFastParquet.test_s3_roundtrip	  s7     	)..//CD*D1)-$G	
r+   c                     ddg}|}|j                  |d|d        t        j                  j                  |      sJ dd l} |j
                  t        |      d      j                  }t        |      dk(  sJ y )Nru   rq   r   r*   r   r   r   Fr;   	r   r  r   existsr   ParquetFiler   catsr  r   r   r7   r|   r   r]   r   actual_partition_colss           r)   r  z4TestParquetFastParquet.test_partition_cols_supported  s{     %
 )	 	 	
 ww~~h''' 7 7 7Hu M R R()Q...r+   c                     d}|}|j                  |d|d        t        j                  j                  |      sJ dd l} |j
                  t        |      d      j                  }t        |      dk(  sJ y )Nru   r   rZ  r   Fr:   r[  r_  s           r)   r  z1TestParquetFastParquet.test_partition_cols_string$  sw    
 )	 	 	
 ww~~h''' 7 7 7Hu M R R()Q...r+   c                     ddg}|}|j                  |dd |       t        j                  j                  |      sJ dd l} |j
                  t        |      d      j                  }t        |      dk(  sJ y )Nru   rq   r   )r*   r   partition_onr   Fr;   r[  r_  s           r)   test_partition_on_supportedz2TestParquetFastParquet.test_partition_on_supported4  s{     %
 '	 	 	
 ww~~h''' 7 7 7Hu M R R()Q...r+   c                     ddg}|}d}t        j                  t        |      5  |j                  |dd ||       d d d        y # 1 sw Y   y xY w)Nru   rq   zYCannot use both partition_on and partition_cols. Use partition_cols for partitioning datar   r   )r*   r   rc  r   )r.   r   r   r   )r   r   r7   r|   r   r]   r   s          r)   3test_error_on_using_partition_cols_and_partition_onzJTestParquetFastParquet.test_error_on_using_partition_cols_and_partition_onD  sa     !%  	 ]]:S1 	MM$ +-  	 	 	s   AAzfastparquet writes into Indexr   c                 h    t        j                         }|j                         }t        |||       y )Nr  )rC   rD   r  r   r   r7   r]   r   s       r)   r  z+TestParquetFastParquet.test_empty_dataframeW  s&     \\^779R(3r+   c                    dd l }t        |j                        t        d      kD  rPt        |j                        t        d      k  r/|j                  t        j
                  j                  d             d|gz  }t        j                  |d|i      }|j                         }d	|j                  _        t        |||
       y )Nr   z2022.12rP  zCfastparquet bug, see https://github.com/dask/fastparquet/issues/929r   r  r  r  r   r  )r   r   r   r4   r.   r5   r6   rC   rD   r  r   r   r   )r   r7   r~   r(   r   r  r]   r   s           r)   r  z0TestParquetFastParquet.test_timezone_aware_index^  s    ;**+gi.@@W##F
K F! !!I "  +,,\\>3*?@779%R(3r+   c                    t        j                  dddgi      }t        j                         5 }|j	                  |       t        j                  t        d      5  t        j                  t              5  t        |dd       d d d        d d d        t        j                  t        d      5  t        |dd	
       d d d        d d d        y # 1 sw Y   LxY w# 1 sw Y   PxY w# 1 sw Y   *xY w# 1 sw Y   y xY w)NrS   r:   r;   z!not supported for the fastparquetr   r   T)r*   use_nullable_dtypesr    rL  )rC   rD   r   r   r   r.   r   r   r   r   r   )r   r7   r]   r   s       r)   &test_use_nullable_dtypes_not_supportedz=TestParquetFastParquet.test_use_nullable_dtypes_not_supportedu  s    \\3A-(__ 	R$MM$z1TU W//> W mQUVWW z1TU RT-yQR	R 	RW WW WR R	R 	RsS   -C3C5CC#C3/C'>C3CCC$	 C3'C0	,C33C<c                 d   t        j                  d      5 }t        j                  |      j	                  d       t        j                  t        d      5  t        |d       d d d        t        j                  |      j                  d       d d d        y # 1 sw Y   7xY w# 1 sw Y   y xY w)	Ntest.parquets   breakit r   r   r   F)
missing_ok)
r   r   rC  rD  write_bytesr.   r   	Exceptionr   unlink)r   r   s     r)   $test_close_file_handle_on_read_errorz;TestParquetFastParquet.test_close_file_handle_on_read_error  s    __^, 	8LL**:6y3 9T-89 LL%%%7	8 	89 9	8 	8s$   A B&B$-B&B#	B&&B/c                 X   t        j                  ddgddgd      }t        j                  d      5 }t	        |j                         d      5 }|j                  |       d d d        t        ||      }d d d        t        j                  |       y # 1 sw Y   5xY w# 1 sw Y   ,xY w)Nr   r:   r>   r.  rn  wbr   )	rC   rD   r   r   rf  encoder   r   r   )r   r*   r]   r   rW   r   s         r)   test_bytes_file_namez+TestParquetFastParquet.test_bytes_file_name  s    \\aV1a&9:__^, 	7dkkmT* !aa ! "$v6F		7
 	fb)	! !	7 	7s#   B B B B	B  B)c                 X   t        j                  d       t        j                  ddgddgd      }t	        j
                         5 }t        j                  t        d      5  |j                  |dd	       d d d        d d d        t	        j
                         5 }t        j                  |      j                  d
       t        j                  t        d      5  t        |dd	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr   r   r:   r>   r.  zfilesystem is not implementedr   r=   r*   r  rb   )r.   rT  rC   rD   r   r   r   rE  r   rC  rD  rq  r   r   r]   r   s      r)   test_filesystem_notimplementedz5TestParquetFastParquet.test_filesystem_notimplemented  s   M*\\aV1a&9:__ 	L$#+J L d=UKL	L __ 	K$LL**62#+J K T-EJK	K 	KL L	L 	LK K	K 	KI   D#C<8DA D D+D <D	DDD	D  D)c                 X   t        j                  d       t        j                  ddgddgd      }t	        j
                         5 }t        j                  t        d      5  |j                  |dd	       d d d        d d d        t	        j
                         5 }t        j                  |      j                  d
       t        j                  t        d      5  t        |dd	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nr    r   r:   r>   r.  z1filesystem must be a pyarrow or fsspec FileSystemr   r=   rz  rb   )r.   rT  rC   rD   r   r   r   r   r   rC  rD  rq  r   r{  s      r)   test_invalid_filesystemz.TestParquetFastParquet.test_invalid_filesystem  s   I&\\aV1a&9:__ 	H$"U H d9GH	H __ 	G$LL**62"U G T)FG	G 	GH H	H 	HG G	G 	Gr}  c           	         t        j                  d      }t        j                  ddgddgd      }t	        j
                         5 }t        j                  t        d      5  |j                  |d|j                         d	d
i       d d d        d d d        t	        j
                         5 }t        j                  |      j                  d       t        j                  t        d      5  t        |d|j                         d	d
i       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   *xY w# 1 sw Y   y xY w)Nz
pyarrow.fsr   r:   r>   r.  z8storage_options not supported with a pyarrow FileSystem.r   r    r=   re   )r*   r  r  rb   )r.   rT  rC   rD   r   r   r   rE  r   LocalFileSystemrC  rD  rq  r   )r   pa_fsr]   r   s       r)   .test_unsupported_pa_filesystem_storage_optionszETestParquetFastParquet.test_unsupported_pa_filesystem_storage_options  s*   ##L1\\aV1a&9:__ 
	$#P 	 $$446%*EN	  		
	 __ 	$LL**62#P 	 $$446%*EN				 		 	
	 
		 		 	sI   D*#&D	D*-A E- D6ED'	#D**D36D?	;EEc           	      L   d}t        j                  dt        t        dd            i      }t	        j
                  d      5 }|j                  |       t        j                  t        |      5  t        |d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)	NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.rq   r:   rI   ztmp.parquetr   numpy)rM  )rC   rD   rX   rY   r   r   r   r.   r   r   r   )r   r*   r   r]   r   s        r)   test_invalid_dtype_backendz1TestParquetFastParquet.test_invalid_dtype_backend  s    % 	 \\5$uQ{"345__]+ 	:tMM$z5 :T9:	: 	:: :	: 	:s$   -B/B=BB	BB#c                     t        j                  t        j                  g dd            }t        j                  t        j                  g dd            }t        |||       y )Nr  r*  r$  r#  r  r+  rh  s       r)   r,  z)TestParquetFastParquet.test_empty_columns  sB     \\} MN<<bhh]&STR(3r+   N)r   r   r   rz  rL  r  rQ  r  r  r  r.   r5   ro  r  r  r  rd  rf  rB  r   r  r  rl  rt  rx  r|  r  r  r  r,  r0   r+   r)   rG  rG    s    !4*;G"	;!  [[
 
/ / / & [[+-6UV4 W44.	R8*K G 8	: [[+-6UV4 W4r+   rG  )	NNNNNTFTr;   )M__doc__rv   decimalr   r`  r   r  rC  r  rZ   r.   pandas._configr   r   pandas._config.configr   pandas.compatr   pandas.compat.pyarrowr	   r
   r   r   r   pandasrC   pandas._testing_testingr   pandas.util.versionr   pandas.io.parquetr   r   r   r   r   r    r-   r   r   r3   r5   filterwarnings
pytestmarkfixturer&   rB  r6   r*   r1   r7   rF   r^   r|   nowr  r  minmaxstrptimer~   r   r   r   r   r   r   r   r   r   r   r   r   r   rq  rG  r0   r+   r)   <module>r     su       	    . -    ' M KKST
KKG
 "")) P"#6tDOQ # 
 !!&(;  " 	
 	++$$!!*D % 	
!232   	 	 T T  "  . h//334h//334h//334""#=?TU""#=?TU""#=?TU""#=?TU

 	?D9 2$$$F((#V6
6("? ?p- p-f	c0 c0db4T b4e$  M  s$   $L +L LLL)(L)