
    gU                     $   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	 Zd
 Z G d de      Z	 ddlmZ d ZddZeZeZd ZeZ ee      5  ddlZ ej>                  d       ej@                  ZejB                  Z e	ej@                  d      ZejB                  Zddd        ee      5  ddl"m Z ddl"m!Z ddd       d Z d Z!y# e$ r 	 ddlZn# e$ r dZY nw xY wY w xY w# 1 sw Y   KxY w# 1 sw Y   :xY w)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                 6    | j                   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)dts    +lib/python3.12/site-packages/partd/numpy.pyserialize_dtyper      s     66==?    c                     | j                  d      rt        j                  t        |             S t        j                  |       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)ss    r   parse_dtyper      s1     	||DxxQ  xx{r   c                   T    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
ed
        Zd Zy)NumpyNc                 v    |rt        |t              rt        |      }|| _        t	        j
                  |        y N)
isinstancer   r	   partdr   __init__)selfr!   s     r   r"   zNumpy.__init__,   s,    
5#.KE
4 r   c                     d| j                   iS )Nr!   )r!   r#   s    r   __getstate__zNumpy.__getstate__2   s    $$r   c                     |j                         D ]>  \  }}| j                  j                  t        |d      t	        |j
                               @  | j                  j                  t        t        |      fi | y N.dtype)	itemsr!   isetr   r   r   appendr   	serialize)r#   datakwargskvs        r   r,   zNumpy.append5   sX    JJLDAqJJOOF1h/1IJ !

&D1<V<r   c           	          | j                   j                  |fi |}| j                   j                  |D cg c]  }t        |d       c}d      }t        t        |      }t        t        t        ||            S c c}w )Nr)   F)lock)r!   _getr   mapr   listdeserialize)r#   keysr/   byteskeydtypess         r   r4   z
Numpy._get:   ss    

//4!H4C&h"74!H&+ ! -[&)CUF344 "Is   A=c                 z    |D cg c]  }t        |d       }} | j                  j                  |fi | y c c}w r(   )r   r!   delete)r#   r8   r/   r:   keys2s        r   r=   zNumpy.deleteA   s;    267$3X&$7

%*6* 8s   8c                 :    | j                   j                  ||      S r   )r!   _iset)r#   r:   values      r   r@   zNumpy._isetE   s    zzU++r   c                 6    | j                   j                         S r   )r!   dropr%   s    r   rC   z
Numpy.dropH   s    zz  r   c                 8    | j                   j                          y r   )r!   __del__r%   s    r   rE   zNumpy.__del__K   s    

r   c                 .    | j                   j                  S r   )r!   r3   r%   s    r   r3   z
Numpy.lockN   s    zzr   c                 ^    | j                           | j                  j                  | g|  y r   )rC   r!   __exit__)r#   argss     r   rH   zNumpy.__exit__R   s$    		

D(4(r   r   )__name__
__module____qualname__r"   r&   r,   r4   r=   r@   rC   rE   propertyr3   rH    r   r   r   r   +   sC    !%=
5+,!  )r   r   )msgpackFc                 b   | j                   dk(  rW| j                         j                         }t        t              5  t        t        j                  |d            cd d d        S | j                         S # 1 sw Y   nxY wt        t        j                  |t        j                              S )NOT)use_bin_type)protocol)r   flattentolistr   	Exceptionr
   rO   packbpickledumpsHIGHEST_PROTOCOLtobytes)xls     r   r-   r-   _   sw    ww#~IIK i qt<= !  yy{	 ! V\\!f.E.EFGGs    A77B c                 ,   |dk(  r	 t         j                  dk\  rddi}nddi}t        |       D cg c]  }t        j                  |fi | }}t        j                  t        t        t        |            d      }d}|D ]!  }||||t        |      z    |t        |      z  }# |S t        j                  | |      }|r|j                         }|S c c}w # t        $ r4 t        |       D cg c]  }t        j                  |       nc c}w }}Y w xY w)	NrQ   )r         rawFencodingzutf-8)r   r   )rO   versionr   unpackbrV   rX   loadsr   emptysumr5   len
frombuffercopy)	r9   r   rj   unpack_kwargsfblocksresultiblocks	            r   r7   r7   i   s   |		B)+!&!+W 5  *%020! ooa9=90  2
 #c#v./s;E',F1QU^$UOA  ue,[[]F2 	B/9%/@A/@!fll1o/@AFA	Bs.   )C CC C D,D	DDc                     | S r   rN   )r9   itemsizes     r   <lambda>rs      s    r   )typesize)compress)
decompressc                 N    |dk(  rt        |       S t        | |j                        S NrQ   )compress_textcompress_bytesrr   r9   r   s     r   ru   ru      s%    |U##eU^^44r   c                 8    |dk(  rt        |       S t        |       S rx   )decompress_textdecompress_bytesr{   s     r   rv   rv      s    |u%%&&r   )F)#__doc__
contextlibr   rX   numpyr   toolzr   r   r   corer   filer	   utilsr
   r   r   r   r   r   pandasrO   ImportErrorr-   r7   ry   r}   rz   r~   bloscset_nthreadsru   rv   snappyrN   r   r   <module>r      s       + +   , ,))I ))V4 . kEq^^N''ENNQ7M&&O  k04 
5'M   `  sO   C !AC: DC7"C'&C7'C1.C70C11C76C7:DD