U
    f/e                   	   @   s  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mZ d dlm   m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d-d. Z d/d0 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d1d2 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d3d4 Z#dS )5    N)Pathobjd   翶~Ϛ?9DܜJ?>D)?.4i(@33333@̤AXYZcolumnsnamemethodZ	to_pickleZto_jsonto_csvc              	   C   s`   t  N}t| |||d tj|}t| ||d d tj|}||ksRtW 5 Q R X d S )Ncompressiontmensure_cleangetattrospathgetsizeAssertionError)r   r   compression_onlyr   compressed_sizeuncompressed_size r!   D/tmp/pip-unpacked-wheel-tiezk1ph/pandas/tests/io/test_compression.pytest_compression_size   s    
r#   c              
   C   s   t  J}tj|d|d"}t| ||j |jjr8tW 5 Q R X tj	
|}W 5 Q R X t  V}tj|dd d"}t| ||j |jjrtW 5 Q R X tj	
|}||kstW 5 Q R X d S )Nwr   )r   r   icom
get_handler   handleclosedr   r   r   r   )r   r   r   r   handlesr   r    r!   r!   r"   test_compression_size_fh%   s    

r*   z'write_method, write_kwargs, read_methodindexFc              	   C   sv   t jdddgdddggddd	gd
}tj| }td| $}t|| |f| |||d}W 5 Q R X t|| d S )Ng      ?r   g333333@      r   r   r   r   
compressedr   )pd	DataFramer%   _compression_to_extensionr   r   r   assert_frame_equal)write_methodwrite_kwargsread_methodr   input	extensionr   outputr!   r!   r"   ,test_dataframe_compression_defaults_to_infer>   s    $
r:   z1write_method,write_kwargs,read_method,read_kwargsT)r+   headerZsqueezetypZseriesc           	   	   C   st   t jddddgdd}tj| }td| ,}t|| |f| ||fd|i|}W 5 Q R X tj||d	d
 d S )Nr   r-   
   r   r   r/   r   F)Zcheck_names)r0   Seriesr%   r2   r   r   r   Zassert_series_equal)	r4   r5   r6   Zread_kwargsr   r7   r8   r   r9   r!   r!   r"   )test_series_compression_defaults_to_inferR   s    
r@   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   )
r0   r1   r   r   r%   r&   Zassert_produces_warningRuntimeWarningr   r'   )r   dfr   r)   r!   r!   r"   test_compression_warningf   s    
rC   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)mode)rE   r   r   )Z	index_colr   N)r   makeDataFramer   openr   seekr3   r0   read_csvioBytesIO)r   rB   r   filer!   r!   r"   test_compression_binarys   s     
 
 rM   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   r.   N)	r   rF   r   r   r   timesleep
read_bytesr   )rB   compression_optionsr   r9   r!   r!   r"   #test_gzip_reproducibility_file_name   s    


rV   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
    rN   rO   rP   rD   )r   rE   r.   N)	r   rF   rJ   rK   r   getvaluerR   rS   r   )rB   rU   bufferr9   r!   r!   r"   %test_gzip_reproducibility_file_object   s    

rY   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    rg   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')
        rZ   r[   Nr]   re   r!   r!   r"   test_with_missing_lzma_runtime   s    rh   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 )NrN   r   rO   r   compresslevelr   )r   r   r   Zcompressed_size_defaultZcompressed_size_fastr!   r!   r"   test_gzip_compression_level   s    
rk   c              	   C   s0   t  }t| ||dddd W 5 Q R X dS )zGH33196 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.
    bz2rO   ri   r   N)r   r   r   )r   r   r   r!   r!   r"   test_bzip_compression_level   s    
rm   )$rJ   r   pathlibr   r`   rb   r^   rR   ZpytestZpandasr0   Zpandas._testingZ_testingr   Zpandas.io.commoncommonr%   markZparametrizer1   r?   r#   r*   rI   	read_jsonZread_pickler:   r@   rC   rM   rV   rY   rg   rh   rk   rm   r!   r!   r!   r"   <module>   s   
	







