
    xi!P              
         U d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZ d d	lmZmZ d d
lmZ  d dl!m"Z" d dl#m$Z$m%Z%m&Z& erd dl'm(Z( d dl)m*Z* e$e+z  dz  Z,de-d<   e$e+z  dz  Z.de-d<   e
d   Z/de-d<   e
d   Z0de-d<   e jb                  jd                  e jb                  jf                  e jb                  jh                  e jb                  jj                  e jb                  jl                  e jb                  jn                  e jb                  jp                  e jb                  jp                  e jb                  jr                  d	Z:de-d<   dddhe:jw                         Z<de-d<    ed        G d! d"             Z= G d# d$      Z>	 	 	 	 d,d%Z?d-d&Z@d.d'ZAd/d(ZBd0d)ZC	 	 	 	 	 	 d1d*ZDd2d+ZEy)3    )annotations)	dataclass)dedent)TYPE_CHECKINGAnyFinalLiteral	TypeAliascast)OptionSequenceconvert_anything_to_list)HeightLayoutConfigWidthvalidate_heightvalidate_width)maybe_raise_label_warnings)LabelVisibility get_label_visibility_proto_value)StreamlitAPIExceptionStreamlitValueError)Metric)gather_metrics)	AnyNumber
clean_textfrom_number)DeltaGenerator)NumberFormatNr
   ValueDelta)normalinverseoffredorangeyellowgreenbluevioletgraygreyprimary
DeltaColorautoupdownr#   
DeltaArrow)	r$   r%   r&   r'   r(   r)   r*   r+   r,   z3Final[dict[str, MetricProto.MetricColor.ValueType]]_DELTA_COLOR_TO_PROTOr!   r"   r#   zFinal[set[str]]_VALID_DELTA_COLORST)frozenc                  "    e Zd ZU ded<   ded<   y)MetricColorAndDirectionz!MetricProto.MetricColor.ValueTypecolorz%MetricProto.MetricDirection.ValueType	directionN)__name__
__module____qualname____annotations__     e/var/www/html/chatbot/card-advisor-bot/venv/lib/python3.12/site-packages/streamlit/elements/metric.pyr7   r7   T   s    ,,44r?   r7   c                      e Zd Z ed      	 	 ddddddddddd			 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
       Zedd       Zy)MetricMixinmetricNvisibleFstretchcontentliner/   )	helplabel_visibilityborderwidthheight
chart_data
chart_typedelta_arrowformatc       	   
     ^   t        ||       t               }t        |      |_        t	        |      |_        t        |      |_        ||_        |t        |      |_
        t        t        dt        |            |      }|j                  |_        |j                  |_        t!        t        dt        |                  }|dk7  rn|dk(  r t        j"                  j$                  |_        nI|dk(  r t        j"                  j&                  |_        n$|dk(  rt        j"                  j(                  |_        t+        |      |j,                  _        |
Vg }t1        |
      D ]  }	 |j3                  t5        |              t=        |      dkD  r|j>                  jA                  |       tC        |      |_"        |||_#        tI        |	d       tK        |d       tM        ||	      }| jN                  jQ                  d||      S # t6        $ r!}t9        d| d	t;        |       d
      |d}~ww xY w)u-  Display a metric in big bold font, with an optional indicator of how the metric changed.

        Parameters
        ----------
        label : str
            The header or title for the metric. The label can optionally
            contain GitHub-flavored Markdown of the following types: Bold, Italics,
            Strikethroughs, Inline Code, Links, and Images. Images display like
            icons, with a max height equal to the font height.

            Unsupported Markdown elements are unwrapped so only their children
            (text contents) render. Display unsupported elements as literal
            characters by backslash-escaping them. E.g.,
            ``"1\. Not an ordered list"``.

            See the ``body`` parameter of |st.markdown|_ for additional,
            supported Markdown directives.

            .. |st.markdown| replace:: ``st.markdown``
            .. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown

        value : int, float, decimal.Decimal, str, or None
            Value of the metric. ``None`` is rendered as a long dash.

            The value can optionally contain GitHub-flavored Markdown, subject
            to the same limitations described in the ``label`` parameter.

        delta : int, float, decimal.Decimal, str, or None
            Amount or indicator of change in the metric. An arrow is shown next
            to the delta, oriented according to its sign:

            - If the delta is ``None`` or an empty string, no arrow is shown.
            - If the delta is a negative number or starts with a minus sign,
              the arrow points down and the delta is red.
            - Otherwise, the arrow points up and the delta is green.

            You can modify the display, color, and orientation of the arrow
            using the ``delta_color`` and ``delta_arrow`` parameters.

            The delta can optionally contain GitHub-flavored Markdown, subject
            to the same limitations described in the ``label`` parameter.

        delta_color : str
            The color of the delta and chart. This can be one of the following:

            - ``"normal"`` (default): The color is red when the delta is
              negative and green otherwise.
            - ``"inverse"``: The color is green when the delta is negative and
              red otherwise. This is useful when a negative change is
              considered good, like a decrease in cost.
            - ``"off"``: The color is gray regardless of the delta.
            - A named color from the basic palette: The chart and delta are the
              specified color regardless of their value. This can be one of the
              following: ``"red"``, ``"orange"``, ``"yellow"``, ``"green"``,
              ``"blue"``, ``"violet"``, ``"gray"``/``"grey"``, or
              ``"primary"``.

        help : str or None
            A tooltip that gets displayed next to the metric label. Streamlit
            only displays the tooltip when ``label_visibility="visible"``. If
            this is ``None`` (default), no tooltip is displayed.

            The tooltip can optionally contain GitHub-flavored Markdown,
            including the Markdown directives described in the ``body``
            parameter of ``st.markdown``.

        label_visibility : "visible", "hidden", or "collapsed"
            The visibility of the label. The default is ``"visible"``. If this
            is ``"hidden"``, Streamlit displays an empty spacer instead of the
            label, which can help keep the widget aligned with other widgets.
            If this is ``"collapsed"``, Streamlit displays no label or spacer.

        border : bool
            Whether to show a border around the metric container. If this is
            ``False`` (default), no border is shown. If this is ``True``, a
            border is shown.

        height : "content", "stretch", or int
            The height of the metric element. This can be one of the following:

            - ``"content"`` (default): The height of the element matches the
              height of its content.
            - ``"stretch"``: The height of the element matches the height of
              its content or the height of the parent container, whichever is
              larger. If the element is not in a parent container, the height
              of the element matches the height of its content.
            - An integer specifying the height in pixels: The element has a
              fixed height. If the content is larger than the specified
              height, scrolling is enabled.

        width : "stretch", "content", or int
            The width of the metric element. This can be one of the following:

            - ``"stretch"`` (default): The width of the element matches the
              width of the parent container.
            - ``"content"``: The width of the element matches the width of its
              content, but doesn't exceed the width of the parent container.
            - An integer specifying the width in pixels: The element has a
              fixed width. If the specified width is greater than the width of
              the parent container, the width of the element matches the width
              of the parent container.

        chart_data : Iterable or None
            A sequence of numeric values to display as a sparkline chart. If
            this is ``None`` (default), no chart is displayed. The sequence can
            be anything supported by ``st.dataframe``, including a ``list`` or
            ``set``. If the sequence is dataframe-like, the first column will
            be used. Each value will be cast to ``float`` internally by
            default.

            The chart uses the color of the delta indicator, which can be
            modified using the ``delta_color`` parameter.

        chart_type : "line", "bar", or "area"
            The type of sparkline chart to display. This can be one of the
            following:

            - ``"line"`` (default): A simple sparkline.
            - ``"area"``: A sparkline with area shading.
            - ``"bar"``: A bar chart.

        delta_arrow : "auto", "up", "down", or "off"
            Controls the direction of the delta indicator arrow. This can be
            one of the following strings:

            - ``"auto"`` (default): The arrow direction follows the sign of
              ``delta``.
            - ``"up"`` or ``"down"``: The arrow is forced to point in the
              specified direction.
            - ``"off"``: No arrow is shown, but the delta value remains
              visible.

        format : str or None
            A format string controlling how numbers are displayed for ``value``
            and ``delta``. The format is only applied if the value or delta is
            numeric. If the value or delta is a string with non-numeric
            characters, the format is ignored. The format can be one of the
            following values:

            - ``None`` (default): No formatting is applied.
            - ``"plain"``: Show the full number without any formatting (e.g. "1234.567").
            - ``"localized"``: Show the number in the default locale format (e.g. "1,234.567").
            - ``"percent"``: Show the number as a percentage (e.g. "123456.70%").
            - ``"dollar"``: Show the number as a dollar amount (e.g. "$1,234.57").
            - ``"euro"``: Show the number as a euro amount (e.g. "€1,234.57").
            - ``"yen"``: Show the number as a yen amount (e.g. "¥1,235").
            - ``"accounting"``: Show the number in an accounting format (e.g. "1,234.00").
            - ``"bytes"``: Show the number in a byte format (e.g. "1.2KB").
            - ``"compact"``: Show the number in a compact format (e.g. "1.2K").
            - ``"scientific"``: Show the number in scientific notation (e.g. "1.235E3").
            - ``"engineering"``: Show the number in engineering notation (e.g. "1.235E3").
            - printf-style format string: Format the number with a printf
              specifier, like ``"%d"`` to show a signed integer (e.g. "1234") or
              ``"%.2f"`` to show a float with 2 decimal places.

        Examples
        --------
                **Example 1: Show a metric**

                >>> import streamlit as st
                >>>
                >>> st.metric(label="Temperature", value="70 °F", delta="1.2 °F")

                .. output::
                    https://doc-metric-example1.streamlit.app/
                    height: 210px

                **Example 2: Create a row of metrics**

                ``st.metric`` looks especially nice in combination with ``st.columns``.

                >>> import streamlit as st
                >>>
                >>> col1, col2, col3 = st.columns(3)
                >>> col1.metric("Temperature", "70 °F", "1.2 °F")
                >>> col2.metric("Wind", "9 mph", "-8%")
                >>> col3.metric("Humidity", "86%", "4%")

                .. output::
                    https://doc-metric-example2.streamlit.app/
                    height: 210px

                **Example 3: Modify the delta indicator**

                The delta indicator color can also be inverted or turned off.

                >>> import streamlit as st
                >>>
                >>> st.metric(
                ...     label="Gas price", value=4, delta=-0.5, delta_color="inverse"
                ... )
                >>>
                >>> st.metric(
                ...     label="Active developers",
                ...     value=123,
                ...     delta=123,
                ...     delta_color="off",
                ... )

                .. output::
                    https://doc-metric-example3.streamlit.app/
                    height: 320px

                **Example 4: Create a grid of metric cards**

                Add borders to your metrics to create a dashboard look.

                >>> import streamlit as st
                >>>
                >>> a, b = st.columns(2)
                >>> c, d = st.columns(2)
                >>>
                >>> a.metric("Temperature", "30°F", "-9°F", border=True)
                >>> b.metric("Wind", "4 mph", "2 mph", border=True)
                >>>
                >>> c.metric("Humidity", "77%", "5%", border=True)
                >>> d.metric("Pressure", "30.34 inHg", "-2 inHg", border=True)

                .. output::
                    https://doc-metric-example4.streamlit.app/
                    height: 350px

                **Example 5: Show sparklines**

                To show trends over time, add sparklines.

                >>> import streamlit as st
                >>> from numpy.random import default_rng as rng
                >>>
                >>> changes = list(rng(4).standard_normal(20))
                >>> data = [sum(changes[:i]) for i in range(20)]
                >>> delta = round(data[-1], 2)
                >>>
                >>> row = st.container(horizontal=True)
                >>> with row:
                >>>     st.metric(
                ...         "Line", 10, delta, chart_data=data, chart_type="line", border=True
                ...     )
                >>>     st.metric(
                ...         "Area", 10, delta, chart_data=data, chart_type="area", border=True
                ...     )
                >>>     st.metric(
                ...         "Bar", 10, delta, chart_data=data, chart_type="bar", border=True
                ...     )

                .. output::
                    https://doc-metric-example5.streamlit.app/
                    height: 300px

        Nr-   r2   r/   r#   r0   r1   zFOnly numeric values are supported for chart data sequence. The value '' is of type z" and cannot be converted to float.r   T)allow_content)rK   rL   rC   )layout_config))r   MetricProto_parse_valuebody_parse_labellabel_parse_deltadeltashow_borderr   rH   $_determine_delta_color_and_directionr   r   r8   r9   _parse_delta_arrowMetricDirectionNONEUPDOWNr   rI   valuer   appendfloat	Exceptionr   typelenrM   extend_parse_chart_typerN   rP   r   r   r   dg_enqueue)selfrY   rc   r[   delta_colorrH   rI   rJ   rK   rL   rM   rN   rO   rP   metric_protocolor_and_directionparsed_delta_arrowprepared_datavalexrT   s                        r@   rC   zMetricMixin.metric[   s   X 	#5*:;"}(/)%0)%0#)  &tLBz+67
 166!4!>!>/z+67
 '!U*)4)D)D)I)I&#t+)4)D)D)G)G&#v-)4)D)D)I)I&.N/
%%+ !)+M/
; !((s4 =!A%''..}="3J"?"(Ld3uD1$5@ww,mTT% ! /""%mDI; ?88 	s   H	H,H''H,c                    t        d|       S )Nr   )r   )rm   s    r@   rk   zMetricMixin.dg  s    $d++r?   )Nr!   )rY   strrc   r   r[   r    rn   r-   rH   z
str | NonerI   r   rJ   boolrK   r   rL   r   rM   zOptionSequence[Any] | NonerN   Literal['line', 'bar', 'area']rO   r2   rP   zstr | NumberFormat | Nonereturnr   )ry   r   )r:   r;   r<   r   rC   propertyrk   r>   r?   r@   rB   rB   Z   s   H
 "*@U  ,5 "155;"(,0@U@U @U 	@U
  @U @U *@U @U @U @U /@U 3@U  @U *@U  
!@U @UD
 , ,r?   rB   c                    | dk(  rt         j                  j                  S | dk(  rt         j                  j                  S t         j                  j                  S )Nbararea)rU   	ChartTypeBARAREALINE)rN   s    r@   rj   rj     sJ     U$$(((V$$)))  %%%r?   c                *    | dvrt        dg d      | S )N>   r0   r#   r/   r1   rO   r.   )r   )rO   s    r@   r^   r^     s    77!-1NOOr?   c                \    t        | t              st        d|  dt        |        d      | S )N'rR   zg, which is not an accepted type. label only accepts: str. Please convert the label to an accepted type.)
isinstancerv   	TypeErrorrg   )rY   s    r@   rX   rX     s=    eS!wmDK= 1V V
 	
 Lr?   c                B    | yt        | t              r| S t        |       S )Nu   —)r   rv   r   )rc   s    r@   rV   rV     s$    }%ur?   c                ^    | | dk(  ryt        | t              rt        |       S t        |       S )N )r   rv   r   r   r[   s    r@   rZ   rZ     s/    }%e}ur?   c                   | t         vrt        d|  d      ||dk(  r=t        t        j                  j
                  t        j                  j                        S t        |      rt        j                  j                  nt        j                  j                  }| t        v rt        t        |    |      S |t        j                  j                  k(  }| dk(  r7|rt        j                  j                  nt        j                  j                  }nV| dk(  r7|rt        j                  j                  nt        j                  j                  }nt        j                  j
                  }t        ||      S )Nr   z' is not an accepted value. delta_color only accepts: 'normal', 'inverse', 'off', or a color name ('red', 'orange', 'yellow', 'green', 'blue', 'violet', 'gray'/'grey', 'primary')r   )r8   r9   r!   r"   )r4   r   r7   rU   MetricColorGRAYr_   r`   _is_negative_deltarb   ra   r3   REDGREEN)rn   r[   cd_directionis_negativecd_colors        r@   r]   r]     s[    --#} C C
 	
 }&))..!1166
 	
 e$ 	##((((++  ++&'4"
 	
 +"="="B"BBKh  ##''((.. 	
 
		!  ##))((,, 	 **//" r?   c                H    t        t        |             j                  d      S )N-)r   rv   
startswithr   s    r@   r   r     s    #e*((--r?   )rN   rx   ry   zMetricProto.ChartType.ValueType)rO   r2   ry   r2   )rY   rv   ry   rv   )rc   r   ry   rv   )r[   r    ry   rv   )rn   r-   r[   r    ry   r7   )r[   r    ry   rw   )F
__future__r   dataclassesr   textwrapr   typingr   r   r   r	   r
   r   streamlit.dataframe_utilr   r   #streamlit.elements.lib.layout_utilsr   r   r   r   r   streamlit.elements.lib.policiesr   streamlit.elements.lib.utilsr   r   streamlit.errorsr   r   streamlit.proto.Metric_pb2r   rU   streamlit.runtime.metrics_utilr   streamlit.string_utilr   r   r   streamlit.delta_generatorr   #streamlit.elements.lib.column_typesr   rv   r   r=   r    r-   r2   r   r   ORANGEYELLOWr   BLUEVIOLETr   PRIMARYr3   keysr4   r7   rB   rj   r^   rX   rV   rZ   r]   r   r>   r?   r@   <module>r      s   # !  F F M  G H < 9 D D8@ s?T)y )s?T)y )
I    ;<
I < ""&&%%,,%%,,$$**##((%%,,##((##((&&..
N J 
 	( !	( _  $5 5 5
F, F,R
&.&$&333 3l.r?   