o
    CiX                     @   s>   d dl Zd dlmZ ddlmZ d dlmZ G dd dZdS )    N)cbook   )RendererAgg)process_figure_for_rasterizingc                   @   s6   e Zd ZdZ		dddZdd Zdd Zd	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                 C   sN   |du rt }|| _|| _|| _|| _|| _d| _|| _|j| _|| _	|| _
dS )a&  
        Parameters
        ----------
        figure : `~matplotlib.figure.Figure`
            The figure instance.
        width : float
            The width of the canvas in logical units
        height : float
            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_restore r   ^/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/matplotlib/backends/backend_mixed.py__init__   s   
zMixedModeRenderer.__init__c                 C   s   t | j|S )N)getattrr   )r   attrr   r   r   __getattr__>   s   zMixedModeRenderer.__getattr__c                 C   sR   | j | j_ | jrt| j| j}|| _| | j| j  | j| j  | 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   rr   r   r   start_rasterizingG   s   
z#MixedModeRenderer.start_rasterizingc              	   C   s   | j | _| j| j }t| j }t	|d \}}|||f }|j
rG| j }| j||j| j | j ||j | j | j |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   r   r   r   stop_rasterizingW   s,   


z"MixedModeRenderer.stop_rasterizing)NN)__name__
__module____qualname____doc__r   r   r   r/   r   r   r   r   r      s    
.	r   )	numpyr!   
matplotlibr   backend_aggr   matplotlib._tight_bboxr   r   r   r   r   r   <module>   s
    