
    gZ                     D    d dl Zd dlmZ ddlmZ d dlmZ  G d d      Zy)    N)cbook   )RendererAgg)process_figure_for_rasterizingc                   .    e Zd ZdZ	 	 ddZd Zd Zd Zy)MixedModeRenderera&  
    A helper class to implement a renderer that switches between
    vector and raster drawing.  An example may be a PDF writer, where
    most things are drawn with PDF vector commands, but some very
    complex objects, such as quad meshes, are rasterised and then
    output as images.
    Nc                     |t         }|| _        || _        || _        || _        || _        d| _        || _        |j                  | _        || _	        || _
        y)a(  
        Parameters
        ----------
        figure : `~matplotlib.figure.Figure`
            The figure instance.
        width : scalar
            The width of the canvas in logical units
        height : scalar
            The height of the canvas in logical units
        dpi : float
            The dpi of the canvas
        vector_renderer : `~matplotlib.backend_bases.RendererBase`
            An instance of a subclass of
            `~matplotlib.backend_bases.RendererBase` that will be used for the
            vector drawing.
        raster_renderer_class : `~matplotlib.backend_bases.RendererBase`
            The renderer class to use for the raster drawing.  If not provided,
            this will use the Agg backend (which is currently the only viable
            option anyway.)

        N)r   _raster_renderer_class_width_heightdpi_vector_renderer_raster_rendererfigure_figdpi_bbox_inches_restore	_renderer)selfr   widthheightr   vector_rendererraster_renderer_classbbox_inches_restores           ^/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/backends/backend_mixed.py__init__zMixedModeRenderer.__init__   s`    0 !($/!&;# / $
 zz$7!(    c                 .    t        | j                  |      S )N)getattrr   )r   attrs     r   __getattr__zMixedModeRenderer.__getattr__>   s     t~~t,,r   c                 b   | j                   | j                  _         | j                  r't        | j                  | j                        }|| _        | j	                  | j
                  | j                   z  | j                  | j                   z  | j                         | _        | j                  | _        y)z
        Enter "raster" mode.  All subsequent drawing commands (until
        `stop_rasterizing` is called) will be drawn with the raster backend.
        N)	r   r   r   r   r
   r   r   r   r   )r   rs     r   start_rasterizingz#MixedModeRenderer.start_rasterizingG   s     (($$.t{{/3/H/HJA()D% $ ; ;KK $,,txx"7!C..r   c           	         | j                   | _        | j                  | j                  z  }t	        j
                  | j                  j                               }t        j                  |d         \  }}|||f   }|j                  r| j                  j                         }| j                  j                  ||j                  | j                  z  | j                  z  ||j                  z
  | j                  z  | j                  z  |ddd          d| _        | j                  | j                   _        | j"                  r3t%        | j                   | j"                  | j                        }|| _        yy)z
        Exit "raster" mode.  All of the drawing that was done since
        the last `start_rasterizing` call will be copied to the
        vector backend by calling draw_image.
        ).   N)r   r   r   r   npasarrayr   buffer_rgbar   _get_nonzero_slicessizenew_gc
draw_imagestartr   stopr   r   r   )r   r   imgslice_yslice_xcropped_imggcr"   s           r   stop_rasterizingz"MixedModeRenderer.stop_rasterizingW   s0    ..(jj..::<= 44S[A'7*+&&(B NN%%,txx7',,&$,,6ADbD!	#
 !% ,,$$.t{{/3/H/H/3||=A )*D%	 %r   )NN)__name__
__module____qualname____doc__r   r    r#   r5    r   r   r   r      s$     (,%),)\-/  *r   r   )	numpyr'   
matplotlibr   backend_aggr   matplotlib._tight_bboxr   r   r:   r   r   <module>r?      s      $ Ao* o*r   