3
Udh8              	   @   s<  d 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	m
Z
 ddlZddlZddlmZmZmZ ddljjZddlZddlmZ ddljZddlmZmZ e Zejddd	d
 Z dPd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ej*j+ej*j,e-dddd Z.eje.d!d"d Z/d#d$ Z0d%d& Z1d'd( Z2d)d* Z3d+d, Z4ejd-d. Z5G d/d0 d0Z6G d1d2 d2Z7ej8j9d3d4gd5ejd6d7d8gfd9ej:j;d6d7d8gd:d;d<ggfgd=d> Z<d?d@ Z=ej8j9dAdBdCdDgdEdF Z>ej?dGdHdI Z@G dJdK dKejAZBdLdM ZCdNdO ZDdS )Qa<  
manage legacy pickle tests

How to add pickle tests:

1. Install pandas version intended to output the pickle.

2. Execute "generate_legacy_storage_files.py" to create the pickle.
$ python generate_legacy_storage_files.py <output_dir> pickle

3. Move the created pickle to "data/legacy_pickle/<version>" directory.
    N)catch_warningssimplefilter)_get_lzma_file_import_lzmais_platform_little_endian)Index)DayMonthEndmodule)Zscopec              C   s   ddl m}  |  S )Nr   )create_pickle_data)Z-pandas.tests.io.generate_legacy_storage_filesr   )r    r   O/var/www/html/virt/lib64/python3.6/site-packages/pandas/tests/io/test_pickle.pycurrent_pickle_data%   s    r   c             C   s   t |trtj||  d S |jdr6tj}|| | n`|dkrv|tjkrX| tjksttq| |ksdt| j	|j	kstn t
td| dtj}|| | d S )NZsp_	timestampZassert_Z_equal)
isinstancer   tmassert_index_equal
startswithZassert_equalpdZNaTAssertionErrorfreqgetattrZassert_almost_equal)resultexpectedtypversion
comparatorr   r   r   compare_element0   s    


r   c       
      C   sz   t j|} t }xd| j D ]X\}}xN|j D ]B\}}| | | }d| d| }	|j|	|d }	|	|||| q,W qW | S )NZcompare__r   )r   read_pickleglobalsitemsget)
dataZvfr   mr   dvdtr   r   r   r   r   r   compareC   s    
r'   c             C   s   t j| | | jj|jjks t| jjj s0tt j| dk|dk | jj}|td tdksdt|tjdd }t	|tjst|tjdddkst|tjdd }t	|tjst|tjdddkstd S )Nr         )hours)daysr*   )nanoseconds)r+   r,   )
r   assert_series_equalindexr   r   	normalizer   r   Z	Timedeltar   )r   r   r   r   r   resr   r   r   compare_series_tsU   s    r1   c             C   s   t j| | d S )N)r   r-   )r   r   r   r   r   r   r   compare_series_dt_tzi   s    r2   c             C   s   t j| | d S )N)r   r-   )r   r   r   r   r   r   r   compare_series_catm   s    r3   c             C   s   t j| | d S )N)r   assert_frame_equal)r   r   r   r   r   r   r   compare_frame_dt_mixed_tzsq   s    r5   c             C   s   t j| | d S )N)r   r4   )r   r   r   r   r   r   r   compare_frame_cat_onecolu   s    r6   c             C   s   t | ||| d S )N)r6   )r   r   r   r   r   r   r   compare_frame_cat_and_floaty   s    r7   c             C   sV   t j| | t| jtst| jt ks,t| jdks:tt j| jd|jd d S )NMr)   )r   r   r   r   r	   r   Zfreqstrshift)r   r   r   r   r   r   r   compare_index_period}   s
    r:   r#   legacy_pickle*z*.pickle)paramsc             C   s
   || j S )N)param)requestdatapathr   r   r   r;      s    c             C   sR   t  stjd tjjtjj|}tdd td t	| || W d Q R X d S )Nz"known failure on non-little endianT)recordignore)
r   pytestskipospathbasenamedirnamer   r   r'   )r   r;   r   r   r   r   test_pickles   s    
rI   c             C   s   dd }dd }| }x|j  D ]\}}xz|j  D ]n\}}xdtj|gD ]V}|d krRqDtj :}	|||	 tj|	}
t|
|| ||	}
t|
|| W d Q R X qDW q0W qW d S )Nc             S   s*   t |d}tj| |dd W d Q R X d S )Nwbr(   )protocol)openpickledump)objrF   fhr   r   r   python_pickler   s    z/test_round_trip_current.<locals>.python_picklerc          	   S   s*   t | d}|jd tj|S Q R X d S )Nrbr   )rM   seekrN   load)rF   rQ   r   r   r   python_unpickler   s    
z1test_round_trip_current.<locals>.python_unpickler)r!   r   	to_pickler   ensure_cleanr   r   )r   rR   rV   r#   r   r%   r&   r   writerrF   r   r   r   r   test_round_trip_current   s    


rZ   c              C   s(   t j } t j| jtj}t j| | d S )N)r   makeDataFrameZround_trip_pathlibrW   r   r   r4   )dfr   r   r   r   test_pickle_path_pathlib   s    r]   c              C   s(   t j } t j| jtj}t j| | d S )N)r   r[   Zround_trip_localpathrW   r   r   r4   )r\   r   r   r   r   test_pickle_path_localpath   s    r^   c             C   st   t jt( tdt tj| dddddd W dQ R X t jt( tdt tj| dddd	dd W dQ R X dS )
ap  

    Generated with

    >>> df = pd.DataFrame({"A": [1, 2, 3, 4], "B": [0, 0, 1, 1]}).to_sparse()
    >>> df.to_pickle("pandas/tests/io/data/pickle/sparseframe-0.20.3.pickle.gz",
    ...              compression="gzip")

    >>> s = df['B']
    >>> s.to_pickle("pandas/tests/io/data/pickle/sparseseries-0.20.3.pickle.gz",
    ...             compression="gzip")
    rB   ior#   rN   zsparseseries-0.20.3.pickle.gzgzip)compressionNzsparseframe-0.20.3.pickle.gz)r   Zassert_produces_warningFutureWarningr   DeprecationWarningr   r   )r@   r   r   r   test_legacy_sparse_warning   s    

rd   c               C   s   dt jd dS )N__
   z	__.pickle)r   Zrandsr   r   r   r   get_random_path   s    rg   c               @   s   e Zd ZddddddZdd Zd	d
 Zejjdddddgdd Z	ejjddddddgdd Z
dd Zejjdddddddgdd ZdS )TestCompressionz.nonez.gzz.bz2z.zipz.xz)Nr`   bz2zipxzc             C   s   |d krt j|| d S |dkr.tj|d}n||dkrDtj|d}nf|dkrtj|dtjd}|j	|t
jj| W d Q R X n*|dkrtt|d}nd| }t||dkrt|d$}| |j	|j  W d Q R X W d Q R X d S )	Nr`   wri   rj   )ra   rk   zUnrecognized compression type: rS   )shutilcopyfiler`   rM   ri   BZ2FilezipfileZipFileZIP_DEFLATEDwriterE   rF   rG   r   lzma
ValueErrorread)selfZsrc_path	dest_pathra   fmsgrQ   r   r   r   compress_file   s"     
zTestCompression.compress_filec              C   s   |}|d }|d }t j|}t j|t}t j }|j||d t j||d*}	t|d}
|
j|	j  W d Q R X W d Q R X tj	|d d}t j
|| W d Q R X W d Q R X d S )Nz.compressedz.raw)ra   rJ   )r   rX   r[   rW   decompress_filerM   rs   rv   r   r   r4   )rw   ra   rg   basepath1path2p1p2r\   ry   rQ   df2r   r   r   test_write_explicit  s    "z#TestCompression.test_write_explicitra    NonebadZ7zc             C   sJ   t jtdd2 tj|}tj }|j||d W d Q R X W d Q R X d S )NzUnrecognized compression type)match)ra   )rC   Zraisesru   r   rX   r[   rW   )rw   ra   rg   rF   r\   r   r   r   test_write_explicit_bad"  s    z'TestCompression.test_write_explicit_badextz.no_compressc              C   s   |}|| }|d }d }x"| j D ]}| j | |kr |}P q W tj|}tj|p}	tj }
|
j| tj||d*}t|	d}|j|j  W d Q R X W d Q R X t	j
|	d d}tj|
| W d Q R X W d Q R X d S )Nz.raw)ra   rJ   )_compression_to_extensionr   rX   r[   rW   r|   rM   rs   rv   r   r   r4   )rw   r   rg   r}   r~   r   ra   cr   r   r\   ry   rQ   r   r   r   r   test_write_infer)  s     
"z TestCompression.test_write_inferc       
      C   s   |}|d }|d }t j|\}t j|F}t j }|j|d d | j|||d tj||d}	t j||	 W d Q R X W d Q R X d S )Nz.rawz.compressed)ra   )r   rX   r[   rW   r{   r   r   r4   )
rw   ra   rg   r}   r~   r   r   r   r\   r   r   r   r   test_read_explicitD  s    z"TestCompression.test_read_explicitc             C   s   |}|d }|| }d }x"| j D ]}| j | |kr |}P q W tj|X}tj|B}	tj }
|
j|d d | j||	|d tj|	}tj|
| W d Q R X W d Q R X d S )Nz.raw)ra   )	r   r   rX   r[   rW   r{   r   r   r4   )rw   r   rg   r}   r~   r   ra   r   r   r   r\   r   r   r   r   test_read_inferW  s    
zTestCompression.test_read_inferN)__name__
__module____qualname__r   r{   r   rC   markparametrizer   r   r   r   r   r   r   r   rh      s    rh   c               @   s*   e Zd Zejjdddddgdd ZdS )	TestProtocolrK   r(   r   r)   c             C   sF   t j|2}t j }|j||d tj|}t j|| W d Q R X d S )N)rK   )r   rX   r[   rW   r   r   r4   )rw   rK   rg   rF   r\   r   r   r   r   	test_readw  s
    
zTestProtocol.test_readNrL   )r   r   r   rC   r   r   r   r   r   r   r   r   v  s   r   pickle_fileexcolsztest_py27.pklabr   ztest_mi_py27.pklABCc             C   s*   | ddd|}t j|}tj|j| d S )Nr_   r#   rN   )r   r   r   r   columns)r@   r   r   rF   r\   r   r   r   test_unicode_decode_error  s    
r   c              C   sl   t j Z} t j }t| d}|j| W d Q R X t| d}tj|}W d Q R X t j|| W d Q R X d S )NrJ   rS   )r   rX   r[   rM   rW   r   r   r4   )rF   r\   rQ   r   r   r   r   test_pickle_buffer_roundtrip  s    
r   mockurlzhttp://url.comzftp://test.comzhttp://gzip.comc          
      sp   dd }G dd d t j H fdd}t j }|| | jd| tj|}t j|| W d Q R X d S )Nc             S   s*   t |d}tj| |dd W d Q R X d S )NrJ   r(   )rK   rL   )rM   rN   rO   )rP   rF   rQ   r   r   r   rR     s    z3test_pickle_generalurl_read.<locals>.python_picklerc               @   s$   e Zd Zdd Zdd Zdd ZdS )z5test_pickle_generalurl_read.<locals>.MockReadResponsec             S   s.   t |d| _d|kr ddi| _n
dd i| _d S )NrS   r`   zContent-Encoding)rM   fileheaders)rw   rF   r   r   r   __init__  s    z>test_pickle_generalurl_read.<locals>.MockReadResponse.__init__c             S   s
   | j j S )N)r   rv   )rw   r   r   r   rv     s    z:test_pickle_generalurl_read.<locals>.MockReadResponse.readc             S   s
   | j j S )N)r   close)rw   r   r   r   r     s    z;test_pickle_generalurl_read.<locals>.MockReadResponse.closeN)r   r   r   r   rv   r   r   r   r   r   MockReadResponse  s   r   c                 s    S )Nr   )argskwargs)r   rF   r   r   mock_urlopen_read  s    z6test_pickle_generalurl_read.<locals>.mock_urlopen_readzurllib.request.urlopen)r   rX   r[   setattrr   r   r4   )Zmonkeypatchr   rR   r   r\   r   r   )r   rF   r   test_pickle_generalurl_read  s    


r   Zfsspecc           
   C   sD   t j 2 d} t j }|j|  tj| }t j|| W d Q R X d S )Nzmemory://afile)r   rX   r[   rW   r   r   r4   )r   r\   r   r   r   r   test_pickle_fsspec_roundtrip  s    


r   c               @   s   e Zd Zdd ZdS )MyTzc             C   s   d S )Nr   )rw   r   r   r   r     s    zMyTz.__init__N)r   r   r   r   r   r   r   r   r     s   r   c              C   sF   t jtdt f} tj| }tj|d | d  t|d tsBtd S )N)Zdtyper   r(   )	r   Seriesobjectr   r   round_trip_pickler-   r   r   )r   r   r   r   r   test_read_pickle_with_subclass  s    
r   c              C   sh   t jtdjdjdg } tj| }|jjd j	dks<t
|jjd jdksRt
tj|dg |  d S )Nabccategoryr   r(   T)r(   )r   r   listZastypeZilocr   r   Z_mgrblocksndimr   shaper-   )Zserr0   r   r   r    test_pickle_preserves_block_ndim  s
    
r   )N)E__doc__ri   datetimeglobr`   rE   rN   rm   warningsr   r   rp   rC   Zpandas.compatr   r   r   Zpandas.util._test_decoratorsutilZ_test_decoratorstdZpandasr   r   Zpandas._testingZ_testingr   Zpandas.tseries.offsetsr   r	   rt   Zfixturer   r   r'   r1   r2   r3   r5   r6   r7   r:   rF   joinrH   __file__filesr;   rI   rZ   r]   r^   rd   rg   rh   r   r   r   Z
MultiIndexZfrom_arraysr   r   r   Z
skip_if_nor   tzinfor   r   r   r   r   r   r   <module>   sf   


! 

*!
	