U
    +if!                  	   @   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_pickle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"   S/home/mars/bis/venv/lib/python3.8/site-packages/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,   headersqueezetypZseriesc           
   	   C   s   t jddddgdd}tj| }td| ^}t|| |f| d|krt| }|d= ||fd	|i|d
}	n||fd	|i|}	W 5 Q R X tj	|	|dd d S )Nr   r.   
   r   r   r0   r=   r   r   F)Zcheck_names)
r1   Seriesr&   r3   r   r   r   copyr=   Zassert_series_equal)
r5   r6   r7   Zread_kwargsr   r8   r9   r   kwargsr:   r"   r"   r#   )test_series_compression_defaults_to_inferR   s    
rD   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   )
r1   r2   r   r   r&   r'   Zassert_produces_warningRuntimeWarningr   r(   )r   dfr   r*   r"   r"   r#   test_compression_warningm   s    
rG   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)rI   r   r   )Z	index_colr   N)r   makeDataFramer   openr   seekr4   r1   read_csvioBytesIO)r   rF   r   filer"   r"   r#   test_compression_binaryz   s     
 
 rQ   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   rJ   r   r   r   timesleep
read_bytesr   )rF   compression_optionsr   r:   r"   r"   r#   #test_gzip_reproducibility_file_name   s    


rZ   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
    rR   rS   rT   rH   )r   rI   r/   N)	r   rJ   rN   rO   r   getvaluerV   rW   r   )rF   rY   bufferr:   r"   r"   r#   %test_gzip_reproducibility_file_object   s    

r]   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    rk   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')
        r^   r_   Nra   ri   r"   r"   r#   test_with_missing_lzma_runtime   s    rl   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 )NrR   r   rS   r   compresslevelr   )r   r   r   Zcompressed_size_defaultZcompressed_size_fastr"   r"   r#   test_gzip_compression_level   s    
ro   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.
    bz2rS   rm   r   N)r   r   r   )r   r   r   r"   r"   r#   test_bzip_compression_level   s    
rq   )$rN   r   pathlibr   rd   rf   rb   rV   ZpytestZpandasr1   Zpandas._testingZ_testingr   Zpandas.io.commoncommonr&   markZparametrizer2   rA   r$   r+   rM   	read_jsonZread_pickler;   rD   rG   rQ   rZ   r]   rk   rl   ro   rq   r"   r"   r"   r#   <module>   s   
	







