o
    �¨Êh'Ä  ã                   @   sÚ  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 ddlmZ ddlmZ ddl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! zddl"Z"dZ#W n e$yo   dZ#Y nw zddl%Z%dZ&W n e$yƒ   dZ&Y nw e
j' (d¡e
j' (d¡gZ)e
j*e
j+de
j'j,e& p¢eddd�dkdd�d�e
j+de
j'j,e# dd�d�gd�dd„ ƒZ-e
j*dd„ ƒZ.e
j*dd„ ƒZ/e
j*dd „ ƒZ0e
j*d!d"„ ƒZ1e
j*d#d$„ ƒZ2e
j*ej 3ej4j5¡ej 3ej4j6¡ej 3ej4j7¡ej 8d%d&¡ej 8d'd&¡ej 8d(d&¡ej 8d)d&¡gd�d*d+„ ƒZ9									,dKd-d.„Z:d/d0„ Z;d1d2„ Z<d3d4„ Z=d5d6„ Z>d7d8„ Z?d9d:„ Z@d;d<„ ZAd=d>„ ZBd?d@„ ZCdAdB„ ZDG dCdD„ dDƒZEG dEdF„ dFeEƒZFG dGdH„ dHeEƒZGG dIdJ„ dJeEƒZHdS )Lz test parquet compat é    N)ÚDecimal)ÚBytesIO)Úusing_copy_on_write)Ú_get_option)Úis_platform_windows)Úpa_version_under11p0Úpa_version_under13p0Úpa_version_under15p0)Ú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)ÚmarksÚpyarrowúpyarrow is not installed)Úparamsc                 C   ó   | j S ©N©Úparam©Úrequest© r!   úN/var/www/html/env/lib/python3.10/site-packages/pandas/tests/io/test_parquet.pyÚengine;   s   r#   c                   C   s   t st d¡ dS )Nr   r   )Ú_HAVE_PYARROWÚpytestÚskipr!   r!   r!   r"   ÚpaQ   s   
r'   c                   C   s0   t s	t d¡ dS tddd�dkrt d¡ dS )Nzfastparquet is not installedr   Tr   r   z.ArrayManager is not supported with fastparquetr   )Ú_HAVE_FASTPARQUETr%   r&   r   r!   r!   r!   r"   ÚfpX   s   
þ
r)   c                   C   s   t  g d¢ddœ¡S )N©é   é   é   Úfoo©ÚAÚB)ÚpdÚ	DataFramer!   r!   r!   r"   Ú	df_compata   s   r4   c               
   C   sB   t  tdƒttddƒƒtjdddd�g d¢t jd	d
d�dœ¡} | S )NÚabcr+   é   ç      @ç      @Úfloat64©Údtype©TFTÚ20130101r-   ©Úperiods)ÚaÚbÚdÚeÚf)r2   r3   ÚlistÚrangeÚnpÚarangeÚ
date_range)Údfr!   r!   r"   Údf_cross_compatf   s   úÿrK   c                   C   sŠ   t  tdƒdtjdgg d¢g d¢g d¢ttddƒƒt d	d
¡ d¡tjdddd�dtjdgg d¢t jdd	d�t  	d¡t j
t  	d¡gdœ¡S )Nr5   r@   Úc©r@   NrL   )ó   fooó   bars   baz©r.   ÚbarÚbazr+   r6   r-   é   Úu1r7   r8   r9   r:   ç       @ç      @r<   r=   r>   Ú20130103)ÚstringÚstring_with_nanÚstring_with_noneÚbytesÚunicodeÚintÚuintÚfloatÚfloat_with_nanÚboolÚdatetimeÚdatetime_with_nat)r2   r3   rE   rG   ÚnanrF   rH   ÚastyperI   Ú	TimestampÚNaTr!   r!   r!   r"   Údf_fullx   s$   

ýôÿrh   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                 C   r   r   r   r   r!   r!   r"   Útimezone_aware_date_list�   s   ri   r,   c
                    s˜   ˆpddi‰ˆp	i ‰ˆdu rˆ‰|r|ˆd< |ˆd< ‡ ‡‡‡‡‡‡‡fdd„}
ˆdu rFt  ¡ �‰|
|	ƒ W d  ƒ dS 1 s?w   Y  dS |
|	ƒ dS )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                    sZ   t | ƒD ]&}ˆjˆfi ˆ¤Ž tˆfi ˆ¤Ž}dˆv r d ˆjd< tjˆ|ˆˆˆ d� qd S )NrY   ©r+   rY   )Úcheck_namesÚ
check_likeÚcheck_dtype)rF   r   r   ÚlocÚtmÚassert_frame_equal)ÚrepeatÚ_Úactual©rn   rm   rl   rJ   ÚexpectedÚpathÚread_kwargsÚwrite_kwargsr!   r"   ÚcompareË   s   
ûúz!check_round_trip.<locals>.compare)rp   Úensure_clean)rJ   r#   rw   ry   rx   rv   rl   rm   rn   rr   rz   r!   ru   r"   Úcheck_round_tripŸ   s   "

"ÿr|   c                 C   s0   ddl m} |j| dd�}|jjj|ksJ ‚dS )zÂCheck 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)rw   rv   Údsr€   r!   r!   r"   Úcheck_partition_namesá   s   
r„   c                 C   sD   d}t jt|d�� t| ddƒ W d   ƒ d S 1 sw   Y  d S )Nz.engine must be one of 'pyarrow', 'fastparquet'©Úmatchr.   rQ   )r%   ÚraisesÚ
ValueErrorr|   )r4   Úmsgr!   r!   r"   Útest_invalid_engineñ   s   "ÿrŠ   c                 C   ó:   t  dd¡� t| ƒ W d   ƒ d S 1 sw   Y  d S )Núio.parquet.enginer   ©r2   Úoption_contextr|   )r4   r'   r!   r!   r"   Útest_options_py÷   ó   
"ÿr�   c                 C   r‹   )NrŒ   r   r�   )r4   r)   r!   r!   r"   Útest_options_fpþ   r�   r‘   c                 C   r‹   )NrŒ   Úautor�   )r4   r)   r'   r!   r!   r"   Útest_options_auto  r�   r“   c                 C   sP  t tdƒtƒs	J ‚t tdƒtƒsJ ‚t dd¡�# t tdƒtƒs"J ‚t tdƒtƒs+J ‚t tdƒtƒs4J ‚W d   ƒ n1 s>w   Y  t dd¡�# t tdƒtƒsSJ ‚t tdƒtƒs\J ‚t tdƒtƒseJ ‚W d   ƒ n1 sow   Y  t dd¡�$ t tdƒtƒs„J ‚t tdƒtƒs�J ‚t tdƒtƒs–J ‚W d   ƒ d S 1 s¡w   Y  d S )Nr   r   rŒ   r’   )Ú
isinstancer   r   r   r2   rŽ   )r)   r'   r!   r!   r"   Útest_options_get_engine  s"   ýý"ýr•   c                  C   s†  ddl m}  |  d¡}|  d¡}tsdnttjƒt|ƒk }ts!dnttjƒt|ƒk }to.| }to3| }|s¿|sÁ|r\d|› d�}t	j
t|d�� td	ƒ W d   ƒ n1 sVw   Y  nd
}t	j
t|d�� td	ƒ W d   ƒ n1 stw   Y  |rŸd|› d�}t	j
t|d�� td	ƒ W d   ƒ d S 1 s˜w   Y  d S d}t	j
t|d�� td	ƒ W d   ƒ d S 1 s¸w   Y  d S d S d S )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__r(   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†   r!   r!   r"   Ú"test_get_engine_auto_error_message   sD   

ÿýÿý


ÿ€
ÿ
"ÿ
"ÿïr¡   c                 C   s€   | }t  ¡ �0}|j||d d� t||d�}t  ||¡ t||ddgd�}t  ||ddg ¡ W d   ƒ d S 1 s9w   Y  d S ©N)r#   rj   ©r#   r@   rB   )r#   Úcolumns©rp   r{   r   r   rq   ©rK   r'   r)   rJ   rw   Úresultr!   r!   r"   Útest_cross_engine_pa_fpK  s   
"ùr¨   c                 C   s€   | }t  ¡ �0}|j||d d� t||d�}t  ||¡ t||ddgd�}t  ||ddg ¡ W d   ƒ d S 1 s9w   Y  d S r¢   r¥   r¦   r!   r!   r"   Útest_cross_engine_fp_paY  s   
"ùr©   c              	   C   s’   t  dg d¢i¡}d}t ¡ �0}tjt|ddd�� | || ¡ W d   ƒ n1 s*w   Y  W d   ƒ d S W d   ƒ d S 1 sBw   Y  d S )Nr@   r*   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)r2   r3   rp   r{   Úassert_produces_warningÚFutureWarningr   )r#   rJ   r‰   rw   r!   r!   r"   Ú!test_parquet_pos_args_deprecationf  s   ÿ
üúÿ"ÿr®   c                   @   s4   e Zd Zdd„ Zdd„ Zejjejjdd„ ƒƒZ	dS )ÚBasec              	   C   s|   t  ¡ �0}tj||d�� t|||d d� W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s7w   Y  d S )Nr…   ©rj   )rp   r{   r%   r‡   r   )ÚselfrJ   r#   ÚexcÚerr_msgrw   r!   r!   r"   Úcheck_error_on_writex  s   
ÿÿ"ÿzBase.check_error_on_writec              	   C   sx   t  ¡ �.}t  |¡� t|||d d� W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s5w   Y  d S )Nr°   )rp   r{   Úexternal_error_raisedr   )r±   rJ   r#   r²   rw   r!   r!   r"   Úcheck_external_error_on_write~  s   
ÿÿ"ÿz"Base.check_external_error_on_writec                 C   sr   |dkr	t  |¡ t|ddddƒdd��}|j| ¡ d� t|jƒ}W d   ƒ n1 s,w   Y  t ||¡ d S )	Nr’   ÚioÚdataÚparquetzsimple.parquetÚrb)Úmode)Úcontent)	r%   ÚimportorskipÚopenÚserve_contentÚreadr   Úurlrp   rq   )r±   Ú
httpserverÚdatapathr4   r#   rD   rJ   r!   r!   r"   Útest_parquet_read_from_url„  s   
þzBase.test_parquet_read_from_urlN)
Ú__name__Ú
__module__Ú__qualname__r´   r¶   r%   ÚmarkÚnetworkÚ
single_cpurÄ   r!   r!   r!   r"   r¯   w  s    r¯   c                   @   s°   e Zd Zdd„ Zdd„ Zej dg d¢¡dd„ ƒZd	d
„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zej d!g d"¢¡d#d$„ ƒZd%S )&Ú	TestBasicc                 C   sF   t  g d¢¡ddt  d¡t g d¢¡fD ]}d}|  ||t|¡ qd S )Nr*   r+   r.   r=   z+to_parquet only supports IO with DataFrames)r2   ÚSeriesrf   rG   r   r´   rˆ   )r±   r#   Úobjr‰   r!   r!   r"   Ú
test_error�  s   ûøzTestBasic.test_errorc                 C   s6   t  tdƒttddƒƒdœ¡}ddg|_t||ƒ d S )Nr5   r+   r6   ©rX   r]   r.   rQ   )r2   r3   rE   rF   r¤   r|   )r±   r#   rJ   r!   r!   r"   Útest_columns_dtypes›  s   
zTestBasic.test_columns_dtypesrj   )NÚgzipÚsnappyÚbrotlic                 C   s(   t  dg d¢i¡}t||d|id� d S )Nr0   r*   rj   ©ry   ©r2   r3   r|   )r±   r#   rj   rJ   r!   r!   r"   Útest_compression¢  s   zTestBasic.test_compressionc                 C   sJ   t  tdƒttddƒƒdœ¡}t  dtdƒi¡}t|||ddgid� d S )Nr5   r+   r6   rÏ   rX   r¤   ©rv   rx   ©r2   r3   rE   rF   r|   )r±   r#   rJ   rv   r!   r!   r"   Útest_read_columns§  s
   
ÿzTestBasic.test_read_columnsc              	   C   sX   t  ttdƒƒtdƒdœ¡}t  dddgi¡}t||||ddgid	gdgd
œdd� d S )Nr6   Úaabb)r]   Úpartr]   r   r+   Úpartition_colsrÛ   )rÛ   ú==r@   )Úfiltersr¤   )rw   rv   ry   rx   rr   rØ   )r±   r#   Útmp_pathrJ   rv   r!   r!   r"   Útest_read_filters°  s   
þÿ
ùzTestBasic.test_read_filtersc                 C   sž   |dk}t  dg d¢i¡}t||ƒ g d¢t jddd�tdƒg d	¢g}|D ]}||_t|t jƒr7|j d ¡|_t|||d
� q%g d¢|_d|j_	t||ƒ d S )Nr   r0   r*   )r,   r-   r6   r=   r-   r>   r5   )r+   r-   r6   )rl   )r   r+   r,   r.   )
r2   r3   r|   rI   rE   Úindexr”   ÚDatetimeIndexÚ
_with_freqÚname)r±   r#   rl   rJ   Úindexesrá   r!   r!   r"   Útest_write_indexÃ  s    
ü
zTestBasic.test_write_indexc                 C   s:   |}t  dg d¢i¡}t j g d¢¡}||_t||ƒ d S )Nr0   r*   ©)r@   r+   )r@   r,   )rA   r+   )r2   r3   Ú
MultiIndexÚfrom_tuplesrá   r|   )r±   r'   r#   rJ   rá   r!   r!   r"   Útest_write_multiindexÛ  s
   zTestBasic.test_write_multiindexc                 C   sª   |}t jdddd�}t jtj d¡ dt|ƒ df¡tdƒd�}t j	j
d	d
g|gddgd�}|jd d�}||fD ]}||_t||ƒ t||dddgi|ddg d� q8d S )Nz01-Jan-2018z01-Dec-2018ÚMS)Úfreqr,   r-   ÚABC©r¤   ÚLevel1ÚLevel2ÚlevelÚdate)r‚   r¤   r0   r1   ©rx   rv   )r2   rI   r3   rG   ÚrandomÚdefault_rngÚstandard_normalÚlenrE   rè   Úfrom_productÚcopyrá   r|   )r±   r'   r#   ÚdatesrJ   Úindex1Úindex2rá   r!   r!   r"   Útest_multiindex_with_columnsä  s"   þÿ
ÿüz&TestBasic.test_multiindex_with_columnsc                 C   sÈ   t  g d¢g d¢dœ¡}d ddœ}|jdd�}t||||d� t jg d¢g d¢dœg d	¢d
�}t||||d� g d¢g d¢g}t jttdƒƒdd„ tdƒD ƒdœ|d
�}|jdd�}t||||d� d S )Nr*   )ÚqÚrÚs)r@   rA   F)rj   rá   T)Údrop©ry   rv   )ÚzyxÚwvuÚtsr©rá   ©rQ   rQ   rR   rR   r.   r.   Úquxr  ©ÚoneÚtwor
  r  r
  r  r
  r  é   c                 S   s   g | ]}| ‘qS r!   r!   )Ú.0Úir!   r!   r"   Ú
<listcomp>  s    z7TestBasic.test_write_ignoring_index.<locals>.<listcomp>)r
  r  )r2   r3   Úreset_indexr|   rE   rF   )r±   r#   rJ   ry   rv   Úarraysr!   r!   r"   Útest_write_ignoring_index÷  s    
ÿþ ÿz#TestBasic.test_write_ignoring_indexc                 C   sb   t j g d¢¡}t jtj d¡ d¡|d�}|dkr$|  ||t	d¡ d S |dkr/t
||ƒ d S d S )Nrç   r,   )r6   r-   rî   r   úColumn name must be a stringr   )r2   rè   ré   r3   rG   rô   rõ   rö   r´   Ú	TypeErrorr|   )r±   r#   Ú
mi_columnsrJ   r!   r!   r"   Útest_write_column_multiindex  s   ÿÿÿz&TestBasic.test_write_column_multiindexc                 C   sn   g d¢g d¢g}t jtj d¡ d¡|d�}ddg|j_|dkr*|  ||t	d	¡ d S |d
kr5t
||ƒ d S d S )Nr  )r+   r,   r+   r,   r+   r,   r+   r,   r,   ©r  r  rî   rï   rð   r   zColumn namer   )r2   r3   rG   rô   rõ   rö   r¤   r‚   r´   rˆ   r|   ©r±   r#   r  rJ   r!   r!   r"   Ú&test_write_column_multiindex_nonstring%  s   þÿÿz0TestBasic.test_write_column_multiindex_nonstringc                 C   sJ   |}g d¢g d¢g}t jtj d¡ d¡|d�}ddg|j_t||ƒ d S )Nr  r	  r,   r  rî   Ú	ColLevel1Ú	ColLevel2)	r2   r3   rG   rô   rõ   rö   r¤   r‚   r|   ©r±   r'   r#   r  rJ   r!   r!   r"   Ú#test_write_column_multiindex_string6  s   þÿz-TestBasic.test_write_column_multiindex_stringc                 C   s>   |}g d¢}t jtj d¡ d¡|d�}d|j_t||ƒ d S )N)rQ   rR   r.   r  r,   ©r  r6   rî   Ú	StringCol)	r2   r3   rG   rô   rõ   rö   r¤   rä   r|   r  r!   r!   r"   Útest_write_column_index_stringG  s   ÿz(TestBasic.test_write_column_index_stringc                 C   sV   g d¢}t jtj d¡ d¡|d�}d|j_|dkr$|  ||t	d¡ d S t
||ƒ d S )N©r+   r,   r-   r6   r,   r  rî   ÚNonStringColr   r  )r2   r3   rG   rô   rõ   rö   r¤   rä   r´   r  r|   r  r!   r!   r"   Ú!test_write_column_index_nonstringU  s   ÿÿz+TestBasic.test_write_column_index_nonstringc           
      C   sª  t  d¡}|dkrt jjdd�}| |¡ t t g d¢d¡t g d¢d¡t g d¢¡t g d	¢¡t g d
¢d¡t g d¢d¡t g d¢d¡dœ¡}t 	¡ �}| 
||¡ t||d�}t||dd�}W d   ƒ n1 slw   Y  |d jt d¡ks}J ‚t tjg d¢dd�tjg d¢dd�tjg d¢dd�tjg d	¢dd�tjg d
¢dd�tjg d¢dd�tjg d¢dd�dœ¡}	|dkrÍ|jddd�}|	jddd�}	t ||	¡ d S )Nzpyarrow.parquetr   z.Fastparquet nullable dtype support is disabledr   ©r+   r,   r-   NÚint64Úuint8)r@   rA   rL   N)TFTNr!  )ç      ð?rU   rV   NÚfloat32r9   )r@   rA   rL   rB   rC   rD   Úgr£   Únumpy_nullable©r#   Údtype_backendr@   ÚInt64r:   ÚUInt8rX   ÚbooleanÚFloat32ÚFloat64rL   r+   )Úaxis)r%   r½   rÈ   ÚxfailÚapplymarkerr   Útabler   rp   r{   Úwrite_tabler   r;   rG   r2   r3   r  rq   )
r±   r#   r    ÚpqrÈ   r5  rw   Úresult1Úresult2rv   r!   r!   r"   Útest_dtype_backende  sH   
ÿ
÷ÿ
üùÿzTestBasic.test_dtype_backendr;   )	r-  r.  r/  Úobjectzdatetime64[ns, UTC]r_   z	period[D]r1  rX   c                 C   sT   t  dt jg |d�i¡}d }|dkrt  dt jg dd�i¡}t||ddi|d� d S )NÚvaluer:   r_   r1  r,  r*  ró   )r2   r3   r   r|   )r±   r'   r;   rJ   rv   r!   r!   r"   Útest_read_empty_array–  s   ÿÿÿÿ
ÿzTestBasic.test_read_empty_arrayN)rÅ   rÆ   rÇ   rÎ   rÐ   r%   rÈ   ÚparametrizerÖ   rÙ   rà   ræ   rê   rý   r  r  r  r  r   r#  r:  r=  r!   r!   r!   r"   rË   �  s,    
		 1þrË   c                   @   s®  e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	e
jjeƒ dd�e
jje dd�e
j deejg¡dd„ ƒƒƒZdd„ Ze
jjdd„ ƒZe
jjdd„ ƒZe
jje
j ddgg g¡dd„ ƒƒZdd „ Zd!d"„ Zd#d$„ Zd%d&„ Ze
jjded'd(„ gd)d*gd+�d,d-„ ƒZd.d/„ Zd0d1„ Z d2d3„ Z!d4d5„ Z"d6d7„ Z#d8d9„ Z$d:d;„ Z%d<d=„ Z&d>d?„ Z'd@dA„ Z(dBdC„ Z)dDdE„ Z*dFdG„ Z+dHdI„ Z,dJdK„ Z-e
jje.dLd�dMdN„ ƒZ/dOdP„ Z0dQS )RÚTestParquetPyArrowc                 C   s@   |}t jdddd�}| d ¡}||d< g d¢|d< t||ƒ d S )Nr=   r-   úEurope/Brussels©r?   ÚtzÚdatetime_tz©TNTÚbool_with_none)r2   rI   rã   r|   )r±   r'   rh   rJ   Údtir!   r!   r"   Ú
test_basic¹  s   
zTestParquetPyArrow.test_basicc                 C   s<   |}t jdddd�|d< t|||ddg dddgid	� d S )
Nr=   r-   r@  rA  rC  rX   r]   r¤   r×   )r2   rI   r|   )r±   r'   rh   rJ   r!   r!   r"   Útest_basic_subset_columnsÄ  s   


üz,TestParquetPyArrow.test_basic_subset_columnsc                 C   sL   |j |d�}t|tƒsJ ‚t|ƒ}t|ƒ}| ¡ }d |jd< t ||¡ d S )Nr£   rk   )	r   r”   r[   r   r   rù   ro   rp   rq   )r±   r'   rh   Ú	buf_bytesÚ
buf_streamÚresrv   r!   r!   r"   Ú*test_to_bytes_without_path_or_buf_providedÒ  s   
z=TestParquetPyArrow.test_to_bytes_without_path_or_buf_providedc                 C   s8   t jt d¡ dd¡tdƒd� ¡ }|  ||td¡ d S )Né   r6   r-   Úaaarî   zDuplicate column names found©	r2   r3   rG   rH   ÚreshaperE   rù   r´   rˆ   ©r±   r'   rJ   r!   r!   r"   Útest_duplicate_columnsÞ  s   $z)TestParquetPyArrow.test_duplicate_columnsc                 C   s&   t  dt jddd�i¡}t||ƒ d S )Nr@   ú1 dayr-   r>   )r2   r3   Útimedelta_ranger|   rQ  r!   r!   r"   Útest_timedeltaã  ó   z!TestParquetPyArrow.test_timedeltac                 C   s&   t  dg d¢i¡}|  ||tj¡ d S )Nr@   ©r@   r+   rU   )r2   r3   r¶   r   ÚArrowExceptionrQ  r!   r!   r"   Útest_unsupportedç  s   z#TestParquetPyArrow.test_unsupportedc                 C   sH   t jddt jd�}tj|dgd�}tr|  ||tj¡ d S t	||ƒ d S )Nr,   é
   r:   Úfp16©r¸   r¤   )
rG   rH   Úfloat16r2   r3   r	   r¶   r   rX  r|   )r±   r'   r¸   rJ   r!   r!   r"   Útest_unsupported_float16î  s
   z+TestParquetPyArrow.test_unsupported_float16zqPyArrow does not cleanup of partial files dumps when unsupported dtypes are passed to_parquet function in windowsr   zfloat16 works on 15Ú	path_typec              	   C   s¢   t jddt jd�}tj|dgd�}t ¡ �2}||ƒ}t tj	¡� |j
||d� W d   ƒ n1 s2w   Y  tj |¡r?J ‚W d   ƒ d S 1 sJw   Y  d S )Nr,   rZ  r:   r[  r\  )rw   r#   )rG   rH   r]  r2   r3   rp   r{   rµ   r   rX  r   Úosrw   Úisfile)r±   r'   r_  r¸   rJ   Úpath_strrw   r!   r!   r"   Ú test_unsupported_float16_cleanupø  s   
ÿ"üz3TestParquetPyArrow.test_unsupported_float16_cleanupc                 C   sd   t  ¡ }t  tdƒ¡|d< t jg d¢t  g d¢¡d�|d< t jg d¢g d¢d	d
�|d< t||ƒ d S )NÚabcdefr@   )rQ   r.   r.   rQ   NrQ   rP   r:   rA   )r@   rA   rL   r@   rL   rA   )rA   rL   rB   T)Ú
categoriesÚorderedrL   )r2   r3   ÚCategoricalrE   ÚCategoricalDtyper|   rQ  r!   r!   r"   Útest_categorical  s   
þ
ÿz#TestParquetPyArrow.test_categoricalc                 C   s@   t  d¡}|jdi |¤Ž}d|i}t|||j› d�||d� d S )NÚs3fsÚ
filesystemú/pyarrow.parquet©rw   rx   ry   r!   )r%   r½   ÚS3FileSystemr|   rä   )r±   r4   Ús3_public_bucketr'   Ús3sorj  Ús3Úkwr!   r!   r"   Útest_s3_roundtrip_explicit_fs   s   


ûz0TestParquetPyArrow.test_s3_roundtrip_explicit_fsc                 C   s(   d|i}t ||d|j› d�||d� d S )NÚstorage_optionsús3://rl  rm  ©r|   rä   )r±   r4   ro  r'   rp  r!   r!   r"   Útest_s3_roundtrip-  s   
ûz$TestParquetPyArrow.test_s3_roundtripÚpartition_colr0   c              
   C   sr   t  d¡ | ¡ }|r | t |tj¡¡}d}||  |¡||< t|||d|j	› d�d|i|d |dœddd	� d S )
Nrj  Úcategoryru  z/parquet_dirrt  )rÜ   rj   rt  Tr+   )rv   rw   rx   ry   rm   rr   )
r%   r½   rù   re   ÚdictÚfromkeysrG   Úint32r|   rä   )r±   r4   ro  r'   rx  rp  Úexpected_dfÚpartition_col_typer!   r!   r"   Útest_s3_roundtrip_for_dir9  s*   
ÿý
ôz,TestParquetPyArrow.test_s3_roundtrip_for_dirc                 C   s2   t  d¡ tƒ }| |¡ t|ƒ}t ||¡ d S )Nr   )r%   r½   r   r   r   rp   rq   )r±   r4   ÚbufferÚdf_from_bufr!   r!   r"   Útest_read_file_like_obj_support`  s
   

z2TestParquetPyArrow.test_read_file_like_obj_supportc                 C   s–   t  d¡ | dd¡ | dd¡ t jtdd�� tdƒ W d   ƒ n1 s'w   Y  t jtdd�� | d¡ W d   ƒ d S 1 sDw   Y  d S )Nr   ÚHOMEÚTestingUserÚUSERPROFILEz.*TestingUser.*r…   z~/file.parquet)r%   r½   Úsetenvr‡   ÚOSErrorr   r   )r±   r4   Úmonkeypatchr!   r!   r"   Útest_expand_userg  s   

ÿ"ÿz#TestParquetPyArrow.test_expand_userc                 C   s>   ddg}|}|j ||d d� t||ƒ t|ƒj|jksJ ‚d S )Nra   r]   ©rÜ   rj   ©r   r„   r   Úshape)r±   rß   r'   rh   rÜ   rJ   r!   r!   r"   Útest_partition_cols_supportedp  s
   
z0TestParquetPyArrow.test_partition_cols_supportedc                 C   s@   d}|g}|}|j ||d d� t||ƒ t|ƒj|jksJ ‚d S )Nra   rŠ  r‹  )r±   rß   r'   rh   rÜ   Úpartition_cols_listrJ   r!   r!   r"   Útest_partition_cols_stringx  s   
z-TestParquetPyArrow.test_partition_cols_stringc                 C   s   | S r   r!   )Úxr!   r!   r"   Ú<lambda>‚  s    zTestParquetPyArrow.<lambda>rX   zpathlib.Path)Úidsc           	      C   s<   d}|g}|}||ƒ}|j ||d� t|ƒj|jksJ ‚d S )Nr1   )rÜ   )r   r   rŒ  )	r±   rß   r'   r4   r_  rÜ   rŽ  rJ   rw   r!   r!   r"   Útest_partition_cols_pathlib�  s   z.TestParquetPyArrow.test_partition_cols_pathlibc                 C   s   t jg g d�}t||ƒ d S )N)rá   r¤   rÕ   rQ  r!   r!   r"   Útest_empty_dataframe�  s   z'TestParquetPyArrow.test_empty_dataframec                 C   sV   dd l }t dddgi¡}| |jd| ¡ d�g¡}| t¡}t||d|i|d� d S )Nr   r�  r+   )Útyper�   r  )	r   r2   r3   r�   ÚfieldÚbool_re   ra   r|   )r±   r'   r   rJ   r�   Úout_dfr!   r!   r"   Útest_write_with_schema”  s
   
z)TestParquetPyArrow.test_write_with_schemac                 C   sz   t  d¡ t tjg d¢dd�tjg d¢dd�tjg d¢dd�dœ¡}t||ƒ t d	tjg d
¢dd�i¡}t||ƒ d S )Nr   r*   r-  r:   ÚUInt32rM   rX   ©r@   rA   rL   r@   r$  )r%   r½   r2   r3   rÌ   r|   rQ  r!   r!   r"   Ú test_additional_extension_arraysœ  s   
ýÿ
z3TestParquetPyArrow.test_additional_extension_arraysc              	   C   st   t  d¡ t dtjg d¢dd�i¡}t d|¡� t||| d|› d�¡d	� W d   ƒ d S 1 s3w   Y  d S )
Nr   r@   rM   ústring[pyarrow]r:   Ústring_storagezstring[ú]©rv   )r%   r½   r2   r3   rÌ   rŽ   r|   re   )r±   r'   rž  rJ   r!   r!   r"   Ú test_pyarrow_backed_string_array¬  s
   
"ÿz3TestParquetPyArrow.test_pyarrow_backed_string_arrayc                 C   sV   t  d¡ t tj g d¢¡tjdddd�tj tjdddd�¡dœ¡}t	||ƒ d S )	Nr   ))r   r+   )r+   r,   )r-   r6   z
2012-01-01r-   ÚD)r?   rì   r6   )rL   rB   rC   )
r%   r½   r2   r3   ÚIntervalIndexré   Úperiod_rangeÚfrom_breaksrI   r|   rQ  r!   r!   r"   Útest_additional_extension_types³  s   
ÿüÿ
z2TestParquetPyArrow.test_additional_extension_typesc                 C   s4   d}t  dt jdddd�i¡}t||d|id� d S )	Nz2.6r@   z
2017-01-01Ú1nsrZ  ©rì   r?   ÚversionrÔ   )r2   r3   rI   r|   )r±   r'   ÚverrJ   r!   r!   r"   Útest_timestamp_nanosecondsÃ  s   z-TestParquetPyArrow.test_timestamp_nanosecondsc                 C   sP   |j tjjkr| tjjdd�¡ d|g }tj	|d|id�}t
||dd� d S )Nzitemporary skip this test until it is properly resolved: https://github.com/pandas-dev/pandas/issues/37286r   é   Úindex_as_col©rá   r¸   F)rn   )Útzinforb   ÚtimezoneÚutcr4  r%   rÈ   r3  r2   r3   r|   )r±   r    r'   ri   ÚidxrJ   r!   r!   r"   Útest_timezone_aware_indexË  s   ÿÿ
z,TestParquetPyArrow.test_timezone_aware_indexc                 C   sz   t  d¡ t dttdƒƒi¡}t ¡ �}|j||d� t	||dgd�}W d   ƒ n1 s.w   Y  t
|ƒdks;J ‚d S )Nr   r@   r-   r£   ©r@   rÝ   r   ©rÞ   r+   )r%   r½   r2   r3   rE   rF   rp   r{   r   r   r÷   )r±   r'   rJ   rw   r§   r!   r!   r"   Útest_filter_row_groupsá  s   

þz)TestParquetPyArrow.test_filter_row_groupsc                 C   s˜   t jtj d¡ d¡g d¢d�}t ¡ �}|j||d� t	||ƒ}W d   ƒ n1 s+w   Y  |r?t
|jt jjjƒs=J ‚d S t
|jt jjjƒsJJ ‚d S )Nr,   )rZ  r-   )r0   r1   ÚCrî   r£   )r2   r3   rG   rô   rõ   rö   rp   r{   r   r   r”   Ú_mgrÚcoreÚ	internalsÚArrayManagerÚBlockManager)r±   r'   Úusing_array_managerrJ   rw   r§   r!   r!   r"   Útest_read_parquet_managerê  s   ÿ
þz,TestParquetPyArrow.test_read_parquet_managerc                 C   s¶   dd l }|}tjdddd�}| d ¡}||d< g d¢|d< |j |¡}|jtjd	�}trO|d
  	d¡|d
< |d  	d¡|d< |d  	t |j
ddd�¡¡|d< t||ddi|d� d S )Nr   r=   r-   r@  rA  rC  rD  rE  )Útypes_mapperrb   ztimestamp[us][pyarrow]rc   Úus)ÚunitrB  r,  r   ©r#   rx   rv   )r   r2   rI   rã   ÚTableÚfrom_pandasÚ	to_pandasÚ
ArrowDtyper   re   Ú	timestampr|   )r±   r'   rh   r   rJ   rF  Úpa_tablerv   r!   r!   r"   Ú&test_read_dtype_backend_pyarrow_configø  s,   
ÿÿ
üz9TestParquetPyArrow.test_read_dtype_backend_pyarrow_configc                 C   sn   t jdddgit jddgdd�dd	�}| ¡ }d
d l}t|jƒtdƒkr+|j d¡|_t	||ddi|d� d S )Nr@   r+   r,   r-   r6   Útest©rä   zint64[pyarrow])rá   r;   r   z11.0.0r,  r   rÂ  )
r2   r3   ÚIndexrù   r   r
   r™   rá   re   r|   )r±   r'   rJ   rv   r   r!   r!   r"   Ú,test_read_dtype_backend_pyarrow_config_index  s   ÿ
üz?TestParquetPyArrow.test_read_dtype_backend_pyarrow_config_indexc                 C   s¨   t  tdƒttddƒƒdœ¡}ddg|_t||ƒ ddg|_tjtdd	�� t||ƒ W d   ƒ n1 s5w   Y  t	 	d
dddd¡t	 	d
dddd¡g|_t||ƒ d S )Nr5   r+   r6   rÏ   r   rN   rO   z|S3r…   éÛ  )
r2   r3   rE   rF   r¤   r|   r%   r‡   ÚNotImplementedErrorrb   rQ  r!   r!   r"   Útest_columns_dtypes_not_invalid&  s   


þþz2TestParquetPyArrow.test_columns_dtypes_not_invalidc                 C   s(   t jt jg d¢dd�d�}t||ƒ d S )Nr›  úcustom namerË  r  ©r2   r3   rÌ  r|   rQ  r!   r!   r"   Útest_empty_columns:  s   z%TestParquetPyArrow.test_empty_columnsc                 C   sR   |d }t jddgid�}ddi|_|j||d� t||d�}|j|jks'J ‚d S )Nztest_df_metadata.pr+   ©r¸   Útest_attributer£   )r2   r3   Úattrsr   r   )r±   rß   r'   rw   rJ   Únew_dfr!   r!   r"   Útest_df_attrs_persistence?  s   
z,TestParquetPyArrow.test_df_attrs_persistencec                 C   sž   |d }t jdddgiddgd�}|j|dd� t  d	d
¡� t|dd�}W d   ƒ n1 s/w   Y  t jdddgidt jddgdd�d�}t ||¡ d S )Nztest_string_inference.pr@   r�  ÚyrA   )r¸   rá   r   r£   úfuture.infer_stringTústring[pyarrow_numpy]r:   )r¸   r;   rá   )r2   r3   r   rŽ   r   rÌ  rp   rq   ©r±   rß   r'   rw   rJ   r§   rv   r!   r!   r"   Útest_string_inferenceG  s   ÿ
ýz(TestParquetPyArrow.test_string_inferenceznot supported before 11.0c                 C   st   dd l }|d }tjdtdƒgidd�}|j|| d| d¡fg¡d� t|ƒ}tjdd	gid
d�}t 	||¡ d S )Nr   z	decimal.pr@   z123.00r�  r:   r¬  )r�   Ú123zstring[python])
r   r2   r3   r   r   r�   Ú
decimal128r   rp   rq   rÜ  r!   r!   r"   Útest_roundtrip_decimalU  s    z)TestParquetPyArrow.test_roundtrip_decimalc                 C   s®   dd l }dd lm} |d }| d| g d¢| ¡ ¡i¡}| ||¡ t dd¡� t	|ƒ}W d   ƒ n1 s8w   Y  tj
dg d¢idtjdgdd�d	�}t ||¡ d S )
Nr   zlarge_string.pr@   )NrA   rL   rÚ  TrÛ  r:   )r¸   r;   r¤   )r   Úpyarrow.parquetr¹   r5  r   Úlarge_stringr6  r2   rŽ   r   r3   rÌ  rp   rq   )r±   rß   r'   r7  rw   r5  r§   rv   r!   r!   r"   Ú#test_infer_string_large_string_typea  s   
ÿ
ýz6TestParquetPyArrow.test_infer_string_large_string_typeN)1rÅ   rÆ   rÇ   rG  rH  rL  rR  rU  rY  r^  r%   rÈ   r3  r   Úskipifr	   r>  ÚstrÚpathlibÚPathrc  ri  rÊ   rs  rw  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?  ¸  sl    
ý

þþ		ÿ
	
r?  c                   @   s(  e Zd Zdd„ Zdd„ Zdd„ Zejje	e
jƒe	dƒkdd	�d
d„ ƒZdd„ Zdd„ Zdd„ Zejjdd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zejjeƒ dd	�dd„ ƒZejjeoae	ejƒe	dƒkd d	�d!d"„ ƒZd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Z d-d.„ Z!d/d0„ Z"ejjeƒ dd	�d1d2„ ƒZ#d3S )4ÚTestParquetFastParquetc                 C   sF   |}t jdddd�}| d ¡}||d< t jddd�|d< t||ƒ d S )	Nr=   r-   z
US/EasternrA  rC  rS  r>   Ú	timedelta)r2   rI   rã   rT  r|   )r±   r)   rh   rJ   rF  r!   r!   r"   rG  ‚  s   
z!TestParquetFastParquet.test_basicc                 C   s”   t  tdƒttddƒƒdœ¡}t}d}ddg|_|  ||||¡ ddg|_|  ||||¡ t d	dddd¡t d	dddd¡g|_|  ||||¡ d S )
Nr5   r+   r6   rÏ   r  r   rN   rO   rÎ  )r2   r3   rE   rF   r  r¤   r´   rb   )r±   r)   rJ   Úerrr‰   r!   r!   r"   Útest_columns_dtypes_invalid‹  s   

þz2TestParquetFastParquet.test_columns_dtypes_invalidc                 C   s<   t jt d¡ dd¡tdƒd� ¡ }d}|  ||t|¡ d S )NrM  r6   r-   rN  rî   z9Cannot create parquet dataset with duplicate column namesrO  ©r±   r)   rJ   r‰   r!   r!   r"   rR     s   $z-TestParquetFastParquet.test_duplicate_columnsz2.0.0z$fastparquet uses np.float_ in numpy2r   c                 C   s@   t  dg d¢i¡}t jddtjdgidd�}t|||dd� d S )	Nr@   )TNFr'  g        r]  r:   F)rv   rn   )r2   r3   rG   rd   r|   ©r±   r)   rJ   rv   r!   r!   r"   Útest_bool_with_none¦  s   z*TestParquetFastParquet.test_bool_with_nonec                 C   sT   t  dt jdddd�i¡}|  ||td ¡ t  dg d¢i¡}d}|  ||t|¡ d S )Nr@   Ú2013ÚMr-   r¨  rW  z"Can't infer object conversion type)r2   r3   r¤  r´   rˆ   rì  r!   r!   r"   rY  ±  s
   z'TestParquetFastParquet.test_unsupportedc                 C   s&   t  dt  tdƒ¡i¡}t||ƒ d S )Nr@   r5   )r2   r3   rg  rE   r|   )r±   r)   rJ   r!   r!   r"   ri  ¼  rV  z'TestParquetFastParquet.test_categoricalc                 C   sx   dt tdƒƒi}t |¡}t ¡ �}|j||d dd� t||dgd�}W d   ƒ n1 s-w   Y  t|ƒdks:J ‚d S )Nr@   r-   r+   )r#   rj   Úrow_group_offsetsr´  rµ  )	rE   rF   r2   r3   rp   r{   r   r   r÷   )r±   r)   rB   rJ   rw   r§   r!   r!   r"   r¶  À  s   

þz-TestParquetFastParquet.test_filter_row_groupsc                 C   s*   t ||d|j› d�d|id |dœd� d S )Nru  z/fastparquet.parquetrt  )rj   rt  rm  rv  )r±   r4   ro  r)   rp  r!   r!   r"   rw  È  s   
ûz(TestParquetFastParquet.test_s3_roundtripc                 C   s\   ddg}|}|j |d|d d� tj |¡sJ ‚dd l}| t|ƒd¡j}t|ƒdks,J ‚d S )Nra   r]   r   ©r#   rÜ   rj   r   Fr,   ©	r   r`  rw   Úexistsr   ÚParquetFilerå  Úcatsr÷   ©r±   rß   r)   rh   rÜ   rJ   r   Úactual_partition_colsr!   r!   r"   r�  Ó  ó   üz4TestParquetFastParquet.test_partition_cols_supportedc                 C   sX   d}|}|j |d|d d� tj |¡sJ ‚dd l}| t|ƒd¡j}t|ƒdks*J ‚d S )Nra   r   rò  r   Fr+   ró  r÷  r!   r!   r"   r�  ã  s   üz1TestParquetFastParquet.test_partition_cols_stringc                 C   s\   ddg}|}|j |dd |d� tj |¡sJ ‚dd l}| t|ƒd¡j}t|ƒdks,J ‚d S )Nra   r]   r   )r#   rj   Úpartition_onr   Fr,   ró  r÷  r!   r!   r"   Útest_partition_on_supportedó  rù  z2TestParquetFastParquet.test_partition_on_supportedc                 C   sX   ddg}|}d}t jt|d�� |j|dd ||d� W d   ƒ d S 1 s%w   Y  d S )Nra   r]   zYCannot use both partition_on and partition_cols. Use partition_cols for partitioning datar…   r   )r#   rj   rú  rÜ   )r%   r‡   rˆ   r   )r±   rß   r)   rh   rÜ   rJ   r‰   r!   r!   r"   Ú3test_error_on_using_partition_cols_and_partition_on  s   ÿû"ÿzJTestParquetFastParquet.test_error_on_using_partition_cols_and_partition_onzfastparquet writes into Indexc                 C   s"   t  ¡ }| ¡ }t|||d� d S )Nr   )r2   r3   rù   r|   rí  r!   r!   r"   r”    s   z+TestParquetFastParquet.test_empty_dataframez2022.12zCfastparquet bug, see https://github.com/dask/fastparquet/issues/929c                 C   s>   d|g }t j|d|id�}| ¡ }d|j_t|||d� d S )Nr¬  r­  r®  rá   r   )r2   r3   rù   rá   rä   r|   )r±   r)   ri   r²  rJ   rv   r!   r!   r"   r³    s
   
z0TestParquetFastParquet.test_timezone_aware_indexc              
   C   sü   t  dddgi¡}t ¡ �g}| |¡ tjtdd��$ t t	¡� t
|ddd� W d   ƒ n1 s2w   Y  W d   ƒ n1 sAw   Y  tjtdd�� t
|dd	d
� W d   ƒ n1 s_w   Y  W d   ƒ d S W d   ƒ d S 1 sww   Y  d S )Nr@   r+   r,   z!not supported for the fastparquetr…   r   T)r#   Úuse_nullable_dtypesr   r+  )r2   r3   rp   r{   r   r%   r‡   rˆ   r¬   r­   r   )r±   r)   rJ   rw   r!   r!   r"   Ú&test_use_nullable_dtypes_not_supported*  s   

ÿ€ÿÿû"ûz=TestParquetFastParquet.test_use_nullable_dtypes_not_supportedc              	   C   sŒ   t  d¡�7}t |¡ d¡ tjtdd�� t|dd� W d   ƒ n1 s&w   Y  t |¡j	dd� W d   ƒ d S 1 s?w   Y  d S )	Nútest.parquets   breakitÚ r…   r   r£   F)Ú
missing_ok)
rp   r{   ræ  rç  Úwrite_bytesr%   r‡   Ú	Exceptionr   Úunlink)r±   rw   r!   r!   r"   Ú$test_close_file_handle_on_read_error5  s   ÿ"ûz;TestParquetFastParquet.test_close_file_handle_on_read_errorc              	   C   s˜   t jddgddgdœd�}t d¡�*}t| ¡ dƒ�}| |¡ W d   ƒ n1 s*w   Y  t||d�}W d   ƒ n1 s?w   Y  t ||¡ d S )Nr   r+   r/   rÔ  rÿ  Úwbr£   )	r2   r3   rp   r{   r¾   Úencoder   r   rq   )r±   r#   rJ   rw   rD   r§   r!   r!   r"   Útest_bytes_file_name=  s   ÿüz+TestParquetFastParquet.test_bytes_file_namec              	   C   ó  t  d¡ tjddgddgdœd�}t ¡ �'}t jtdd�� |j|ddd	� W d   ƒ n1 s1w   Y  W d   ƒ n1 s@w   Y  t ¡ �7}t	 
|¡ d
¡ t jtdd�� t|ddd	� W d   ƒ n1 skw   Y  W d   ƒ d S W d   ƒ d S 1 sƒw   Y  d S )Nr   r   r+   r/   rÔ  zfilesystem is not implementedr…   r.   ©r#   rk  rN   )r%   r½   r2   r3   rp   r{   r‡   rÏ  r   ræ  rç  r  r   ©r±   rJ   rw   r!   r!   r"   Útest_filesystem_notimplementedG  ó(   

ÿý€ÿ
ÿýþ"þz5TestParquetFastParquet.test_filesystem_notimplementedc              	   C   r	  )Nr   r   r+   r/   rÔ  z1filesystem must be a pyarrow or fsspec FileSystemr…   r.   r
  rN   )r%   r½   r2   r3   rp   r{   r‡   rˆ   r   ræ  rç  r  r   r  r!   r!   r"   Útest_invalid_filesystemW  r  z.TestParquetFastParquet.test_invalid_filesystemc              	   C   s(  t  d¡}tjddgddgdœd�}t ¡ �,}t jtdd�� |j|d| 	¡ d	d
id� W d   ƒ n1 s6w   Y  W d   ƒ n1 sEw   Y  t ¡ �<}t
 |¡ d¡ t jtdd�� t|d| 	¡ d	d
id� W d   ƒ n1 suw   Y  W d   ƒ d S W d   ƒ d S 1 s�w   Y  d S )Nz
pyarrow.fsr   r+   r/   rÔ  z8storage_options not supported with a pyarrow FileSystem.r…   r   r.   rQ   )r#   rk  rt  rN   )r%   r½   r2   r3   rp   r{   r‡   rÏ  r   ÚLocalFileSystemræ  rç  r  r   )r±   Úpa_fsrJ   rw   r!   r!   r"   Ú.test_unsupported_pa_filesystem_storage_optionsg  s@   

þüü€ÿ
þüüþ"þzETestParquetFastParquet.test_unsupported_pa_filesystem_storage_optionsc              	   C   s    d}t  dttddƒƒi¡}t d¡�3}| |¡ tjt	|d�� t
|dd� W d   ƒ n1 s1w   Y  W d   ƒ d S W d   ƒ d S 1 sIw   Y  d S )	NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r]   r+   r6   ztmp.parquetr…   Únumpy)r,  )r2   r3   rE   rF   rp   r{   r   r%   r‡   rˆ   r   )r±   r#   r‰   rJ   rw   r!   r!   r"   Útest_invalid_dtype_backendƒ  s   ÿ
ÿþ"þz1TestParquetFastParquet.test_invalid_dtype_backendc                 C   sF   t jt jg d¢dd�d�}t jt jg d¢dd�d�}t|||d� d S )Nr›  rÑ  rË  r  r   rÒ  rí  r!   r!   r"   rÓ  Ž  s   z)TestParquetFastParquet.test_empty_columnsN)$rÅ   rÆ   rÇ   rG  rë  rR  r%   rÈ   r3  r
   rG   r™   rî  rY  ri  r¶  rÊ   rw  r�  r�  rû  rü  rä  r   r”  r(   r   r³  rþ  r  r  r  r  r  r  rÓ  r!   r!   r!   r"   rè  �  sD    	þ



þ
	
rè  )	NNNNNTFTr,   )IÚ__doc__rb   Údecimalr   r·   r   r`  ræ  r  rG   r%   Úpandas._configr   Úpandas._config.configr   Úpandas.compatr   Úpandas.compat.pyarrowr   r   r	   Úpandasr2   Úpandas._testingÚ_testingrp   Úpandas.util.versionr
   Úpandas.io.parquetr   r   r   r   r   r   r$   rš   r   r(   rÈ   ÚfilterwarningsÚ
pytestmarkÚfixturer   rä  r#   r'   r)   r4   rK   rh   Únowr°  r±  ÚminÚmaxÚstrptimeri   r|   r„   rŠ   r�   r‘   r“   r•   r¡   r¨   r©   r®   r¯   rË   r?  rè  r!   r!   r!   r"   Ú<module>   sÊ    ÿÿ
ÿþ	ýþÿþ÷ÿ





ùÿ

öB+  +   L