
    "	f\                        d dl mZ d dlZd dlmZmZmZ d dlmZ	 d dl
mZ d dlZd dlmZmZ d dlmZmZmZ d dlmZ erd dlmZ d dlmZ d d	lmZ d dlmZ   G d
 de      Z! G d de!      Z" G d de!      Z#y)    )annotationsN)TYPE_CHECKINGAnycast)FillTypeLineType)filled_to_mpl_pathslines_to_mpl_pathsmpl_codes_to_offsets)Renderer)Axes)Figure)	ArrayLikec                  r   e Zd ZU ded<   ded<   ded<   	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZdd	Zdd
ZddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ		 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 d	 	 	 	 	 	 	 	 	 	 	 d dZd!d"dZd#dZddZd$d%dZ	 	 	 	 d&	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d'dZy)(MplRendererr   _axesr   _figbool_want_tightNc                <   |dd l }|j                  |       t        |ddd      }|||d<   nt        d      |d<   t        j                  ||fi |\  | _        }	|	j                         | _        |s"| j                  D ]  }
|
j                  d	        d| _	        y )
Nr   FT)figsizesqueezesharexshareygridspec_kwequal)aspect
subplot_kwoff)

matplotlibusedictpltsubplotsr   flattenr   axisr   )selfnrowsncolsr   
show_framebackendr   r    kwargsaxesaxs              =/usr/lib/python3/dist-packages/contourpy/util/mpl_renderer.py__init__zMplRenderer.__init__'   s     NN7#guT$O"$/F=!#'w#7F< ,,ue>v>	4\\^
jj       c                \    t        | d      r t        j                  | j                         y y )Nr   )hasattrr#   closer   r'   s    r/   __del__zMplRenderer.__del__B   s!    4 IIdii  !r1   c                    | j                   D ])  }t        |dd      s|j                  d       d|_        + | j                  r4t        | j                         dkD  r| j                  j                          y y y )N_need_autoscaleFT)tight   )r   getattrautoscale_viewr8   r   lenr   tight_layoutr'   r.   s     r/   
_autoscalezMplRenderer._autoscaleF   so     ** 	+Br,e4!!!-%*"	+ DJJ! 3II""$ !4r1   c                D    t        |t              r| j                  |   }|S N)
isinstanceintr   r?   s     r/   _get_axzMplRenderer._get_axQ   s    b#BB	r1   c                    | j                  |      }t        ||      }t        j                  ||dd|      }|j	                  |       d|_        y)a  Plot filled contours on a single Axes.

        Args:
            filled (sequence of arrays): Filled contour data as returned by
                :func:`~contourpy.ContourGenerator.filled`.
            fill_type (FillType): Type of ``filled`` data, as returned by
                :attr:`~contourpy.ContourGenerator.fill_type`.
            ax (int or Maplotlib Axes, optional): Which axes to plot on, default ``0``.
            color (str, optional): Color to plot with. May be a string color or the letter ``"C"``
                followed by an integer in the range ``"C0"`` to ``"C9"`` to use a color from the
                ``tab10`` colormap. Default ``"C0"``.
            alpha (float, optional): Opacity to plot with, default ``0.7``.
        noner   
facecolors
edgecolorslwalphaTN)rE   r	   mcollectionsPathCollectionadd_collectionr8   )r'   filled	fill_typer.   colorrL   paths
collections           r/   rP   zMplRenderer.filledV   sP    * \\"#FI6!00e1EK

*%!r1   c                   | j                  |      }| j                  ||      \  }}t        ||      } |j                  |||j                  |j                  fi | |dkD  r[d|ddddf   |ddddf   z   |ddddf   z   |ddddf   z   z  }	d|ddddf   |ddddf   z   |ddddf   z   |ddddf   z   z  }
||d<    |j                  t        j                  |ddddf   |	|ddddf   f      j                  d      t        j                  |ddddf   |
|ddddf   f      j                  d      t        j                  |ddddf   |	|ddddf   f      j                  d      t        j                  |ddddf   |
|ddddf   f      j                  d      fi | ||j                  ||||d	d
       d|_        y)a  Plot quad grid lines on a single Axes.

        Args:
            x (array-like of shape (ny, nx) or (nx,)): The x-coordinates of the grid points.
            y (array-like of shape (ny, nx) or (ny,)): The y-coordinates of the grid points.
            ax (int or Matplotlib Axes, optional): Which Axes to plot on, default ``0``.
            color (str, optional): Color to plot grid lines, default ``"black"``.
            alpha (float, optional): Opacity to plot lines with, default ``0.1``.
            point_color (str, optional): Color to plot grid points or ``None`` if grid points
                should not be plotted, default ``None``.
            quad_as_tri_alpha (float, optional): Opacity to plot ``quad_as_tri`` grid, default 0.

        Colors may be a string color or the letter ``"C"`` followed by an integer in the range
        ``"C0"`` to ``"C9"`` to use a color from the ``tab10`` colormap.

        Warning:
            ``quad_as_tri_alpha > 0`` plots all quads as though they are unmasked.
        )rR   rL   r   g      ?Nr:   rL   )   rV   o)rR   rL   markerrK   T)	rE   _grid_as_2dr"   plotTnpstackreshaper8   )r'   xyr.   rR   rL   point_colorquad_as_tri_alphar,   xmidymids              r/   gridzMplRenderer.gridr   s0   8 \\"1%1E/1acc133)&)q 3B38qSbSz1Acrc12gJ>12qr6JKD3B38qSbSz1Acrc12gJ>12qr6JKD/F7OBGG!CRC"H+tQqr12vY78@@I!CRC"H+tQqr12vY78@@I!ABG*dAcrc12gJ78@@I!ABG*dAcrc12gJ78@@I	
  "GGAq5GK!r1   c                    | j                  |      }t        ||      }t        j                  |d|||      }|j	                  |       d|_        y)a6  Plot contour lines on a single Axes.

        Args:
            lines (sequence of arrays): Contour line data as returned by
                :func:`~contourpy.ContourGenerator.lines`.
            line_type (LineType): Type of ``lines`` data, as returned by
                :attr:`~contourpy.ContourGenerator.line_type`.
            ax (int or Matplotlib Axes, optional): Which Axes to plot on, default ``0``.
            color (str, optional): Color to plot lines. May be a string color or the letter ``"C"``
                followed by an integer in the range ``"C0"`` to ``"C9"`` to use a color from the
                ``tab10`` colormap. Default ``"C0"``.
            alpha (float, optional): Opacity to plot lines with, default ``1.0``.
            linewidth (float, optional): Width of lines, default ``1``.
        rG   rH   TN)rE   r
   rM   rN   rO   r8   )	r'   lines	line_typer.   rR   rL   	linewidthrS   rT   s	            r/   rh   zMplRenderer.lines   sP    . \\""5)4!00f9ES

*%!r1   c                    t         j                  j                  |      }|t         j                  j                  u ry| j	                  |      }| j                  ||      \  }}|j                  ||   ||   d|       y)a  Plot masked out grid points as circles on a single Axes.

        Args:
            x (array-like of shape (ny, nx) or (nx,)): The x-coordinates of the grid points.
            y (array-like of shape (ny, nx) or (ny,)): The y-coordinates of the grid points.
            z (masked array of shape (ny, nx): z-values.
            ax (int or Matplotlib Axes, optional): Which Axes to plot on, default ``0``.
            color (str, optional): Circle color, default ``"black"``.
        NrX   )c)r]   magetmasknomaskrE   rZ   r[   )r'   r`   ra   zr.   rR   masks          r/   rq   zMplRenderer.mask   si    " uu}}Q255<<\\"1%1
$4#/r1   c                ^    | j                          | j                  j                  ||       y)zSave plots to SVG or PNG file.

        Args:
            filename (str): Filename to save to.
            transparent (bool, optional): Whether background should be transparent, default
                ``False``.
        )transparentN)r@   r   savefig)r'   filenamers   s      r/   savezMplRenderer.save   s%     			(<r1   c                    | j                          t        j                         }| j                  j	                  |d       |j                  d       |S )zhSave plots to an ``io.BytesIO`` buffer.

        Return:
            BytesIO: PNG image buffer.
        png)formatr   )r@   ioBytesIOr   rt   seek)r'   bufs     r/   save_to_bufferzMplRenderer.save_to_buffer   s@     	jjl		#e,
r1   c                L    | j                          t        j                          y)zMShow plots in an interactive window, in the usual Matplotlib manner.
        N)r@   r#   showr5   s    r/   r   zMplRenderer.show   s     	
r1   c                    |r#| j                  |      j                  ||       y| j                  |      j                  |       y)a  Set the title of a single Axes.

        Args:
            title (str): Title text.
            ax (int or Matplotlib Axes, optional): Which Axes to set the title of, default ``0``.
            color (str, optional): Color to set title. May be a string color or the letter ``"C"``
                followed by an integer in the range ``"C0"`` to ``"C9"`` to use a color from the
                ``tab10`` colormap. Default is ``None`` which uses Matplotlib's default title color
                that depends on the stylesheet in use.
        )rR   N)rE   	set_title)r'   titler.   rR   s       r/   r   zMplRenderer.title   s:     LL&&uE&:LL&&u-r1   c                   | j                  |      }| j                  ||      \  }}t        j                  |      }|j                  \  }}	t        |      D ]>  }
t        |	      D ].  }|j                  ||
|f   ||
|f   ||
|f   | ddd|d       0 @ |rt        |dz
        D ]  }
t        |	dz
        D ]  }t        j                  ||
|
dz   ||dz   f         }t        j                  ||
|
dz   ||dz   f         }t        j                  ||
|
dz   ||dz   f         }|j                  |||| ddd|d         yy)a  Show ``z`` values on a single Axes.

        Args:
            x (array-like of shape (ny, nx) or (nx,)): The x-coordinates of the grid points.
            y (array-like of shape (ny, nx) or (ny,)): The y-coordinates of the grid points.
            z (array-like of shape (ny, nx): z-values.
            ax (int or Matplotlib Axes, optional): Which Axes to plot on, default ``0``.
            color (str, optional): Color of added text. May be a string color or the letter ``"C"``
                followed by an integer in the range ``"C0"`` to ``"C9"`` to use a color from the
                ``tab10`` colormap. Default ``"green"``.
            fmt (str, optional): Format to display z-values, default ``".1f"``.
            quad_as_tri (bool, optional): Whether to show z-values at the ``quad_as_tri`` centers
                of quads.

        Warning:
            ``quad_as_tri=True`` shows z-values for all quads, even if masked.
         centerThavarR   clip_onr:      N)rE   rZ   r]   asarrayshaperangetextmean)r'   r`   ra   rp   r.   rR   fmtquad_as_trinynxjixxyyzzs                  r/   z_valueszMplRenderer.z_values  s   6 \\"1%1JJqMBr 	3A2Y 3!Q$1a4Qq!tWcU FOh#T  33	3 2a4[ *r!t *A1QqS5!AaC%<1B1QqS5!AaC%<1B1QqS5!AaC%<1BGGBr3%pjh8SX$(  *	** r1   )r:   r:   	   r   TNN)r(   rD   r)   rD   r   tuple[int, int]r*   r   r+   
str | Noner   zdict[str, Any] | NonereturnNone)r   r   )r.   
Axes | intr   r   )r   C0ffffff?)rP   cpy.FillReturnrQ   r   r.   r   rR   strrL   floatr   r   )r   black皙?Nr   )r`   r   ra   r   r.   r   rR   r   rL   r   rb   r   rc   r   r   r   )r   r         ?r:   )rh   cpy.LineReturnri   r   r.   r   rR   r   rL   r   rj   r   r   r   )r   r   )r`   r   ra   r   rp   z'ArrayLike | np.ma.MaskedArray[Any, Any]r.   r   rR   r   r   r   )F)ru   r   rs   r   r   r   )r   z
io.BytesIO)r   N)r   r   r.   r   rR   r   r   r   )r   greenz.1fF)r`   r   ra   r   rp   r   r.   r   rR   r   r   r   r   r   r   r   )__name__
__module____qualname____annotations__r0   r6   r@   rE   rP   rf   rh   rq   rv   r~   r   r   r    r1   r/   r   r      sG   K
L #)"-1     !	 
     +  
 6!	% "" " 	"
 " " 
"@ "&#$-"-" -" 	-"
 -" -"  -" !-" 
-"f "" " 	"
 " " " 
"F 00 0 3	0
 0 0 
00	=
.* !**** ** 	**
 ** ** ** ** 
**r1   r   c                  &     e Zd ZdZdd fdZ xZS )MplTestRendererzTest renderer implemented using Matplotlib.

    No whitespace around plots and no spines/ticks displayed.
    Uses Agg backend, so can only save to file/buffer, cannot call ``show()``.
    c                    ddddddd}t         |   |||dd|       | j                  D ]F  }|j                  d       |j	                  d       |j                  g        |j                  g        H d| _        y )	Ng{Gz?gGz?)leftrighttopbottomwspacehspaceTAgg)r*   r+   r           F)superr0   r   set_xmarginset_ymargin
set_xticks
set_yticksr   )r'   r(   r)   r   gridspecr.   	__class__s         r/   r0   zMplTestRenderer.__init__7  s    
 	5'dEx 	 	
 ** 	BNN3NN3MM"MM"		 !r1   )r:   r:   r   )r(   rD   r)   rD   r   r   r   r   )r   r   r   __doc__r0   __classcell__r   s   @r/   r   r   1  s    
! !r1   r   c                      e Zd ZdZ	 	 	 	 d	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d fdZ		 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ
	 	 d	 	 	 	 	 	 	 	 	 	 	 dd	Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
Z xZS )MplDebugRendererzDebug renderer implemented using Matplotlib.

    Extends ``MplRenderer`` to add extra information to help in debugging such as markers, arrows,
    text, etc.
    c                *    t         |   ||||       y rB   )r   r0   )r'   r(   r)   r   r*   r   s        r/   r0   zMplDebugRenderer.__init__S  s     	w
;r1   c                l   d||z   z  }||z
  }|t        j                  t        j                  ||            z  }t        j                  |d   |d    f      }	t        j                  ||dz  |	z
  |z  z
  ||dz  |z  z   ||dz  |	z   |z  z
  f      }
|j                  |
d d df   |
d d df   d||       y )Ng      ?r:   r   -rl   rL   )r]   sqrtdotr   r^   r[   )r'   r.   
line_startline_endrR   rL   
arrow_sizemidalongr   arrows              r/   _arrowzMplDebugRenderer._arrow\  s     :():%u-..

E!HuQxi0159u$j00%)J&&59u$j00
 
 	adU1a4[#eDr1   c                   |t         j                  k(  rDt        rt        t        j
                  |      }|d   }|d   D cg c]  }t        |       }}||fS |t         j                  k(  rWt        rt        t        j                  |      }|d   D cg c]  }||	 }}|d   D cg c]  }|t        |       }}||fS |t         j                  k(  r.t        rt        t        j                  |      }|d   }|d   }||fS |t         j                  k(  rNt        rt        t        j                  |      }|d   D cg c]  }||	 }}|d   D cg c]  }||	 }}||fS |t         j                  k(  rt        rt        t        j                  |      }g }g }t        | D ]f  \  }}}|
t        r||J |t!        j"                  ||dd       z  }t!        j"                  ||dd       }	||	D cg c]  }t        |       c}z  }h ||fS |t         j$                  k(  rt        rt        t        j&                  |      }g }g }t        | D ]s  \  }}}|
t        r||J t)        t+        |      dz
        D ]D  }
|||
   ||
dz      dz    }|j-                  ||d   |d           |j-                  ||d   z
         F u ||fS t/        d| d      c c}w c c}w c c}w c c}w c c}w c c}w )Nr   r:   rV   zRendering FillType  not implemented)r   	OuterCoder   r   cpyFillReturn_OuterCoder   ChunkCombinedCodeFillReturn_ChunkCombinedCodeOuterOffsetFillReturn_OuterOffsetChunkCombinedOffsetFillReturn_ChunkCombinedOffsetChunkCombinedCodeOffset"FillReturn_ChunkCombinedCodeOffsetzipr]   splitChunkCombinedOffsetOffset$FillReturn_ChunkCombinedOffsetOffsetr   r=   appendRuntimeError)r'   rP   rQ   
all_pointscodesall_offsetspointsoffsetsouter_offsets	all_codesr   offss               r/   &_filled_to_lists_of_points_and_offsetsz7MplDebugRenderer._filled_to_lists_of_points_and_offsetsp  sZ   
 ***c66?JDJ1IN5/6NKN\ ;&&[ (444c>>G/5ayOVF<N&OJODJ1Ic5QVQb/6cKcR ;&&Q (...c88&AJ )KH ;&&G (666c@@&I/5ayOVF<N&OJO28)Sww?R7SKS> ;&&= (:::cDDfMJK03V T,}>  ,1JJJbhhv}Qr/BCC
HHUM!B,?@	S 4U ;SST2 ;&&# (<<<cFFOJK25v, 7.> ".=3LLLs=1!34 7A"=#3M!A#4Fq4HID%%fT!WT"X&>?&&td1g~677 ;&& !4YK?OPQQY O Pc PS  Ts<    KKK'K"/K"=K'K'K,K,3K1c           	     L   |t         j                  k(  r$t        rt        t        j
                  |      }|}|S |t         j                  k(  r't        rt        t        j                  |      }|d   }|S |t         j                  k(  rt        rt        t        j                  |      }g }t        | D ]V  \  }}|	t        r|J t        |      }t        t        |      dz
        D ]  }|j                  |||   ||dz              ! X |S |t         j                  k(  rzt        rt        t        j                   |      }g }t        | D ]K  \  }}|	t        r|J t        t        |      dz
        D ]  }|j                  |||   ||dz              ! M |S t#        d| d      )Nr   r:   zRendering LineType r   )r   Separater   r   r   LineReturn_SeparateSeparateCodeLineReturn_SeparateCoder   LineReturn_ChunkCombinedCoder   r   r   r=   r   r   LineReturn_ChunkCombinedOffsetr   )	r'   rh   ri   	all_linesr   r   r   r   r   s	            r/   _lines_to_list_of_pointsz)MplDebugRenderer._lines_to_list_of_points  s    )))S44e<I: 9 (///S88%@aI2 1 (444S==uEI!$e J%$$000259G"3w<>2 J!((
71Q3<)HIJJ(  (666S??GI'*E{ R#%$*666"3{#3A#56 R!((A{1Q3?O)PQR	R  !4YK?OPQQr1   c                   t         |   |||||       ||y | j                  |      }| j                  ||      \  }}|t	        ||      D ]  \  }}t	        |d d |dd        D ]p  \  }}||| }|j                  |d d df   |d d df   ||       |
dkD  s4t        |      }t        |dz
        D ]!  }| j                  |||   ||dz      |||
       # r  |t	        ||      D ]  \  }}t        j                  |d   t              }d||dd  dz
  <   |	
|d d }d||<   |j                  |d d df   |   |d d df   |   d||       |	h|j                  |d d df      |d d df   |   d|	|        y y )	NrV   r:   r   r   r   )dtypeFrX   )r   rP   rE   r   r   r[   r=   r   r   r]   onesr   )r'   rP   rQ   r.   rR   rL   
line_color
line_alpharb   start_point_colorr   r   r   r   r   startendxysnr   rq   start_indicesr   s                         r/   rP   zMplDebugRenderer.filled  s    	vy"eU;+"5\\""&"M"MfV_"`
K !#&z;#? b"%gcrlGABK"@ bJE3 s+CGGC1Is1a4yJjGQ!C'H!&qs bA KKCFC!Hj*V`abbb "#&z;#? Cwwwr{$7&+WQR[]#$0$+CRLM*/D'1a4L&q!tT(:C;V`  b %0GGF1a4L71m9TVY/z  CC #r1   c
           
        t         |   ||||||       |	dk(  r|y | j                  |      }| j                  ||      }
|	dkD  rB|
D ]=  }t	        t        |      dz
        D ]!  }| j                  |||   ||dz      |||	       # ? ||
D ]z  }d}t        |      }|E|j                  |d   |d   d||       d}|d   d   |d   d   k(  r|d   d   |d   d   k(  r|dz  }|j                  |||df   |||df   d||       | y y )	Nr   r:   r   )r   r   )r   r:   rX   r   rV   )r   rh   rE   r   r   r=   r   r[   )r'   rh   ri   r.   rR   rL   rj   rb   r   r   r   liner   start_index	end_indexr   s                  r/   rh   zMplDebugRenderer.lines  sm    	eYE5)D!4\\"11%C	! Rs4y{+ RAKKDGT!A#YujQRR "! 	.I	$0GGDJT
C;LTYGZ"#KAwqzT"Xa[0T!WQZ48A;5N!Q	[2A56[=RTU=U8VX[u  .	. #r1   c                >   | j                  |      }| j                  ||      \  }}t        j                  |      }|j                  \  }}t        |      D ]E  }t        |      D ]5  }	|	||z  z   }
|j                  |||	f   |||	f   t        |
      dd|d       7 G y )Nr   r   Tr   )rE   rZ   r]   r   r   r   r   r   )r'   r`   ra   rp   r.   rR   r   r   r   r   quads              r/   point_numberszMplDebugRenderer.point_numbers$  s     \\"1%1JJqMBr 	&A2Y &1R4x!Q$1a4#d)EQV $  &&	&r1   c                   | j                  |      }| j                  ||      \  }}t        j                  |      }|j                  \  }}t        d|      D ]  }t        d|      D ]u  }	|	||z  z   }
||dz
  |dz   |	dz
  |	dz   f   j                         }||dz
  |dz   |	dz
  |	dz   f   j                         }|j                  ||t        |
      dd|d       w  y )Nr:   r   Tr   )	rE   rZ   r]   r   r   r   r   r   r   )r'   r`   ra   rp   r.   rR   r   r   r   r   r
  rd   re   s                r/   quad_numberszMplDebugRenderer.quad_numbers6  s     \\"1%1JJqMBq" 	dA1b\ d1R4x1QqS!A#ac')*//11QqS!A#ac')*//1dCI(xu^bc	d	dr1   c                R   | j                  |      }| j                  ||      \  }}t        j                  |      }|j                  \  }}	t        |      D ]O  }
t        |	      D ]?  }||
|f   }|||kD  rd}n
||kD  rd}nd}|j                  ||
|f   ||
|f   |dd|d       A Q y )Nr   r:   r   r   r   Tr   )rE   rZ   r]   r   r   r   r   )r'   r`   ra   rp   lower_levelupper_levelr.   rR   r   r   r   r   r   z_levels                 r/   z_levelszMplDebugRenderer.z_levelsI  s     \\"1%1JJqMBr 
	&A2Y 	&q!tW*rK/?G+%GG!Q$1a4'fQV $  &	&
	&r1   )r:   r:   r   T)
r(   rD   r)   rD   r   r   r*   r   r   r   )r.   r   r   cpy.CoordinateArrayr   r  rR   r   rL   r   r   r   r   r   )rP   r   rQ   r   r   z2tuple[list[cpy.PointArray], list[cpy.OffsetArray]])rh   r   ri   r   r   zlist[cpy.PointArray])r   C1r   r   r   r   redr   )rP   r   rQ   r   r.   r   rR   r   rL   r   r   r   r   r   rb   r   r   r   r   r   r   r   )r   r   r   r:   r   r  r   )rh   r   ri   r   r.   r   rR   r   rL   r   rj   r   rb   r   r   r   r   r   r   r   )r   r  )r`   r   ra   r   rp   r   r.   r   rR   r   r   r   )r   blue)Nr   r   )r`   r   ra   r   rp   r   r  r   r  zfloat | Noner.   r   rR   r   r   r   )r   r   r   r   r0   r   r   r   rP   rh   r  r  r  r   r   s   @r/   r   r   M  s    #)<< < !	<
 < 
<EE (E &	E
 E E E 
E(7'7' 7' 
<	7'r$#$$ 
$T !&.C.C .C 	.C
 .C .C .C .C .C .C .C 
.Ch !&#.#. #. 	#.
 #. #. #. #. #. #. 
#.T && & 	&
 & & 
&. dd d 	d
 d d 
d2 %)&& & 	&
 & "& & & 
&r1   r   )$
__future__r   rz   typingr   r   r   matplotlib.collectionscollectionsrM   matplotlib.pyplotpyplotr#   numpyr]   	contourpyr   r   contourpy.util.mpl_utilr	   r
   r   contourpy.util.rendererr   matplotlib.axesr   matplotlib.figurer   numpy.typingr   contourpy._contourpy
_contourpyr   r   r   r   r   r1   r/   <module>r&     s^    " 	 + + -   ( a a ,$(&&X*( X*v!k !8T&{ T&r1   