o
    Û­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'yu   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�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©ÚsilentÚarrayz4fastparquet is not installed or ArrayManager is used©ÚreasonúTODO(infer_string) fastparquet©r   Ústrict©ÚmarksÚpyarrowúpyarrow is not installed)Úparamsc                 C   ó   | j S ©N©Úparam©Úrequest© r(   úY/var/www/html/CropPilot/venv/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)   Úpa]   s   
r.   c                 C   sJ   t st d¡ ntddd�dkrt d¡ tƒ r#|  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   
ÿr3   c                   C   s"   t jg d¢ddœt  ddg¡d�S )N©é   é   é   Úfoo©ÚAÚBr:   r;   ©Úcolumns)ÚpdÚ	DataFrameÚIndexr(   r(   r(   r)   Ú	df_compatq   s   "rA   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Úabcr5   é   ç      @ç      @Úfloat64©Údtype©TFTÚ20130101r7   ©Úperiods)ÚaÚbÚdÚeÚf)r>   r?   ÚlistÚrangeÚnpÚarangeÚ
date_range)Údfr(   r(   r)   Údf_cross_compatv   s   úÿrX   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 )NrB   rM   Úc©rM   NrY   )ó   fooó   bars   baz©r8   ÚbarÚbazr5   rC   r7   é   Úu1rD   rE   rF   rG   ç       @ç      @rI   rJ   rK   Ú20130103)ÚstringÚstring_with_nanÚstring_with_noneÚbytesÚunicodeÚintÚuintÚfloatÚfloat_with_nanÚboolÚdatetimeÚdatetime_with_nat)r>   r?   rR   rT   ÚnanrS   rU   ÚastyperV   Ú	TimestampÚNaTr(   r(   r(   r)   Údf_fullˆ   s$   

ýôÿru   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   rv   r6   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 )Nrf   ©r5   rf   )Úcheck_namesÚ
check_likeÚcheck_dtype)rS   r   r   ÚlocÚtmÚassert_frame_equal)ÚrepeatÚ_Úactual©r{   rz   ry   rW   ÚexpectedÚpathÚread_kwargsÚwrite_kwargsr(   r)   ÚcompareÛ   s   
ûúz!check_round_trip.<locals>.compare)r}   Úensure_clean)rW   r*   r„   r†   r…   rƒ   ry   rz   r{   r   r‡   r(   r‚   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)r„   rƒ   Ú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'©Úmatchr8   r^   )r,   ÚraisesÚ
ValueErrorr‰   )rA   Úmsgr(   r(   r)   Útest_invalid_engine  s   "ÿr—   c                 C   sP   |rt s| j d¡| _t dd¡� t| ƒ W d   ƒ d S 1 s!w   Y  d S )NÚstrúio.parquet.enginer   )r   r=   rr   r>   Úoption_contextr‰   )rA   r.   Úusing_infer_stringr(   r(   r)   Útest_options_py  s
   
"ÿrœ   c                 C   ó:   t  dd¡� t| ƒ W d   ƒ d S 1 sw   Y  d S )Nr™   r   ©r>   rš   r‰   )rA   r3   r(   r(   r)   Útest_options_fp  ó   
"ÿrŸ   c                 C   r�   )Nr™   Úautorž   )rA   r3   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   r>   rš   )r3   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_message2  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*   rw   ©r*   rM   rO   )r*   r=   ©r}   rˆ   r   r   r~   ©rX   r.   r3   rW   r„   Úresultr(   r(   r)   Útest_cross_engine_pa_fp]  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_pak  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 )NrM   r4   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)r>   r?   r}   rˆ   Úassert_produces_warningÚFutureWarningr   )r*   rW   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   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’   ©rw   )r}   rˆ   r,   r”   r   )ÚselfrW   r*   ÚexcÚerr_msgr„   r(   r(   r)   Úcheck_error_on_writeŠ  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¾   )r}   rˆ   Úexternal_error_raisedr   )r¿   rW   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 )Nr4   r5   r8   rJ   z+to_parquet only supports IO with DataFrames)r>   ÚSeriesrs   rT   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 )NrB   r5   rC   ©re   rj   r8   r^   ©r>   r?   rR   rS   r=   r‰   )r¿   r*   rW   r(   r(   r)   Útest_columns_dtypes£  s   
zTestBasic.test_columns_dtypesrw   )NÚgzipÚsnappyÚbrotlic                 C   s(   t  dg d¢i¡}t||d|id� d S )Nr:   r4   rw   ©r†   ©r>   r?   r‰   )r¿   r*   rw   rW   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 )NrB   r5   rC   rÌ   re   r=   ©rƒ   r…   ©r>   r?   rR   rS   r‰   )r¿   r*   rW   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 )NrC   Úaabb)rj   Úpartrj   r   r5   Úpartition_colsrÙ   )rÙ   ú==rM   )Úfiltersr=   )r„   rƒ   r†   r…   r   rÖ   )r¿   r*   Útmp_pathrW   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 ]}||_t|t jƒr7|j d ¡|_t|||d
� q%g d¢|_d|j_	t||ƒ d S )Nr   r:   r4   )r6   r7   rC   rJ   r7   rK   rB   )r5   r7   rC   )ry   )r   r5   r6   r8   )
r>   r?   r‰   rV   rR   Úindexr£   ÚDatetimeIndexÚ
_with_freqÚname)r¿   r*   ry   rW   Ú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 )Nr:   r4   ©)rM   r5   )rM   r6   )rN   r5   )r>   r?   Ú
MultiIndexÚfrom_tuplesrß   r‰   )r¿   r.   r*   rW   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)Úfreqr6   r7   ÚABCr<   ÚLevel1ÚLevel2ÚlevelÚdate)r�   r=   r:   r;   ©r…   rƒ   )r>   rV   r?   rT   ÚrandomÚdefault_rngÚstandard_normalÚlenrR   ræ   Úfrom_productÚcopyrß   r‰   )r¿   r.   r*   ÚdatesrW   Ú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 )Nr4   )ÚqÚrÚs)rM   rN   F)rw   rß   T)Údrop©r†   rƒ   )ÚzyxÚwvuÚtsr©rß   ©r^   r^   r_   r_   r8   r8   Ú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  )r>   r?   Úreset_indexr‰   rR   rS   )r¿   r*   rW   r†   rƒ   Ú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å   r6   )rC   r7   r<   r   úColumn name must be a stringr   )r>   ræ   rç   r?   rT   rñ   rò   ró   rÂ   Ú	TypeErrorr‰   )r¿   r*   Ú
mi_columnsrW   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  )r5   r6   r5   r6   r5   r6   r5   r6   r6   ©r	  r	  r<   rì   rí   r   zColumn namer   )r>   r?   rT   rñ   rò   ró   r=   r�   rÂ   r•   r‰   ©r¿   r*   r  rW   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  r6   r  r<   Ú	ColLevel1Ú	ColLevel2)	r>   r?   rT   rñ   rò   ró   r=   r�   r‰   ©r¿   r.   r*   r  rW   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_   r8   r  r6   ©r	  rC   r<   Ú	StringCol)	r>   r?   rT   rñ   rò   ró   r=   râ   r‰   r  r(   r(   r)   Útest_write_column_index_stringO  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©r5   r6   r7   rC   r6   r  r<   ÚNonStringColr   r  )r>   r?   rT   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 	¡ �}| 
||¡ 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   ©r5   r6   r7   NÚint64Úuint8)rM   rN   rY   N)TFTNr  )ç      ð?rb   rc   NÚfloat32rF   )rM   rN   rY   rO   rP   rQ   Úgr²   Únumpy_nullable©r*   Údtype_backendrM   ÚInt64rG   ÚUInt8re   ÚbooleanÚFloat32ÚFloat64rY   r5   )Úaxis)r,   Úimportorskipr1   r2   r0   r   Útabler   r}   rˆ   Úwrite_tabler   rH   rT   r>   r?   rþ   r~   )
r¿   r*   r'   Úpqr1   r1  r„   Úresult1Úresult2rƒ   r(   r(   r)   Útest_dtype_backendm  sH   
ÿ
÷ÿ
üùÿzTestBasic.test_dtype_backendrH   )	r*  r+  r,  Úobjectzdatetime64[ns, UTC]rl   z	period[D]r.  re   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ÚvaluerG   rl   r.  r)  r'  rð   )r>   r?   r   r‰   )r¿   r.   rH   rW   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.w   Y  t ||¡ d S )
Nr¡   ÚioÚdataÚparquetzsimple.parquetÚrb)Úmode)Úcontentr²   )	r,   r0  ÚopenÚserve_contentÚreadr   Úurlr}   r~   )r¿   Ú
httpserverÚdatapathrA   r*   rQ   rW   r(   r(   r)   Útest_parquet_read_from_url¿  s   
þz$TestBasic.test_parquet_read_from_urlN)rÅ   rÆ   rÇ   rË   rÎ   r,   r1   ÚparametrizerÔ   r×   rÞ   rä   rè   rú   r  r  r  r  r  r   r6  r9  ÚnetworkÚ
single_cpurF  r(   r(   r(   r)   rÈ   —  s2    
		 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 )NrJ   r7   úEurope/Brussels©rL   ÚtzÚdatetime_tz©TNTÚbool_with_none)r>   rV   rá   r‰   )r¿   r.   ru   rW   Ú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 )
NrJ   r7   rK  rL  rN  re   rj   r=   rÕ   )r>   rV   r‰   )r¿   r.   ru   rW   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²   rx   )	r   r£   rh   r   r   rö   r|   r}   r~   )r¿   r.   ru   Ú	buf_bytesÚ
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é   rC   r7   Úaaar<   zDuplicate column names found©	r>   r?   rT   rU   ÚreshaperR   rö   rÂ   r•   ©r¿   r.   rW   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 )NrM   ú1 dayr7   rK   )r>   r?   Útimedelta_ranger‰   r\  r(   r(   r)   Útest_timedeltaõ  ó   z!TestParquetPyArrow.test_timedeltac                 C   s&   t  dg d¢i¡}|  ||tj¡ d S )NrM   ©rM   r5   rb   )r>   r?   rÄ   r   ÚArrowExceptionr\  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 )Nr6   é
   rG   Úfp16©r;  r=   )
rT   rU   Úfloat16r>   r?   r
   rÄ   r   rc  r‰   )r¿   r.   r;  rW   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 )Nr6   re  rG   rf  rg  )r„   r*   )rT   rU   rh  r>   r?   r}   rˆ   rÃ   r   rc  r   Úosr„   Úisfile)r¿   r.   rj  r;  rW   Ú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 )
NÚabcdef)r^   r8   r8   r^   Nr^   r]   rG   )rM   rN   rY   rM   rY   rN   )rN   rY   rO   T)Ú
categoriesÚordered©rM   rN   rY   )r>   r?   ÚCategoricalrR   ÚCategoricalDtyper‰   r\  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©r„   r…   r†   r(   )r,   r0  ÚS3FileSystemr‰   râ   )r¿   rA   Ús3_public_bucketr.   Ús3sorv  Ú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://rx  ry  ©r‰   râ   )r¿   rA   r{  r.   r|  r(   r(   r)   Útest_s3_roundtripB  s   
ûz$TestParquetPyArrow.test_s3_roundtripÚpartition_colr:   c              
   C   sr   t  d¡ | ¡ }|r | t |tj¡¡}d}||  |¡||< t|||d|j	› d�d|i|d |dœddd	� d S )
Nrv  Úcategoryr�  z/parquet_dirr€  )rÚ   rw   r€  Tr5   )rƒ   r„   r…   r†   rz   r   )
r,   r0  rö   rr   ÚdictÚfromkeysrT   Úint32r‰   râ   )r¿   rA   r{  r.   r„  r|  Úexpected_dfÚpartition_col_typer(   r(   r)   Útest_s3_roundtrip_for_dirN  s*   
ÿý
ôz,TestParquetPyArrow.test_s3_roundtrip_for_dirc                 C   sH   t  d¡ tƒ }| |¡ t|ƒ}|rts|j d¡|_t 	||¡ d S )Nr   r˜   )
r,   r0  r   r   r   r   r=   rr   r}   r~   )r¿   rA   r›   ÚbufferÚ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 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,   r0  Úsetenvr”   ÚOSErrorr   r   )r¿   rA   Ú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 )Nrn   rj   ©rÚ   rw   ©r   r‘   r   Úshape)r¿   rÝ   r.   ru   rÚ   rW   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 )Nrn   r–  r—  )r¿   rÝ   r.   ru   rÚ   Úpartition_cols_listrW   r(   r(   r)   Útest_partition_cols_string�  s   
z-TestParquetPyArrow.test_partition_cols_stringc                 C   s   | S r#   r(   )Úxr(   r(   r)   Ú<lambda>™  s    zTestParquetPyArrow.<lambda>re   zpathlib.Path)Úidsc           	      C   s<   d}|g}|}||ƒ}|j ||d� t|ƒj|jksJ ‚d S )Nr;   )rÚ   )r   r   r˜  )	r¿   rÝ   r.   rA   rj  rÚ   rš  rW   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œ  r5   )ÚtyperŽ   rÿ   )	r   r>   r?   rŽ   ÚfieldÚbool_rr   rn   r‰   )r¿   r.   r   rW   rŽ   Ú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œ¡}|r4tr4t||| d	d
i¡d� nt||ƒ t dtjg d¢dd�i¡}t||ƒ d S )Nr   r4   r*  rG   ÚUInt32rZ   re   rr  rY   r˜   ©rƒ   rM   r!  )r,   r0  r>   r?   rÉ   r   r‰   rr   )r¿   r.   r›   rW   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|¡�4 |r5tr$| d¡}n	| d|› d	�¡}|j d¡|_n	| d|› d	�¡}t	|||d
� W d   ƒ d S 1 sPw   Y  d S )Nr   rM   rZ   ústring[pyarrow]rG   Ústring_storager˜   zstring[ú]r§  )
r,   r0  r>   r?   rÉ   rš   r   rr   r=   r‰   )r¿   r.   rª  r›   rW   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   r5   )r5   r6   )r7   rC   z
2012-01-01r7   ÚD)rL   rê   rC   )rY   rO   rP   )
r,   r0  r>   r?   ÚIntervalIndexrç   Úperiod_rangeÚfrom_breaksrV   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.6rM   z
2017-01-01Ú1nsre  ©rê   rL   ÚversionrÒ   )r>   r?   rV   r‰   )r¿   r.   ÚverrW   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r#|j d¡|_|jtj	j
kr[zdd l}W n	 ty9   Y n"w |jj |¡}| | ¡ d ¡}|j |¡|_|d j |¡|d< t||d	|d
� d S )Nr   ú11.0.0é   Úindex_as_col©rß   r;  Únsr   é<   F)r{   rƒ   )r,   r0  r>   r?   r   rß   Úas_unitÚtzinforo   ÚtimezoneÚutcÚpytzr©   rM  Ú	utcoffsetÚFixedOffsetÚtotal_secondsÚ
tz_convertÚdtr‰   )	r¿   r.   rv   ÚidxrW   rƒ   rÁ  ÚoffsetrM  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   rM   r7   r²   ©rM   rÛ   r   ©rÜ   r5   )r,   r0  r>   r?   rR   rS   r}   rˆ   r   r   rô   )r¿   r.   rW   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 s+w   Y  |r?t
|jt jjjƒs=J ‚d S t
|jt jjjƒsJJ ‚d S )Nr6   )re  r7   )r:   r;   ÚCr<   r²   )r>   r?   rT   rñ   rò   ró   r}   rˆ   r   r   r£   Ú_mgrÚcoreÚ	internalsÚArrayManagerÚBlockManager)r¿   r.   Úusing_array_managerrW   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rO|d
  	d¡|d
< |d  	d¡|d< |d  	t |j
ddd�¡¡|d< t||ddi|d� d S )Nr   rJ   r7   rK  rL  rN  rO  rP  )Útypes_mapperro   ztimestamp[us][pyarrow]rp   Úus)ÚunitrM  r)  r   ©r*   r…   rƒ   )r   r>   rV   rá   ÚTableÚfrom_pandasÚ	to_pandasÚ
ArrowDtyper	   rr   Ú	timestampr‰   )r¿   r.   ru   r   rW   rQ  Ú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r+|j d¡|_t	||ddi|d� d S )NrM   r5   r6   r7   rC   Útest©râ   zint64[pyarrow])rß   rH   r   r·  r)  r   rØ  )
r>   r?   r@   rö   r   r   r¨   rß   rr   r‰   )r¿   r.   rW   rƒ   r   r(   r(   r)   Ú,test_read_dtype_backend_pyarrow_config_indexC  s   ÿ
üz?TestParquetPyArrow.test_read_dtype_backend_pyarrow_config_indexr=   r   r5   r[   r\   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 )NrB   r5   rC   rÌ   rÍ   )r¿   r.   r=   rW   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 )Nrr  ú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s'J ‚d S )Nztest_df_metadata.pr5   ©r;  Útest_attributer²   )r>   r?   Úattrsr   r   )r¿   rÝ   r.   r„   rW   Ú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/w   Y  t jtjd
�}t jdddgi|t jddg|d�t jdgt	rU|sUt
n|d�d�}t ||¡ d S )Nztest_string_inference.prM   rœ  ÚyrN   )r;  rß   r²   úfuture.infer_stringT©Úna_valuerG   )r;  rH   rß   r=   )r>   r?   r   rš   r   ÚStringDtyperT   rq   r@   r   r7  r}   r~   )	r¿   rÝ   r.   r›   r„   rW   rµ   rH   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r5tjdd	gid
d�}ntjdtdƒgidd�}t	 
||¡ d S )Nr   z	decimal.prM   z123.00r©  rG   r¸  )rŽ   Ú123zstring[python]r7  )r   r>   r?   r   r   rŽ   Ú
decimal128r   r   r}   r~   )r¿   rÝ   r.   r„   rW   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 s8w   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.prM   )NrN   rY   rî  Trï  rG   )r;  rH   r=   )r   Úpyarrow.parquetr<  r1  r   Úlarge_stringr2  r>   rš   r   r?   rñ  rT   rq   r@   r}   r~   )r¿   rÝ   r.   r3  r„   r1  rµ   rƒ   r(   r(   r)   Ú#test_infer_string_large_string_typeœ  s   
ÿ
ýz6TestParquetPyArrow.test_infer_string_large_string_typeN)5rÅ   rÆ   rÇ   rR  rS  rW  r]  r`  rd  ri  r,   r1   r2   r   Úskipifr
   rG  r˜   ÚpathlibÚPathrn  ru  rI  r  rƒ  r‹  rŽ  r•  r™  r›  rŸ  r   r¥  r¨  r¬  r±  r¶  rÉ  rÌ  rÔ  rß  râ  r%   r   ÚNotImplementedErrorro   rä  rç  rì  rò  r   rõ  rø  r(   r(   r(   r)   rJ  Ê  sŒ    
ý

þþ			ÿ
!	ýþ	þöþ

rJ  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 )	NrJ   r7   z
US/EasternrL  rN  r^  rK   Ú	timedelta)r>   rV   rá   r_  r‰   )r¿   r3   ru   rW   rQ  r(   r(   r)   rR  ½  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 )
NrB   r5   rC   rÌ   r  r   r[   r\   rã  )r>   r?   rR   rS   r  r=   rÂ   ro   )r¿   r3   rW   Ú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 )NrX  rC   r7   rY  r<   z9Cannot create parquet dataset with duplicate column namesrZ  ©r¿   r3   rW   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   rM   )TNFr$  g        rh  rG   F)rƒ   r{   )r   r   r¨   rT   r0   r,   r1   r2   r>   r?   rq   r‰   )r¿   r3   r'   r   rW   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 )NrM   Ú2013ÚMr7   r³  rb  z"Can't infer object conversion type)r>   r?   r¯  rÂ   r•   r  r(   r(   r)   rd  ò  s
   z'TestParquetFastParquet.test_unsupportedc                 C   s&   t  dt  tdƒ¡i¡}t||ƒ d S )NrM   rB   )r>   r?   rs  rR   r‰   )r¿   r3   rW   r(   r(   r)   ru  ý  ra  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 )NrM   r7   r5   )r*   rw   Úrow_group_offsetsrÊ  rË  )	rR   rS   r>   r?   r}   rˆ   r   r   rô   )r¿   r3   rO   rW   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 )Nr�  z/fastparquet.parquetr€  )rw   r€  ry  r‚  )r¿   rA   r{  r3   r|  r(   r(   r)   rƒ  	  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 )Nrn   rj   r   ©r*   rÚ   rw   r   Fr6   ©	r   rk  r„   Úexistsr   ÚParquetFiler˜   Úcatsrô   ©r¿   rÝ   r3   ru   rÚ   rW   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 )Nrn   r   r  r   Fr5   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 )Nrn   rj   r   )r*   rw   Úpartition_onr   Fr6   r  r  r(   r(   r)   Útest_partition_on_supported4  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 )Nrn   rj   zYCannot use both partition_on and partition_cols. Use partition_cols for partitioning datar’   r   )r*   rw   r  rÚ   )r,   r”   r•   r   )r¿   rÝ   r3   ru   rÚ   rW   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 )Nr§  )r>   r?   rö   r‰   ©r¿   r3   rW   rƒ   r(   r(   r)   r   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   r¸  r¹  rº  rß   r§  )r   r   r¨   r0   r,   r1   r2   r>   r?   rö   rß   râ   r‰   )r¿   r3   rv   r'   r   rÇ  rW   rƒ   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 )NrM   r5   r6   z!not supported for the fastparquetr’   r   T)r*   Úuse_nullable_dtypesr   r(  )r>   r?   r}   rˆ   r   r,   r”   r•   rº   r»   r   )r¿   r3   rW   r„   r(   r(   r)   Ú&test_use_nullable_dtypes_not_supportedu  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)
r}   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| ¡ dƒ�}| |¡ W d   ƒ n1 s*w   Y  t||d�}W d   ƒ n1 s?w   Y  t ||¡ d S )Nr   r5   r9   rè  r  Úwbr²   )	r>   r?   r}   rˆ   r@  Úencoder   r   r~   )r¿   r*   rW   r„   rQ   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   r5   r9   rè  zfilesystem is not implementedr’   r8   ©r*   rw  r[   )r,   r0  r>   r?   r}   rˆ   r”   rü  r   rú  rû  r  r   ©r¿   rW   r„   r(   r(   r)   Útest_filesystem_notimplemented’  ó(   

ÿý€ÿ
ÿýþ"þz5TestParquetFastParquet.test_filesystem_notimplementedc              	   C   r  )Nr   r   r5   r9   rè  z1filesystem must be a pyarrow or fsspec FileSystemr’   r8   r   r[   )r,   r0  r>   r?   r}   rˆ   r”   r•   r   rú  rû  r  r   r!  r(   r(   r)   Útest_invalid_filesystem¢  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   r5   r9   rè  z8storage_options not supported with a pyarrow FileSystem.r’   r   r8   r^   )r*   rw  r€  r[   )r,   r0  r>   r?   r}   rˆ   r”   rü  r   ÚLocalFileSystemrú  rû  r  r   )r¿   Úpa_fsrW   r„   r(   r(   r)   Ú.test_unsupported_pa_filesystem_storage_options²  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.rj   r5   rC   ztmp.parquetr’   Únumpy)r)  )r>   r?   rR   rS   r}   rˆ   r   r,   r”   r•   r   )r¿   r*   r–   rW   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 )Nrr  rå  rá  r  r§  ræ  r  r(   r(   r)   rç  Ù  s   z)TestParquetFastParquet.test_empty_columnsN)rÅ   rÆ   rÇ   rR  r   r]  r  rd  ru  rÌ  r,   r1   rI  rƒ  r™  r›  r  r  rù  r   r   rÉ  r  r  r  r"  r$  r'  r)  rç  r(   r(   r(   r)   rý  ¼  s4    	



rý  )	NNNNNTFTr6   )MÚ__doc__ro   Údecimalr   r:  r   rk  rú  r(  rT   r,   Úpandas._configr   r   Úpandas._config.configr   Úpandas.compatr   Úpandas.compat.pyarrowr   r	   r
   r   r   Úpandasr>   Úpandas._testingÚ_testingr}   Úpandas.util.versionr   Úpandas.io.parquetr   r   r   r   r   r   r+   r©   r   r/   r1   ÚfilterwarningsÚ
pytestmarkÚfixturer%   rù  r2   r*   r.   r3   rA   rX   ru   Únowr¿  rÀ  ÚminÚmaxÚstrptimerv   r‰   r‘   r—   rœ   rŸ   r¢   r¤   r°   r¶   r·   r¼   r½   rÈ   rJ  rý  r(   r(   r(   r)   Ú<module>   sÖ    ÿÿ
ÿþ	ýýúþÿþðÿ





ùÿ

öB	+  5   u