o
    Yh                      @  s   d Z ddlmZ ddlZddlmZmZmZ ddlm	Z	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rHdd
lmZ ddlmZ G dd dZ		dd ddZdS )!z/Streamlit support for Matplotlib PyPlot charts.    )annotationsN)TYPE_CHECKINGAnycast)make_deprecated_name_warningshow_deprecation_warning)marshall_images)LayoutConfigWidthvalidate_width)	ImageList)gather_metrics)Figure)DeltaGeneratorc                   @  s:   e Zd Zed		dddddddZedddZdS )PyplotMixinpyplotNstretch)widthuse_container_widthfigFigure | Noneclear_figurebool | Noner   r
   r   kwargsr   returnr   c                K  s   |durt tdddddddd |rd	nd
}|st d t|dd t|d}t }t| j ||||fi | | jjd||dS )a  Display a matplotlib.pyplot figure.

        .. Important::
            You must install ``matplotlib>=3.0.0`` to use this command. You can
            install all charting dependencies (except Bokeh) as an extra with
            Streamlit:

            .. code-block:: shell

               pip install streamlit[charts]

        Parameters
        ----------
        fig : Matplotlib Figure
            The Matplotlib ``Figure`` object to render. See
            https://matplotlib.org/stable/gallery/index.html for examples.

            .. note::
                When this argument isn't specified, this function will render the global
                Matplotlib figure object. However, this feature is deprecated and
                will be removed in a later version.

        clear_figure : bool
            If True, the figure will be cleared after being rendered.
            If False, the figure will not be cleared after being rendered.
            If left unspecified, we pick a default based on the value of ``fig``.

            - If ``fig`` is set, defaults to ``False``.

            - If ``fig`` is not set, defaults to ``True``. This simulates Jupyter's
              approach to matplotlib rendering.

        width : "stretch", "content", or int
            The width of the chart 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.

        use_container_width : bool
            Whether to override the figure's native width with the width of
            the parent container. If ``use_container_width`` is ``True``
            (default), Streamlit sets the width of the figure to match the
            width of the parent container. If ``use_container_width`` is
            ``False``, Streamlit sets the width of the chart to fit its
            contents according to the plotting library, up to the width of the
            parent container.

        **kwargs : any
            Arguments to pass to Matplotlib's savefig function.

        .. deprecated::
            ``use_container_width`` is deprecated and will be removed in a
            future release. For ``use_container_width=True``, use
            ``width="stretch"``. For ``use_container_width=False``, use
            ``width="content"``.

        Example
        -------
        >>> import matplotlib.pyplot as plt
        >>> import streamlit as st
        >>> from numpy.random import default_rng as rng
        >>>
        >>> arr = rng(0).normal(1, 1, size=100)
        >>> fig, ax = plt.subplots()
        >>> ax.hist(arr, bins=20)
        >>>
        >>> st.pyplot(fig)

        .. output::
           https://doc-pyplot.streamlit.app/
           height: 630px

        Matplotlib supports several types of "backends". If you're getting an
        error using Matplotlib with Streamlit, try setting your backend to "TkAgg"::

            echo "backend: TkAgg" >> ~/.matplotlib/matplotlibrc

        For more information, see https://matplotlib.org/faq/usage_faq.html.

        Nr   r   z
2025-12-31znFor `use_container_width=True`, use `width='stretch'`. For `use_container_width=False`, use `width='content'`.F)include_st_prefix)show_in_browserr   contenta%  
Calling `st.pyplot()` without providing a figure argument has been deprecated
and will be removed in a later version as it requires the use of Matplotlib's
global figure object, which is not thread-safe.

To future-proof this code, you should pass in a figure as shown below:

```python
fig, ax = plt.subplots()
ax.scatter([1, 2, 3], [1, 2, 3])
# other plotting actions...
st.pyplot(fig)
```

If you have a specific use case that requires this functionality, please let us
know via [issue on Github](https://github.com/streamlit/streamlit/issues).
T)allow_content)r   imgs)layout_config)	r   r   r   r	   ImageListProtomarshalldg_get_delta_path_str_enqueue)selfr   r   r   r   r   r    image_list_proto r(   Z/var/www/html/Persson_Maskin/env/lib/python3.10/site-packages/streamlit/elements/pyplot.pyr   &   s6   b
zPyplotMixin.pyplotc                 C  s
   t d| S )zGet our DeltaGenerator.r   )r   )r&   r(   r(   r)   r#      s   
zPyplotMixin.dg)NN)r   r   r   r   r   r
   r   r   r   r   r   r   )r   r   )__name__
__module____qualname__r   r   propertyr#   r(   r(   r(   r)   r   %   s     r   Tcoordinatesstrr'   r!   r    r	   r   r   r   r   r   r   r   Nonec           	   
     s   zdd l m} |  W n ty   tdw |s%|d u r d}td|}dddd} fd	d
| D } | t }|j	|fi   t
| |d ||dddd |r\|  d S d S )Nr   z$pyplot() command requires matplotlibTr   tight   png)bbox_inchesdpiformatc                   s   i | ]\}}|  ||qS r(   )get).0abr   r(   r)   
<dictcomp>   s    zmarshall.<locals>.<dictcomp>FRGBPNG)r.   imagecaptionr    
proto_imgsclampchannelsoutput_format)matplotlib.pyplotr   ioffImportErrorr   itemsupdateioBytesIOsavefigr   clf)	r.   r'   r    r   r   r   pltoptionsr?   r(   r;   r)   r"      s8   

r"   )NT)r.   r/   r'   r!   r    r	   r   r   r   r   r   r   r   r0   )__doc__
__future__r   rJ   typingr   r   r   streamlit.deprecation_utilr   r   "streamlit.elements.lib.image_utilsr   #streamlit.elements.lib.layout_utilsr	   r
   r   streamlit.proto.Image_pb2r   r!   streamlit.runtime.metrics_utilr   matplotlib.figurer   streamlit.delta_generatorr   r   r"   r(   r(   r(   r)   <module>   s"    