Ë
    ìmxiãf  ã                   ó´  — d dl Z d dlZd dlZd dlZ	 d dlmZ d dlZ	 d dl	Z
d dlmZ ej                  j                  edu d¬«      Z ej"                  ed¬«      Z ej"                  ed¬«      Z ej"                  ed¬«      Zd	„ Ze j.                  d
„ «       Z G d„ dej2                  «      Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!ed„ «       Z"ed„ «       Z#d„ Z$ed„ «       Z%ed„ «       Z&dCd„Z'ed„ «       Z(ed„ «       Z)ed„ «       Z*d„ Z+ed„ «       Z,ed„ «       Z-ed „ «       Z.d!„ Z/d"„ Z0d#„ Z1eej                  je                  d$e0e1g«      d%„ «       «       Z3ed&„ «       Z4ed'„ «       Z5ej                  je                  d( ejl                  «        ejn                  d) ejl                  «       «       ejp                  d) ejl                  «       i«      gg d*¢¬+«      d,„ «       Z9ej                  je                  d- ejt                  g d.¢«      d/„  ejl                  «        ejv                  «       f ejx                   ejt                  g d.¢«      gd0g¬1«      d2„  ejp                  d0 ejl                  «       i«       ejp                  d0 ejv                  «       i«      fgd3d4g¬+«      d5„ «       Z=ej                  je                  d- ejt                  g d.¢«      d6„  ejl                  «        ejv                  «       f ejx                   ejt                  g d.¢«      gd0g¬1«      d7„  ejp                  d0 ejl                  «       i«       ejp                  d0 ejv                  «       i«      fgd3d4g¬+«      d8„ «       Z>ej                  je                  d9ej~                  j€                  d:„ gd;d<g¬+«      d=„ «       ZAd>„ ZBd?„ ZCd@„ ZDdA„ ZEedB„ «       ZFy# e$ r dZY �Œ®w xY w# e$ r dxZ
ZY �Œ¯w xY w)Dé    N)Úffiz!test needs cffi package installed)Úreasonz"Cannot import released ArrowSchema©Úmatchz!Cannot import released ArrowArrayz#Cannot import released Arrow Streamc                 ón   — t         j                  j                  t        j                  | «      |«      dk(  S ©Né   )ÚctypesÚ	pythonapiÚPyCapsule_IsValidÚ	py_object)ÚcapsuleÚnames     úN/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/tests/test_cffi.pyr   r   3   s,   € Ü×Ñ×-Ñ-¬f×.>Ñ.>¸wÓ.GÈÓNÐRSÑSÐSó    c              #   óÆ   K  — t        j                  | «       	 d –— t        j                  | j                  «       y # t        j                  | j                  «       w xY w­w©N)ÚpaÚregister_extension_typeÚunregister_extension_typeÚextension_name)Úext_types    r   Úregistered_extension_typer   7   sD   è ø€ ä×Ñ˜xÔ(ð>Ûä
×$Ñ$ X×%<Ñ%<Õ=øŒ×$Ñ$ X×%<Ñ%<Õ=üs   ‚A!™= � A!½!AÁA!c                   óD   ‡ — e Zd Zˆ fd„Zed„ «       Zd„ Zed„ «       Zˆ xZ	S )ÚParamExtTypec                 óZ   •— || _         t        ‰| �	  t        j                  |«      d«       y )Nz$pyarrow.tests.test_cffi.ParamExtType)Ú_widthÚsuperÚ__init__r   Úbinary)ÚselfÚwidthÚ	__class__s     €r   r   zParamExtType.__init__B   s&   ø€ ØˆŒÜ‰ÑœŸ™ 5Ó)Ø?õ	Ar   c                 ó   — | j                   S r   )r   ©r!   s    r   r"   zParamExtType.widthG   s   € à�{‰{Ðr   c                 óH   — t        | j                  «      j                  «       S r   )Ústrr"   Úencoder%   s    r   Ú__arrow_ext_serialize__z$ParamExtType.__arrow_ext_serialize__K   s   € Ü�4—:‘:‹×%Ñ%Ó'Ð'r   c                 óD   — t        |j                  «       «      } | |«      S r   )ÚintÚdecode)ÚclsÚstorage_typeÚ
serializedr"   s       r   Ú__arrow_ext_deserialize__z&ParamExtType.__arrow_ext_deserialize__N   s   € ä�J×%Ñ%Ó'Ó(ˆÙ�5‹zÐr   )
Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr"   r)   Úclassmethodr0   Ú__classcell__)r#   s   @r   r   r   @   s6   ø„ ôAð
 ñó ðò(ð ñó ôr   r   c                  ó„   — t        j                  dt        j                  t        j                  «       «      fgddi¬«      S )NÚintsó   key1ó   value1©Úmetadata)r   ÚschemaÚlist_Úint32© r   r   Úmake_schemarA   T   s4   € Ü�9‰9�vœrŸx™x¬¯©«
Ó3Ð4Ð5Ø&¨	Ð2ô4ð 4r   c                  óL   — t        j                  dt        d«      fgddi¬«      S ©NÚexté   r9   r:   r;   )r   r=   r   r@   r   r   Úmake_extension_schemarF   Y   s)   € Ü�9‰9�uœl¨1›oÐ.Ð/Ø&¨	Ð2ô4ð 4r   c                  ó`   — t        j                  dt        d«      j                  fgddi¬«      S rC   )r   r=   r   r.   r@   r   r   Úmake_extension_storage_schemarH   ^   s/   € ä�9‰9�uœl¨1›o×:Ñ:Ð;Ð<Ø&¨	Ð2ô4ð 4r   c                  óJ   — t        j                  dgddgggt        «       «      S )Nr	   é   é*   )r   Úrecord_batchrA   r@   r   r   Ú
make_batchrM   d   s"   € Ü�?‰?˜a˜S 1 b '˜NÐ+¬[«]Ó;Ð;r   c                  óÔ   — t        «       } | d   j                  j                  t        j                  ddgt        j
                  d«      ¬«      «      }t        j                  |g| «      S )Nr   s   foos   barrE   ©Útype)rF   rP   Ú
wrap_arrayr   Úarrayr    rL   )r=   Úext_cols     r   Úmake_extension_batchrT   h   sT   € Ü"Ó$€FØ�Q‰i�n‰n×'Ñ'¬¯©°&¸&Ð1AÜ68·i±iÀ³lô)Dó E€Gä�?‰?˜G˜9 fÓ-Ð-r   c                  ó†   — t        «       } t        j                  dgddggg| «      t        j                  d g ddggg| «      gS )Nr	   rJ   rK   é   é   )rA   r   rL   ©r=   s    r   Úmake_batchesrY   o   sJ   € Ü‹]€Fä
�‰˜1˜#  2˜w˜Ð(¨&Ó1Ü
�‰˜$  Q¨ FÐ+Ð,¨fÓ5ðð r   c                 ó  — t        j                  «       5 }t         j                  j                  || «      5 }|D ]  }|j	                  |«       Œ 	 d d d «       |j                  «       cd d d «       S # 1 sw Y   Œ"xY w# 1 sw Y   y xY wr   )r   ÚBufferOutputStreamÚipcÚ
new_streamÚwriteÚgetvalue)r=   ÚbatchesÚsinkÚoutÚbatchs        r   Úmake_serializedrd   w   s{   € Ü	×	Ñ	Ó	 ð  DÜ�V‰V×Ñ˜t VÓ,ð 	!°Ø ò !�Ø—	‘	˜%Õ ñ!÷	!ð �}‰}‹÷	ñ ÷	!ð 	!ú÷ð ús"   •!A=¶A1ÁA=Á1A:	Á6A=Á=Bc                  ó`  — t        j                  d«      } t        t        j                  d| «      «      }t	        j
                  «        t        j                  «       }t        j                  t        j                  «       «      }|j                  |«       t        j                  «       |kD  sJ ‚~t        j                  «       |kD  sJ ‚t        j                  j                  |«      }|t        j                  t        j                  «       «      k(  sJ ‚t        j                  «       |k(  sJ ‚t        5  t        j                  j                  |«       d d d «       t        j                  «       j                  |«       t        j                  dd«      }|| _        t        j                   t"        d¬«      5  t        j                  j                  |«       d d d «       t        5  t        j                  j                  |«       d d d «       y # 1 sw Y   Œ»xY w# 1 sw Y   ŒDxY w# 1 sw Y   y xY w)Nústruct ArrowSchema*Ú	uintptr_tzchar[]s   zzzz$Invalid or unsupported format stringr   )r   Únewr+   ÚcastÚgcÚcollectr   Útotal_allocated_bytesr>   r?   Ú_export_to_cÚDataTypeÚ_import_from_cÚassert_schema_releasedÚformatÚpytestÚraisesÚ
ValueError)Úc_schemaÚ
ptr_schemaÚold_allocatedÚtypÚtyp_newÚ
bad_formats         r   Útest_export_import_typer{      s™  € ä�w‰wÐ,Ó-€HÜ”S—X‘X˜k¨8Ó4Ó5€Jä‡J�J„LÜ×,Ñ,Ó.€Mä
�(‰(”2—8‘8“:Ó
€CØ×Ñ�ZÔ Ü×#Ñ#Ó%¨Ò5Ð5Ð5àÜ×#Ñ#Ó%¨Ò5Ð5Ð5Ü�k‰k×(Ñ(¨Ó4€GØ”b—h‘hœrŸx™x›zÓ*Ò*Ð*Ð*Ü×#Ñ#Ó%¨Ò6Ð6Ð6ä	ñ /Ü
�‰×"Ñ" :Ô.÷/ô ‡H�HƒJ×Ñ˜JÔ'Ü—‘˜ 6Ó*€JØ €H„OÜ	�‰”zØCô
Eñ /ä
�‰×"Ñ" :Ô.÷/ô 
 ñ /Ü
�‰×"Ñ" :Ô.÷/ð /÷/ð /ú÷/ð /ú÷/ð /ús$   Ä2 HÆ5 HÇ# H$ÈHÈH!È$H-c                  ó&  — t        j                  d«      } t        t        j                  d| «      «      }t	        j
                  «        t        j                  «       }t        j                  dt        j                  t        j                  «       «      d¬«      }|j                  |«       t        j                  «       |kD  sJ ‚~t        j                  «       |kD  sJ ‚t        j                  j                  |«      }|t        j                  dt        j                  t        j                  «       «      d¬«      k(  sJ ‚t        j                  «       |k(  sJ ‚t        5  t        j                  j                  |«       d d d «       y # 1 sw Y   y xY w)Nrf   rg   ÚtestT)Únullable)r   rh   r+   ri   rj   rk   r   rl   Úfieldr>   r?   rm   ÚFieldro   rp   )ru   rv   rw   r   Ú	field_news        r   Útest_export_import_fieldr‚       s  € ä�w‰wÐ,Ó-€HÜ”S—X‘X˜k¨8Ó4Ó5€Jä‡J�J„LÜ×,Ñ,Ó.€Mä�H‰H�VœRŸX™X¤b§h¡h£jÓ1¸DÔA€EØ	×Ñ�zÔ"Ü×#Ñ#Ó%¨Ò5Ð5Ð5àÜ×#Ñ#Ó%¨Ò5Ð5Ð5ä—‘×'Ñ'¨
Ó3€IØœŸ™ ¬¯©´"·(±(³*Ó)=ÈÔMÒMÐMÐMÜ×#Ñ#Ó%¨Ò6Ð6Ð6ô 
 ñ ,Ü
�‰×Ñ 
Ô+÷,÷ ,ñ ,ús   Å FÆFc                 óÊ  — t        j                  d«      }t        t        j                  d|«      «      }t        j                  d| › d�«      }t        t        j                  d|«      «      }t	        j
                  «        t        j                  «       }t        j                  t        j                  «       «      }t        j                  dgddgg|¬«      }	|	j                  «       }
 ||	|«       t        j                  «       |kD  sJ ‚~	 |||«      }|j                  «       |
k(  sJ ‚|j                  t        j                  t        j                  «       «      k(  sJ ‚t        j                  «       |kD  sJ ‚~~t        j                  «       |k(  sJ ‚t        5   ||t        j                  t        j                  «       «      «       d d d «       t        j                  dgddggt        j                  t        j                  «       «      ¬«      }	|	j                  «       }
 ||	||«       ~	 |||«      }|j                  «       |
k(  sJ ‚|j                  t        j                  t        j                  «       «      k(  sJ ‚t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚t        5   |||«       d d d «       y # 1 sw Y   �ŒxY w# 1 sw Y   y xY w)	Nrf   rg   ústruct Ú*r	   rJ   rK   rO   )r   rh   r+   ri   rj   rk   r   rl   r>   r?   rR   Ú	to_pylistrP   Úassert_array_releasedrp   )Ú
array_typeÚexporterÚimporterru   rv   Úc_arrayÚ	ptr_arrayrw   rx   ÚarrÚpy_valueÚarr_news               r   Úcheck_export_import_arrayr�   ¸   sQ  € Ü�w‰wÐ,Ó-€HÜ”S—X‘X˜k¨8Ó4Ó5€JÜ�g‰g˜ 
˜|¨1Ð-Ó.€GÜ”C—H‘H˜[¨'Ó2Ó3€Iä‡J�J„LÜ×,Ñ,Ó.€Mô �(‰(”2—8‘8“:Ó
€CÜ
�(‰(�Q�C˜!˜R˜�>¨Ô
,€CØ�}‰}‹€HÙˆS�)ÔÜ×#Ñ#Ó%¨Ò5Ð5Ð5àÙ�y #Ó&€GØ×ÑÓ (Ò*Ð*Ð*Ø�<‰<œ2Ÿ8™8¤B§H¡H£JÓ/Ò/Ð/Ð/Ü×#Ñ#Ó%¨Ò5Ð5Ð5Ø�Ü×#Ñ#Ó%¨Ò6Ð6Ð6ä	ñ 2Ù�œBŸH™H¤R§X¡X£ZÓ0Ô1÷2ô �(‰(�Q�C˜!˜R˜�>¬¯©´·±³Ó(<Ô
=€CØ�}‰}‹€HÙˆS�)˜ZÔ(àÙ�y *Ó-€GØ×ÑÓ (Ò*Ð*Ð*Ø�<‰<œ2Ÿ8™8¤B§H¡H£JÓ/Ò/Ð/Ð/Ü×#Ñ#Ó%¨Ò5Ð5Ð5ØÜ×#Ñ#Ó%¨Ò6Ð6Ð6ä	ñ (Ù�˜JÔ'÷(ð (÷!2ñ 2ú÷ (ð (ús   Æ/KÊ9
KËKËK"c                  ó~   — t        dt        j                  j                  t        j                  j                  «       y ©NÚ
ArrowArray)r�   r   ÚArrayrm   ro   r@   r   r   Útest_export_import_arrayr•   ä   s'   € äØÜ
�‰×ÑÜ
�‰×Ñõr   c                  ó  — t        dt        j                  j                  t        j                  j                  «       t        j                  d«      } t        t        j                  d| «      «      }t        j                  dgddggt        j                  t        j                  «       «      ¬«      }|j                  |«       | j                  dk(  sJ ‚| j                  dk(  sJ ‚| j                  j                  dk(  sJ ‚y )	NÚArrowDeviceArrayústruct ArrowDeviceArray*rg   r	   rJ   rK   rO   éÿÿÿÿ)r�   r   r”   Ú_export_to_c_deviceÚ_import_from_c_devicer   rh   r+   ri   rR   r>   r?   Údevice_typeÚ	device_idÚlength)r‹   rŒ   r�   s      r   Útest_export_import_device_arrayrŸ   í   sÄ   € äØÜ
�‰×$Ñ$Ü
�‰×&Ñ&ôô �g‰gÐ0Ó1€GÜ”C—H‘H˜[¨'Ó2Ó3€IÜ
�(‰(�Q�C˜!˜R˜�>¬¯©´·±³Ó(<Ô
=€CØ×Ñ˜IÔ&à×Ñ !Ò#Ð#Ð#Ø×Ñ Ò"Ð"Ð"Ø�=‰=×Ñ 1Ò$Ð$Ñ$r   c                 óª  — |€| }t        j                  d«      }t        t        j                  d|«      «      }t	        j
                  «        t        j                  «       } | «       j                  |«       t        j                  «       |kD  sJ ‚t        j                  j                  |«      }| |«       k(  sJ ‚t        j                  «       |k(  sJ ‚~t        j                  «       |k(  sJ ‚t        5  t        j                  j                  |«       d d d «       t        j                  «       j                  |«       t        j                  t        d¬«      5  t        j                  j                  |«       d d d «       t        5  t        j                  j                  |«       d d d «       y # 1 sw Y   ŒžxY w# 1 sw Y   ŒDxY w# 1 sw Y   y xY w)Nrf   rg   ú%ArrowSchema describes non-struct typer   )r   rh   r+   ri   rj   rk   r   rl   rm   ÚSchemaro   rp   r?   rr   rs   rt   )Úschema_factoryÚexpected_schema_factoryru   rv   rw   Ú
schema_news         r   Úcheck_export_import_schemar¦      sr  € ØÐ&Ø"0Ðä�w‰wÐ,Ó-€HÜ”S—X‘X˜k¨8Ó4Ó5€Jä‡J�J„LÜ×,Ñ,Ó.€MáÓ×!Ñ! *Ô-Ü×#Ñ#Ó%¨Ò5Ð5Ð5ä—‘×)Ñ)¨*Ó5€JØÑ0Ó2Ò2Ð2Ð2Ü×#Ñ#Ó%¨Ò6Ð6Ð6ØÜ×#Ñ#Ó%¨Ò6Ð6Ð6ä	ñ -Ü
�	‰	× Ñ  Ô,÷-ô ‡H�HƒJ×Ñ˜JÔ'Ü	�‰”zØDô
Fñ -ä
�	‰	× Ñ  Ô,÷-ô 
 ñ -Ü
�	‰	× Ñ  Ô,÷-ð -÷-ð -ú÷
-ð -ú÷-ð -ús$   Ã4 F1Å F=Æ G	Æ1F:Æ=GÇ	Gc                  ó"   — t        t        «       y r   )r¦   rA   r@   r   r   Útest_export_import_schemar¨      s
   € äœ{Õ+r   c                  óœ   — t        t        t        «       t        t	        d«      «      5  t        t        «       d d d «       y # 1 sw Y   y xY wr   )r¦   rF   rH   r   r   r@   r   r   Ú(test_export_import_schema_with_extensionrª   %  s>   € ô Ô4Ü<ô>ô 
#¤<°£?Ó	3ñ :Ü"Ô#8Ô9÷:÷ :ñ :ús   ©AÁAc                  óâ  — t        j                  d«      } t        t        j                  d| «      «      }d}t	        j
                  t        |¬«      5  t        «       j                  t        |«      «       d d d «       t	        j
                  t        |¬«      5  t        j                  j                  t        |«      «      }d d d «       t        «       k(  sJ ‚y # 1 sw Y   ŒexY w# 1 sw Y   Œ%xY w)Nrf   rg   z,Passing a pointer value as a float is unsafer   )r   rh   r+   ri   rr   ÚwarnsÚUserWarningrA   rm   Úfloatr   r¢   ro   )ru   rv   r   r¥   s       r   Ú'test_export_import_schema_float_pointerr¯   0  sµ   € ô �w‰wÐ,Ó-€HÜ”S—X‘X˜k¨8Ó4Ó5€Jà:€EÜ	�‰”k¨Ô	/ñ 6Ü‹×"Ñ"¤5¨Ó#4Ô5÷6ä	�‰”k¨Ô	/ñ AÜ—Y‘Y×-Ñ-¬e°JÓ.?Ó@ˆ
÷Aàœ›Ò&Ð&Ñ&÷	6ð 6ú÷Að Aús   Á#CÂ)C%ÃC"Ã%C.c                 ó‚  — t        j                  d«      }t        t        j                  d|«      «      }t        j                  d| › d�«      }t        t        j                  d|«      «      }t	        j
                  «        t        j                  «       } |«       }	|	j                  }
|	j                  «       } ||	|«       t        j                  «       |kD  sJ ‚~	 |||
«      }|j                  «       |k(  sJ ‚|j                  |
k(  sJ ‚t        j                  «       |kD  sJ ‚~~
t        j                  «       |k(  sJ ‚t        5   ||t        «       «       d d d «        |«       }	|	j                  «       }|	j                  ||«       ~	 |||«      }|j                  «       |k(  sJ ‚|j                   |«       j                  k(  sJ ‚t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚t        5   |||«       d d d «       t        j                  «       j                  |«        |«       j                  |«       t        j                   t"        d¬«      5   |||«       d d d «       t        5   |||«       d d d «       y # 1 sw Y   �Œ<xY w# 1 sw Y   Œ•xY w# 1 sw Y   Œ;xY w# 1 sw Y   y xY w)Nrf   rg   r„   r…   r¡   r   )r   rh   r+   ri   rj   rk   r   rl   r=   Ú	to_pydictr‡   rA   rm   rp   r?   rr   rs   rt   )rˆ   r‰   rŠ   Úbatch_factoryru   rv   r‹   rŒ   rw   rc   r=   rŽ   Ú	batch_news                r   Úcheck_export_import_batchr´   ?  ss  € Ü�w‰wÐ,Ó-€HÜ”S—X‘X˜k¨8Ó4Ó5€JÜ�g‰g˜ 
˜|¨1Ð-Ó.€GÜ”C—H‘H˜[¨'Ó2Ó3€Iä‡J�J„LÜ×,Ñ,Ó.€Mñ ‹O€EØ�\‰\€FØ�‰Ó €HÙˆU�IÔÜ×#Ñ#Ó%¨Ò5Ð5Ð5àÙ˜ FÓ+€IØ×ÑÓ  HÒ,Ð,Ð,Ø×Ñ˜vÒ%Ð%Ð%Ü×#Ñ#Ó%¨Ò5Ð5Ð5Ø�6Ü×#Ñ#Ó%¨Ò6Ð6Ð6ä	ñ +Ù�œK›MÔ*÷+ñ ‹O€EØ�‰Ó €HØ	×Ñ�y *Ô-àÙ˜ JÓ/€IØ×ÑÓ  HÒ,Ð,Ð,Ø×Ñ™}›×5Ñ5Ò5Ð5Ð5Ü×#Ñ#Ó%¨Ò5Ð5Ð5ØÜ×#Ñ#Ó%¨Ò6Ð6Ð6ä	ñ (Ù�˜JÔ'÷(ô ‡H�HƒJ×Ñ˜JÔ'ÙƒO× Ñ  Ô+Ü	�‰”zØDô
Fñ (á�˜JÔ'÷(ô 
 ñ (Ù�˜JÔ'÷(ð (÷5+ñ +ú÷ (ð (ú÷(ð (ú÷(ð (ús0   ÅJÇ?
JÉ%
J)É=
J5ÊJÊJ&Ê)J2Ê5J>c                  óˆ   — t        dt        j                  j                  t        j                  j                  t
        «       y r’   )r´   r   ÚRecordBatchrm   ro   rM   r@   r   r   Útest_export_import_batchr·   u  s*   € äØÜ
�‰×#Ñ#Ü
�‰×%Ñ%Üõ	r   c                  óÚ   — t        t        d«      «      5  t        dt        j                  j
                  t        j                  j                  t        «       d d d «       y # 1 sw Y   y xY w)Nr	   r“   )r   r   r´   r   r¶   rm   ro   rT   r@   r   r   Ú'test_export_import_batch_with_extensionr¹     sK   € ä	"¤<°£?Ó	3ñ 
Ü!ØÜ�N‰N×'Ñ'Ü�N‰N×)Ñ)Ü ô		
÷
÷ 
ñ 
ús   •AA!Á!A*c                  ó   — t        dt        j                  j                  t        j                  j                  t
        «       t        j                  d«      } t        t        j                  d| «      «      }t        «       }|j                  |«       | j                  dk(  sJ ‚| j                  dk(  sJ ‚| j                  j                  dk(  sJ ‚y )Nr—   r˜   rg   r	   r™   rJ   )r´   r   r¶   rš   r›   rM   r   rh   r+   ri   rœ   r�   rR   rž   )r‹   rŒ   rc   s      r   Útest_export_import_device_batchr»   Š  s¥   € äØÜ
�‰×*Ñ*Ü
�‰×,Ñ,Üô	ô �g‰gÐ0Ó1€GÜ”C—H‘H˜[¨'Ó2Ó3€IÜ‹L€EØ	×Ñ˜iÔ(Ø×Ñ !Ò#Ð#Ð#Ø×Ñ Ò"Ð"Ð"Ø�=‰=×Ñ 1Ò$Ð$Ñ$r   c                 ób  — t        «       }|d   j                  } |||«      }|j                  | «       ~~t        j                  j                  | «      }|j                  |k(  sJ ‚t        |«      }~|t        «       k(  sJ ‚t        �©t        «       }|d   j                  }t        j                  j                  |«      j                  «       } |||«      }|j                  | «       ~~t        j                  j                  | «      }|j                  «       }~t        j                  ||«       y y )Nr   )rY   r=   rm   r   ÚRecordBatchReaderro   ÚlistÚpdÚTableÚfrom_batchesÚ	to_pandasÚread_pandasÚtmÚassert_frame_equal)	Ú
ptr_streamÚreader_factoryr`   r=   ÚreaderÚ
reader_newÚgot_batchesÚexpected_dfÚgot_dfs	            r   Ú_export_import_batch_readerrÍ   �  s  € ä‹n€GØ�Q‰Z×Ñ€Fá˜F GÓ,€FØ
×Ñ˜
Ô#à�ä×%Ñ%×4Ñ4°ZÓ@€JØ×Ñ Ò&Ð&Ð&Ü�zÓ"€KØØœ,›.Ò(Ð(Ð(ô 
€~Ü“.ˆØ˜‘×"Ñ"ˆÜ—h‘h×+Ñ+¨GÓ4×>Ñ>Ó@ˆá ¨Ó0ˆØ×Ñ˜JÔ'Ø�Gä×)Ñ)×8Ñ8¸ÓDˆ
Ø×'Ñ'Ó)ˆØÜ
×Ñ˜k¨6Õ2ð r   c                 óT   — t         j                  j                  t        | |«      «      S r   )r   r\   Úopen_streamrd   ©r=   r`   s     r   Úmake_ipc_stream_readerrÑ   ½  s   € Ü�6‰6×Ñœo¨f°gÓ>Ó?Ð?r   c                 óB   — t         j                  j                  | |«      S r   )r   r½   rÁ   rÐ   s     r   Úmake_py_record_batch_readerrÓ   Á  s   € Ü×Ñ×,Ñ,¨V°WÓ=Ð=r   rÇ   c                 óz  — t        j                  d«      }t        t        j                  d|«      «      }t	        j
                  «        t        j                  «       }t        || «       t        j                  «       |k(  sJ ‚t        5  t        j                  j                  |«       d d d «       y # 1 sw Y   y xY w)Nústruct ArrowArrayStream*rg   )r   rh   r+   ri   rj   rk   r   rl   rÍ   Úassert_stream_releasedr½   ro   )rÇ   Úc_streamrÆ   rw   s       r   Útest_export_import_batch_readerrØ   Å  sŽ   € ô
 �w‰wÐ1Ó2€HÜ”S—X‘X˜k¨8Ó4Ó5€Jä‡J�J„LÜ×,Ñ,Ó.€Mä 
¨NÔ;ä×#Ñ#Ó%¨Ò6Ð6Ð6ô 
 ñ 8Ü
×Ñ×+Ñ+¨JÔ7÷8÷ 8ñ 8ús   Â B1Â1B:c                  óÀ  — t        j                  d«      } t        t        j                  d| «      «      }t	        j
                  «        t        j                  «       }d„ }t        j                  j                  t        «        |«       «      }|j                  |«       t        j                  j                  |«      }t        j                  t        «      5 }|j!                  «        d d d «       dt#        j$                  «      v sJ ‚dt#        |j$                  «      v sJ ‚dt#        |j$                  «      v sJ ‚t        j                  «       |k(  sJ ‚y # 1 sw Y   ŒnxY w)NrÕ   rg   c               3   ó^   K  — 	 	 t        d«      ‚# t         $ r} t        d«      | ‚d } ~ ww xY w­w)NÚfooÚbar)rt   ÚNotImplementedErrorrY   )Úes    r   Úgenz0test_export_import_exception_reader.<locals>.genâ  s5   è ø€ Øð8Ü  Ó'Ð'øÜò 8Ü)¨%Ó0°aÐ7ûð8üs   ‚-… �	*™%¥*ª-zValueError: foozNotImplementedError: barzraise ValueError('foo'))r   rh   r+   ri   rj   rk   r   rl   r½   rÁ   rA   rm   ro   rr   rs   rÝ   Úread_next_batchr'   Úvalue)r×   rÆ   rw   rß   ÚoriginalrÈ   Úexc_infos          r   Ú#test_export_import_exception_readerrä   Ù  s  € ô �w‰wÐ1Ó2€HÜ”S—X‘X˜k¨8Ó4Ó5€Jä‡J�J„LÜ×,Ñ,Ó.€Mò&ô ×#Ñ#×0Ñ0´³ÁÃÓF€HØ×Ñ˜*Ô%ä×!Ñ!×0Ñ0°Ó<€FÜ	�‰Ô*Ó	+ð !¨xØ×ÑÔ ÷!ð ¤ H§N¡NÓ 3Ñ3Ð3Ð3Ø%¬¨X¯^©^Ó)<Ñ<Ð<Ð<à&¬#¨h¯n©nÓ*=Ñ=Ð=Ð=ä×#Ñ#Ó%¨Ò6Ð6Ñ6÷!ð !ús   ÃEÅEc                  óÀ  — t        j                  d«      } t        t        j                  d| «      «      }t	        j
                  dt	        j                  «       fg«      }t	        j                  g d¢g|¬«      t	        j                  g d¢g|¬«      g}t        ||«      }t        j                  j                  |d d «      }|j                  |«       ~t        j                  j                  |«      }|j                  «       }||d   k(  sJ ‚t        j                   t"        d	¬
«      5  |j                  «        d d d «       t        j                  j                  |d d «      }|j                  |«       ~t        j                  j                  |«      }t        j                   t"        d	¬
«      5  |j%                  «        d d d «       y # 1 sw Y   Œ‘xY w# 1 sw Y   y xY w)NrÕ   rg   rÛ   ©r	   rJ   rE   rX   )é   rV   rW   iðÿÿÿr   z<Expected to be able to read 16 bytes for message body, got 8r   )r   rh   r+   ri   r   r=   r?   rL   rd   r\   rÏ   rm   r½   ro   rà   rr   rs   ÚOSErrorÚread_all)r×   rÆ   r=   r`   ÚbufrÈ   rÉ   rc   s           r   Ú test_imported_batch_reader_errorrë   û  sŒ  € ä�w‰wÐ1Ó2€HÜ”S—X‘X˜k¨8Ó4Ó5€Jä�Y‰Y˜¤§¡£
Ð+Ð,Ó-€FÜ�‰¢	˜{°6Ô:Ü�‰¢	˜{°6Ô:ð<€Gä
˜& 'Ó
*€Cô �V‰V×Ñ  D S 	Ó*€FØ
×Ñ˜
Ô#Øä×%Ñ%×4Ñ4°ZÓ@€JØ×&Ñ&Ó(€EØ�G˜A‘JÒÐÐÜ	�‰”wð7ô
8ñ %ð 	×"Ñ"Ô$÷%ô �V‰V×Ñ  D S 	Ó*€FØ
×Ñ˜
Ô#Øä×%Ñ%×4Ñ4°ZÓ@€JÜ	�‰”wð7ô
8ñ ð 	×ÑÔ÷ð ÷%ð %ú÷ð ús   Ä'GÆ.GÇGÇGÚobjrÛ   )rP   r   r=   )Úidsc                 óÂ  — t        j                  «        t        j                  «       }| j	                  «       }t        |d«      dk(  sJ ‚t        j                  «       |kD  sJ ‚t        | «      j                  |«      }|| k(  sJ ‚t        j                  «       |k(  sJ ‚| j	                  «       }t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚y )Nó   arrow_schemar	   )rj   rk   r   rl   Ú__arrow_c_schema__r   rP   Ú_import_from_c_capsule)rì   rw   r   Úobj_outs       r   Útest_roundtrip_schema_capsuleró     sË   € ô ‡J�J„LÜ×,Ñ,Ó.€Mà×$Ñ$Ó&€GÜ˜W oÓ6¸!Ò;Ð;Ð;Ü×#Ñ#Ó%¨Ò5Ð5Ð5Ü�3‹i×.Ñ.¨wÓ7€GØ�cŠ>Ðˆ>ä×#Ñ#Ó%¨Ò6Ð6Ð6à×$Ñ$Ó&€Gä×#Ñ#Ó%¨Ò5Ð5Ð5ØÜ×#Ñ#Ó%¨Ò6Ð6Ñ6r   z&arr,schema_accessor,bad_type,good_type©ÚaÚbÚcc                 ó   — | j                   S r   rO   ©Úxs    r   ú<lambda>rû   5  ó
   € ¨!¯&©&€ r   rú   )Únamesc                 ó   — | j                   S r   rX   rù   s    r   rû   rû   8  ó
   € �!—(‘(€ r   rR   rL   c                 ó  — t        j                  «        t        j                  «       }t	        | «      j
                  }| j                  «       \  }}t        |d«      dk(  sJ ‚t        |d«      dk(  sJ ‚ |||«      }|j                  | «      sJ ‚t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚| j                  «       }t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚t        j                  t        d¬«      5  | j                  |j                  «       «       d d d «       | j                  |j                  «       «      \  }}	 |||	«      } ||«      |k(  sJ ‚y # 1 sw Y   ŒBxY w)Nrï   r	   s   arrow_arrayú-Could not cast.* string to requested .* int32r   )rj   rk   r   rl   rP   rñ   Ú__arrow_c_array__r   Úequalsrr   rs   rt   rð   ©
r�   Úschema_accessorÚbad_typeÚ	good_typerw   Úimport_arrayÚschema_capsuler   Úarr_outÚarray_capsules
             r   Útest_roundtrip_array_capsuler  4  su  € ô ‡J�J„LÜ×,Ñ,Ó.€Mä˜“9×3Ñ3€Là!×3Ñ3Ó5Ñ€N�GÜ˜^¨_Ó=ÀÒBÐBÐBÜ˜W nÓ5¸Ò:Ð:Ð:Ù˜>¨7Ó3€GØ�>‰>˜#ÔÐÐä×#Ñ#Ó%¨Ò5Ð5Ð5Øä×#Ñ#Ó%¨Ò6Ð6Ð6à×#Ñ#Ó%€Gä×#Ñ#Ó%¨Ò5Ð5Ð5ØÜ×#Ñ#Ó%¨Ò6Ð6Ð6ä	�‰”zØMô
Oñ =à×Ñ˜h×9Ñ9Ó;Ô<÷=ð %(×$9Ñ$9Ø×$Ñ$Ó&ó%(Ñ!€N�Má˜>¨=Ó9€GÙ˜7Ó# yÒ0Ð0Ñ0÷=ð =úó   Ä  FÆF
c                 ó   — | j                   S r   rO   rù   s    r   rû   rû   _  rü   r   c                 ó   — | j                   S r   rX   rù   s    r   rû   rû   b  rÿ   r   c                 ó  — t        j                  «        t        j                  «       }t	        | «      j
                  }| j                  «       \  }}t        |d«      dk(  sJ ‚t        |d«      dk(  sJ ‚ |||«      }|j                  | «      sJ ‚t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚| j                  «       }t        j                  «       |kD  sJ ‚~t        j                  «       |k(  sJ ‚t        j                  t        d¬«      5  | j                  |j                  «       «       d d d «       | j                  |j                  «       «      \  }}	 |||	«      } ||«      |k(  sJ ‚y # 1 sw Y   ŒBxY w)Nrï   r	   s   arrow_device_arrayr  r   )rj   rk   r   rl   rP   Ú_import_from_c_device_capsuleÚ__arrow_c_device_array__r   r  r  rr   rs   rt   rð   r  s
             r   Ú#test_roundtrip_device_array_capsuler  ^  sz  € ô ‡J�J„LÜ×,Ñ,Ó.€Mä˜“9×:Ñ:€Là!×:Ñ:Ó<Ñ€N�GÜ˜^¨_Ó=ÀÒBÐBÐBÜ˜WÐ&;Ó<ÀÒAÐAÐAÙ˜>¨7Ó3€GØ�>‰>˜#ÔÐÐä×#Ñ#Ó%¨Ò5Ð5Ð5Øä×#Ñ#Ó%¨Ò6Ð6Ð6à×#Ñ#Ó%€Gä×#Ñ#Ó%¨Ò5Ð5Ð5ØÜ×#Ñ#Ó%¨Ò6Ð6Ð6ä	�‰”zØMô
Oñ Dà×$Ñ$ X×%@Ñ%@Ó%BÔC÷Dð %(×$@Ñ$@Ø×$Ñ$Ó&ó%(Ñ!€N�Má˜>¨=Ó9€GÙ˜7Ó# yÒ0Ð0Ñ0÷Dð Dúr  Úconstructorc                 óB   — t         j                  j                  || «      S r   )r   rÀ   rÁ   rÐ   s     r   rû   rû   ‹  s   € œBŸH™H×1Ñ1°'¸6ÓB€ r   ÚrecordbatchreaderÚtablec                 óš  — t        «       }|d   j                  }t        j                  «        t	        j
                  «       } | ||«      }|j                  «       }t        |d«      dk(  sJ ‚t        j                  j                  |«      }|j                  |k(  sJ ‚t        |«      }t        |«      t        |«      k(  sJ ‚t        ||«      D ]  \  }}	|j                  |	«      rŒJ ‚ ~~~~	~t	        j
                  «       |k(  sJ ‚ | ||«      }t	        j                  dt	        j                  «       i«      }
t        j                   t        j"                  j$                  d¬«      5  |j                  |
j'                  «       «       d d d «       t	        j                  dt	        j(                  t	        j                  «       «      i«      }|j                  |j'                  «       «      }t        j                  j                  |«      }|j                  |k(  sJ ‚t        ||«      D ]  \  }}	|j                  |	«      rŒJ ‚ y # 1 sw Y   Œ¼xY w)Nr   ó   arrow_array_streamr	   r8   zField 0 cannot be castr   )rY   r=   rj   rk   r   rl   Ú__arrow_c_stream__r   r½   rñ   r¾   ÚlenÚzipr  r?   rr   rs   ÚlibÚArrowTypeErrorrð   r>   )r  r`   r=   rw   rì   r   Úimported_readerÚimported_batchesrc   ÚexpectedÚ
bad_schemaÚmatching_schemas               r   Útest_roundtrip_reader_capsuler$  ˆ  s  € ô ‹n€GØ�Q‰Z×Ñ€Fä‡J�J„LÜ×,Ñ,Ó.€Má
�f˜gÓ
&€Cà×$Ñ$Ó&€GÜ˜WÐ&;Ó<ÀÒAÐAÐAÜ×*Ñ*×AÑAÀ'ÓJ€OØ×!Ñ! VÒ+Ð+Ð+Ü˜OÓ,ÐÜÐÓ ¤C¨£LÒ0Ð0Ð0ÜÐ/°Ó9ò &‰ˆˆxØ�|‰|˜HÕ%Ð%Ð%ð&ð 	ˆ_˜e XÐ/?ä×#Ñ#Ó%¨Ò6Ð6Ð6á
�f˜gÓ
&€Cä—‘˜F¤B§H¡H£JÐ/Ó0€JÜ	�‰”r—v‘v×,Ñ,Ð4LÔ	Mñ @Ø×Ñ˜z×<Ñ<Ó>Ô?÷@ô —i‘i ¬¯©´"·(±(³*Ó)=Ð >Ó?€OØ×$Ñ$ _×%GÑ%GÓ%IÓJ€GÜ×*Ñ*×AÑAÀ'ÓJ€OØ×!Ñ! _Ò4Ð4Ð4Ü˜°Ó8ò &‰ˆˆxØ�|‰|˜HÕ%Ð%Ð%ñ&÷@ð @ús   Å& IÉI
c                  ó6  — t        «       } t        j                  dt        j                  t        j                  «       «      fg«      }|j                  «       }| j                  |«      }| j                  |«      }t        |d«      dk(  sJ ‚t        j                  j                  |«      }|j                  |k(  sJ ‚|j                  «       j                  |«      sJ ‚t        j                  t        «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)Nr8   r  r	   )rM   r   r=   r>   Úint64rð   ri   r  r   r½   rñ   rà   r  rr   rs   ÚStopIteration)rc   Úrequested_schemaÚrequested_capsuleÚbatch_as_requestedr   r  s         r   Ú4test_roundtrip_batch_reader_capsule_requested_schemar+  ²  së   € Ü‹L€EÜ—y‘y 6¬2¯8©8´B·H±H³JÓ+?Ð"@Ð!AÓBÐØ(×;Ñ;Ó=ÐØŸ™Ð$4Ó5Ðà×&Ñ&Ð'8Ó9€GÜ˜WÐ&;Ó<ÀÒAÐAÐAÜ×*Ñ*×AÑAÀ'ÓJ€OØ×!Ñ!Ð%5Ò5Ð5Ð5Ø×*Ñ*Ó,×3Ñ3Ð4FÔGÐGÐGÜ	�‰”}Ó	%ñ *Ø×'Ñ'Ô)÷*÷ *ñ *ús   Ã5DÄDc                  óŒ  — t        «       } | j                  «       }t        |d«      dk(  sJ ‚t        j                  j                  |«      }|j                  | j                  k(  sJ ‚|j                  «       j                  | «      sJ ‚t        j                  t        «      5  |j                  «        d d d «       y # 1 sw Y   y xY w)Nr  r	   )rM   r  r   r   r½   rñ   r=   rà   r  rr   rs   r'  )rc   r   r  s      r   Ú#test_roundtrip_batch_reader_capsuler-  Á  s¥   € Ü‹L€Eà×&Ñ&Ó(€GÜ˜WÐ&;Ó<ÀÒAÐAÐAÜ×*Ñ*×AÑAÀ'ÓJ€OØ×!Ñ! U§\¡\Ò1Ð1Ð1Ø×*Ñ*Ó,×3Ñ3°EÔ:Ð:Ð:Ü	�‰”}Ó	%ñ *Ø×'Ñ'Ô)÷*÷ *ñ *ús   Â B:Â:Cc                  ó  — t        j                  t        j                  g d¢«      g«      } | j                  «       }t	        |d«      dk(  sJ ‚t         j
                  j                  |«      }|j                  | j                  k(  sJ ‚|| k(  sJ ‚y )Nrô   r  r	   )r   Úchunked_arrayrR   r  r   ÚChunkedArrayrñ   rP   )Úchunkedr   Úimported_chunkeds      r   Ú$test_roundtrip_chunked_array_capsuler3  Í  s}   € Ü×Ñ¤§¡ªÓ 9Ð:Ó;€Gà×(Ñ(Ó*€GÜ˜WÐ&;Ó<ÀÒAÐAÐAÜ—‘×=Ñ=¸gÓFÐØ× Ñ  G§L¡LÒ0Ð0Ð0Ø˜wÒ&Ð&Ñ&r   c                  ó¾  — t        j                  t        j                  g d¢«      g«      } | j                  j	                  «       }| j                  |«      }t         j                  j                  |«      }|| k(  sJ ‚t        j                  «       }|j	                  «       }| j                  |«      }t         j                  j                  |«      }|| j                  t        j                  «       «      k(  sJ ‚t        j                  «       }|j	                  «       }t        j                  t        d¬«      5  | j                  |«       d d d «       y # 1 sw Y   y xY w)Nrô   z-Could not cast string to requested type int64r   )r   r/  rR   rP   rð   r  r0  rñ   r    ri   r&  rr   rs   rt   )r1  r)  r   r2  Úrequested_types        r   Ú5test_roundtrip_chunked_array_capsule_requested_schemar6  ×  s  € Ü×Ñ¤§¡ªÓ 9Ð:Ó;€Gð  Ÿ™×7Ñ7Ó9ÐØ×(Ñ(Ð):Ó;€GÜ—‘×=Ñ=¸gÓFÐØ˜wÒ&Ð&Ð&ô —Y‘Y“[€NØ&×9Ñ9Ó;ÐØ×(Ñ(Ð):Ó;€GÜ—‘×=Ñ=¸gÓFÐØ˜wŸ|™|¬B¯I©I«KÓ8Ò8Ð8Ð8ä—X‘X“Z€NØ&×9Ñ9Ó;ÐÜ	�‰ÜÐIô
ñ 6ð 	×"Ñ"Ð#4Ô5÷6÷ 6ñ 6ús   Ä8EÅEc                  óø  — 	 dd l } t        j                  d«       t	        j
                  d«      }t        t	        j                  d|«      «      }t        j                  g d¢t        j                  «       ¬«      }|j                  |«       d|_        t        j                  t        d¬	«      5  t        j                  j                  ||j                   «       d d d «       y # t        $ r Y ŒÑw xY w# 1 sw Y   y xY w)
Nr   zpyarrow.cuda is availabler˜   rg   ræ   rO   rJ   z&Trying to import data on a CUDA devicer   )Úpyarrow.cudarr   ÚskipÚImportErrorr   rh   r+   ri   r   rR   r&  rš   rœ   rs   r”   r›   rP   )Úpyarrowr‹   rŒ   r�   s       r   Útest_import_device_no_cudar<  ï  sÀ   € ð1Ûô 	�‰Ð/Ô0ä�g‰gÐ0Ó1€GÜ”C—H‘H˜[¨'Ó2Ó3€IÜ
�(‰(’9¤2§8¡8£:Ô
.€CØ×Ñ˜IÔ&ð €GÔä	�‰”{Ð*RÔ	Sñ <Ü
�‰×&Ñ& y°#·(±(Ô;÷<ð <øô ò Ùðú÷<ð <ús   ‚C! Â-+C0Ã!	C-Ã,C-Ã0C9r   )GÚ
contextlibr
   rj   r;  r   Úpyarrow.cffir   r:  rr   Úpandasr¿   Úpandas.testingÚtestingrÄ   ÚmarkÚskipifÚ
needs_cffirs   rt   rp   r‡   rÖ   r   Úcontextmanagerr   ÚExtensionTyper   rA   rF   rH   rM   rT   rY   rd   r{   r‚   r�   r•   rŸ   r¦   r¨   rª   r¯   r´   r·   r¹   r»   rÍ   rÑ   rÓ   ÚparametrizerØ   rä   rë   r?   r   r=   ró   rR   ÚstringrL   r  r  r½   rÁ   r$  r+  r-  r3  r6  r<  r@   r   r   ú<module>rI     sÖ  ðó& Û Û 	ã ðÝ ó ðÛÝð
 �[‰[×Ñ  t Ø'Jð  ó L€
ð '˜Ÿ™ØÐ:ô<Ð ð &˜Ÿ™ØÐ9ô;Ð ð '˜Ÿ™ØÐ;ô=Ð òTð ×Ññ>ó ð>ô�2×#Ñ#ô ò(4ò
4ò
4ò<ò.òòð ñ/ó ð/ð@ ñ,ó ð,ò.)(ðX ñó ðð ñ%ó ð%ó$-ð@ ñ,ó ð,ð ñ:ó ð:ð ñ'ó ð'ò3(ðl ñó ðð ñ
ó ð
ð ñ%ó ð%ò$3ò@@ò>ð Ø‡�×ÑÐ)Ø0Ø5ð7ó8ñ8ó8ó ð8ð  ñ7ó ð7ðB ñó ððD ‡�×Ñ˜  §¡£¨X¨R¯X©X°e¸X¸R¿X¹X»ZÓ-HØ!* §¡¨E°8°2·8±8³:Ð+>Ó!?ð!Aâ8ð ó :ñ7ó:ð7ð& ‡�×ÑÐAØ€R‡X�XŠoÓÑ 0°(°"·(±(³*¸i¸b¿i¹i»kÐJàˆ�‰˜˜Ÿ™¢/Ó2Ð3¸C¸5ÔAÙØˆ�	‰	�3˜˜Ÿ™›
Ð#Ó$Øˆ�	‰	�3˜	˜Ÿ	™	›Ð$Ó%ð	ðDð 	�Ð ð ó "ñ1ó"ð1ðB ‡�×ÑÐAØ€R‡X�XŠoÓÑ 0°(°"·(±(³*¸i¸b¿i¹i»kÐJàˆ�‰˜˜Ÿ™¢/Ó2Ð3¸C¸5ÔAÙØˆ�	‰	�3˜˜Ÿ™›
Ð#Ó$Øˆ�	‰	�3˜	˜Ÿ	™	›Ð$Ó%ð	ðDð 	�Ð ð ó "ñ1ó"ð1ðB ‡�×Ñ˜Ø×Ñ×%Ñ%áBð)ð 	˜WÐ%ð	 ó 'ñ
"&ó'ð
"&òJ*ò	*ò'ò6ð0 ñ<ó ñ<øðm ò Ø
ƒCðûð ò Ø€N€B‹ðús"   ’N< �
O
 Î<OÏOÏ
	OÏO