U
    ÎZjôG  ã                   @   sª  d 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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mZmZmZ ddlZddlZddlZddlmZmZ ddlmZ ddlm  mZ ddl Z!ddl m"Z"m#Z#m$Z$ ddl%m&Z' ddl(m  m)Z* dd	l+m,Z,m-Z- ej. d
¡Z/ej0dd�dd„ ƒZ1dd„ Z2ej3 4ej3 5e6¡dd¡Z7e ej3 4e7dd¡¡Z8ej0e8d�dd„ ƒZ9dd„ Z:dd„ Z;dd„ Z<ej. =dej>e;dd�ej>e!j?d d�ej>eje!j?ej@d!�d"d�ej>eje!j?d#d!�d$d�ej>eje!j?d%d!�d&d�g¡ej. =d'e!j?e;g¡ej. d(¡d)d*„ ƒƒƒZAd+d,„ ZBd-d.„ ZCej. =d/d0d1g¡d2d3„ ƒZDej0d4d5„ ƒZEG d6d7„ d7ƒZFG d8d9„ d9ƒZGej. =d:d;gd<e"d=d>d?gƒfd@e!jH Id=d>d?gdAdBdCgg¡fg¡dDdE„ ƒZJdFdG„ ZKej. =dHdIdJdKg¡dLdM„ ƒZLe MdN¡dOdP„ ƒZNG dQdR„ dRejOƒZPdSdT„ ZQdUdV„ ZRdWdX„ ZSdYdZ„ ZTej. =d[d\d]d[e d^d_d_¡d`g¡dadb„ ƒZUdcdd„ ZVdedf„ ZWejXdgdh„ ƒZYej. =diejZej@g¡djdk„ ƒZ[dldm„ Z\dS )na<  
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)Úpartial)ÚPath)Úcatch_warningsÚfilterwarningsÚsimplefilter)Úget_lzma_fileÚis_platform_little_endian)Úimport_optional_dependency)ÚIndexÚSeriesÚperiod_range)ÚDayÚMonthEndz1ignore:Timestamp.freq is deprecated:FutureWarningÚmodule)Úscopec               
   C   s>   ddl m}  tƒ �" tddtd� | ƒ W  5 Q R £ S Q R X d S )Nr   ©Úcreate_pickle_dataÚignorez The 'freq' argument in Timestamp)Úcategory)Z-pandas.tests.io.generate_legacy_storage_filesr   r   r   ÚFutureWarningr   © r   ú^/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/pandas/tests/io/test_pickle.pyÚcurrent_pickle_data>   s      ÿr   c                 C   s–   t |tƒrt || ¡ d S | d¡r2t | |¡ n`|dkrr|tjkrT| tjkspt‚q’| |ks`t‚| j	|j	ks’t‚n t
td|› d�tjƒ}|| |ƒ d S )NZsp_Ú	timestampZassert_Ú_equal)Ú
isinstancer
   ÚtmÚassert_index_equalÚ
startswithZassert_equalÚpdZNaTÚAssertionErrorÚfreqÚgetattrZassert_almost_equal)ÚresultÚexpectedÚtypZ
comparatorr   r   r   Úcompare_elementN   s    


r&   ÚdataÚlegacy_pickleÚ*z*.pickle)Úparamsc                 C   s
   || j ƒS ©N)Úparam)ÚrequestÚdatapathr   r   r   r(   d   s    c           	   	   C   s  t ƒ st d¡ tdd���ô tdƒ t | ¡}| ¡ D �]Ð\}}| ¡ D �]¼\}}|| | }|dk�rJ|dk�rJt 	||¡ |j
j|j
jks”t‚|j
jjr¢t‚t 	|dk|dk¡ |j
j}|tdƒ td	ƒksÖt‚|tjdd
� }t|tjƒsöt‚|tjddd�k�st‚|tjdd� }t|tjƒ�s0t‚|tjddd�k�st‚qJ|dk�r¸|dk�r¸t ||¡ t|jtƒ�s|t‚|jtƒ k�sŽt‚|jdk�sžt‚t | d	¡| d	¡¡ qJ|dk�rÚ|dk�rÚt 	||¡ qJ|dk�rü|dk�rüt ||¡ qJt|||ƒ qJq8W 5 Q R X d S )Nz"known failure on non-little endianT)Úrecordr   ZseriesÚtsr   é   é   )Úhours)Údaysr3   )Únanoseconds)r4   r5   ÚindexZperiodÚM)Zdt_tzÚcatÚframe)Zdt_mixed_tzsZ
cat_onecolZcat_and_float)r   ÚpytestÚskipr   r   r   Úread_pickleÚitemsr   Úassert_series_equalr6   r!   r    Ú	normalizer   Z	Timedeltar   r   r   ZfreqstrÚshiftÚassert_frame_equalr&   )	r(   r'   r%   ÚdvÚdtr#   r$   r!   Úresr   r   r   Útest_picklesl   s@    

rE   c              	   C   s*   t |dƒ�}tj| |dd� W 5 Q R X d S ©NÚwbéÿÿÿÿ©Úprotocol©ÚopenÚpickleÚdump©ÚobjÚpathÚfhr   r   r   Úpython_pickler�   s    rS   c              
   C   s6   t | dƒ�"}| d¡ t |¡W  5 Q R £ S Q R X d S )NÚrbr   )rL   ÚseekrM   Úload)rQ   rR   r   r   r   Úpython_unpickler¢   s    
rW   Úpickle_writerÚpython)ÚidZpandas_proto_defaultrI   Zpandas_proto_highesté   Zpandas_proto_4é   Zpandas_proto_5Úwriterz5ignore:The 'freq' argument in Timestamp:FutureWarningc                 C   sØ   | }|  ¡ D ]Æ\}}|  ¡ D ]´\}}t ¡ �ž}|||ƒ t |¡}	t|	||ƒ t|ƒ}	t|	||ƒ t|dd��}
|||ƒ |
 d¡ W 5 Q R X t|dd��}
t |
¡}	|
 d¡ W 5 Q R X t|	||ƒ W 5 Q R X qqd S )NrG   ©Úmoder   rT   )	r=   r   Úensure_cleanr   r<   r&   rW   rL   rU   )r   rX   r]   r'   r%   rB   rC   r$   rQ   r#   Úhandler   r   r   Útest_round_trip_current¨   s     




rb   c                  C   s(   t  ¡ } t  | jtj¡}t  | |¡ d S r+   )r   ÚmakeDataFrameÚround_trip_pathlibÚ	to_pickler   r<   rA   ©Údfr#   r   r   r   Útest_pickle_path_pathlibÔ   s    rh   c                  C   s(   t  ¡ } t  | jtj¡}t  | |¡ d S r+   )r   rc   Zround_trip_localpathre   r   r<   rA   rf   r   r   r   Útest_pickle_path_localpathÚ   s    ri   r%   ZsparseseriesZsparseframec              	   C   sB   t  t¡�. tdtƒ tj| ddd|› d�ƒdd� W 5 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")
    r   Úior'   rM   z-0.20.3.pickle.gzÚgzip©ÚcompressionN)r   Zassert_produces_warningr   r   ÚDeprecationWarningr   r<   )r.   r%   r   r   r   Útest_legacy_sparse_warningà   s    
þro   c                   C   s   dt  ¡ › d�S )NÚ__z	__.pickle)ÚuuidÚuuid4r   r   r   r   Úget_random_pathû   s    rs   c                   @   sX   e Zd ZejZdd„ Zdd„ Zej 	ddddd	g¡d
d„ ƒZ
dd„ Zdd„ Zdd„ ZdS )ÚTestCompressionc           	   
   C   s`  |d krt  ||¡ d S |dkr.t |d¡}nð|dkrDt |d¡}nÚ|dkr€tj|dtjd��}| 	|t
j |¡¡ W 5 Q R X nž|dkrÚt|dƒ�@}tj|dd��&}| |t
j |¡¡}| ||¡ W 5 Q R X W 5 Q R X nD|d	krðtƒ |dƒ}n.|d
k�rtdƒ |d¡}nd|› �}t|ƒ‚|dk�r\t|dƒ�$}|� | 	| ¡ ¡ W 5 Q R X W 5 Q R X d S )Nrk   ÚwÚbz2Úziprl   ÚtarrT   r^   ÚxzZzstdZ	zstandardrG   zUnrecognized compression type: )rw   rx   )ÚshutilÚcopyfilerk   rL   rv   ÚBZ2FileÚzipfileÚZipFileÚZIP_DEFLATEDÚwriteÚosrQ   ÚbasenameÚtarfileÚ
gettarinfoÚaddfiler   r	   Ú
ValueErrorÚread)	ÚselfZsrc_pathÚ	dest_pathrm   ÚfrR   rx   ÚtarinfoÚmsgr   r   r   Úcompress_file  s0     "


zTestCompression.compress_filec                 C   s²   |}|d }|d }t  |¡�Š}t  |¡�t}t  ¡ }|j||d� t j||d��*}	t|dƒ�}
|
 |	 ¡ ¡ W 5 Q R X W 5 Q R X tj	|d d�}t  
||¡ W 5 Q R X W 5 Q R X d S )Nú.compressedú.rawrl   rG   )r   r`   rc   re   Údecompress_filerL   r€   r‡   r   r<   rA   )rˆ   rm   rs   ÚbaseÚpath1Úpath2Úp1Úp2rg   rŠ   rR   Údf2r   r   r   Útest_write_explicit!  s    "z#TestCompression.test_write_explicitrm   Ú ÚNoneÚbadZ7zc              
   C   sJ   t jtdd��2 t |¡�}t ¡ }|j||d� W 5 Q R X W 5 Q R X d S )NzUnrecognized compression type)Úmatchrl   )r:   Zraisesr†   r   r`   rc   re   )rˆ   rm   rs   rQ   rg   r   r   r   Útest_write_explicit_bad6  s    z'TestCompression.test_write_explicit_badc                 C   s¾   |}|| }|d }| j  | ¡ ¡}t |¡�†}t |¡�p}t ¡ }	|	 |¡ tj||d��*}
t|dƒ�}| 	|
 
¡ ¡ W 5 Q R X W 5 Q R X tj|d d�}t |	|¡ W 5 Q R X W 5 Q R X d S )Nr�   rl   rG   )Ú_extension_to_compressionÚgetÚlowerr   r`   rc   re   r�   rL   r€   r‡   r   r<   rA   )rˆ   Úcompression_extrs   r‘   r’   r“   rm   r”   r•   rg   rŠ   rR   r–   r   r   r   Útest_write_infer=  s    
"z TestCompression.test_write_inferc           
   
   C   s„   |}|d }|d }t  |¡�\}t  |¡�F}t  ¡ }|j|d d� | j|||d� tj||d�}	t  ||	¡ W 5 Q R X W 5 Q R X d S )Nr�   rŽ   rl   )r   r`   rc   re   r�   r   r<   rA   )
rˆ   rm   rs   r‘   r’   r“   r”   r•   rg   r–   r   r   r   Útest_read_explicitS  s    z"TestCompression.test_read_explicitc              
   C   s�   |}|d }|| }| j  | ¡ ¡}t |¡�X}t |¡�B}t ¡ }	|	j|d d� | j|||d� t 	|¡}
t 
|	|
¡ W 5 Q R X W 5 Q R X d S )Nr�   rl   )r�   rž   rŸ   r   r`   rc   re   r�   r   r<   rA   )rˆ   r    rs   r‘   r’   r“   rm   r”   r•   rg   r–   r   r   r   Útest_read_inferf  s    
zTestCompression.test_read_inferN)Ú__name__Ú
__module__Ú__qualname__Úicomr�   r�   r—   r:   ÚmarkÚparametrizerœ   r¡   r¢   r£   r   r   r   r   rt      s   
rt   c                   @   s*   e Zd Zej dddddg¡dd„ ƒZdS )	ÚTestProtocolrJ   rH   r   r1   r2   c              	   C   sF   t  |¡�2}t  ¡ }|j||d� t |¡}t  ||¡ W 5 Q R X d S )NrI   ©r   r`   rc   re   r   r<   rA   )rˆ   rJ   rs   rQ   rg   r–   r   r   r   Ú	test_read�  s
    
zTestProtocol.test_readN)r¤   r¥   r¦   r:   r¨   r©   r¬   r   r   r   r   rª   €  s   rª   Úpickle_fileÚexcolsztest_py27.pklÚaÚbÚcztest_mi_py27.pklÚAÚBÚCc                 C   s*   | ddd|ƒ}t  |¡}t |j|¡ d S )Nrj   r'   rM   )r   r<   r   r   Úcolumns)r.   r­   r®   rQ   rg   r   r   r   Útest_unicode_decode_errorŠ  s    
r¶   c               
   C   sl   t  ¡ �Z} t  ¡ }t| dƒ�}| |¡ W 5 Q R X t| dƒ�}t |¡}W 5 Q R X t  ||¡ W 5 Q R X d S )NrG   rT   )r   r`   rc   rL   re   r   r<   rA   )rQ   rg   rR   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  ¡ �H‰‡ ‡fdd„}t  ¡ }||ˆƒ |  d|¡ t |¡}t  ||¡ W 5 Q R X d S )Nc              	   S   s*   t |dƒ�}tj| |dd� W 5 Q R X d S rF   rK   rO   r   r   r   rS   ¶  s    z3test_pickle_generalurl_read.<locals>.python_picklerc                   @   s:   e Zd Zddœdd„Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )z5test_pickle_generalurl_read.<locals>.MockReadResponseN©Úreturnc                 S   s.   t |dƒ| _d|kr ddi| _n
ddi| _d S )NrT   rk   zContent-Encodingr˜   )rL   ÚfileÚheaders)rˆ   rQ   r   r   r   Ú__init__»  s    z>test_pickle_generalurl_read.<locals>.MockReadResponse.__init__c                 S   s   | S r+   r   ©rˆ   r   r   r   Ú	__enter__Â  s    z?test_pickle_generalurl_read.<locals>.MockReadResponse.__enter__c                 W   s   |   ¡  d S r+   )Úclose)rˆ   Úargsr   r   r   Ú__exit__Å  s    z>test_pickle_generalurl_read.<locals>.MockReadResponse.__exit__c                 S   s
   | j  ¡ S r+   )r»   r‡   r¾   r   r   r   r‡   È  s    z:test_pickle_generalurl_read.<locals>.MockReadResponse.readc                 S   s
   | j  ¡ S r+   )r»   rÀ   r¾   r   r   r   rÀ   Ë  s    z;test_pickle_generalurl_read.<locals>.MockReadResponse.close)r¤   r¥   r¦   r½   r¿   rÂ   r‡   rÀ   r   r   r   r   ÚMockReadResponseº  s
   rÃ   c                     s   ˆ ˆƒS r+   r   )rÁ   Úkwargs©rÃ   rQ   r   r   Úmock_urlopen_readÐ  s    z6test_pickle_generalurl_read.<locals>.mock_urlopen_readzurllib.request.urlopen)r   r`   rc   Úsetattrr   r<   rA   )Zmonkeypatchr¸   rS   rÆ   rg   r#   r   rÅ   r   Útest_pickle_generalurl_read²  s    


rÈ   Zfsspecc               	   C   sD   t  ¡ �2 d} t  ¡ }| | ¡ t | ¡}t  ||¡ W 5 Q R X d S )Nzmemory://afiler«   )r¸   rg   r#   r   r   r   Útest_pickle_fsspec_roundtripÚ  s    


rÉ   c                   @   s   e Zd Zddœdd„ZdS )ÚMyTzNr¹   c                 C   s   d S r+   r   r¾   r   r   r   r½   å  s    zMyTz.__init__)r¤   r¥   r¦   r½   r   r   r   r   rÊ   ä  s   rÊ   c                  C   sD   t td�tƒ f} t | ¡}t |d | d ¡ t|d tƒs@t‚d S )N)Zdtyper   r1   )r   ÚobjectrÊ   r   Úround_trip_pickler>   r   r    )r$   r#   r   r   r   Útest_read_pickle_with_subclassé  s    
rÍ   c              	   C   s–   t  ¡ }t  ¡ � }|j|| d� t|ƒ ¡ }W 5 Q R X t ¡ }|j|| d� | d¡ | 	¡ |ksn| dksnt
‚tj|| d�}| d¡ t  ||¡ dS )ze
    Read/write from binary file-objects w/wo compression.

    GH 26237, GH 29054, and GH 29570
    rl   r   )rk   rw   rx   N)r   rc   r`   re   r   Ú
read_bytesrj   ÚBytesIOrU   Úgetvaluer    r   r<   rA   )rm   rg   rQ   Ú	referenceÚbufferZread_dfr   r   r   Ú%test_pickle_binary_object_compressionò  s    


rÓ   c                 C   s8   | }|}dd„ }||ƒ ||j ƒ ||ƒ ||j ƒ d S )Nc                 S   s   t  | ¡}t  | |¡ d S r+   )r   rÌ   rA   )r9   Ú	unpickledr   r   r   Ú_test_roundtrip  s    
zDtest_pickle_dataframe_with_multilevel_index.<locals>._test_roundtrip)ÚT)Z/multiindex_year_month_day_dataframe_random_dataZ multiindex_dataframe_random_dataZymdr9   rÕ   r   r   r   Ú+test_pickle_dataframe_with_multilevel_index  s    
r×   c                  C   sB   t dddd�} ttj t| ƒ¡| ƒ}t |¡}|jj	dks>t
‚d S )Nz1/1/2011z1/1/2012r7   )r!   )r   r   ÚnpÚrandomZrandnÚlenr   rÌ   r6   r!   r    )Zprngr0   Znew_tsr   r   r   Ú"test_pickle_timeseries_periodindex  s    
rÛ   Únamei	  g     Hˆ@iÑ  é   )r1   r2   c                 C   s$   t  t j| d�¡}|j| ks t‚d S )N)rÜ   )r   rÌ   ZmakeTimeSeriesrÜ   r    )rÜ   rÔ   r   r   r   Útest_pickle_preserve_name&  s    rÞ   c                 C   s   t  | ¡}t  || ¡ d S r+   ©r   rÌ   r>   )Zdatetime_seriesZunp_tsr   r   r   Útest_pickle_datetimes/  s    
rà   c                 C   s   t  | ¡}t  || ¡ d S r+   rß   )Zstring_seriesZ
unp_seriesr   r   r   Útest_pickle_strings4  s    
rá   c                  C   sf   t tdƒƒ d¡jdg } t | ¡}|jjd jdks:t	‚|jjd j
dksPt	‚t |dg | ¡ d S )NÚabcr   r   r1   )r1   T)r   ÚlistZastypeZilocr   rÌ   Z_mgrÚblocksÚndimr    Úshaper>   )ZserrD   r   r   r   Ú test_pickle_preserves_block_ndim9  s
    
rç   rJ   c                 C   s@   t  tdƒ¡}t t|j| |d�tt j|d�¡}t ||¡ d S )Ni † )rJ   rm   rl   )	r   Ú	DataFrameÚranger   rd   r   re   r<   rA   )rJ   rm   rg   r#   r   r   r   Ú%test_pickle_big_dataframe_compressionF  s    þrê   c               	   C   sH   t j tdd¡} t| dƒ�}t |¡}W 5 Q R X t ¡ }t	 
||¡ d S )Nz1.2.4zempty_frame_v1_2_4-GH#42345.pklrT   )r�   rQ   ÚjoinÚlegacy_dirnamerL   rM   rV   r   rè   r   rA   )rQ   Úfdrg   r$   r   r   r   Ú#test_pickle_frame_v124_unpickle_130Q  s
    rî   )]Ú__doc__rv   ÚdatetimeÚ	functoolsr   Úglobrk   rj   r�   Úpathlibr   rM   rz   rƒ   rq   Úwarningsr   r   r   r}   ÚnumpyrØ   r:   Zpandas.compatr   r   Zpandas.compat._optionalr	   Zpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdZpandasr   r
   r   r   Zpandas._testingZ_testingr   Zpandas.io.commonÚcommonr§   Zpandas.tseries.offsetsr   r   r¨   Z
pytestmarkZfixturer   r&   rQ   rë   ÚdirnameÚ__file__rì   Úfilesr(   rE   rS   rW   r©   r,   re   ÚHIGHEST_PROTOCOLrb   rh   ri   ro   rs   rt   rª   Z
MultiIndexZfrom_arraysr¶   r·   rÈ   Z
skip_if_norÉ   ÚtzinforÊ   rÍ   rÓ   r×   rÛ   rÞ   rà   rá   Zskip_array_manager_invalid_testrç   ÚDEFAULT_PROTOCOLrê   rî   r   r   r   r   Ú<module>   sÆ   ÿ



1þþøþ


 
þþþ

 ÿ
%
		 ÿ



