o
    hc                     @  s   d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 er.ddl
mZmZmZ ddlmZ d$ddZ	d%d&ddZd'ddZd(ddZd)d d!Zd*d"d#ZdS )+ztData marshalling utilities for ArrowTable protobufs, which are used by
CustomComponent for dataframe serialization.
    )annotations)TYPE_CHECKINGAny)dataframe_util)pandas_styler_utils)	DataFrameIndexSeries)
ArrowTableitemr   returnc                 C  s   t | tr	t| S | S )z;Convert a tuple to a list. Leave as is if it's not a tuple.)
isinstancetuplelist)r    r   [/var/www/vscode/kcb/lib/python3.10/site-packages/streamlit/components/v1/component_arrow.py_maybe_tuple_to_list    s   r   NprotoArrowTableProtodatadefault_uuid
str | NoneNonec                 C  sH   t |rt| || t |}t| |j t| |j t	| | dS )a:  Marshall data into an ArrowTable proto.

    Parameters
    ----------
    proto : proto.ArrowTable
        Output. The protobuf for a Streamlit ArrowTable proto.

    data : pandas.DataFrame, pandas.Styler, numpy.ndarray, Iterable, dict, or None
        Something that is or can be converted to a dataframe.

    N)
r   is_pandas_stylerr   marshall_stylerconvert_anything_to_pandas_df_marshall_indexindex_marshall_columnscolumns_marshall_data)r   r   r   dfr   r   r   marshall%   s   

r"   r   r   c                 C  .   ddl }tt|j}||}t|| _dS )aH  Marshall pandas.DataFrame index into an ArrowTable proto.

    Parameters
    ----------
    proto : proto.ArrowTable
        Output. The protobuf for a Streamlit ArrowTable proto.

    index : pd.Index
        Index to use for resulting frame.
        Will default to RangeIndex (0, 1, 2, ..., n) if no index is provided.

    r   N)pandasmapr   valuesr   r    convert_pandas_df_to_arrow_bytesr   )r   r   pdindex_dfr   r   r   r   <      
r   r   r	   c                 C  r#   )a[  Marshall pandas.DataFrame columns into an ArrowTable proto.

    Parameters
    ----------
    proto : proto.ArrowTable
        Output. The protobuf for a Streamlit ArrowTable proto.

    columns : Series
        Column labels to use for resulting frame.
        Will default to RangeIndex (0, 1, 2, ..., n) if no column labels are provided.

    r   N)r$   r%   r   r&   r   r   r'   r   )r   r   r(   
columns_dfr   r   r   r   P   r*   r   r!   r   c                 C  s   t || _dS )zMarshall pandas.DataFrame data into an ArrowTable proto.

    Parameters
    ----------
    proto : proto.ArrowTable
        Output. The protobuf for a Streamlit ArrowTable proto.

    df : pandas.DataFrame
        A dataframe to marshall.

    N)r   r'   r   )r   r!   r   r   r   r    d   s   r    c                 C  sf   t dr	tdddl}t | j}t | j}t | j}|j|	 |	 j
 |	 j
 dS )zConvert ArrowTable proto to pandas.DataFrame.

    Parameters
    ----------
    proto : proto.ArrowTable
        Output. pandas.DataFrame

    z14.0.1zThe installed pyarrow version is not compatible with this component. Please upgrade to 14.0.1 or higher: pip install -U pyarrowr   N)r   r   )r   is_pyarrow_version_less_thanRuntimeErrorr$    convert_arrow_bytes_to_pandas_dfr   r   r   r   to_numpyTtolist)r   r(   r   r   r   r   r   r   arrow_proto_to_dataframes   s   

r2   )r   r   r   r   )N)r   r   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r	   r   r   )r   r   r!   r   r   r   )r   r   r   r   )__doc__
__future__r   typingr   r   	streamlitr   streamlit.elements.libr   r$   r   r   r	   streamlit.proto.Components_pb2r
   r   r   r"   r   r   r    r2   r   r   r   r   <module>   s   



