
    P/PhZ                     L    d dl Zd dlmZ ddlmZ d dlmZ  G d d          ZdS )    N)cbook   )RendererAgg)process_figure_for_rasterizingc                   0    e Zd ZdZ	 	 ddZd Zd Zd ZdS )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        | _        || _	        || _
        dS )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           a/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/matplotlib/backends/backend_mixed.py__init__zMixedModeRenderer.__init__   sb    0 !($/!&;# / $
 z$7!(    c                 ,    t          | j        |          S )N)getattrr   )r   attrs     r   __getattr__zMixedModeRenderer.__getattr__>   s     t~t,,,r   c                    | j         | j        _         | j        r!t          | j        | j                  }|| _        |                     | j        | j         z  | j        | j         z  | j                   | _        | j        | _        dS )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J JA()D% $ ; ;K $,tx"7!C !C.r   c           	      V   | j         | _        | j        | j        z  }t	          j        | j                                                  }t          j	        |d                   \  }}|||f         }|j
        rl| j                                        }| j                            ||j        | j        z  | j        z  ||j        z
  | j        z  | j        z  |ddd                    d| _        | j        | j        _        | j        r)t%          | j        | j        | j                  }|| _        dS dS )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   s2    .(j.::<<== 4S[AA'7*+ 		#&&((B N%%,tx7',&$,6ADDbD!	# # #
 !% ,$ 	*.t{/3/H/3|= =A )*D%%%		* 	*r   )NN)__name__
__module____qualname____doc__r   r    r#   r5    r   r   r   r      sh          (,%),) ,) ,) ,)\- - -/ / /  *  *  *  *  *r   r   )	numpyr'   
matplotlibr   backend_aggr   matplotlib._tight_bboxr   r   r:   r   r   <module>r?      s              $ $ $ $ $ $ A A A A A Ao* o* o* o* o* o* o* o* o* o*r   