U
    âÇ-eE5  ã                   @   s®  d dl Z d dlZzd dlmZ W n ek
r8   dZY nX d dlZzd dlZd dl	m
Z W n ek
rv   d ZZY nX ejjedkddZejeddZejeddZejeddZG d	d
„ d
ejƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZedd„ ƒZdd„ Zedd „ ƒZ ed!d"„ ƒZ!ed#d$„ ƒZ"d%d&„ Z#ed'd(„ ƒZ$ed)d*„ ƒZ%d+d,„ Z&d-d.„ Z'd/d0„ Z(eej )d1e'e(g¡d2d3„ ƒƒZ*ed4d5„ ƒZ+dS )6é    N)Úffiz!test needs cffi package installed)Úreasonz"Cannot import released ArrowSchema©Úmatchz!Cannot import released ArrowArrayz'Cannot import released ArrowArrayStreamc                   @   s(   e Zd Zdd„ Zedd„ ƒZdd„ ZdS )ÚParamExtTypec                 C   s   || _ tj | t |¡¡ d S ©N)Ú_widthÚpaÚPyExtensionTypeÚ__init__Úbinary)ÚselfÚwidth© r   úX/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/pyarrow/tests/test_cffi.pyr   4   s    zParamExtType.__init__c                 C   s   | j S r   )r   ©r   r   r   r   r   8   s    zParamExtType.widthc                 C   s   t | jffS r   )r   r   r   r   r   r   Ú
__reduce__<   s    zParamExtType.__reduce__N)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r   r   r   r   r   r   2   s   
r   c                   C   s"   t jdt  t  ¡ ¡fgddidS )NZintsó   key1ó   value1©Úmetadata)r	   ÚschemaÚlist_Úint32r   r   r   r   Úmake_schema@   s    ÿr   c                   C   s   t jdtdƒfgddidS )NÚexté   r   r   r   )r	   r   r   r   r   r   r   Úmake_extension_schemaE   s    ÿr!   c                   C   s   t  dgddgggtƒ ¡S )Né   é   é*   )r	   Úrecord_batchr   r   r   r   r   Ú
make_batchJ   s    r&   c                  C   s8   t ƒ } | d j tjddgt d¡d¡}t |g| ¡S )Nr   s   foos   barr    ©Útype)r!   r(   Z
wrap_arrayr	   Úarrayr   r%   )r   Zext_colr   r   r   Úmake_extension_batchN   s
    ÿr*   c                  C   s6   t ƒ } t dgddggg| ¡t d g ddggg| ¡gS )Nr"   r#   r$   é   é   )r   r	   r%   ©r   r   r   r   Úmake_batchesU   s    þr.   c              
   C   sV   t  ¡ D}t j || ¡}|D ]}| |¡ qW 5 Q R X | ¡ W  5 Q R £ S Q R X d S r   )r	   ZBufferOutputStreamÚipcZ
new_streamÚwriteÚgetvalue)r   ÚbatchesZsinkÚoutÚbatchr   r   r   Úmake_serialized]   s
    
r5   c               	   C   s  t  d¡} tt  d| ¡ƒ}t ¡  t ¡ }t t 	¡ ¡}| 
|¡ t ¡ |ksRt‚~t ¡ |ksdt‚tj |¡}|t t 	¡ ¡ks†t‚t ¡ |ks–t‚t tj |¡ W 5 Q R X t 	¡  
|¡ t  dd¡}|| _tjtdd tj |¡ W 5 Q R X t tj |¡ W 5 Q R X d S )Nústruct ArrowSchema*Ú	uintptr_tzchar[]s   zzzz$Invalid or unsupported format stringr   )r   ÚnewÚintÚcastÚgcÚcollectr	   Útotal_allocated_bytesr   r   Ú_export_to_cÚAssertionErrorZDataTypeÚ_import_from_cÚassert_schema_releasedÚformatÚpytestÚraisesÚ
ValueError)Úc_schemaÚ
ptr_schemaÚold_allocatedÚtypZtyp_newZ
bad_formatr   r   r   Útest_export_import_typee   s.    

ÿrJ   c               	   C   sÎ   t  d¡} tt  d| ¡ƒ}t ¡  t ¡ }tjdt 	t 
¡ ¡dd}| |¡ t ¡ |ks^t‚~t ¡ |kspt‚tj |¡}|tjdt 	t 
¡ ¡ddksžt‚t ¡ |ks®t‚t tj |¡ W 5 Q R X d S )Nr6   r7   ÚtestT)Znullable)r   r8   r9   r:   r;   r<   r	   r=   Úfieldr   r   r>   r?   ÚFieldr@   rA   )rF   rG   rH   rL   Z	field_newr   r   r   Útest_export_import_field†   s    

"rN   c            	   	   C   sÊ  t  d¡} tt  d| ¡ƒ}t  d¡}tt  d|¡ƒ}t ¡  t ¡ }t t 	¡ ¡}tj
dgddgg|d}| ¡ }| |¡ t ¡ |ksŒt‚~tj ||¡}| ¡ |ks¬t‚|jt t 	¡ ¡ksÄt‚t ¡ |ksÔt‚~~t ¡ |ksèt‚t tj |t t 	¡ ¡¡ W 5 Q R X tj
dgddggt t 	¡ ¡d}| ¡ }| ||¡ ~tj ||¡}| ¡ |ksht‚|jt t 	¡ ¡ks‚t‚t ¡ |ks”t‚~t ¡ |ks¨t‚t tj ||¡ W 5 Q R X d S )Nr6   r7   ústruct ArrowArray*r"   r#   r$   r'   )r   r8   r9   r:   r;   r<   r	   r=   r   r   r)   Z	to_pylistr>   r?   ZArrayr@   r(   Úassert_array_releasedrA   )	rF   rG   Úc_arrayÚ	ptr_arrayrH   rI   ZarrÚpy_valueZarr_newr   r   r   Útest_export_import_arrayž   s@    


""rT   c              	   C   sò   t  d¡}tt  d|¡ƒ}t ¡  t ¡ }| ƒ  |¡ t ¡ |ksFt	‚tj
 |¡}|| ƒ ks`t	‚t ¡ |kspt	‚~t ¡ |ks‚t	‚t tj
 |¡ W 5 Q R X t ¡  |¡ tjtdd tj
 |¡ W 5 Q R X t tj
 |¡ W 5 Q R X d S )Nr6   r7   ú%ArrowSchema describes non-struct typer   )r   r8   r9   r:   r;   r<   r	   r=   r>   r?   ÚSchemar@   rA   r   rC   rD   rE   )Zschema_factoryrF   rG   rH   Ú
schema_newr   r   r   Úcheck_export_import_schemaË   s(    
ÿrX   c                   C   s   t tƒ d S r   )rX   r   r   r   r   r   Útest_export_import_schemaè   s    rY   c                   C   s   t tƒ d S r   )rX   r!   r   r   r   r   Ú(test_export_import_schema_with_extensioní   s    rZ   c               	   C   s„   t  d¡} tt  d| ¡ƒ}d}tjt|d tƒ  t	|ƒ¡ W 5 Q R X tjt|d t
j t	|ƒ¡}W 5 Q R X |tƒ ks€t‚d S )Nr6   r7   z,Passing a pointer value as a float is unsafer   )r   r8   r9   r:   rC   ZwarnsÚUserWarningr   r>   Úfloatr	   rV   r@   r?   )rF   rG   r   rW   r   r   r   Ú'test_export_import_schema_float_pointerò   s    
r]   c           
   	   C   sÜ  t  d¡}tt  d|¡ƒ}t  d¡}tt  d|¡ƒ}t ¡  t ¡ }| ƒ }|j}| 	¡ }| 
|¡ t ¡ |ksrt‚~tj ||¡}	|	 	¡ |ks’t‚|	j|ks t‚t ¡ |ks°t‚~	~t ¡ |ksÄt‚t tj |tƒ ¡ W 5 Q R X | ƒ }| 	¡ }| 
||¡ ~tj ||¡}	|	 	¡ |ks t‚|	j| ƒ jks4t‚t ¡ |ksFt‚~	t ¡ |ksZt‚t tj ||¡ W 5 Q R X t ¡  
|¡ | ƒ  
|¡ tjtdd tj ||¡ W 5 Q R X t tj ||¡ W 5 Q R X d S )Nr6   r7   rO   rU   r   )r   r8   r9   r:   r;   r<   r	   r=   r   Z	to_pydictr>   r?   ZRecordBatchr@   rP   r   rA   r   rC   rD   rE   )
Zbatch_factoryrF   rG   rQ   rR   rH   r4   r   rS   Z	batch_newr   r   r   Úcheck_export_import_batch  sP    


ÿr^   c                   C   s   t tƒ d S r   )r^   r&   r   r   r   r   Útest_export_import_batch7  s    r_   c                   C   s   t tƒ d S r   )r^   r*   r   r   r   r   Ú'test_export_import_batch_with_extension<  s    r`   c           	      C   sÀ   t ƒ }|d j}|||ƒ}| | ¡ ~~tj | ¡}|j|ksBt‚t|ƒ}~|t ƒ ksZt‚td k	r¼t ƒ }|d j}tj	 
|¡ ¡ }|||ƒ}| | ¡ ~~tj | ¡}| ¡ }~t ||¡ d S )Nr   )r.   r   r>   r	   ÚRecordBatchReaderr@   r?   ÚlistÚpdÚTableÚfrom_batchesZ	to_pandasZread_pandasÚtmZassert_frame_equal)	Ú
ptr_streamÚreader_factoryr2   r   ÚreaderÚ
reader_newZgot_batchesZexpected_dfZgot_dfr   r   r   Ú_export_import_batch_readerA  s*    





rk   c                 C   s   t j t| |ƒ¡S r   )r	   r/   Úopen_streamr5   ©r   r2   r   r   r   Úmake_ipc_stream_readera  s    rn   c                 C   s   t j | |¡S r   )r	   ra   re   rm   r   r   r   Úmake_py_record_batch_readere  s    ro   rh   c              	   C   sd   t  d¡}tt  d|¡ƒ}t ¡  t ¡ }t|| ƒ t ¡ |ksDt	‚t
 tj |¡ W 5 Q R X d S )Nústruct ArrowArrayStream*r7   )r   r8   r9   r:   r;   r<   r	   r=   rk   r?   Úassert_stream_releasedra   r@   )rh   Úc_streamrg   rH   r   r   r   Útest_export_import_batch_readeri  s    

rs   c               	   C   s  t  d¡} tt  d| ¡ƒ}t dt ¡ fg¡}tjdddgg|dtjdd	d
gg|dg}t||ƒ}tj	 
|d d… ¡}| |¡ ~tj |¡}| ¡ }||d ks¨t‚tjtdd | ¡  W 5 Q R X tj	 
|d d… ¡}| |¡ ~tj |¡}tjtdd | ¡  W 5 Q R X d S )Nrp   r7   Zfoor"   r#   r    r-   é   r+   r,   iðÿÿÿr   z<Expected to be able to read 16 bytes for message body, got 8r   )r   r8   r9   r:   r	   r   r   r%   r5   r/   rl   r>   ra   r@   Zread_next_batchr?   rC   rD   ÚOSErrorZread_all)rr   rg   r   r2   Úbufri   rj   r4   r   r   r   Ú test_imported_batch_reader_error}  s2    
ÿ

ÿ
ÿrw   ),r;   Zpyarrowr	   Zpyarrow.cffir   ÚImportErrorrC   Zpandasrc   Zpandas.testingÚtestingrf   ÚmarkZskipifZ
needs_cffirD   rE   rA   rP   rq   r
   r   r   r!   r&   r*   r.   r5   rJ   rN   rT   rX   rY   rZ   r]   r^   r_   r`   rk   rn   ro   Zparametrizers   rw   r   r   r   r   Ú<module>   s~   
ÿ ÿ ÿ ÿ
 

,


6

 ÿÿ