a
    fDfU                     @   s  d Z ddlm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 ddlmZmZmZ d	d
 Zdd ZG dd deZzddlmZ W n6 ey   zddlZW n ey   dZY n0 Y n0 dd ZdddZeZeZdd ZeZeeB ddlZed ej Zej!Ze	ej ddZej!ZW d   n1 s@0    Y  ee( ddl"m Z ddl"m!Z W d   n1 s0    Y  dd Z dd Z!dS )z Store arrays

We put arrays on disk as raw bytes, extending along the first dimension.
Alongside each array x we ensure the value x.dtype which stores the string
description of the array's dtype.
    )suppressN)valmapidentitypartial   )	Interface)File)frame
framesplitsuffixc                 C   s
   | j  S )z Serialize dtype to bytes

    >>> serialize_dtype(np.dtype('i4'))
    b'<i4'
    >>> serialize_dtype(np.dtype('M8[us]'))
    b'<M8[us]'
    )strencode)dt r   X/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/partd/numpy.pyserialize_dtype   s    r   c                 C   s&   |  drtt| S t| S dS )z Parse text as numpy dtype

    >>> parse_dtype(b'i4')
    dtype('int32')

    >>> parse_dtype(b"[('a', 'i4')]")
    dtype([('a', '<i4')])
       [N)
startswithnpdtypeeval)sr   r   r   parse_dtype   s    	
r   c                   @   sb   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
edd Zdd ZdS )NumpyNc                 C   s*   |rt |trt|}|| _t|  d S N)
isinstancer   r   partdr   __init__)selfr   r   r   r   r   ,   s    zNumpy.__init__c                 C   s
   d| j iS )Nr   )r   r   r   r   r   __getstate__2   s    zNumpy.__getstate__c                 K   sJ   |  D ]"\}}| jt|dt|j q| jjtt|fi | d S )N.dtype)	itemsr   Zisetr   r   r   appendr   	serialize)r   datakwargskvr   r   r   r#   5   s    zNumpy.appendc                 K   sH   | j j|fi |}| j jdd |D dd}tt|}ttt||S )Nc                 S   s   g | ]}t |d qS r!   r   .0keyr   r   r   
<listcomp><       zNumpy._get.<locals>.<listcomp>F)lock)r   _getmapr   listdeserialize)r   keysr&   bytesZdtypesr   r   r   r1   :   s    
z
Numpy._getc                 K   s&   dd |D }| j j|fi | d S )Nc                 S   s   g | ]}t |d qS r)   r*   r+   r   r   r   r.   B   r/   z Numpy.delete.<locals>.<listcomp>)r   delete)r   r5   r&   keys2r   r   r   r7   A   s    zNumpy.deletec                 C   s   | j ||S r   )r   _iset)r   r-   valuer   r   r   r9   E   s    zNumpy._isetc                 C   s
   | j  S r   )r   dropr   r   r   r   r;   H   s    z
Numpy.dropc                 C   s   | j   d S r   )r   __del__r   r   r   r   r<   K   s    zNumpy.__del__c                 C   s   | j jS r   )r   r0   r   r   r   r   r0   N   s    z
Numpy.lockc                 G   s    |    | jj| g|R   d S r   )r;   r   __exit__)r   argsr   r   r   r=   R   s    zNumpy.__exit__)N)__name__
__module____qualname__r   r    r#   r1   r7   r9   r;   r<   propertyr0   r=   r   r   r   r   r   +   s   

r   )msgpackFc                 C   sp   | j dkrd|   }tt" ttj|ddW  d    S 1 sF0    Y  ttj	|tj
dS |  S d S )NOT)use_bin_type)protocol)r   flattentolistr   	Exceptionr	   rC   packbpickledumpsHIGHEST_PROTOCOLtobytes)xlr   r   r   r$   _   s    

0r$   c                    s   |dkrz6t jdkrddi nddi  fddt| D }W n$ tyb   d	d t| D }Y n0 tjttt|dd
}d}|D ]$}||||t| < |t|7 }q|S t	| |}|r|
 }|S d S )NrD   )r         rawFencodingzutf-8c                    s   g | ]}t j|fi  qS r   )rC   unpackbr,   fZunpack_kwargsr   r   r.   q   s   zdeserialize.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )rK   loadsrV   r   r   r   r.   t   r/   )r   r   )rC   versionr
   rI   r   emptysumr2   lenZ
frombuffercopy)r6   r   r^   blocksresultiblockr   rX   r   r4   i   s(    



r4   c                 C   s   | S r   r   )r6   itemsizer   r   r   <lambda>   r/   rd   )Ztypesize)compress)
decompressc                 C   s    |dkrt | S t| |jS d S NrD   )compress_textcompress_bytesrc   r6   r   r   r   r   re      s    re   c                 C   s   |dkrt | S t| S d S rg   )decompress_textdecompress_bytesrj   r   r   r   rf      s    rf   )F)#__doc__
contextlibr   rK   numpyr   Ztoolzr   r   r   corer   filer   utilsr	   r
   r   r   r   r   ZpandasrC   ImportErrorr$   r4   rh   rk   ri   rl   ZbloscZset_nthreadsre   rf   Zsnappyr   r   r   r   <module>   sF   +



&
,