a
    é´«j„Ï  ã                   @   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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$ zddl%Z%dZ&W n e'yê   dZ&Y n0 zddl(Z(dZ)W n e'�y   dZ)Y n0 e
j* +d¡e
j* +d¡gZ,e
j-e
j.de
j*j/e) �pTeddd�dkdd�e
j*j0eƒ ddd�gd�e
j.de
j*j/e& dd�d�gd�dd„ ƒZ1e
j-dd„ ƒZ2e
j-dd „ ƒZ3e
j-d!d"„ ƒZ4e
j-d#d$„ ƒZ5e
j-d%d&„ ƒZ6e
j-ej 7ej8j9¡ej 7ej8j:¡ej 7ej8j;¡ej <d'd(¡ej <d)d(¡ej <d*d(¡ej <d+d(¡gd�d,d-„ ƒZ=dMd/d0„Z>d1d2„ Z?d3d4„ Z@d5d6„ ZAd7d8„ ZBd9d:„ ZCd;d<„ ZDd=d>„ ZEd?d@„ ZFdAdB„ ZGdCdD„ ZHG dEdF„ dFƒZIG dGdH„ dHeIƒZJG dIdJ„ dJeIƒZKG dKdL„ dLeIƒZLdS )Nz 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©ZsilentÚarrayz4fastparquet is not installed or ArrayManager is used©ÚreasonúTODO(infer_string) fastparquet©r   Ústrict©ZmarksÚpyarrowúpyarrow is not installed)Úparamsc                 C   s   | j S ©N©Úparam©Úrequest© r%   ú[/var/www/html/laksyashrimp/venv/lib/python3.9/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&   Úpa]   s    
r+   c                 C   sJ   t st d¡ ntddd�dkr*t d¡ tƒ rF|  tjjddd	�¡ d
S )Nzfastparquet is not installedr   Tr   r   z.ArrayManager is not supported with fastparquetr   Fr   r   )Ú_HAVE_FASTPARQUETr)   r*   r   r   ÚapplymarkerÚmarkÚxfailr#   r%   r%   r&   Úfpd   s    
ÿr0   c                   C   s"   t jg d¢ddœt  ddg¡d�S )N©é   é   é   Úfoo©ÚAÚBr7   r8   ©Úcolumns)ÚpdÚ	DataFrameÚIndexr%   r%   r%   r&   Ú	df_compatq   s    r>   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Úabcr2   é   ç      @ç      @Úfloat64©Údtype©TFTÚ20130101r4   ©Úperiods)ÚaÚbÚdÚeÚf)r;   r<   ÚlistÚrangeÚnpÚarangeÚ
date_range)Údfr%   r%   r&   Údf_cross_compatv   s    úÿrU   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 )Nr?   rJ   Úc©rJ   NrV   )ó   fooó   bars   baz©r5   ÚbarÚbazr2   r@   r4   é   Úu1rA   rB   rC   rD   ç       @ç      @rF   rG   rH   Z20130103)ÚstringÚstring_with_nanZstring_with_noneÚbytesÚunicodeÚintZuintÚfloatZfloat_with_nanÚboolÚdatetimeÚdatetime_with_nat)r;   r<   rO   rQ   ÚnanrP   rR   ÚastyperS   Ú	TimestampZNaTr%   r%   r%   r&   Údf_fullˆ   s$    

ýôÿrm   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   s   | j S r    r!   r#   r%   r%   r&   Útimezone_aware_date_list    s    rn   r3   c
                    s”   ˆp
ddi‰ˆpi ‰ˆdu r ˆ‰|r4|ˆd< |ˆd< ‡ ‡‡‡‡‡‡‡fdd„}
ˆdu rˆt  ¡ �‰|
|	ƒ W d  ƒ q�1 s|0    Y  n|
|	ƒ 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 ]L}ˆjˆfi ˆ¤Ž tˆfi ˆ¤Ž}dˆv r@d ˆjd< tjˆ|ˆˆˆ d� qd S )Nrb   ©r2   rb   )Úcheck_namesÚ
check_likeÚcheck_dtype)rP   r   r   ÚlocÚtmÚassert_frame_equal)ÚrepeatÚ_Úactual©rs   rr   rq   rT   ÚexpectedÚpathÚread_kwargsÚwrite_kwargsr%   r&   ÚcompareÛ   s    
ûz!check_round_trip.<locals>.compare)ru   Úensure_clean)rT   r'   r|   r~   r}   r{   rq   rr   rs   rw   r   r%   rz   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   NZhive)Úpartitioning)Zpyarrow.datasetÚdatasetr‚   ÚschemaÚnames)r|   r{   Zdsrƒ   r%   r%   r&   Úcheck_partition_namesñ   s    
r†   c                 C   sB   d}t jt|d�� t| ddƒ W d   ƒ n1 s40    Y  d S )Nz.engine must be one of 'pyarrow', 'fastparquet'©Úmatchr5   r[   )r)   ÚraisesÚ
ValueErrorr�   )r>   Úmsgr%   r%   r&   Útest_invalid_engine  s    rŒ   c                 C   sN   |rt s| j d¡| _t dd¡� t| ƒ W d   ƒ n1 s@0    Y  d S )NÚstrúio.parquet.enginer   )r   r:   rk   r;   Úoption_contextr�   )r>   r+   Úusing_infer_stringr%   r%   r&   Útest_options_py  s    r‘   c                 C   s8   t  dd¡� t| ƒ W d   ƒ n1 s*0    Y  d S )NrŽ   r   ©r;   r�   r�   )r>   r0   r%   r%   r&   Útest_options_fp  s    r“   c                 C   s8   t  dd¡� t| ƒ W d   ƒ n1 s*0    Y  d S )NrŽ   Úautor’   )r>   r0   r+   r%   r%   r&   Útest_options_auto  s    r•   c                 C   sV  t tdƒtƒsJ ‚t tdƒtƒs$J ‚t dd¡�F t tdƒtƒsDJ ‚t tdƒtƒsVJ ‚t tdƒtƒshJ ‚W d   ƒ n1 s|0    Y  t dd¡�F t tdƒtƒs¦J ‚t tdƒtƒs¸J ‚t tdƒtƒsÊJ ‚W d   ƒ n1 sÞ0    Y  t dd¡�L t tdƒtƒ�s
J ‚t tdƒtƒ�sJ ‚t tdƒtƒ�s2J ‚W d   ƒ n1 �sH0    Y  d S )Nr   r   rŽ   r”   )Ú
isinstancer   r   r   r;   r�   )r0   r+   r%   r%   r&   Útest_options_get_engine  s    00r—   c                  C   s‚  ddl m}  |  d¡}|  d¡}ts(dnttjƒt|ƒk }tsBdnttjƒt|ƒk }to\| }tof| }|�s~|�s~|r¼d|› d�}t	j
t|d�� td	ƒ W d   ƒ qö1 s°0    Y  n:d
}t	j
t|d�� td	ƒ W d   ƒ n1 sì0    Y  |�rBd|› d�}t	j
t|d�� td	ƒ W d   ƒ n1 �s60    Y  n<d}t	j
t|d�� td	ƒ W d   ƒ n1 �st0    Y  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.)Zpandas.compat._optionalr˜   Úgetr(   r   r   Ú__version__r,   r   r)   r‰   ÚImportErrorr   )r˜   Z
pa_min_verZ
fp_min_verZhave_pa_bad_versionZhave_fp_bad_versionZhave_usable_paZhave_usable_fprˆ   r%   r%   r&   Ú"test_get_engine_auto_error_message2  s8    

ÿýÿý

(&*rœ   c                 C   s~   | }t  ¡ �^}|j||d d� t||d�}t  ||¡ t||ddgd�}t  ||ddg ¡ W d   ƒ n1 sp0    Y  d S ©N)r'   ro   ©r'   rJ   rL   )r'   r:   ©ru   r€   r   r   rv   ©rU   r+   r0   rT   r|   Úresultr%   r%   r&   Útest_cross_engine_pa_fp]  s    
r¢   c                 C   s~   | }t  ¡ �^}|j||d d� t||d�}t  ||¡ t||ddgd�}t  ||ddg ¡ W d   ƒ n1 sp0    Y  d S r�   rŸ   r    r%   r%   r&   Útest_cross_engine_fp_pak  s    
r£   c              	   C   s€   t  dg d¢i¡}d}t ¡ �N}tjt|ddd�� | || ¡ W d   ƒ n1 sT0    Y  W d   ƒ n1 sr0    Y  d S )NrJ   r1   zqStarting with pandas version 3.0 all arguments of to_parquet except for the argument 'path' will be keyword-only.F)rˆ   Zcheck_stacklevelZraise_on_extra_warnings)r;   r<   ru   r€   Úassert_produces_warningÚFutureWarningr   )r'   rT   r‹   r|   r%   r%   r&   Ú!test_parquet_pos_args_deprecationx  s    ÿ
ür¦   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚBasec              	   C   sj   t  ¡ �N}tj||d��  t|||d d� W d   ƒ n1 s>0    Y  W d   ƒ n1 s\0    Y  d S )Nr‡   ©ro   )ru   r€   r)   r‰   r   )ÚselfrT   r'   ÚexcÚerr_msgr|   r%   r%   r&   Úcheck_error_on_writeŠ  s    
zBase.check_error_on_writec              	   C   sf   t  ¡ �J}t  |¡�  t|||d d� W d   ƒ n1 s:0    Y  W d   ƒ n1 sX0    Y  d S )Nr¨   )ru   r€   Úexternal_error_raisedr   )r©   rT   r'   rª   r|   r%   r%   r&   Úcheck_external_error_on_write�  s    
z"Base.check_external_error_on_writeN)Ú__name__Ú
__module__Ú__qualname__r¬   r®   r%   r%   r%   r&   r§   ‰  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ejjejj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 )Nr1   r2   r5   rG   z+to_parquet only supports IO with DataFrames)r;   ÚSeriesrl   rQ   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 )Nr?   r2   r@   ©ra   re   r5   r[   ©r;   r<   rO   rP   r:   r�   )r©   r'   rT   r%   r%   r&   Útest_columns_dtypes£  s    
zTestBasic.test_columns_dtypesro   )NÚgzipZsnappyÚbrotlic                 C   s(   t  dg d¢i¡}t||d|id� d S )Nr7   r1   ro   ©r~   ©r;   r<   r�   )r©   r'   ro   rT   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 )Nr?   r2   r@   r¶   ra   r:   ©r{   r}   ©r;   r<   rO   rP   r�   )r©   r'   rT   r{   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 )Nr@   Zaabb)re   Úpartre   r   r2   Úpartition_colsrÁ   )rÁ   ú==rJ   )Úfiltersr:   )r|   r{   r~   r}   rw   r¿   )r©   r'   Útmp_pathrT   r{   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 ]2}||_t|t jƒrn|j d ¡|_t|||d
� qJg d¢|_d|j_	t||ƒ d S )Nr   r7   r1   )r3   r4   r@   rG   r4   rH   r?   )r2   r4   r@   )rq   )r   r2   r3   r5   )
r;   r<   r�   rS   rO   Úindexr–   ZDatetimeIndexÚ
_with_freqÚname)r©   r'   rq   rT   Z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 )Nr7   r1   ©)rJ   r2   )rJ   r3   )rK   r2   )r;   r<   Ú
MultiIndexÚfrom_tuplesrÇ   r�   )r©   r+   r'   rT   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 ]4}||_t||ƒ t||dddgi|ddg d� qpd S )Nz01-Jan-2018z01-Dec-2018ZMS)Úfreqr3   r4   ÚABCr9   ÚLevel1ÚLevel2ÚlevelÚdate)r…   r:   r7   r8   ©r}   r{   )r;   rS   r<   rQ   ÚrandomÚdefault_rngÚstandard_normalÚlenrO   rÌ   Zfrom_productÚcopyrÇ   r�   )r©   r+   r'   ÚdatesrT   Z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 )Nr1   )ÚqÚrÚs)rJ   rK   F)ro   rÇ   T)Údrop©r~   r{   )ZzyxZwvuZtsr©rÇ   ©r[   r[   r\   r\   r5   r5   Úquxrå   ©ÚoneÚtworç   rè   rç   rè   rç   rè   é   c                 S   s   g | ]
}| ‘qS r%   r%   )Ú.0Úir%   r%   r&   Ú
<listcomp>  ó    z7TestBasic.test_write_ignoring_index.<locals>.<listcomp>)rç   rè   )r;   r<   Zreset_indexr�   rO   rP   )r©   r'   rT   r~   r{   Úarraysr%   r%   r&   Útest_write_ignoring_indexÿ  s     
ÿþ ÿz#TestBasic.test_write_ignoring_indexc                 C   s\   t j g d¢¡}t jtj d¡ d¡|d�}|dkrF|  ||t	d¡ n|dkrXt
||ƒ d S )NrË   r3   )r@   r4   r9   r   úColumn name must be a stringr   )r;   rÌ   rÍ   r<   rQ   rÖ   r×   rØ   r¬   Ú	TypeErrorr�   )r©   r'   Z
mi_columnsrT   r%   r%   r&   Útest_write_column_multiindex  s    ÿÿz&TestBasic.test_write_column_multiindexc                 C   sh   g d¢g d¢g}t jtj d¡ d¡|d�}ddg|j_|dkrR|  ||t	d	¡ n|d
krdt
||ƒ d S )Nrä   )r2   r3   r2   r3   r2   r3   r2   r3   r3   ©ré   ré   r9   rÑ   rÒ   r   zColumn namer   )r;   r<   rQ   rÖ   r×   rØ   r:   r…   r¬   rŠ   r�   ©r©   r'   rî   rT   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æ   r3   ró   r9   Z	ColLevel1Z	ColLevel2)	r;   r<   rQ   rÖ   r×   rØ   r:   r…   r�   ©r©   r+   r'   rî   rT   r%   r%   r&   Ú#test_write_column_multiindex_string>  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)r[   r\   r5   rå   r3   ©ré   r@   r9   Z	StringCol)	r;   r<   rQ   rÖ   r×   rØ   r:   rÉ   r�   rö   r%   r%   r&   Útest_write_column_index_stringO  s    ÿz(TestBasic.test_write_column_index_stringc                 C   sT   g d¢}t jtj d¡ d¡|d�}d|j_|dkrF|  ||t	d¡ n
t
||ƒ d S )N©r2   r3   r4   r@   r3   rø   r9   ZNonStringColr   rð   )r;   r<   rQ   rÖ   r×   rØ   r:   rÉ   r¬   rñ   r�   rô   r%   r%   r&   Ú!test_write_column_index_nonstring]  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 	¡ �6}| 
||¡ t||d�}t||dd�}W d   ƒ n1 sØ0    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   ©r2   r3   r4   NZint64Zuint8)rJ   rK   rV   N)TFTNrú   )ç      ð?r_   r`   NZfloat32rC   )rJ   rK   rV   rL   rM   rN   Úgrž   Únumpy_nullable©r'   Údtype_backendrJ   ÚInt64rD   ÚUInt8ra   ÚbooleanZFloat32ÚFloat64rV   r2   )Zaxis)r)   Úimportorskipr.   r/   r-   r   Útabler   ru   r€   Úwrite_tabler   rE   rQ   r;   r<   rá   rv   )
r©   r'   r$   Úpqr.   r  r|   Zresult1Zresult2r{   r%   r%   r&   Útest_dtype_backendm  sF    
ÿ
÷ÿ
,ùÿ
zTestBasic.test_dtype_backendrE   )	r  r  r  Úobjectzdatetime64[ns, UTC]rf   z	period[D]r  ra   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ÚvaluerD   rf   r  r  rÿ   rÕ   )r;   r<   r   r�   )r©   r+   rE   rT   r{   r%   r%   r&   Útest_read_empty_arrayž  s    ÿÿÿÿÿzTestBasic.test_read_empty_arrayc                 C   sv   |dkrt  |¡ t|ddddƒdd��.}|j| ¡ d� t|j|d	�}W d   ƒ n1 s\0    Y  t ||¡ d S )
Nr”   ÚioÚdataÚparquetzsimple.parquetÚrb)Úmode)Úcontentrž   )	r)   r  ÚopenZserve_contentÚreadr   Úurlru   rv   )r©   Z
httpserverÚdatapathr>   r'   rN   rT   r%   r%   r&   Útest_parquet_read_from_url¿  s    
,z$TestBasic.test_parquet_read_from_urlN)r¯   r°   r±   rµ   r¸   r)   r.   Úparametrizer½   rÀ   rÆ   rÊ   rÎ   rÝ   rï   rò   rõ   r÷   rù   rû   r
  r  ÚnetworkÚ
single_cpur  r%   r%   r%   r&   r²   —  s0   
		 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)e
j dDdEdFge
j*dGdHge
jje+e,dIdJ�dK�e- -dLdFdFdEdE¡e- -dLdFdFdFdF¡gg¡dMdN„ ƒZ.dOdP„ Z/dQdR„ Z0dSdT„ Z1e
jje2dUd�dVdW„ ƒZ3dXdY„ Z4dZS )[ÚTestParquetPyArrowc                 C   s@   |}t jdddd�}| d ¡}||d< g d¢|d< t||ƒ d S )NrG   r4   úEurope/Brussels©rI   ÚtzÚdatetime_tz©TNTÚbool_with_none)r;   rS   rÈ   r�   )r©   r+   rm   rT   Ú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 )
NrG   r4   r  r  r   ra   re   r:   r¾   )r;   rS   r�   )r©   r+   rm   rT   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ž   rp   )	r   r–   rc   r   r   rÚ   rt   ru   rv   )r©   r+   rm   Z	buf_bytesZ
buf_streamÚresr{   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é   r@   r4   Úaaar9   zDuplicate column names found©	r;   r<   rQ   rR   ZreshaperO   rÚ   r¬   rŠ   ©r©   r+   rT   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 )NrJ   ú1 dayr4   rH   )r;   r<   Útimedelta_ranger�   r+  r%   r%   r&   Útest_timedeltaõ  s    z!TestParquetPyArrow.test_timedeltac                 C   s&   t  dg d¢i¡}|  ||tj¡ d S )NrJ   ©rJ   r2   r_   )r;   r<   r®   r   ÚArrowExceptionr+  r%   r%   r&   Útest_unsupportedù  s    z#TestParquetPyArrow.test_unsupportedc                 C   sF   t jddt jd�}tj|dgd�}tr8|  ||tj¡ n
t	||ƒ d S )Nr3   é
   rD   Úfp16©r  r:   )
rQ   rR   Úfloat16r;   r<   r
   r®   r   r1  r�   )r©   r+   r  rT   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 ¡ �b}||ƒ}t tj	¡� |j
||d� W d   ƒ n1 sd0    Y  tj |¡r~J ‚W d   ƒ n1 s’0    Y  d S )Nr3   r3  rD   r4  r5  )r|   r'   )rQ   rR   r6  r;   r<   ru   r€   r­   r   r1  r   Úosr|   Úisfile)r©   r+   r8  r  rT   Zpath_strr|   r%   r%   r&   Ú test_unsupported_float16_cleanup
  s    
,z3TestParquetPyArrow.test_unsupported_float16_cleanupc              	   C   sV   t  t  tdƒ¡t jg d¢t  g d¢¡d�t jg d¢g d¢dd�d	œ¡}t||ƒ d S )
NZabcdef)r[   r5   r5   r[   Nr[   rZ   rD   )rJ   rK   rV   rJ   rV   rK   )rK   rV   rL   T)Ú
categoriesZordered©rJ   rK   rV   )r;   r<   ÚCategoricalrO   ZCategoricalDtyper�   r+  r%   r%   r&   Útest_categorical   s    þýøÿz#TestParquetPyArrow.test_categoricalc                 C   s@   t  d¡}|jf i |¤Ž}d|i}t|||j› d�||d� d S )NÚs3fsÚ
filesystemú/pyarrow.parquet©r|   r}   r~   )r)   r  ZS3FileSystemr�   rÉ   )r©   r>   Ús3_public_bucketr+   Ús3sor@  Zs3Úkwr%   r%   r&   Útest_s3_roundtrip_explicit_fs5  s    

ûz0TestParquetPyArrow.test_s3_roundtrip_explicit_fsc                 C   s(   d|i}t ||d|j› d�||d� d S )NÚstorage_optionsús3://rB  rC  ©r�   rÉ   )r©   r>   rD  r+   rE  r%   r%   r&   Útest_s3_roundtripB  s    ûz$TestParquetPyArrow.test_s3_roundtripÚpartition_colr7   c              
   C   sr   t  d¡ | ¡ }|r@| t |tj¡¡}d}||  |¡||< t|||d|j	› d�d|i|d |dœddd	� d S )
Nr@  ÚcategoryrI  z/parquet_dirrH  )rÂ   ro   rH  Tr2   )r{   r|   r}   r~   rr   rw   )
r)   r  rÚ   rk   ÚdictÚfromkeysrQ   Zint32r�   rÉ   )r©   r>   rD  r+   rL  rE  Zexpected_dfZpartition_col_typer%   r%   r&   Útest_s3_roundtrip_for_dirN  s*    
ÿýôz,TestParquetPyArrow.test_s3_roundtrip_for_dirc                 C   sH   t  d¡ tƒ }| |¡ t|ƒ}|r8ts8|j d¡|_t 	||¡ d S )Nr   r�   )
r)   r  r   r   r   r   r:   rk   ru   rv   )r©   r>   r�   ÚbufferZdf_from_bufr%   r%   r&   Útest_read_file_like_obj_supportu  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 sN0    Y  t jtdd�� | d¡ W d   ƒ n1 s†0    Y  d S )Nr   ÚHOMEZTestingUserÚUSERPROFILEz.*TestingUser.*r‡   z~/file.parquet)r)   r  Zsetenvr‰   ÚOSErrorr   r   )r©   r>   Zmonkeypatchr%   r%   r&   Útest_expand_user~  s    
&z#TestParquetPyArrow.test_expand_userc                 C   s>   ddg}|}|j ||d d� t||ƒ t|ƒj|jks:J ‚d S )Nrg   re   ©rÂ   ro   ©r   r†   r   Úshape)r©   rÅ   r+   rm   rÂ   rT   r%   r%   r&   Útest_partition_cols_supported‡  s
    
z0TestParquetPyArrow.test_partition_cols_supportedc                 C   s@   d}|g}|}|j ||d d� t||ƒ t|ƒj|jks<J ‚d S )Nrg   rW  rX  )r©   rÅ   r+   rm   rÂ   Úpartition_cols_listrT   r%   r%   r&   Útest_partition_cols_string�  s    
z-TestParquetPyArrow.test_partition_cols_stringc                 C   s   | S r    r%   )Úxr%   r%   r&   Ú<lambda>™  rí   zTestParquetPyArrow.<lambda>ra   zpathlib.Path)Úidsc           	      C   s<   d}|g}|}||ƒ}|j ||d� t|ƒj|jks8J ‚d S )Nr8   )rÂ   )r   r   rY  )	r©   rÅ   r+   r>   r8  rÂ   r[  rT   r|   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¼   r+  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]  r2   )Útyper„   râ   )	r   r;   r<   r„   ÚfieldZbool_rk   rg   r�   )r©   r+   r   rT   r„   Zout_dfr%   r%   r&   Útest_write_with_schema«  s
    
z)TestParquetPyArrow.test_write_with_schemac                 C   sœ   t  d¡ t tjg d¢dd�tjg d¢dd�tjg d¢dd�dœ¡}|rhtrht||| d	d
i¡d� n
t||ƒ t dtjg d¢dd�i¡}t||ƒ d S )Nr   r1   r  rD   ZUInt32rW   ra   r=  rV   r�   ©r{   rJ   rü   )r)   r  r;   r<   r³   r   r�   rk   )r©   r+   r�   rT   r%   r%   r&   Ú test_additional_extension_arrays³  s    
ýÿ
z3TestParquetPyArrow.test_additional_extension_arraysc                 C   s¬   t  d¡ t dtjg d¢dd�i¡}t d|¡�f |rjtrH| d¡}n| d|› d	�¡}|j d¡|_n| d|› d	�¡}t	|||d
� W d   ƒ n1 sž0    Y  d S )Nr   rJ   rW   ústring[pyarrow]rD   Ústring_storager�   zstring[ú]re  )
r)   r  r;   r<   r³   r�   r   rk   r:   r�   )r©   r+   rh  r�   rT   r{   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   r2   )r2   r3   )r4   r@   z
2012-01-01r4   ÚD)rI   rÏ   r@   )rV   rL   rM   )
r)   r  r;   r<   ZIntervalIndexrÍ   Úperiod_rangeZfrom_breaksrS   r�   r+  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.6rJ   z
2017-01-01Z1nsr3  ©rÏ   rI   Úversionr»   )r;   r<   rS   r�   )r©   r+   ÚverrT   r%   r%   r&   Útest_timestamp_nanosecondså  s    z-TestParquetPyArrow.test_timestamp_nanosecondsc           	      C   sÊ   t  dd¡ d|g }tj|d|id�}|d d … }trF|j d¡|_|jtj	j
kr¶zdd l}W n tyr   Y nD0 |jj |¡}| | ¡ d ¡}|j |¡|_|d j |¡|d< t||d	|d
� d S )Nr   ú11.0.0é   Úindex_as_col©rÇ   r  Únsr   é<   F)rs   r{   )r)   r  r;   r<   r   rÇ   Zas_unitÚtzinforh   ÚtimezoneÚutcÚpytzr›   r  Ú	utcoffsetZFixedOffsetÚtotal_secondsZ
tz_convertÚdtr�   )	r©   r+   rn   ÚidxrT   r{   r{  Úoffsetr  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\0    Y  t
|ƒdksvJ ‚d S )Nr   rJ   r4   rž   ©rJ   rÃ   r   ©rÄ   r2   )r)   r  r;   r<   rO   rP   ru   r€   r   r   rÙ   )r©   r+   rT   r|   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 sV0    Y  |r|t
|jt jjjƒs’J ‚nt
|jt jjjƒs’J ‚d S )Nr3   )r3  r4   )r7   r8   ÚCr9   rž   )r;   r<   rQ   rÖ   r×   rØ   ru   r€   r   r   r–   Z_mgrÚcoreZ	internalsZArrayManagerZBlockManager)r©   r+   Zusing_array_managerrT   r|   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rž|d
  	d¡|d
< |d  	d¡|d< |d  	t |j
ddd�¡¡|d< t||ddi|d� d S )Nr   rG   r4   r  r  r   r!  r"  )Ztypes_mapperrh   ztimestamp[us][pyarrow]ri   Úus)Úunitr  r  r   ©r'   r}   r{   )r   r;   rS   rÈ   ÚTableZfrom_pandasZ	to_pandasZ
ArrowDtyper	   rk   Ú	timestampr�   )r©   r+   rm   r   rT   r#  Zpa_tabler{   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rV|j d¡|_t	||ddi|d� d S )NrJ   r2   r3   r4   r@   Útest©rÉ   zint64[pyarrow])rÇ   rE   r   rr  r  r   rŠ  )
r;   r<   r=   rÚ   r   r   rš   rÇ   rk   r�   )r©   r+   rT   r{   r   r%   r%   r&   Ú,test_read_dtype_backend_pyarrow_config_indexC  s    ÿüz?TestParquetPyArrow.test_read_dtype_backend_pyarrow_config_indexr:   r   r2   rX   rY   z*https://github.com/apache/arrow/pull/44171)r‰   r   r   éÛ  c                 C   s2   t  tdƒttddƒƒdœ¡}||_t||ƒ d S )Nr?   r2   r@   r¶   r·   )r©   r+   r:   rT   r%   r%   r&   Útest_columns_dtypes_not_invalidS  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ã   ©r;   r<   r=   r�   r+  r%   r%   r&   Útest_empty_columnsk  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sNJ ‚d S )Nztest_df_metadata.pr2   ©r  Ztest_attributerž   )r;   r<   Úattrsr   r   )r©   rÅ   r+   r|   rT   Znew_dfr%   r%   r&   Útest_df_attrs_persistencep  s    
z,TestParquetPyArrow.test_df_attrs_persistencec           	      C   sÆ   |d }t jdddgiddgd�}|j||d� t  dd	¡� t||d�}W d   ƒ n1 s^0    Y  t jtjd
�}t jdddgi|t jddg|d�t jdgt	rª|sªt
n|d�d�}t ||¡ d S )Nztest_string_inference.prJ   r]  ÚyrK   )r  rÇ   rž   úfuture.infer_stringT©Zna_valuerD   )r  rE   rÇ   r:   )r;   r<   r   r�   r   ÚStringDtyperQ   rj   r=   r   r  ru   rv   )	r©   rÅ   r+   r�   r|   rT   r¡   rE   r{   r%   r%   r&   Útest_string_inferencex  s(    *
ÿÿüüz(TestParquetPyArrow.test_string_inferenceznot supported before 11.0c                 C   s’   dd l }|d }tjdtdƒgidd�}|j|| d| d¡fg¡d� t|ƒ}trjtjdd	gid
d�}ntjdtdƒgidd�}t	 
||¡ d S )Nr   z	decimal.prJ   z123.00rg  rD   rs  )r„   Z123zstring[python]r  )r   r;   r<   r   r   r„   Z
decimal128r   r   ru   rv   )r©   rÅ   r+   r|   rT   r¡   r{   r%   r%   r&   Útest_roundtrip_decimal�  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 sp0    Y  tj
dg d¢itjtjd�tjdgtjtjd�d�d	�}t ||¡ d S )
Nr   zlarge_string.prJ   )NrK   rV   rš  Tr›  rD   )r  rE   r:   )r   Zpyarrow.parquetr  r  r   Zlarge_stringr  r;   r�   r   r<   rœ  rQ   rj   r=   ru   rv   )r©   rÅ   r+   r	  r|   r  r¡   r{   r%   r%   r&   Ú#test_infer_string_large_string_typeœ  s    &
ýz6TestParquetPyArrow.test_infer_string_large_string_typeN)5r¯   r°   r±   r$  r%  r'  r,  r/  r2  r7  r)   r.   r/   r   Úskipifr
   r  r�   ÚpathlibÚPathr;  r?  r  rG  rK  rP  rR  rV  rZ  r\  r`  ra  rd  rf  rj  rm  rq  r�  r„  r‡  r�  r�  r"   r   ÚNotImplementedErrorrh   r’  r•  r˜  r�  r   rž  rŸ  r%   r%   r%   r&   r  Ê  sŠ   
ý

þþ			ÿ
!	ýþ	þöþ

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dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Ze
jjeƒ d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e
jjeƒ dd�d-d.„ ƒZd/S )0ÚTestParquetFastParquetc                 C   sF   |}t jdddd�}| d ¡}||d< t jddd�|d< t||ƒ d S )	NrG   r4   z
US/Easternr  r   r-  rH   Ú	timedelta)r;   rS   rÈ   r.  r�   )r©   r0   rm   rT   r#  r%   r%   r&   r$  ½  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 )
Nr?   r2   r@   r¶   rð   r   rX   rY   r‘  )r;   r<   rO   rP   rñ   r:   r¬   rh   )r©   r0   rT   Ú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 )Nr(  r@   r4   r)  r9   z9Cannot create parquet dataset with duplicate column namesr*  ©r©   r0   rT   r‹   r%   r%   r&   r,  Û  s    $z-TestParquetFastParquet.test_duplicate_columnsc                 C   s€   dd l }t|jƒtdƒk r@ttjƒtdƒkr@| tjjdd�¡ t 	dg d¢i¡}tj	ddtj
d	gid
d�}t|||dd� d S )Nr   ú	2024.11.0z2.0.0z$fastparquet uses np.float_ in numpy2r   rJ   )TNFrý   g        r6  rD   F)r{   rs   )r   r   rš   rQ   r-   r)   r.   r/   r;   r<   rj   r�   )r©   r0   r$   r   rT   r{   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 )NrJ   Z2013ÚMr4   rn  r0  z"Can't infer object conversion type)r;   r<   rl  r¬   rŠ   r¨  r%   r%   r&   r2  ò  s
    z'TestParquetFastParquet.test_unsupportedc                 C   s&   t  dt  tdƒ¡i¡}t||ƒ d S )NrJ   r?   )r;   r<   r>  rO   r�   )r©   r0   rT   r%   r%   r&   r?  ý  s    z'TestParquetFastParquet.test_categoricalc                 C   sx   dt tdƒƒi}t |¡}t ¡ �2}|j||d dd� t||dgd�}W d   ƒ n1 sZ0    Y  t|ƒdkstJ ‚d S )NrJ   r4   r2   )r'   ro   Zrow_group_offsetsr‚  rƒ  )	rO   rP   r;   r<   ru   r€   r   r   rÙ   )r©   r0   rL   rT   r|   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 )NrI  z/fastparquet.parquetrH  )ro   rH  rC  rJ  )r©   r>   rD  r0   rE  r%   r%   r&   rK  	  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sXJ ‚d S )Nrg   re   r   ©r'   rÂ   ro   r   Fr3   ©	r   r9  r|   Úexistsr   ZParquetFiler�   ZcatsrÙ   ©r©   rÅ   r0   rm   rÂ   rT   r   Zactual_partition_colsr%   r%   r&   rZ    s    ü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sTJ ‚d S )Nrg   r   r¬  r   Fr2   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sXJ ‚d S )Nrg   re   r   )r'   ro   Úpartition_onr   Fr3   r­  r¯  r%   r%   r&   Útest_partition_on_supported4  s    üz2TestParquetFastParquet.test_partition_on_supportedc                 C   sV   ddg}|}d}t jt|d��$ |j|dd ||d� W d   ƒ n1 sH0    Y  d S )Nrg   re   zYCannot use both partition_on and partition_cols. Use partition_cols for partitioning datar‡   r   )r'   ro   r°  rÂ   )r)   r‰   rŠ   r   )r©   rÅ   r0   rm   rÂ   rT   r‹   r%   r%   r&   Ú3test_error_on_using_partition_cols_and_partition_onD  s    ÿûzJTestParquetFastParquet.test_error_on_using_partition_cols_and_partition_onzfastparquet writes into Indexr   c                 C   s"   t  ¡ }| ¡ }t|||d� d S )Nre  )r;   r<   rÚ   r�   ©r©   r0   rT   r{   r%   r%   r&   ra  W  s    z+TestParquetFastParquet.test_empty_dataframec                 C   s~   dd l }t|jƒtdƒkr@t|jƒtdƒk r@| tjjdd�¡ d|g }tj|d|id�}| 	¡ }d	|j
_t|||d
� d S )Nr   z2022.12r©  zCfastparquet bug, see https://github.com/dask/fastparquet/issues/929r   rs  rt  ru  rÇ   re  )r   r   rš   r-   r)   r.   r/   r;   r<   rÚ   rÇ   rÉ   r�   )r©   r0   rn   r$   r   r  rT   r{   r%   r%   r&   r�  ^  s     ÿþþÿ	
z0TestParquetFastParquet.test_timezone_aware_indexc              
   C   sê   t  dddgi¡}t ¡ �¼}| |¡ tjtdd��H t t	¡� t
|ddd� W d   ƒ n1 sd0    Y  W d   ƒ n1 s‚0    Y  tjtdd�� t
|dd	d
� W d   ƒ n1 s¾0    Y  W d   ƒ n1 sÜ0    Y  d S )NrJ   r2   r3   z!not supported for the fastparquetr‡   r   T)r'   Zuse_nullable_dtypesr   r   )r;   r<   ru   r€   r   r)   r‰   rŠ   r¤   r¥   r   )r©   r0   rT   r|   r%   r%   r&   Ú&test_use_nullable_dtypes_not_supportedu  s    

Jz=TestParquetFastParquet.test_use_nullable_dtypes_not_supportedc              	   C   sŠ   t  d¡�l}t |¡ d¡ tjtdd�� t|dd� W d   ƒ n1 sL0    Y  t |¡j	dd� W d   ƒ n1 s|0    Y  d S )	Nútest.parquets   breakitÚ r‡   r   rž   F)Ú
missing_ok)
ru   r€   r¡  r¢  Úwrite_bytesr)   r‰   Ú	Exceptionr   Úunlink)r©   r|   r%   r%   r&   Ú$test_close_file_handle_on_read_error€  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}t| ¡ dƒ�}| |¡ W d   ƒ n1 sT0    Y  t||d�}W d   ƒ n1 s~0    Y  t ||¡ d S )Nr   r2   r6   r–  rµ  Úwbrž   )	r;   r<   ru   r€   r  Úencoder   r   rv   )r©   r'   rT   r|   rN   r¡   r%   r%   r&   Útest_bytes_file_nameˆ  s    (*z+TestParquetFastParquet.test_bytes_file_namec              	   C   s  t  d¡ tjddgddgdœd�}t ¡ �N}t jtdd��  |j|ddd	� W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  t ¡ �\}t	 
|¡ d
¡ t jtdd�� t|ddd	� W d   ƒ n1 sÖ0    Y  W d   ƒ n1 sô0    Y  d S )Nr   r   r2   r6   r–  zfilesystem is not implementedr‡   r5   ©r'   rA  rX   )r)   r  r;   r<   ru   r€   r‰   r£  r   r¡  r¢  r¸  r   ©r©   rT   r|   r%   r%   r&   Útest_filesystem_notimplemented’  s    

ÿL
ÿz5TestParquetFastParquet.test_filesystem_notimplementedc              	   C   s  t  d¡ tjddgddgdœd�}t ¡ �N}t jtdd��  |j|ddd	� W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  t ¡ �\}t	 
|¡ d
¡ t jtdd�� t|ddd	� W d   ƒ n1 sÖ0    Y  W d   ƒ n1 sô0    Y  d S )Nr   r   r2   r6   r–  z1filesystem must be a pyarrow or fsspec FileSystemr‡   r5   r¿  rX   )r)   r  r;   r<   ru   r€   r‰   rŠ   r   r¡  r¢  r¸  r   rÀ  r%   r%   r&   Útest_invalid_filesystem¢  s    

ÿL
ÿz.TestParquetFastParquet.test_invalid_filesystemc              	   C   s  t  d¡}tjddgddgdœd�}t ¡ �X}t jtdd��* |j|d| 	¡ d	d
id� W d   ƒ n1 sl0    Y  W d   ƒ n1 sŠ0    Y  t ¡ �f}t
 |¡ d¡ t jtdd��( t|d| 	¡ d	d
id� W d   ƒ n1 sê0    Y  W d   ƒ n1 �s
0    Y  d S )Nz
pyarrow.fsr   r2   r6   r–  z8storage_options not supported with a pyarrow FileSystem.r‡   r   r5   r[   )r'   rA  rH  rX   )r)   r  r;   r<   ru   r€   r‰   r£  r   ZLocalFileSystemr¡  r¢  r¸  r   )r©   Zpa_fsrT   r|   r%   r%   r&   Ú.test_unsupported_pa_filesystem_storage_options²  s2    

þüB
þüzETestParquetFastParquet.test_unsupported_pa_filesystem_storage_optionsc              	   C   sŽ   d}t  dttddƒƒi¡}t d¡�T}| |¡ tjt	|d�� t
|dd� W d   ƒ n1 sb0    Y  W d   ƒ n1 s€0    Y  d S )	NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.re   r2   r@   ztmp.parquetr‡   Únumpy)r  )r;   r<   rO   rP   ru   r€   r   r)   r‰   rŠ   r   )r©   r'   r‹   rT   r|   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ã   re  r”  r³  r%   r%   r&   r•  Ù  s    z)TestParquetFastParquet.test_empty_columnsN)r¯   r°   r±   r$  r§  r,  rª  r2  r?  r„  r)   r.   r  rK  rZ  r\  r±  r²  r   r   ra  r�  r´  r»  r¾  rÁ  rÂ  rÃ  rÅ  r•  r%   r%   r%   r&   r¤  ¼  s2   	



r¤  )	NNNNNTFTr3   )MÚ__doc__rh   Údecimalr   r  r   r9  r¡  rÄ  rQ   r)   Zpandas._configr   r   Zpandas._config.configr   Zpandas.compatr   Zpandas.compat.pyarrowr   r	   r
   r   r   Zpandasr;   Zpandas._testingZ_testingru   Zpandas.util.versionr   Zpandas.io.parquetr   r   r   r   r   r   r(   r›   r   r,   r.   ÚfilterwarningsZ
pytestmarkZfixturer"   r   r/   r'   r+   r0   r>   rU   rm   Únowry  rz  ÚminÚmaxÚstrptimern   r�   r†   rŒ   r‘   r“   r•   r—   rœ   r¢   r£   r¦   r§   r²   r  r¤  r%   r%   r%   r&   Ú<module>   sÐ   


ÿþ	ýýúþÿþðÿ





ùÿ
         ö
B	+  5   u