U
    kª/eo<  ã                "   @   sÒ  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
  mZ e d¡Zejdddd„ ƒZdd„ Zd	d
„ Zdd„ Zd\dd„Zej de ¡ dfe ¡ dfe ¡ dfe ¡ dfe ¡ dfe ¡ dfe ¡ dfe ¡ dfe ¡ dfe  ¡ dfe !¡ dfe "¡ dfe #¡ dfe $d¡dfe $d¡d fe %d!¡d"fe %d#¡d$fe &d¡d%fe &d¡d&fe &d!¡d'fe &d#¡d(fej&d#d)d*d+fej&d#d,d*d-fe '¡ d.fe (¡ d/fe )d0d1¡d2fe *¡ d3fe +¡ d4fe +d5¡d6fg¡ej d7d8d9g¡d:d;„ ƒƒZ,ej d<e ¡ d8d9d8d8gd=fe ¡ e-e.d>ƒƒd?fe ¡ e-e.d>ƒƒd@fe ¡ e-e.d>ƒƒdAfe ¡ e-e.d>ƒƒdBfe "¡ e-e.d>ƒƒdCfe #¡ e-e.d>ƒƒdDfe &d¡e-e.d>ƒƒdEfe &d¡e-e.d>ƒƒdFfe &d!¡e-e.d>ƒƒdGfe &d#¡e-e.d>ƒƒdHfe '¡ e-e.d>ƒƒdIfe (¡ e-e.d>ƒƒdJfg¡dKdL„ ƒZ/dMdN„ Z0ej dOe ¡ d8d9d8d8gd=dfe ¡ e-e.d>ƒƒd?dfe ¡ e-e.d>ƒƒd@dfe ¡ e-e.d>ƒƒdPdfe  ¡ e-e.d>ƒƒdQdfe ¡ e-e.d>ƒƒdRdfe ¡ e-e.d>ƒƒdSdfe ¡ e-e.d>ƒƒdAdfe ¡ e-e.d>ƒƒdBdfe "¡ e-e.d>ƒƒdCdfe #¡ e-e.d>ƒƒdDdfe &d¡e-e.d>ƒƒdEd%fe &d¡e-e.d>ƒƒdFd&fe &d!¡e-e.d>ƒƒdGd'fe &d#¡e-e.d>ƒƒdHd(fe '¡ e-e.d>ƒƒdId.fe (¡ e-e.d>ƒƒdJd/fg¡dTdU„ ƒZ1dVdW„ Z2ejj3dXdYdZd[„ ƒZ4dS )]é    NÚjpypeÚsession)Zscopec               	   C   sÒ   zt jd } W n. tk
r<   t j t j t¡ddd¡} Y nX t j | dd¡}t |¡}| 	¡ j
dddidj}t j | dd	d
d |¡¡}t  d|¡}i }d|d< tjt ¡ d| f|Ž t d¡jjj tj¡S )NZARROW_SOURCE_DIRz..Újavazpom.xmlzPOM:versionZPOMz!http://maven.apache.org/POM/4.0.0)Ú
namespacesZtoolsÚtargetz(arrow-tools-{}-jar-with-dependencies.jarZARROW_TOOLS_JARFZconvertStringsz-Djava.class.path=Úorg)ÚosÚenvironÚKeyErrorÚpathÚjoinÚdirnameÚ__file__ÚETÚparseÚgetrootÚfindÚtextÚformatÚgetenvr   ZstartJVMZgetDefaultJVMPathZJPackageZapacheZarrowZmemoryZRootAllocatorÚsysÚmaxsize)Z	arrow_dirZpom_pathÚtreeÚversionZjar_pathÚkwargs© r   ú:/tmp/pip-unpacked-wheel-seu8352k/pyarrow/tests/test_jvm.pyÚroot_allocator   s4     
 ÿþ   þÿr   c                 C   st   |   d¡}tdƒD ]}| |d| ¡ q| ¡ }t |¡}| ¡ dksJt‚| ¡ |d ks^t‚~| ¡ |kspt‚d S )Né   s   é   )ÚbufferÚrangeZsetByteZrefCntÚpa_jvmÚ
jvm_bufferZ
to_pybytesÚAssertionError)r   r#   ÚiZorig_refcntÚbufr   r   r   Útest_jvm_buffer8   s    

r'   c              	   C   sJ   dd l }ddlm} |  d¡}| ¡  t |¡ t |¡ W 5 Q R X d S )Nr   )ÚIllegalArgumentExceptionr   )	Zjpype.importsÚ	java.langr(   r    ÚreleaseÚpytestZraisesr"   r#   )r   r   r(   r#   r   r   r   Útest_jvm_buffer_releasedL   s    
r,   c                 C   s"   t  d¡ƒ }t  d¡}| | |¡S )Nz+com.fasterxml.jackson.databind.ObjectMapperz(org.apache.arrow.vector.types.pojo.Field)r   ÚJClassZ	readValue)Újvm_specZomZ
pojo_Fieldr   r   r   Ú
_jvm_fieldW   s    
r/   c                 C   sl   t | ƒ}t d¡}t d¡ƒ }| |¡ |r`t d¡ƒ }| ¡ D ]\}}| ||¡ q@|||ƒS ||ƒS d S )Nz)org.apache.arrow.vector.types.pojo.Schemaújava.util.ArrayListzjava.util.HashMap)r/   r   r-   ÚaddÚitemsÚput)r.   ÚmetadataÚfieldZ
schema_clsÚfieldsÚdctÚkÚvr   r   r   Ú_jvm_schema]   s    


r:   zpa_type,jvm_specz{"name":"null"}z{"name":"bool"}z+{"name":"int","bitWidth":8,"isSigned":true}z,{"name":"int","bitWidth":16,"isSigned":true}z,{"name":"int","bitWidth":32,"isSigned":true}z,{"name":"int","bitWidth":64,"isSigned":true}z,{"name":"int","bitWidth":8,"isSigned":false}z-{"name":"int","bitWidth":16,"isSigned":false}z-{"name":"int","bitWidth":32,"isSigned":false}z-{"name":"int","bitWidth":64,"isSigned":false}z+{"name":"floatingpoint","precision":"HALF"}z-{"name":"floatingpoint","precision":"SINGLE"}z-{"name":"floatingpoint","precision":"DOUBLE"}Úsz-{"name":"time","unit":"SECOND","bitWidth":32}Úmsz2{"name":"time","unit":"MILLISECOND","bitWidth":32}Úusz2{"name":"time","unit":"MICROSECOND","bitWidth":64}Únsz1{"name":"time","unit":"NANOSECOND","bitWidth":64}z4{"name":"timestamp","unit":"SECOND","timezone":null}z9{"name":"timestamp","unit":"MILLISECOND","timezone":null}z9{"name":"timestamp","unit":"MICROSECOND","timezone":null}z8{"name":"timestamp","unit":"NANOSECOND","timezone":null}ÚUTC)Útzz9{"name":"timestamp","unit":"NANOSECOND","timezone":"UTC"}zEurope/PariszB{"name":"timestamp","unit":"NANOSECOND","timezone":"Europe/Paris"}z{"name":"date","unit":"DAY"}z${"name":"date","unit":"MILLISECOND"}é   é   z+{"name":"decimal","precision":19,"scale":4}z{"name":"utf8"}z{"name":"binary"}é
   z){"name":"fixedsizebinary","byteWidth":10}ÚnullableTFc           	      C   s  |t  ¡ kr|sd S d|t |¡g dœ}tt |¡ƒ}t |¡}t jd||d}||ks\t‚t	t |¡ƒ}t 
|¡}|t  
|g¡ksˆt‚t	t |¡ddiƒ}t 
|¡}|t  
|gddi¡ksÀt‚dddœg|d	< t	t |¡ƒ}t 
|¡}| ddi¡}|t  
|g¡kst‚d S )
NÚ
field_name©ÚnamerD   ÚtypeÚchildren)rD   ÚmetaÚdataz
field metaz
field data)ÚkeyÚvaluer4   )ÚpaÚnullÚjsonÚloadsr/   Údumpsr"   r5   r$   r:   ZschemaZwith_metadata)	r   Úpa_typer.   rD   ÚspecÚ	jvm_fieldÚresultZexpected_fieldZ
jvm_schemar   r   r   Útest_jvm_typesu   s0    2û



ÿrW   zpa_type,py_data,jvm_typeZ	BitVectoré€   ÚUInt1VectorÚUInt2VectorÚ	IntVectorZBigIntVectorZFloat4VectorZFloat8VectorZTimeStampSecVectorZTimeStampMilliVectorZTimeStampMicroVectorZTimeStampNanoVectorZDateDayVectorZDateMilliVectorc           
      C   s   d  |¡}t |¡d| ƒ}| t|ƒ¡ t|ƒD ]&\}}|dkrJt |¡}| ||¡ q0| t|ƒ¡ t	j
||d}t 
|¡}	| |	¡sŒt‚d S )Núorg.apache.arrow.vector.{}Úvector¾   rZ   rY   ©rH   )r   r   r-   ÚallocateNewÚlenÚ	enumerateÚJIntÚsetSafeÚsetValueCountrN   Úarrayr"   Úequalsr$   )
r   rS   Úpy_dataÚjvm_typeÚclsÚ
jvm_vectorr%   ÚvalÚpy_arrayÚ	jvm_arrayr   r   r   Útest_jvm_arrayÊ   s    


ro   c                 C   sR   d  d¡}t |¡d| ƒ}| ¡  t |¡}t|ƒdks<t‚|jt	 
¡ ksNt‚d S )Nr\   r[   r]   r   )r   r   r-   r`   r"   rf   ra   r$   rH   rN   Úint32)r   rj   rk   rn   r   r   r   Útest_jvm_array_emptyñ   s    

rq   z!pa_type,py_data,jvm_type,jvm_specZUInt4VectorZUInt8VectorZTinyIntVectorZSmallIntVectorc                 C   s  d  |¡}t |¡d| ƒ}| t|ƒ¡ t|ƒD ]&\}}|dkrJt |¡}| ||¡ q0| t|ƒ¡ ddt	 
|¡g dœ}	tt	 |	¡ƒ}
t d¡ƒ }| |
¡ t d¡ƒ }| |¡ t d¡}|||t|ƒƒ}tj tj||d	gd
g¡}t |¡}| |¡st‚d S )Nr\   r]   r^   rE   FrF   r0   z(org.apache.arrow.vector.VectorSchemaRootr_   Úcol)r   r   r-   r`   ra   rb   rc   rd   re   rP   rQ   r/   rR   r1   rN   ZRecordBatchZfrom_arraysrf   r"   Zrecord_batchrg   r$   )r   rS   rh   ri   r.   rj   rk   r%   rl   rT   rU   Z
jvm_fieldsZjvm_vectorsZjvm_vsrZpy_record_batchZjvm_record_batchr   r   r   Útest_jvm_record_batchý   s4    n

û


þ
rs   c                 C   s„   d}t  |¡ƒ }|d kr d|_n`d|_t  d¡dƒ}t  d¡}| |j¡}|  t|ƒ¡|_|j d|dt|ƒ¡ d|_t|ƒ|_	|S )Nz5org.apache.arrow.vector.holders.NullableVarCharHolderr   r   zjava.lang.StringÚstringz!java.nio.charset.StandardCharsets)
r   r-   ÚisSetZgetBytesZUTF_8r    ra   ZsetBytesÚstartÚend)Úrart   Znvch_clsÚholderrM   Zstd_charsetsZbytes_r   r   r   Ú_string_to_varchar_holder  s    

rz   z7from_buffers is only supported for primitive arrays yet)Úreasonc           	      C   sŠ   dd dg}d}t  |¡d| ƒ}| ¡  t|ƒD ],\}}t| dƒ}| ||¡ | |d ¡ q.tj|t 	¡ d}t
 |¡}| |¡s†t‚d S )Nrt   u   tÃ¶stz%org.apache.arrow.vector.VarCharVectorr]   r   r_   )r   r-   r`   rb   rz   rd   re   rN   rf   rt   r"   rg   r$   )	r   rK   rj   rk   r%   rt   ry   rm   rn   r   r   r   Útest_jvm_string_array¡  s    


r|   )N)5rP   r   ZpyarrowrN   Zpyarrow.jvmZjvmr"   r+   r   Úxml.etree.ElementTreeÚetreeÚElementTreer   Zimportorskipr   Zfixturer   r'   r,   r/   r:   ÚmarkZparametrizerO   Zbool_Zint8Zint16rp   Zint64Zuint8Zuint16Zuint32Zuint64Zfloat16Zfloat32Zfloat64Ztime32Ztime64Ú	timestampZdate32Zdate64Z
decimal128rt   ÚbinaryrW   Úlistr!   ro   rq   rs   rz   Zxfailr|   r   r   r   r   Ú<module>   s,  




















Ý0$î

ü
ü
ü
ü
ü
ü
ü
ü
ü
ü
ü
ü
ü
ü
ü
ük
'