U
    sVc!                     @  s  d 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
 ddlZddlZddlmZ ddlmZ ddlmZ ddlmZmZmZ dd	lmZ e	rdd
lmZmZ dd ZdZG dd dZG dd dZdddddddddddddddddd d!d"d#d$d%d&d'd(dd)d*Z G d+d, d,ej!Z"ee"j#e"_#ee"j#ej$d < d-d. Z%e%e"j#ej&d < d/d0 Z'ze'e"j#ej(d < W n e)e*fk
r   Y nX dDd2d3d4d5d6Z+d7d8d9d:d;d3d<d<d=d>d?Z,ej-d@dAdBdCZ.dS )Ez/
Support pre-0.12 series pickle compatibility.
    )annotationsN)TYPE_CHECKINGIterator)NDArrayBacked)
BaseOffset)Index)DatetimeArrayPeriodArrayTimedeltaArray)BlockManager)	DataFrameSeriesc                 C  s  | j }| }|d }z|| |d< W d S  tk
r } zd}|t|krz"|d }t||d< W W Y d S  tk
r   Y nX nv|rt|d trt|d t	r|d }|j| |d< W Y @d S | rt|d t
 r|d }tj| |d< W Y 
d S  W 5 d }~X Y nX d S )Nz:_reconstruct: First argument must be a sub-type of ndarrayr   )stackpop	TypeErrorstrobject__new__
isinstancetype
issubclassr   r	   r   )selfr   argsfuncerrmsgcls r   ?/tmp/pip-unpacked-wheel-xj8nt62q/pandas/compat/pickle_compat.pyload_reduce$   s0     

r    z
Loading a saved '{cls}' as a {new} with sparse values.
'{cls}' is now removed. You should re-save this dataset in its new format.
c                   @  s   e Zd ZddddZdS )_LoadSparseSeriesr   returnc                 C  s0   ddl m} tjtjdddtdd |tdS )	Nr   )r   SparseSeriesr   r   new   
stackleveldtype)pandasr   warningswarn_sparse_msgformatFutureWarningr   )r   r   r   r   r   r   T   s    z_LoadSparseSeries.__new__N__name__
__module____qualname__r   r   r   r   r   r!   N   s   r!   c                   @  s   e Zd ZddddZdS )_LoadSparseFramer   r"   c                 C  s,   ddl m} tjtjdddtdd | S )Nr   )r   SparseDataFramer   r%   r'   r(   )r,   r   r-   r.   r/   r0   r1   )r   r   r   r   r   r   f   s    z_LoadSparseFrame.__new__Nr2   r   r   r   r   r6   `   s   r6   )pandas.core.arraysSparseArray)numpyZndarray)pandas.core.indexes.frozen
FrozenList)pandas.core.seriesr   zpandas.core.sparse.seriesr$   )zpandas._libs.sparse
BlockIndex)pandas._libs.tslib	Timestamp)zpandas._libs.tslibs.periodPeriod)zpandas._libs.tslibs.nattype__nat_unpickle)zpandas.core.arrays.sparser9   )pandas.compat.pickle_compatr!   )pandas.core.sparse.framer6   )pandas.core.indexes.base
_new_Index)rF   r   )pandas.core.indexes.numeric
Int64Index)zpandas.core.indexes.range
RangeIndex)zpandas.core.indexes.multi
MultiIndex)pandas.core.indexes.datetimes_new_DatetimeIndex)rL   DatetimeIndex)zpandas.core.indexes.periodPeriodIndex)r8   Categorical)zpandas.core.indexes.timedeltasTimedeltaIndex)rH   Float64Index)rD   r6   ))zpandas.core.sparse.arrayr9   )pandas.core.baseFrozenNDArray)r;   rT   )rS   r<   )r=   Z
TimeSeries)pandas.sparse.seriesZSparseTimeSeries)zpandas._sparser?   )pandas.tslibrA   )zpandas._periodrB   )zpandas._libs.periodrB   )rV   rC   )r@   rC   )zpandas.sparse.arrayr9   )rU   r$   )zpandas.sparse.framer7   )pandas.indexes.baserG   )rW   r   )pandas.indexes.numericrI   )zpandas.indexes.rangerJ   )zpandas.indexes.multirK   )pandas.tseries.indexrM   )rY   rN   )zpandas.tseries.periodrO   )zpandas.core.categoricalrP   )zpandas.tseries.tdirQ   )rX   rR   r>   )rE   r7   c                      s   e Zd Z fddZ  ZS )	Unpicklerc                   s&   ||f}t ||\}}t ||S N)_class_locations_mapgetsuper
find_class)r   modulenamekey	__class__r   r   r_      s    zUnpickler.find_class)r3   r4   r5   r_   __classcell__r   r   rc   r   rZ      s   rZ   c                 C  s   | j  }| j d }t|tr*t|}nt|trX|sXtjg dd}||||j	}n^t|t
r|stjg dd}||||j	}n0|tkr|s||dg d d}n|j|f| }|| j d< d S )Nr   zM8[ns]r*   zm8[ns]r   F)r   r   r   r   r   r   r   nparrayr+   r
   r   )r   r   r   objZarrr   r   r   load_newobj   s    


ri   c                 C  sT   | j  }| j  }| j  }t|tr4t|}n|j|f||}| | d S r[   )r   r   r   r   r   r   append)r   kwargsr   r   rh   r   r   r   load_newobj_ex   s    



rl   Fz
str | Nonebool)encoding
is_verbosec              	   C  sX   z8|  d |dk	r"t| |d}nt| }||_| W S  ttfk
rR    Y nX dS )z
    Load a pickle, with a provided encoding,

    Parameters
    ----------
    fh : a filelike object
    encoding : an optional encoding
    is_verbose : show exception output
    r   N)rn   )seekrZ   ro   load
ValueErrorr   )fhrn   ro   Zupr   r   r   rq      s    


rq   TASCIIstrictfix_importsrn   errorsbytesr   )bytes_objectrw   rn   rx   c                C  s   t | }t||||d S )z%
    Analogous to pickle._loads.
    rv   )ioBytesIOrZ   rq   )rz   rw   rn   rx   fdr   r   r   loads  s    

   r~   zIterator[None]r"   c               
   c  s0   t j} ztt dt dV  W 5 tt d|  X dS )z8
    Temporarily patch pickle to use our unpickler.
    r~   N)pklr~   setattr)Z
orig_loadsr   r   r   patch_pickle(  s
    
r   )NF)/__doc__
__future__r   
contextlibcopyr{   pickler   typingr   r   r-   r:   rf   Zpandas._libs.arraysr   Zpandas._libs.tslibsr   r,   r   Zpandas.core.arraysr   r	   r
   Zpandas.core.internalsr   r   r   r    r/   r!   r6   r\   
_UnpicklerrZ   dispatchREDUCEri   NEWOBJrl   	NEWOBJ_EXAttributeErrorKeyErrorrq   r~   contextmanagerr   r   r   r   r   <module>   s   #V