o
    NrfU                     @   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 n eyc   zddlZW n ey`   dZY nw Y nw dd ZdddZeZeZdd ZeZee! 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 sw   Y  ee ddl"m Z ddl"m!Z W d   n1 sw   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   
   | 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   T/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/partd/numpy.pyserialize_dtype   s   
r   c                 C   s"   |  drtt| S t| S )z Parse text as numpy dtype

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

    >>> parse_dtype(b"[('a', 'i4')]")
    dtype([('a', '<i4')])
       [)
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      
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      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   r4   :   s   
z
Numpy._getc                 K   s&   dd |D }| j j|fi | d S )Nc                 S   r+   r,   r-   r.   r   r   r   r1   B   r2   z Numpy.delete.<locals>.<listcomp>)r   delete)r   r8   r(   keys2r   r   r   r:   A   s   zNumpy.deletec                 C   s   | j ||S r   )r   _iset)r   r0   valuer   r   r   r<   E      zNumpy._isetc                 C   r   r   )r   dropr    r   r   r   r?   H   r"   z
Numpy.dropc                 C   s   | j   d S r   )r   __del__r    r   r   r   r@   K   r>   zNumpy.__del__c                 C   s   | j jS r   )r   r3   r    r   r   r   r3   N   s   z
Numpy.lockc                 G   s    |    | jj| g|R   d S r   )r?   r   __exit__)r   argsr   r   r   rA   R   s   zNumpy.__exit__r   )__name__
__module____qualname__r   r!   r%   r4   r:   r<   r?   r@   propertyr3   rA   r   r   r   r   r   +   s    

r   )msgpackFc                 C   sl   | j dkr2|   }tt ttj|ddW  d    S 1 s#w   Y  ttj	|tj
dS |  S )NOT)use_bin_type)protocol)r   flattentolistr   	Exceptionr	   rG   packbpickledumpsHIGHEST_PROTOCOLtobytes)xlr   r   r   r&   _   s   

 r&   c                    s   |dkrWzt jdkrddi nddi  fddt| D }W n ty1   d	d t| D }Y nw tjttt|dd
}d}|D ]}||||t| < |t|7 }qB|S t	| |}|rc|
 }|S )NrH   )r         rawFencodingzutf-8c                    s   g | ]}t j|fi  qS r   )rG   unpackbr/   fZunpack_kwargsr   r   r1   q   s    zdeserialize.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   )rO   loadsrZ   r   r   r   r1   t   r2   )r   r   )rG   versionr
   rM   r   emptysumr5   lenZ
frombuffercopy)r9   r   rb   blocksresultiblockr   r\   r   r7   i   s*   



r7   c                 C   s   | S r   r   )r9   itemsizer   r   r   <lambda>   s    rh   )Ztypesize)compress)
decompressc                 C   s   |dkrt | S t| |jS NrH   )compress_textcompress_bytesrg   r9   r   r   r   r   ri      s   ri   c                 C   s   |dkrt | S t| S rk   )decompress_textdecompress_bytesrn   r   r   r   rj      s   rj   )F)#__doc__
contextlibr   rO   numpyr   Ztoolzr   r   r   corer   filer   utilsr	   r
   r   r   r   r   ZpandasrG   ImportErrorr&   r7   rl   ro   rm   rp   ZbloscZset_nthreadsri   rj   Zsnappyr   r   r   r   <module>   sR    +





