
    y-Phy%                     h    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dS )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dS )_JvmBufferNannyz`
    An object that keeps a org.apache.arrow.memory.ArrowBuf's underlying
    memory alive.
    Nc                 d    |                                 }|                                 || _        d S N)getReferenceManagerretainref_manager)selfjvm_bufr	   s      K/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/pyarrow/jvm.py__init__z_JvmBufferNanny.__init__&   s5    1133 	&    c                 J    | j         | j                                          d S d S r   )r	   release)r
   s    r   __del__z_JvmBufferNanny.__del__.   s.    '$$&&&&& ('r   )__name__
__module____qualname____doc__r	   r   r    r   r   r   r      sC          K' ' '' ' ' ' 'r   r   c                     t          |           }|                                 }|                                 }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   sK     G$$E##%%GDWd7777r   c                    |                                  }|                                 rf|dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S dS |dk    rt          j                    S |dk    rt          j                    S |dk    rt          j	                    S |dk    rt          j
                    S dS )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 >>799"__8::"__8::"__8:: _ >>8::"__9;;"__9;;"__9;; _r   c                     |                                                                  }|dk    rt          j                    S |dk    rt          j                    S |dk    rt          j                    S dS )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   sn     %%''0022IFz||	h		z||	h		z|| 
	r   c                    |                                                                  }|dk    r.|                                 dk    sJ t          j        d          S |dk    r.|                                 dk    sJ t          j        d          S |dk    r.|                                 dk    sJ t          j        d          S |d	k    r.|                                 dk    sJ t          j        d
          S dS )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~~	m	#	###%%++++y	m	#	###%%++++y	l	"	"##%%++++y 
#	"r   c                 |   |                                                                  }|                                 }|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 dS )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|CH----	m	#	#|DX....	m	#	#|DX....	l	"	"|DX.... 
#	"r   c                     |                                                                  }|dk    rt          j                    S |dk    rt          j                    S dS )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      sW     !!**,,H5y{{	]	"	"y{{ 
#	"r   c                    t          |                                           }|                                 }d}|                                s|                                                                }|dk    rt          j                    }n]|dk    rt          |          }nF|dk    rt          |          }n/|dk    rt          j
                    }n|dk    rt          j                    }n|dk    r't          j        |                                          }n|dk    rt          j                    }n|d	k    rt          |          }n|d
k    rt          |          }n|dk    rt!          |          }nq|dk    r:t          j        |                                |                                          }n1t)          d                    |                    t)          d          |                                 }|                                 }|                                rd}nd |                                D             }t          j        ||||          S )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.c                     i | ]C}t          |                                          t          |                                          DS r   rO   getKeygetValue.0entrys     r   
<dictcomp>zfield.<locals>.<dictcomp>   L     : : : ''U^^-=-=)>)> : : :r   )rO   getNamegetType	isComplex	getTypeIDr8   r   nullr2   r=   stringbinarygetByteWidthbool_rK   rR   rX   
decimal128r7   getScaleNotImplementedErrorformat
isNullablegetMetadataisEmptyentrySetfield)	jvm_fieldnamer0   typtype_strnullablejvm_metadatametadatas           r   r   r      sb    y  ""##D  ""H
C J%%''0022v'))CC$X..CC((&x00CC)++CC!!)++CC***)H113344CC(**CC%h//CC$$*844CC%h//CC""- 5 5 7 79J9J9L9LMMCC%*11(;;= = =
 "HJ J 	J ##%%H((**L :: :!-!6!6!8!8: : :8D#x222r   c                     |                                  }d |D             }|                                 }|                                rd}nd |                                D             }t	          j        ||          S )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
    c                 ,    g | ]}t          |          S r   )r   )rj   fs     r   
<listcomp>zschema.<locals>.<listcomp>  s    '''1eAhh'''r   Nc                     i | ]C}t          |                                          t          |                                          DS r   rf   ri   s     r   rl   zschema.<locals>.<dictcomp>  rm   r   )	getFieldsgetCustomMetadatar}   r~   r   schema)
jvm_schemafieldsr   r   s       r   r   r     s     !!##F'''''F//11L :: :!-!6!6!8!8: : :9VX&&&r   c                    |                                                                                                  rH|                                                                 }t          d                    |                    t          |                                            j        }d t          | 
                    d                    D             }t          |          dk    rt          j        g |          S |                                 }|                                 }t          j                            ||||          S )z
    Construct an (Python) Array from its JVM equivalent.

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

    Returns
    -------
    array : Array
    zMCannot convert JVM Arrow array of type {}, complex types not yet implemented.c                 ,    g | ]}t          |          S r   )r    )rj   bufs     r   r   zarray.<locals>.<listcomp>-  s.     = = = # = = =r   Fr   )type)getFieldro   rp   getMinorTyper8   ry   rz   r   r   list
getBufferslenr   arraygetValueCountgetNullCountArrayfrom_buffers)	jvm_arrayminor_type_strdtypebufferslength
null_counts         r   r   r     s-    ##%%//11 J"//11::<<!228&2H2HJ J 	J )$$&&'',E= =y33E::;;= = =G 7||qx''''$$&&F''))J8  DDDr   c                    t          |                                           }g }|j        D ]7}|                    t	          |                     |                               8t          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arraysr   s       r   record_batchr   9  s     -7799::IF E Ee2<<TBBCCDDDD>%%# &   r   )r   pyarrowr   r   r    r2   r=   rK   rR   rX   r   r   r   r   r   r   r   <module>r      s   "	 	    ' ' ' ' ' ' ' '(8 8 8*  D  *  6/ / /4  &93 93 93x' ' '0E E E<    r   