
    gC                        d Z ddlZddlZddlZddlZ	 ddlZ ej                  d      Z ej                         Zedk(  Zej                  j!                  e dez        ZdZdZd Zd Zd	 Zej                  j/                  d
g d      d        Zd Zd3dZej                  j/                  d
g d      d        Zej                  j/                  d
g d      d        Zd Zej                  j/                  d
g d      d        Zej                  j/                  d
g d      d        Zej                  j/                  d
g d      d        Z ej                  j/                  d
g d      d        Z!ej                  j/                  dddg      ej                  j/                  d
g d      d               Z"ej                  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                  j/                  d
g d      d'               Z0d( Z1d) Z2d* Z3d+ Z4ej                  j/                  d
d,d-g      d.        Z5d/ Z6d0 Z7d1 Z8d2 Z9y# e$ r ej                  j                  Z
Y mw xY w)4z
UNTESTED:
read_message
    Nzpyarrow.cudazlinux-x86_64z'CUDA IPC not supported in platform `%s`)reasonc                     t         j                  d      | _        t         j                  t         j                  j                         dz
        | _        y )Nr      )cudaContextglobal_contextget_num_devicesglobal_context1modules    L/var/www/openai/venv/lib/python3.12/site-packages/pyarrow/tests/test_cuda.pysetup_moduler   1   s5     LLOF!\\$,,*F*F*H1*LMF    c                     | ` y N)r   r   s    r   teardown_moduler   6   s    r   c                     t         j                  j                         dkD  sJ t        j                  dk(  sJ t
        j                  t         j                  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         j                  t         j                  j                                d d d        y # 1 sw Y   y xY w)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E"size)r   r     c                 `   t         j                  |       }t        j                  |t        j                        }d|| dz  d| z  dz   |j                         }t        j                  |t        j                        }t        j                  j                  ||       |j                  | k(  sJ y )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Ca$	XXZF==BHH-DJJD&)88tr   c                      t         j                  } t         j                  d      }t         j                  | dz   k(  sJ ~t         j                  | k(  sJ y )N   )r   bytes_allocated
new_buffer)r;   cudabufs     r   test_context_allocate_delr>   [   sM    $44O'',G))_s-BBBB))_<<<r   c                    |dk(  r| dk\  sJ t        j                  |       }|j                  | k(  sJ t        j                  |t        j
                        }|j                  | k(  sJ t        j                  j                  dd| t        j
                        |dd |j                         dkD  s| dk(  sJ t        j                  |t        j
                        }t        j                  j                  ||       ||fS |dk(  rNt        | d	      \  }}t        j                  |       }|j                  | k(  sJ |j                  |d| 
       ||fS t        d      )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   s4    qyy  &xx4mmCrxx0xx4""qsRXX"NAwwy1}	))}}S1


T*Cx	8	%d6:S((.yyD   C!D9Dy
+
,,r   c                    t        |       \  }}t        j                  |      }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       t        j                  t              5  t        |       d d d        t        j                  |      }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       t        j                  |j                               }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       |j                  d|j                        }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       | dkD  r|j!                  || dz  d         t	        j
                  |j                         t        j                        }t        j                  j                  t	        j"                  || dz  d  || dz  d  f      |       |j!                  |d | dz          t        j                  |      }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       |j!                  || dz  d         t	        j
                  |j                         t        j                        }t        j                  j                  ||       |j                  d|j                  dz         }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       |j                  | dz  | dz         }|j                  | | dz  z
  k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  || dz  d  |       | dz  }d| z  dz  }t        j                  |||      }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t        j                  |j                  ||            }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t        j                  |||      }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t        j                  ||||z          }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t        j                  |j                         ||      }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t        j%                  |       }|j                  | k(  sJ t        j                  |      }|j                  ||      }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t&        j)                  |       }t	        j
                  |t        j                        }	||	d d  t        j                  |      }|j                  | k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||       t        j                  |||      }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       t        j                  |j                  ||            }|j                  |k(  sJ t	        j
                  |j                         t        j                        }t        j                  j                  ||||z    |       y # 1 sw Y   	WxY w)	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   s    "$'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D!GH.}}W113288D


D!GHs478}/M N $	&HT1W. ..w7H==D   ==..0ADJJC&CaM*==--/rxx@DJJC& }}QR0H==D   ==..0ADJJC&}}T1Wd2g.H==D47N***==..0ADJJCaM40 AgGdFAIE--c'38 . :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}}We,H==E!!!==..0ADJJC6= 

t
$C==BHH-D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   !hhc                    t         }t        | d      \  }}|j                  }t        j	                  | |j                  j
                  z        }|t        j                  ||      d d  |j                  |      }|j                  |j                  k(  sJ t        j                  |j                         |      }t        j                  j                  ||       |j                  |      }|j                  |j                  k(  sJ t        j                  |j                         |      }t        j                  j                  ||       t        j                  t        j                   d      5  |j                  t        j"                  d             d d d        t        j                  t        j                   d      5  |j                  t        j$                  g d             d d d        y # 1 sw Y   ^xY w# 1 sw Y   y xY w)	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 syy'9'9 9:D*-BMM$e$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   0%G2'G>2G;>Hc                     t         } t        j                  t        j                        }d}t        j                  ||j                  z        }t        j                  |      }| j                  |j                  |j                  |      }t        j                  |      |dz   k(  sJ ~t        j                  |      |k(  sJ | j                  |j                  |j                  |      }~|j                          t        j                  ||j                  z        }| j                  |j                  |j                        }~t        j                  t        j                   d      5  |j                          d d d        y # 1 sw Y   y xY w)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u~~ 56D 
	BdllDIIt<D??4 BF***??4 B&&& dllDIIt<D u~~ 56DdllDII6D	r+
.
. 
. 
.s   (FFc                    t        |       \  }}|j                         |j                         k(  sJ t        j	                  |      }|j
                  | k(  sJ |j                  rJ |j                         |j                         k(  sJ | dkD  r|j                  dkD  sJ t        |       D ]  }||   ||   k(  rJ  t        d       t        | dz  | dz        fD ]+  }||   j                         ||   j                         k(  r+J  |j                  | dz  | dz        }|j                  |k(  sJ t        j                  t        d      5  t        j                          d d d        y # 1 sw Y   y xY w)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99{{?;;=DOO----ax||a4[Aw#a&     $K$'47# Aw!!#s1v~~'7777	 ::dAgtQw'D;;$	yL
N
N 
N 
Ns   E))E2c                    t        |       \  }}|j                         |j                         k(  sJ t        j	                  |       }|t        j                  |t
        j                        d d  |j                  | k(  sJ |j                  sJ |j                         |j                         k(  sJ t        |       D ]  }||   ||   k(  rJ  t        d       t        | dz  | dz        fD ]+  }||   j                         ||   j                         k(  r+J  |j                  | dz  | dz        }|j                  |k(  sJ ~t        j                  t        d      5  t        j!                          d d d        y # 1 sw Y   y xY w)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-0BMM$bhh'*99;;;;;=DOO----4[Aw#a&     $K$'47# Aw!!#s1v~~'7777	 ::dAgtQw'D;;$	yL
N
N 
N 
Ns   E<<Fc                 X   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                  j                  ||       t        j                  |      }t        |t        j                        sJ t        |t        j                        sJ |j                  |k(  sJ |j                   rJ |j#                  |d|       |j%                  d|      }t        j                  ||      }t         j                  j                  ||       y )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BKKF


Vt
4Cc299%%%#t///
--2
&C88t4[CF==B'DJJC& #--f5MmT__555mRYY///'''####  q @ %%q%@D==R(DJJC&r   c                    t        | d      \  }}|j                         }|j                  sJ t        j                  j                  |t        j                  |t        j                               |j                  | dz        }|j                  sJ t        j                  j                  || dz  d  t        j                  |t        j                               |j                  | dz  | dz        }|j                  sJ t        j                  j                  || dz  | dz  | dz  z    t        j                  |t        j                               |j                  | dz  d      }|j                  sJ |j                  dk(  sJ | d	z   d
fd| dz   dfdfD ]<  \  }}t        j                  t        d      5  |j                  ||       d d d        > d| dz   f| d	z  | dz   d	z  dz   f| dffD ]<  \  }}t        j                  t        d      5  |j                  ||       d d d        > t        j                  | dz        }|j                  |       t        j                  j                  |d | dz   t        j                  |t        j                               | dk  ry |j                  |d       t        j                  j                  |dd| dz  z    t        j                  |t        j                               |j                  |d       t        j                  j                  |d d t        j                  |t        j                        d d        |j                  |dd       t        j                  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 ]=  \  }}t        j                  t        d      5  |j                  |||       d d d        ? y # 1 sw Y   xY w# 1 sw Y   HxY w# 1 sw Y   dxY w)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CaM2==BHH+MN


T1WT1W

=C:::JJCaaa8MM#RXX>@ 

T1WQ

7C:::88q== 
ahaW6 ]]:!DFx?F F 
DFdAgQ{1}-ay6 ]]:#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.6 ]]:#9; #H; ;	=F FD D6; ;s$   =P&P3Q &P0	3P=	 Q		dest_ctxsameanotherc                    t        |d      \  }|j                         }| dk(  r?t        } j                  j                  | j                  k(  r"t        j                  d       nj                  } | j                  |      fd} |       |k(  sJ |dkD  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 ]3  \  }}t        j                  t        d      5   |||
       d d d        5 d|dz   ffD ]3  \  }}t        j                  t        d      5   |||
       d d d        5 |dk  ry |d	z  |dz   d	z  dz   ffD ]3  \  }}t        j                  t        d      5   |||
       d d d        5 y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w)Nr   r&   rE   r   znot a multi-GPU systemc                       j                   g| i | j                         }t        j                  |t        j                        j                         S Nr)   )copy_from_devicerX   r.   r/   r0   tolistargskwargsrbufr4   rP   s      r   putz"test_copy_from_device.<locals>.put  sI    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     sH    "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#cDqLN*;*<&==> 	> > !VRL(T!VQK6 ]]:!DF&1F F 
DF6 ]]:#BD &1D D ax 
q46A+a- 6 ]]:#@B &1B BF FD DB Bs$   'G%G2G G	G	 G)	c                 @   t        | d      \  }|j                         }t        j                  |       fd} |       |k(  sJ | dkD  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 ]3  \  }}t	        j
                  t        d      5   |||       d d d        5 d| dz   ffD ]3  \  }}t	        j
                  t        d      5   |||       d d d        5 | dk  ry | dz  | dz   dz  dz   ffD ]3  \  }}t	        j
                  t        d      5   |||       d d d        5 y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   XxY w)Nr@   r   c                       j                   g| i | j                         }t        j                  |t        j                        j                         S r   )rN   rX   r.   r/   r0   r   r   s      r   r   z test_copy_from_host.<locals>.put  sI    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#cDqLN*;*<&==> 	> > !VRL(T!VQK6 ]]:!DF&1F F 
DF6 ]]:#@B &1B B ax 
q46A+a- 6 ]]:#@B &1B BF FB BB Bs$   E<F&F<F	F	F	c                     t         j                  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 y )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   '  sr   


r
"C??b55?????cjj")),,,c(("*:*:;;;:::::::668????? $$$$R9FAs??b55:::::cjj")),,,::66=====c(("*:*:;;;zz>zz    !!(((((r   c                     d d
fd	} d\  }} | ||        | |||dz          d      \  }}|j                  t        j                  dt        j                               |j	                  dt        j                  dt        j                               |j                  t        j                  dt        j                               |j                          t        j                  |j                         t        j                        }t        j                  j                  |d d t        j                  dt        j                               t        j                  j                  |dd	 t        j                  dt        j                               t        j                  j                  |d	d  t        j                  dt        j                               y )Nc                 ^    t         j                  |       }t        j                  |      }||fS r   )r   r<   r   BufferWriter)r&   rj   writers      r   allocatez#test_BufferWriter.<locals>.allocate>  s,    ((.""4(V|r   c                 6    |       \  }}t        | d      \  }}|dkD  r||_        |j                         }|dk(  sJ |j                  |j	                  |             |j                         |k(  sJ |j                  d       |j                         }|dk(  sJ || k  r<t        || |z
        }|j                  |j	                  ||             ||z  }|| k  r<|j                          |j                  | k(  sJ |j                  j                          |j                         }	|j                  j                          |	j                  | k(  sJ t        j                  |	t        j                        }
t        j                  j!                  ||
       y )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_   
+f%:fES?!,F;;=1}}SYYiY01{{}	)))A;;=1}}# J,ABNLL(>JK&H #
 	yyJ&&&  "  "  "yyJ&&&}}T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   =  s5   
+: +J

J'
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                     d} t         j                  |       }t        j                  |      }t	        | d      \  }}|j
                  dk(  sJ d|_        |j
                  dk(  sJ |j                  |j                  d             |j                         dk(  sJ |j                  |j                  d             d|_        |j
                  dk(  sJ |j                  dk(  sJ |j                  |j                  dd	
             |j                  dk(  sJ |j                  |j                  dd
             |j                  dk(  sJ |j                  |j                  dd
             |j                  |j                  dd
             |j                          |j                         }|j                  | k(  sJ t        j                  |t        j                        }t        j                   j#                  ||       y )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                  .   d} t        | d      \  }}t        j                  |      }|j                  d       |j	                         dk(  sJ |j                  d      }t        |      dk(  sJ |j	                         dk(  sJ |j                  d       t        j                  dt        j                        }|j                  |      }|d	k(  sJ |j	                         dk(  sJ t        j                  j                  |dd  |d d	        |j                  d
       |j	                         d
k(  sJ |j                         }t        j                  |j                         t        j                        }t        j                  j                  ||       y )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     sD   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                     t        dd      \  } }t        j                  |      }|j                  d       |j	                         }t        |      dk(  sJ |j                         dk(  sJ |j                         }t        j                  |j                         t        j                        }t        j                  j                  | |       y )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                    t        j                  t        j                  dt        j                               t        j                  dt        j                               g      }t        j                  t
        j                  j                  dd| t
        j                              }t        j                  t
        j                  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    YYrxxz2rxxz24 5F	"))##Asrxx#H	IB	"))##Asrxx#H	IBOORHV4ELr   c                  X   t        d      } | j                         }t        j                  | t              }t        j                  || j                        }t        |t        j                        sJ | j                  |j                  k(  sJ | j                  |j                  k(  sJ | j                  |j                  k(  sJ |j                         }|j                  |      sJ t        j                  j                  || j                        }|j                  |j                               sJ | j                  |j                  k(  sJ | j                  |j                  k(  sJ | j                  d      j                  |j                  d            sJ | j                  |      sJ y )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     sZ   R E??D&&un=D ##D%,,7Ffbnn---<<6==((( 2 2222>>V__,,, 


C;;sVV%%c5<<8F;;v'')*** 2 2222>>V__,,,<<?!!&--"2333<<r   c            	         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                  j                  g d	t        j                  d
dg            }t         j                  j                  g d|      }t         j                  j                  g d|      }| |||||g}t        j                  t        |      D cg c]"  \  }}dj                  |      |j                  f$ c}}      }	t        j                  ||	      }
t         j                  j!                  |
g      }|S c c}}w )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   Nzf{}r   )r   rh   r   list_int32structutf8bool_DictionaryArrayfrom_arraysr   	enumerateformatr  r   Tablefrom_batches)r   r   a2a3a4a5arraysr}   r5   r   r   tables               r   
make_tabler    s   	"	4B	Aq6A3D)0D	EB	Dyy62779"5#*BHHJ"7"9 :
;B
 
			'	'88UEN+ 
( 
-B 
			'	' 
( 
B 
			'	' 
( 
B "b"b"%FYY&/&79&7FAs a#((3&79 :FOOF62EHH!!5'*EL	9s   ('G
c                  @   t               } t        j                         }t        j                  j	                  || j
                        5 }|j                  |        d d d        t        j                  |j                         j                               }t        j                  t        |            }|j                  |t        |             t        j                  j                  t        j!                  |            j#                         }|| ||fS # 1 sw Y   xY w)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v%% 
0	/s   	DDc                     t               \  } }}}|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ | j	                  |j                               sJ |j	                  t        j                  j                  |j                               j                               sJ y 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                     t               \  } }}}t        j                  j                  |j                  |j
                        }|j                  |j                  k(  sJ |j                  |j                  k(  sJ |j                  |j                  k(  sJ | j                  |j                               sJ |j                  t        j                  j                  |j                               j                               sJ y 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_buffersr.    s     "1!2D&$hh""6>>63F3FGG==GNN***??g.....!4!4444;;t((*+++==++hj  r   c                 
   t         j                  j                  d      }t         j                  j                  j	                  |       }|j                  |      }|j                  j                          |j                         }|j                  |j                  k(  s&J t        |j                  |j                  f             t        j                  ||j                        }t        j                  j                  ||       y )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_IPCr8  '  s    GGOOA&M%%11-@J++J7GOO!



 C88|(((M$,:K:K/L*MM(
--<#5#5
6CJJC.r   c                 "   dd l }|j                  d      }t        | d      \  }}|j                         }|j	                         }|j                  t        ||f      }|j                          |j                          |j                  dk(  sJ y )Nr   spawnr   r   )rE   r   )
multiprocessingget_contextrM   export_for_ipcr   Processr8  startjoinexitcode)r&   r;  ri   r5   rj   r6  r3  ps           r   test_IPCrC  2  s     

%
%g
.C"X>IC$$&J((*M5'- 	 	/AGGIFFH::??r   c                     t        dd      \  } }|j                  }||j                  fD ]  }t        j                  g d      }|j                  |      }|j                         d   j                  rJ |j                         d   j                  t        j                  j                  k(  sJ |j                         d   j                  |j                  k(  sJ |j                  t        j                               }|j                  |      sJ t        j                  d|i      }|j                  |      }|d   j                         d   }	|	j                  rJ |	j                  t        j                  j                  k(  sJ |	j                  |j                  k(  sJ |j                  t        j                               }
|
j                  |      rJ  y )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_torO  A  s   R9FAs  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                  L   t        j                  d      } | j                  }|j                  d      }t	        |j                  d|            }|j                  d      }t	        |j                  d|            }t        j                  t        j                               }t        j                  dgddgg|      }t        d	d
      \  }}	|	j                  }
|j                  |
      }|j                  |       |j                  dk(  sJ |j                  t         j"                  k(  sJ |j                  j$                  dk(  sJ ~t        j&                  j)                  ||      }|j*                  t        j                  t        j                               k(  sJ |j                  t        j,                               }|j/                  |      sJ ~t        j0                  t2        d      5  t        j&                  j)                  ||       d d d        |j                  |
      }|j                  ||       ~t        j&                  j)                  ||      }|j*                  t        j                  t        j                               k(  sJ |j                  t        j,                               }|j/                  |      sJ ~t        j0                  t2        d      5  t        j&                  j)                  ||       d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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   rF  _export_to_c_devicer   r   r   r   rV   Array_import_from_c_devicer  r   r   r!   r"   )cffirX  c_schema
ptr_schemac_array	ptr_arraytypr5   r   r4   rH  carrcarr_newarr_news                 r   test_device_interface_arrayrh  Z  so   ~.D
((Cww,-HSXXk845Jgg01GCHH['23I
((288:
C
((QC!R>
,C  R9FAs  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   /!L$!LLL#c                  X   t        j                  d      } | j                  }|j                  d      }t	        |j                  d|            }|j                  d      }t	        |j                  d|            }t        d      }|j                  }t        j                  |t              }t        j                  ||      }	|	j                  |       |j                  dk(  sJ |j                  t        j                  k(  sJ |j                   j"                  dk(  sJ ~	t$        j&                  j)                  ||      }
|
j                  |k(  sJ |
j+                  t%        j,                               }|j/                  |      sJ ~
t        j0                  t2        d      5  t$        j&                  j)                  ||       d d d        t        j                  ||      }	|	j                  ||       ~	t$        j&                  j)                  ||      }
|
j                  |k(  sJ |
j+                  t%        j,                               }|j/                  |      sJ ~
t        j0                  t2        d	      5  t$        j&                  j)                  ||       d d d        t%        j4                         j7                  |       t        j0                  t2        d
      5  t$        j&                  j)                  ||       d d d        y # 1 sw Y   GxY w# 1 sw Y   ~xY w# 1 sw Y   y xY w)NrQ  rR  rS  rT  rS   rR   rU  r   rV  z%ArrowSchema describes non-struct type)r    rW  rX  rY  rZ  r[  r   r   r   r   r   r   r\  r   r   r   rh   rV   r   r   r^  rF  r   r   r!   r"   r  _export_to_c)r_  rX  r`  ra  rb  rc  r   r   rj   r   
cbatch_new	batch_news               r   !test_device_interface_batch_arrayrm    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6!L!L LL L)c                     t        d      } t        j                  | t              }t        j	                  || j
                        }| d   }|d   }t        |      t        |      k(  sJ t        d      } t        j                  | t              }t        j	                  || j
                        }| d   }|d   }t        |      t        |      k(  sJ y )NrS   r   r   r   r   r   r   r   r   str)r   rj   r   r5   re  s        r   test_print_arrayrq    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                    t         j                  | dz        }t        j                  |t        j                        }t        |       |d d  t        j                  t        |       t        j                               }t        j                  j                  t        j                         | d |g      }t        |      t        |      k(  sJ y )Nr   r)   )r   r-   r.   r/   int64ry   r   rh   r]  from_buffersrp  )r&   r4   np_arrr5   re  s        r   test_print_array_hostrv    s    


tAv
&C]]3bhh/FdF1I
((5;

+C88  TD#;?Dt9C   r   c                 X   g }g }t        |      D ]o  }t        |       }t        j                  |t              }t        j                  ||j                        }|j                  |d          |j                  |d          q 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**5.A''ell;E$K VD\"  D!2#3#3E#:::r   c                      t        dd      \  } }t        |      t        |       k(  sJ t        dd      \  } }t        |      t        |       k(  sJ y )NrS   r,   r      )r~  rp  )r5   re  s     r   test_print_chunked_arrayr    sN    "2q)ICt9C   "3+ICt9C   r   c                  |   t        d      } t        j                  | t              }t        j	                  || j
                        }t        |      t        |       k(  sJ t        d      } t        j                  | t              }t        j	                  || j
                        }t        |      t        |       k(  sJ y )NrS   r   ro  )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                  T    t               \  } }} }t        |      t        |      k(  sJ y r   )r'  rp  )r   r  ctables      r   test_print_tabler    s)    )+Auav;#e*$$$r   )r@   ):__doc__ro   	sysconfigr    pyarrowr   numpyr.   ImportErrormark
pytestmarkrW  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)  r.  r8  rC  rO  rh  rm  rq  rv  r~  r  r  r   r   r   <module>r     s  $
    #
 v>*!9!!#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4&  $/ 
.
 / 

-22>j5Dp!  "c+! ,!
;!	%%I  #""J#s   I' 'JJ