
    .iP                    T   d Z ddlm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
m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mZ ddlZdd	lmZmZmZmZ ddl m!Z" dd
l#m$Z$ ddl%m&Z& ddl'mc m(Z) ddl*m+Z+m,Z, d Z-d Z.d Z/d Z0d:dZ1ejd                  jg                  d ejh                  e/d       ejh                  ejj                  d       ejh                   ej                  ejj                  ejl                        d       ejh                   ej                  ejj                  d      d       ejh                   ej                  ejj                  d      d      g      ejd                  jg                  dejj                  e/g      ejd                  jg                  d e1 e$                   d                      Z7d Z8ejr                  d         Z: G d! d"      Z; G d# d$      Z<d% Z=d& Z> G d' d(ej~                        Z@d) ZAd* ZBd+ ZCd, ZDejd                  jg                  d-d.d/d- ej                  d0d1d1      d2g      d3        ZEd4 ZFd5 ZGd6 ZHejd                  jg                  d7ej                  ejl                  g      d8        ZJd9 ZKy);a<  
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.
    )annotationsN)partial)Path)Any)is_platform_little_endian)import_optional_dependency)	DataFrameIndexSeriesperiod_range)create_pickle_data)Version)DayMonthEndc                b   t        |t              rt        j                  | |       y |j	                  d      rt        j
                  | |       y |dk(  r/|t        j                  u r| t        j                  u s
J | |k(  sJ y y t        t        d| dt        j                        } || |       y )Nsp_	timestampassert__equal)

isinstancer
   tmassert_index_equal
startswithassert_equalpdNaTgetattrassert_almost_equal)resultexpectedtyp
comparators       Y/var/www/app/trading-bot/venv/lib/python3.12/site-packages/pandas/tests/io/test_pickle.pycompare_elementr$   :   s    (E"
fh/
~~e
)		rvvRVV###X%%% $ R73%v!68N8NO
68$    c                :   t        j                  d       t               st        j                  d       t	               }t        t              j                  j                  d      D ]'  }t        |j                  j                        } | |      }t        j                  |      }|j                         D ]  \  }}|j                         D ]  \  }}||   |   }	|dk(  r#|dv r|t        d      k  r|	j                  d       }	|t        d      k  r|dv rA|	j                  j!                  d	      |	_        |d
v r>|	d   j!                  t"              |	d<   |	d   j$                  j'                  d      |	d<   n|dv rV|	d   j!                  t        j(                  |	d   j*                  j,                  j!                  t"                          |	d<   n|dk(  r'|dk(  r"|	j.                  j'                  d      |	_        nv|dk(  rp|	j.                  j1                  |	j.                  j2                  D 
cg c]  }
|
j!                  d	       c}
      |	_        n|dv r|dk(  r!|	j.                  j'                  d      |	_        n|dv r|	j$                  j'                  d      }	n|dk(  rL|	j!                  t        j(                  |	j*                  j,                  j!                  t"                          }	n|dk(  r}|	j.                  j!                  t"              |	_        nX|dk(  r|dv r|	j'                  d      }	n=|dk(  r8|	j1                  |	j2                  D 
cg c]  }
|
j!                  d	       c}
      }	|dk(  r$|	j!                  t        j4                  d            }	|dv rh|t        d      k  rd}n%t        d      |cxk  rt        d      k  rn nd}nd}|	j                  D ]#  }|	|   j$                  j'                  |      |	|<   % |dk(  r(|d k(  r#d!|v r|	j!                  t6        j8                        }	|d"k(  r_|dk(  rYt;        j<                  ||	       |j.                  j>                  |	j.                  j>                  k(  sJ |j.                  j>                  j@                  rJ t;        j<                  |d#kD  |	d#kD         |j.                  j>                  }|tC        d$      z   tC        d%      k(  sJ |t        jD                  d$&      z   }tG        |t        jD                        sJ |t        jD                  d$d$'      k(  sJ |t        jD                  d$(      z   }tG        |t        jD                        sJ |t        jD                  d$d$)      k(  rJ |dk(  r|d*k(  rt;        jH                  ||	       tG        |j>                  tJ              sJ |j>                  tK               k(  sJ |jL                  d+k(  sJ t;        jH                  |jO                  d%      |	jO                  d%             l|d"k(  r|d,v rt;        j<                  ||	       |d-k(  r|d.v rt;        jP                  ||	       tS        ||	|         * y c c}
w c c}
w )/Npytzz"known failure on non-little endianzdata/legacy_pickle/*/*.p*kl*r   )tzbothz1.3.0z
3.0.0.dev0)framesp_frameobject)mixed	mixed_dupCDns)
cat_onecolcat_and_floatAr+   floatmi)series	sp_seriests)dtdt_tzcatdupindex)date	timedeltastringpython)dt_mixed_tzsdt_mixed2_tzsz2.1susintwindowsr7   r         )hours)daysrK   )nanoseconds)rL   rM   periodM)r;   r<   r*   )rC   r2   r3   )*pytestimportorskipr   skipr   r   __file__parentglobr   namer   read_pickleitems
tz_convertcolumnsastyper,   r:   as_unitCategoricalDtyper<   
categoriesr>   
set_levelslevelsStringDtypenpint32r   assert_series_equalfreq	normalizer   	Timedeltar   r   r   freqstrshiftassert_frame_equalr$   )datapathcurrent_datalegacy_picklelegacy_versiondatar!   dvr:   r   r    levelexpected_unitcolre   ress                  r#   test_picklesru   P   s   
$&89%'L h..334RS q; !5!5!:!:; /~~m,zz| k	;GC hhj j;
F',R0 ;&n,&)99  (2248H!GL$99 33+3+;+;+B+B8+L(!77,4SM,@,@,HHSM,4SM,<,<,D,DT,JHSM#BB,4SM,@,@ " 3 3$,SM$5$5$@$@$G$G$O!"-HSM
 !J.2=-5^^-C-CD-IHN4Z-5^^-F-F 2:1F1F!"(- %*LL$:!".HN  77:-5^^-C-CD-IHN?2'/{{':':4'@H5['/ " 3 3$,LL$;$;$B$B6$J!"(H
  5[-5^^-B-B6-JHNB2G,G#+#3#3D#9#+#6#6AIQU\\(3Q$ X~#+??2>>(3K#L::%6(, >QGL<QQ(+(,'// P(0(8(8(@(@(OP'>bEki=6P'rxx8H(?rTz**68<!<<,,0C0CCCC%||00::::**6A:x!|D "<<,,D#a&=CF222A!66C%c2<<888",,AQ"????!!<<C%c2<<888",,A1"EEEEG^h))&(;%fkk8<<<!;;(*444!>>S000))&,,q/8>>!;LMH_/?)?**68<G^ / )
 ))&(;#FHc:Uj;k	;q;L!", Rs   4ZZc                v    t        |d      5 }t        j                  | |d       d d d        y # 1 sw Y   y xY w)Nwbprotocol)openpickledump)objpathfhs      r#   python_picklerr      s3    	dD	 *RCb)* * *s   /8c                    t        | d      5 }|j                  d       t        j                  |      cd d d        S # 1 sw Y   y xY w)Nrbr   )r{   seekr|   load)r   r   s     r#   python_unpicklerr      s9    	dD	 R

{{2  s	   &=Ac                    | j                         D cg c]  \  }}|j                         D ]  }||f   c}}}S c c}}}w )zFlatten create_pickle_data)rX   values)ro   r!   examplesexamples       r#   flattenr      sS     "ZZ\ C(  
g  s   #=pickle_writerrB   )idpandas_proto_defaultry   pandas_proto_highest   pandas_proto_4   pandas_proto_5writerztyp, expectedc                   |} |||       t        j                  |      }t        |||        t        |      }t        |||        t	        |d      5 } |||       |j                  d       d d d        t	        |d      5 }t        j                  |      }|j                  d       d d d        t        |||        y # 1 sw Y   SxY w# 1 sw Y   #xY w)Nrw   moder   r   )r   rW   r$   r   r{   r   )r!   r    r   r   	temp_filer   r   handles           r#   test_round_trip_currentr      s    & D(D! ^^D!FFHc*d#FFHc* 
d	 &xA 
d	 &'A FHc*  s   C 'C C	Cc                   t        dt        j                  d      j                  d      z  t	        t        d      t              t	        t        d      D cg c]  }d| 	 c}t                    }t        j                  |j                  t        j                  |       }t        j                  ||       y c c}w )	N皙?x      r   ABCDdtyper   i-rZ   r>   )r	   rb   arangereshaper
   listr,   ranger   round_trip_pathlib	to_pickler   rW   rj   )r   idfr   s       r#   test_pickle_path_pathlibr     s    	biin$$W--d6l&1uRy1!r!X1@
B
 ""2<<KF"f% 2s   B;c                 2    dt        j                          dS )N__z	__.pickle)uuiduuid4 r%   r#   get_random_pathr     s    

~Y''r%   c                      e Zd Zej                  Zd Zd Zej                  j                  dg d      d        Zd Zd Zd Zy	)
TestCompressionc                   |t        j                  ||       y |dk(  rt        j                  |d      }nJ|dk(  rt	        j
                  |d      }n-|dk(  r_t        j                  |dt        j                        5 }|j                  |t        j                  j                  |             d d d        n|dk(  rwt        |d      5 }t        j                  |d      5 }|j                  |t        j                  j                  |            }|j                  ||       d d d        d d d        nM|d	k(  rd
d l}|j#                  |d      }n1|dk(  rt%        d      j                  |d      }nd| }	t'        |	      |dvr@t        |d      5 }5  |j                  |j)                                d d d        d d d        y y # 1 sw Y   NxY w# 1 sw Y   xY w# 1 sw Y   fxY w# 1 sw Y   7xY w# 1 sw Y   y xY w)Ngzipwbz2zipcompressiontarr   r   xzr   zstd	zstandardrw   zUnrecognized compression type: )r   r   )shutilcopyfiler   r{   r   BZ2FilezipfileZipFileZIP_DEFLATEDwriteosr   basenametarfile
gettarinfoaddfilelzmaLZMAFiler   
ValueErrorread)
selfsrc_path	dest_pathr   fr   r   tarinfor   msgs
             r#   compress_filezTestCompression.compress_file  s   OOHi0& 		)S)AE!Is+AE!CW=Q=QR >VW"''"2"28"<=> >E!h% -\\)#6 -#!nnXrww7G7G7QRGKK,-- - D i-AF"*;7<<YMA3K=ACS/!n,h% ' 'GGBGGI&'' ' -#> >- -- - ' '' 'sU   ?0G	G!AG#GG6 G*4G6GG	GG'*G3	/G66G?c                   |j                   |j                   dz  }|j                   |j                   dz  }t        dt        j                  d      j                  d      z  t        t        d      t              t        t        d      D cg c]  }d	| 	 c}t              
      }|j                  ||       t        j                  ||      5 }t        |d      5 }	|	j                  |j                                d d d        d d d        t!        j"                  |d       }
t        j$                  ||
       y c c}w # 1 sw Y   DxY w# 1 sw Y   HxY w)N.compressed.rawr   r   r   r   r   r   r   r   r   rw   )rT   stemr	   rb   r   r   r
   r   r,   r   r   r   decompress_filer{   r   r   r   rW   rj   )r   r   r   r   p1p2r   r   r   r   df2s              r#   test_write_explicitz#TestCompression.test_write_explicit?  s    9>>"2+ >>9>>"2$ 77"))C.((11$v,f5595a2aS5VD
 	R[1 < 	#b$ #2"#	#
 nnRT2
b#& 6# #	# 	#s*   EE$ EEE	EEr   ) Nonebad7zc                   t        dt        j                  d      j                  d      z  t	        t        d      t              t	        t        d      D cg c]  }d| 	 c}t                    }|}t        j                  t        d	
      5  |j                  ||       d d d        y c c}w # 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   zUnrecognized compression type)matchr   )r	   rb   r   r   r
   r   r,   r   rP   raisesr   r   )r   r   r   r   r   r   r   s          r#   test_write_explicit_badz'TestCompression.test_write_explicit_badU  s    "))C.((11$v,f5595a2aS5VD

 ]]:-LM 	8LL;L7	8 	8 6	8 	8s   B/B44B=c                   |j                   |j                   | z  }|j                   |j                   dz  }| j                  j                  |j	                               }t        dt        j                  d      j                  d      z  t        t        d      t              t        t        d      D cg c]  }d| 	 c}t              	      }|j                  |       t        j                  ||
      5 }	t!        |d      5 }
|
j#                  |	j%                                d d d        d d d        t'        j(                  |d 
      }t        j*                  ||       y c c}w # 1 sw Y   DxY w# 1 sw Y   HxY w)Nr   r   r   r   r   r   r   r   r   r   rw   )rT   r   _extension_to_compressiongetlowerr	   rb   r   r   r
   r   r,   r   r   r   r   r{   r   r   r   rW   rj   )r   compression_extr   r   r   r   r   r   r   r   r   r   s               r#   test_write_inferz TestCompression.test_write_infer`  s>   9>>"2?2C DD9>>"2$ 7744889N9N9PQ"))C.((11$v,f5595a2aS5VD
 	R < 	#b$ #2"#	#
 nnRT2
b#& 6# #	# 	#s*   9E*?E; E/,E;/E8	4E;;Fc                   |j                   |j                   dz  }|j                   |j                   dz  }t        dt        j                  d      j                  d      z  t        t        d      t              t        t        d      D cg c]  }d	| 	 c}t              
      }|j                  |d        | j                  |||       t        j                  ||      }t        j                  ||       y c c}w )Nr   r   r   r   r   r   r   r   r   r   r   )rT   r   r	   rb   r   r   r
   r   r,   r   r   r   r   rW   r   rj   )	r   r   r   r   r   r   r   r   r   s	            r#   test_read_explicitz"TestCompression.test_read_explicitw  s    9>>"2$ 779>>"2+ >>"))C.((11$v,f5595a2aS5VD
 	RT* 	2r{; nnR[9
b#& 6s   Dc                ^   |j                   |j                   dz  }|j                   |j                   | z  }| j                  j                  |j	                               }t        dt        j                  d      j                  d      z  t        t        d      t              t        t        d      D cg c]  }d| 	 c}t              	      }|j                  |d 
       | j                  |||
       t        j                   |      }	t#        j$                  ||	       y c c}w )Nr   r   r   r   r   r   r   r   r   r   )rT   r   r   r   r   r	   rb   r   r   r
   r   r,   r   r   r   r   rW   r   rj   )
r   r   r   r   r   r   r   r   r   r   s
             r#   test_read_inferzTestCompression.test_read_infer  s    9>>"2$ 779>>"2?2C DD44889N9N9PQ"))C.((11$v,f5595a2aS5VD
 	RT* 	2r{; nnR 
b#& 6s   9D*N)__name__
__module____qualname__icomextension_to_compressionr   r   r   rP   markparametrizer   r   r   r   r   r%   r#   r   r     sO     $ = ='@', [[],EF8 G8'.'&'r%   r   c                  T    e Zd Zej                  j                  dg d      d        Zy)TestProtocolrz   )rx   r   rI   rJ   c                v   |}t        dt        j                  d      j                  d      z  t	        t        d      t              t	        t        d      D cg c]  }d| 	 c}t                    }|j                  ||	       t        j                  |      }t        j                  ||       y c c}w )
Nr   r   r   r   r   r   r   r   ry   )r	   rb   r   r   r
   r   r,   r   r   r   rW   r   rj   )r   rz   r   r   r   r   r   r   s           r#   	test_readzTestProtocol.test_read  s    "))C.((11$v,f5595a2aS5VD

 	TH-nnT"
b#&	 6s   B6N)r   r   r   rP   r   r   r   r   r%   r#   r   r     s%    [[Z7	' 8	'r%   r   c                   | }t        dt        j                  d      j                  d      z  t	        t        d      t              t	        t        d      D cg c]  }d| 	 c}t                    }t        |d	      5 }|j                  |       d d d        t        |d
      5 }t        j                  |      }d d d        t        j                  |       y c c}w # 1 sw Y   OxY w# 1 sw Y   1xY w)Nr   r   r   r   r   r   r   r   rw   r   )r	   rb   r   r   r
   r   r,   r   r{   r   r   rW   r   rj   )r   r   r   r   r   r   s         r#   test_pickle_buffer_roundtripr     s    D	biin$$W--d6l&1uRy1!r!X1@
B
 
dD	 R
R	dD	 $R#$"f% 2 $ $s   CC#)C/#C,/C8c                   t        j                  d       d}t        dt        j                  d      j                  d      z  t        t        d      t              t        t        d      D cg c]  }d	| 	 c}t              
      }|j                  |       t        j                  |      }t        j                  ||       y c c}w )Nfsspeczmemory://mockfiler   r   r   r   r   r   r   r   )rP   rQ   r	   rb   r   r   r
   r   r,   r   r   r   rW   r   rj   )r   mockurlr   r   r   s        r#   test_pickle_fsspec_roundtripr    s    
!!G	biin$$W--d6l&1uRy1!r!X1@
B
 LL^^G$F"f%	 2s   .C	c                      e Zd ZddZy)MyTzc                     y Nr   )r   s    r#   __init__zMyTz.__init__  s    r%   N)returnr   )r   r   r   r  r   r%   r#   r  r    s    r%   r  c                    t        t              t               f}t        j                  ||       }t        j
                  |d   |d          t        |d   t              sJ y )Nr   r   rI   )r   r,   r  r   round_trip_picklerd   r   )r   r    r   s      r#   test_read_pickle_with_subclassr    sQ    F#TV+H!!(I6F6!9hqk2fQi&&&r%   c                ^   t        dt        j                  d      j                  d      z  t	        t        d      t              t	        t        d      D cg c]  }d| 	 c}t                    }|}|j                  || 	       |j                         }t        j                         }|j                  || 	       |j                  d
       |j                         |k(  s| dv sJ t        j                  || 	      }|j                  d
       t!        j"                  ||       yc c}w )ze
    Read/write from binary file-objects w/wo compression.

    GH 26237, GH 29054, and GH 29570
    r   r   r   r   r   r   r   r   r   r   )r   r   r   N)r	   rb   r   r   r
   r   r,   r   r   
read_bytesioBytesIOr   getvaluer   rW   r   rj   )r   r   r   r   r   	referencebufferread_dfs           r#   %test_pickle_binary_object_compressionr    s     
biin$$W--d6l&1uRy1!r!X1@
B DLL;L/!I ZZ\FLL[L1
KKN ??	)[<R-RRR nnV=G
KKN"g&' 2s   D*c                    | }|}d } |||        ||j                   |        |||        ||j                   |       y )Nc                \    t        j                  | |      }t        j                  | |       y r  )r   r  rj   )r*   r   	unpickleds      r#   _test_roundtripzDtest_pickle_dataframe_with_multilevel_index.<locals>._test_roundtrip  s$    ((	:	
eY/r%   )T)/multiindex_year_month_day_dataframe_random_data multiindex_dataframe_random_datar   ymdr*   r  s         r#   +test_pickle_dataframe_with_multilevel_indexr    sE    
 :C,E0 E9%EGGY'C#CEE9%r%   c                   t        ddd      }t        t        j                  j	                  d      j                  t        |            |      }t        j                  ||       }|j                  j                  dk(  sJ y )Nz1/1/2011z1/1/2012rO   )re   rJ   )r   r   rb   randomdefault_rngstandard_normallenr   r  r>   rh   )r   prngr9   new_tss       r#   "test_pickle_timeseries_periodindexr&    sd    
JS9D			%%a(88TCT	JB!!"i0F<<3&&&r%   rV   i	  g     H@i     )rI   rJ   c                    t        j                  t        t        j                  dt        j
                        |       |      }|j                  | k(  sJ y )N
   r   )rV   )r   r  r   rb   r   float64rV   )rV   r   r  s      r#   test_pickle_preserve_namer+    sC     $$ryy2::.T:II >>T!!!r%   c                \    t        j                  | |      }t        j                  ||        y r  r   r  rd   )datetime_seriesr   unp_tss      r#   test_pickle_datetimesr0    s$    !!/9=F6?3r%   c                \    t        j                  | |      }t        j                  ||        y r  r-  )string_seriesr   
unp_seriess      r#   test_pickle_stringsr4  $  s$    %%mY?J:}5r%   c                f   t        t        d            j                  d      j                  dg   }t	        j
                  ||       }|j                  j                  d   j                  dk(  sJ |j                  j                  d   j                  dk(  sJ t	        j                  |dg   |       y )Nabccategoryr   rI   )rI   T)r   r   r[   ilocr   r  _mgrblocksndimshaperd   )r   serrt   s      r#    test_pickle_preserves_block_ndimr>  )  s    
e

$
$Z
0
5
5qc
:C


sI
.C88??1""a'''88??1##t+++ 3v;,r%   rz   c                    t        t        d            }t        j                  t	        |j
                  | |      t	        t        j                  |      |      }t        j                  ||       y )Ni )rz   r   r   )	r	   r   r   r   r   r   r   rW   rj   )rz   r   r   r   r   s        r#   %test_pickle_big_dataframe_compressionr@  5  sU     
5=	!B""x[IK8F
 "f%r%   c                     | t        t              j                  dddd      }t        |d      5 }t	        j
                  |      }d d d        t        g g       }t        j                  |       y # 1 sw Y   -xY w)Nro   rm   z1.2.4zempty_frame_v1_2_4-GH#42345.pklr   )r>   rZ   )	r   rS   rT   r{   r|   r   r	   r   rj   )rk   r   fdr   r    s        r#   #test_pickle_frame_v124_unpickle_130rC  A  ss    X)D 
dD	 R[[_ r2.H"h'	 s   A22A;)ro   dictr	  zlist[tuple[str, Any]])L__doc__
__future__r   r   datetime	functoolsr   r   r  r   pathlibr   r|   r   r   typingr   r   r   numpyrb   rP   pandas.compatr   pandas.compat._optionalr   pandasr   r	   r
   r   r   pandas._testing_testingr   -pandas.tests.io.generate_legacy_storage_filesr   pandas.util.versionr   pandas.io.commoncommonr   pandas.tseries.offsetsr   r   r$   ru   r   r   r   r   r   paramr   HIGHEST_PROTOCOLr   r   fixturer   r   r   r   r  tzinfor  r  r  r  r&  r+  r0  r4  r>  DEFAULT_PROTOCOLr@  rC  r   r%   r#   <module>r[     s   # 
     	 	          3 >    L '  %,y;x*
 ^1R\\&<=IbllV5L5LM%	
 	&Y&&r||a@EUVIbllQ7	
  BLL.#AB'2D2F*GH+ I C!$+,& ( (@' @'P' '&&8?? 
''>&$' 
S%!2!2!24R!@&I""4
6
	- f&=&=v?V?V%WX& Y&(r%   