
    z-PhC                     .   d Z ddlZddlZ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 ej        d          Z ej                    Zedk    Zej	                            e dez            ZdZdZd Zd Zd	 Zej	                            d
g d          d             Zd Zd4dZej	                            d
g d          d             Zej	                            d
g d          d             Zd Zej	                            d
g d          d             Zej	                            d
g d          d             Zej	                            d
g d          d             Z ej	                            d
g d          d             Z!ej	                            dddg          ej	                            d
g d          d                         Z"ej	                            d
g d          d             Z#d Z$d Z%d Z&d Z'd  Z(d! Z)d" Z*d# Z+d$ Z,d% Z-d& Z.d' Z/eej	                            d
g d          d(                         Z0d) Z1d* Z2d+ Z3d, Z4ej	                            d
d-d.g          d/             Z5d0 Z6d1 Z7d2 Z8d3 Z9dS )5z
UNTESTED:
read_message
    Nzpyarrow.cudazlinux-x86_64z'CUDA IPC not supported in platform `%s`)reasonc                     t                               d          | _        t                               t           j                                        dz
            | _        d S )Nr      )cudaContextglobal_contextget_num_devicesglobal_context1modules    W/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/tests/test_cuda.pysetup_moduler   1   sA     LLOOF!\\$,*F*F*H*H1*LMMF    c                 
    | ` d S N)r   r   s    r   teardown_moduler   6   s    r   c                     t           j                                        dk    sJ t          j        dk    sJ t
          j        t           j                                        dz
  k    sJ t          j        } | j        rJ dt          |           v sJ t          j	        }|| j	        k    sJ |j        rJ |j
        dk    sJ |j        t          j        j        k    sJ t          j        t"          d          5  t                               t           j                                                   d d d            d S # 1 swxY w Y   d S )Nr   r   z)<pyarrow.MemoryManager device: CudaDevicez5device_number argument must be non-negative less thanmatch)r   r   r	   r   device_numberr
   memory_manageris_cpureprdevice	device_iddevice_typepaDeviceAllocationTypeCUDApytestraises
ValueError)mmdevs     r   test_Contextr%   :   s   <''))A----'1,,,,(DL,H,H,J,JQ,NNNNN		&By6$r((BBBB

C")z=A?b5:::::	z:
< 
< 
< 5 5 	T\11334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5s   67D::D>D>size)r   r     c                 \   t                               |           }t          j        |t          j                  }d|| dz  d| z  dz  <   |                                }t          j        |t          j                  }t          j                            ||           |j        | k    sJ d S )Ndtyper         )	r   new_host_buffernp
frombufferuint8copytestingassert_equalr&   )r&   bufarrarr_cparr2s        r   test_manage_allocate_free_hostr8   P   s    


t
$
$C
-28
,
,
,CCa$	XXZZF=BH---DJD&)))8tr   c                      t           j        } t                               d          }t           j        | dz   k    sJ ~t           j        | k    sJ d S )N   )r   bytes_allocated
new_buffer)r;   cudabufs     r   test_context_allocate_delr>   [   sS    $4O'',,G)_s-BBBBB)_<<<<<<r   hostc                    |dk    r| dk    sJ t          j        |           }|j        | k    sJ t          j        |t          j                  }|j        | k    sJ t          j                            dd| t          j                  |dd<   |                                dk    s| dk    sJ t          j        |t          j                  }t          j	        
                    ||           ||fS |dk    rWt          | d	          \  }}t                              |           }|j        | k    sJ |                    |d| 
           ||fS t          d          )z5Return a host or device buffer with random data.
    r?   r   r)   r      )lowhighr&   r*   Nr   targetpositionnbyteszinvalid target value)r   allocate_bufferr&   r.   r/   r0   randomrandintsumr2   r3   make_random_bufferr   r<   copy_from_hostr"   )r&   rE   r4   r5   arr_dbufs         r   rM   rM   c   s_    qyyyy &&x4mCrx000x4""qsRX"NNAAAwwyy1}}				}S111

T***Cx	8		%d6:::S((..yD    C!D999Dy
+
,
,,r   c                    t          |           \  }}t                              |          }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           t          j        t                    5  t          |           d d d            n# 1 swxY w Y   t                              |          }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           t                              |                                          }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           |                    d|j                  }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           | dk    r|                    || dz  d                     t	          j        |                                t          j                  }t          j        	                    t	          j        || dz  d          || dz  d          f          |           |                    |d | dz                      t                              |          }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           |                    || dz  d                     t	          j        |                                t          j                  }t          j        	                    ||           |                    d|j        dz             }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           |                    | dz  | dz             }|j        | | dz  z
  k    sJ t	          j        |                                t          j                  }t          j        	                    || dz  d          |           | dz  }d| z  dz  }t                              |||          }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t                              |                    ||                    }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t                              |||          }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t                              ||||z                      }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t                              |                                ||          }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t                              |           }|j        | k    sJ t                              |          }|                    ||          }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t&                              |           }t	          j        |t          j                  }	||	d d <   t                              |          }|j        | k    sJ t	          j        |                                t          j                  }t          j        	                    ||           t                              |||          }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           t                              |                    ||                    }|j        |k    sJ t	          j        |                                t          j                  }t          j        	                    ||||z            |           d S )	Nr)   r   r      
   r+   )offsetr&   rT   length)rM   r   buffer_from_datar&   r.   r/   copy_to_hostr0   r2   r3   r    r!   BufferError
memoryviewtobytesslicerN   concatenater<   r   r-   )
r&   r5   r4   r=   r7   cudabuf2arr3soffsetssizerO   s
             r   test_context_device_bufferrb   z   sL	    "$''HC--c22G<4=--//rx@@@DJC&&& 
{	#	#  7               --c22G<4=--//rx@@@DJC&&& --ckkmm<<G<4=--//rx@@@DJC&&& }}Q--H=D    =..00AAADJC&&&axxD!GHH...}W113328DDD

D!GHHs4788}/M N N $	& 	& 	&HT1WH... ..w77H=D    =..00AAADJC&&&CaM***=--//rx@@@DJC&&& }}QR00H=D    =..00AAADJC&&&}}T1Wd2g..H=D47N****=..00AAADJCaM4000 AgGdFAIE--c'38 . : :G<5    =--//rx@@@DJC% 78$???--ciiw?D /8 /F /F G GG<5    =--//rx@@@DJC% 78$??? --c'-NNG<5    =--//rx@@@DJC% 78$???--c''%-2G.HIIG<5    =--//rx@@@DJC% 78$??? --ckkmm5<38 . : :G <5    =--//rx@@@DJC% 78$??? ''--G<4 --c22G}}We,,H=E!!!!=..00AAADJC 56=== 

t
$
$C=BH---DDG--c22G<4=--//rx@@@DJC&&& --c'-NNG<5    =--//rx@@@DJC 56===--			//1 1G<5    =--//rx@@@DJC 56=====s   %CCCc                    t           }t          | d          \  }}|j        }t                              | |j        j        z            }|t          j        ||          d d <   |                    |          }|j	        |j	        k    sJ t          j        |
                                |          }t          j                            ||           |                    |          }|j	        |j	        k    sJ t          j        |
                                |          }t          j                            ||           t          j        t          j        d          5  |                    t          j        d                     d d d            n# 1 swxY w Y   t          j        t          j        d          5  |                    t          j        g d                     d d d            d S # 1 swxY w Y   d S )	Nr   rD   r)   z$buffer is not backed by a CudaBufferr   s   123z8cannot create device buffer view from .* 'numpy.ndarray')r   rR   r,   )r   rM   r*   r   r-   itemsizer.   r/   buffer_from_objectr&   rX   r2   r3   r    r!   r   ArrowTypeError	py_bufferarray)r&   ctxr5   cbufr*   hbufcbuf2r7   s           r   test_context_from_objectrm      sd   
C"4999ICIE sy'9 9::D*-BM$e$$$QQQ'""4((E:""""=++--U;;;DJC&&& ""5))E:""""=++--U;;;DJC&&& 
r(D
G 
G 
G 5 5r|F334445 5 5 5 5 5 5 5 5 5 5 5 5 5 5
 
r(5
7 
7 
7 4 4 	rx			223334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4s$   #(FFF*G99G= G=c                     t           } t          j        t          j                  }d}t                              ||j        z            }t          j        |          }| 	                    |j
        |j        |          }t          j        |          |dz   k    sJ ~t          j        |          |k    sJ | 	                    |j
        |j        |          }~|                                 t                              ||j        z            }| 	                    |j
        |j                  }~t          j        t          j        d          5  |                                 d d d            d S # 1 swxY w Y   d S )NrS   r   zCuda error r   )r   r.   r*   r0   r   r-   rd   sysgetrefcountforeign_bufferaddressr&   rX   r    r!   r   ArrowIOError)ri   r*   r&   rk   rcfbufs         r   test_foreign_bufferrv     s   
CHRXEDu~ 566D 
		BdlDIt<<D?4  BF****?4  B&&&& dlDIt<<D u~ 566DdlDI66D	r+
. 
. 
.                   s   E22E69E6c                 X   t          |           \  }}|                                |                                k    sJ t                              |          }|j        | k    sJ |j        rJ |                                |                                k    sJ | dk    r|j        dk    sJ t          |           D ]}||         ||         k    sJ t          d           t          | dz  | dz            fD ]:}||                                         ||                                         k    sJ ;|	                    | dz  | dz            }|j
        |k    sJ t          j        t          d          5  t                                           d d d            d S # 1 swxY w Y   d S )Nr   r+   rR   z-Do not call CudaBuffer's constructor directlyr   )rM   r[   
to_pybytesr   rW   r&   r   rr   ranger\   parentr    r!   	TypeErrorr   
CudaBuffer)r&   r5   r4   rj   issbufs          r   test_CudaBufferr   5  s    !$''HC;;==CNN,,,,,,**3//D9{;;==DOO------axx|a4[[ ! !Aw#a&      $KK$'47## 8 8 Aw!!##s1v~~'7'777777::dAgtQw''D;$	yL
N 
N 
N                   s   8FF#&F#c                 ~   t          |           \  }}|                                |                                k    sJ t                              |           }|t          j        |t
          j                  d d <   |j        | k    sJ |j	        sJ |                                |                                k    sJ t          |           D ]}||         ||         k    sJ t          d           t          | dz  | dz            fD ]:}||                                         ||                                         k    sJ ;|                    | dz  | dz            }|j        |k    sJ ~t          j        t          d          5  t                                           d d d            d S # 1 swxY w Y   d S )Nr)   r+   rR   z-Do not call HostBuffer's constructor directlyr   )rM   r[   rx   r   r-   r.   r/   r0   r&   r   ry   r\   rz   r    r!   r{   
HostBuffer)r&   r5   r4   rk   r}   r~   r   s          r   test_HostBufferr   Q  s   !$''HC;;==CNN,,,,,,%%D-0BM$bh'''*9;;;==DOO------4[[ ! !Aw#a&     $KK$'47## 8 8 Aw!!##s1v~~'7'777777::dAgtQw''D;$	yL
N 
N 
N                   s   F22F69F6c                 R   t          j        d          }| |j        z  }t          j        |d          }t          |t          j                  sJ t          |t          j                  rJ t          j	        ||          }|j
        | k    sJ t          |           |d d <   t          j	        ||          }t           j                            ||           t                              |          }t          |t          j                  sJ t          |t          j                  sJ |j
        |k    sJ |j        rJ |                    |d|           |                    d|          }t          j	        ||          }t           j                            ||           d S )Nuint16T)	resizabler)   r   rF   )r.   r*   rd   r   rI   
isinstanceBufferr   r|   r/   r&   ry   r2   r3   r   r<   r   rN   rX   )	r&   dtrH   r4   r5   rO   device_bufferbuf2r7   s	            r   test_copy_from_to_hostr   l  s    
(		BBKF

Vt
4
4
4Cc29%%%%%#t/////
-2
&
&
&C8t4[[CF=B'''DJC&&& #--f55MmT_55555mRY/////''''####  q @@@ %%q%@@D=R(((DJC&&&&&r   c                    t          | d          \  }}|                                }|j        sJ t          j                            |t          j        |t          j                             |                    | dz            }|j        sJ t          j                            || dz  d          t          j        |t          j                             |                    | dz  | dz            }|j        sJ t          j                            || dz  | dz  | dz  z            t          j        |t          j                             |                    | dz  d          }|j        sJ |j        dk    sJ | d	z   d
fd| dz   dfdfD ]O\  }}t          j
        t          d          5  |                    ||           d d d            n# 1 swxY w Y   Pd| dz   f| d	z  | dz   d	z  dz   f| dffD ]O\  }}t          j
        t          d          5  |                    ||           d d d            n# 1 swxY w Y   Pt          j        | dz            }|                    |           t          j                            |d | dz           t          j        |t          j                             | dk     rd S |                    |d           t          j                            |dd| dz  z            t          j        |t          j                             |                    |d           t          j                            |d d         t          j        |t          j                  d d                    |                    |dd           t          j                            |dd         t          j        |t          j                  d d                    d| dz   fd| dz
  fd| d	z  f| dz  | dz  dz   ffD ]P\  }}t          j
        t          d          5  |                    |||           d d d            n# 1 swxY w Y   Qd S )Nr   rD   r)   r+   rG      rF   r   rR   r   r   r   !position argument is out-of-ranger   8requested more to copy than available from device buffer)r4      )r4   rG   )r4   rH      )r4   rH   rG      rS      z,requested copy does not fit into host buffer)r4   rG   rH   )rM   rX   r   r.   r2   r3   r/   r0   r&   r    r!   r"   r   rI   )r&   r5   rP   r4   rG   rH   s         r   test_copy_to_hostr     s   "4999IC




C:JCs"(!C!C!CDDD


T1W

-
-C:JCaM2=BH+M+M+MNNN


T1WT1W

=
=C:JCaaa 78M#RX>>>@ @ @ 

T1WQ

7
7C:8q==== 
ahaW @ @6 ]:!DF F F 	@ 	@x???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@
 
DFdAgQ{1}-ay @ @6 ]:#BD D D 	@ 	@ x???	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@
 
T1W
%
%C#JCqM2=BH+M+M+MNNNbyy#+++JC2dAg:.M#RX>>>@ @ @ 	#b)))JCHbmCrx&H&H&H"&MNNN#b1555JC$KM#RX>>>ssCE E E RL2tAv,aL47D!GAI. I I6 ]:#9; ; ; 	I 	I #HHH	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I	I Is6   3GG	G	II	I	9QQ"	%Q"	dest_ctxsameanotherc                 >   t          |d          \  }|                                }| dk    r1t          } j        j        | j        k    rt          j        d           nj        } |                     |          fd} |            |k    sJ |dk    r ||dz            |d |dz           |d | dz           z   k    sJ  |            |k    sJ  |d|d	z  
          |d d         |d |d	z           z   |||d	z  z
  dz
   d          z   k    sJ |d	z   dfd|dz   dfdfD ]E\  }}t          j        t          d          5   |||
           d d d            n# 1 swxY w Y   Fd|dz   ffD ]E\  }}t          j        t          d          5   |||
           d d d            n# 1 swxY w Y   F|dk     rd S |d	z  |dz   d	z  dz   ffD ]E\  }}t          j        t          d          5   |||
           d d d            n# 1 swxY w Y   Fd S )Nr   r&   rE   r   znot a multi-GPU systemc                       j         g| R i |                                 }t          j        |t          j                                                  S Nr)   )copy_from_devicerX   r.   r/   r0   tolistargskwargsrbufr4   rP   s      r   putz"test_copy_from_device.<locals>.put  sZ    c3D333F333  ""}T22299;;;r   r+   r   r   rR   rF   r   r   r   r   r   r   r   6requested more to copy than available in device buffer)
rM   r   r
   contextr   r    skipr<   r!   r"   )	r   r&   r5   lstr   rG   rH   r4   rP   s	          @@r   test_copy_from_devicer     s    "tH===HC
**,,C9";$(>>>K0111;t$$D< < < < < < 355C<<<<axxsD!G$$$HT1WHc)D5!8)n(DDDDDsuu||||sAdAg...Gc(47(m#cDqLN*;*<*<&==> > > > !VRL(T!VQK 2 26 ]:!DF F F 	2 	2C&1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 
DF 2 26 ]:#BD D D 	2 	2 C&1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 axx 
q46A+a-  2 26 ]:#@B B B 	2 	2 C&1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	22 2s6   
E$$E(	+E(	F22F6	9F6	7HH	H	c                    t          | d          \  }|                                }t                              |           fd} |            |k    sJ | dk    r || dz            |d | dz           |d |  dz           z   k    sJ  |            |k    sJ  |d| dz            |d d         |d | dz           z   || | dz  z
  dz
   d          z   k    sJ | dz   d	fd
| dz   dfdfD ]E\  }}t	          j        t          d          5   |||           d d d            n# 1 swxY w Y   Fd| dz   ffD ]E\  }}t	          j        t          d          5   |||           d d d            n# 1 swxY w Y   F| dk     rd S | dz  | dz   dz  dz   ffD ]E\  }}t	          j        t          d          5   |||           d d d            n# 1 swxY w Y   Fd S )Nr?   r   c                       j         g| R i |                                 }t          j        |t          j                                                  S r   )rN   rX   r.   r/   r0   r   r   s      r   r   z test_copy_from_host.<locals>.put  sZ    C1$111&111  ""}T22299;;;r   r+   r   r   rR   rF   r   r   r   r   r   r   z6requested more to copy than available from host bufferr   )rM   r   r   r<   r    r!   r"   )r&   r5   r   r   rG   rH   r4   rP   s         @@r   test_copy_from_hostr     s{   !tF;;;HC
**,,C$$T**D< < < < < < 355C<<<<axxsD!G$$$HT1WHc)D5!8)n(DDDDDsuu||||sAdAg...Gc(47(m#cDqLN*;*<*<&==> > > > !VRL(T!VQK 2 26 ]:!DF F F 	2 	2C&1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 
DF 2 26 ]:#@B B B 	2 	2 C&1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2
 axx 
q46A+a-  2 26 ]:#@B B B 	2 	2 C&1111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	22 2s6   D++D/	2D/	E99E=	 E=	>GG	G	c                     t                               d          } | j        t          j        j        k    sJ t          | j        t          j                  sJ t          | j	        t          j
                  sJ | j        sJ | j        j        sJ | j        t          j                    j        k    sJ | j	        j        sJ t          dd          \  }} | j        t          j        j        k    sJ t          | j        t          j                  sJ | j        t          j	        j        k    sJ t          | j	        t          j
                  sJ | j        rJ | j        j        rJ | j	        j        rJ d S )NrS   r   r   )r   r-   r   r   r   	CUDA_HOSTr   r   Devicer   MemoryManagerr   default_cpu_memory_managerrM   r   r   )r4   _s     r   test_buffer_devicer   '  sk   


r
"
"C?b5?????cj"),,,,,c("*:;;;;;:::688????? $$$$R999FAs?b5:::::cj"),,,,,:6=====c("*:;;;;;zz    !((((((r   c                     d dfd	} d\  }} | ||            | |||dz              d          \  }}|                     t          j        dt          j                             |                    dt          j        d	t          j                             |                     t          j        d	t          j                             |                                 t          j        |                                t          j                  }t          j        	                    |d d         t          j        dt          j                             t          j        	                    |dd
         t          j        d	t          j                             t          j        	                    |d
d          t          j        d	t          j                             d S )Nc                 r    t                               |           }t                              |          }||fS r   )r   r<   r   BufferWriter)r&   rj   writers      r   allocatez#test_BufferWriter.<locals>.allocate>  s2    ((..""4((V|r   r   c                     |           \  }}t          | d          \  }}|dk    r||_        |                                }|dk    sJ |                    |                    |                     |                                |k    sJ |                    d           |                                }|dk    sJ || k     rHt          || |z
            }|                    |                    ||                     ||z  }|| k     H|                                 |j        | k    sJ |j	        
                                 |                                }	|j	        
                                 |	j        | k    sJ t          j        |	t          j                  }
t          j                            ||
           d S )Nr?   r   r   rV   rU   r)   )rM   buffer_sizetellwriter\   seekminflushr&   r   synchronizerX   r.   r/   r0   r2   r3   )
total_size	chunksizer   rj   r   r5   r4   rG   bytes_to_writer   r7   r   s              r   test_writesz&test_BufferWriter.<locals>.test_writesC  s   x
++f%:fEEES??!,F;;==1}}}}SYYiY00111{{}}	))))A;;==1}}}}## J,ABBNLL(>JJKKK&H ##
 	yJ&&&&  """  ""  """yJ&&&&}T222

T*****r   )i   r'      d   r)   2      K   )r   )
r   r.   aranger0   writeatr   r/   rX   r2   r3   )r   r   
chunk_sizerj   r   r5   r   s         @r   test_BufferWriterr   =  s     
+ + + + + +: +J
K
J'''K
J
b(89998C==LD&
LL3bh///000
NN2ry28444555
LL2RX...///
LLNNN
-))++RX
6
6CJCHbi"(&C&C&CDDDJC2J	"BH(E(E(EFFFJCHbi"(&C&C&CDDDDDr   c                  d   d} t                               |           }t                              |          }t	          | d          \  }}|j        dk    sJ d|_        |j        dk    sJ |                    |                    d                     |                                dk    sJ |                    |                    d                     d|_        |j        dk    sJ |j	        dk    sJ |                    |                    dd	
                     |j	        dk    sJ |                    |                    dd
                     |j	        dk    sJ |                    |                    dd
                     |                    |                    dd
                     |
                                 |                                }|j        | k    sJ t          j        |t          j                  }t          j                            ||           d S )Nr'   r?   r   r   r   r   rS      i,  rU   i6  i  i  i  r)   )r   r<   r   r   rM   r   r   r\   r   num_bytes_bufferedr   rX   r&   r.   r/   r0   r2   r3   )r&   rj   r   r5   r4   r   r7   s          r   test_BufferWriter_edge_casesr   p  s   D$$T**Dt$$F!tF;;;HC""""F$$$$
LL!$$%%%;;==A
LL"%%&&&F$$$$$))))
LL"S11222$))))
LL#c22333$))))
LL#c22333
LL#c22333
LLNNND9=RX...DJC&&&&&r   c                     d} t          | d          \  }}t                              |          }|                    d           |                                dk    sJ |                    d          }t          |          dk    sJ |                                dk    sJ |                    d           t          j        dt          j	                  }|
                    |          }|d	k    sJ |                                dk    sJ t          j                            |dd          |d d	                    |                    d
           |                                d
k    sJ |                                }t          j        |                                t          j	                  }t          j                            ||           d S )Nr'   r   r   i  r   r   i  r)   r   r   )rM   r   BufferReaderr   r   readlenr.   zerosr0   readintor2   r3   read_bufferr/   rX   )r&   r5   rj   readerdatar7   nr   s           r   test_BufferReaderr     s   D"X>>>ICt$$F
KK;;==C;;sDt99????;;==D    
KK8Crx(((DA7777;;==D    JCItCRCy111
KKNNN;;==AD=**,,BH===DJC&&&&&r   c                     t          dd          \  } }t                              |          }|                    d           |                                }t          |          dk    sJ |                                dk    sJ |                                }t          j	        |
                                t          j                  }t          j                            | |           d S )Nr   r   r   r)   )rM   r   r   r   r   r   r   r   r.   r/   rX   r0   r2   r3   )r5   rj   r   r   r   r7   s         r   test_BufferReader_zero_sizer     s    "(;;;ICt$$F
KKNNN;;==Dt99>>>>;;==AD=**,,BH===DJC&&&&&r   c                    t          j        t          j        dt          j                              t          j        dt          j                              g          }t          j        t
          j                            dd| t
          j                            }t          j        t
          j                            dd| t
          j                            }t          j        ||g|          }|S )Nf0f1r   rA   )r&   r*   schema)	r   r   fieldint16rh   r.   rJ   rK   record_batch)rV   r   a0a1batchs        r   make_recordbatchr     s    Yrxzz22rxzz224 5 5F	")##Asrx#HH	I	IB	")##Asrx#HH	I	IBORHV444ELr   c                  R   t          d          } |                                 }t                              | t                    }t                              || j                  }t          |t          j	                  sJ | j        |j        k    sJ | j
        |j
        k    sJ | j        |j        k    sJ |                                }|                    |          sJ t          j                            || j                  }|                    |                                          sJ | j
        |j
        k    sJ | j        |j        k    sJ |                     d                              |                    d                    sJ |                     |          sJ d S )NrS   r   )r   	serializer   serialize_record_batchr   read_record_batchr   r   r   RecordBatchnum_columnsnum_rowsrX   equalsipccolumn)r   rk   rj   cbatchr4   batch2s         r   test_batch_serializer     s   R  E??D&&un==D ##D%,77Ffbn-----<6=(((( 22222>V_,,,, 



C;;sV%%c5<88F;;v''))***** 22222>V_,,,,<<??!!&--"2"233333<<r   c            	      H   t          j        g dt          j                              } t          j        ddgdgg d gt          j        t          j                                        }t          j        g dt          j        dt          j                    fdt          j                    fg                    }t           j        	                    g d	t          j        d
dg                    }t           j        	                    g d|          }t           j        	                    g d|          }| |||||g}t          j
        d t          |          D                       }t          j        ||          }t           j                            |g          }	|	S )N)r   r   *   Ntyper   r   rR   ))abT)cdeF)NNNstrsbools)r   r   r   Nfoobar)indices
dictionary)rR   r   rR   N)rR   r   r   Nc                 L    g | ]!\  }}d                      |          |j        f"S )zf{})formatr  ).0r}   r5   s      r   
<listcomp>zmake_table.<locals>.<listcomp>  s=     9 9 9"As a#(3 9 9 9r   r   )r   rh   r   list_int32structutf8bool_DictionaryArrayfrom_arraysr   	enumerater   Tablefrom_batches)
r   r   a2a3a4a5arraysr   r   tables
             r   
make_tabler    s   	"""	4	4	4B	Aq6A3D)0D0D	E	E	EB	DDDy62799"5#*BHJJ"7"9 : :
; 
; 
;B
 
		'	'8UEN++ 
( 
- 
-B 
		'	' 
( 
 
B 
		'	' 
( 
 
B "b"b"%FY 9 9&/&7&79 9 9 : :FOF6222EH!!5'**ELr   c                     t                      } t          j                    }t          j                            || j                  5 }|                    |            d d d            n# 1 swxY w Y   t          j        |                                	                                          }t                              t          |                    }|                    |t          |                     t          j                            t                              |                                                    }|| ||fS )N)rH   )r  r   BufferOutputStreamr   
new_streamr   write_tablerg   getvaluerx   r   r<   r   rN   open_streamr   r   read_all)htablesinkoutrk   rP   dtables         r   make_table_cudar*    s2   \\F ""D			4	/	/  3                             <224455D $$SYY//DSYY///V 1 1$ 7 788AACCFv%%s   A))A-0A-c                     t                      \  } }}}|j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ |                     |                                          sJ |                    t          j                            |                                          	                                          sJ d S r   )
r*  r   r   r   r   rX   r   r   r$  r%  )rk   r&  rP   r)  s       r   test_table_deserializer,    s     "1!2!2D&$=FM))))?fo----!33333;;t((**+++++==++ hjj      r   c                     t                      \  } }}}t          j                            |j        |j                  }|j        |j        k    sJ |j        |j        k    sJ |j        |j        k    sJ | 	                    |
                                          sJ |	                    t          j                            |
                                                                                    sJ d S r   )r*  r   r  r  columnscolumn_namesr   r   r   r   rX   r   r$  r%  )rk   r&  rP   r)  dtable2s        r   %test_create_table_with_device_buffersr1    s     "1!2!2D&$h""6>63FGGG=GN****?g.....!44444;;t((**+++++==++ hjj      r   c                    t           j                            d          }t           j        j                            |           }|                    |          }|j                                         |                                }|j	        |j	        k    s#J t          |j	        |j	        f                      t          j        ||j                  }t          j                            ||           d S )Nr   r)   )r   r   r   IpcMemHandlefrom_bufferopen_ipc_bufferr   r   rX   r&   r   r.   r/   r*   r2   r3   )handle_bufferexpected_arrother_context
ipc_handleipc_bufr4   r5   s          r   other_process_for_test_IPCr;  '  s    GOOA&&M%11-@@J++J77GO!!!



 
 C8|(((($,:K/L*M*M(((
-<#5
6
6
6CJC.....r   c                 V   dd l }|                    d          }t          | d          \  }}|                                }|                                }|                    t          ||f          }|                                 |                                 |j	        dk    sJ d S )Nr   spawnr   r   )rE   r   )
multiprocessingget_contextrM   export_for_ipcr   Processr;  startjoinexitcode)r&   r>  ri   r5   rj   r9  r6  ps           r   test_IPCrF  2  s     

%
%g
.
.C"X>>>IC$$&&J((**M5'- 	 	/ 	/AGGIIIFFHHH:??????r   c                     t          dd          \  } }|j        }||j        fD ]}t          j        g d          }|                    |          }|                                d         j        rJ |                                d         j        t          j	        j
        k    sJ |                                d         j        |j        k    sJ |                    t          j                              }|                    |          sJ t          j        d|i          }|                    |          }|d                                         d         }	|	j        rJ |	j        t          j	        j
        k    sJ |	j        |j        k    sJ |                    t          j                              }
|
                    |          sJ d S )NrS   r   r   )r   r   rR   r   col)rM   r   r   r   rh   copy_tobuffersr   r   r   r   r   r   r   )r   r4   mm_cudadestr5   arr_cudaarr_roundtripr   
batch_cudabuf_cudabatch_roundtrips              r   test_copy_torR  A  s   R999FAs G'.) - -hyyy!!;;t$$##%%a(////!!!$0B4K4PPPPP!!!$+w~==== (()F)H)HII##C(((((--]]4((
e$,,..q1?"""#r'>'CCCCC'.0000$,,R-J-L-LMM%%e,,,,,,%- -r   c                  r   t          j        d          } | j        }|                    d          }t	          |                    d|                    }|                    d          }t	          |                    d|                    }t          j        t          j                              }t          j	        dgddgg|          }t          d	d
          \  }}	|	j        }
|                    |
          }|                    |           |j        dk    sJ |j        t           j        k    sJ |j	        j        dk    sJ ~t          j                            ||          }|j        t          j        t          j                              k    sJ |                    t          j                              }|                    |          sJ ~t          j        t2          d          5  t          j                            ||           d d d            n# 1 swxY w Y   |                    |
          }|                    ||           ~t          j                            ||          }|j        t          j        t          j                              k    sJ |                    t          j                              }|                    |          sJ ~t          j        t2          d          5  t          j                            ||           d d d            d S # 1 swxY w Y   d S )Npyarrow.cffistruct ArrowSchema*	uintptr_tstruct ArrowDeviceArray*r   rR   r   r   rS   r   r   !Cannot import released ArrowArrayr   "Cannot import released ArrowSchema)r    importorskipffinewintcastr   r  r  rh   rM   r   rI  _export_to_c_devicer   r   r   r   rV   Array_import_from_c_devicer  r   r   r!   r"   )cffir[  c_schema
ptr_schemac_array	ptr_arraytypr5   r   r4   rK  carrcarr_newarr_news                 r   test_device_interface_arrayrk  Z  sX   ~..D
(Cww,--HSXXk84455Jgg011GCHH['2233I
(28::

C
(QC!R>
,
,
,C  R999FAs G;;wD 	Y''' !#### <<<<<=1$$$$ 	x--i==H=BHRXZZ000000r<>>??G>>#	z)L	M	M	M 7 7
&&y#6667 7 7 7 7 7 7 7 7 7 7 7 7 7 7 ;;wDY
333x--iDDH=BHRXZZ000000r<>>??G>>#	z)M	N	N	N > >
&&y*===> > > > > > > > > > > > > > > > > >s$   1!HH"%H">!L,,L03L0c                     t          j        d          } | j        }|                    d          }t	          |                    d|                    }|                    d          }t	          |                    d|                    }t          d          }|j        }t          	                    |t                    }t                              ||          }	|	                    |           |j        dk    sJ |j        t          j        k    sJ |j        j        dk    sJ ~	t$          j                            ||          }
|
j        |k    sJ |
                    t%          j                              }|                    |          sJ ~
t          j        t2          d          5  t$          j                            ||           d d d            n# 1 swxY w Y   t                              ||          }	|	                    ||           ~	t$          j                            ||          }
|
j        |k    sJ |
                    t%          j                              }|                    |          sJ ~
t          j        t2          d	          5  t$          j                            ||           d d d            n# 1 swxY w Y   t%          j                                        |           t          j        t2          d
          5  t$          j                            ||           d d d            d S # 1 swxY w Y   d S )NrT  rU  rV  rW  rS   rR   rX  r   rY  z%ArrowSchema describes non-struct type)r    rZ  r[  r\  r]  r^  r   r   r   r   r   r   r_  r   r   r   rh   rV   r   r   ra  rI  r   r   r!   r"   r  _export_to_c)rb  r[  rc  rd  re  rf  r   r   rj   r   
cbatch_new	batch_news               r   !test_device_interface_batch_arrayrp    s   ~..D
(Cww,--HSXXk84455Jgg011GCHH['2233IR  E\F&&un==D##D&11F y))) !#### <<<<<=2%%%% 	55iHHJ&&&&""2#@#B#BCCIE"""""	z)L	M	M	M @ @
,,Y???@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ##D&11F
y*55555iLLJ&&&&""2#@#B#BCCIE"""""	z)M	N	N	N D D
,,Y
CCCD D D D D D D D D D D D D D D HJJJ'''	zD
F 
F 
F D D
,,Y
CCCD D D D D D D D D D D D D D D D D Ds6   /!GG #G !KKK!MM
M
c                  
   t          d          } t                              | t                    }t                              || j                  }| d         }|d         }t          |          t          |          k    sJ t          d          } t                              | t                    }t                              || j                  }| d         }|d         }t          |          t          |          k    sJ d S )NrS   r   r   r   r   r   r   r   r   str)r   rj   r   r5   rh  s        r   test_print_arrayrt    s    R  E&&un==D##D%,77F
+C$<Dt99C    S!!E&&un==D##D%,77F
+C$<Dt99C      r   rS   r   c                    t                               | dz            }t          j        |t          j                  }t          |           |d d <   t          j        t          |           t          j                              }t          j        	                    t          j                    | d |g          }t          |          t          |          k    sJ d S )Nr   r)   )r   r-   r.   r/   int64ry   r   rh   r`  from_buffersrs  )r&   r4   np_arrr5   rh  s        r   test_print_array_hostry    s    


tAv
&
&C]3bh///FdF111I
(5;;


+
+C8  TD#;??Dt99C      r   c                    g }g }t          |          D ]}t          |           }t                              |t                    }t                              ||j                  }|                    |d                    |                    |d                    t          j	        |          t          j	        |          fS )Nr   )
ry   r   r   r   r   r   r   appendr   chunked_array)n_elements_per_chunkn_chunksarrscarrsr   r   rj   r   s           r   make_chunked_arrayr    s    DE8__ # # !566**5.AA''el;;E$K   VD\""""D!!2#3E#:#:::r   c                      t          dd          \  } }t          |          t          |           k    sJ t          dd          \  } }t          |          t          |           k    sJ d S )NrS   r,   r      )r  rs  )r5   rh  s     r   test_print_chunked_arrayr    sh    "2q))ICt99C    "3++ICt99C      r   c                     t          d          } t                              | t                    }t                              || j                  }t          |          t          |           k    sJ t          d          } t                              | t                    }t                              || j                  }t          |          t          |           k    sJ d S )NrS   r   rr  )r   rj   r   s      r   test_print_record_batchr    s    R  E&&un==D##D%,77Fv;;#e**$$$$S!!E&&un==D##D%,77Fv;;#e**$$$$$$r   c                  p    t                      \  } }} }t          |          t          |          k    sJ d S r   )r*  rs  )r   r  ctables      r   test_print_tabler    s9    )++Auav;;#e**$$$$$$r   )r?   ):__doc__ro   	sysconfigr    pyarrowr   numpyr.   ImportErrormark
pytestmarkrZ  r   get_platformplatformhas_ipc_supportskipifcuda_ipcr   r
   r   r   r%   parametrizer8   r>   rM   rb   rm   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r*  r,  r1  r;  rF  rR  rk  rp  rt  ry  r  r  r  r   r   r   <module>r     s  $ 
 


         # # # #"JJJ# v>**!9!##n,;4A  C C N N N
  5 5 5, ..  /.= = =- - - -. ..|> |> /.|>~ ..4 4 /.4>  6 ..  /.6 ..  /.4 ..' ' /.'6 ..<I <I /.<I~ fi%899...2 .2 /. :9.2b ..(2 (2 /.(2V) ) ),0E 0E 0Ef!' !' !'H' ' '4	' 	' 	'       0  4& & &      $/ / / 
..
 
 /. 

- - -22> 2> 2>j5D 5D 5Dp! ! !  "c++! ! ,+!
; 
; 
;! ! !	% 	% 	%% % % % %s    --