
    g                       d dl mZ d dlmZ d dlmZmZmZ d dlm	Z	 d dl
mZ erd dlmZ d dlmZ d dlmZ dd	Zdd
ZddZ	 	 	 	 	 	 	 	 ddZ edeeef         ZddZ	 d	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZddZy)    )annotations)Mapping)TYPE_CHECKINGAnyTypeVar)dataframe_util)StreamlitAPIException)	DataFrame)Styler)Arrowc           	        ddl }|j                  }|j                  t        |j                  j
                  j                  j                        kD  rQt        d|j                   d|j                  j
                  j                  j                   d|j                   d      t        | ||       |j                          |j                  dd      }t        | |       t        | ||       t        | ||       y)ao  Marshall pandas.Styler into an Arrow proto.

    Parameters
    ----------
    proto : proto.Arrow
        Output. The protobuf for Streamlit Arrow proto.

    styler : pandas.Styler
        Helps style a DataFrame or Series according to the data with HTML and CSS.

    default_uuid : str
        If pandas.Styler uuid is not provided, this value will be used.

    r   NzThe dataframe has `zc` cells, but the maximum number of cells allowed to be rendered by Pandas Styler is configured to `z`. To allow more cells to be styled, you can change the `"styler.render.max_elements"` config. For example: `pd.set_option("styler.render.max_elements", z)`F)pandasdatasizeintoptionsstylerrendermax_elementsr	   _marshall_uuid_compute
_translate_marshall_caption_marshall_styles_marshall_display_values)protor   default_uuidpdstyler_data_dfpandas_styless         _/var/www/openai/venv/lib/python3.12/site-packages/streamlit/elements/lib/pandas_styler_utils.pymarshall_stylerr"      s     #);;NS!2!2!9!9!F!FGG#!."5"5!6 7

!!((556 7<<J<O<O;PPR	T
 	
 5&,/ OO%%eU3MeV$UFM2UNMB    c                    |j                   |j                  |       t        |j                         | j                  _         y)at  Marshall pandas.Styler uuid into an Arrow proto.

    Parameters
    ----------
    proto : proto.Arrow
        Output. The protobuf for Streamlit Arrow proto.

    styler : pandas.Styler
        Helps style a DataFrame or Series according to the data with HTML and CSS.

    default_uuid : str
        If pandas.Styler uuid is not provided, this value will be used.

    N)uuidset_uuidstrr   )r   r   r   s      r!   r   r   G   s/     {{%FKK(ELLr#   c                T    |j                   |j                   | j                  _         yy)a  Marshall pandas.Styler caption into an Arrow proto.

    Parameters
    ----------
    proto : proto.Arrow
        Output. The protobuf for Streamlit Arrow proto.

    styler : pandas.Styler
        Helps style a DataFrame or Series according to the data with HTML and CSS.

    N)captionr   )r   r   s     r!   r   r   \   s#     ~~!%~~ "r#   c                v   g }d|v rA|d   }t        |      }|D ],  }t        d||j                  d      }|j                  |       . d|v r?|d   }t        |      }|D ]*  }t        d||j                        }|j                  |       , t	        |      dkD  r!dj                  |      | j                  _        yy)	aR  Marshall pandas.Styler styles into an Arrow proto.

    Parameters
    ----------
    proto : proto.Arrow
        Output. The protobuf for Streamlit Arrow proto.

    styler : pandas.Styler
        Helps style a DataFrame or Series according to the data with HTML and CSS.

    styles : dict
        pandas.Styler translated styles.

    table_styles )	separator	cellstyle
cell_styler   
N)_trim_pandas_styles_pandas_style_to_cssr%   appendlenjoinr   styles)r   r   r6   	css_rulesr+   styleruler.   s           r!   r   r   l   s    " In-*<8!E (v{{cD T" " f;'	'	2	E'eV[[IDT"  9~"ii	2 r#   M)boundc                X    | D cg c]  }t        d |d   D              s| c}S c c}w )zFilter out empty styles.

    Every cell will have a class, but the list of props
    may just be [['', '']].

    Parameters
    ----------
    styles : list
        pandas.Styler translated styles.

    c              3  2   K   | ]  }t        |        y w)Nany).0ys     r!   	<genexpr>z&_trim_pandas_styles.<locals>.<genexpr>   s     $@ZSVZs   propsr>   )r6   xs     r!   r1   r1      s-     Av!$@QwZ$@!@AvAAAs   ''c                T   g }|d   D ]:  \  }}|j                         dz   |j                         z   }|j                  |       < d| }| dk(  r|d   g}	n|d   }	g }
|	D ]  }|
j                  ||z   |z           dj                  |
      }dj                  |      }|d	z   |z   d
z   }|S )aT  Convert pandas.Styler translated style to CSS.

    Parameters
    ----------
    style_type : str
        Either "table_styles" or "cell_style".

    style : dict
        pandas.Styler translated style.

    uuid : str
        pandas.Styler uuid.

    separator : str
        A string separator used between table and cell selectors.

    rC   z: z#T_r+   selector	selectorsz, z; z { z })stripr3   r5   )
style_typer8   r%   r-   declarationscss_property	css_valuedeclarationtable_selectorcell_selectorsrG   cell_selectorrF   declaration_blockrule_sets                  r!   r2   r2      s    . L#(>i"((*T1IOO4EEK( $2 4&\N ^#
+,{+I')3mCD (yy#H		,/%"33d:HOr#   c                d    t        ||      }t        j                  |      | j                  _        y)a0  Marshall pandas.Styler display values into an Arrow proto.

    Parameters
    ----------
    proto : proto.Arrow
        Output. The protobuf for Streamlit Arrow proto.

    df : pandas.DataFrame
        A dataframe with original values.

    styles : dict
        pandas.Styler translated styles.

    N)_use_display_valuesr    convert_pandas_df_to_arrow_bytesr   display_values)r   dfr6   new_dfs       r!   r   r      s*    " !V,F"0"Q"Q#ELLr#   c                <   ddl }| j                  t              }|j                  d      }d|v rm|d   }|D ]c  }|D ]\  }d|v s|j	                  |d         x}st        t        |j                               \  }	}
t        |d         |j                  |	|
f<   ^ e |S )zCreate a new pandas.DataFrame where display values are used instead of original ones.

    Parameters
    ----------
    df : pandas.DataFrame
        A dataframe with original values.

    styles : dict
        pandas.Styler translated styles.

    r   Nzrow(\d+)_col(\d+)bodyiddisplay_value)	reastyper'   compilematchmapr   groupsiat)rW   r6   r]   rX   cell_selector_regexrowsrowcellr`   rcs              r!   rT   rT      s     
 YYs^F**%9:f~C4< 3 9 9$t* EEuE"371+.tO/D+E

1a4(	   Mr#   N)r   
ArrowProtor   r   r   r'   returnNone)r   rj   r   r   rk   rl   )r   rj   r   r   r6   Mapping[str, Any]rk   rl   )r6   list[M]rk   rn   ) )
rI   r'   r8   rm   r%   r'   r-   r'   rk   r'   )r   rj   rW   r
   r6   rm   rk   rl   )rW   r
   r6   rm   rk   r
   )
__future__r   collections.abcr   typingr   r   r   	streamlitr   streamlit.errorsr	   r   r
   pandas.io.formats.styler   streamlit.proto.Arrow_pb2r   rj   r"   r   r   r   r'   r:   r1   r2   r   rT    r#   r!   <module>rx      s    # # . . $ 2 .=&CR)*. &3&3%&3/@&3	&3R CwsCx()B& 	444 4 	4
 	4n$.?	.r#   