
    z-PhZ"                        d dl Z d dlZ	 d dlZn# e$ r e j        j        ZY nw xY wg dZ e j	        d          Z
 e j	        d          Zd dlmZ dZddgZd Zd Ze j                            d e ee                    e	          d
             ZddZe j                            d e ee                    e	          e j                            dee	          e j                            dg d          d                                     Ze j                            d e ee                    e	          e j                            dee	          d                         Ze j                            d e ee                    e	          e j                            dee	          d                         Ze j                            d e ee                    e	          e j                            dee	          d                         Ze j                            d e ee                    e	          e j                            dee	          d                         ZdS )    N)uint8int16float32zpyarrow.cudaz
numba.cuda)DeviceNDArrayc                 (   t           j                            d           t                                          }|                                }t                                          }t          j                            |          }||f||fg| _	        d S )Ni  )
nprandomseedcudaContextto_numbanb_cudacurrent_context
from_numbacontext_choices)modulectx1nb_ctx1nb_ctx2ctx2s        e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/test_cuda_numba_interop.pysetup_moduler   $   sq    INN4<<>>DmmooG%%''G<""7++D#Wog?F    c                 
    | ` d S N)r   )r   s    r   teardown_moduler   -   s    r   c)idsc                 d   t           |          \  }}|j        |j        j        k    sJ |j        |                                j        j        k    sJ t          j                            |          }|j        |j        k    sJ d}|                    |          }|j        |j        j        k    sJ d S )N
   )	r   handlevaluer   r   r   r   
new_buffercontext)r   ctxnb_ctxr   sizebufs         r   test_contextr)   1   s     "!$KC:,,,,,:.44444<""6**D:$$$$D
..

C:+++++++r   hostr   c                    t          j        |          }|dk    rp| dk    sJ t          j        | |j        z            }t          j        ||          }t           j                            dd| t           j                  |dd<   ||fS |dk    rSt          | d|          \  }}|
                    | |j        z            }|                    |d|j        	           ||fS t          d
          )z5Return a host or device buffer with random data.
    r*   r   dtype   )lowhighr'   r-   Ndevice)targetr-   )positionnbyteszinvalid target value)r   r-   paallocate_bufferitemsize
frombufferr	   randintr   make_random_bufferr#   copy_from_hostr'   
ValueError)r'   r2   r-   r%   r(   arrdbufs          r   r:   r:   >   s     HUOOEqyyyy en!455mCu---""qs)+ # 3 3AAACx	8		%d6GGGS~~dU^344C!CH===Dy
+
,
,,r   r-   r'   )r         i  c                 `   t           |          \  }}t          |d||          \  }}t                              |          }|                    |          }|j        |j        k    sJ t          j        |                                |          }	t          j	        
                    ||	           |dk    rt          |dz  d d           t          |dz  |dz   d           fD ]k}
|                    ||
                   }t          j        |                                |          }	t          j	        
                    ||
         |	           l	 t          j        t          d	          5  |                    |d d d
                    d d d            n# 1 swxY w Y   |dz  }||z  }||z  |k    sJ |                    |                    ||                    }|j        |j        k    sJ t          j        |                                |          }	t          j	        
                    ||	           t          j        t          d	          5  |                    |                    ||          d d d d d
f                    d d d            n# 1 swxY w Y   d}|dz  }|||z  z  }||z  |z  |k    sJ |                    |                    |||                    }|j        |j        k    sJ t          j        |                                |          }	t          j	        
                    ||	           t          j        t          d	          5  |                    |                    |||          d d d
                    d d d            n# 1 swxY w Y    G d d          }|                     ||                    }|j        |j        k    sJ t          j        |                                |          }	t          j	        
                    ||	           d S )Nr1   r2   r-   r%   r,   r@      r   zarray data is non-contiguous)match   c                   *    e Zd Zd Zed             ZdS )test_from_object.<locals>.MyObjc                     || _         d S r   )darr)selfrJ   s     r   __init__z(test_from_object.<locals>.MyObj.__init__   s    DIIIr   c                     | j         j        S r   )rJ   __cuda_array_interface__)rK   s    r   rN   z8test_from_object.<locals>.MyObj.__cuda_array_interface__   s    955r   N)__name__
__module____qualname__rL   propertyrN    r   r   MyObjrH      s>        	 	 	 
	6 	6 
	6 	6 	6r   rT   )r   r:   r   	to_devicebuffer_from_objectr'   r   r8   copy_to_hosttestingassert_equalslicepytestraisesr<   reshape)r   r-   r'   r%   r&   r=   cbufrJ   cbuf2arr2srdarrs1s2s3rT   s                   r   test_from_objectrf   Q   s   
 "!$KC"43OOOIC S!!D""4((E:""""=++--U;;;DJC&&& qyyat,,a47T224 	2 	2A**4733E=!3!3!5!5UCCCDJ##CFD1111	/ ]:"@C C C 	. 	.""4!9---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.
 1W2XBw$&&t||B';';<<zTY&&&&}U//11???

T***]:"@C C C 	A 	A""4<<B#7#733Q3#?@@@	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A
 1WBrE]Bw|t####&&t||BB'?'?@@zTY&&&&}U//11???

T***]:"@C C C 	B 	B""4<<B#;#;CCaC#@AAA	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B6 6 6 6 6 6 6 6 ""55;;//E:""""=++--U;;;DJC&&&&&s6   +FFF7JJJ4NN"%N"c                    t           |          \  }}t          j        |          }d}|                    ||j        z            }t          |f|j        f||          }d|d d<   d|dd <   t          j                            |                                d d         d           t          j                            |                                dd          d           t          j
                            |          }t          j        |                                |          }t          j                            ||                                           d S )Nr    gpu_datac      X   r,   )r   r   r-   memallocr7   r   rX   rY   rW   r   
CudaBufferr   r8   )	r   r-   r%   r&   r'   memrJ   r^   r`   s	            r   test_numba_memallocrp      s0    "!$KCHUOOE D
//$/
0
0C$5>"3USIIIDD!HDHJD--//3R888JD--//3R888 ?%%c**D=**,,E:::DJD$"3"3"5"566666r   c                 &   t           |          \  }}d}t          |d||          \  }}|                                }t          |j        |j        |j        |          }t          j        	                    |
                                |           d S )Nr    r1   rB   rh   )r   r:   r   r   shapestridesr-   r   rX   rY   rW   )	r   r-   r%   r&   r'   r=   r^   ro   rJ   s	            r   test_pyarrow_memallocrt      s     "!$KCD"43OOOIC --//CCKSIIIDJD--//55555r   c                 ^   t           |          \  }}d}t          j        d         5  t          |d||          \  }}|j        j        |j        j        k    sJ |                                }t          |j	        |j
        |j        |          }t          j                            |                                |           d|d<   |j                                         t          j        |                                |          }	|	d         dk    sJ 	 d d d            d S # 1 swxY w Y   d S )Nr    r   r1   rB   rh   rj   r,   )r   r   gpusr:   r$   r!   r"   r   r   rr   rs   r-   r   rX   rY   rW   synchronizer8   )
r   r-   r%   r&   r'   r=   r^   ro   rJ   r`   s
             r   test_numba_contextrx      s`    "!$KCD	a 
 
&tH-2= = =	T|"fm&99999mmooSYSYMMM

 1 1 3 3S999Q  """}T..00>>>Aw"}}}}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   C/D""D&)D&c                    t           |          \  }}t          j        d             }d}t          |d||          \  }}d}|j        |dz
  z   |z  }	|                                }
t          |j        |j        |j	        |
          } ||	|f         |           |j
                                         t          j        |                                |j	                  }t          j                            ||dz              d S )	Nc                 t    t                               d          }|| j        k     r| |xx         dz  cc<   d S d S )Nr?   )r   gridr'   )an_arrayposs     r   increment_by_onez*test_pyarrow_jit.<locals>.increment_by_one   s@    ll1ooSMMMQMMMMM r   r    r1   rB       r?   rh   r,   )r   r   jitr:   r'   r   r   rr   rs   r-   r$   rw   r   r8   rW   rX   rY   )r   r-   r%   r&   r~   r'   r=   r^   threadsperblockblockspergridro   rJ   arr1s                r   test_pyarrow_jitr      s    "!$KC[  [ D"43OOOICOX1!45/IM
--//CCKSIIID4]O34T:::L=**,,CI>>>DJD#'*****r   )r*   r   N)r[   pyarrowr5   numpyr   ImportErrormark
pytestmarkdtypesimportorskipr   r   numba.cuda.cudadrv.devicearrayr   r   context_choice_idsr   r   parametrizerangelenr)   r:   rf   rp   rt   rx   r   rS   r   r   <module>r      s  $     # # # #"JJJ# 
'	&	&v>**
&
l
+
+ 8 8 8 8 8 8 $l3 @ @ @   eeCC(:$;$;<</  1 1, ,1 1,- - - -& eeCC(:$;$;<</  1 1&f5511H' H' 21 651 1H'V eeCC(:$;$;<</  1 1&f557 7 651 17( eeCC(:$;$;<</  1 1&f556 6 651 16 eeCC(:$;$;<</  1 1&f55  651 1  eeCC(:$;$;<</  1 1&f55+ + 651 1+ + +s    ##