U
    >vf                     @  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	 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 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ZG d d! d!ejZeeje_eejejd < d"d#d$d%Zeejejd < d"d#d&d'Z ze ejej!d < W n e"e#fk
rV   Y nX d:d)d*d+d,d-Z$d.d/d0d1d2d*d3d3d4d5d6Z%ej&d7d#d8d9Z'dS );z/
Support pre-0.12 series pickle compatibility.
    )annotationsN)	Generator)NDArrayBacked)
BaseOffset)Index)DatetimeArrayPeriodArrayTimedeltaArray)BlockManagerc                 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-vdrwu74i/pandas/compat/pickle_compat.pyload_reduce   s0     

r   )pandas.core.arraysSparseArray)numpyZndarray)pandas.core.indexes.frozen
FrozenList)pandas.core.seriesZSeries)zpandas.core.sparse.seriesZSparseSeries)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.sparser   )pandas.core.indexes.base
_new_Index)r)   r   )zpandas.core.indexes.range
RangeIndex)zpandas.core.indexes.multi
MultiIndex)pandas.core.indexes.datetimes_new_DatetimeIndex)r-   DatetimeIndex)zpandas.core.indexes.periodPeriodIndex)r   Categorical)zpandas.core.indexes.timedeltasTimedeltaIndex))zpandas.core.sparse.arrayr   )pandas.core.baseFrozenNDArray)r!   r4   )r3   r"   )r#   Z
TimeSeries)zpandas.sparse.seriesZSparseTimeSeries)zpandas._sparser$   )pandas.tslibr&   )zpandas._periodr'   )zpandas._libs.periodr'   )r5   r(   )r%   r(   )zpandas.sparse.arrayr   )pandas.indexes.baser*   )r6   r   )pandas.indexes.numeric
Int64Index)zpandas.indexes.ranger+   )zpandas.indexes.multir,   )pandas.tseries.indexr.   )r9   r/   )zpandas.tseries.periodr0   )zpandas.core.categoricalr1   )zpandas.tseries.tdir2   )r7   Float64Index)pandas.core.indexes.numericr8   )r;   ZUInt64Index)r;   r:   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   rA      s    zUnpickler.find_class)__name__
__module____qualname__rA   __classcell__r   r   rE   r   r<      s   r<   None)returnc                 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	}n.|tkr|s||dg d}n|j|f| }|| j d< d S )Nr   zM8[ns])dtypezm8[ns]r   F)r   r   r   r   r   r   r   nparrayrM   r	   r
   )r   r   r   objZarrr   r   r   load_newobj   s    


rQ   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   rP   r   r   r   load_newobj_ex   s    



rT   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)rV   )seekr<   rW   load
ValueErrorr   )fhrV   rW   Zupr   r   r   rY      s    


rY   TASCIIstrictfix_importsrV   errorsbytesr   )bytes_objectr_   rV   r`   c                C  s   t | }t||||d S )z%
    Analogous to pickle._loads.
    r^   )ioBytesIOr<   rY   )rb   r_   rV   r`   fdr   r   r   loads   s    

   rf   zGenerator[(None, None, None)]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.
    rf   N)pklrf   setattr)Z
orig_loadsr   r   r   patch_pickle   s
    
ri   )NF)(__doc__
__future__r   
contextlibcopyrc   picklerg   typingr   r    rN   Zpandas._libs.arraysr   Zpandas._libs.tslibsr   Zpandasr   Zpandas.core.arraysr   r   r	   Zpandas.core.internalsr
   r   r>   
_Unpicklerr<   dispatchREDUCErQ   NEWOBJrT   	NEWOBJ_EXAttributeErrorKeyErrorrY   rf   contextmanagerri   r   r   r   r   <module>   st   $S