Ë
    ëmxii%  ã                   ó`   — d Z ddlZ G d„ d«      Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Z	d„ Z
d„ Zd„ Zd„ Zy)a‹  
Functions to interact with Arrow memory allocated by Arrow Java.

These functions convert the objects holding the metadata, the actual
data is not copied at all.

This will only work with a JVM running in the same process such as provided
through jpype. Modules that talk to a remote JVM like py4j will not work as the
memory addresses reported by them are not reachable in the python process.
é    Nc                   ó    — e Zd ZdZdZd„ Zd„ Zy)Ú_JvmBufferNannyz`
    An object that keeps a org.apache.arrow.memory.ArrowBuf's underlying
    memory alive.
    Nc                 óR   — |j                  «       }|j                  «        || _        y ©N)ÚgetReferenceManagerÚretainÚref_manager)ÚselfÚjvm_bufr	   s      úB/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyarrow/jvm.pyÚ__init__z_JvmBufferNanny.__init__&   s&   € Ø×1Ñ1Ó3ˆð 	×ÑÔØ&ˆÕó    c                 óR   — | j                   �| j                   j                  «        y y r   )r	   Úrelease)r
   s    r   Ú__del__z_JvmBufferNanny.__del__.   s%   € Ø×ÑÐ'Ø×Ñ×$Ñ$Õ&ð (r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   r   © r   r   r   r      s   „ ñð €Kò'ó'r   r   c                 óˆ   — t        | «      }| j                  «       }| j                  «       }t        j                  |||¬«      S )a)  
    Construct an Arrow buffer from org.apache.arrow.memory.ArrowBuf

    Parameters
    ----------

    jvm_buf: org.apache.arrow.memory.ArrowBuf
        Arrow Buffer representation on the JVM.

    Returns
    -------
    pyarrow.Buffer
        Python Buffer that references the JVM memory.
    )Úbase)r   ÚmemoryAddressÚcapacityÚpaÚforeign_buffer)r   ÚnannyÚaddressÚsizes       r   Ú
jvm_bufferr    3   s?   € ô ˜GÓ$€EØ×#Ñ#Ó%€GØ×ÑÓ€DÜ×Ñ˜W d°Ô7Ð7r   c                 óÖ  — | j                  «       }| j                  «       re|dk(  rt        j                  «       S |dk(  rt        j                  «       S |dk(  rt        j
                  «       S |dk(  rt        j                  «       S y|dk(  rt        j                  «       S |dk(  rt        j                  «       S |dk(  rt        j                  «       S |dk(  rt        j                  «       S y)zÍ
    Convert a JVM int type to its Python equivalent.

    Parameters
    ----------
    jvm_type : org.apache.arrow.vector.types.pojo.ArrowType$Int

    Returns
    -------
    typ : pyarrow.DataType
    é   é   é    é@   N)ÚgetBitWidthÚgetIsSignedr   Úint8Úint16Úint32Úint64Úuint8Úuint16Úuint32Úuint64)Újvm_typeÚ	bit_widths     r   Ú_from_jvm_int_typer2   H   sÂ   € ð ×$Ñ$Ó&€IØ×ÑÔØ˜Š>Ü—7‘7“9ÐØ˜"Š_Ü—8‘8“:ÐØ˜"Š_Ü—8‘8“:ÐØ˜"Š_Ü—8‘8“:Ðð ð ˜Š>Ü—8‘8“:ÐØ˜"Š_Ü—9‘9“;ÐØ˜"Š_Ü—9‘9“;ÐØ˜"Š_Ü—9‘9“;Ðð r   c                 óÖ   — | j                  «       j                  «       }|dk(  rt        j                  «       S |dk(  rt        j                  «       S |dk(  rt        j
                  «       S y)z×
    Convert a JVM float type to its Python equivalent.

    Parameters
    ----------
    jvm_type: org.apache.arrow.vector.types.pojo.ArrowType$FloatingPoint

    Returns
    -------
    typ: pyarrow.DataType
    ÚHALFÚSINGLEÚDOUBLEN)ÚgetPrecisionÚtoStringr   Úfloat16Úfloat32Úfloat64)r0   Ú	precisions     r   Ú_from_jvm_float_typer=   j   s\   € ð ×%Ñ%Ó'×0Ñ0Ó2€IØ�FÒÜ�z‰z‹|ÐØ	�hÒ	Ü�z‰z‹|ÐØ	�hÒ	Ü�z‰z‹|Ðð 
r   c                 ó¸  — | j                  «       j                  «       }|dk(  r*| j                  «       dk(  sJ ‚t        j                  d«      S |dk(  r*| j                  «       dk(  sJ ‚t        j                  d«      S |dk(  r*| j                  «       dk(  sJ ‚t        j
                  d«      S |d	k(  r*| j                  «       dk(  sJ ‚t        j
                  d
«      S y)zÍ
    Convert a JVM time type to its Python equivalent.

    Parameters
    ----------
    jvm_type: org.apache.arrow.vector.types.pojo.ArrowType$Time

    Returns
    -------
    typ: pyarrow.DataType
    ÚSECONDr$   ÚsÚMILLISECONDÚmsÚMICROSECONDr%   ÚusÚ
NANOSECONDÚnsN)ÚgetUnitr8   r&   r   Útime32Útime64)r0   Ú	time_units     r   Ú_from_jvm_time_typerK      sÔ   € ð × Ñ Ó"×+Ñ+Ó-€IØ�HÒØ×#Ñ#Ó%¨Ò+Ð+Ð+Ü�y‰y˜‹~ÐØ	�mÒ	#Ø×#Ñ#Ó%¨Ò+Ð+Ð+Ü�y‰y˜‹ÐØ	�mÒ	#Ø×#Ñ#Ó%¨Ò+Ð+Ð+Ü�y‰y˜‹ÐØ	�lÒ	"Ø×#Ñ#Ó%¨Ò+Ð+Ð+Ü�y‰y˜‹Ðð 
#r   c                 óZ  — | j                  «       j                  «       }| j                  «       }|�t        |«      }|dk(  rt	        j
                  d|¬«      S |dk(  rt	        j
                  d|¬«      S |dk(  rt	        j
                  d|¬«      S |d	k(  rt	        j
                  d
|¬«      S y)z×
    Convert a JVM timestamp type to its Python equivalent.

    Parameters
    ----------
    jvm_type: org.apache.arrow.vector.types.pojo.ArrowType$Timestamp

    Returns
    -------
    typ: pyarrow.DataType
    Nr?   r@   )ÚtzrA   rB   rC   rD   rE   rF   )rG   r8   ÚgetTimezoneÚstrr   Ú	timestamp)r0   rJ   Útimezones      r   Ú_from_jvm_timestamp_typerR   š   s¡   € ð × Ñ Ó"×+Ñ+Ó-€IØ×#Ñ#Ó%€HØÐÜ�x“=ˆØ�HÒÜ�|‰|˜C HÔ-Ð-Ø	�mÒ	#Ü�|‰|˜D XÔ.Ð.Ø	�mÒ	#Ü�|‰|˜D XÔ.Ð.Ø	�lÒ	"Ü�|‰|˜D XÔ.Ð.ð 
#r   c                 ó¤   — | j                  «       j                  «       }|dk(  rt        j                  «       S |dk(  rt        j                  «       S y)zÌ
    Convert a JVM date type to its Python equivalent

    Parameters
    ----------
    jvm_type: org.apache.arrow.vector.types.pojo.ArrowType$Date

    Returns
    -------
    typ: pyarrow.DataType
    ÚDAYrA   N)rG   r8   r   Údate32Údate64)r0   Úday_units     r   Ú_from_jvm_date_typerX   ´   sH   € ð ×ÑÓ!×*Ñ*Ó,€HØ�5ÒÜ�y‰y‹{ÐØ	�]Ò	"Ü�y‰y‹{Ðð 
#r   c                 ó`  — t        | j                  «       «      }| j                  «       }d}|j                  «       �sL|j	                  «       j                  «       }|dk(  rt        j                  «       }�n|dk(  rt        |«      }�n|dk(  rt        |«      }nû|dk(  rt        j                  «       }ná|dk(  rt        j                  «       }nÇ|dk(  r$t        j                  |j                  «       «      }nž|dk(  rt        j                  «       }n„|d	k(  rt        |«      }ns|d
k(  rt        |«      }nb|dk(  rt!        |«      }nQ|dk(  r3t        j"                  |j%                  «       |j'                  «       «      }nt)        d|› �«      ‚t)        d«      ‚| j+                  «       }| j-                  «       }|j/                  «       rd}nL|j1                  «       D �ci c]3  }t        |j3                  «       «      t        |j5                  «       «      “Œ5 }}t        j6                  ||||«      S c c}w )zÛ
    Construct a Field from a org.apache.arrow.vector.types.pojo.Field
    instance.

    Parameters
    ----------
    jvm_field: org.apache.arrow.vector.types.pojo.Field

    Returns
    -------
    pyarrow.Field
    NÚNullÚIntÚFloatingPointÚUtf8ÚBinaryÚFixedSizeBinaryÚBoolÚTimeÚ	TimestampÚDateÚDecimalzUnsupported JVM type: z:JVM field conversion only implemented for primitive types.)rO   ÚgetNameÚgetTypeÚ	isComplexÚ	getTypeIDr8   r   Únullr2   r=   ÚstringÚbinaryÚgetByteWidthÚbool_rK   rR   rX   Ú
decimal128r7   ÚgetScaleÚNotImplementedErrorÚ
isNullableÚgetMetadataÚisEmptyÚentrySetÚgetKeyÚgetValueÚfield)	Ú	jvm_fieldÚnamer0   ÚtypÚtype_strÚnullableÚjvm_metadataÚmetadataÚentrys	            r   rw   rw   Ç   sõ  € ô ˆy× Ñ Ó"Ó#€DØ× Ñ Ó"€Hà
€CØ×ÑÕØ×%Ñ%Ó'×0Ñ0Ó2ˆØ�vÒÜ—'‘'“)ŠCØ˜ÒÜ$ XÓ.ŠCØ˜Ò(Ü& xÓ0‰CØ˜ÒÜ—)‘)“+‰CØ˜Ò!Ü—)‘)“+‰CØÐ*Ò*Ü—)‘)˜H×1Ñ1Ó3Ó4‰CØ˜ÒÜ—(‘(“*‰CØ˜ÒÜ% hÓ/‰CØ˜Ò$Ü*¨8Ó4‰CØ˜ÒÜ% hÓ/‰CØ˜Ò"Ü—-‘- × 5Ñ 5Ó 7¸×9JÑ9JÓ9LÓM‰Cä%Ø(¨¨
Ð3ó5ð 5ô
 "ØHóJð 	Jð ×#Ñ#Ó%€HØ×(Ñ(Ó*€LØ×ÑÔØ‰ð ".×!6Ñ!6Ó!8ö:Øô ˜Ÿ™›Ó'¬¨U¯^©^Ó-=Ó)>Ñ>ð :ˆð :ä�8‰8�D˜#˜x¨Ó2Ð2ùò:s   Ç8H+c                 óp  — | j                  «       }|D �cg c]  }t        |«      ‘Œ }}| j                  «       }|j                  «       rd}nL|j	                  «       D �ci c]3  }t        |j                  «       «      t        |j                  «       «      “Œ5 }}t        j                  ||«      S c c}w c c}w )zà
    Construct a Schema from a org.apache.arrow.vector.types.pojo.Schema
    instance.

    Parameters
    ----------
    jvm_schema: org.apache.arrow.vector.types.pojo.Schema

    Returns
    -------
    pyarrow.Schema
    N)
Ú	getFieldsrw   ÚgetCustomMetadatars   rt   rO   ru   rv   r   Úschema)Ú
jvm_schemaÚfieldsÚfr}   r~   r   s         r   rƒ   rƒ     s§   € ð ×!Ñ!Ó#€FØ &Ö'˜1Œe�A�hÐ'€FÐ'Ø×/Ñ/Ó1€LØ×ÑÔØ‰ð ".×!6Ñ!6Ó!8ö:Øô ˜Ÿ™›Ó'¬¨U¯^©^Ó-=Ó)>Ñ>ð :ˆð :ä�9‰9�V˜XÓ&Ð&ùò (ùò
:s   •B.Á8B3c                 ó2  — | j                  «       j                  «       j                  «       r-| j                  «       j	                  «       }t        d|› d�«      ‚t        | j                  «       «      j                  }t        | j                  d«      «      D �cg c]  }t        |«      ‘Œ }}t        |«      dk(  rt        j                  g |¬«      S | j                  «       }| j                  «       }t        j                   j#                  ||||«      S c c}w )z¼
    Construct an (Python) Array from its JVM equivalent.

    Parameters
    ----------
    jvm_array : org.apache.arrow.vector.ValueVector

    Returns
    -------
    array : Array
    z'Cannot convert JVM Arrow array of type z$, complex types not yet implemented.Fr   )Útype)ÚgetFieldrf   rg   ÚgetMinorTyper8   rp   rw   rˆ   ÚlistÚ
getBuffersr    Úlenr   ÚarrayÚgetValueCountÚgetNullCountÚArrayÚfrom_buffers)Ú	jvm_arrayÚminor_type_strÚdtypeÚbufÚbuffersÚlengthÚ
null_counts          r   rŽ   rŽ     s   € ð ×ÑÓ×#Ñ#Ó%×/Ñ/Ô1Ø"×/Ñ/Ó1×:Ñ:Ó<ˆÜ!Ø5°nÐ5Eð F1ð 1ó2ð 	2ô �)×$Ñ$Ó&Ó'×,Ñ,€Eä˜y×3Ñ3°EÓ:Ó;ö=Øô ˜#�ð =€Gð =ô ˆ7ƒ|�qÒÜ�x‰x˜ Ô'Ð'à×$Ñ$Ó&€FØ×'Ñ'Ó)€JÜ�8‰8× Ñ  ¨°¸ÓDÐDùò=s   ÂDc                 ó  — t        | j                  «       «      }g }|j                  D ]+  }|j                  t	        | j                  |«      «      «       Œ- t        j                  j                  ||j                  |j                  ¬«      S )zê
    Construct a (Python) RecordBatch from a JVM VectorSchemaRoot

    Parameters
    ----------
    jvm_vector_schema_root : org.apache.arrow.vector.VectorSchemaRoot

    Returns
    -------
    record_batch: pyarrow.RecordBatch
    )r~   )
rƒ   Ú	getSchemaÚnamesÚappendrŽ   Ú	getVectorr   ÚRecordBatchÚfrom_arraysr~   )Újvm_vector_schema_rootÚ	pa_schemaÚarraysry   s       r   Úrecord_batchr¤   9  s€   € ô Ð-×7Ñ7Ó9Ó:€Ià€FØ—‘ò EˆØ�‰”eÐ2×<Ñ<¸TÓBÓCÕDðEô �>‰>×%Ñ%ØØ�‰Ø×#Ñ#ð &ó ð r   )r   Úpyarrowr   r   r    r2   r=   rK   rR   rX   rw   rƒ   rŽ   r¤   r   r   r   ú<module>r¦      sN   ðñ"	ó ÷'ñ 'ò(8ò*òDò*ò6/ò4ò&93òx'ò0Eó<r   