o
    iG                     @   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j34ej35e6ddZ7eej34e7d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"g d=fd>e!jHIg d=g d?gfgd@dA ZJdBdC ZKej.=dDg dEdFdG ZLeMdHdIdJ ZNG dKdL dLejOZPdMdN ZQdOdP ZRdQdR ZSdSdT ZTej.=dUdVdWdUedXdYdYdZgd[d\ ZUd]d^ ZVd_d` ZWejXdadb ZYej.=dcejZej@gddde Z[dfdg Z\dS )ha<  
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   sJ   ddl m}  t  tddtd |  W  d    S 1 sw   Y  d S )Nr   create_pickle_dataignorez The 'freq' argument in Timestamp)category)-pandas.tests.io.generate_legacy_storage_filesr   r   r   FutureWarningr    r   V/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/io/test_pickle.pycurrent_pickle_data>   s   $r   c                 C   s   t |trt||  d S |drt| | d S |dkr<|tju r,| tju s*J d S | |ks2J | j|jks:J d S t	td| dtj
}|| | d S )Nsp_	timestampassert__equal)
isinstancer
   tmassert_index_equal
startswithassert_equalpdNaTfreqgetattrassert_almost_equal)resultexpectedtyp
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r|dkrt	|| |j
j|j
jksEJ |j
jjrLJ t	|dk|dk |j
j}|td td	ksfJ |tjdd
 }t|tjsvJ |tjdddksJ |tjdd }t|tjsJ |tjdddksJ q#|dkr|dkrt|| t|jtsJ |jt ksJ |jdksJ t|d	|d	 q#|dkr|dv rt	|| q#|dkr|dv rt|| q#t||| q#qW d    d S 1 sw   Y  d S )Nz"known failure on non-little endianT)recordr   seriestsr         )hours)daysr:   )nanoseconds)r;   r<   indexperiodM)dt_tzcatframe)dt_mixed_tzs
cat_onecolcat_and_float)r   pytestskipr   r   r#   read_pickleitemsr   assert_series_equalr=   r%   	normalizer   	Timedeltar   r    r   freqstrshiftassert_frame_equalr,   )	r.   r-   r*   dvdtr(   r)   r%   resr   r   r   test_picklesl   sF   

$rS   c                 C   @   t |d}tj| |dd W d    d S 1 sw   Y  d S Nwbprotocolopenpickledumpobjpathfhr   r   r   python_pickler      "rb   c                 C   sB   t | d}|d t|W  d    S 1 sw   Y  d S )Nrbr   )r[   seekr\   load)r`   ra   r   r   r   python_unpickler   s   
$rg   pickle_writerpython)idpandas_proto_defaultrX   pandas_proto_highest   pandas_proto_4   pandas_proto_5writerz5ignore:The 'freq' argument in Timestamp:FutureWarningc                 C   s  | }|  D ]\}}|  D ]x\}}t h}||| t|}	t|	|| t|}	t|	|| t|dd}
||| |
d W d    n1 sLw   Y  t|dd}
t|
}	|
d W d    n1 slw   Y  t|	|| W d    n1 sw   Y  qqd S )NrV   moder   rd   )	rI   r   ensure_cleanr#   rH   r,   rg   r[   re   )r   rh   rq   r-   r*   rP   rQ   r)   r`   r(   handler   r   r   test_round_trip_current   s,   




rv   c                  C   (   t  } t | jtj}t | | d S r1   )r   makeDataFrameround_trip_pathlib	to_pickler#   rH   rO   dfr(   r   r   r   test_pickle_path_pathlib      r}   c                  C   rw   r1   )r   rx   round_trip_localpathrz   r#   rH   rO   r{   r   r   r   test_pickle_path_localpath   r~   r   r*   sparseseriessparseframec                 C   sX   t t tdt tj| ddd| ddd W d   dS 1 s%w   Y  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-   r\   z-0.20.3.pickle.gzgzipcompressionN)r   assert_produces_warningr   r   DeprecationWarningr#   rH   )r4   r*   r   r   r   test_legacy_sparse_warning   s   
"r   c                   C   s   dt   dS )N__z	__.pickle)uuiduuid4r   r   r   r   get_random_path   s   r   c                   @   sT   e Zd ZejZdd Zdd Zej	dg ddd Z
d	d
 Zdd Zdd ZdS )TestCompressionc           	   	   C   s  |d u rt || d S |dkrt|d}n|dkr"t|d}n|dkrJtj|dtjd}|	|t
j| W d    n1 sDw   Y  nb|dkrt|d/}tj|dd}||t
j|}||| W d    n1 svw   Y  W d    n1 sw   Y  n!|d	krt |d}n|d
krtd|d}n	d| }t||dvrt|d*}| |	|  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S d S )Nr   wbz2zipr   tarrd   rr   xzzstd	zstandardrV   zUnrecognized compression type: )r   r   )shutilcopyfiler   r[   r   BZ2FilezipfileZipFileZIP_DEFLATEDwriteosr`   basenametarfile
gettarinfoaddfiler   r	   
ValueErrorread)	selfsrc_path	dest_pathr   fra   r   tarinfomsgr   r   r   compress_file  s@   
PzTestCompression.compress_filec                 C   s  |}|d }|d }t |q}t |S}t  }|j||d t j||d$}	t|d}
|
|	  W d    n1 s@w   Y  W d    n1 sOw   Y  tj	|d d}t 
|| W d    n1 skw   Y  W d    d S W d    d S 1 sw   Y  d S )N.compressed.rawr   rV   )r   rt   rx   rz   decompress_filer[   r   r   r#   rH   rO   )r   r   r   basepath1path2p1p2r|   r   ra   df2r   r   r   test_write_explicit!  s   Pz#TestCompression.test_write_explicitr   ) Nonebad7zc              	   C   s   t jtdd1 t|}t }|j||d W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )NzUnrecognized compression type)matchr   )rF   raisesr   r   rt   rx   rz   )r   r   r   r`   r|   r   r   r   test_write_explicit_bad6  s   "z'TestCompression.test_write_explicit_badc                 C   s   |}|| }|d }| j | }t|o}t|Q}t }	|	| tj||d$}
t|d}|	|

  W d    n1 sFw   Y  W d    n1 sUw   Y  tj|d d}t|	| W d    n1 sqw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   r   rV   )_extension_to_compressiongetlowerr   rt   rx   rz   r   r[   r   r   r#   rH   rO   )r   compression_extr   r   r   r   r   r   r   r|   r   ra   r   r   r   r   test_write_infer=  s    
Pz TestCompression.test_write_inferc           
   	   C   s   |}|d }|d }t |F}t |(}t  }|j|d d | j|||d tj||d}	t ||	 W d    n1 s@w   Y  W d    d S W d    d S 1 sXw   Y  d S )Nr   r   r   )r   rt   rx   rz   r   r#   rH   rO   )
r   r   r   r   r   r   r   r   r|   r   r   r   r   test_read_explicitS  s   Pz"TestCompression.test_read_explicitc              	   C   s   |}|d }|| }| j | }t|D}t|&}t }	|	j|d d | j|||d t	|}
t
|	|
 W d    n1 sFw   Y  W d    d S W d    d S 1 s^w   Y  d S )Nr   r   )r   r   r   r   rt   rx   rz   r   r#   rH   rO   )r   r   r   r   r   r   r   r   r   r|   r   r   r   r   test_read_inferf  s   
PzTestCompression.test_read_inferN)__name__
__module____qualname__icomr   r   r   rF   markparametrizer   r   r   r   r   r   r   r   r      s    
r   c                   @   s&   e Zd Zejdg ddd ZdS )TestProtocolrY   )rW   r   r8   r9   c                 C   s\   t |}t  }|j||d t|}t || W d    d S 1 s'w   Y  d S )NrX   r   rt   rx   rz   r#   rH   rO   )r   rY   r   r`   r|   r   r   r   r   	test_read  s   
"zTestProtocol.test_readN)r   r   r   rF   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 )Nr   r-   r\   )r#   rH   r   r    columns)r4   r   r   r`   r|   r   r   r   test_unicode_decode_error  s   
r   c               	   C   s   t  G} t  }t| d}|| W d    n1 sw   Y  t| d}t|}W d    n1 s8w   Y  t || W d    d S 1 sNw   Y  d S )NrV   rd   )r   rt   rx   r[   rz   r#   rH   rO   )r`   r|   ra   r(   r   r   r   test_pickle_buffer_roundtrip  s   
"r   mockurl)zhttp://url.comzftp://test.comzhttp://gzip.comc                    s   dd }G dd d t  * fdd}t  }|| | d| t|}t || W d    d S 1 s<w   Y  d S )Nc                 S   rT   rU   rZ   r^   r   r   r   rb     rc   z3test_pickle_generalurl_read.<locals>.python_picklerc                   @   s6   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdS )z5test_pickle_generalurl_read.<locals>.MockReadResponsereturnNc                 S   s0   t |d| _d|v rddi| _d S ddi| _d S )Nrd   r   zContent-Encodingr   )r[   fileheaders)r   r`   r   r   r   __init__  s   z>test_pickle_generalurl_read.<locals>.MockReadResponse.__init__c                 S   s   | S r1   r   r   r   r   r   	__enter__     z?test_pickle_generalurl_read.<locals>.MockReadResponse.__enter__c                 W   s   |    d S r1   )close)r   argsr   r   r   __exit__  s   z>test_pickle_generalurl_read.<locals>.MockReadResponse.__exit__c                 S   
   | j  S r1   )r   r   r   r   r   r   r        
z:test_pickle_generalurl_read.<locals>.MockReadResponse.readc                 S   r   r1   )r   r   r   r   r   r   r     r   z;test_pickle_generalurl_read.<locals>.MockReadResponse.closer   N)r   r   r   r   r   r   r   r   r   r   r   r   MockReadResponse  s    
r   c                     s    S r1   r   )r   kwargsr   r`   r   r   mock_urlopen_read  s   z6test_pickle_generalurl_read.<locals>.mock_urlopen_readzurllib.request.urlopen)r   rt   rx   setattrr#   rH   rO   )monkeypatchr   rb   r   r|   r(   r   r   r   test_pickle_generalurl_read  s   


"r   fsspecc                  C   sZ   t   d} t  }||  t| }t || W d    d S 1 s&w   Y  d S )Nzmemory://afiler   )r   r|   r(   r   r   r   test_pickle_fsspec_roundtrip  s   


"r   c                   @   s   e Zd ZdddZdS )MyTzr   Nc                 C   s   d S r1   r   r   r   r   r   r     r   zMyTz.__init__r   )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 J d S )N)dtyper   r8   )r   objectr   r   round_trip_picklerJ   r   )r)   r(   r   r   r   test_read_pickle_with_subclass  s   
r   c                 C   s   t  }t  }|j|| d t| }W d   n1 s w   Y  t }|j|| d |d |	 |ksA| dv sAJ t
j|| d}|d t || dS )ze
    Read/write from binary file-objects w/wo compression.

    GH 26237, GH 29054, and GH 29570
    r   Nr   )r   r   r   )r   rx   rt   rz   r   
read_bytesr   BytesIOre   getvaluer#   rH   rO   )r   r|   r`   	referencebuffer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 r1   )r   r   rO   )rB   	unpickledr   r   r   _test_roundtrip     
zDtest_pickle_dataframe_with_multilevel_index.<locals>._test_roundtrip)T)/multiindex_year_month_day_dataframe_random_data multiindex_dataframe_random_dataymdrB   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J d S )Nz1/1/2011z1/1/2012r?   )r%   )
r   r   nprandomrandnlenr   r   r=   r%   )prngr7   new_tsr   r   r   "test_pickle_timeseries_periodindex  s   
r  namei	  g     H@i     )r8   r9   c                 C   s$   t t j| d}|j| ksJ d S )N)r	  )r   r   makeTimeSeriesr	  )r	  r   r   r   r   test_pickle_preserve_name&  s   r  c                 C      t | }t ||  d S r1   r   r   rJ   )datetime_seriesunp_tsr   r   r   test_pickle_datetimes/  r   r  c                 C   r  r1   r  )string_series
unp_seriesr   r   r   test_pickle_strings4  r   r  c                  C   sf   t tddjdg } t| }|jjd jdksJ |jjd j	dks(J t
|dg |  d S )Nabcr   r   r8   )r8   T)r   listastypeilocr   r   _mgrblocksndimshaperJ   )serrR   r   r   r    test_pickle_preserves_block_ndim9  s
   
r  rY   c                 C   s@   t td}tt|j| |dtt j|d}t|| d S )Ni )rY   r   r   )	r#   	DataFrameranger   ry   r   rz   rH   rO   )rY   r   r|   r(   r   r   r   %test_pickle_big_dataframe_compressionF  s   r!  c                  C   s\   t jtdd} t| d}t|}W d    n1 sw   Y  t }t	
|| d S )Nz1.2.4zempty_frame_v1_2_4-GH#42345.pklrd   )r   r`   joinlegacy_dirnamer[   r\   rf   r#   r  r   rO   )r`   fdr|   r)   r   r   r   #test_pickle_frame_v124_unpickle_130Q  s   r%  )]__doc__r   datetime	functoolsr   globr   r   r   pathlibr   r\   r   r   r   warningsr   r   r   r   numpyr  rF   pandas.compatr   r   pandas.compat._optionalr	   pandas.util._test_decoratorsutil_test_decoratorstdpandasr#   r
   r   r   pandas._testing_testingr   pandas.io.commoncommonr   pandas.tseries.offsetsr   r   r   
pytestmarkfixturer   r,   r`   r"  dirname__file__r#  filesr.   rS   rb   rg   r   r2   rz   HIGHEST_PROTOCOLrv   r}   r   r   r   r   r   
MultiIndexfrom_arraysr   r   r   
skip_if_nor   tzinfor   r   r   r  r  r  r  r  skip_array_manager_invalid_testr  DEFAULT_PROTOCOLr!  r%  r   r   r   r   <module>   s    



1


 



%
		



