Ë
    úmxiÑÁ  ã                  óš  — U d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
mZmZ ddlmZmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZm Z m!Z!m"Z" dd	l#m$Z$m%Z%m&Z&m'Z' dd
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 erddl4Z5ddl6Z7ddl8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z?  e&j€                  eA«      ZBdeCd<   dZD ejŠ                  d«      ZFdeCd<   dZGdeCd<   dZHdeCd<   dZIdeCd<   dZJdeCd<   dZKdeCd<   dZLdeCd<   dZMdeCd <   d!ZNdeCd"<   d#ZOdeCd$<   d%ZPdeCd&<   d'ZQdeCd(<   d)ZRdeCd*<   d+ZSdeCd,<   d-ZTdeCd.<   d/ZUdeCd0<   d1ZVdeCd2<   d3ZWdeCd4<   d5ZXdeCd6<   d7ZYdeCd8<   d9ZZdeCd:<   d;Z[deCd<<   d=Z\deCd><   d?Z]deCd@<   dAZ^deCdB<   dCZ_deCdD<   dEZ`deCdF<    edGdH¬I«      Zae" G dJ„ dKe«      «       Zb G dL„ dMeea   «      Zc G dN„ dOe«      Zd G dP„ dQe«      Zeeea   ecea   z  edz  eez  ZfdReCdS<   e dTdUdVdWdXdYdZee   d[ebedeee)df   ZgdReCd\<    G d]„ d^e«      Zhd‡d_„Zid‡d`„Zjdˆda„Zkdˆdb„Zldˆdc„Zmdˆdd„Zndˆde„Zodˆdf„Zpdˆdg„Zqdˆdh„Zrdˆdi„Zsdˆdj„Ztdˆdk„Zudˆdl„Zvdˆdm„Zwdˆdn„Zxdˆdo„Zyd‰dp„ZzdŠdq„Z{dˆdr„Z|d‹ds„Z}	 dŒ	 	 	 	 	 d�dt„Z~dŽdu„Zd�dv„Z€d�dw„Z�eDdxf	 	 	 	 	 	 	 d‘dy„Z‚d’dz„Zƒd“d{„Z„d”d|„Z…d•d}„Z†eDf	 	 	 	 	 d–d~„Z‡d—d„Zˆ	 dŒ	 	 	 	 	 d˜d€„Z‰d™d�„ZŠ	 dŒ	 	 	 	 	 dšd‚„Z‹d›dƒ„ZŒdœd„„Z�d�d…„ZŽ	 	 	 	 	 	 džd†„Z�y)Ÿz8A bunch of useful utilities for dealing with dataframes.é    )ÚannotationsN)ÚChainMapÚUserDictÚUserListÚdeque)Ú	ItemsViewÚIterableÚMappingÚSequence)ÚEnumÚEnumMetaÚauto)ÚMappingProxyType)
ÚTYPE_CHECKINGÚAnyÚFinalÚProtocolÚ	TypeAliasÚ	TypeGuardÚTypeVarÚUnionÚcastÚruntime_checkable)ÚconfigÚerrorsÚloggerÚstring_util)Ú
CustomDictÚdump_pydantic_sequenceÚhas_callable_attrÚis_custom_dictÚis_dataclass_instanceÚis_list_likeÚis_namedtupleÚis_pydantic_modelÚis_sequence_of_pydantic_modelsÚis_typeÚis_version_less_than)Ú	DataFrameÚIndexÚSeries)Ú_iLocIndexer)ÚStylerr   Ú_LOGGERi'  z
^pandas.*$Ú_PANDAS_DATA_OBJECT_TYPE_REz.dask.dataframe.dask_expr._collection.DataFrameÚ_DASK_DATAFRAMEz+dask.dataframe.dask_expr._collection.SeriesÚ_DASK_SERIESz*dask.dataframe.dask_expr._collection.IndexÚ_DASK_INDEXzdask.dataframe.core.DataFrameÚ_DASK_DATAFRAME_LEGACYzdask.dataframe.core.SeriesÚ_DASK_SERIES_LEGACYzdask.dataframe.core.IndexÚ_DASK_INDEX_LEGACYz_duckdb.DuckDBPyRelationÚ_DUCKDB_RELATIONzduckdb.duckdb.DuckDBPyRelationÚ_DUCKDB_RELATION_LEGACYz modin.pandas.dataframe.DataFrameÚ_MODIN_DF_TYPE_STRzmodin.pandas.series.SeriesÚ_MODIN_SERIES_TYPE_STRzpandas.io.formats.style.StylerÚ_PANDAS_STYLER_TYPE_STRz polars.dataframe.frame.DataFrameÚ_POLARS_DATAFRAMEz polars.lazyframe.frame.LazyFrameÚ_POLARS_LAZYFRAMEzpolars.series.series.SeriesÚ_POLARS_SERIESzpyspark.sql.dataframe.DataFrameÚ_PYSPARK_DF_TYPE_STRz'pyspark.sql.connect.dataframe.DataFrameÚ_PYSPARK_CONNECT_DF_TYPE_STRzray.data.dataset.DatasetÚ_RAY_DATASETz$ray.data.dataset.MaterializedDatasetÚ_RAY_MATERIALIZED_DATASETz3snowflake.snowpark.modin.pandas.dataframe.DataFrameÚ_SNOWPANDAS_DF_TYPE_STRz6snowflake.snowpark.modin.plugin.extensions.index.IndexÚ_SNOWPANDAS_INDEX_TYPE_STRz-snowflake.snowpark.modin.pandas.series.SeriesÚ_SNOWPANDAS_SERIES_TYPE_STRzsnowflake.snowpark.row.RowÚ_SNOWPARK_DF_ROW_TYPE_STRz&snowflake.snowpark.dataframe.DataFrameÚ_SNOWPARK_DF_TYPE_STRzsnowflake.snowpark.table.TableÚ_SNOWPARK_TABLE_TYPE_STRzxarray.core.dataset.DatasetÚ_XARRAY_DATASET_TYPE_STRzxarray.core.dataarray.DataArrayÚ_XARRAY_DATA_ARRAY_TYPE_STRÚV_coT)Ú	covariantc                  ó8   — e Zd ZdZe	 	 dd„«       Zddd„Zd	d„Zy)
ÚDBAPICursora`  Protocol for DBAPI 2.0 Cursor objects (PEP 249).

    This is a simplified version of the DBAPI Cursor protocol
    that only contains the methods that are relevant or used for
    our DB API Integration.

    Specification: https://peps.python.org/pep-0249/
    Inspired by: https://github.com/python/typeshed/blob/main/stdlib/_typeshed/dbapi.pyi
    c                 ó   — y ©N© ©Úselfs    úO/home/htdocs/ttos/venv/lib/python3.12/site-packages/streamlit/dataframe_util.pyÚdescriptionzDBAPICursor.descriptionx   s   € ð  ó    c                ó   — y rO   rP   )rR   Úsizes     rS   Ú	fetchmanyzDBAPICursor.fetchmany‰   ó   � rU   c                 ó   — y rO   rP   rQ   s    rS   ÚfetchallzDBAPICursor.fetchallŠ   rY   rU   N)ÚreturnzdSequence[tuple[str, Any | None, int | None, int | None, int | None, int | None, bool | None]] | None).)rW   Úintr\   úSequence[Sequence[Any]])r\   r^   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚpropertyrT   rX   r[   rP   rU   rS   rM   rM   l   s.   „ ñð ðð	òó ðô  LÜ6rU   rM   c                  ó"   — e Zd ZdZedd„«       Zy)ÚDataFrameGenericAliasat  Technically not a GenericAlias, but serves the same purpose in
    OptionSequence below, in that it is a type which admits DataFrame,
    but is generic. This allows OptionSequence to be a fully generic type,
    significantly increasing its usefulness.

    We can't use types.GenericAlias, as it is only available from python>=3.9,
    and isn't easily back-ported.
    c                 ó   — y rO   rP   rQ   s    rS   ÚiloczDataFrameGenericAlias.iloc—   s   € Ø$'rU   N)r\   r,   )r_   r`   ra   rb   rc   rg   rP   rU   rS   re   re   �   s   „ ñð Ú'ó Ù'rU   re   c                  ó   — e Zd ZdZdd„Zy)ÚPandasCompatiblezFProtocol for Pandas compatible objects that have a `to_pandas` method.c                 ó   — y rO   rP   rQ   s    rS   Ú	to_pandaszPandasCompatible.to_pandasž   rY   rU   N)r\   zDataFrame | Series[Any])r_   r`   ra   rb   rk   rP   rU   rS   ri   ri   ›   s   „ ÙPä7rU   ri   c                  ó   — e Zd ZdZdd„Zy)ÚDataframeInterchangeCompatiblez…Protocol for objects support the dataframe-interchange protocol.

    https://data-apis.org/dataframe-protocol/latest/index.html
    c                 ó   — y rO   rP   )rR   Ú
allow_copys     rS   Ú__dataframe__z,DataframeInterchangeCompatible.__dataframe__§   rY   rU   N)ro   Úboolr\   r   )r_   r`   ra   rb   rp   rP   rU   rS   rm   rm   ¡   s   „ ñô
 :rU   rm   r   ÚOptionSequencer)   úSeries[Any]r-   z
Index[Any]úpa.Tablezpa.Arrayznp.ndarray[Any, np.dtype[Any]]zMapping[Any, Any]ÚDatac                  óÞ  — e Zd ZdZ e«       Z e«       Z e«       Z e«       Z e«       Z	 e«       Z
 e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z e«       Z  e«       Z! e«       Z" e«       Z# e«       Z$ e«       Z%y)Ú
DataFormatz7DataFormat is used to determine the format of the data.N)&r_   r`   ra   rb   r   ÚUNKNOWNÚEMPTYÚCOLUMN_INDEX_MAPPINGÚCOLUMN_SERIES_MAPPINGÚCOLUMN_VALUE_MAPPINGÚDASK_OBJECTÚDBAPI_CURSORÚDUCKDB_RELATIONÚKEY_VALUE_DICTÚLIST_OF_RECORDSÚLIST_OF_ROWSÚLIST_OF_VALUESÚMODIN_OBJECTÚ
NUMPY_LISTÚNUMPY_MATRIXÚPANDAS_ARRAYÚPANDAS_DATAFRAMEÚPANDAS_INDEXÚPANDAS_SERIESÚPANDAS_STYLERÚPOLARS_DATAFRAMEÚPOLARS_LAZYFRAMEÚPOLARS_SERIESÚPYARROW_ARRAYÚPYARROW_TABLEÚPYSPARK_OBJECTÚRAY_DATASETÚSET_OF_VALUESÚSNOWPANDAS_OBJECTÚSNOWPARK_OBJECTÚTUPLE_OF_VALUESÚXARRAY_DATASETÚXARRAY_DATA_ARRAYrP   rU   rS   rw   rw   Æ   sô   „ ÙAá‹f€GÙ‹F€Eá›6ÐÙ ›FÐÙ›6ÐÙ“&€KÙ“6€LÙ“f€OÙ“V€NÙ“f€OÙ“6€LÙ“V€NÙ“6€LÙ“€JÙ“6€LÙ“6€LÙ“vÐÙ“6€LÙ“F€MÙ“F€MÙ“vÐÙ“vÐÙ“F€MÙ“F€MÙ“F€MÙ“V€NÙ“&€KÙ“F€MÙ›ÐÙ“f€OÙ“f€OÙ“V€NÙ›ÑrU   rw   c                ó6   — ddl }t        |j                  | «      S )a  Return True if the current Pyarrow version is less than the input version.

    Parameters
    ----------
    v : str
        Version string, e.g. "0.25.0"

    Returns
    -------
    bool


    Raises
    ------
    InvalidVersion
        If the version strings are not valid.

    r   N)Úpyarrowr(   Ú__version__)ÚvÚpas     rS   Úis_pyarrow_version_less_thanrž   í   s   € ó& ä §¡°Ó2Ð2rU   c                ó6   — ddl }t        |j                  | «      S )a  Return True if the current Pandas version is less than the input version.

    Parameters
    ----------
    v : str
        Version string, e.g. "0.25.0"

    Returns
    -------
    bool


    Raises
    ------
    InvalidVersion
        If the version strings are not valid.
    r   N)Úpandasr(   r›   )rœ   Úpds     rS   Úis_pandas_version_less_thanr¢     s   € ó$ ä §¡°Ó2Ð2rU   c                ó  — | �/t        | t        t        t        t        t
        t        t        f«      ryt        | «      t        j                  t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  t        j$                  t        j&                  t        j(                  t        j*                  t        j,                  t        j.                  t        j0                  t        j2                  t        j4                  t        j6                  t        j8                  t        j:                  t        j<                  t        j>                  hv S )z‚True if the object is a dataframe-like object.

    This does not include basic collection types like list, dict, tuple, etc.
    F) Ú
isinstanceÚtupleÚsetÚstrÚbytesr]   Úfloatrq   Údetermine_data_formatrw   r{   r}   r~   r„   r…   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r�   r�   r‘   r’   r”   r•   r—   r˜   ©Úobjs    rS   Úis_dataframe_liker­     s  € ð €{”j ¤u¬c´3¼¼sÄEÌ4Ð&PÔQð ä  Ó%Ü×(Ñ(Ü×ÑÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×ÑÜ×#Ñ#Ü×ÑÜ× Ñ Ü× Ñ Ü×#Ñ#Ü×#Ñ#Ü× Ñ Ü× Ñ Ü× Ñ Ü×!Ñ!Ü×ÑÜ×$Ñ$Ü×"Ñ"Ü×!Ñ!Ü×$Ñ$ð-*ð ð rU   c                ó  — t        | «      xs} t        | «      xsp t        | «      xsc t        | «      xsV t	        | «      xsI t        | «      xs< t        | «      xs/ t        | «      xs" t        | «      xs t        j                  | «      S )aŽ  True if the object is one of the supported unevaluated data objects.

    Currently supported objects are:
    - Snowpark DataFrame / Table
    - PySpark DataFrame
    - Modin DataFrame / Series
    - Snowpandas DataFrame / Series / Index
    - Dask DataFrame / Series / Index
    - Ray Dataset
    - Polars LazyFrame
    - Generator functions
    - DB API 2.0 Cursor (PEP 249)
    - DuckDB Relation (Relational API)

    Unevaluated means that the data is not yet in the local memory.
    Unevaluated data objects are treated differently from other data objects by only
    requesting a subset of the data instead of loading all data into th memory
    )Úis_snowpark_data_objectÚis_pyspark_data_objectÚis_snowpandas_data_objectÚis_modin_data_objectÚis_ray_datasetÚis_polars_lazyframeÚis_dask_objectÚis_duckdb_relationÚis_dbapi_cursorÚinspectÚisgeneratorfunctionr«   s    rS   Úis_unevaluated_data_objectrº   C  sš   € ô( 	  Ó$ò 		,Ü! #Ó&ò		,ä$ SÓ)ò		,ô   Ó$ò		,ô ˜#Óò			,ô
 ˜sÓ#ò		,ô ˜#Óò		,ô ˜cÓ"ò		,ô ˜3Óò		,ô ×&Ñ& sÓ+ðrU   c                ó"   — t        | t        «      S )zLTrue if obj is a Pandas object (e.g. DataFrame, Series, Index, Styler, ...).)r'   r/   r«   s    rS   Úis_pandas_data_objectr¼   d  ó   € ä�3Ô3Ó4Ð4rU   c                óF   — t        | t        «      xs t        | t        «      S )z-True if obj is a Snowpark DataFrame or Table.)r'   rG   rF   r«   s    rS   r¯   r¯   i  s   € ä�3Ô0Ó1ÒX´W¸SÔBWÓ5XÐXrU   c                óŽ   — t        | t        «      xr4 t        | «      dkD  xr$ t        | d   t        «      xr t        | d   d«      S )z4True if obj is a list of snowflake.snowpark.row.Row.r   Úas_dict)r¤   ÚlistÚlenr'   rE   r    r«   s    rS   Úis_snowpark_row_listrÃ   n  sL   € ô 	�3œÓò 	1Ü�‹H�q‰Lò	1ä�C˜‘FÔ5Ó6ò	1ô ˜c !™f iÓ0ð	rU   c                ób   — t        | t        «      xs t        | t        «      xr t        | d«      S )z6True if obj is a PySpark or PySpark Connect dataframe.ÚtoPandas)r'   r>   r?   r    r«   s    rS   r°   r°   x  s0   € ô 	�Ô)Ó*ÒX¬g°cÔ;WÓ.Xò-ä
˜C Ó
,ð-rU   c                óÖ   — t        | t        «      xsX t        | t        «      xsF t        | t        «      xs4 t        | t        «      xs" t        | t
        «      xs t        | t        «      S )z2True if obj is a Dask DataFrame, Series, or Index.)r'   r0   r3   r1   r4   r2   r5   r«   s    rS   rµ   rµ     sg   € ô 	�”_Ó%ò 	,Ü�3Ô.Ó/ò	,ä�3œÓ%ò	,ô �3Ô+Ó,ò	,ô �3œÓ$ò		,ô
 �3Ô*Ó+ðrU   c                óF   — t        | t        «      xs t        | t        «      S )z,True if obj is of Modin Dataframe or Series.)r'   r8   r9   r«   s    rS   r²   r²   ‹  s   € ä�3Ô*Ó+ÒS¬w°sÔ<RÓ/SÐSrU   c                ój   — t        | t        «      xs" t        | t        «      xs t        | t        «      S )z5True if obj is a Snowpark Pandas DataFrame or Series.)r'   rB   rD   rC   r«   s    rS   r±   r±   �  s4   € ô 	�Ô,Ó-ò 	4Ü�3Ô3Ó4ò	4ä�3Ô2Ó3ðrU   c                ó"   — t        | t        «      S )z"True if obj is a Polars Dataframe.)r'   r;   r«   s    rS   Úis_polars_dataframerÊ   ™  ó   € ä�3Ô)Ó*Ð*rU   c                ó"   — t        | t        «      S )z True if obj is a Xarray Dataset.)r'   rH   r«   s    rS   Úis_xarray_datasetrÍ   ž  s   € ä�3Ô0Ó1Ð1rU   c                ó"   — t        | t        «      S )z"True if obj is a Xarray DataArray.)r'   rI   r«   s    rS   Úis_xarray_data_arrayrÏ   £  r½   rU   c                ó"   — t        | t        «      S )zTrue if obj is a Polars Series.)r'   r=   r«   s    rS   Úis_polars_seriesrÑ   ¨  s   € ä�3œÓ'Ð'rU   c                ó"   — t        | t        «      S )z"True if obj is a Polars Lazyframe.)r'   r<   r«   s    rS   r´   r´   ­  rË   rU   c                óF   — t        | t        «      xs t        | t        «      S )zTrue if obj is a Ray Dataset.)r'   r@   rA   r«   s    rS   r³   r³   ²  s   € ä�3œÓ%ÒP¬°Ô6OÓ)PÐPrU   c                ó"   — t        | t        «      S )zTrue if obj is a pandas Styler.)r'   r:   r«   s    rS   Úis_pandas_stylerrÕ   ·  s   € ä�3Ô/Ó0Ð0rU   c                ó"   — t        | t        «      S )zWTrue if obj looks like a DB API 2.0 Cursor.

    https://peps.python.org/pep-0249/
    )r¤   rM   r«   s    rS   r·   r·   ¼  s   € ô
 �cœ;Ó'Ð'rU   c                óF   — t        | t        «      xs t        | t        «      S )z]True if obj is a DuckDB relation.

    https://duckdb.org/docs/api/python/relational_api
    )r'   r6   r7   r«   s    rS   r¶   r¶   Ä  s   € ô �3Ô(Ó)ÒR¬W°SÔ:QÓ-RÐRrU   c                ó&   — ddl m}  || d¬«      dvS )z.Check if the list only contains scalar values.r   )Úinfer_dtypeT©Úskipna)Úmixedzunknown-array)Úpandas.api.typesrÙ   )ÚdatarÙ   s     rS   Ú_is_list_of_scalarsrß   Í  s   € å,ñ �t DÔ)Ð1KÐKÐKrU   c                ó|   — |€t        | «      S g }t        | «      D ]  \  }}||k\  r |S |j                  |«       Œ  |S )aA  Convert an iterable to a list.

    Parameters
    ----------
    iterable : Iterable
        The iterable to convert to a list.

    max_iterations : int or None
        The maximum number of iterations to perform. If None, all iterations are performed.

    Returns
    -------
    list
        The converted list.
    )rÁ   Ú	enumerateÚappend)ÚiterableÚmax_iterationsÚresultÚiÚitems        rS   Ú_iterable_to_listrè   Ö  sV   € ð$ ÐÜ�H‹~Ðà€FÜ˜XÓ&ò ‰ˆˆ4Ø�ÒØà€Mð 	�‰�dÕðð €MrU   c                ó–   — t        | j                  «      dk(  r0t        d| j                  d   «      dk(  r| j                  ddi¬«      } | S )zÕRename the first column to "value" if it is not named
    and if there is only one column in the dataframe.

    The default name of the first column is 0 if it is not named
    which is not very descriptive.
    é   r   r   Úvalue©Úcolumns)rÂ   rí   r   Úrename)Údata_dfs    rS   Ú_fix_column_namingrð   ó  sG   € ô ˆ7�?‰?Ó˜qÒ ¤T¨%°·±ÀÑ1CÓ%DÈÒ%Ið —.‘.¨!¨W¨�.Ó6ˆØ€NrU   c                óV   — ddl }t        |j                  j                  | d¬«      «      S )zìConvert a key-value dict to a Pandas DataFrame.

    Parameters
    ----------
    data : dict
        The dict to convert to a Pandas DataFrame.

    Returns
    -------
    pandas.DataFrame
        The converted Pandas DataFrame.
    r   NÚindex©Úorient)r    rð   r)   Ú	from_dict)rÞ   r¡   s     rS   Ú_dict_to_pandas_dfrö     s&   € ó ä˜bŸl™l×4Ñ4°TÀ'Ð4ÓJÓKÐKrU   c                ó:   — ddl m} t        | j                  |«      S )z(True if the dataframe has a range index.r   )Ú
RangeIndex)r    rø   r¤   rò   )Údfrø   s     rS   Úhas_range_indexrú     s   € å!ä�b—h‘h 
Ó+Ð+rU   Fc                óÖ  — ddl }ddl}ddl}t        | |j                  «      r|r| j                  «       S | S t        | |j                  |j                  |j                  j                  j                  f«      r|j	                  | «      S t        | «      r6t        d|r| j                  j                  «       «      S | j                  «      S t        | |j                  «      rCt        | j                   «      dk(  r|j	                  g «      S t#        |j	                  | «      «      S t%        | «      r.|r| j'                  «       n| } t        d| j)                  «       «      S t+        | «      r<|r| j'                  «       n| } t        d| j)                  «       j-                  «       «      S t/        | «      rm| j1                  |«      j3                  «       j)                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S t;        | «      r.|r| j                  d¬«      } t        d| j=                  «       «      S t?        | «      r<|r| j                  d¬«      } t        d| jA                  «       j-                  «       «      S tC        | «      r…| jE                  |d¬«      } t        | |j                  |j                  f«      r| j-                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d	�«       t        d| «      S tG        | «      r_| j1                  |«      j)                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d
�«       t        d| «      S tI        | «      r‘| jE                  |«      jK                  «       } t        | |j                  |j                  f«      r| j-                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S tM        | «      r_| j1                  |«      jO                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S tQ        | «      r…| d| j)                  «       } t        | |j                  |j                  f«      r| j-                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S tS        | «      r_| j1                  |«      j)                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S tU        | «      r_| j1                  |«      jW                  «       } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S tY        | «      r‘| jZ                  r!| jZ                  D �cg c]  }|r|d   nd‘Œ c}nd}|j	                  | j]                  |«      |¬«      } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S t_        | «      r-|j	                  | D �cg c]  }|ja                  «       ‘Œ c}«      S tc        | «      r	 |j	                  te        | «      «      S ti        | d«      r|j	                  | j)                  «       «      S ti        | d«      rFtk        d«      du r9|j                  jl                  jo                  | «      }	|r|	j                  «       S |	S tq        jr                  | «      rjt#        |j	                  tu         | «       |¬«      «      «      } | j                   d   |k(  r"t5        dt7        j8                  |«      › d�«       t        d| «      S t        | tv        «      r2t#        |j	                  | D �
cg c]  }
|
jx                  ‘Œ c}
«      «      S t        | tz        t|        |j~                  t€        f«      r#t#        |j	                  tƒ        | «      «      «      S t…        | «      rt‡        | j‰                  «       «      S t‹        | «      rt‡        | j�                  «       «      S t�        | «      rt‡        t‘        j’                  | «      «      S t        | t”        t–        t˜        f«      st›        | «      rt‡        t�        | «      «      S 	 t#        |j	                  | «      «      S c c}w c c}w # tf        $ r Y �Œcw xY wc c}
w # tž        $ rz}t        | tœ        «      r?t¡        j¢                  tž        «      5  t‡        | «      cddd«       cY d}~S # 1 sw Y   nxY wt¥        j¦                  dt©        | «      › d| › d�«      |‚d}~ww xY w)aU  Try to convert different formats to a Pandas Dataframe.

    Parameters
    ----------
    data : dataframe-, array-, or collections-like object
        The data to convert to a Pandas DataFrame.

    max_unevaluated_rows: int
        If unevaluated data is detected this func will evaluate it,
        taking max_unevaluated_rows, defaults to 10k.

    ensure_copy: bool
        If True, make sure to always return a copy of the data. If False, it depends on
        the type of the data. For example, a Pandas DataFrame will be returned as-is.

    Returns
    -------
    pandas.DataFrame

    r   Nzpd.DataFrameu   âš ï¸� Showing only z6 rows. Call `collect()` on the dataframe to show more.T)Údeep)Úcomputez8 rows. Call `compute()` on the data object to show more.z6 rows. Call `to_pandas()` on the dataset to show more.z; rows. Call `_to_pandas()` on the data object to show more.z9 rows. Call `toPandas()` on the data object to show more.z: rows. Call `to_pandas()` on the data object to show more.z0 rows. Call `df()` on the relation to show more.Ú rì   z4 rows. Call `fetchall()` on the Cursor to show more.r)   rk   rp   z1.5.0F)rä   z/ rows. Convert the data to a list to show more.z#
Unable to convert object of type `z1` to `pandas.DataFrame`.
Offending object:
```py
z
```)UÚarrayÚnumpyr    r¤   r)   Úcopyr+   r*   ÚapiÚ
extensionsÚExtensionArrayrÕ   r   rÞ   ÚndarrayrÂ   Úshaperð   rÊ   Úclonerk   rÑ   Úto_framer´   ÚlimitÚcollectÚ_show_data_informationr   Úsimplify_numberrÍ   Úto_dataframerÏ   Ú	to_seriesrµ   Úheadr³   r²   Ú
_to_pandasr°   rÅ   r±   r¯   r¶   rù   r·   rT   rX   rÃ   rÀ   r&   r   ÚAttributeErrorr    r¢   ÚinterchangeÚfrom_dataframer¸   r¹   rè   r   rë   r   ÚmapÚ	ArrayTyper   rÁ   r!   rö   Úto_dictr$   Ú_asdictr"   ÚdataclassesÚasdictr   r   r   r%   ÚdictÚ
ValueErrorÚ
contextlibÚsuppressr   ÚStreamlitAPIExceptionÚtype)rÞ   Úmax_unevaluated_rowsÚensure_copyrÿ   Únpr¡   Údrí   Úrowrï   ÚcÚexs               rS   Úconvert_anything_to_pandas_dfr'    sÒ  € ó2 ãÛä�$˜Ÿ™Ô%Ù)ˆt�y‰y‹{Ð3¨tÐ3ä�$˜Ÿ™ B§H¡H¨b¯f©f×.?Ñ.?×.NÑ.NÐOÔPØ�|‰|˜DÓ!Ð!ä˜ÔÜ�N¹ D§I¡I§N¡NÓ$4ÓSÐSÈÏÉÓSÐSä�$˜Ÿ
™
Ô#ô �4—:‘:‹ !Ò#ð �L‰L˜Óð	
ô $ B§L¡L°Ó$6Ó7ð	
ô ˜4Ô Ù*ˆt�z‰zŒ|°ˆÜ�N D§N¡NÓ$4Ó5Ð5ä˜ÔÙ*ˆt�z‰zŒ|°ˆÜ�N D§N¡NÓ$4×$=Ñ$=Ó$?Ó@Ð@ä˜4Ô Ø�z‰zÐ.Ó/×7Ñ7Ó9×CÑCÓEˆØ�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZHð Hôô �N DÓ)Ð)ä˜ÔÙØ—9‘9 $�9Ó'ˆDÜ�N D×$5Ñ$5Ó$7Ó8Ð8ä˜DÔ!ÙØ—9‘9 $�9Ó'ˆDÜ�N D§N¡NÓ$4×$=Ñ$=Ó$?Ó@Ð@ä�dÔØ�y‰yÐ-°tˆyÓ<ˆô �d˜RŸY™Y¨¯©Ð1Ô2Ø—=‘=“?ˆDà�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZJð Jôô �N DÓ)Ð)ä�dÔØ�z‰zÐ.Ó/×9Ñ9Ó;ˆà�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZHð Hôô �N DÓ)Ð)ä˜DÔ!Ø�y‰yÐ-Ó.×9Ñ9Ó;ˆä�d˜RŸY™Y¨¯©Ð1Ô2Ø—=‘=“?ˆDà�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZMð Môô �N DÓ)Ð)ä˜dÔ#Ø�z‰zÐ.Ó/×8Ñ8Ó:ˆØ�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZKð Kôô �N DÓ)Ð)ä  Ô&ØÐ)Ð)Ð*×4Ñ4Ó6ˆä�d˜RŸY™Y¨¯©Ð1Ô2Ø—=‘=“?ˆDà�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZLð Lôô �N DÓ)Ð)ä˜tÔ$Ø�z‰zÐ.Ó/×9Ñ9Ó;ˆØ�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZLð Lôô �N DÓ)Ð)ä˜$ÔØ�z‰zÐ.Ó/×2Ñ2Ó4ˆØ�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZBð Bôô �N DÓ)Ð)ä�tÔð >B×=MÒ=M¨×(8Ñ(8Ö9 1‘QˆQˆqŠT˜BÑÓ9ÐSWð 	ð �|‰|˜DŸN™NÐ+?Ó@È'ˆ|ÓRˆØ�:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZFð Fôô �K Ó&Ð&ä˜DÔ!Ø�|‰|°dÖ;¨s˜SŸ[™[�]Ò;Ó<Ð<ä% dÔ+ð	Ø—<‘<Ô 6°tÓ <Ó=Ð=ô ˜˜{Ô+Ø�|‰|˜DŸN™NÓ,Ó-Ð-ô 	˜$ Ô0Ü'¨Ó0°EÑ9à—&‘&×$Ñ$×3Ñ3°DÓ9ˆÙ!,ˆw�|‰|‹~Ð9°'Ð9ô ×"Ñ" 4Ô(Ü!Ø�L‰LÔ*©4«6ÐBVÔWÓXó
ˆð �:‰:�a‰=Ð0Ò0Ü"Ø&¤{×'BÑ'BÐCWÓ'XÐ&Yð ZAð Aôô �K Ó&Ð&ä�$œÔ!ä! "§,¡,ÀÖ/F¸A°·³Ò/FÓ"GÓHÐHô �$œ¤ U§_¡_´hÐ?Ô@Ü! "§,¡,¬t°D«zÓ":Ó;Ð;ô �dÔÜ! $§,¡,£.Ó1Ð1ô �TÔÜ! $§,¡,£.Ó1Ð1ô ˜TÔ"Ü!¤+×"4Ñ"4°TÓ":Ó;Ð;ô �$œÔ#3´XÐ>Ô?ÔCTØôDô "¤$ t£*Ó-Ð-ðÜ! "§,¡,¨tÓ"4Ó5Ð5ùòY :ùò <øô ò 	Úð	üò> 0Gøô8 ò Ü�dœDÔ!Ü×$Ñ$¤ZÓ0ñ 0ä)¨$Ó/÷0÷ 0÷ 0úô ×*Ñ*ð#Ü#'¨£: ,ð /ð €ð ð	ó
ð ð	ûðúsZ   Ø$eÚ5eÛe àe ä,e% å	eåeå%	g(å.)g#æf1æ"	g#æ+g(æ1f:	æ6-g#ç#g(c                ój  — 	 t        | «      } ddl} |j
                  «       } |j                  || j                  «      }|j                  | «       |j                  «        t        d|j                  «       j                  «       «      S # t        $ r!}t        j                  d|¬«       Y d}~Œ d}~ww xY w)zÐSerialize pyarrow.Table to Arrow IPC bytes.

    Parameters
    ----------
    table : pyarrow.Table
        A table to convert.

    Returns
    -------
    bytes
        The serialized Arrow IPC bytes.
    zMRecursion error while truncating Arrow table. This is not supposed to happen.©Úexc_infoNr   r¨   )Ú_maybe_truncate_tableÚRecursionErrorr.   Úwarningrš   ÚBufferOutputStreamÚRecordBatchStreamWriterÚschemaÚwrite_tableÚcloser   ÚgetvalueÚ
to_pybytes)ÚtableÚerrr�   ÚsinkÚwriters        rS   Ú"convert_arrow_table_to_arrow_bytesr9    s¥   € ð
Ü% eÓ,ˆó ð !ˆ2× Ñ Ó"€DØ'ˆR×'Ñ'¨¨e¯l©lÓ;€FØ
×Ñ�uÔØ
‡L�L„NÜ�˜Ÿ™›×3Ñ3Ó5Ó6Ð6øô% ò 	
ô
 	�‰ð"àð 	÷ 	
ñ 	
ûð	
ús   ‚B Â	B2ÂB-Â-B2c                óL  — ddl }	 |j                  j                  | «      }t        |«      S # |j                  |j                  |j
                  f$ rQ}t        j                  d|¬«       t        | «      } |j                  j                  | «      }Y d}~t        |«      S d}~ww xY w)z×Serialize pandas.DataFrame to Arrow IPC bytes.

    Parameters
    ----------
    df : pandas.DataFrame
        A dataframe to convert.

    Returns
    -------
    bytes
        The serialized Arrow IPC bytes.
    r   Nz�Serialization of dataframe to Arrow table was unsuccessful. Applying automatic fixes for column types to make the dataframe Arrow-compatible.r)  )
rš   ÚTableÚfrom_pandasÚArrowTypeErrorÚArrowInvalidÚArrowNotImplementedErrorr.   ÚinfoÚ#fix_arrow_incompatible_column_typesr9  )rù   r�   r5  r&  s       rS   Ú convert_pandas_df_to_arrow_bytesrB  7  sœ   € ó ð
)Ø—‘×$Ñ$ RÓ(ˆô .¨eÓ4Ð4øð ×Ñ˜rŸ™°×0KÑ0KÐLò )Ü�‰ð ð ð	 	ô 	
ô 1°Ó4ˆØ—‘×$Ñ$ RÓ(ŒÜ-¨eÓ4Ð4ûð)ús   †, ¬&B#Á=BÂB#c                ób   — ddl } |j                  | «      }t        d|j                  «       «      S )a†  Convert Arrow bytes (IPC format) to pandas.DataFrame.

    Using this function in production needs to make sure that
    the pyarrow version >= 14.0.1, because of a critical
    security vulnerability in pyarrow < 14.0.1.

    Parameters
    ----------
    source : bytes
        A bytes object to convert.

    Returns
    -------
    pandas.DataFrame
        The converted dataframe.
    r   Nr)   )rš   ÚRecordBatchStreamReaderr   Úread_pandas)Úsourcer�   Úreaders      rS   Ú convert_arrow_bytes_to_pandas_dfrH  T  s/   € ó" à'ˆR×'Ñ'¨Ó/€FÜ�˜V×/Ñ/Ó1Ó2Ð2rU   c                óP   — ddl m}  |«       j                  j                  | «       y)z[Show a message to the user with important information
    about the processed dataset.
    r   )Úget_dg_singleton_instanceN)Ú$streamlit.delta_generator_singletonsrJ  Úmain_dgÚcaption)ÚmsgrJ  s     rS   r  r  k  s   € õ OáÓ×'Ñ'×/Ñ/°Õ4rU   c                óz   — ddl }t        | |j                  «      rt        | «      S t	        | |«      }t        |«      S )ad  Try to convert different formats to Arrow IPC format (bytes).

    This method tries to directly convert the input data to Arrow bytes
    for some supported formats, but falls back to conversion to a Pandas
    DataFrame and then to Arrow bytes.

    Parameters
    ----------
    data : dataframe-, array-, or collections-like object
        The data to convert to Arrow bytes.

    max_unevaluated_rows: int
        If unevaluated data is detected this func will evaluate it,
        taking max_unevaluated_rows, defaults to 10k.

    Returns
    -------
    bytes
        The serialized Arrow IPC bytes.
    r   N)rš   r¤   r;  r9  r'  rB  )rÞ   r   r�   rù   s       rS   Úconvert_anything_to_arrow_bytesrP  t  s:   € ó2 ä�$˜Ÿ™Ô!Ü1°$Ó7Ð7ô 
' tÐ-AÓ	B€BÜ+¨BÓ/Ð/rU   c                óf  — | €g S t        | t        t        t        t        f«      r| gS t        | t
        «      r,| D �cg c]   }t        |t        «      r|j                  n|‘Œ" c}S t        | t        «      r#t        dt        | j                  «       «      «      S t        | «      r t        | «      st        t        d| «      «      S 	 t        | d¬«      }|j                  rg S t        dt        |j                  dd…df   j!                  «       «      «      S c c}w # t"        j$                  $ r | gcY S w xY w)a¤  Try to convert different formats to a list.

    If the input is a dataframe-like object, we just select the first
    column to iterate over. Non sequence-like objects and scalar types,
    will just be wrapped into a list.

    Parameters
    ----------
    obj : dataframe-, array-, or collections-like object
        The object to convert to a list.

    Returns
    -------
    list
        The converted list.
    Nú
list[V_co]zIterable[V_co]T)r!  r   )r¤   r§   r]   r©   rq   r   rë   r
   r   rÁ   Úkeysr#   rÃ   r'  Úemptyrg   Úto_listr   r  )r¬   Úmemberrï   s      rS   Úconvert_anything_to_listrW  š  s  € ð" €{Øˆ	ä�#œœS¤%¬Ð.Ô/àˆuˆä�#”xÔ ð SVÖVÈ¤
¨6´3Ô 7�—’¸VÑCÒVÐVä�#”wÔÜ�L¤$ s§x¡x£zÓ"2Ó3Ð3ä�CÔÔ!5°cÔ!:ô ”DÐ)¨3Ó/Ó0Ð0ðô 0°ÀÔFˆð �}Š}ð ð	
ô �l¤D¨¯©²a¸°dÑ);×)CÑ)CÓ)EÓ$FÓGð	
ùò' Wøô0 ×'Ñ'ò àˆuŠðús   ¼%DÃD Ã3D ÄD0Ä/D0c                ó  — t        j                  d«      �rht        t        j                  d«      dz  «      }t        | j                  dz   «      }| j                  }|dkD  r—||kD  r’t        j                  |||z  z  «      }t        j                  t        t        |t        j                  ||z
  dz  «      z
  ||dz  z
  |dz
  «      d«      «      }| j                  d|«      }t        ||xs d||z
  z   «      S |r…t        j                  | j                  «      }t        j                  | j                  |z   «      }||k(  r-t        | j                  «      }t        | j                  |z   «      }t        d	|› d
|› d�«       | S )aâ  Experimental feature to automatically truncate tables that
    are larger than the maximum allowed message size. It needs to be enabled
    via the server.enableArrowTruncation config option.

    Parameters
    ----------
    table : pyarrow.Table
        A table to truncate.

    truncated_rows : int or None
        The number of rows that have been truncated so far. This is used by
        the recursion logic to keep track of the total number of truncated
        rows.

    zserver.enableArrowTruncationzserver.maxMessageSizeg    €„.Arê   gš™™™™™©?g{®Gáz„?é   r   u   âš ï¸� Showing z out of z# rows due to data size limitations.)r   Ú
get_optionr]   ÚnbytesÚnum_rowsÚmathÚceilÚfloorÚmaxÚminÚslicer+  r   r  r§   r  )	r5  Útruncated_rowsÚmax_message_sizeÚ
table_sizeÚ
table_rowsÚtargeted_rowsÚsliced_tableÚdisplayed_rowsÚ
total_rowss	            rS   r+  r+  Ò  sˆ  € ô& ×ÑÐ7Õ8ô œv×0Ñ0Ð1HÓIÈCÑOÓPÐô ˜Ÿ™¨Ñ/Ó0ˆ
Ø—^‘^ˆ
à˜Š>˜jÐ+;Ò;ô !ŸI™I jÐ4DÀzÑ4QÑ&RÓSˆMô !ŸJ™JÜÜð &¬¯
©
°JÀÑ4NÐRVÑ3VÓ(WÑWà" j°4Ñ&7Ñ8à" Q™óð óóˆMð !Ÿ;™; q¨-Ó8ˆLÜ(Ø˜~Ò2°°zÀMÑ7QÑRóð ñ Ü(×8Ñ8¸¿¹ÓHˆNÜ$×4Ñ4°U·^±^ÀnÑ5TÓUˆJà Ò+ô "% U§^¡^Ó!4�Ü  §¡°.Ñ!@ÓA�
Ü"Ø! .Ð!1°¸*¸ð F5ð 5ôð
 €LrU   c                ól  — ddl m}m}m} | j                  j
                  dv ryt        | j                  «      dv ry| j                  dk(  rj || d¬«      }|dv ry|d	k(  rVt        | «      dk(  st        | d
«      syt        d| «      j                  d   } ||«      r ||«      st        |t        «      ryyy)zYReturn True if the column type is known to cause issues during
    Arrow conversion.
    r   )rÙ   Úis_dict_liker#   )r%  T>   ú	period[B]ú	period[N]ú	period[U]ú
period[ns]ú
period[us]ÚgeometryÚobjectrÚ   )zmixed-integerÚcomplexrÜ   rg   zDataFrameGenericAlias[Any]F)rÝ   rÙ   rl  r#   ÚdtypeÚkindr§   rÂ   Úhasattrr   rg   r¤   Ú	frozenset)ÚcolumnrÙ   rl  r#   Úinferred_typeÚfirst_values         rS   Ú is_colum_type_arrow_incompatibler|    sÕ   € ÷ IÑHà‡|�|×Ñð ñ ð ä
ˆ6�<‰<Óð 	ñ 	ð à‡|�|�xÒñ $ F°4Ô8ˆàð 
ñ 
ð Ø˜GÒ#ô �6‹{˜aÒ¤w¨v°vÔ'>ð ô Ð;¸VÓD×IÑIÈ!ÑLˆKñ ! Ô-ñ   Ô,ä˜k¬9Ô5ð ØàrU   c                ó†  — ddl }d}|xs | j                  D ]:  }t        | |   «      sŒ|€| j                  «       }| |   j	                  d«      ||<   Œ< |sgt        | j                  |j                  «      sGt        | j                  «      r2|€| j                  «       }| j                  j	                  d«      |_        |�|S | S )a€  Fix column types that are not supported by Arrow table.

    This includes mixed types (e.g. mix of integers and strings)
    as well as complex numbers (complex128 type). These types will cause
    errors during conversion of the dataframe to an Arrow table.
    It is fixed by converting all values of the column to strings
    This is sufficient for displaying the data on the frontend.

    Parameters
    ----------
    df : pandas.DataFrame
        A dataframe to fix.

    selected_columns: List[str] or None
        A list of columns to fix. If None, all columns are evaluated.

    Returns
    -------
    The fixed dataframe.
    r   NÚstring)r    rí   r|  r  Úastyper¤   rò   Ú
MultiIndex)rù   Úselected_columnsr¡   Údf_copyÚcols        rS   rA  rA  Z  sµ   € ó. ð !%€GØÒ- 2§:¡:ò 4ˆÜ+¨B¨s©GÕ4ØˆØŸ'™'›)�Ø˜c™7Ÿ>™>¨(Ó3ˆG�CŠLð	4ñ ÜØ�H‰HØ�M‰Mô
ô -¨R¯X©XÔ6àˆ?Ø—g‘g“iˆGØŸ™Ÿ™¨Ó1ˆŒØÐ)ˆ7Ð1¨rÐ1rU   c                óì
  — ddl }ddl}ddl}| €t        j                  S t        | |j                  «      rt        j                  S t        | |j                  «      r8t        | j                  «      dk(  rt        j                  S t        j                  S t        | |j                  «      rt        j                  S t        | |j                  «      rt        j                   S t        | |j"                  «      rt        j$                  S t        | |j&                  «      rt        j(                  S t+        | «      rt        j,                  S t        | |j.                  j0                  j2                  «      rt        j4                  S t7        | «      rt        j8                  S t;        | «      rt        j<                  S t?        | «      rt        j@                  S tC        | «      rt        jD                  S tG        | «      rt        jH                  S tK        | «      rt        jL                  S tO        | «      rt        jP                  S tS        | «      rt        jT                  S tW        | «      rt        jX                  S t[        | «      rt        j\                  S t_        | «      sta        | «      rt        jb                  S te        | «      rt        jf                  S ti        | «      rt        jj                  S t        | tl        tn        tp        f«      s,ts        | «      s!tu        | «      stw        | «      sty        | «      rt        jz                  S t        | t|        t~        f«      rt        j€                  S t        | t‚        t„        t†        tˆ        f«      ràt‹        | «      rVt        | t„        «      rt        jŒ                  S t        | t†        tˆ        f«      rt        jŽ                  S t        j�                  S t“        t•        | «      «      }t        |t–        «      sty        |«      rt        j˜                  S t        |t‚        t„        t†        tˆ        f«      rt        j€                  S t        j¦                  S t        | t–        tš        f«      rÎ| st        jz                  S t        | «      dkD  ržt“        t•        | j�                  «       «      «      }t        |t–        «      rt        jž                  S t        |t‚        t„        f«      rt        j                   S t        ||j"                  «      rt        j¢                  S t        jz                  S t        j¦                  S t¥        | «      rt        j�                  S t        j¦                  S )zðDetermine the data format of the input data.

    Parameters
    ----------
    input_data : Any
        The input data to determine the data format of.

    Returns
    -------
    DataFormat
        The data format of the input data.
    r   Nrê   )Tr   r    rš   rw   ry   r¤   r)   rˆ   r  rÂ   r  r…   r†   r;  r�   ÚArrayr�   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}   r¯   rÃ   r•   r¶   r   r·   r~   r   r   r   r"   r$   r!   r%   r€   r   rá   r‚   rÁ   r¥   r¦   rx  rß   r–   r“   rƒ   ÚnextÚiterr  r�   r
   Úvaluesrz   r|   r{   r#   rx   )Ú
input_datar"  r¡   r�   Úfirst_elementr{  s         rS   rª   rª   Œ  s   € ó ÛÛàÐÜ×ÑÐÜ�*˜bŸl™lÔ+Ü×*Ñ*Ð*Ü�*˜bŸj™jÔ)Üˆz×ÑÓ  AÒ%ô ×(Ñ(Ð(Ü×&Ñ&Ð&Ü�*˜bŸh™hÔ'Ü×'Ñ'Ð'Ü�*˜bŸh™hÔ'Ü×'Ñ'Ð'Ü�*˜bŸi™iÔ(Ü×'Ñ'Ð'Ü�*˜bŸh™hÔ'Ü×&Ñ&Ð&Ü˜
Ô#Ü×'Ñ'Ð'Ü�*˜bŸf™f×/Ñ/×>Ñ>Ô?Ü×&Ñ&Ð&Ü˜
Ô#Ü×'Ñ'Ð'Ü˜:Ô&Ü×*Ñ*Ð*Ü˜:Ô&Ü×*Ñ*Ð*Ü˜JÔ'Ü×&Ñ&Ð&Ü  Ô,Ü×+Ñ+Ð+Ü˜jÔ)Ü×(Ñ(Ð(Ü˜Ô$Ü×(Ñ(Ð(Ü˜JÔ'Ü×+Ñ+Ð+Ü�jÔ!Ü×%Ñ%Ð%Ü�jÔ!Ü×%Ñ%Ð%Ü˜zÔ*Ô.BÀ:Ô.NÜ×)Ñ)Ð)Ü˜*Ô%Ü×)Ñ)Ð)Ü�zÔ"Ü×&Ñ&Ð&äØÜ”xÔ!1Ð2ô	
ô ! Ô,Ü˜Ô$Ü˜*Ô%Ü˜ZÔ(ä×(Ñ(Ð(Ü�*œy¬)Ð4Ô5Ü×&Ñ&Ð&Ü�*œt¤U¬C´Ð;Ô<Ü˜zÔ*ä˜*¤eÔ,Ü!×1Ñ1Ð1Ü˜*¤s¬IÐ&6Ô7Ü!×/Ñ/Ð/Ü×,Ñ,Ð,ô œT *Ó-Ó.ˆÜ�m¤TÔ*Ô.?ÀÔ.NÜ×-Ñ-Ð-Ü�m¤d¬E´3¼	Ð%BÔCÜ×*Ñ*Ð*ô& ×ÑÐô% 
�J¤¤w Ô	0ÙÜ×,Ñ,Ð,Üˆz‹?˜QÒÜœt J×$5Ñ$5Ó$7Ó8Ó9ˆKä˜+¤tÔ,Ü!×6Ñ6Ð6Ü˜+¬¬e }Ô5Ü!×6Ñ6Ð6Ü˜+ r§y¡yÔ1Ü!×7Ñ7Ð7ô ×,Ñ,Ð,ô ×ÑÐô 
�jÔ	!Ü×(Ñ(Ð(ä×ÑÐrU   c                ó”   — ddl }ddl}| j                  |j                  |j                  |j
                  gd«      j                  «       S )a   Unify all missing values in a DataFrame to None.

    Pandas uses a variety of values to represent missing values, including np.nan,
    NaT, None, and pd.NA. This function replaces all of these values with None,
    which is the only missing value type that is supported by all data
    r   N)r   r    ÚreplaceÚNAÚNaTÚnanÚinfer_objects)rù   r"  r¡   s      rS   Ú_unify_missing_valuesr‘     s9   € ó Ûð �:‰:�r—u‘u˜bŸf™f b§f¡fÐ-¨tÓ4×BÑBÓDÐDrU   c                óœ   — t        | j                  «      dk7  r"t        dt        | j                  «      › d�«      ‚| j                  dd…df   S )zªConvert a Pandas DataFrame to a Pandas Series by selecting the first column.

    Raises
    ------
    ValueError
        If the DataFrame has more than one column.
    rê   ú6DataFrame is expected to have a single column but has ú.Nr   )rÂ   rí   r  rg   )rù   s    rS   Ú_pandas_df_to_seriesr•    sK   € ô ˆ2�:‰:ƒ˜!ÒÜØDÄSÈÏÉÃ_ÐDUÐUVÐWó
ð 	
ð �7‰7’1�a�4‰=ÐrU   c                óò	  — |t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  hv r| S |t         j                  k(  rCddl}| j                   r |j"                  d«      S | j$                  dd…df   j'                  «       S |t         j(                  k(  r2ddl}| j                   r |j"                  d«      S | j'                  «       S |t         j*                  k(  rddl}|j.                  j1                  | «      S |t         j2                  k(  r(ddl}|j4                  j1                  t7        | «      «      S |t         j8                  k(  rt7        | «      S |t         j:                  t         j<                  hv rddl}|j1                  | «      S |t         j@                  k(  rddl}|j1                  t7        | «      «      S |t         jB                  k(  rddl"}|jF                  jI                  | «      S |t         jJ                  k(  r(ddl"}|jL                  jO                  t7        | «      «      S |t         jP                  k(  rtS        | «      jU                  d¬«      S |t         jV                  k(  r'tS        | «      j'                  «       jY                  «       S |t         jZ                  k(  rtS        | «      jU                  d¬«      S |t         j\                  k(  rtS        | «      jU                  d¬«      S |t         j^                  k(  r| jU                  d¬«      S |t         j`                  t         jb                  t         jd                  fv r¿tS        | «      } g }tg        | jh                  «      dk(  r"| j$                  dd…df   jY                  «       }n:tg        | jh                  «      dk\  r"tk        d	tg        | jh                  «      › d
�«      ‚|t         jb                  k(  rtm        |«      S |t         jd                  k(  rto        |«      S |S |t         jp                  k(  r:tS        | «      } | j                   ri S | j$                  dd…df   jU                  «       S tk        d|› �«      ‚)a­  Convert a Pandas DataFrame to the specified data format.

    Parameters
    ----------
    df : pd.DataFrame
        The dataframe to convert.

    data_format : DataFormat
        The data format to convert to.

    Returns
    -------
    pd.DataFrame, pd.Series, pyarrow.Table, np.ndarray, xarray.Dataset,
    xarray.DataArray, polars.Dataframe, polars.Series, list, set, tuple, or dict.
        The converted dataframe.
    r   NÚrecordsró   r  rÁ   Úseriesrê   r“  r”  zUnsupported input data format: )9rw   ry   r}   r~   r   r„   r‡   rˆ   r‰   r‹   r‘   r’   r”   r•   r…   r   rT  r  rg   Úto_numpyr†   r�   rš   r;  r<  r�   r…  r•  rŠ   rŒ   r�   ÚpolarsrŽ   r—   ÚxarrayÚDatasetr  r˜   Ú	DataArrayÚfrom_seriesr�   r‘  r  r‚   Útolistrz   r|   r{   rƒ   r–   r“   rÂ   rí   r  r¥   r¦   r€   )rù   Údata_formatr"  r�   ÚplÚxrÚreturn_lists          rS   Ú convert_pandas_df_to_data_formatr¤  !  sö  € ð< Ü×ÑÜ×ÑÜ×ÑÜ×"Ñ"Ü×ÑÜ×ÑÜ×#Ñ#Ü×ÑÜ× Ñ Ü×!Ñ!Ü×ÑÜ×$Ñ$Ü×"Ñ"ðñ ð ˆ	Ø”j×+Ñ+Ò+Ûð !#§¢ˆzˆr�z‰z˜!‹}ÐF¨b¯g©g²a¸°d©m×.DÑ.DÓ.FÐFØ”j×-Ñ-Ò-Ûà "§¢ˆzˆr�z‰z˜!‹}Ð;¨b¯k©k«mÐ;Ø”j×.Ñ.Ò.Ûà�x‰x×#Ñ# BÓ'Ð'Ø”j×.Ñ.Ò.Ûà�x‰x×#Ñ#Ô$8¸Ó$<Ó=Ð=Ø”j×.Ñ.Ò.Ü# BÓ'Ð'Ø”z×2Ñ2´J×4OÑ4OÐPÑPÛà�~‰~˜bÓ!Ð!Ø”j×.Ñ.Ò.Ûà�~‰~Ô2°2Ó6Ó7Ð7Ø”j×/Ñ/Ò/Ûà�z‰z×(Ñ(¨Ó,Ð,Ø”j×2Ñ2Ò2Ûà�|‰|×'Ñ'Ô(<¸RÓ(@ÓAÐAØ”j×0Ñ0Ò0Ü$ RÓ(×0Ñ0¸	Ð0ÓBÐBØ”j×-Ñ-Ò-ä$ RÓ(×1Ñ1Ó3×:Ñ:Ó<Ð<Ø”j×5Ñ5Ò5Ü$ RÓ(×0Ñ0¸Ð0Ó?Ð?Ø”j×5Ñ5Ò5Ü$ RÓ(×0Ñ0¸Ð0Ó?Ð?Ø”j×6Ñ6Ò6Ø�z‰z ˆzÓ*Ð*ØÜ×!Ñ!Ü×"Ñ"Ü× Ñ ðñ ô
 # 2Ó&ˆØˆÜˆr�z‰z‹?˜aÒàŸ'™'¢! Q $™-×.Ñ.Ó0‰KÜ�—‘‹_ Ò!ÜðÜ˜2Ÿ:™:“Ð' qð*óð ð œ*×4Ñ4Ò4Ü˜Ó%Ð%Øœ*×2Ñ2Ò2Ü�{Ó#Ð#ØÐØ”j×/Ñ/Ò/Ü" 2Ó&ˆð —X’XˆrÐ: 2§7¡7ª1¨a¨4¡=×#8Ñ#8Ó#:Ð:ä
Ð6°{°mÐDÓ
EÐErU   )rœ   r§   r\   rq   )r¬   rs  r\   rq   )r¬   rs  r\   zTypeGuard[Styler])r¬   rs  r\   zTypeGuard[DBAPICursor])rÞ   úIterable[Any]r\   rq   rO   )rã   r¥  rä   ú
int | Noner\   z	list[Any])rï   r)   r\   r)   )rÞ   zdict[Any, Any]r\   r)   )rù   r)   r\   rq   )rÞ   r   r   r]   r!  rq   r\   r)   )r5  rt   r\   r¨   )rù   r)   r\   r¨   )rF  r¨   r\   r)   )rN  r§   r\   ÚNone)rÞ   r   r   r]   r\   r¨   )r¬   zOptionSequence[V_co]r\   rR  )r5  rt   rc  r¦  r\   rt   )ry  zSeries[Any] | Index[Any]r\   rq   )rù   r)   r�  zlist[str] | Noner\   r)   )r‰  r   r\   rw   )rù   r)   r\   r)   )rù   r)   r\   rs   )rù   r)   r   rw   r\   zƒDataFrame | Series[Any] | pa.Table | pa.Array | np.ndarray[Any, np.dtype[Any]] | tuple[Any] | list[Any] | set[Any] | dict[str, Any])�rb   Ú
__future__r   r  r  r¸   r]  ÚreÚcollectionsr   r   r   r   Úcollections.abcr   r	   r
   r   Úenumr   r   r   Útypesr   Útypingr   r   r   r   r   r   r   r   r   r   Ú	streamlitr   r   r   r   Ústreamlit.type_utilr   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r"  rš   r�   r    r)   r*   r+   Úpandas.core.indexingr,   Úpandas.io.formats.styler-   Ú
get_loggerr_   r.   Ú__annotations__Ú_MAX_UNEVALUATED_DF_ROWSÚcompiler/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rM   re   ri   rm   rr   ru   rw   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'  r9  rB  rH  r  rP  rW  r+  r|  rA  rª   r‘  r•  r¤  rP   rU   rS   ú<module>r·     sH  ðò ?å "ã Û Û Û Û 	ß ;Ó ;ß BÓ Bß %Ñ %Ý "÷÷ ÷ ÷ :Ó 9÷÷ ÷ ñ ñ ÛÛß/Ñ/Ý1Ý.à"�×"Ñ" 8Ó,€ˆÓ ,ð !Ð à%/ R§Z¡Z°Ó%>Ð ˜UÓ >àI€�Ó IØC€ˆeÓ CØA€ˆUÓ Að !@Ð ˜Ó ?Ø9Ð �UÓ 9Ø7Ð �EÓ 7Ø4Ð �%Ó 4Ø!AÐ ˜Ó AØ>Ð �EÓ >Ø <Ð ˜Ó <Ø!AÐ ˜Ó AØ=Ð �5Ó =Ø=Ð �5Ó =Ø5€�Ó 5Ø?Ð �eÓ ?Ø&OÐ ˜eÓ OØ0€ˆeÓ 0Ø#IÐ ˜5Ó IØ!VÐ ˜Ó Và<ð ˜Eó ð &UÐ ˜UÓ TØ#?Ð ˜5Ó ?ØGÐ �uÓ GØ"BÐ ˜%Ó BØ"?Ð ˜%Ó ?Ø%FÐ ˜UÓ FáØ
Øô€ð ô7�(ó 7ó ð7ô@(˜H T™Nô (ô8�xô 8ô: Xô :ð ˆT�NØ˜DÑ!ñ"àñð %ñ%ð �	ó ð ØØØØØØØ$ØˆS�MØØØØ"ØØð
ñ€€ió ô$$�ô $óN3ó03ó.$óNóB5ó
Yó
ó-ó	óTó
ó+ó
2ó
5ó
(ó
+ó
Qó
1ó
(óSóLð ;?ðØðØ-7ðàóó:ó Ló$,ð !9ØðtØ
ðtàðtð ðtð ó	tón!7óH5ó:3ó.5ð !9ð#0Ø
ð#0àð#0ð ó#0óL5ðr 37ðHØðHØ%/ðHàóHóV:ð| 9=ð/2Øð/2Ø%5ð/2àó/2ódqóhEó"ð yFØðyFØ *ðyFðôyFrU   