o
    tBhv2                     @   s  d dl mZ d dlZd dl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mZ ddlmZmZ ddlmZ dd	gZejd
krGdndZdd ZG dd de
ZG dd deZG dd deZG dd deZG dd deZG dd deZdd Zdd	 ZdS )    )absolute_importN   )BaseHandlerregister
unregister)numeric_types)	b64decode	b64encode)compatregister_handlersunregister_handlerslittle<>c                 C   s   | j j}|dkr
tS |S )z%translate equals sign to native order=)dtype	byteordernative_byteorder)arrr    r   k/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/jsonpickle/ext/numpy.pyget_byteorder   s   r   c                   @      e Zd Zdd Zdd ZdS )NumpyBaseHandlerc                 C   sN   t |dr| |d< d S t|}d}||r!|t|d }||d< d S )Ntostringr   z(numpy.record, )hasattrr   r
   ustr
startswithlen)selfr   dataprefixr   r   r   flatten_dtype   s   


zNumpyBaseHandler.flatten_dtypec                 C   s&   |d }| drt|}t|S )Nr   ){[)r   astliteral_evalnpr   )r    r!   r   r   r   r   restore_dtype&   s   


zNumpyBaseHandler.restore_dtypeN)__name__
__module____qualname__r#   r)   r   r   r   r   r      s    
r   c                   @   r   )NumpyDTypeHandlerc                 C   s   |  || |S N)r#   r    objr!   r   r   r   flatten.   s   zNumpyDTypeHandler.flattenc                 C   s
   |  |S r.   )r)   )r    r!   r   r   r   restore2   s   
zNumpyDTypeHandler.restoreNr*   r+   r,   r1   r2   r   r   r   r   r-   -   s    r-   c                   @   r   )NumpyGenericHandlerc                 C   s0   |  |jd| | jj| dd|d< |S )NNFresetvalue)r#   r   newbyteordercontextr1   tolistr/   r   r   r   r1   7   s   zNumpyGenericHandler.flattenc                 C   s$   | j j|d dd}| ||S )Nr8   Fr6   )r:   r2   r)   type)r    r!   r8   r   r   r   r2   <   s   zNumpyGenericHandler.restoreNr3   r   r   r   r   r4   6   s    r4   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )NumpyNDArrayHandlerz>Stores arrays as text representation, without regard for viewsc                 C   s   |j jdu rd|d< d S d S )NF	writeable)flagsr>   r/   r   r   r   flatten_flagsD      z!NumpyNDArrayHandler.flatten_flagsc                 C   s   | ddsd|j_d S d S )Nr>   TF)getr?   r>   )r    r!   r   r   r   r   restore_flagsH   rA   z!NumpyNDArrayHandler.restore_flagsc                 C   sP   |  |jd| | || | jj| dd|d< d|jv r&|j|d< |S )Nr5   Fr6   valuesr   shape)r#   r   r9   r@   r:   r1   r;   rE   r/   r   r   r   r1   L   s   

zNumpyNDArrayHandler.flattenc                 C   s`   | j j|d dd}tj|| ||ddd}|dd }|d ur(||}| || |S )NrD   Fr6   orderCr   rF   rE   )r:   r2   r(   arrayr)   rB   reshaperC   )r    r!   rD   r   rE   r   r   r   r2   V   s   
zNumpyNDArrayHandler.restoreN)r*   r+   r,   __doc__r@   rC   r1   r2   r   r   r   r   r=   A   s    
r=   c                       sJ   e Zd ZdZdefddZdd Zdd Z fd	d
Z fddZ	  Z
S )NumpyNDArrayHandlerBinaryzstores arrays with size greater than 'size_threshold' as
    (optionally) compressed base64

    Notes
    -----
    This would be easier to implement using np.save/np.load, but
    that would be less language-agnostic
       c                 C   s   || _ || _dS )a  
        :param size_threshold: nonnegative int or None
            valid values for 'size_threshold' are all nonnegative
            integers and None
            if size_threshold is None, values are always stored as nested lists
        :param compression: a compression module or None
            valid values for 'compression' are {zlib, bz2, None}
            if compresion is None, no compression is applied
        N)size_thresholdcompression)r    rN   rO   r   r   r   __init__m   s   

z"NumpyNDArrayHandlerBinary.__init__c                 C   s$   |j j}|dkrt||d< d S d S )N|r   )r   r   r   )r    r0   r!   r   r   r   r   flatten_byteorderz   s   z+NumpyNDArrayHandlerBinary.flatten_byteorderc                 C   s&   | dd }|r|j||_d S d S )Nr   )rB   r   r9   )r    r!   r   r   r   r   r   restore_byteorder   s   z+NumpyNDArrayHandlerBinary.restore_byteorderc                    s   | j du s| j |jkrtt| ||}|S |jtjkr&t	|
  }nt|dr2|jdd}n|jdd}| jrA| j|}t||d< |j|d< | |jd| | || | || |jjsjd|d	< |S )
encode numpy to jsonNtobytesa)rF   rD   rE   r5   FrF   )rN   sizesuperrL   r1   r   r(   objectjsondumpsr;   encoder   rU   r   rO   compressr	   rE   r#   r9   rR   r@   r?   c_contiguous)r    r0   r!   buf	__class__r   r   r1      s$   $

z!NumpyNDArrayHandlerBinary.flattenc                    s   |d }t |trtt| |}|S t |tr%tj|g| |d}|S | |}t	|}| j
r7| j
|}|tjkr_t| }tj|||ddd}|dd}|dur^||}ntj|||d|ddd }| || | || |S )	decode numpy from jsonrD   )r   rF   rG   rH   rE   N)bufferr   rE   rF   )
isinstancelistrY   rL   r2   r   r(   rI   r)   r   rO   
decompressrZ   r[   loadsdecoderB   rJ   ndarraycopyrS   rC   )r    r!   rD   r   r   r`   rE   ra   r   r   r2      s:   





z!NumpyNDArrayHandlerBinary.restore)r*   r+   r,   rK   zlibrP   rR   rS   r1   r2   __classcell__r   r   ra   r   rL   c   s    	*rL   c                       s@   e Zd ZdZddef fdd	Z fddZ fdd	Z  ZS )
NumpyNDArrayHandlerViewa  Pickles references inside ndarrays, or array-views

    Notes
    -----
    The current implementation has some restrictions.

    'base' arrays, or arrays which are viewed by other arrays,
    must be f-or-c-contiguous.
    This is not such a large restriction in practice, because all
    numpy array creation is c-contiguous by default.
    Relaxing this restriction would be nice though; especially if
    it can be done without bloating the design too much.

    Furthermore, ndarrays which are views of array-like objects
    implementing __array_interface__,
    but which are not themselves nd-arrays, are deepcopied with
    a warning (by default),
    as we cannot guarantee whatever custom logic such classes
    implement is correctly reproduced.
    warnrM   c                    s   t t| || || _dS )aM  
        :param mode: {'warn', 'raise', 'ignore'}
            How to react when encountering array-like objects whos
            references we cannot safely serialize
        :param size_threshold: nonnegative int or None
            valid values for 'size_threshold' are all nonnegative
            integers and None
            if size_threshold is None, values are always stored as nested lists
        :param compression: a compression module or None
            valid values for 'compression' are {zlib, bz2, None}
            if compresion is None, no compression is applied
        N)rY   rn   rP   mode)r    rp   rN   rO   ra   r   r   rP      s   
z NumpyNDArrayHandlerView.__init__c                    sb  |j }|du r|jjrtt| ||}|jjsd|d< |S t|tj	r|jjr| j
j|dd|d< |jj|jj }|r@||d< |jjsI|j|d< |j|d	< | |jd
| | || t|dkrvt|t|krndnd}|rv||d< | jdu s| j|jkrtt| || |S | jdkrd}t| n| jdkrd}t|tt| | |}|S )rT   NrW   rF   Fr6   baseoffsetstridesrE   r5   rQ   Sr   ro   zndarray is defined by reference to an object we do not know how to serialize. A deep copy is serialized instead, breaking memory aliasing.raisezMndarray is defined by reference to an object we do not know how to serialize.)rq   r?   forcrY   rn   r1   r_   re   r(   rj   r:   ctypesr!   rs   rE   r#   r   r9   r@   r   rN   rX   rL   rp   warningsro   
ValueErrorrk   )r    r0   r!   rq   rr   r   msgra   r   r   r1      sB   +



zNumpyNDArrayHandlerView.flattenc              	      s   | dd}|du rtt| |}|S | jj|dd}|jjs$J dtj|j	| 
|| dd| d| d	d
| ddd}| || |S )rc   rq   NFr6   z8Current implementation assumes base is C or F contiguousr   rQ   rE   rr   r   rs   )rd   r   rE   rr   rs   )rB   rY   rn   r2   r:   r?   rv   r(   rj   r!   r)   r9   rC   )r    r!   rq   r   ra   r   r   r2   .  s$   

zNumpyNDArrayHandlerView.restore)	r*   r+   r,   rK   rl   rP   r1   r2   rm   r   r   ra   r   rn      s
    6rn   c                   C   s   t tjtdd t tjtdd t tjt dd t ttjj	tdd t ttj
j	tdd t ttjj	tdd t ttjj	tdd d S )NT)rq   )r   r(   r   r-   genericr4   rj   rn   voidrb   float32int32
datetime64r   r   r   r   r   H  s   c                   C   sj   t tj t tj t tj t ttjj t ttjj t ttjj t ttj	j d S r.   )
r   r(   r   r{   rj   r|   rb   r}   r~   r   r   r   r   r   r   S  s   


)
__future__r   r&   sysrl   rx   r[   numpyr(   handlersr   r   r   r
   r   utilr   r	    __all__r   r   r   r   r-   r4   r=   rL   rn   r   r   r   r   r   r   <module>   s,    	"ov