
    Owg}                    p    d dl mZ d dlmZmZ d dlmZmZ erd dlZ	d dl
Z G d de      Z G d de      Zy)	    )annotations)TYPE_CHECKINGAny)BufferDlpackDeviceTypeNc                  V    e Zd ZdZd	d
dZedd       Zedd       ZddZddZ	ddZ
y)PandasBufferF
    Data in the buffer is guaranteed to be contiguous in memory.
    c                    |j                   d   rI|j                   |j                  j                  fk(  s%|r|j                         }|| _        yt	        d      || _        y)zG
        Handle only regular columns (= numpy arrays) for now.
        r   zBExports cannot be zero-copy in the case of a non-contiguous bufferN)stridesdtypeitemsizecopyRuntimeError_x)selfx
allow_copys      U/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/core/interchange/buffer.py__init__zPandasBuffer.__init__   s]     99Q<		agg.>.>-@ @ FFH  #1      c                p    | j                   j                  | j                   j                  j                  z  S z'
        Buffer size in bytes.
        )r   sizer   r   r   s    r   bufsizezPandasBuffer.bufsize*   s%    
 ww||dggmm4444r   c                :    | j                   j                  d   d   S )?
        Pointer to start of the buffer as an integer.
        datar   )r   __array_interface__r   s    r   ptrzPandasBuffer.ptr1   s    
 ww**62155r   c                6    | j                   j                         S z?
        Represent this structure as DLPack interface.
        )r   
__dlpack__r   s    r   r$   zPandasBuffer.__dlpack__8   s     ww!!##r   c                &    t         j                  dfS zU
        Device type and device ID for where the data in the buffer resides.
        Nr   CPUr   s    r   __dlpack_device__zPandasBuffer.__dlpack_device__>        !$$d++r   c                    dt        | j                  | j                  | j                         d   j                  d      z   dz   S )NzPandasBuffer(r   r   r!   device))strr   r!   r)   namer   s    r   __repr__zPandasBuffer.__repr__D   sK    #||88"446q9>> 
	
r   N)T)r   z
np.ndarrayr   boolreturnNoner3   intr3   r   r3   z#tuple[DlpackDeviceType, int | None]r3   r/   __name__
__module____qualname____doc__r   propertyr   r!   r$   r)   r1    r   r   r	   r	      sC    & 5 5 6 6$,
r   r	   c                  `    e Zd ZdZ	 	 	 	 	 	 d	dZed
d       Zed
d       ZddZddZ	ddZ
y)PandasBufferPyarrowr
   c                    || _         || _        y)z0
        Handle pyarrow chunked arrays.
        N)_buffer_length)r   bufferlengths      r   r   zPandasBufferPyarrow.__init__W   s     r   c                .    | j                   j                  S r   )rD   r   r   s    r   r   zPandasBufferPyarrow.bufsizec   s    
 ||   r   c                .    | j                   j                  S )r   )rD   addressr   s    r   r!   zPandasBufferPyarrow.ptrj   s    
 ||###r   c                    t               r#   )NotImplementedErrorr   s    r   r$   zPandasBufferPyarrow.__dlpack__q   s     "##r   c                &    t         j                  dfS r&   r'   r   s    r   r)   z%PandasBufferPyarrow.__dlpack_device__w   r*   r   c                T    dt        | j                  | j                  dd      z   dz   S )NzPandasBuffer[pyarrow](r(   r,   r.   )r/   r   r!   r   s    r   r1   zPandasBufferPyarrow.__repr__}   s7    $#||88# 
	
r   N)rF   z	pa.BufferrG   r6   r3   r4   r5   r7   r8   r9   r:   r@   r   r   rB   rB   R   s_    

 	

 

 ! ! $ $$,
r   rB   )
__future__r   typingr   r   *pandas.core.interchange.dataframe_protocolr   r   numpynppyarrowpar	   rB   r@   r   r   <module>rV      s6    "

 =
6 =
@6
& 6
r   