
    rh";                        S SK r S SKrS SKJr  S SKrS SKrSSKJ	r	J
r
  SSKJrJrJr  SSKJrJr  SSKJrJr  SS	KJr  SS
KJr  SS/rS rS rS rS r " S S5      rS r " S S\5      r  " S S\5      r! " S S\5      r" " S S\"5      r# " S S\"5      r$ " S S\5      r% " S  S!\5      r& " S" S#\5      r'S$ rS% rg)&    N)StringIO   )decodeencode)BaseHandlerregister
unregister)REVERSE_TYPE_MAPTYPE_MAP)	b64decode	b64encode   )register_handlers)unregister_handlersr   r   c                 x    [        U [        R                  5      (       a  U R                  5       $ [	        U 40 UD6$ N)
isinstancenpgenericitemr   )objkwargss     O/home/james-whalen/.local/lib/python3.13/site-packages/jsonpickle/ext/pandas.py	pd_encoder      s/    #rzz""xxz#       c                     [        U 40 UD6$ r   )r   )sr   s     r   	pd_decoder      s    !vr   c                     U (       d  / $ / nU S   nSnU SS  H%  nXB:X  a  US-  nM  UR                  X#/5        UnSnM'     UR                  X#/5        U$ )z
Encodes a list of type codes using Run-Length Encoding (RLE). This allows for object columns in dataframes to contain items of different types without massively bloating the encoded representation.
r   r   N)append)
types_listencodedcurrent_typecounttyps        r   
rle_encoder&      sm     	Ga=LE!"~QJENNL01LE  NNL()Nr   c                 J    / nU  H  u  p#UR                  U/U-  5        M     U$ )zT
Decodes a Run-Length Encoded (RLE) list back into the original list of type codes.
)extend)encoded_listdecodedr%   r$   s       r   
rle_decoder+   4   s,     G"
uu}% #Nr   c                   2    \ rS rSrS\4S jrSS jrS rSrg)	PandasProcessor>   i  c                     Xl         X l        g)am  
:param size_threshold: nonnegative int or None
    valid values for 'size_threshold' are all nonnegative
    integers and None.  If size_threshold is None,
    dataframes are always stored as csv strings
:param compression: a compression module or None
    valid values for 'compression' are {zlib, bz2, None}
    if compression is None, no compression is applied
N)size_thresholdcompression)selfr0   r1   s      r   __init__PandasProcessor.__init__?   s     -&r   Nc                    U R                   bl  [        U5      U R                   :  aS  U R                  (       a.  U R                  R                  UR	                  5       5      nSUS'   [        U5      US'   SUS'   O	XS'   SUS'   X2S'   U$ )NTcompvaluesFtxtmeta)r0   lenr1   compressr   r   )r2   bufdatar9   s       r   flatten_pandasPandasProcessor.flatten_pandasL   s    *s3x$:M:M/M&&//

=#V&s^DNDK NDKVr   c                    UR                  SS5      (       a  US   nON[        US   5      nUR                  SS5      (       a)  U R                  R                  U5      R	                  5       nUR                  S0 5      nX#4$ )Nr8   Tr7   r6   Fr9   )getr   r1   
decompressr   )r2   r=   r<   r9   s       r   restore_pandasPandasProcessor.restore_pandasZ   sr    88E4  x.CDN+Cxx&&&&11#6==?xx#{r   )r1   r0   r   )	__name__
__module____qualname____firstlineno__zlibr3   r>   rC   __static_attributes__ r   r   r-   r-   >   s    &)t '	r   r-   c                    UR                  U R                  S0 5      SS9nU R                  SS/5      n/ n0 n/ n0 n0 nUR                  5        H  u  pU
R                  S5      (       a  UR	                  U	5        XU	'   M2  U
R                  S5      (       a
  [
        XY'   MR  U
R                  S5      (       a  UR	                  U	5        S	X'   M  XU	'   M     [        XXES
9UU4$ )NdtypesFresetheaderr   datetimecomplex	timedeltaobject)dtyperP   parse_dates
converters)restorerA   items
startswithr    rR   dict)r9   contextmeta_dtypesrP   rV   rW   
timedeltasparse_datetime_v2rU   kvs              r   make_read_csv_paramsrb   f   s    //$((8R"8/FK XXh$FKJJE!!#<<
##q!#$a \\)$$#JM\\+&&a EH!H $ 	K	
 	 r   c                   4    \ rS rSr\" 5       rS rS rS rSr	g)PandasDfHandler   c                 8   [        5       n[        UR                  [        R                  5      (       a>  UR                   Vs/ s H  n[        U5      PM     nnUR                  R                  nSnO2UR                  R                  5       nUR                  R                  nSn[        UR                  [        R                  5      (       aH  UR                  R                   Vs/ s H  n[        U5      PM     n	nUR                  R                  n
SnO2UR                  R                  5       n	UR                  R                  n
Sn0 n/ nUR                   H  nX   nUR                  R                  nUS:X  a  UR                  S 5      R                  5       (       a7  UR                  S 5      R                  5       nUX'   UR                  S5        M  UR                  5       X'   UR                  [        R                   " US5      5        M  UR                  5       X'   UR                  [        R                   " US5      5        M     [#        U	SS9n[%        U5      nUUU
[#        USS9UUUS.n[#        USS9nUR'                  UUU5      nU$ s  snf s  snf )	NTFrT   c                 `    [        U [        [        [        [        [
        R                  45      $ r   )r   listr[   settupler   ndarrayxs    r   <lambda>)PandasDfHandler.flatten.<locals>.<lambda>   s    jT4eRZZ,PQr   c                     [        U 5      $ r   )r   rl   s    r   rn   ro      s    r   py/jpkeys)
dtypes_rleindexindex_namescolumnscolumn_namesis_multiindexis_multicolumns)r-   r   rw   pd
MultiIndexrj   namestolistnameru   r7   rU   applyanyr    r   rA   r   r&   r>   )r2   r   r=   ppcolrw   rx   rz   idxindex_valuesrv   ry   data_columns
type_codescol_data
dtype_nameserialized_valuesindex_encoded	rle_typesr9   data_encodeds                        r   flattenPandasDfHandler.flatten   s.   ckk2==11-0[[9[cuSz[G9;;,,L"Okk((*G;;++L#O cii//25))2B2BC2B3E#J2BLC))//K M99++-L))..K!M
;;CxH!,,JX%>>Q#% )17J(K(R(R(T%(9L%%%g. )1(9L%%%hll:x&HI %-OO$5!!!(,,z8"DE) . |$7z*	 $"&gD1(*.
 l6   tT:} : Ds   J%Jc                    U R                   R                  U5      u  p# [        USS9n US   n[        U5      n[        US   SS9nUR                  S	S
5      (       a-  [        R                  R                  XsR                  S5      S9nOUn0 n	0 n
[        X5       HO  u  pXK   nUS:X  a!  U Vs/ s H  n[        U5      PM     nnXU'   M0  XU'   [        R                  " US5      nUX'   MQ     [        R                  " U	5      nUUl        UR                    HC  nU
R                  US5      n ["        R$                  " U5      nUU   R'                  U5      UU'   ME     [        US   SS9nUR                  SS
5      (       a.  [        R                  R                  UUR                  S5      S9nO$[        R(                  " UUR                  S5      S9nUUl        SU;   aY  UR                  S	S
5      (       a"  UR                  S5      UR                   l        U$ UR                  S5      UR                   l        U$ ! [         a)    [        R
                  " SSS9  U R                  U5      s $ f = f! [         a)    [        R
                  " SSS9  U R                  U5      s $ f = fs  snf ! [         a!    SU S3n[        R
                  " U5         GM  f = f)NTrr   zjsonpickle versions at and above v3.4 have a different encoding scheme for pandas dataframes. If you're not decoding an object encoded in pre-v3.4 jsonpickle, please file a bug report on our GitHub!   )
stacklevelrt   zjsonpickle versions at and above v3.4 have a different encoding scheme for pandas dataframes. Please update your jsonpickle and re-encode these objects!rw   rz   Frx   r}   rq   rT   z9jsonpickle was unable to properly deserialize the column zL into its inferred dtype. Please file a bugreport on the jsonpickle GitHub! ru   ry   rv   r   )r   rC   r   	Exceptionwarningswarnrestore_v3_3KeyErrorr+   rA   r{   r|   from_tupleszipr
   	DataFramerw   r   rU   astypeIndexru   r}   r   )r2   r   r   r9   r   r   r   columns_decodedrw   df_datarM   r   	type_coder   r   
col_values	dtype_strdfrU   msgr   ru   s                         r   rX   PandasDfHandler.restore   s   !WW33C8	*!,T:L	*\*I  	*
 !it<88%u--mm//xx'? 0 G &G !'6NC#(HG#7?@xtfTlx
@)',00HE	' 7 \\'"
 ::C

31I	#+S'../3	  d7m$788OU++MM--DHH]$; . E HH\0GHE T!xx)511#'88N#;

  	 #'((>":

	m  
	*MM@  $$S))
	*  		*MMR  $$S))		*8 A$  #""% 'IJ 
 c""#s:   
H= I3 /J).-J.=0I0/I030J&%J&.&KKc                    U R                   R                  U5      u  p#[        X0R                  5      u  pEnUR	                  SS 5      nUS   R                  5       (       a   [        R                  " [        U5      40 UD6O[        R                  " 5       nU H  n	[        R                  " X   5      X'   M     UR                  U5      nUR                  [        US   5      SS9  U(       a  XxR                  l        U$ )Ncolumn_level_namesr7   ru   T)inplace)r   rC   rb   r\   rA   stripr{   read_csvr   r   to_timedeltar   	set_indexr   rw   r}   )
r2   r=   csvr9   paramsr^   r_   r   r   r   s
             r   r   PandasDfHandler.restore_v3_3)  s    GG**40	0DT<<0X-- "XX&:DA H~##%% KK00 	
 Coobg.BG YY()
VDM*D91JJ	r   rK   N)
rE   rF   rG   rH   r-   r   r   rX   r   rJ   rK   r   r   rd   rd      s    		BBHZxr   rd   c                   .    \ rS rSr\" 5       rS rS rSrg)PandasSeriesHandleri?  c                     UR                   US'   U R                  R                  UR                  SS9US'   U R                  R                  UR                  SS9US'   U$ )z/Flatten the index and values for reconstructionr   FrN   ru   r7   )r   r\   r   ru   r7   )r2   r   r=   s      r   r   PandasSeriesHandler.flattenB  sV    xxV,,SYYe,DW--cjj-FXr   c                     US   nU R                   R                  US   SS9nU R                   R                  US   SS9n[        R                  " XCUS9$ )zRestore the flattened datar   ru   FrN   r7   )ru   r   )r\   rX   r{   Series)r2   r=   r   ru   r7   s        r   rX   PandasSeriesHandler.restoreJ  sV    F|$$T']%$@%%d8nE%Byy488r   rK   N	rE   rF   rG   rH   r-   r   r   rX   rJ   rK   r   r   r   r   ?  s    		B9r   r   c                   L    \ rS rSr\" 5       r\R                  rS r	S r
S rSrg)PandasIndexHandleriR  c                     SUR                   0$ )Nr   r   r2   r   s     r   name_bundlerPandasIndexHandler.name_bundlerV  s    !!r   c                     U R                  U5      n[        SS[        UR                  5      0UD6n[	        UR                  5       5      nU R                  R                  XRU5      nU$ )NrU   rK   )r   r[   strrU   r   r~   r   r>   )r2   r   r=   name_bundler9   r<   s         r   r   PandasIndexHandler.flattenY  sW    '',8#cii.8K8SZZ\"ww%%c6r   c                 &   U R                   R                  U5      u  p#UR                  SS 5      nUR                  5        VVs0 s H   u  pVUS;   d  M  SUb  [        OS " U5      _M"     nnnU R
                  " [        U5      4SU0UD6nU$ s  snnf )NrU   >   r   r}   r   c                     U $ r   rK   rl   s    r   rn   ,PandasIndexHandler.restore.<locals>.<lambda>d  s    1r   )r   rC   rA   rY   rj   index_constructorr   )	r2   r=   r<   r9   rU   r`   ra   r   r   s	            r   rX   PandasIndexHandler.restore`  s    GG**40	$' 


$%% AFamU<a@@$ 	 

 $$VC[MMM

s   BBrK   N)rE   rF   rG   rH   r-   r   r{   r   r   r   r   rX   rJ   rK   r   r   r   r   R  s#    		B"	r   r   c                   ,    \ rS rSr\R
                  rSrg)PandasPeriodIndexHandleril  rK   N)rE   rF   rG   rH   r{   PeriodIndexr   rJ   rK   r   r   r   r   l  s    r   r   c                       \ rS rSrS rSrg)PandasMultiIndexHandlerip  c                     SUR                   0$ )Nr}   r   r   s     r   r   $PandasMultiIndexHandler.name_bundlerq  s    ##r   rK   N)rE   rF   rG   rH   r   rJ   rK   r   r   r   r   p  s    $r   r   c                   .    \ rS rSr\" 5       rS rS rSrg)PandasTimestampHandleriu  c                 f    SUR                  5       0nSnU R                  R                  XBU5      nU$ )N	isoformat )r   r   r>   r2   r   r=   r9   r<   s        r   r   PandasTimestampHandler.flattenx  s2    S]]_-ww%%c6r   c                 v    U R                   R                  U5      u  p#US   n[        R                  " U5      nU$ )Nr   )r   rC   r{   	Timestamp)r2   r=   _r9   r   r   s         r   rX   PandasTimestampHandler.restore~  s5    ''((.%	ll9%
r   rK   Nr   rK   r   r   r   r   u  s    		Br   r   c                   .    \ rS rSr\" 5       rS rS rSrg)PandasPeriodHandleri  c                     [        UR                  5      UR                  S.nSnU R                  R	                  XBU5      nU$ )N)
start_timefreqstrr   )r   r   r   r   r>   r   s        r   r   PandasPeriodHandler.flatten  s>     0{{
 ww%%c6r   c                     U R                   R                  U5      u  p#[        US   5      nUS   n[        R                  " XE5      nU$ )Nr   r   )r   rC   r   r{   Period)r2   r=   r   r9   r   r   r   s          r   rX   PandasPeriodHandler.restore  sC    ''((.D./
y/ii
,
r   rK   Nr   rK   r   r   r   r     s    		Br   r   c                   .    \ rS rSr\" 5       rS rS rSrg)PandasIntervalHandleri  c                     [        UR                  5      [        UR                  5      UR                  S.nSnU R                  R                  XBU5      nU$ )N)leftrightclosedr   )r   r   r   r   r   r>   r   s        r   r   PandasIntervalHandler.flatten  sJ    388$CII&jj

 ww%%c6r   c                     U R                   R                  U5      u  p#[        US   5      n[        US   5      n[        US   5      n[        R
                  " XEUS9nU$ )Nr   r   r   )r   )r   rC   r   r   r{   Interval)r2   r=   r   r9   r   r   r   r   s           r   rX   PandasIntervalHandler.restore  sW    ''((.d6l#tG}%T(^$kk$f5
r   rK   Nr   rK   r   r   r   r     s    		Br   r   c                     [        5         [        [        R                  [        SS9  [        [        R
                  [        SS9  [        [        R                  [        SS9  [        [        R                  [        SS9  [        [        R                  [        SS9  [        [        R                  [        SS9  [        [        R                  [         SS9  [        [        R"                  [$        SS9  g )NT)base)register_numpy_handlersr   r{   r   rd   r   r   r   r   r   r   r|   r   r   r   r   r   r   r   rK   r   r   r   r     s    R\\?6RYY+$7RXX)5R^^5DAR]]3$?R\\1=RYY+$7R[[/d;r   c                     [        5         [        [        R                  5        [        [        R                  5        [        [        R
                  5        [        [        R                  5        [        [        R                  5        [        [        R                  5        [        [        R                  5        [        [        R                  5        g r   )unregister_numpy_handlersr	   r{   r   r   r   r   r|   r   r   r   rK   r   r   r   r     sh    r||ryyrxxr~~r}}r||ryyr{{r   )(r   rI   ior   numpyr   pandasr{   r   r   r   handlersr   r   r	   tags_pdr
   r   utilr   r   r   r   r   r   __all__r   r   r&   r+   r-   rb   rd   r   r   r   r   r   r   r   rK   r   r   <module>r      s          8 8 0 ' ? C 5
6!.% %P@vk vr9+ 9& 4'1 '$0 $
[  + (K ,	<	r   