
    j{                        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e      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d4d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/        Z5d0 Z6d1 Z7d2 Z8d3 Z9y# e$ r ej                  j                  Z
Y ow xY w)5z
UNTESTED:
read_message
    Nzpyarrow.cudaexc_typez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    >/tmp/pip-target-jj7clzyk/lib/python/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:
< 5 	T\\11345 5 5s   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_hostr:   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(   r0   r1   r2   randomrandintsumr4   r5   make_random_bufferr
   r>   copy_from_hostr$   )r(   rG   r6   r7   arr_dbufs         r   rO   rO   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(   rV   length)rO   r
   buffer_from_datar(   r0   r1   copy_to_hostr2   r4   r5   r"   r#   BufferError
memoryviewtobytesslicerP   concatenater>   r   r/   )
r(   r7   r6   r?   r9   cudabuf2arr3soffsetssizerQ   s
             r   test_context_device_bufferrd   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   rF   r+   z$buffer is not backed by a CudaBufferr   s   123z8cannot create device buffer view from .* 'numpy.ndarray')r   rT   r.   )r
   rO   r,   r   r/   itemsizer0   r1   buffer_from_objectr(   rZ   r4   r5   r"   r#   r   ArrowTypeError	py_bufferarray)r(   ctxr7   cbufr,   hbufcbuf2r9   s           r   test_context_from_objectro      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 5r||F345
 
r((5
7 4 	rxx	234 45 5
4 4s   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)NrU   r   zCuda error r   )r
   r0   r,   r2   r   r/   rf   sysgetrefcountforeign_bufferaddressr(   rZ   r"   r#   r   ArrowIOError)rk   r,   r(   rm   rcfbufs         r   test_foreign_bufferrx     s3   
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-   rT   z-Do not call CudaBuffer's constructor directlyr   )rO   r]   
to_pybytesr
   rY   r(   r   rt   ranger^   parentr"   r#   	TypeErrorr   
CudaBuffer)r(   r7   r6   rl   issbufs          r   test_CudaBufferr   5  sg   !$'HC;;=CNN,,,,**3/D99{{?;;=DOO----ax||a4[ !Aw#a&   ! $K$'47# 8 Aw!!#s1v~~'7777	8 ::dAgtQw'D;;$	yL
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-   rT   z-Do not call HostBuffer's constructor directlyr   )rO   r]   rz   r   r/   r0   r1   r2   r(   r   r{   r^   r|   r"   r#   r}   
HostBuffer)r(   r7   r6   rm   r   r   r   s          r   test_HostBufferr   Q  sj   !$'HC;;=CNN,,,,%D-0BMM$bhh'*99;;;;;=DOO----4[ !Aw#a&   ! $K$'47# 8 Aw!!#s1v~~'7777	8 ::dAgtQw'D;;$	yL
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   rH   )r0   r,   rf   r   rK   
isinstanceBufferr   r~   r1   r(   r{   r4   r5   r
   r>   r   rP   rZ   )	r(   dtrJ   r6   r7   rQ   device_bufferbuf2r9   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   rF   r+   r-   rI      rH   r   rT   r   r   r   !position argument is out-of-ranger   8requested more to copy than available from device buffer)r6      )r6   rI   )r6   rJ      )r6   rJ   rI      rU      z,requested copy does not fit into host buffer)r6   rI   rJ   )rO   rZ   r   r0   r4   r5   r1   r2   r(   r"   r#   r$   r   rK   )r(   r7   rR   r6   rI   rJ   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?	@ 	@@ 
DFdAgQ{1}-ay @6 ]]:#BD 	@ x?	@ 	@@ 

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. I6 ]]:#9; 	I #H	I 	I	I=	@ 	@	@ 	@6	I 	I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(   rG   r   znot a multi-GPU systemc                       j                   g| i | j                         }t        j                  |t        j                        j                         S Nr+   )copy_from_devicerZ   r0   r1   r2   tolistargskwargsrbufr6   rR   s      r   putz"test_copy_from_device.<locals>.put  sI    c3D3F3  "}}T299;;r   r-   r   r   rT   rH   r   r   r   r   r   r   r   6requested more to copy than available in device buffer)
rO   r   r   contextr   r"   skipr>   r#   r$   )	r   r(   r7   lstr   rI   rJ   r6   rR   s	          @@r   test_copy_from_devicer     sZ    "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 26 ]]:!DF 	2&1	2 	22 
DF 26 ]]:#BD 	2 &1	2 	22 ax 
q46A+a-  26 ]]:#@B 	2 &1	2 	22	2 	2	2 	2	2 	2s$   '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)NrB   r   c                       j                   g| i | j                         }t        j                  |t        j                        j                         S r   )rP   rZ   r0   r1   r2   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   rT   rH   r   r   r   r   r   r   z6requested more to copy than available from host bufferr   )rO   r   r
   r>   r"   r#   r$   )r(   r7   r   r   rI   rJ   r6   rR   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 26 ]]:!DF 	2&1	2 	22 
DF 26 ]]:#@B 	2 &1	2 	22 ax 
q46A+a-  26 ]]:#@B 	2 &1	2 	22	2 	2	2 	2	2 	2s$   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 )NrU   r   r   )r   r/   r   r   r    	CUDA_HOSTr   r   Devicer   MemoryManagerr   default_cpu_memory_managerrO   r!   r
   )r6   _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(   rl   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 )NrB   r   r   rX   rW   r+   )rO   buffer_sizetellwriter^   seekminflushr(   r   synchronizerZ   r0   r1   r2   r4   r5   )
total_size	chunksizer   rl   r   r7   r6   rI   bytes_to_writer   r9   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   r0   aranger2   writeatr   r1   rZ   r4   r5   )r   r   
chunk_sizerl   r   r7   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)   rB   r   r   r   r   rU      i,  rW   i6  i  i  i  r+   )r
   r>   r   r   rO   r   r   r^   r   num_bytes_bufferedr   rZ   r(   r0   r1   r2   r4   r5   )r(   rl   r   r7   r6   r   r9   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   )rO   r   BufferReaderr   r   readlenr0   zerosr2   readintor4   r5   read_bufferr1   rZ   )r(   r7   rl   readerdatar9   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+   )rO   r   r   r   r   r   r   r   r0   r1   rZ   r2   r4   r5   )r7   rl   r   r   r   r9   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   rC   )r(   r,   schema)	r   r   fieldint16rj   r0   rL   rM   record_batch)rX   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 )NrU   r   )r   	serializer   serialize_record_batchr
   read_record_batchr   r   r   RecordBatchnum_columnsnum_rowsrZ   equalsipccolumn)r   rm   rl   cbatchr6   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                  f c}}      }	t        j                  ||	      }
t         j                  j                  |
g      }|S c c}}w )N)r   r   *   Ntyper   r   rT   ))abT)cdeF)NNNstrsbools)r   r   r   Nfoobar)indices
dictionary)rT   r   rT   N)rT   r   r   Nfr   )r   rj   r   list_int32structutf8bool_DictionaryArrayfrom_arraysr   	enumerater  r   Tablefrom_batches)r   r   a2a3a4a5arraysr   r7   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'As QC#(( F OOF62EHH!!5'*ELs   (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)rJ   )r  r   BufferOutputStreamr   
new_streamr   write_tableri   getvaluerz   r
   r>   r   rP   open_streamr   r   read_all)htablesinkoutrm   rR   dtables         r   make_table_cudar)    s    \F  "D			4	/  3 <<2245D $$SY/DSY/VV 1 1$ 78AACFv%%   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   rZ   r   r   r#  r$  )rm   r%  rR   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   rZ   r   r#  r$  )rm   r%  rR   r(  dtable2s        r   %test_create_table_with_device_buffersr0    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   rZ   r(   r   r0   r1   r,   r4   r5   )handle_bufferexpected_arrother_context
ipc_handleipc_bufr6   r7   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                 "   dd l }|j                  d      }t        | d      \  }}|j                         }|j	                         }|j                  t        ||f      }|j                          |j                          |j                  dk(  sJ y )Nr   spawnr   r   )rG   r   )
multiprocessingget_contextrO   export_for_ipcr   Processr:  startjoinexitcode)r(   r=  rk   r7   rl   r8  r5  ps           r   test_IPCrE  4  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 )NrU   r   r   )r   r   rT   r   col)rO   r   r   r   rj   copy_tobuffersr   r   r    r!   r   r   r   )r   r6   mm_cudadestr7   arr_cudaarr_roundtripr   
batch_cudabuf_cudabatch_roundtrips              r   test_copy_torQ  C  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                  X   t        j                  dt              } | 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.                               }|j1                  |      sJ ~t        j2                  t4        d      5  t        j(                  j+                  ||       d d d        |j                  |
      }|j                  ||       ~t        j(                  j+                  ||      }|j,                  t        j                  t        j                               k(  sJ |j                  t        j.                               }|j1                  |      sJ ~t        j2                  t4        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.cffir   struct ArrowSchema*	uintptr_tstruct ArrowDeviceArray*r   rT   r  r  rU   r   r   !Cannot import released ArrowArrayr   "Cannot import released ArrowSchema)r"   importorskipImportErrorffinewintcastr   r  r  rj   rO   r   rH  _export_to_c_devicer   r   r
   r   rX   Array_import_from_c_devicer  r   r   r#   r$   )cffir[  c_schema
ptr_schemac_array	ptr_arraytypr7   r   r6   rJ  carrcarr_newarr_news                 r   test_device_interface_arrayrk  \  s}   ~DD
((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 7
&&y#67 ;;wDY
3xx--iDH==BHHRXXZ0000r<<>?G>>#	z)M	N >
&&y*=> >7 7> >s   5!L*!L L L)c                  d   t        j                  dt              } | 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.                               }|j1                  |      sJ ~
t        j2                  t4        d	      5  t&        j(                  j+                  ||       d d d        t        j                  ||      }	|	j                  ||       ~	t&        j(                  j+                  ||      }
|
j                  |k(  sJ |
j-                  t'        j.                               }|j1                  |      sJ ~
t        j2                  t4        d
	      5  t&        j(                  j+                  ||       d d d        t'        j6                         j9                  |       t        j2                  t4        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)NrS  r   rT  rU  rV  rU   rT   rW  r   rX  z%ArrowSchema describes non-struct type)r"   rY  rZ  r[  r\  r]  r^  r   r   r   r   r
   r   r_  r   r   r   rj   rX   r   r   ra  rH  r   r   r#   r$   r  _export_to_c)rb  r[  rc  rd  re  rf  r   r   rl   r   
cbatch_new	batch_news               r   !test_device_interface_batch_arrayrp    s   ~DD
((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?@ ##D&1F
y*555iLJ&&&""2#@#@#BCIE"""	z)M	N D
,,Y
CD HHJJ'	zD
F D
,,Y
CD D)@ @D D
D Ds$   '!L<!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 )NrU   r   r   r   r   r   r
   r   r   str)r   rl   r   r7   rh  s        r   test_print_arrayrt    s    R E&&un=D##D%,,7F
+C$<Dt9C   S!E&&un=D##D%,,7F
+C$<Dt9C   r   rU   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/   r0   r1   int64r{   r   rj   r`  from_buffersrs  )r(   r6   np_arrr7   rh  s        r   test_print_array_hostry    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   )
r{   r   r   r   r
   r   r   appendr   chunked_array)n_elements_per_chunkn_chunksarrscarrsr   r   rl   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 )NrU   r.   r      )r  rs  )r7   rh  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 )NrU   r   rr  )r   rl   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)  rs  )r   r  ctables      r   test_print_tabler    s)    )+Auav;#e*$$$r   )rB   ):__doc__rq   	sysconfigr"   pyarrowr   numpyr0   rZ  mark
pytestmarkrY  r   get_platformplatformhas_ipc_supportskipifcuda_ipcr
   r   r   r   r'   parametrizer:   r@   rO   rd   ro   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r)  r+  r0  r:  rE  rQ  rk  rp  rt  ry  r  r  r  r   r   r   <module>r     s  $
    #
 v>K@!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8&  $/ 
.
 / 

-22>j5Dp!  "c+! ,!
;!	%%M  #""J#s   I) )JJ