
    /_i>                       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 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' 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   Z-de*d<    ed       G d d             Z. G d d      Z/	 	 	 	 d#dZ0d$dZ1d%dZ2d&dZ3d'd Z4	 	 	 	 	 	 d(d!Z5d)d"Z6y)*    )annotations)	dataclass)dedent)TYPE_CHECKINGAny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)DeltaGeneratorNr	   ValueDelta)normalinverseoff
DeltaColorautoupdownr!   
DeltaArrowT)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__     X/var/www/html/land_sniper/venv/lib/python3.12/site-packages/streamlit/elements/metric.pyr*   r*   1   s    ,,44r2   r*   c                      e Zd Z e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_arrowc          
     L   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        |      |_"        tG        |	d       tI        |d       tK        ||	      }| jL                  jO                  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.

        Tip: If you want to display a large number, it may be a good idea to
        shorten it using packages like `millify <https://github.com/azaitsev/millify>`_
        or `numerize <https://github.com/davidsa03/numerize>`_. E.g. ``1234`` can be
        displayed as ``1.2k`` using ``st.metric("Short number", millify(1234))``.

        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.

        delta : int, float, decimal.Decimal, str, or None
            Indicator of how the metric changed, rendered with an arrow below
            the metric. If delta is negative (int/float) or starts with a minus
            sign (str), the arrow points down and the text is red; else the
            arrow points up and the text is green. If None (default), no delta
            indicator is shown.

        delta_color : "normal", "inverse", or "off"
             If "normal" (default), the delta indicator is shown as described
             above. If "inverse", it is red when positive and green when
             negative. This is useful when a negative change is considered
             good, e.g. if cost decreased. If "off", delta is  shown in gray
             regardless of its value.

        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.

        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.

        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"   r'   r$   r!   r%   r&   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)r>   r?   r6   )layout_config)(r   MetricProto_parse_valuebody_parse_labellabel_parse_deltadeltashow_borderr   r;   $_determine_delta_color_and_directionr
   r   r+   r,   _parse_delta_arrowMetricDirectionNONEUPDOWNr   r<   valuer   appendfloat	Exceptionr   typelenr@   extend_parse_chart_typerA   r   r   r   dg_enqueue)selfrK   rU   rM   delta_colorr;   r<   r=   r>   r?   r@   rA   rB   metric_protocolor_and_directionparsed_delta_arrowprepared_datavalexrF   s                       r3   r6   zMetricMixin.metric8   s   B 	#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"?d3uD1$5@ww,mTT ! /""%mDI; ?88 	s   G99	H#HH#c                    t        d|       S )Nr   )r
   )r_   s    r3   r]   zMetricMixin.dgM  s    $d++r2   )Nr   )rK   strrU   r   rM   r   r`   r"   r;   z
str | Noner<   r   r=   boolr>   r   r?   r   r@   zOptionSequence[Any] | NonerA   Literal['line', 'bar', 'area']rB   r'   returnr   )rk   r   )r-   r.   r/   r   r6   propertyr]   r1   r2   r3   r5   r5   7   s    H
 "*RU  ,5 "155;"(RURU RU 	RU
  RU RU *RU RU RU RU /RU 3RU  RU 
RU RUh , ,r2   r5   c                    | dk(  rt         j                  j                  S | dk(  rt         j                  j                  S t         j                  j                  S )Nbararea)rG   	ChartTypeBARAREALINE)rA   s    r3   r\   r\   R  sJ     U$$(((V$$)))  %%%r2   c                *    | dvrt        dg d      | S )N>   r%   r!   r$   r&   rB   r#   )r   )rB   s    r3   rP   rP   ]  s    77!-1NOOr2   c                \    t        | t              st        d|  dt        |        d      | S )N'rD   zg, which is not an accepted type. label only accepts: str. Please convert the label to an accepted type.)
isinstancerh   	TypeErrorrY   )rK   s    r3   rJ   rJ   c  s=    eS!wmDK= 1V V
 	
 Lr2   c                B    | yt        | t              r| S t        |       S )Nu   —)rw   rh   r   )rU   s    r3   rH   rH   l  s$    }%ur2   c                ^    | | dk(  ryt        | t              rt        |       S t        |       S )N )rw   rh   r   r   rM   s    r3   rL   rL   t  s/    }%e}ur2   c                   | dvrt        d|  d      ||dk(  r=t        t        j                  j                  t        j
                  j                        S t        |      ru| dk(  rt        j                  j                  }n:| dk(  rt        j                  j                  }nt        j                  j                  }t        j
                  j                  }nt| dk(  rt        j                  j                  }n:| dk(  rt        j                  j                  }nt        j                  j                  }t        j
                  j                  }t        ||      S )N>   r!   r   r    rv   zS' is not an accepted value. delta_color only accepts: 'normal', 'inverse', or 'off'r{   )r+   r,   r   r    )r   r*   rG   MetricColorGRAYrQ   rR   _is_negative_deltaREDGREENrT   rS   )r`   rM   cd_colorcd_directions       r3   rO   rO   |  s(    66#} , ,
 	

 }&))..!1166
 	

 % (""..22HI%"..44H"..33H"2277(""..44HI%"..22H"..33H"2255" r2   c                H    t        t        |             j                  d      S )N-)r   rh   
startswithr|   s    r3   r   r     s    #e*((--r2   )rA   rj   rk   zMetricProto.ChartType.ValueType)rB   r'   rk   r'   )rK   rh   rk   rh   )rU   r   rk   rh   )rM   r   rk   rh   )r`   r"   rM   r   rk   r*   )rM   r   rk   ri   )7
__future__r   dataclassesr   textwrapr   typingr   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   rG   streamlit.runtime.metrics_utilr   streamlit.string_utilr   r   r   streamlit.delta_generatorr   rh   r   r0   r   r"   r'   r*   r5   r\   rP   rJ   rH   rL   rO   r   r1   r2   r3   <module>r      s   # !  ? ? M  G H < 9 D D8 s?T)y )s?T)y ) :;
I ; ;<
I < $5 5 5
X, X,v&.&$&$$$ $N.r2   