
    <>i9                        S r SSKrSSKrSSKrSSKr SSKr\R                  " S5      r\R                  " 5       r\S:H  r\R                  R!                  \(       + S\-  S9rSrSrS rS rS	 r\R                  R/                  S
/ SQ5      S 5       rS rS3S jr\R                  R/                  S
/ SQ5      S 5       r\R                  R/                  S
/ SQ5      S 5       rS r\R                  R/                  S
/ SQ5      S 5       r\R                  R/                  S
/ SQ5      S 5       r\R                  R/                  S
/ SQ5      S 5       r \R                  R/                  S
/ SQ5      S 5       r!\R                  R/                  SSS/5      \R                  R/                  S
/ SQ5      S 5       5       r"\R                  R/                  S
/ SQ5      S 5       r#S r$S r%S r&S r'S r(S  r)S! r*S" r+S# r,S$ r-S% r.S& r/\\R                  R/                  S
/ SQ5      S' 5       5       r0S( r1S) r2S* r3S+ r4\R                  R/                  S
S,S-/5      S. 5       r5S/ r6S0 r7S1 r8S2 r9g! \ a    \R                  R                  r
 GNpf = f)4z
UNTESTED:
read_message
    Nzpyarrow.cudazlinux-x86_64z'CUDA IPC not supported in platform `%s`)reasonc                     [         R                  S5      U l        [         R                  [         R                  R                  5       S-
  5      U l        g )Nr      )cudaContextglobal_contextget_num_devicesglobal_context1modules    V/var/www/html/land-tabula/venv/lib/python3.13/site-packages/pyarrow/tests/test_cuda.pysetup_moduler   1   s5     LLOF!\\$,,*F*F*H1*LMF    c                     U ? g N)r   r   s    r   teardown_moduler   6   s    r   c                     [         R                  R                  5       S:  d   e[        R                  S:X  d   e[
        R                  [         R                  R                  5       S-
  :X  d   e[        R                  n U R                  (       a   eS[        U 5      ;   d   e[        R                  nXR                  :X  d   eUR                  (       a   eUR                  S:X  d   eUR                  [        R                  R                  :X  d   e[        R                   " ["        SS9   [         R                  [         R                  R                  5       5        S S S 5        g ! , (       d  f       g = f)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,,,((DLL,H,H,JQ,NNNN		&	&Byy=6$r(BBB


C))zz>==A??b55:::::	z:
< 	T\\1134
< 
< 
<s   -2E((
E6size)r   r     c                 V   [         R                  U 5      n[        R                  " U[        R                  S9nSX S-  SU -  S-  & UR                  5       n[        R                  " U[        R                  S9n[        R                  R                  XC5        UR                  U :X  d   eg )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
--288
,CCa$	XXZF==BHH-DJJD)88tr   c                      [         R                  n [         R                  S5      n[         R                  U S-   :X  d   eA[         R                  U :X  d   eg )N   )r   bytes_allocated
new_buffer)r;   cudabufs     r   test_context_allocate_delr>   [   sM    $44O'',G))_s-BBBB))_<<<r   c                    US:X  a  U S:  d   e[         R                  " U 5      nUR                  U :X  d   e[        R                  " U[        R
                  S9nUR                  U :X  d   e[        R                  R                  SSU [        R
                  S9USS& UR                  5       S:  d  U S:X  d   e[        R                  " U[        R
                  S9n[        R                  R                  X45        X24$ US:X  aG  [        U SS	9u  p2[        R                  U 5      nUR                  U :X  d   eUR                  USU S
9  X54$ [        S5      e)z5Return a host or device buffer with random data.
    hostr   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,    qyy  &xx4mmCrxx0xx4""qsRXX"NAwwy1}	))}}S1


*x	8	%d6:((.yyD   C!D9y
+
,,r   c                    [        U 5      u  p[        R                  U5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        [        R                  " [        5         [        U5        S S S 5        [        R                  U5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        [        R                  UR                  5       5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        UR                  SUR                  5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        U S:  a  UR!                  XS-  S  5        [        R
                  " UR                  5       [        R                  S9n[        R                  R                  [        R"                  " XS-  S  XS-  S  45      U5        UR!                  US U S-   5        [        R                  U5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        UR!                  XS-  S  5        [        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        UR                  SUR                  S-   5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        UR                  U S-  U S-   5      nUR                  X S-  -
  :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XS-  S  U5        U S-  nSU -  S-  n[        R                  X'US9nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [        R                  UR                  UUS95      nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [        R                  XUS9nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [        R                  XXx-    5      nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [        R                  UR                  5       UUS9nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [        R%                  U 5      nUR                  U :X  d   e[        R                  U5      nUR                  Xx5      nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [&        R)                  U 5      n[        R
                  " U[        R                  S9n	XS S & [        R                  U5      nUR                  U :X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  X5        [        R                  X'US9nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        [        R                  UR                  XxS95      nUR                  U:X  d   e[        R
                  " UR                  5       [        R                  S9n[        R                  R                  XXx-    U5        g ! , (       d  f       G	N= f)	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   sa    "$'HC--c2G<<4==--/rxx@DJJC& 
{	#7 
$ --c2G<<4==--/rxx@DJJC& --ckkm<G<<4==--/rxx@DJJC& }}Q-H==D   ==..0ADJJC&ax!GH.}}W113288D


!GHs78}/M N $	&HT1W. ..w7H==D   ==..0ADJJC&CaM*==--/rxx@DJJC& }}QR0H==D   ==..0ADJJC&}}T1Wd2g.H==D7N***==..0ADJJCaM40 AgGdFAIE--c38 . :G<<5   ==--/rxx@DJJC8$?--ciiw?D /8 /F GG<<5   ==--/rxx@DJJC8$? --c-NG<<5   ==--/rxx@DJJC8$?--c'-.HIG<<5   ==--/rxx@DJJC8$? --ckkm5<38 . :G <<5   ==--/rxx@DJJC8$? ''-G<<4 --c2G}}W,H==E!!!==..0ADJJC6= 

t
$C==BHH-DG--c2G<<4==--/rxx@DJJC& --c-NG<<5   ==--/rxx@DJJC6=--			/1G<<5   ==--/rxx@DJJC6=g 
$	#s   f77
gc                    [         n[        U SS9u  p#UR                  n[        R	                  XR                  R
                  -  5      nU[        R                  " XTS9S S & UR                  U5      nUR                  UR                  :X  d   e[        R                  " UR                  5       US9n[        R                  R                  X'5        UR                  U5      nUR                  UR                  :X  d   e[        R                  " UR                  5       US9n[        R                  R                  X'5        [        R                  " [        R                   SS9   UR                  [        R"                  " S5      5        S S S 5        [        R                  " [        R                   SS9   UR                  [        R$                  " / SQ5      5        S S S 5        g ! , (       d  f       Nb= f! , (       d  f       g = f)	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      s   
C"49ICIIE yy'9'9 9:D*-BMM$$Q'""4(E::"""==++-U;DJJC& ""5)E::"""==++-U;DJJC& 
r((D
Gr||F34
G
 
r((5
7 	rxx	23
7 
7
G 
G

7 
7s   "&G$3(G5$
G25
Hc                  *   [         n [        R                  " [        R                  5      nSn[        R                  X!R                  -  5      n[        R                  " U5      nU R                  UR                  UR                  U5      n[        R                  " U5      US-   :X  d   eA[        R                  " U5      U:X  d   eU R                  UR                  UR                  U5      nAUR                  5         [        R                  X!R                  -  5      nU R                  UR                  UR                  5      nA[        R                  " [        R                   SS9   UR                  5         S S S 5        g ! , (       d  f       g = f)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HHRXXED~~ 56D 
	BdllDIIt<D??4 BF***??4 B&&& dllDIIt<D ~~ 56DdllDII6D	r+
.
. 
. 
.s   *F
Fc                    [        U 5      u  pUR                  5       UR                  5       :X  d   e[        R	                  U5      nUR
                  U :X  d   eUR                  (       a   eUR                  5       UR                  5       :X  d   eU S:  a  UR                  S:  d   e[        U 5       H  nX4   X   :X  a  M   e   [        S 5      [        U S-  U S-  5      4 H+  nX5   R                  5       X   R                  5       :X  a  M+   e   UR                  U S-  U S-  5      nUR                  U:X  d   e[        R                  " [        SS9   [        R                  5         S S S 5        g ! , (       d  f       g = f)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  sQ   !$'HC;;=CNN,,,,**3/D99{{?;;=DOO----ax||a4[w#&     $K$'47# w!!#sv~~'7777	 ::dAgtQw'D;;$	yL
N
N 
N 
Ns   E33
Fc                 &   [        U 5      u  pUR                  5       UR                  5       :X  d   e[        R	                  U 5      nU[
        R                  " U[
        R                  S9S S & UR                  U :X  d   eUR                  (       d   eUR                  5       UR                  5       :X  d   e[        U 5       H  nX4   X   :X  a  M   e   [        S 5      [        U S-  U S-  5      4 H+  nX5   R                  5       X   R                  5       :X  a  M+   e   UR                  U S-  U S-  5      nUR                  U:X  d   eA[        R                  " [        SS9   [        R!                  5         S S S 5        g ! , (       d  f       g = f)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  sT   !$'HC;;=CNN,,,,%D-0BMM$bhh'*99;;;;;=DOO----4[w#&     $K$'47# w!!#sv~~'7777	 ::dAgtQw'D;;$	yL
N
N 
N 
Ns   $F
Fc                 h   [         R                  " S5      nXR                  -  n[        R                  " USS9n[        U[        R                  5      (       d   e[        U[        R                  5      (       a   e[         R                  " X1S9nUR                  U :X  d   e[        U 5      US S & [         R                  " X1S9n[         R                  R                  XE5        [        R                  U5      n[        U[        R                  5      (       d   e[        U[        R                  5      (       d   eUR                  U:X  d   eUR                   (       a   eUR#                  USUS9  UR%                  SUS9n[         R                  " XqS9n[         R                  R                  XH5        g )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  sZ    
(	BKKF


Vt
4Cc299%%%%#t////
--
&C88t4[CF=='DJJC& #--f5MmT__5555mRYY////'''####  q @ %%q%@D==(DJJC&r   c                 z   [        U SS9u  pUR                  5       nUR                  (       d   e[        R                  R                  U[        R                  " U[        R                  S95        UR                  U S-  S9nUR                  (       d   e[        R                  R                  XS-  S  [        R                  " U[        R                  S95        UR                  U S-  U S-  S9nUR                  (       d   e[        R                  R                  XS-  U S-  U S-  -    [        R                  " U[        R                  S95        UR                  U S-  SS9nUR                  (       d   eUR                  S:X  d   eU S	-   S
4SU S-   S4S4 H6  u  pE[        R                  " [        SS9   UR                  XES9  S S S 5        M8     SU S-   4U S	-  U S-   S	-  S-   4U S44 H6  u  pE[        R                  " [        SS9   UR                  XES9  S S S 5        M8     [        R                  " U S-  5      nUR                  US9  [        R                  R                  US U S-   [        R                  " U[        R                  S95        U S:  a  g UR                  USS9  [        R                  R                  USSU S-  -    [        R                  " U[        R                  S95        UR                  USS9  [        R                  R                  US S [        R                  " U[        R                  S9S S 5        UR                  USSS9  [        R                  R                  USS [        R                  " U[        R                  S9S S 5        SU S-   4SU S-
  4SU S	-  4U S-  U S-  S-   44 H7  u  pE[        R                  " [        SS9   UR                  X4US9  S S S 5        M9     g ! , (       d  f       GMy  = f! , (       d  f       GM8  = f! , (       d  f       Mq  = f)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9IC



C:::JJCs"((!CD


T1W

-C:::JJCaM2==BHH+MN


T1WT1W

=C:::JJCaaa8MM#RXX>@ 

T1WQ

7C:::88q== 
ahaW ]]:!DFx?F F 
DFdAgQ{1}-ay ]]:#BD x?D D 

T1W
%C#JJCqM2==BHH+MNby#+JJC2dAg:.MM#RXX>@ 	#b)JJCHbmmCrxx&H"&MN#b15JJC$KMM#RXX>sCE RL2tAv,aL47D!GAI. ]]:#9; #H; ;	=F FD D6; ;s$   :PP'P+
P	
P(	+
P:	dest_ctxsameanotherc                   ^^ [        USS9u  nmUR                  5       nU S:X  aA  [        n TR                  R                  U R                  :X  a  [
        R                  " S5        OTR                  n U R                  U5      mUU4S jnU" 5       U:X  d   eUS:  aW  U" US-  S9US US-   US U* S-   -   :X  d   eU" 5       U:X  d   eU" SUS	-  S
9US S US US	-   -   X1US	-  -
  S-
  * S  -   :X  d   eUS	-   S4SUS-   S4S4 H-  u  pV[
        R                  " [        SS9   U" XVS
9  S S S 5        M/     SUS-   44 H-  u  pV[
        R                  " [        SS9   U" XVS
9  S S S 5        M/     US:  a  g US	-  US-   S	-  S-   44 H-  u  pV[
        R                  " [        SS9   U" XVS
9  S S S 5        M/     g ! , (       d  f       M  = f! , (       d  f       M  = f! , (       d  f       Me  = f)Nr   r&   rE   r   znot a multi-GPU systemc                     > TR                   " T/U Q70 UD6  TR                  5       n[        R                  " U[        R                  S9R                  5       $ Nr)   )copy_from_devicerX   r.   r/   r0   tolistargskwargsrbufr4   rP   s      r   put"test_copy_from_device.<locals>.put  sG    c3D3F3  "}}T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";;$$(>(>>KK01;;t$D< 5C<<axD!G$HT1Wc)D5!8n(DDDDu||AdAg.Gc(47m#cqLN*;*<&==> 	> > !VRL(T!VQK ]]:!DF1F F 
DF ]]:#BD 1D D ax 
q46A+a-  ]]:#@B 1B BF FD DB Bs$   #F9G%G9
G	
G	
G,	c                 @  ^^ [        U SS9u  nmUR                  5       n[        R                  U 5      mUU4S jnU" 5       U:X  d   eU S:  aW  U" U S-  S9US U S-   US U * S-   -   :X  d   eU" 5       U:X  d   eU" SU S-  S9US S US U S-   -   X U S-  -
  S-
  * S  -   :X  d   eU S-   S	4S
U S-   S4S4 H-  u  pE[        R
                  " [        SS9   U" XES9  S S S 5        M/     SU S-   44 H-  u  pE[        R
                  " [        SS9   U" XES9  S S S 5        M/     U S:  a  g U S-  U S-   S-  S-   44 H-  u  pE[        R
                  " [        SS9   U" XES9  S S S 5        M/     g ! , (       d  f       M  = f! , (       d  f       M  = f! , (       d  f       Me  = f)Nr@   r   c                     > TR                   " T/U Q70 UD6  TR                  5       n[        R                  " U[        R                  S9R                  5       $ r   )rN   rX   r.   r/   r0   r   r   s      r   r    test_copy_from_host.<locals>.put  sG    C1$1&1  "}}T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< 5C<<axD!G$HT1Wc)D5!8n(DDDDu||AdAg.Gc(47m#cqLN*;*<&==> 	> > !VRL(T!VQK ]]:!DF1F F 
DF ]]:#@B 1B B ax 
q46A+a-  ]]:#@B 1B BF FB BB Bs$   E*E<F*
E9	<
F	
F	c                  ,   [         R                  S5      n U R                  [        R                  R
                  :X  d   e[        U R                  [        R                  5      (       d   e[        U R                  [        R                  5      (       d   eU R                  (       d   eU R                  R                  (       d   eU R                  [        R                  " 5       R                  :X  d   eU R                  R                  (       d   e[        SSS9u  pU R                  [        R                  R                  :X  d   e[        U R                  [        R                  5      (       d   eU R                  [        R                  R                  :X  d   e[        U R                  [        R                  5      (       d   eU R                  (       a   eU R                  R                  (       a   eU R                  R                  (       a   eg )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   '  s|   


r
"C??b55?????cjj")),,,,c(("*:*:;;;;:::::::668????? $$$$R9FA??b55:::::cjj")),,,,::66=====c(("*:*:;;;;zz>zz    !!(((((r   c                    ^ S mS
U4S jjn Su  pU " X5        U " XUS-  5        T" S5      u  p4UR                  [        R                  " S[        R                  S95        UR	                  S[        R                  " S[        R                  S95        UR                  [        R                  " S[        R                  S95        UR                  5         [        R                  " UR                  5       [        R                  5      n[        R                  R                  US S [        R                  " S[        R                  S95        [        R                  R                  USS	 [        R                  " S[        R                  S95        [        R                  R                  US	S  [        R                  " S[        R                  S95        g )Nc                 \    [         R                  U 5      n[        R                  U5      nX4$ r   )r   r<   r   BufferWriter)r&   rj   writers      r   allocate#test_BufferWriter.<locals>.allocate>  s*    ((.""4(|r   c                    > T" U 5      u  p4[        U SS9u  pVUS:  a  X$l        UR                  5       nUS:X  d   eUR                  UR	                  US95        UR                  5       U:X  d   eUR                  S5        UR                  5       nUS:X  d   eXp:  a7  [        XU-
  5      nUR                  UR	                  XxS95        Xx-  nXp:  a  M7  UR                  5         UR                  U :X  d   eUR                  R                  5         UR                  5       n	UR                  R                  5         U	R                  U :X  d   e[        R                  " U	[        R                  S9n
[        R                  R!                  XZ5        g )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_writes&test_BufferWriter.<locals>.test_writesC  sM   
+%:fE?!,;;=1}}SYYiY01{{}	)))A;;=1}}# ,ABNLL(JK&H #
 	yyJ&&&  "  "  "yyJ&&&}}T2


*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
'

b(89C=LD
LL3bhh/0
NN2ryy28845
LL2RXX./
LLN
--))+RXX
6CJJCHbii"((&CDJJC2J		"BHH(EFJJCHbii"((&CDr   c                     Sn [         R                  U 5      n[        R                  U5      n[	        U SS9u  p4UR
                  S:X  d   eSUl        UR
                  S:X  d   eUR                  UR                  SS95        UR                  5       S:X  d   eUR                  UR                  SS95        SUl        UR
                  S:X  d   eUR                  S:X  d   eUR                  UR                  SS	S
95        UR                  S:X  d   eUR                  UR                  SSS
95        UR                  S:X  d   eUR                  UR                  SSS
95        UR                  UR                  SSS
95        UR                  5         UR                  5       nUR                  U :X  d   e[        R                  " U[        R                  S9n[        R                   R#                  X65        g )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2$$)))
LL#c23$$)))
LL#c23
LL#c23
LLND99==RXX.DJJC&r   c                  (   Sn [        U SS9u  p[        R                  U5      nUR                  S5        UR	                  5       S:X  d   eUR                  S5      n[        U5      S:X  d   eUR	                  5       S:X  d   eUR                  S5        [        R                  " S[        R                  S9nUR                  U5      nUS	:X  d   eUR	                  5       S:X  d   e[        R                  R                  USS  US S	 5        UR                  S
5        UR	                  5       S
:X  d   eUR                  5       n[        R                  " UR                  5       [        R                  S9n[        R                  R                  X5        g )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t9??;;=D   
KK88Crxx(DA7N7;;=D   JJCItCRy1
KKN;;=AD==**,BHH=DJJC&r   c                     [        SSS9u  p[        R                  U5      nUR                  S5        UR	                  5       n[        U5      S:X  d   eUR                  5       S:X  d   eUR                  5       n[        R                  " UR                  5       [        R                  S9n[        R                  R                  X5        g )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N;;=Dt9>>;;=AD==**,BHH=DJJC&r   c           	      
   [         R                  " [         R                  " S[         R                  " 5       5      [         R                  " S[         R                  " 5       5      /5      n[         R                  " [
        R                  R                  SSU [
        R                  S95      n[         R                  " [
        R                  R                  SSU [
        R                  S95      n[         R                  " X#/US9nU$ )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    YYrxxz2rxxz24 5F	"))##Asrxx#H	IB	"))##Asrxx#H	IBOORHV4ELr   c                     [        S5      n U R                  5       n[        R                  U [        5      n[        R                  X R                  5      n[        U[        R                  5      (       d   eU R                  UR                  :X  d   eU R                  UR                  :X  d   eU R                  UR                  :X  d   eUR                  5       nUR                  U5      (       d   e[        R                  R                  X@R                  5      nUR                  UR                  5       5      (       d   eU R                  UR                  :X  d   eU R                  UR                  :X  d   eU R                  S5      R                  UR                  S5      5      (       d   eU R                  U5      (       d   eg )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    se   R E??D&&un=D ##D,,7Ffbnn----<<6==((( 2 2222>>V__,,, 


C;;sVV%%c<<8F;;v'')**** 2 2222>>V__,,,<<?!!&--"23333<<r   c            	      ~   [         R                  " / SQ[         R                  " 5       S9n [         R                  " SS/S// S /[         R                  " [         R                  " 5       5      S9n[         R                  " / SQ[         R
                  " S[         R                  " 5       4S[         R                  " 5       4/5      S9n[         R                  R                  / S	Q[         R                  " S
S/5      S9n[         R                  R                  / SQUS9n[         R                  R                  / SQUS9nXX#XE/n[         R                  " [        U5       VVs/ s H  u  pxSU 3UR                  4PM     snn5      n	[         R                  " XiS9n
[         R                  R                  U
/5      nU$ s  snnf )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   Nfr   )r   rh   r   list_int32structutf8bool_DictionaryArrayfrom_arraysr   	enumerater  r   Tablefrom_batches)r   r   a2a3a4a5arraysr}   r5   r   r   tables               r   
make_tabler    sw   	"	4B	Aq6A3D)0D	EB	Dyy62779"5#*BHHJ"7"9 :
;B
 
			'	'88UEN+ 
( 
-B 
			'	' 
( 
B 
			'	' 
( 
B bb%FYY''FA QC#((' F OOF2EHH!!5'*ELs   F9
c                  B   [        5       n [        R                  " 5       n[        R                  R	                  XR
                  5       nUR                  U 5        S S S 5        [        R                  " UR                  5       R                  5       5      n[        R                  [        U5      5      nUR                  U[        U5      S9  [        R                  R                  [        R!                  U5      5      R#                  5       nX0XE4$ ! , (       d  f       N= f)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+    s    \F  "D			4	/3 
0<<2245D $$SY/DSY/VV 1 1$ 78AACF%% 
0	/s   	D
Dc                     [        5       u  pp#UR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  UR                  :X  d   eU R	                  UR                  5       5      (       d   eUR	                  [        R                  R                  UR                  5       5      R                  5       5      (       d   eg r   )
r+  r   r   r   r   rX   r   r   r%  r&  )rk   r'  rP   r*  s       r   test_table_deserializer-    s     "1!2D$==FMM)))??foo---!3!3333;;t((*++++==++hj   r   c                     [        5       u  pp#[        R                  R                  UR                  UR
                  5      nUR                  UR                  :X  d   eUR                  UR                  :X  d   eUR                  UR                  :X  d   eU R                  UR                  5       5      (       d   eUR                  [        R                  R                  UR                  5       5      R                  5       5      (       d   eg 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_buffersr2    s     "1!2D$hh""6>>63F3FGG==GNN***??g.....!4!4444;;t((*++++==++hj   r   c                    [         R                  R                  S5      n[         R                  R                  R	                  U 5      nUR                  U5      nUR                  R                  5         UR                  5       nUR                  UR                  :X  d&   [        UR                  UR                  45      5       e[        R                  " XQR                  S9n[        R                  R                  Xa5        g )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    GGOOA&M%%11-@J++J7GOO!



 C88|(((M$,:K:K/L*MM(
--#5#5
6CJJC.r   c                    SS K nUR                  S5      n[        U SS9u  p4UR                  5       nUR	                  5       nUR                  [        Xc4S9nUR                  5         UR                  5         UR                  S:X  d   eg )Nr   spawnr   r   )rE   r   )
multiprocessingget_contextrM   export_for_ipcr   Processr<  startjoinexitcode)r&   r?  ri   r5   rj   r:  r7  ps           r   test_IPCrG  4  s     

%
%g
.C"X>IC$$&J((*M5'- 	 	/AGGIFFH::??r   c                     [        SSS9u  pUR                  nX"R                  4 GH  n[        R                  " / SQ5      nUR                  U5      nUR                  5       S   R                  (       a   eUR                  5       S   R                  [        R                  R                  :X  d   eUR                  5       S   R                  UR                  :X  d   eUR                  [        R                  " 5       5      nUR                  U5      (       d   e[        R                  " SU05      nUR                  U5      nUS   R                  5       S   n	U	R                  (       a   eU	R                  [        R                  R                  :X  d   eU	R                  UR                  :X  d   eUR                  [        R                  " 5       5      n
U
R                  U5      (       a  GM   e   g )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_torS  C  s   R9FA  G..)hhy!;;t$##%a(////!!$00B4K4K4P4PPPP!!$++w~~=== (()F)F)HI##C((((-]]4(
e$,,.q1??""##r'>'>'C'CCCC'..000$,,R-J-J-LM%%e,,,,% *r   c                  t   [         R                  " S5      n U R                  nUR                  S5      n[	        UR                  SU5      5      nUR                  S5      n[	        UR                  SU5      5      n[        R                  " [        R                  " 5       5      n[        R                  " S/SS//US9n[        S	S
S9u  pU	R                  n
UR                  U
5      nUR                  U5        UR                  S:X  d   eUR                  [         R"                  :X  d   eUR                  R$                  S:X  d   eA[        R&                  R)                  XV5      nUR*                  [        R                  " [        R                  " 5       5      :X  d   eUR                  [        R,                  " 5       5      nUR/                  U5      (       d   eA[         R0                  " [2        SS9   [        R&                  R)                  XV5        S S S 5        UR                  U
5      nUR                  XS5        A[        R&                  R)                  XS5      nUR*                  [        R                  " [        R                  " 5       5      :X  d   eUR                  [        R,                  " 5       5      nUR/                  U5      (       d   eA[         R0                  " [2        SS9   [        R&                  R)                  XS5        S S S 5        g ! , (       d  f       GN	= f! , (       d  f       g = f)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   rJ  _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   rL  carrcarr_newarr_news                 r   test_device_interface_arrayrl  \  si   ~.D
((Cww,-HSXXk845Jgg01GCHH['23I
((288:
C
((QC!R>
,C  R9FA  G;;wD 	Y' !### < <<<<==1$$$ 	xx--i=H==BHHRXXZ0000r<<>?G>>#	z)L	M
&&y6 
N ;;wDY3xx--iDH==BHHRXXZ0000r<<>?G>>#	z)M	N
&&y= 
O	N 
N	M 
O	Ns   5 L. L)
L&)
L7c                     [         R                  " S5      n U R                  nUR                  S5      n[	        UR                  SU5      5      nUR                  S5      n[	        UR                  SU5      5      n[        S5      nUR                  n[        R                  U[        5      n[        R                  X5      n	U	R                  U5        UR                  S:X  d   eUR                  [        R                  :X  d   eUR                   R"                  S:X  d   eA	[$        R&                  R)                  XW5      n
U
R                  U:X  d   eU
R+                  [$        R,                  " 5       5      nUR/                  U5      (       d   eA
[         R0                  " [2        SS9   [$        R&                  R)                  XW5        S S S 5        [        R                  X5      n	U	R                  XS5        A	[$        R&                  R)                  XS5      n
U
R                  U:X  d   eU
R+                  [$        R,                  " 5       5      nUR/                  U5      (       d   eA
[         R0                  " [2        S	S9   [$        R&                  R)                  XS5        S S S 5        [$        R4                  " 5       R7                  U5        [         R0                  " [2        S
S9   [$        R&                  R)                  XS5        S S S 5        g ! , (       d  f       GNK= f! , (       d  f       N= f! , (       d  f       g = f)NrU  rV  rW  rX  rS   rR   rY  r   rZ  z%ArrowSchema describes non-struct type)r    r[  r\  r]  r^  r_  r   r   r   r   r   r   r`  r   r   r   rh   rV   r   r   rb  rJ  r   r   r!   r"   r  _export_to_c)rc  r\  rd  re  rf  rg  r   r   rj   r   
cbatch_new	batch_news               r   !test_device_interface_batch_arrayrq    s   ~.D
((Cww,-HSXXk845Jgg01GCHH['23IR E\\F&&un=D##D1F y) !### < <<<<==2%%% 	55iHJ&&&""2#@#@#BCIE""""	z)L	M
,,Y? 
N ##D1F
y555iLJ&&&""2#@#@#BCIE""""	z)M	N
,,YC 
O HHJJ'	zD
F
,,YC
F 
F) 
N	M 
O	N

F 
Fs$   ( L> L# L/
L
L,/
L=c                     [        S5      n [        R                  U [        5      n[        R	                  XR
                  5      nU S   nUS   n[        U5      [        U5      :X  d   e[        S5      n [        R                  U [        5      n[        R	                  XR
                  5      nU S   nUS   n[        U5      [        U5      :X  d   eg )NrS   r   r   r   r   r   r   r   r   str)r   rj   r   r5   ri  s        r   test_print_arrayru    s    R E&&un=D##D,,7F
+C$<Dt9C   S!E&&un=D##D,,7F
+C$<Dt9C   r   rS   r   c                    [         R                  U S-  5      n[        R                  " U[        R                  S9n[        U 5      US S & [        R                  " [        U 5      [        R                  " 5       5      n[        R                  R                  [        R                  " 5       U S U/5      n[        U5      [        U5      :X  d   eg )Nr   r)   )r   r-   r.   r/   int64ry   r   rh   ra  from_buffersrt  )r&   r4   np_arrr5   ri  s        r   test_print_array_hostrz    s    


tAv
&C]]3bhh/FdF1I
((5;

+C88  TD#;?Dt9C   r   c                 ^   / n/ n[        U5       Ho  n[        U 5      n[        R                  U[        5      n[        R                  XeR                  5      nUR                  US   5        UR                  US   5        Mq     [        R                  " U5      [        R                  " U5      4$ )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**5.A''ll;E$K VD\"  D!2#3#3E#:::r   c                      [        SS5      u  p[        U5      [        U 5      :X  d   e[        SS5      u  p[        U5      [        U 5      :X  d   eg )NrS   r,   r      )r  rt  )r5   ri  s     r   test_print_chunked_arrayr    sJ    "2q)ICt9C   "3+ICt9C   r   c                  |   [        S5      n [        R                  U [        5      n[        R	                  XR
                  5      n[        U5      [        U 5      :X  d   e[        S5      n [        R                  U [        5      n[        R	                  XR
                  5      n[        U5      [        U 5      :X  d   eg )NrS   r   rs  )r   rj   r   s      r   test_print_record_batchr    s    R E&&un=D##D,,7Fv;#e*$$$S!E&&un=D##D,,7Fv;#e*$$$r   c                  R    [        5       u  pp[        U5      [        U5      :X  d   eg r   )r+  rt  )r   r  ctables      r   test_print_tabler    s%    )+Aav;#e*$$$r   )r@   ):__doc__ro   	sysconfigr    pyarrowr   numpyr.   ImportErrormark
pytestmarkr[  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-  r2  r<  rG  rS  rl  rq  ru  rz  r  r  r  r   r   r   <module>r     s  $
    #
 >*!!#n,;;4A  C N
5, . /=-. .|> /|>~ .4 /4>6 . /6 . /4 .' /'6 .<I /<I~ fi%89..2 / :.2b .(2 /(2V),0Ef!'H'4	' 08&  $/ 
.
 / 

-22>j5Dp!  "c+! ,!
;!	%%M  #""J#s   I) )J	J	