B
    P\u                 @   s  d Z ddlm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 dd	lmZmZmZmZ d
d Zdd ZG dd deZyddlmZ W n: ek
r   yddlZW n ek
r   dZY nX Y nX dd ZdddZeZeZdd ZeZee8 ddl Z e !d e j"Ze j#Zee j"ddZe j#ZW dQ R X ee ddl$m"Z ddl$m#Z W dQ R X 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.
    )absolute_importN)valmapidentitypartial   )pickle)	Interface)File)frame
framesplitsuffixignoringc             C   s
   | j  S )z Serialize dtype to bytes

    >>> serialize_dtype(np.dtype('i4'))
    '<i4'
    >>> serialize_dtype(np.dtype('M8[us]'))
    '<M8[us]'
    )strencode)Zdt r   *lib/python3.7/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('i4')
    dtype('int32')

    >>> parse_dtype("[('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__1   s    zNumpy.__getstate__c             K   sJ   x.|  D ]"\}}| jt|dt|j q
W | jjtt|f| d S )Nz.dtype)	itemsr   Zisetr   r   r   appendr   	serialize)r   datakwargskvr   r   r   r!   4   s    zNumpy.appendc             K   sD   | j j|f|}| j jdd |D dd}tt|}ttt||S )Nc             S   s   g | ]}t |d qS )z.dtype)r   ).0keyr   r   r   
<listcomp>;   s    zNumpy._get.<locals>.<listcomp>F)lock)r   _getmapr   listdeserialize)r   keysr$   bytesZdtypesr   r   r   r+   9   s
    
z
Numpy._getc             K   s"   dd |D }| j j|f| d S )Nc             S   s   g | ]}t |d qS )z.dtype)r   )r'   r(   r   r   r   r)   A   s    z Numpy.delete.<locals>.<listcomp>)r   delete)r   r/   r$   Zkeys2r   r   r   r1   @   s    zNumpy.deletec             C   s   | j ||S )N)r   _iset)r   r(   valuer   r   r   r2   D   s    zNumpy._isetc             C   s
   | j  S )N)r   drop)r   r   r   r   r4   G   s    z
Numpy.dropc             C   s   | j   d S )N)r   __del__)r   r   r   r   r5   J   s    zNumpy.__del__c             C   s   | j jS )N)r   r*   )r   r   r   r   r*   M   s    z
Numpy.lockc             G   s   |    | jj| f|  d S )N)r4   r   __exit__)r   argsr   r   r   r6   Q   s    zNumpy.__exit__)N)__name__
__module____qualname__r   r   r!   r+   r1   r2   r4   r5   propertyr*   r6   r   r   r   r   r   *   s   
r   )msgpackFc          	   C   sX   | j dkrL|   }tt ttj|ddS Q R X ttj	|tj
dS |  S d S )NOT)Zuse_bin_type)Zprotocol)r   Zflattentolistr   	Exceptionr
   r<   Zpackbr   dumpsZHIGHEST_PROTOCOLtobytes)xlr   r   r   r"   ^   s    

r"   c                s   |dkry6t jdkrddi nddi  fddt| D }W n& tk
rd   d	d t| D }Y nX tjttt|dd
}d}x,|D ]$}||||t| < |t|7 }qW |S t	| |}|r|
 }|S d S )Nr=   )r         rawFencodingzutf-8c                s   g | ]}t j|f qS r   )r<   Zunpackb)r'   f)unpack_kwargsr   r   r)   p   s   zdeserialize.<locals>.<listcomp>c             S   s   g | ]}t |qS r   )r   loads)r'   rH   r   r   r   r)   s   s    )r   r   )r<   versionr   r?   r   emptysumr,   lenZ
frombuffercopy)r0   r   rO   Zblocksresultiblockr   )rI   r   r.   h   s&    



r.   c             C   s   | S )Nr   )r0   itemsizer   r   r   <lambda>   s    rT   )Ztypesize)compress)
decompressc             C   s    |dkrt | S t| |jS d S )Nr=   )compress_textcompress_bytesrS   )r0   r   r   r   r   rU      s    rU   c             C   s   |dkrt | S t| S d S )Nr=   )decompress_textdecompress_bytes)r0   r   r   r   r   rV      s    rV   )F)%__doc__Z
__future__r   Znumpyr   Ztoolzr   r   r   Zcompatibilityr   Zcorer   filer	   Zutilsr
   r   r   r   r   r   r   Zpandasr<   ImportErrorr"   r.   rW   rY   rX   rZ   ZbloscZset_nthreadsrU   rV   Zsnappyr   r   r   r   <module>   sF   +




