U
    ¾mœdà#  ã                   @   sp   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dd�ZejjG dd	„ d	ƒƒZdS )
z test feather-format compat é    N)ÚArrowStringArrayÚStringArray)Úread_featherÚ
to_featherÚpyarrowz1.0.1)Z
minversionc                   @   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dd„ Zdd„ Zejjejd d!d"�d#d$„ ƒƒZd%d&„ Zd'd(„ ZdS ))ÚTestFeatherc              
   C   s<   t j||d��$ t ¡ �}t||ƒ W 5 Q R X W 5 Q R X d S )N©Úmatch)ÚpytestÚraisesÚtmÚensure_cleanr   )ÚselfÚdfÚexcÚerr_msgÚpath© r   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/tests/io/test_feather.pyÚcheck_error_on_write   s    
z TestFeather.check_error_on_writec              
   C   s8   t  t¡�$ t  ¡ �}t||ƒ W 5 Q R X W 5 Q R X d S ©N)r   Z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   sJ   |d kr|}t  ¡ �,}t||f|Ž t|f|Ž}t  ||¡ W 5 Q R X d S r   )r   r   r   r   Úassert_frame_equal)r   r   ÚexpectedÚwrite_kwargsZread_kwargsr   Úresultr   r   r   Úcheck_round_trip#   s    
zTestFeather.check_round_tripc              	   C   sH   d}t  dddg¡ddt  d¡t dddg¡fD ]}|  |t|¡ q0d S )Nz'feather only support IO with DataFramesé   é   é   ÚfooÚ20130101)ÚpdÚSeriesÚ	TimestampÚnpÚarrayr   Ú
ValueError)r   ÚmsgÚobjr   r   r   Ú
test_error-   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dddg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t‚|  |¡ d S )NÚabcr   é   r    é   Úu1g      @g      @Zfloat64©Údtypeg      ð?TFr"   ©Úperiods)Úfreqz
US/Eastern)r3   ÚtzZ20130103Úns)r3   r4   )ÚstringÚintZuintÚfloatZfloat_with_nullÚboolZbool_with_nullÚcatÚdtÚdttzZdt_with_nullZdtnsZ2013ÚM)r4   r3   r3   z1 dayZ
timedeltasr   Z	intervals)r#   Ú	DataFrameÚlistÚranger&   ÚarangeZastypeÚnanZCategoricalZDatetimeIndexÚ
date_ranger%   ZNaTZperiod_rangeZtimedelta_rangeZinterval_ranger=   r1   r5   ÚzoneÚAssertionErrorr   ©r   r   r   r   r   Ú
test_basic8   s@    

 ÿþý ÿëÿzTestFeather.test_basicc                 C   s2   t jt d¡ dd¡tdƒd� ¡ }|  |¡ d S )Né   r-   r    Zaaa©Úcolumns)r#   r?   r&   rB   Úreshaper@   Úcopyr   rG   r   r   r   Útest_duplicate_columns[   s    $z"TestFeather.test_duplicate_columnsc                 C   s2   t  t d¡ dd¡¡ ¡ }d}|  |t|¡ d S )NrI   r-   r    ú%feather must have string column names)r#   r?   r&   rB   rL   rM   r   r(   )r   r   r)   r   r   r   Útest_stringify_columnsa   s    z"TestFeather.test_stringify_columnsc              	   C   sP   t  tdƒttddƒƒtdƒttddƒƒdœ¡}ddg}| j||| |d	� d S )
Nr,   r   r-   Zxyzé   )Úcol1Zcol2Úcol3Zcol4rR   rS   )r   rK   )r#   r?   r@   rA   r   )r   r   rK   r   r   r   Útest_read_columnsf   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ÚCrX   rW   rJ   )r#   r?   r   )r   r   r   r   r   r   Ú!test_read_columns_different_orders   s    z-TestFeather.test_read_columns_different_orderc                 C   s"   t  ddddgi¡}|  |¡ d S )NÚar   ç       @)r#   r?   r   rG   r   r   r   Útest_unsupported_othery   s    z"TestFeather.test_unsupported_otherc                 C   s4   t  dt d¡i¡}| j|dd� | j|dd� d S )NrW   i † T)Zuse_threadsF)r#   r?   r&   rB   r   rG   r   r   r   Útest_rw_use_threads~   s    zTestFeather.test_rw_use_threadsc              	   C   sÊ   t  ddddgi¡}|  |¡ d}dddgt jddd�td	ƒdddgt j d
ddg¡fD ]}||_|  |t	|¡ qXdddg|_d|j_
d}|  |t	|¡ dddg|_t j d
g¡|_d}|  |t	|¡ d S )NrW   r   r   r    zsfeather does not support serializing .* for the index; you can \.reset_index\(\) to make the index into column\(s\)r-   r"   r2   r,   )r[   r   )r[   r   )Úbr   r   r!   z=feather does not serialize index meta-data on a default indexrO   )r#   r?   r   rD   r@   Z
MultiIndexÚfrom_tuplesÚindexr   r(   ÚnamerK   )r   r   r)   ra   r   r   r   Útest_write_with_indexƒ   s(    
ÿûz!TestFeather.test_write_with_indexc                 C   s*   t  ¡  ¡ }t  |jt¡}t  ||¡ d S r   )r   ÚmakeDataFrameÚreset_indexZround_trip_pathlibr   r   r   ©r   r   r   r   r   r   Útest_path_pathlib¢   s    zTestFeather.test_path_pathlibc                 C   s*   t  ¡  ¡ }t  |jt¡}t  ||¡ d S r   )r   rd   re   Zround_trip_localpathr   r   r   rf   r   r   r   Útest_path_localpath§   s    zTestFeather.test_path_localpathc                 C   s"   t  ¡  ¡ }| j|ddid� d S )NÚversionr   )r   )r   rd   re   r   rG   r   r   r   Útest_passthrough_keywords¬   s    z%TestFeather.test_passthrough_keywordsúkhttps://raw.githubusercontent.com/pandas-dev/pandas/main/pandas/tests/io/data/feather/feather-0_3_1.featherT)ÚurlZcheck_before_testc                 C   s$   d}t |ƒ}t |ƒ}t ||¡ d S )Nrk   )r   r   r   )r   Zfeather_filerl   r   Úresr   r   r   Útest_http_path°   s
    ÿzTestFeather.test_http_pathc                    sò  t  d¡‰t tjdtjdgdd�tjdddgdd�tjdtjdgd	d�tjdd
dgd	d�ddd gdddgdddgddd gdœ¡}|dkrÂttjdddgtj	d�ƒ}ttjddtj
gtj	d�ƒ}n(tˆ dddg¡ƒ}tˆ ddd g¡ƒ}t ¡ �4}t||ƒ t d|¡� t||d�}W 5 Q R X W 5 Q R X t tjdtjdgdd�tjdddgdd�tjdtjdgd	d�tjdd
dgd	d�tjddtj
gdd�tjdddgdd�||dœ¡‰|dk�râddlm‰  t ‡ ‡‡fdd„ˆjD ƒ¡‰t |ˆ¡ d S )Nr   r   r    ZInt64r0   r   g      ø?g      @ZFloat64r\   TFr[   r_   Úc)r[   r_   ro   ÚdÚeÚfÚgÚhÚpythonzmode.string_storage©Údtype_backendÚbooleanr   )ÚArrowExtensionArrayc                    s$   i | ]}|ˆ ˆj ˆ| d d�ƒ“qS )T)Zfrom_pandas)r'   )Ú.0Úcol©ry   r   Úpar   r   Ú
<dictcomp>ð   s   ÿ z?TestFeather.test_read_feather_dtype_backend.<locals>.<dictcomp>)r
   Úimportorskipr#   r?   r$   r&   rC   r   r'   Zobject_ZNAr   r   r   r   Zoption_contextr   Zpandas.arraysry   rK   r   )r   Zstring_storagerw   r   Zstring_arrayZstring_array_nar   r   r   r|   r   Útest_read_feather_dtype_backendÂ   sP    
øÿ

 øÿ
þÿz+TestFeather.test_read_feather_dtype_backendc              
   C   sf   d}t  dttddƒƒi¡}t d¡�6}| |¡ tjt	|d�� t
|dd� W 5 Q R X W 5 Q R X d S )	NzPdtype_backend numpy is invalid, only 'numpy_nullable' and 'pyarrow' are allowed.r8   r   r-   ztmp.featherr   Únumpyrv   )r#   r?   r@   rA   r   r   r   r
   r   r(   r   )r   r)   r   r   r   r   r   Útest_invalid_dtype_backendø   s    ÿ
z&TestFeather.test_invalid_dtype_backend)Ú__name__Ú
__module__Ú__qualname__r   r   r   r+   rH   rN   rP   rT   rZ   r]   r^   rc   rg   rh   rj   r
   ÚmarkÚnetworkr   rn   r€   r‚   r   r   r   r   r      s.   
#û
6r   )Ú__doc__r�   r&   r
   Zpandasr#   Zpandas._testingZ_testingr   Zpandas.core.arraysr   r   Zpandas.io.feather_formatr   r   r   r   r†   Z
single_cpur   r   r   r   r   Ú<module>   s   