U
    sVc3+                  	   @   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-xj8nt62q/pandas/tests/io/test_compression.py
<dictcomp>   s     r	   objd   翶~Ϛ?9DܜJ?>D)?.4i(@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rtW 5 Q R X tj	
|}||kst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 )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.
    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   sR   t j| d<}||d}|  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#   closepytestraises
ValueErrorr9   rT   )suffixarchiver&   rW   r   r   r   test_empty_archive_zip  s
    
r   c               
   C   sl   t jddV} t| d}|dd |dd |  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   r   r9   rT   )r&   rW   r   r   r   test_ambiguous_archive_zip#  s    r   c               
   C   s   t  } tj| d}t|d}|d W 5 Q R X tj| d}t|d}|d W 5 Q R X tj| d}t|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 )Nr   r-   zfoo,bar
r   zarchive.tarz#Multiple files found in TAR archiver|   )r"   Zensure_clean_dirr%   r&   joinrR   writetarfileTarFileaddr   r   r   r9   rT   )dirZ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 rd}nd}||kst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_closeS  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   








	

