U
    U‚gÀ*  ã                	   @   s2  d dl Z d dlZd dl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	Z	d dl
Z
d dlZd dlmZ d dlZd dlmZ d dlm  mZ dd„ ej ¡ D ƒZej dejddd	d
gdddgg dddgd�ejddd	d
g dd�g¡ej ddddg¡dd„ ƒƒZej dejddd	d
gdddgg dddgd�ejddd	d
g dd�g¡ej dddg¡dd„ ƒƒZej ddddiejfdi ej fdi ej!fg¡dd„ ƒZ"ej d ddd!d"œejd#d!ifdi ej d$d%ifdi ej!i fg¡d&d'„ ƒZ#d(d)„ Z$d*d+„ Z%d,d-„ Z&d.d/„ Z'd0d1„ Z(d2d3„ Z)ej dejddd	d
gdddgg dddgd�ejddd	d
g dd�g¡ej ddddg¡d4d5„ ƒƒZ*ej dejddd	d
gdddgg dddgd�ejddd	d
g dd�g¡ej ddddg¡d6d7„ ƒƒZ+ej d8d9e
j,fd:ej-fg¡d;d<„ ƒZ.d=d>„ Z/d?d@„ Z0dAdB„ Z1dCdD„ Z2dS )Eé    N)ÚPath)Úis_platform_windowsc                 C   s   i | ]\}}||“qS © r   )Ú.0ÚkeyÚvaluer   r   úD/tmp/pip-unpacked-wheel-u1j4u1ka/pandas/tests/io/test_compression.pyÚ
<dictcomp>   s     r	   Úobjéd   ç¿¶~úÏš¿?ç9DÜœJÎ?ç>éD‚)â?çÜ.4×i¤(@ç33333þ@çÍÌÌÌ¤œAÚXÚYÚZ©Úcolumns©ÚnameÚmethodZ	to_pickleZto_jsonÚto_csvc              	   C   sr   |dkrdddœ}t  ¡ �N}t| |ƒ||d� tj |¡}t| |ƒ|d d� tj |¡}||ksdt‚W 5 Q R X d S )NÚtarúw:gz©r   Úmode©Úcompression©ÚtmÚensure_cleanÚgetattrÚosÚpathÚgetsizeÚAssertionError)r
   r   Úcompression_onlyr&   Úcompressed_sizeÚuncompressed_sizer   r   r   Útest_compression_size   s    

r,   c              
   C   sÌ   t  ¡ �V}tj||dkrdnd|d��"}t| |ƒ|jƒ |jjrDt‚W 5 Q R X tj	 
|¡}W 5 Q R X t  ¡ �V}tj|dd d��"}t| |ƒ|jƒ |jjrœt‚W 5 Q R X tj	 
|¡}||ks¾t‚W 5 Q R X d S )Nr   r   Úwr   )r"   r#   ÚicomÚ
get_handler$   ÚhandleÚclosedr(   r%   r&   r'   )r
   r   r)   r&   Úhandlesr*   r+   r   r   r   Útest_compression_size_fh1   s     
ý
r3   z'write_method, write_kwargs, read_methodÚindexFc              	   C   st   t jdddgdddggddd	gd
�}t| }t d| ¡�$}t|| ƒ|f|Ž |||d�}W 5 Q R X t ||¡ d S )Ng      ð?r   éüÿÿÿg333333@é   é   r   r   r   r   Ú
compressedr   )ÚpdÚ	DataFrameÚ_compression_to_extensionr"   r#   r$   Úassert_frame_equal)Úwrite_methodÚwrite_kwargsÚread_methodr)   ÚinputÚ	extensionr&   Úoutputr   r   r   Ú,test_dataframe_compression_defaults_to_inferN   s    $rC   z1write_method,write_kwargs,read_method,read_kwargsT)r4   ÚheaderÚsqueezeÚtypZseriesc           
   	   C   s¤   t jddddgdd�}t| }t d| ¡�^}t|| ƒ|f|Ž d|krr| ¡ }|d= ||fd	|i|—Ž d
¡}	n||fd	|i|—Ž}	W 5 Q R X tj|	|dd� d S )Nr   r6   éþÿÿÿé
   r   r   r8   rE   r    r   F)Zcheck_names)	r9   ÚSeriesr;   r"   r#   r$   ÚcopyrE   Zassert_series_equal)
r=   r>   r?   Zread_kwargsr)   r@   rA   r&   ÚkwargsrB   r   r   r   Ú)test_series_compression_defaults_to_inferb   s    ÿrL   c                 C   s‚   t jddddgdddgg dd	d
gd�}t ¡ �H}tj|d| d��,}t t¡� |j|j	| d� W 5 Q R X W 5 Q R X W 5 Q R X d S )Nr   r   r   r   r   r   r   r   r   r   r   r-   r   )
r9   r:   r"   r#   r.   r/   Zassert_produces_warningÚRuntimeWarningr   r0   )r)   Údfr&   r2   r   r   r   Útest_compression_warning}   s    þ
rO   c              
   C   s¤   t  ¡ }t  ¡ �P}t|dd�� }|j|d| d� | d¡ W 5 Q R X t  |tj|d| d�¡ W 5 Q R X t	 
¡ }|j|d| d� | d¡ t  |tj|d| d�¡ dS )z?
    Binary file handles support compression.

    GH22555
    Úwb)r   )r   r    r   )Z	index_colr    N)r"   ÚmakeDataFramer#   Úopenr   Úseekr<   r9   Úread_csvÚioÚBytesIO)r)   rN   r&   Úfiler   r   r   Útest_compression_binaryŠ   s     
 ÿ
 ÿrX   c               	   C   sp   t  ¡ } dddœ}t  ¡ �L}t|ƒ}| j||d� t d¡ | ¡ }| j||d� || ¡ ksbt‚W 5 Q R X dS )zš
    Gzip should create reproducible archives with mtime.

    Note: Archives created with different filenames will still be different!

    GH 28103
    Úgzipé   ©r   Úmtimer   r7   N)	r"   rQ   r#   r   r   ÚtimeÚsleepÚ
read_bytesr(   )rN   Úcompression_optionsr&   rB   r   r   r   Ú#test_gzip_reproducibility_file_name¤   s    


ra   c                  C   sh   t  ¡ } dddœ}t ¡ }| j||dd� | ¡ }t d¡ t ¡ }| j||dd� || ¡ ksdt‚dS )zL
    Gzip should create reproducible archives with mtime.

    GH 28103
    rY   rZ   r[   rP   )r    r   r7   N)	r"   rQ   rU   rV   r   Úgetvaluer]   r^   r(   )rN   r`   ÚbufferrB   r   r   r   Ú%test_gzip_reproducibility_file_object¹   s    

rd   c                  C   s&   t  d¡} tjtjd| gtjd� dS )z6Tests if import pandas works when lzma is not present.zT        import sys
        sys.modules['lzma'] = None
        import pandas
        ú-c©ÚstderrN©ÚtextwrapÚdedentÚ
subprocessÚcheck_outputÚsysÚ
executableÚPIPE©Úcoder   r   r   Útest_with_missing_lzmaÌ   s    ÿrr   c                  C   s&   t  d¡} tjtjd| gtjd� dS )z\Tests if RuntimeError is hit when calling lzma without
    having the module available.
    zÿ
        import sys
        import pytest
        sys.modules['lzma'] = None
        import pandas as pd
        df = pd.DataFrame()
        with pytest.raises(RuntimeError, match='lzma module'):
            df.to_csv('foo.csv', compression='xz')
        re   rf   Nrh   rp   r   r   r   Útest_with_missing_lzma_runtimeÙ   s    ÿrs   c              	   C   sf   t  ¡ �T}t| |ƒ|dd� tj |¡}t| |ƒ|dddœd� tj |¡}||k sXt‚W 5 Q R X d S )NrY   r   rZ   ©r   Úcompresslevelr!   )r
   r   r&   Zcompressed_size_defaultZcompressed_size_fastr   r   r   Útest_gzip_compression_levelë   s    
rv   c              	   C   s0   t  ¡ �}t| |ƒ|dddœd� W 5 Q R X dS )z´GH33196 bzip needs file size > 100k to show a size difference between
    compression levels, so here we just check if the call works when
    compression is passed as a dict.
    Úbz2rZ   rt   r   N)r"   r#   r$   )r
   r   r&   r   r   r   Útest_bzip_compression_level   s    
rx   zsuffix,archiveú.zipz.tarc              
   C   sV   t j| d��@}||dƒ� W 5 Q R X tjtdd�� t |¡ W 5 Q R X W 5 Q R X d S )N©Úfilenamer-   zZero files found©Úmatch)r"   r#   ÚpytestÚraisesÚ
ValueErrorr9   rT   )ÚsuffixÚarchiver&   r   r   r   Útest_empty_archive_zip  s
    
rƒ   c               
   C   sp   t jdd��Z} t | d¡�}| dd¡ | dd¡ W 5 Q R X tjtdd�� t 	| ¡ W 5 Q R X W 5 Q R X d S )	Nry   rz   r-   úa.csvzfoo,barúb.csvz Multiple files found in ZIP filer|   )
r"   r#   ÚzipfileÚZipFileÚwritestrr~   r   r€   r9   rT   )r&   rW   r   r   r   Útest_ambiguous_archive_zip#  s    r‰   c              	   C   s°   | d }t |dƒ�}| d¡ W 5 Q R X | d }t |dƒ�}| d¡ W 5 Q R X | d }t |d¡�}| |d¡ | |d¡ W 5 Q R X tjtdd�� t 	|¡ W 5 Q R X d S )Nr„   r-   zfoo,bar
r…   zarchive.tarz#Multiple files found in TAR archiver|   )
rR   ÚwriteÚtarfileÚTarFileÚaddr~   r   r€   r9   rT   )Ztmp_pathZcsvAPathÚaZcsvBPathÚbZtarpathr   r   r   r   Útest_ambiguous_archive_tar,  s    r�   c                  C   sÀ   t jdd��ª} tjddggddgd�j| dd	d
œdd� t | ¡�j}tj|d��R}| 	¡ }t
|ƒdksjt‚| |d ¡ ¡  d¡}tƒ rŽd}nd}||ksžt‚W 5 Q R X W 5 Q R X W 5 Q R X d S )Nz.foorz   Ú1Ú2ZfooÚbarr   r   r   r   F)r    r4   )ÚfileobjrZ   r   Úutf8zfoo,bar
1,2
zfoo,bar
1,2
)r"   r#   r9   r:   r   rY   rR   r‹   rŒ   Ú
getmembersÚlenr(   ÚextractfileÚreadÚdecoder   )rW   Zuncompressedr‚   ÚmembersÚcontentÚexpectedr   r   r   Ú!test_tar_gz_to_different_filename=  s$    þ  ýrž   c               
   C   s2   t  ¡ � } tj| dd�� W 5 Q R X W 5 Q R X d S )Nr-   )r”   r   )rU   rV   r.   Z_BytesTarFile)rc   r   r   r   Útest_tar_no_error_on_closeQ  s    
rŸ   )3rY   rU   r%   Úpathlibr   rk   rm   r‹   ri   r]   r†   r~   Zpandas.compatr   Zpandasr9   Zpandas._testingZ_testingr"   Zpandas.io.commonÚcommonr.   Zextension_to_compressionÚitemsr;   ÚmarkZparametrizer:   rI   r,   r3   rT   Ú	read_jsonZread_picklerC   rL   rO   rX   ra   rd   rr   rs   rv   rx   r‡   rŒ   rƒ   r‰   r�   rž   rŸ   r   r   r   r   Ú<module>   s¼   ÿþûþ
þûþ


ýþ
ýþ
þûþ

þûþ
	þþ
	