o
    hh                     @   s  d dl Z d dlmZ d dlZd dlZzd dlZW n ey#   dZY nw d dlZ	d dl
mZ ejjZdd Zdd Zdd	 Zeejd
e	 dfe	 dfe	 dfe	 dfe	 dfe	 dfe	 dfe	 dfe	 dfe	 dfe	 dfgdd Zdd Zdd ZdS )    Nwraps)Versionc                 C   s   t jt | |dkS )N   )ctypes	pythonapiPyCapsule_IsValid	py_object)capsulename r   M/var/www/vscode/kcb/lib/python3.10/site-packages/pyarrow/tests/test_dlpack.pyr   %   s   r   c                 C   sJ   |   }t|ddu sJ t| }tjj||dd |  dks#J d S )Ns   dltensorT)strict)r   r   )
__dlpack__r   npfrom_dlpacktestingassert_array_equal__dlpack_device__)arrexpected_arrDLTensorresultr   r   r   check_dlpack_export)   s
   
r   c                    s   t   fdd}|S )Nc                     sD   t   t }z | i |W t |ksJ S t |ks!J w )N)gccollectpatotal_allocated_bytes)argskwargsallocated_bytesfr   r   wrapper4   s
   $z&check_bytes_allocated.<locals>.wrapperr   )r"   r#   r   r!   r   check_bytes_allocated3   s   r$   )
value_typenp_type_struint8uint16uint32uint64int8int16int32int64float16float32float64c                 C   s   t tjt dk rtd tjg dt|d}tj|| d}t|| |	dd}tjdgt|d}t|| |	dd}tjdgt|d}t|| |	d}tjdd	gt|d}t|| tjg | d}tjg t|d}t|| d S )
Nz1.24.0zyNo dlpack support in numpy versions older than 1.22.0, strict keyword in assert_array_equal added in numpy version 1.24.0r         )dtypetyper   r3   r   r4   )
r   r   __version__pytestskiparrayr5   r   r   slice)r%   r&   expectedr   
arr_slicedarr_zeror   r   r   test_dlpack?   s"   





r@   c                  C   sL  t tjt dk rtd tg d} tjtdd t	|  W d    n1 s,w   Y  tjddgdd	ggt
t d
} tjtdd t	|  W d    n1 sZw   Y  tg } tjtdd t	|  W d    n1 s{w   Y  tg d} tjtdd t	|  W d    d S 1 sw   Y  d S )Nz1.22.0z6No dlpack support in numpy versions older than 1.22.0.)r   Nr4   z,Can only use DLPack on arrays with no nulls.matchr   r   r4      r6   z+DataType is not compatible with DLPack spec)TFTz5Bit-packed boolean data type not supported by DLPack.)r   r   r8   r9   r:   r   r;   raises	TypeErrorr   list_r-   )r   r   r   r   test_dlpack_not_supportedk   s*   

"rG   c                  C   s   t d} ttdt g}tjg dt d}tj|g|d}| || 	d}| 
||j}|d }t jtdd t| W d    n1 sOw   Y  t jtdd |  W d    d S 1 skw   Y  d S )	Nzpyarrow.cudaf0r2   r6   )schemar   z=DLPack support is implemented only for buffers on CPU device.rA   )r9   importorskipr   rI   fieldr,   r;   record_batchserialize_record_batchContextread_record_batchrD   NotImplementedErrorr   r   r   )cudarI   a0batchcbufcbatchcarrr   r   r   test_dlpack_cuda_not_supported   s   

"rW   ) r   	functoolsr   r   r9   numpyr   ImportErrorpyarrowr   pyarrow.vendored.versionr   mark
pytestmarkr   r   r$   parametrizer'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r@   rG   rW   r   r   r   r   <module>   sD   











