o
    �¨Êh$  ã                   @   sx   d Z ddlZddlZddlZddlmZ ddl	m
Z
mZ ddlmZmZ ej d¡Ze d¡ZejjG dd„ dƒƒZdS )	z test feather-format compat é    N)ÚArrowStringArrayÚStringArray)Úread_featherÚ
to_featherz=ignore:Passing a BlockManager to DataFrame:DeprecationWarningÚpyarrowc                   @   s²   e Zd Zdd„ Zdd„ Zdi f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jejjdd„ ƒƒZdd„ Zd d!„ Zd"d#„ Zd$d%„ ZdS )&ÚTestFeatherc              	   C   sv   t j||d��* t ¡ �}t||ƒ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s4w   Y  d S )N©Úmatch)ÚpytestÚraisesÚtmÚensure_cleanr   )ÚselfÚdfÚexcÚerr_msgÚpath© r   úN/var/www/html/env/lib/python3.10/site-packages/pandas/tests/io/test_feather.pyÚcheck_error_on_write   s   
ÿÿ"ÿz TestFeather.check_error_on_writec              	   C   sr   t  t¡�* t  ¡ �}t||ƒ W d   ƒ n1 sw   Y  W d   ƒ d S W d   ƒ d S 1 s2w   Y  d S ©N)r   Úexternal_error_raisedÚ	Exceptionr   r   )r   r   r   r   r   r   Úcheck_external_error_on_write   s   
ÿÿ"ÿz)TestFeather.check_external_error_on_writeNc                 K   sl   |d u r|  ¡ }t ¡ � }t||fi |¤Ž t|fi |¤Ž}t ||¡ W d   ƒ d S 1 s/w   Y  d S r   )Úcopyr   r   r   r   Úassert_frame_equal)r   r   ÚexpectedÚwrite_kwargsÚread_kwargsr   Úresultr   r   r   Úcheck_round_trip'   s   
"ûzTestFeather.check_round_tripc                 C   sD   d}t  g d¢¡ddt  d¡t g d¢¡fD ]	}|  |t|¡ qd S )Nz'feather only support IO with DataFrames©é   é   é   r"   ÚfooÚ20130101)ÚpdÚSeriesÚ	TimestampÚnpÚarrayr   Ú
ValueError)r   ÚmsgÚobjr   r   r   Ú
test_error2   s   ûùzTestFeather.test_errorc                 C   s:  t  tdƒttddƒƒt dd¡ d¡tjddd	d
�dtjdgg d¢dtjdgt  tdƒ¡t j	tt j
ddd�ƒd d�t j	tt j
dddd�ƒd d�t  d¡t jt  d¡gt j	tt j
dddd�ƒd d�dœ¡}t jdddd�|d< t jddd�|d< t  ddd¡|d< |jjjjdks‹J ‚| ¡ }d |jd < | j||d!� d S )"NÚabcr"   é   r$   é   Úu1g      @g      @Úfloat64©Údtypeg      ð?©TFTTFr&   )Úperiods)Úfreqz
US/Eastern)r8   ÚtzÚ20130103Úns)r8   r9   )ÚstringÚintÚuintÚfloatÚfloat_with_nullÚboolÚbool_with_nullÚcatÚdtÚdttzÚdt_with_nullÚdtnsÚ2013ÚM)r9   r8   r8   z1 dayÚ
timedeltasr   Ú	intervals)r"   rC   )r   )r'   Ú	DataFrameÚlistÚranger*   ÚarangeÚastypeÚnanÚCategoricalÚDatetimeIndexÚ
date_ranger)   ÚNaTÚperiod_rangeÚtimedelta_rangeÚinterval_rangerF   r6   r:   Úzoner   Úlocr    ©r   r   r   r   r   r   Ú
test_basic=   s@   

ÿþýÿëÿ
zTestFeather.test_basicc                 C   s2   t jt d¡ dd¡tdƒd� ¡ }|  |¡ d S )Né   r1   r$   Úaaa©Úcolumns)r'   rM   r*   rP   ÚreshaperN   r   r   ©r   r   r   r   r   Útest_duplicate_columnsc   s   $z"TestFeather.test_duplicate_columnsc              	   C   sP   t  tdƒttddƒƒtdƒttddƒƒdœ¡}ddg}| j||| |d	� d S )
Nr0   r"   r1   Úxyzé   )Úcol1Úcol2Úcol3Úcol4rg   ri   )r   ra   )r'   rM   rN   rO   r    )r   r   ra   r   r   r   Útest_read_columnsi   s   üÿzTestFeather.test_read_columnsc                 C   sB   t  ddgddgddgdœ¡}|dd	g }| j||dd	gd
� d S )Nr"   r#   ÚxÚyTF)ÚAÚBÚCro   rn   r`   )r'   rM   r    r\   r   r   r   Ú!test_read_columns_different_orderv   s   z-TestFeather.test_read_columns_different_orderc                 C   s    t  dg d¢i¡}|  |¡ d S )NÚa)rr   r"   ç       @)r'   rM   r   rc   r   r   r   Útest_unsupported_other|   s   z"TestFeather.test_unsupported_otherc                 C   s4   t  dt d¡i¡}| j|dd� | j|dd� d S )Nrn   i † T)Úuse_threadsF)r'   rM   r*   rP   r    rc   r   r   r   Útest_rw_use_threads�   s   zTestFeather.test_rw_use_threadsc                 C   óh   t jdt d¡ d¡ t jtdƒtd�t jdd„ tdƒD ƒtd�d	� 	¡ }t
 |jt¡}t
 ||¡ d S )
Nçš™™™™™ñ?éx   ©é   r1   ÚABCDr5   c                 S   ó   g | ]}d |› �‘qS ©zi-r   ©Ú.0Úir   r   r   Ú
<listcomp>Š   ó    z1TestFeather.test_path_pathlib.<locals>.<listcomp>r{   ©ra   Úindex)r'   rM   r*   rP   rb   ÚIndexrN   ÚobjectrO   Úreset_indexr   Úround_trip_pathlibr   r   r   ©r   r   r   r   r   r   Útest_path_pathlib†   ó   ýüzTestFeather.test_path_pathlibc                 C   rw   )
Nrx   ry   rz   r|   r5   c                 S   r}   r~   r   r   r   r   r   r‚   “   rƒ   z3TestFeather.test_path_localpath.<locals>.<listcomp>r{   r„   )r'   rM   r*   rP   rb   r†   rN   r‡   rO   rˆ   r   Úround_trip_localpathr   r   r   rŠ   r   r   r   Útest_path_localpath�   rŒ   zTestFeather.test_path_localpathc                 C   s`   t jdt d¡ d¡ t jtdƒtd�t jdd„ tdƒD ƒtd�d	� 	¡ }| j
|d
did� d S )Nrx   ry   rz   r|   r5   c                 S   r}   r~   r   r   r   r   r   r‚   œ   rƒ   z9TestFeather.test_passthrough_keywords.<locals>.<listcomp>r{   r„   Úversionr"   )r   )r'   rM   r*   rP   rb   r†   rN   r‡   rO   rˆ   r    rc   r   r   r   Útest_passthrough_keywords˜   s   ýüz%TestFeather.test_passthrough_keywordsc                 C   s\   t |ƒ}t|dƒ�}|j| ¡ d� t |jƒ}W d   ƒ n1 s!w   Y  t ||¡ d S )NÚrb)Úcontent)r   ÚopenÚserve_contentÚreadÚurlr   r   )r   Úfeather_fileÚ
httpserverr   ÚfÚresr   r   r   Útest_http_path    s   þzTestFeather.test_http_pathc                    s0  t  t jdtjdgdd�t jg d¢dd�t jdtjdgdd�t jg d	¢dd�g d
¢g d¢g d¢g d¢dœ¡}|dkrUttjg d¢tjd�ƒ}ttjddt jgtjd�ƒ}n/|dkrrddl	m
‰  ˆ t g d¢¡ƒ}ˆ t g d¢¡ƒ}ntt g d¢¡ƒ}tt g d¢¡ƒ}t ¡ �)}t||ƒ t  d|¡� t||d�}W d   ƒ n1 s¥w   Y  W d   ƒ n1 s´w   Y  t  t jdtjdgdd�t jg d¢dd�t jdtjdgdd�t jg d	¢dd�t jddt jgdd�t jg d¢dd�||dœ¡‰|dk�rddl	m
‰  t  ‡ ‡fdd„ˆjD ƒ¡‰t |ˆ¡ d S )Nr"   r$   ÚInt64r5   r!   ç      ø?ç      @ÚFloat64)r�   rs   rž   )TFNr7   )rr   ÚbÚc)rr   r    N)rr   r    r¡   ÚdÚer™   ÚgÚhÚpythonrr   r    r   r   )ÚArrowExtensionArrayzmode.string_storage©Údtype_backendTFÚbooleanc                    s$   i | ]}|ˆ t jˆ| d d�ƒ“qS )T)Úfrom_pandas)Úpar+   )r€   Úcol©r§   r   r   r   Ú
<dictcomp>Ý   s    ÿÿz?TestFeather.test_read_feather_dtype_backend.<locals>.<dictcomp>)r'   rM   r(   r*   rR   r   r+   Úobject_ÚNAÚpandas.arraysr§   r¬   r   r   r   r   Úoption_contextr   ra   r   )r   Ústring_storager©   r   Ústring_arrayÚstring_array_nar   r   r   r®   r   Útest_read_feather_dtype_backendª   s\   øÿ

ÿ€þøÿ
þÿz+TestFeather.test_read_feather_dtype_backendc                 C   s2   t jdg d¢it jg d¢dd�d�}|  |¡ d S )Nrr   r!   )r$   r1   é   Útest)Úname)r…   )r'   rM   r†   r    rc   r   r   r   Útest_int_columns_and_indexå   s   $z&TestFeather.test_int_columns_and_indexc              	   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"   r1   ztmp.featherr   Únumpyr¨   )r'   rM   rN   rO   r   r   r   r
   r   r,   r   )r   r-   r   r   r   r   r   Útest_invalid_dtype_backendé   s   ÿ
ÿþ"þz&TestFeather.test_invalid_dtype_backendc                 C   s€   |d }t jdddgid�}| |¡ t  dd¡� t|ƒ}W d   ƒ n1 s(w   Y  t jdddgidd	�}t ||¡ d S )
Nztest_string_inference.prr   rl   rm   )Údatazfuture.infer_stringTzstring[pyarrow_numpy])r¾   r6   )r'   rM   r   r³   r   r   r   )r   Útmp_pathr   r   r   r   r   r   r   Útest_string_inferenceô   s   

ÿz!TestFeather.test_string_inference)Ú__name__Ú
__module__Ú__qualname__r   r   r    r/   r]   rd   rk   rq   rt   rv   r‹   rŽ   r�   r
   ÚmarkÚnetworkÚ
single_cpur›   r·   r»   r½   rÀ   r   r   r   r   r      s*    &		;r   )Ú__doc__r¼   r*   r
   Úpandasr'   Úpandas._testingÚ_testingr   Úpandas.core.arraysr   r   Úpandas.io.feather_formatr   r   rÄ   ÚfilterwarningsÚ
pytestmarkÚimportorskipr¬   rÆ   r   r   r   r   r   Ú<module>   s    ÿ
