o
    ŀg                     @  s  d Z ddlmZ ddlZddlZddlmZ ddlm	Z	m
Z
mZ ddlZejr-ddlmZ i ddd	d
ddddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5ZG d6d7 d7ZG d8d9 d9ZdFd>d?ZdGdDdEZdS )HzE
Utility functions and objects for implementing the interchange API.
    )annotationsN)lib)
ArrowDtypeCategoricalDtypeDatetimeTZDtype)DtypeObjnullnboolbuint8Cuint16Suint32Iuint64Lint8cint16int32iint64l	halffloatefloatfdoublegstringularge_stringUbinaryzz	time32[s]ttsttmttuttntdDtdmztss:ztsm:ztsu:ztsn:tDstDmtDutDn)z
time32[ms]z
time64[us]z
time64[ns]zdate32[day]z
date64[ms]ztimestamp[s]ztimestamp[ms]ztimestamp[us]ztimestamp[ns]zduration[s]zduration[ms]zduration[us]zduration[ns]c                   @  s\   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdS )ArrowCTypesz
    Enum for Apache Arrow C type format strings.

    The Arrow C data interface:
    https://arrow.apache.org/docs/format/CDataInterface.html#data-type-description-format-strings
    r	   r   r   r   sr   r   r   r   r   r   r   r    r"   r$   r+   r,   zts{resolution}:{tz}ztt{resolution}N)__name__
__module____qualname____doc__NULLBOOLINT8UINT8INT16UINT16INT32UINT32INT64UINT64FLOAT16FLOAT32FLOAT64STRINGLARGE_STRINGDATE32DATE64	TIMESTAMPTIME rJ   rJ   Q/var/www/html/myenv/lib/python3.10/site-packages/pandas/core/interchange/utils.pyr1   =   s*    r1   c                   @  s    e Zd ZdZdZdZdZdZdS )
Endiannessz.Enum indicating the byte-order of a data-type.<>=|N)r3   r4   r5   r6   LITTLEBIGNATIVENArJ   rJ   rJ   rK   rL   _   s    rL   dtyper   returnstrc                 C  s6  t | trtjS | tdkrtjS t | trSddl}| j	}|j
|r.d|j d|j S |j
|rE|jdurEd|jd  d|j S tt|d}|durS|S tt| j d}|durb|S t| dryt| d d }tjj|d	d
S t | trtjj| jd | jd
S t | tjrtjS t d|  d)a   
    Represent pandas `dtype` as a format string in Apache Arrow C notation.

    Parameters
    ----------
    dtype : np.dtype
        Datatype of pandas DataFrame to represent.

    Returns
    -------
    str
        Format string in Apache Arrow C notation of the given `dtype`.
    Or   Nzd:,ts:M )
resolutiontzzConversion of z- to Arrow C format string is not implemented.)!
isinstancer   r1   r?   nprU   rD   r   pyarrowpyarrow_dtypetypes
is_decimal	precisionscaleis_timestampr_   unitPYARROW_CTYPESgetrW   getattrnameupperr   is_np_dtypedatetime_datarH   formatr   pdBooleanDtyper8   NotImplementedError)rU   papa_type
format_strr^   rJ   rJ   rK   dtype_to_arrow_c_fmth   s6   



rx   series	pd.Series
allow_copypd.Series | Nonec                C  sX   t | jtjs	dS | jj}t|jdkrdS |std|	 }tj
|| j| j| jdS )a  
    Rechunk a multi-chunk pyarrow array into a single-chunk array, if necessary.

    - Returns `None` if the input series is not backed by a multi-chunk pyarrow array
      (and so doesn't need rechunking)
    - Returns a single-chunk-backed-Series if the input is backed by a multi-chunk
      pyarrow array and `allow_copy` is `True`.
    - Raises a `RuntimeError` if `allow_copy` is `False` and input is a
      based by a multi-chunk pyarrow array.
    N   zFound multi-chunk pyarrow array, but `allow_copy` is False. Please rechunk the array before calling this function, or set `allow_copy=True`.)rU   rm   index)r`   rU   rr   r   array	_pa_arraylenchunksRuntimeErrorcombine_chunksSeriesrm   r~   )ry   r{   chunked_arrayarrrJ   rJ   rK   maybe_rechunk   s   r   )rU   r   rV   rW   )ry   rz   r{   r
   rV   r|   )r6   
__future__r   typingnumpyra   pandas._libsr   pandas.core.dtypes.dtypesr   r   r   pandasrr   TYPE_CHECKINGpandas._typingr   rj   r1   rL   rx   r   rJ   rJ   rJ   rK   <module>   s|    	
""
	3