Ë
    ìmxi9�  ã                   ó  — 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    úN/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/tests/test_cuda.pyÚsetup_moduler   1   s5   € Ü ŸL™L¨›O€FÔÜ!Ÿ\™\¬$¯,©,×*FÑ*FÓ*HÈ1Ñ*LÓM€FÕó    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Ò,Ð,Ð,Ü×(Ñ(¬D¯L©L×,HÑ,HÓ,JÈQÑ,NÒNÐNÐNä	×	&Ñ	&€BØ�yŠyÐˆ=Ø6¼$¸r»(ÑBÐBÐBä
×
Ñ
€CØ�"—)‘)ÒÐÐà�zŠzÐˆ>Ø�=‰=˜AÒÐÐØ�?‰?œb×5Ñ5×:Ñ:Ò:Ð:Ð:ä	�‰”zð:ô
<ñ 5ô 	�‰”T—\‘\×1Ñ1Ó3Ô4÷5÷ 5ñ 5ú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Ü
�-‰-˜¤2§8¡8Ô
,€CØ€Cˆˆa‰��$‘˜‘	ÐØ�X‰X‹Z€FÜ�=‰=˜¤B§H¡HÔ-€DÜ‡J�J×Ñ˜D &Ô)Ø�8‰8�tÒÐÑ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Ñ4€OÜ×'Ñ'¨Ó,€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  € ð �ÒØ�qŠyÐˆyÜ× Ñ  Ó&ˆØ�x‰x˜4ÒÐÐÜ�m‰m˜C¤r§x¡xÔ0ˆØ�x‰x˜4ÒÐÐÜ—‘×"Ñ" q¨s¸ÄRÇXÁXÐ"ÓNˆ‰AˆØ�w‰w‹y˜1Š} ¨¢	Ð)Ð)Ü�}‰}˜S¬¯©Ô1ˆÜ
�
‰
×Ñ  TÔ*Ø�CˆxˆØ	�8Ò	Ü% d°6Ô:‰ˆˆSÜ×(Ñ(¨Ó.ˆØ�y‰y˜DÒ Ð Ð Ø×Ñ˜C¨!°DÐÔ9Ø�DˆyÐÜ
Ð+Ó
,Ð,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¶  € ô " $Ó'�H€CˆÜ×-Ñ-¨cÓ2€GØ�<‰<˜4ÒÐÐÜ�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C Ô&ô 
�‰”{Ó	#ñ Ü�7Ô÷ô ×-Ñ-¨cÓ2€GØ�<‰<˜4ÒÐÐÜ�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C Ô&ô ×-Ñ-¨c¯k©k«mÓ<€GØ�<‰<˜4ÒÐÐÜ�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C Ô&ð �}‰}˜Q §¡Ó-€HØ�=‰=˜DÒ Ð Ð Ü�=‰=˜×.Ñ.Ó0¼¿¹ÔA€DÜ‡J�J×Ñ˜C Ô&àˆa‚xØ×Ñ  D¨!¡G H Ô.Ü�}‰}˜W×1Ñ1Ó3¼2¿8¹8ÔDˆÜ
�
‰
×Ñ¤§¡°°D¸!±G°H°¸sÀ4ÈÁ7À8¸}Ð/MÓ NØ $ô	&à×Ñ  H T¨1¡W Ô.ô ×.Ñ.¨wÓ7€HØ�=‰=˜DÒ Ð Ð Ü�=‰=˜×.Ñ.Ó0¼¿¹ÔA€DÜ‡J�J×Ñ˜C Ô&à×Ñ˜C  a¡ ˜MÔ*Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C Ô&ð �}‰}˜Q §¡¨R¡Ó0€HØ�=‰=˜DÒ Ð Ð Ü�=‰=˜×.Ñ.Ó0¼¿¹ÔA€DÜ‡J�J×Ñ˜C Ô&à�}‰}˜T 1™W d¨2¡gÓ.€HØ�=‰=˜D 4¨¡7™NÒ*Ð*Ð*Ü�=‰=˜×.Ñ.Ó0¼¿¹ÔA€DÜ‡J�J×Ñ˜C  a¡ ˜M¨4Ô0ð �A‰g€GØˆd‰F�A‰I€EÜ×-Ñ-¨c¸'Ø38ð .ó :€Gà�<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C ¨°%©Ð8¸$Ô?ä×-Ñ-¨c¯i©i¸wØ?Dð /8ó /Fó G€Gà�<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C ¨°%©Ð8¸$Ô?ô ×-Ñ-¨c¸'ÈÐ-ÓN€GØ�<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C ¨°%©Ð8¸$Ô?ä×-Ñ-¨c°'¸'À%¹-Ð.HÓI€GØ�<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C ¨°%©Ð8¸$Ô?ô ×-Ñ-¨c¯k©k«mØ5<Ø38ð .ó :€Gð �<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C ¨°%©Ð8¸$Ô?ô ×'Ñ'¨Ó-€GØ�<‰<˜4ÒÐÐô ×-Ñ-¨cÓ2€GØ�}‰}˜W eÓ,€HØ�=‰=˜EÒ!Ð!Ð!Ü�=‰=˜×.Ñ.Ó0¼¿¹ÔA€DÜ‡J�J×Ñ˜C ¨°©Ð6¸Ô=ô ×
Ñ
˜tÓ
$€CÜ�=‰=˜¤B§H¡HÔ-€DØ€D‰€GÜ×-Ñ-¨cÓ2€GØ�<‰<˜4ÒÐÐÜ�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C Ô&ô ×-Ñ-¨c¸'ÈÐ-ÓN€GØ�<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜C ¨°©Ð6¸Ô=ä×-Ñ-Ø�	‰	˜¨ˆ	Ó/ó1€Gà�<‰<˜5Ò Ð Ð Ü�=‰=˜×-Ñ-Ó/´r·x±xÔ@€DÜ‡J�J×Ñ˜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°Ô9�I€CˆØ�I‰I€Eô ×Ñ  s§y¡y×'9Ñ'9Ñ 9Ó:€DØ*-„B‡M�M�$˜eÔ$¡QÐ'Ø×"Ñ" 4Ó(€EØ�:‰:˜Ÿ™Ò"Ð"Ð"Ü�=‰=˜×+Ñ+Ó-°UÔ;€DÜ‡J�J×Ñ˜C Ô&ð ×"Ñ" 5Ó)€EØ�:‰:˜Ÿ™Ò"Ð"Ð"Ü�=‰=˜×+Ñ+Ó-°UÔ;€DÜ‡J�J×Ñ˜C Ô&ô 
�‰”r×(Ñ(ØDô
Gñ 5à×ÑœrŸ|™|¨FÓ3Ô4÷5ô
 
�‰”r×(Ñ(ð5ô
7ñ 4ð 	×ÑœrŸx™xª	Ó2Ô3÷4ð 4÷5ð 5ú÷
4ð 4ús   Å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     s3  € Ü
€CÜ�H‰H”R—X‘XÓ€EØ€DÜ×Ñ  u§~¡~Ñ 5Ó6€Dô 
�‰˜Ó	€BØ×Ñ˜dŸl™l¨D¯I©I°tÓ<€DÜ�?‰?˜4Ó  B¨¡FÒ*Ð*Ð*ØÜ�?‰?˜4Ó  BÒ&Ð&Ð&ð ×Ñ˜dŸl™l¨D¯I©I°tÓ<€DØØ×ÑÔô ×Ñ  u§~¡~Ñ 5Ó6€DØ×Ñ˜dŸl™l¨D¯I©IÓ6€DØÜ	�‰”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  sg  € ä! $Ó'�H€CˆØ�;‰;‹=˜CŸN™NÓ,Ò,Ð,Ð,Ü×*Ñ*¨3Ó/€DØ�9‰9˜ÒÐÐØ�{Š{Ðˆ?Ø�;‰;‹=˜DŸO™OÓ-Ò-Ð-Ð-Øˆa‚xØ�|‰|˜aÒÐÐä�4‹[ò !ˆØ�A‰w˜#˜a™&Ó Ð Ð ð!ô �$‹KÜ�$˜‘'˜4 ™7Ó#ðò 8ˆð �A‰w×!Ñ!Ó# s¨1¡v§~¡~Ó'7Ó7Ð7Ð7ð	8ð �:‰:�d˜A‘g˜t Q™wÓ'€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+   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  sj  € ä! $Ó'�H€CˆØ�;‰;‹=˜CŸN™NÓ,Ò,Ð,Ð,Ü×Ñ Ó%€DØ-0„B‡M�M�$œbŸh™hÔ'©Ð*Ø�9‰9˜ÒÐÐØ�;Š;Ðˆ;Ø�;‰;‹=˜DŸO™OÓ-Ò-Ð-Ð-Ü�4‹[ò !ˆØ�A‰w˜#˜a™&Ó Ð Ð ð!ô �$‹KÜ�$˜‘'˜4 ™7Ó#ðò 8ˆð �A‰w×!Ñ!Ó# s¨1¡v§~¡~Ó'7Ó7Ð7Ð7ð	8ð �:‰:�d˜A‘g˜t Q™wÓ'€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   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Ø�B—K‘KÑ€FÜ
×
Ñ
˜V¨tÔ
4€CÜ�cœ2Ÿ9™9Ô%Ð%Ð%Ü˜#œtŸ™Ô/Ð/Ð/Ü
�-‰-˜ 2Ô
&€CØ�8‰8�tÒÐÐÜ�4‹[€C‰€FÜ�=‰=˜ BÔ'€DÜ‡J�J×Ñ˜C Ô&ô #×-Ñ-¨fÓ5€MÜ�m¤T§_¡_Ô5Ð5Ð5Ü�m¤R§Y¡YÔ/Ð/Ð/Ø×Ñ Ò'Ð'Ð'Ø×#Ò#Ð#Ð#Ø× Ñ  ¨q¸Ð Ô@ð ×%Ñ%¨q¸Ð%Ó@€DÜ�=‰=˜ RÔ(€DÜ‡J�J×Ñ˜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°Ô9�I€Cˆà
×
Ñ
Ó
€CØ�:Š:Ðˆ:Ü‡J�J×Ñ˜C¤§¡¨s¼"¿(¹(Ô!CÔDà
×
Ñ
 T¨1¡WÐ
Ó
-€CØ�:Š:Ðˆ:Ü‡J�J×Ñ˜C  a¡ ˜M¬2¯=©=¸ÄBÇHÁHÔ+MÔNà
×
Ñ
 T¨1¡W°T¸1±WÐ
Ó
=€CØ�:Š:Ðˆ:Ü‡J�J×Ñ˜C  a¡¨¨a©°°a±©Ð8ÜŸM™M¨#´R·X±XÔ>ô@ð ×
Ñ
 T¨1¡W°QÐ
Ó
7€CØ�:Š:Ðˆ:Ø�8‰8�qŠ=Ðˆ=ð 
ˆa‰�ˆ�h  a¡¨ ¨Wðò @Ñˆ�6ô �]‰]œ:Ø!DôFñ 	@à×Ñ x¸ÐÔ?÷	@ð 	@ð@ð 
ˆD�‰Fˆ�d˜A‘g  Q¡¨™{¨1™}Ð-°°a¨yðò @Ñˆ�6ô �]‰]œ:ð#BôDñ 	@ð ×Ñ x¸ÐÔ?÷	@ð 	@ð@ô ×
Ñ
˜T 1™WÓ
%€CØ×Ñ˜#ÐÔÜ‡J�J×Ñ˜C   q¡˜M¬2¯=©=¸ÄBÇHÁHÔ+MÔNàˆb‚yØà×Ñ˜#¨ÐÔ+Ü‡J�J×Ñ˜C  2 d¨A¡g¡:Ð.ÜŸM™M¨#´R·X±XÔ>ô@ð 	×Ñ˜# bÐÔ)Ü‡J�J×Ñ˜C  ˜H¤b§m¡m°C¼r¿x¹xÔ&HÈÈ"Ð&MÔNà×Ñ˜# b°1ÐÔ5Ü‡J�J×Ñ˜C  $˜KÜŸM™M¨#´R·X±XÔ>¸sÀÐCôEð ��R‘ˆL˜2˜t A™v˜,Ø��a‘ˆL˜4 ™7 D¨!¡G¨A¡IÐ.ðò 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&   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Ð3 DÒ3¨FÒ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®   È  sZ  ù€ ô " t°HÔ=�H€CˆØ
�*‰*‹,€CØ�9ÒÜ"ˆØ�;‰;×$Ñ$¨×(>Ñ(>Ò>Ü�K‰KÐ0Õ1à—;‘;ˆØ×Ñ˜tÓ$€Dõ<ñ ‹5�CŠ<Ðˆ<Øˆa‚xÙ˜D !™GÔ$¨¨H¨T°1©W¨°c¸)¸D¸5À!¹8°nÑ(DÒDÐDÐDÙ‹u˜Š|Ðˆ|Ù˜A d¨A¡gÔ.Ø��ˆG�c˜(˜4 ™7�mÑ# c¨D°°q±©L¸©NÐ*;Ð*<Ð&=Ñ=ò>ð 	>ð >ð �!‰V�RˆL˜( T¨!¡V¨Q K°ðò 2Ñˆ�6ô �]‰]œ:Ø!DôFñ 	2á˜¨&Õ1÷	2ð 	2ð2ð 
ˆD�‰Fˆðò 2Ñˆ�6ô �]‰]œ:ð#BôDñ 	2ñ ˜¨&Õ1÷	2ð 	2ð2ð ˆa‚xØð 
ˆq‰�4˜‘6˜A‘+˜a‘-Ð ðò 2Ñˆ�6ô �]‰]œ:ð#@ôBñ 	2ñ ˜¨&Õ1÷	2ð 	2ñ2÷	2ð 	2ú÷	2ð 	2ú÷	2ð 	2ú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  ù€ ä! t°FÔ;�H€CˆØ
�*‰*‹,€CÜ×$Ñ$ TÓ*€Dõ<ñ ‹5�CŠ<Ðˆ<Øˆa‚xÙ˜D !™GÔ$¨¨H¨T°1©W¨°c¸)¸D¸5À!¹8°nÑ(DÒDÐDÐDÙ‹u˜Š|Ðˆ|Ù˜A d¨A¡gÔ.Ø��ˆG�c˜(˜4 ™7�mÑ# c¨D°°q±©L¸©NÐ*;Ð*<Ð&=Ñ=ò>ð 	>ð >ð �!‰V�RˆL˜( T¨!¡V¨Q K°ðò 2Ñˆ�6ô �]‰]œ:Ø!DôFñ 	2á˜¨&Õ1÷	2ð 	2ð2ð 
ˆD�‰Fˆðò 2Ñˆ�6ô �]‰]œ:ð#@ôBñ 	2ñ ˜¨&Õ1÷	2ð 	2ð2ð ˆa‚xØð 
ˆq‰�4˜‘6˜A‘+˜a‘-Ð ðò 2Ñˆ�6ô �]‰]œ:ð#@ôBñ 	2ñ ˜¨&Õ1÷	2ð 	2ñ2÷	2ð 	2ú÷	2ð 	2ú÷	2ð 	2ú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×?Ñ?Ò?Ð?Ð?Ü�c—j‘j¤"§)¡)Ô,Ð,Ð,Ü�c×(Ñ(¬"×*:Ñ*:Ô;Ð;Ð;Ø�:Š:Ðˆ:Ø�:‰:×ÒÐÐØ�:‰:œ×6Ñ6Ó8×?Ñ?Ò?Ð?Ð?ð ×Ñ×$Ò$Ð$Ð$ä R°Ô9�F€A€sØ�?‰?œb×5Ñ5×:Ñ:Ò:Ð:Ð:Ü�c—j‘j¤"§)¡)Ô,Ð,Ð,Ø�:‰:œ×6Ñ6×=Ñ=Ò=Ð=Ð=Ü�c×(Ñ(¬"×*:Ñ*:Ô;Ð;Ð;Ø�zŠzÐˆ>Ø�z‰z× Ò Ð Ð Ø×!Ñ!×(Ò(Ð(Ð(Ð(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Š}Ðˆ}Ø�‰�S—Y‘Y i�YÓ0Ô1Ø�{‰{‹} 	Ò)Ð)Ð)Ø�‰�AŒØ—;‘;“=ˆØ˜1Š}Ðˆ}à˜Ò#Ü  ¨J¸Ñ,AÓBˆNØ�L‰L˜Ÿ™¨(¸>˜ÓJÔKØ˜Ñ&ˆHð ˜Ó#ð
 	�‰ŒØ�y‰y˜JÒ&Ð&Ð&Ø�‰× Ñ Ô"Ø× Ñ Ó"ˆØ�‰× Ñ Ô"Ø�y‰y˜JÒ&Ð&Ð&Ü�}‰}˜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“=�L€Dˆ&Ø
‡L�L”—‘˜3¤b§h¡hÔ/Ô0Ø
‡N�N�2”r—y‘y ¬2¯8©8Ô4Ô5Ø
‡L�L”—‘˜2¤R§X¡XÔ.Ô/Ø
‡L�L„Nä
�-‰-˜×)Ñ)Ó+¬R¯X©XÓ
6€CÜ‡J�J×Ñ˜C  ˜H¤b§i¡i°¼"¿(¹(Ô&CÔDÜ‡J�J×Ñ˜C  2˜J¬¯	©	°"¼B¿H¹HÔ(EÔFÜ‡J�J×Ñ˜C  ˜H¤b§i¡i°¼"¿(¹(Ô&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Ü! t°FÔ;�H€Cˆà×Ñ Ò"Ð"Ð"Ø€FÔØ×Ñ Ò$Ð$Ð$à
‡L�L�—‘ !�Ó$Ô%Ø�;‰;‹=˜AÒÐÐà
‡L�L�—‘ "�Ó%Ô&Ø€FÔØ×Ñ Ò$Ð$Ð$Ø×$Ñ$¨Ò)Ð)Ð)à
‡L�L�—‘ "¨S�Ó1Ô2Ø×$Ñ$¨Ò)Ð)Ð)à
‡L�L�—‘ #¨c�Ó2Ô3Ø×$Ñ$¨Ò)Ð)Ð)à
‡L�L�—‘ #¨c�Ó2Ô3Ø
‡L�L�—‘ #¨c�Ó2Ô3à
‡L�L„Nà×ÑÓ€DØ�9‰9˜ÒÐÐÜ�=‰=˜¤R§X¡XÔ.€DÜ‡J�J×Ñ˜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Ô>�I€Cˆä×Ñ˜tÓ$€FØ
‡K�K�ÔØ�;‰;‹=˜CÒÐÐà�;‰;�sÓ€DÜˆt‹9˜Š?Ðˆ?Ø�;‰;‹=˜DÒ Ð Ð à
‡K�K�ÔÜ�8‰8�CœrŸx™xÔ(€DØ�‰˜Ó€AØ�Š7€Nˆ7Ø�;‰;‹=˜DÒ Ð Ð Ü‡J�J×Ñ˜C  ˜I t¨C¨R yÔ1à
‡K�K�„NØ�;‰;‹=˜AÒÐÐØ×ÑÓ€DÜ�=‰=˜×*Ñ*Ó,´B·H±HÔ=€DÜ‡J�J×Ñ˜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›   € Ü"¨°(Ô;�I€CˆÜ×Ñ˜tÓ$€FØ
‡K�K�„NØ�;‰;‹=€DÜˆt‹9˜Š>Ðˆ>Ø�;‰;‹=˜AÒÐÐØ×ÑÓ€DÜ�=‰=˜×*Ñ*Ó,´B·H±HÔ=€DÜ‡J�J×Ñ˜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©   € Ü�Y‰YœŸ™ ¤r§x¡x£zÓ2ÜŸ™ ¤r§x¡x£zÓ2ð4ó 5€Fä	�‰”"—)‘)×#Ñ# A s°¼r¿x¹xÐ#ÓHÓ	I€BÜ	�‰”"—)‘)×#Ñ# A s°¼r¿x¹xÐ#ÓHÓ	I€BÜ�O‰O˜R ˜H¨VÔ4€EØ€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Ü×&Ñ& u¬nÓ=€Dô ×#Ñ# D¨%¯,©,Ó7€FÜ�fœbŸn™nÔ-Ð-Ð-Ø�<‰<˜6Ÿ=™=Ò(Ð(Ð(Ø×Ñ × 2Ñ 2Ò2Ð2Ð2Ø�>‰>˜VŸ_™_Ò,Ð,Ð,ð ×
Ñ
Ó
€CØ�;‰;�sÔÐÐÜ�V‰V×%Ñ% c¨5¯<©<Ó8€FØ�;‰;�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   rR   ))ÚabT)ÚcdeF)NNNÚstrsÚbools)r   r   r   NÚfooÚbar)ÚindicesÚ
dictionary)rR   r   rR   N)rR   r   r   NÚfrè   )r   rh   rë   Úlist_Úint32ÚstructÚutf8Úbool_ÚDictionaryArrayÚfrom_arraysré   Ú	enumerater  rì   ÚTableÚfrom_batches)rí   rî   Úa2Úa3Úa4Úa5Úarraysr}   r5   ré   rï   Útables               r   Ú
make_tabler  Û  s|  € Ü	�‰Ò"¬¯©«Ô	4€BÜ	�‰�A�q�6˜A˜3  DÐ)´·±¼¿¹»Ó0DÔ	E€BÜ	�‰ÒDÜ—y‘y 6¬2¯7©7«9Ð"5Ø#*¬B¯H©H«JÐ"7ð"9ó :ô
;€Bô
 
×	Ñ	×	'Ñ	'ÚÜ—8‘8˜U E˜NÓ+ð 
(ó 
-€Bô 
×	Ñ	×	'Ñ	'ÚØð 
(ó 
€Bô 
×	Ñ	×	'Ñ	'ÚØð 
(ó 
€Bð �"�b˜"˜b "Ð%€FÜ�Y‰Yä Ó'÷áˆAˆsð ˆQˆCˆ�#—(‘(Òóó €Fô �O‰O˜F¨6Ô2€EÜ�H‰H×!Ñ! 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)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Ø�‰˜Ô÷ ä�<‰<˜Ÿ™›×2Ñ2Ó4Ó5€Dô ×$Ñ$¤S¨£YÓ/€DØ×Ñ˜¤S¨£YÐÔ/ä�V‰V×Ñ¤× 1Ñ 1°$Ó 7Ó8×AÑAÓC€FØ�˜˜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ø   rX   r   rù   r!  r"  )rk   r#  rP   r&  s       r   Útest_table_deserializer)    s°   € ô "1Ó!2Ñ€Dˆ&�$˜à�=‰=˜FŸM™MÒ)Ð)Ð)Ø�?‰?˜fŸo™oÒ-Ð-Ð-Ø×Ñ ×!3Ñ!3Ò3Ð3Ð3à�;‰;�t×(Ñ(Ó*Ô+Ð+Ð+à�=‰=œŸ™×+Ñ+Ø×ÑÓóç�hƒjôð ñ 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ˆ&�$˜ä�h‰h×"Ñ" 6§>¡>°6×3FÑ3FÓG€Gà�=‰=˜GŸN™NÒ*Ð*Ð*Ø�?‰?˜g×.Ñ.Ò.Ð.Ð.Ø×Ñ ×!4Ñ!4Ò4Ð4Ð4à�;‰;�t×(Ñ(Ó*Ô+Ð+Ð+à�=‰=œŸ™×+Ñ+Ø×ÑÓóç�hƒjôð ñ 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·   € Ü—G‘G—O‘O AÓ&€MÜ—‘×%Ñ%×1Ñ1°-Ó@€JØ×+Ñ+¨JÓ7€GØ‡O�O×ÑÔ!Ø
×
Ñ
Ó
 €CØ�8‰8�|×(Ñ(Ò(ÐM¬$°·±¸,×:KÑ:KÐ/LÓ*MÓMÐ(Ü
�-‰-˜ <×#5Ñ#5Ô
6€CÜ‡J�J×Ñ˜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  4  sƒ   € ó Ø
×
%Ñ
% gÓ
.€CÜ"¨°XÔ>�I€CˆØ×$Ñ$Ó&€JØ×(Ñ(Ó*€MØ�‰Ô5Ø'¨Ð-ð 	ó 	/€Aà‡G�G„IØ‡F�F„HØ�:‰:˜Š?Ð‰?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  C  s—  € Ü R°Ô9�F€A€sØ× Ñ €Gà˜'Ÿ.™.Ð)ó -ˆÜ�h‰h’yÓ!ˆØ—;‘;˜tÓ$ˆØ×#Ñ#Ó% aÑ(×/Ò/Ð/Ð/Ø×ÑÓ! !Ñ$×0Ñ0´B×4KÑ4K×4PÑ4PÒ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  \  s{  € Ü×Ñ˜~Ó.€DØ
�(‰(€Cà�w‰wÐ,Ó-€HÜ�S—X‘X˜k¨8Ó4Ó5€JØ�g‰gÐ0Ó1€GÜ�C—H‘H˜[¨'Ó2Ó3€Iä
�(‰(”2—8‘8“:Ó
€CÜ
�(‰(�Q�C˜!˜R˜�>¨Ô
,€Cô   R°Ô9�F€A€sØ× Ñ €GØ�;‰;�wÓ€Dð 	×Ñ˜YÔ'ð ×Ñ !Ò#Ð#Ð#Ø×Ñ¤× <Ñ <Ò<Ð<Ð<Ø�=‰=×Ñ 1Ò$Ð$Ð$ð 	Ü�x‰x×-Ñ-¨i¸Ó=€HØ�=‰=œBŸH™H¤R§X¡X£ZÓ0Ò0Ð0Ð0Ø×Ñœr×<Ñ<Ó>Ó?€GØ�>‰>˜#ÔÐÐàä	�‰”zÐ)LÔ	Mñ 7Ü
�‰×&Ñ& y°#Ô6÷7ð �;‰;�wÓ€DØ×Ñ˜Y¨
Ô3àÜ�x‰x×-Ñ-¨i¸ÓD€HØ�=‰=œBŸH™H¤R§X¡X£ZÓ0Ò0Ð0Ð0Ø×Ñœr×<Ñ<Ó>Ó?€GØ�>‰>˜#ÔÐÐàä	�‰”zÐ)MÔ	Nñ >Ü
�‰×&Ñ& y°*Ô=÷>ð >÷7ð 7ú÷>ð >ús   Ç/!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à�w‰wÐ,Ó-€HÜ�S—X‘X˜k¨8Ó4Ó5€JØ�g‰gÐ0Ó1€GÜ�C—H‘H˜[¨'Ó2Ó3€Iä˜RÓ €EØ�\‰\€FÜ×&Ñ& u¬nÓ=€DÜ×#Ñ# D¨&Ó1€Fð ×Ñ˜yÔ)ð ×Ñ !Ò#Ð#Ð#Ø×Ñ¤× <Ñ <Ò<Ð<Ð<Ø�=‰=×Ñ 2Ò%Ð%Ð%ð 	Ü—‘×5Ñ5°iÀÓH€JØ×Ñ Ò&Ð&Ð&Ø×"Ñ"¤2×#@Ñ#@Ó#BÓC€IØ×Ñ˜EÔ"Ð"Ð"àä	�‰”zÐ)LÔ	Mñ @Ü
�‰×,Ñ,¨Y¸Ô?÷@ô ×#Ñ# D¨&Ó1€FØ
×Ñ˜y¨*Ô5àÜ—‘×5Ñ5°iÀÓL€JØ×Ñ Ò&Ð&Ð&Ø×"Ñ"¤2×#@Ñ#@Ó#BÓC€IØ×Ñ˜EÔ"Ð"Ð"àä	�‰”zÐ)MÔ	Nñ DÜ
�‰×,Ñ,¨Y¸
ÔC÷Dô ‡H�HƒJ×Ñ˜JÔ'Ü	�‰”zØDô
Fñ Dä
�‰×,Ñ,¨Y¸
ÔC÷Dð D÷)@ñ @ú÷Dð Dú÷
Dð Dú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Ü×&Ñ& u¬nÓ=€DÜ×#Ñ# D¨%¯,©,Ó7€FØ
�‰+€CØ�$‰<€DÜˆt‹9œ˜C›Ò Ð Ð ä˜SÓ!€EÜ×&Ñ& u¬nÓ=€DÜ×#Ñ# D¨%¯,©,Ó7€FØ
�‰+€CØ�$‰<€DÜˆt‹9œ˜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‰   € ä
×
Ñ
˜t A™vÓ
&€CÜ�]‰]˜3¤b§h¡hÔ/€FÜ�d“€F‰1€Iä
�(‰(”5˜“;¤§¡£
Ó
+€CÜ�8‰8× Ñ ¤§¡£¨T°D¸#°;Ó?€DÜˆt‹9œ˜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ˆÜ×'Ñ'¨¨e¯l©lÓ;ˆØ�‰�E˜$‘KÔ Ø�‰�V˜D‘\Õ"ð#ô ×Ñ˜DÓ!¤2×#3Ñ#3°EÓ#:Ð:Ð: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   € Ü" 2 qÓ)�I€CˆÜˆt‹9œ˜C›Ò Ð Ð ä" 3¨Ó+�I€CˆÜˆt‹9œ˜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Ü×&Ñ& u¬nÓ=€DÜ×#Ñ# D¨%¯,©,Ó7€FÜˆv‹;œ#˜e›*Ò$Ð$Ð$ä˜SÓ!€EÜ×&Ñ& u¬nÓ=€DÜ×#Ñ# D¨%¯,©,Ó7€FÜˆv‹;œ#˜e›*Ò$Ð$Ñ$r   c                  óT   — t        «       \  } }} }t        |«      t        |«      k(  sJ ‚y r   )r'  rp  )r·   r  Úctables      r   Útest_print_tabler†    s)   € Ü)Ó+Ñ€A€uˆa�Üˆ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ð~ ‡�×Ñ˜ f¨iÐ%8Ó9Ø‡�×Ñ˜¢Ó.ñ.2ó /ó :ð.2ðb ‡�×Ñ˜¢Ó.ñ(2ó /ð(2òV)ò,0Eòf!'òH'ò4	'òò ò0ò8&ò ò ò$/ð 
Ø‡�×Ñ˜¢Ó.ñ
ó /ó 
ð
ò-ò22>òj5Dòp!ð  ‡�×Ñ˜ " c Ó+ñ!ó ,ð!ò
;ò!ò	%ó%øðM ò #Ø—‘×"Ñ"ƒJð#ús   ”I' É'JÊJ