o
    Gf&                  	   @   sX  d dl Z d dlmZ d dlZd dlmZ d dlZd dlZd dlmZ d dl	m
Z
 d dlZd dlZd dlZd dlmZ d dlZd dlmZ d dlmZmZ d d	lmZ d d
lmZmZ d dlmZmZ d dlm Z m!Z!m"Z" d dl#m$Z$m%Z%m&Z& d dl'm(Z) d dl*m+Z, edgddge- dkrd ndddd Z.dd Z/dd Z0dd Z1dd Z2edgdd  Z3ed!gd"d# Z4d$d% Z5d&d' Z6d(d) Z7ed*gd+d, Z8d-d. Z9d/d0 Z:d1d2 Z;ed3gddgd4d5d6d7d8d9 Z<d:d; Z=d<d= Z>d>d? Z?d@dA Z@dBdC ZAejBCdDg dEdFdG ZDejEFdHdIdJ ZGejBCdKdLejHfdMejIdLfgdNdO ZJdPdQ ZKdRdS ZLdTdU ZMdVdW ZNdXdY ZOejBCdZejPd[ejBQd[gd\ejPd]ejBQd]gd\gd^d_ ZRd`da ZSdbdc ZTeUdddeiedgdfdgdh ZVdidj ZWdkdl ZXdmdn ZYedgdfdodp ZZejBCdqdrdsgdtdu Z[dvdw Z\eddxgdfdydz Z]ejBCd{g d|d}d~ Z^dd Z_dd Z`dd ZaejBCdddgdd Zbdd ZcejEFddd Zddd Zeedgdddddeddd Zfeg ddfdd ZgG dd dZhdd Ziedgdddiddd Zjdd Zkdd Zledgdddidddd Zmedgdddiddd Zndd ZoejEFddd Zpedgddeddd Zqdd Zrdd Zsdd Ztdd Zudd ZvddÄ Zwddń ZxedgdfddǄ ZyddɄ Zzdd˄ Z{dd̈́ Z|ejBCd{g d΢ddЄ Z}ejBCd{g dѢddӄ Z~ddՄ Zddׄ ZdS )    N)datetime)Path)Timer)SimpleNamespace)Image)gridspec)image_comparisoncheck_figures_equal)Axes)KeyEvent
MouseEvent)Figure
FigureBase)ConstrainedLayoutEngineTightLayoutEnginePlaceHolderLayoutEngine)AutoMinorLocatorFixedFormatterScalarFormatterZfigure_align_labelspngsvgZx86_64{Gz?)
extensionstolc                  C   s  t jdd} tdd}| |dd df }|tddd |d | |d	 }|tdd
d t	dD ]G}| |d|f }|d|  |
d|  |dv rc|jd |j  |dkrs| D ]}|d qk|dkr|jd |j  q;t	dD ]@}| |d|f }|
d|  |d|  |dkr|tdd
d |jd |j  | D ]}|d qq|   d S )Ntightlayout   r      g    .A  z	Ylabel0 0)r   g     @d      z
YLabel1 %dz
XLabel1 %dr   r   topZ   rightzXLabel2 zYLabel2 
   )pltfigurer   ZGridSpecadd_subplotplotnparange
set_ylabelrange
set_xlabelxaxisZset_label_positionZtick_topget_xticklabelsZset_rotationyaxisZ
tick_rightZalign_labels)figgsaxiZtick r8   <lib/python3.10/site-packages/matplotlib/tests/test_figure.pytest_align_labels   sB   



r:   c                  C   s
  t dd\} }t|jD ]\}}|d |d |td| td|  q|   | 	  | 
  td}td}t|jD ]\}}|jj d ||< |jj d ||< qGtj|d d |dd   tj|d d d |dd d  t jdddd\} }t|jD ]\}}|d |d |tjd	d	}q| j||d
 |   | 	  | 
  td}td}t|jD ]\}}|jj d ||< |jj d ||< qtj|d d |dd   tj|d d d |dd d  d S )Nr   ZBooZWho   r"   r   Tconstrained_layoutr'   r6   )r(   subplots	enumerateflatr0   r+   r,   r-   Zalign_ylabelsZalign_xlabelsdraw_without_renderingzerosr1   labelget_positionr3   testingassert_allclose
pcolormeshrandomrandncolorbar)r4   axsnnr6   ZxnZynpcr8   r8   r9   test_align_labels_stray_axesF   s>   

"

"



&rO   c                  C   s  t d t d} t d t d t   t d t d t d t  g dks1J t  g dks;J t d	 t   t d
 t d t  ddgksXJ t  ddgksbJ t |  t  | ksoJ tt t t	  W d    d S 1 sw   Y  d S )Nalltodayr   tomorrowr   r"   )r   r"   r   r;      ) rQ   rT   rR   rT   r'   rS   rT   )
r(   closer)   Zget_fignumsZget_figlabelsZgcfpytestraises
ValueErrorr   )Z	fig_todayr8   r8   r9   test_figure_labeli   s*   










"rY   c                   C   s   t d t d t d t   t dsJ t ds!J t ds(J t ds/J t d t d t dr@J t drGJ d S )NZoner   Zthreer;   )r(   r)   Zfignum_existsrU   r8   r8   r8   r9   test_fignum_exists   s   




rZ   c                  C   s   d} d}t jdd}||  dd |jD | gksJ t jddd}|d	d	| ||u s0J d
d |jD | |gks>J t jddddd\}}||u sOJ dd |jD g ks[J d S )NzA fancy plotzReally fancy!r"   )numc                 S      g | ]}|  qS r8   Zget_text.0tr8   r8   r9   
<listcomp>       z$test_clf_keyword.<locals>.<listcomp>F)r[   clear      ?c                 S   r\   r8   r]   r^   r8   r8   r9   ra      rb   r   Tc                 S   r\   r8   r]   r^   r8   r8   r9   ra      rb   )r(   r)   suptitleZtextstextr?   )Ztext1Ztext2Zfig0fig1fig2ax2r8   r8   r9   test_clf_keyword   s   
rj   Zfigure_todayc                  C   sh   t d} |  }||   |td t d t ddgddgd t d t d d S )NrQ   rS   rR   r   r"   r)	r(   r)   r*   	set_title	get_labelr+   r,   r-   rU   r4   r6   r8   r8   r9   test_figure   s   


ro   Zfigure_legendc                  C   s   t d\} }|d jddgddgddd |d jddgddgddd |d jddgd	d	gdd
d |d jddgddgddd |d jddgddgddd |   d S )Nr   r   r"   xg)rD   coloryrk   rd   kZ_yzb)r(   r?   r+   Zlegendr4   rL   r8   r8   r9   test_figure_legend   s   rx   c                  C   s   t  } | g d}|  |u sJ | d}|  |u s J | | | j||gks.J |  |u s6J | | | j||gksDJ | | | j||gksRJ |  |u sZJ d S )Nr   r   r"   r"   o   )r(   r)   add_axesZgcar*   axesZsca)r4   ax0ax1r8   r8   r9   test_gca   s   



r   c                  C   s   t  } | jtd tt | jtdd W d    n1 s!w   Y  tt | jtdd W d    n1 s=w   Y  tt | jddd W d    n1 sYw   Y  tt | jdd W d    d S 1 suw   Y  d S )	N)
axes_class3d)r   
projectionT)r   polar)r   r   *   r   )r(   r)   r*   r
   rV   rW   rX   	TypeErrorr4   r8   r8   r9   test_add_subplot_subclass   s   "r   c                  C   s  t  } tjtdd | ddd W d    n1 sw   Y  tjtdd | ddd W d    n1 s;w   Y  tjtdd | ddd W d    n1 sYw   Y  tjtdd | ddd W d    n1 sww   Y  tjtdd | ddd	 W d    n1 sw   Y  tjtd
d | d W d    n1 sw   Y  tjtd
d | d W d    n1 sw   Y  tjtdd | dd W d    n1 sw   Y  tjtdd | dddd W d    n	1 s
w   Y  tjtdd | ddd W d    n	1 s)w   Y  tjtdd | ddd W d    n	1 sHw   Y  t  \}}tjtdd | | W d    d S 1 slw   Y  d S )Nz,Number of columns must be a positive integermatchr   r   r"   z)Number of rows must be a positive integerz)num must be an integer with 1 <= num <= 4rS   rd   zmust be a three-digit integerr   r   z2takes 1 or 3 positional arguments but 2 were givenz2takes 1 or 3 positional arguments but 4 were givenr   r;   z2Number of rows must be a positive integer, not '2'2z5Number of columns must be a positive integer, not 2.0g       @5The Axes must have been created in the present figure)r(   r)   rV   rW   rX   r*   r   r?   )r4   _r6   r8   r8   r9   test_add_subplot_invalid   s`   $r   Zfigure_suptitlec                  C   s.   t  \} }| jddd | jdddd d S )NZhellork   )rr   titlerq      )rr   Zrotation)r(   r?   re   )r4   r   r8   r8   r9   test_suptitle  s   r   c                  C   sV   t  \} }tjjddd}| jd|d}| | ksJ | | ks)J d S )NZlargebold)sizeweightzfontprops title)Zfontproperties)	r(   r?   mplZfont_managerZFontPropertiesre   Zget_fontsizeZget_size_in_pointsZ
get_weight)r4   r6   ZfpsZtxtr8   r8   r9   test_suptitle_fontproperties  s
   r   c                  C   sd   t jdd} | dd\}}|d |  |  | d | dks(J | dks0J d S )	N)r;   r   figsizer"   r   whitezThis is a visible suptitle.)        r   r   r   )      ?r   r   r   )r(   r)   
subfiguresset_facecolorr?   re   Zget_facecolor)r4   Zsf1Zsf2r8   r8   r9   test_suptitle_subfigures#  s   

r   c                  C   s   t  \} }|  dksJ |  dksJ |  dksJ | d |  dks+J | d |  dks8J | d |  dksEJ d S )NrT   re   	supxlabel	supylabel)r(   r?   Zget_suptitleZget_supxlabelZget_supylabelre   r   r   rn   r8   r8   r9   %test_get_suptitle_supxlabel_supylabel1  s   


r   Zalpha_backgroundr   r"   皙?none)	facecolorZ	edgecolor)r   savefig_kwargc                  C   sJ   t jddgd} | d | jd | jtjjddgddd	d
 d S )Nr   r"   r   r   r         333333?red)ZradiusZalphar   )	r(   r)   r   ZpatchZ	set_alphaZpatchesappendr   ZCirclePolygonr   r8   r8   r9   
test_alpha>  s   
r   c                  C   sP   t t ttjd d D ]} t  qW d    d S 1 s!w   Y  d S )Nzfigure.max_open_warningr"   )rV   warnsRuntimeWarningr/   r   ZrcParamsr(   r)   )r7   r8   r8   r9   test_too_many_figuresM  s
   
"r   c                     sL   G dd dt  G  fddd} t }|jddd|  d t| d S )Nc                   @   s   e Zd ZddddZdS )z.test_iterability_axes_argument.<locals>.MyAxesN)myclassc                _   s   t j| g|R i | d S N)r
   __init__)selfr   argskwargsr8   r8   r9   r   _  s   z7test_iterability_axes_argument.<locals>.MyAxes.__init__)__name__
__module____qualname__r   r8   r8   r8   r9   MyAxes^  s    r   c                       s    e Zd Zdd Z fddZdS )z/test_iterability_axes_argument.<locals>.MyClassc                 S   s   |dkrt dd S )Nazitem should be a)rX   )r   itemr8   r8   r9   __getitem__d  s   z;test_iterability_axes_argument.<locals>.MyClass.__getitem__c                    s    d| ifS )Nr   r8   r   r   r8   r9   _as_mpl_axesh  s   z<test_iterability_axes_argument.<locals>.MyClass._as_mpl_axesN)r   r   r   r   r   r8   r   r8   r9   MyClassb  s    r   r"   r   )r
   r(   r)   r*   rU   )r   r4   r8   r   r9   test_iterability_axes_argumentS  s
   	r   c                  C   s   t  } | d |  dksJ | d |  dksJ | dd |  dks,J |  dks4J | d |  dksAJ |  dksIJ d S )NrS   r"   r   r;   )r"   r   r   )r(   r)   Zset_figwidthZget_figwidthZset_figheightZget_figheightset_size_inchesr   r8   r8   r9   test_set_fig_sizep  s   


r   c                  C   sh   t dd\} }|d   | d d D ]	}|| jv sJ q|d | jvs)J t| jdks2J d S )Nr   r    r    r    r   )r(   r?   removeZravelr|   lenr4   rL   r6   r8   r8   r9   test_axes_remove  s   r   c                  C   s   t tdtd \} }||  dksJ t d\} }||  dks&J t td\} }||  dks8J t td\} }||  dksJJ d S )Nr   r"   r"   r   rd   )r   r   )r(   Z	figaspectr,   Zfloat64rC   )whr8   r8   r9   test_figaspect  s   r   which)bothmajorminorc           
      C   s,  g d}g d}d}g d}t |}t |}t \}}||| |  |  |jt	d t
  t
dd |jt| W d    n1 sQw   Y  |d|d	|  | d
v rx|jd ddD ]}	t|	 |kswJ qk| dv r|jd ddD ]}	t|	 |ksJ qd S d S )N)z
3 Jan 2013z
4 Jan 2013z
5 Jan 2013z
6 Jan 2013z
7 Jan 2013z
8 Jan 2013z
9 Jan 2013z10 Jan 2013z11 Jan 2013z12 Jan 2013z13 Jan 2013z14 Jan 2013)z16:44:00z16:45:00z16:46:00z16:47:00z16:48:00z16:49:00z16:51:00z16:52:00z16:53:00z16:55:00z16:56:00z16:57:00<   )r"   r   r   r;   rS         r   ignorez=FixedFormatter should only be used together with FixedLocator皙?r&   )r   r   r   Fr   )r   r   Tr   )mdatesZdatestr2numr(   r?   r+   Z
yaxis_dateZ
xaxis_dater1   Zset_minor_locatorr   warningscatch_warningsfilterwarningsZset_minor_formatterr   Zautofmt_xdater|   r2   intZget_rotation)
r   datetimeZangleZminorsrp   rs   r4   r6   rD   r8   r8   r9   test_autofmt_xdate  s6   


r   defaultc                  C   sn   t jdd} |   | jjjdksJ | jjjdksJ d| _|   | jjjdks,J | jjjdks5J d S )N)r;   r;   r   i  2      )r(   r)   rB   canvasrendererheightwidthdpir   r8   r8   r9   test_change_dpi  s   r   zwidth, heightr"   )r    r"   c                 C   s~   t t tj| |fd W d    n1 sw   Y  t }t t || | W d    d S 1 s8w   Y  d S )Nr   )rV   rW   rX   r(   r)   r   )r   r   r4   r8   r8   r9   test_invalid_figure_size  s   "r   c                  C   s  t  } tjtdd |   W d    n1 sw   Y  tt | dddtjf W d    n1 s9w   Y  tjtdd | jg dg dd W d    n1 s[w   Y  t 	 \}}tjtdd | | W d    n1 s}w   Y  |
| tjtjd	d ||d
 W d    n1 sw   Y  tjtjd	d | g dd
 W d    d S 1 sw   Y  d S )Nz.missing 1 required positional argument: 'rect'r   皙?rd   z#multiple values for argument 'rect'ry   )Zrectr   z)Passing more than one positional argumentzextra positional argument)r(   r)   rV   rW   r   r{   rX   r,   nanr?   Zdelaxesr   r   ZMatplotlibDeprecationWarning)r4   rh   r6   r8   r8   r9   test_invalid_figure_add_axes  s:   

"r   c                  C   s  t jdddddd\} }|jD ]}|g dg d q|d |d |dd d f D ]}dt|jjdd	ks=J q.|d
d d f D ]}dt|jjdd	k sUJ qF|d d d
f D ]}dt|j	jdd	ksmJ q^|d d df D ]}dt|j	jdd	k sJ qvd S )Nr   TF)sharexshareyZsqueeze)r'   r   r   logr   r   )r   r"   )
r(   r?   rA   r+   
set_yscaleZ
set_xscaler   r1   Zget_ticklabelsr3   r   r8   r8   r9   test_subplots_shareax_loglabels  s   


r   c                  C   sL   t  } d}tjt|d | dd W d    d S 1 sw   Y  d S )Nz9savefig\(\) takes 2 positional arguments but 3 were givenr   z
fname1.pngz
fname2.png)r(   r)   rV   rW   r   savefig)r4   msgr8   r8   r9   test_savefig  s
   "r   c               	   C   sT   t  } dD ]!}tt | jt |dd W d    n1 s"w   Y  qd S )N)r   pdfr   tifjpgT)formatZnon_existent_kwarg)r(   r)   rV   rW   r   r   ioBytesIO)r4   r   r8   r8   r9   test_savefig_warns  s   r   c                  C   s   t  } tjtdd | jddd W d    n1 sw   Y  tjtdd | jddd W d    d S 1 s<w   Y  d S )	NzNo module named '@absent'r   testzmodule://@absent)backendz-The 'pdf' backend does not support png outputztest.pngr   )r(   r)   rV   rW   ModuleNotFoundErrorr   rX   r   r8   r8   r9   test_savefig_backend  s   "r   r   ZAgg)ZmarksZCairoc                 C   s   t  \}}|g d t }|j|dd t|}|  W d    n1 s,w   Y  t  \}}|g d |j	
d t }|j|dd t|}|  W d    n1 scw   Y  ||ksnJ d S )Nr"   r   r   r   r   r   )r(   r?   r+   r   r   r   r   openloadr   _set_device_pixel_ratio)r   r4   r6   bufZratio1Zratio2r8   r8   r9   test_savefig_pixel_ratio%  s    





r  c                  C   s0   t jdd} | jt dd |  jsJ d S )N
compressedr   r   bbox_inches)r(   r)   r   r   r   get_layout_engineZ	_compressr   r8   r8   r9   #test_savefig_preserve_layout_engine<  s   r	  c                  C   s|   t  \} }|tjdd}| j|dd}| jt	 t
jddgddggd |jjddj|jjd	djks<J d S )
Nr   (   )Zaspectr   r;   r  T)ZoriginalF)r(   r?   rH   r,   rI   rJ   rK   r   r   r   r   Z
transformsZBboxr6   rE   Zbounds)r4   r6   rN   Zcbarr8   r8   r9   test_savefig_locate_colorbarC  s   &r  zsavefig.transparentTr   c                 C   s   | j ddddd}| |d d d d f }||d }||d d d d f }||d dd d f }|g d}|g d}| |dd df }	| |d }
|||||	|
fD ]}|jg g d |jd d  d	 q_d S )
Nr   皙?)leftwspacer   r   r    )r   r   333333?r   r   )ZxticksZyticksF)add_gridspecadd_subfigurer*   Z
inset_axessetZspinesset_visible)fig_testfig_refgs1f1f2Zax12r~   Ziax1Ziax2ri   ax3r6   r8   r8   r9   test_savefig_transparentN  s   r  c                  C   s"   t jddd} t| dksJ d S )N)r'   r   r'   )r   r   z!<Figure size 100x200 with 0 Axes>)r(   r)   reprr   r8   r8   r9   test_figure_repre  s   r  c                  C   sj   t d d} |  rJ |  rJ t dd} |  sJ |  r"J t dd} |  r-J |  s3J d S )Nr   r   constrained)r   Zget_tight_layoutZget_constrained_layoutr   r8   r8   r9   test_valid_layoutsj  s   


r   c                  C   s  t jdd\} }tt | jdd W d    n1 sw   Y  t|  ts,J d}tjt|d t	ddd	} W d    n1 sFw   Y  t|  t
sTJ d
}tjt|d t	ddd} W d    n1 snw   Y  t|  t
r|J t|  tsJ tjtdd t	dd W d    n1 sw   Y  t jdd\} }| d t|  t
sJ | d t|  tsJ t jdd\} }|tjdd}| | tjtdd | d W d    n1 sw   Y  | d tjtdd | d W d    n	1 sw   Y  t jdd\} }|tjdd}| | tjtdd | d W d    n	1 sIw   Y  | d t|  ts]J tjtdd | d W d    d S 1 svw   Y  d S )Nr  r   皙?)r$   z1The Figure parameters 'layout' and 'tight_layout'r   r   F)r   tight_layoutz7The Figure parameters 'layout' and 'constrained_layout')r   r=   zInvalid value for 'layout'Zfoobarr   zColorbar layout of new layoutr   )r(   r?   rV   r   UserWarningZsubplots_adjust
isinstancer  r   r   r   rW   rX   set_layout_enginerH   r,   rI   rJ   rK   RuntimeErrorr   )r4   r6   ZwstrN   r8   r8   r9   test_invalid_layoutsx  s^   





$r'  c              	   C   sx   t || gddgD ]0\}}td|i |jdd}|jdd W d    n1 s+w   Y  t| ts9J q	d S )NFTzfigure.autolayoutr   )ncolsr'   )w_pad)zipr   
rc_contextr?   r"  r$  r  r   )r  r  r4   Z
autolayoutr|   r8   r8   r9   &test_tightlayout_autolayout_deconflict  s   r,  r   r  r  c                 C   sL   t j| d\}}tjtdd t   W d   dS 1 sw   Y  dS )zj
    Raise a warning when a previously assigned layout changes to tight using
    plt.tight_layout().
    r   z The figure layout has changed tor   N)r(   r?   rV   r   r#  r"  )r   r4   r6   r8   r8   r9   test_layout_change_warning  s   
"r-  c                  C   s"   t  } |   |   |   d S r   )r   r"  r   r8   r8   r9   test_repeated_tightlayout  s   r.  r   c           	   	   C   s.  d| _ d|_ |   tjddgddgdd}tjddgddgdd}tjddd d	d
}tjdddd}tjdd| jddd}|||||fD ]}| | qE|  | }tjddgddg|jddd}tjddd ddd	d}tjdd|jddd}tjdd|jddddd}||||fD ]}|| qd S )Nr!   r   ffffff?l1)gidr!  l2)r   r   ZC1)	transformr1  )r/  rd   r  ZC2)g      @r!  g?ZcrimsonZC3)r3  r   r1     )r3  r1  zorderFr   )r3  clip_onr5  r1  )r3  r   r6  r5  r1  )	r   r?   r(   ZLine2DZCircleZdpi_scale_transZ
add_artistr   ZtransFigure)	r  r  r0  r2  Zr1Zr2Zr3r   ri   r8   r8   r9   test_add_artist  s:   r7  fmt)r   r   psepsr   c                 C   sf   t |d|  }t| |d}| d|d v s!J W d    d S 1 s,w   Y  d S )Nztest.rbasciir!   )r   r(   r   r   encodereadlower)r8  Ztmpdiroutfiler8   r8   r9   test_fspath  s
   
"rB  c                  C   sV  t  \} }|dd |ddd}| j }d}t||j|| j	  dk s+J t||j|| j	  dk s<J t| |j| dk sJJ t| |j
d	 dk sXJ |d
 d}t||j|| j	  dk spJ t| |j| dk s~J |d d}t||j|| j	  dk sJ t|j|g dj|| j	  dk sJ d S )Nr   r"   r   rd   zThis dangles over endgR"@r   r  g|?5^?FgET@T)Zbbox_extra_artists)r(   r?   set_xlimrf   r   get_rendererabsget_tightbboxZx1r   x0Zset_in_layout)r4   r6   r`   r   Zx1Nom0Zx1Nomr8   r8   r9   test_tightbbox  s*   
""
"
"rH  c                  C   s   t jdddd\} }|d   |d tdddtdddgddg t|d j tj	s1J t jdddd\} }|d j
t  |d   |d tdddtdddgddg t|d j tsjJ d S )Nr"   r   Tr   r   i  )r(   r?   r   r+   r   r$  r1   Zget_major_formatterr   ZAutoDateFormatterZset_major_formatterr   rw   r8   r8   r9   test_axes_removal  s   ((rJ  c                  C   s,   t jddd\} }|d   | j  d S )Nr   TrI  r   )r(   r?   r   r   drawrw   r8   r8   r9   test_removed_axis  s   rL  
clear_methrc   clfc                    s  t       jg ksJ  d}t |    jg ks!J  fddtdD }t |    jg ks9J  jddd d }|d}t |   | j	vsYJ  jg ks`J  d }|d} d }|
   j|gksJ  d }|
   j|gksJ | j	v sJ |d}| jv sJ | jv sJ t||   | j	v sJ ||jvsJ | jvsJ | jv sJ |d}t |    jg ksJ  j	g ksJ  fddd	D }d
d |D }t fdd|D sJ t fdd|D sJ t|d |   |d  jvs&J |d  jv s0J |d  j	v s:J t|d |    fddd	D }dd |D }t fdd|D saJ t fdd|D soJ t |    j	g ks}J  jg ksJ d S )Nrz   c                    s   g | ]}  d d|d qS r   r"   r*   r_   r7   r   r8   r9   ra   0  s    z%test_figure_clear.<locals>.<listcomp>r   r"   )r(  nrowsr   c                       g | ]	}  | qS r8   r  rQ  r4   r5   r8   r9   ra   ]      r   r"   c                 S      g | ]}| d qS rz   rP  r_   sfigr8   r8   r9   ra   ^      c                 3       | ]}| j v V  qd S r   r|   r_   r6   r   r8   r9   	<genexpr>_      z$test_figure_clear.<locals>.<genexpr>c                 3   r]  r   subfigsrZ  r   r8   r9   r`  `  ra  c                    rS  r8   rT  rQ  rU  r8   r9   ra   j  rV  c                 S   rX  rY  rP  rZ  r8   r8   r9   ra   k  r\  c                 3   r]  r   r^  r_  r   r8   r9   r`  l  ra  c                 3   r]  r   rb  rZ  r   r8   r9   r`  m  ra  )r(   r)   rc   r|   r*   getattrr/   r  r  rc  r   rP   )rM  r6   r|   ZsubfigZsubaxesZmainaxesrc  r8   rU  r9   test_figure_clear!  sh   




re  c                  C   s    t  D ]	} d| jvsJ qd S )NrN  )r   __subclasses____dict__)klassr8   r8   r9   test_clf_not_redefineds  s   ri  Zmpl20c                  C   s   t  \} }|jdgdgdgdd | j  | jrJ t|jj|jj	d  |jj
|jjd  |d d}| | | jr>J d S )Nr   r   T)Zpickerr   )rp   rs   ZinaxesZguiEvent)r(   r?   scatterr   rK  Zstaler   bboxrG  r   Zy0r   Zpick)r4   r6   Zmouse_eventr8   r8   r9   test_picking_does_not_staley  s   


rl  c                  C   s>  t  } | ddd}| jtddksJ | jtddks#J | ddd}| jtddks6J | jtddksBJ | ddd}| jtddksUJ | jtddksaJ | ddd}| jtddkstJ | jtddksJ tt	 | ddd	 W d    d S 1 sw   Y  d S )
Nr   r   r   rS   r"   r   )r;   r   )r   r   )r;   rS   )r   r   )
r(   r)   r*   get_subplotspecZrowspanr/   colspanrV   rW   
IndexError)r4   r~   ri   r  Zax4r8   r8   r9   test_add_subplot_twotuple  s    "rq  ztightbbox_box_aspect.svgr   Zteal)r  r   )styler   remove_textc                  C   sL   t  } | dd}| |d }| j|d dd}|d |d d S )	Nr"   r   r  rW  r   r   rd   )r   r"   r"   )r(   r)   r  r*   Zset_box_aspect)r4   r5   r~   ri   r8   r8   r9   test_tightbbox_box_aspect  s   
rt  )r   r   r:  r   c                 C   s4   |  }|td |   }|jtddd d S )NrS   T)Zanimated)r?   r+   r/   )r  r  Zax_refZax_testr8   r8   r9    test_animated_with_canvas_change  s   ru  c                   @   sf  e Zd Zedgdejdg dg dgg dg dgdd	gd
d Zedgddd Zedgddd Z	edgddd Z
dd Zdd Zedgdejdddgddggdfddgddggdfddgddggdfddgddggdfddgddggdfddgddggdfgdd  Zd!d" Zedgdejd#i d$d%idgd&d' Zedgdejd(d)ed)gd*d+ Zd,d- Zd.d/ Zd0d1 Zedgdejd2g d3d4d5 Zejd6ddgddggd7fddgdddgd8d9ggggd:fd;ddd8gd9gggd<d<ggd=fgd>d? Zedgdd@dA Zejd2g dBdCdD ZdEdF ZdGdH ZdS )ITestSubplotMosaicr   r  rp   Arx  BCDry  r"   r"   r   r   r;   r   )rw  rz  )r}  r~  c                 C   s   | |}| D ]	\}}|| q	tt|}t|t|ks$J |dd}||d dd df }	|	|d  ||d d df }
|
|d  ||d }||d  ||d }||d  d S )Nr   r   r"   r   r"   r   r"   r"   )	subplot_mosaicitemsrl   sortedr,   uniquer   r  r*   )r   r  r  rp   	grid_axesrt   r6   labelsr5   axAaxBaxCaxDr8   r8   r9   
test_basic  s   

zTestSubplotMosaic.test_basicc                 C   s  ddgddgg}ddgddgg}| d	 | d	 |||gg}| D ]	}||  q&|d
d}|d dd}t|D ]\}	}
t|
D ]\}}|||	|f | qJqB|d dd}t|D ]\}	}
t|
D ]\}}|||	|f | qpqhd S )Nrx  ry  r{  r|  EFGHr  r"   r   r  rW  )	r%  r  valuesrl   rm   r  subgridspecr@   r*   )r   r  r  rp   rs   r  r6   r5   Zgs_leftjrk   rt   rD   Zgs_rightr8   r8   r9   test_all_nested  s&   

z!TestSubplotMosaic.test_all_nestedc                 C   s   | d | d ddgddgg}dg|gg}||}| D ]	\}}|| q!|dd}|d	 dd}	||	d
 }
|
d ||	d }|d ||	d	 }|d ||	d }|d ||d
 }|d d S )Nr  rx  ry  r{  r|  r  r   r"   r  r  rW  r  )r%  r  r  rl   r  r  r*   )r   r  r  rp   rs   r  rt   r6   r5   Zgs_nr  r  r  r  ZaxFr8   r8   r9   test_nested  s&   






zTestSubplotMosaic.test_nestedc                 C   s<   g dg dg}d}| dg|gg | dg|gg d S )Nrx  ry  ry  r{  r{  r|  )r  r  r  )r  )r   r  r  rp   Zxtr8   r8   r9   test_nested_tuple	  s   z#TestSubplotMosaic.test_nested_tuplec                 C   s`   ddgdgggg}ddg}t j||d\}}|d   |ks"J |d   |ks.J d S )Nrx  ry  r{  r   r"   )width_ratios)r(   r  get_gridspecZget_width_ratios)r   rp   r  r4   axdr8   r8   r9   test_nested_width_ratios  s   z*TestSubplotMosaic.test_nested_width_ratiosc                 C   sf   ddgdgggddgg}ddg}t j||d\}}|d   |ks%J |d   |ks1J d S )Nrx  ry  r{  r|  r"   r   height_ratios)r(   r  r  Zget_height_ratios)r   rp   r  r4   r  r8   r8   r9   test_nested_height_ratios  s   z+TestSubplotMosaic.test_nested_height_ratioszx, empty_sentinelrx  Nry  .SKIPr   r"   r   c                 C   s   |dkr	d|i}ni }|j |fi |}| D ]	\}}|| qtdd |D |dh }	t|	t|ks9J |dd}
||
d }||	d  ||
d	 }||	d
  d S )Nr  empty_sentinelc                 S   s   h | ]	}|D ]}|qqS r8   r8   )r_   rownamer8   r8   r9   	<setcomp><  rV  z/TestSubplotMosaic.test_empty.<locals>.<setcomp>r  r   r  r   r  r"   )r  r  rl   r  r   r  r*   )r   r  r  rp   r  r   r  rt   r6   r  r5   r  r  r8   r8   r9   
test_empty%  s   
zTestSubplotMosaic.test_emptyc                 C   s   t jtdd tddg W d    n1 sw   Y  t jtdd tdg W d    n1 s6w   Y  t jtdd tddgg W d    n1 sUw   Y  t jtdd tddgdd	gg W d    d S 1 sxw   Y  d S )
Nz
must be 2Dr   Zfoobar)r  r   rv   )r   rv   c)rV   rW   rX   r(   r  r   r8   r8   r9   test_fail_list_of_strH  s   "z'TestSubplotMosaic.test_fail_list_of_str
subplot_kwr   r   c           	      C   s\   ddgg}|j ||d}|pi }|dd}|j|d fi |}|j|d fi |}d S )Nr"   r   )r  r  rW  )r  r  r*   )	r   r  r  r  rp   r  r5   r  r  r8   r8   r9   test_subplot_kwR  s   
z!TestSubplotMosaic.test_subplot_kwmulti_valueZBCc           	      C   s^   d}|j |ddidddi|ddiid}|dd}tg d	|D ]\}}|j||d
 q!d S )NzAB;CDr   r   r|  bluegreen)r  per_subplot_kwr   )r   r  r  r  r   )r  r  r*  r*   )	r   r  r  r  rp   r  r5   rr   specr8   r8   r9   test_per_subplot_kw^  s   	z%TestSubplotMosaic.test_per_subplot_kwc                 C   s   t j}|dg dgksJ |dddgddggksJ |dddgddgdd	ggks-J |d
g dgks8J |dddgddggksFJ |dddgddgdd	ggksWJ d S )NABC)rx  ry  r{  zAB;CCrx  ry  r{  zAB;CC;DEr|  r  z7
                         ABC
                         zR
                         AB
                         CC
                         zn
                         AB
                         CC
                         DE
                         )r   Z_normalize_grid_stringr   	normalizer8   r8   r9   test_string_parsero  s   "z$TestSubplotMosaic.test_string_parserc                 C   s   t j}|i i di i dksJ |di ii i dksJ tjtdddd |i i d W d    n1 s;w   Y  tjtdddd |i i d W d    d S 1 s^w   Y  d S )Nrx  ry  zThe key ry  z appears multiple timesr   )r  ry  )ry  r  )r   Z_norm_per_subplot_kwrV   rW   rX   r  r8   r8   r9   test_per_subplot_kw_expander  s   "z.TestSubplotMosaic.test_per_subplot_kw_expanderc                 C   sT   t jtdtddd t jddi id W d    d S 1 s#w   Y  d S )Nz	The keys ry  z are inr   rx  )r  )rV   rW   rX   r  r   r  r   r8   r8   r9   test_extra_per_subplot_kw  s
   "z+TestSubplotMosaic.test_extra_per_subplot_kwstr_pattern)zAAA
BBBz	
AAA
BBB
zABC
DEFc                 C   s,   | |}| dd | dD }d S )Nc                 S   s   g | ]}t |qS r8   )list)r_   Zlnr8   r8   r9   ra     rb   z;TestSubplotMosaic.test_single_str_input.<locals>.<listcomp>
)r  stripsplit)r   r  r  r  r  r8   r8   r9   test_single_str_input  s   
z'TestSubplotMosaic.test_single_str_inputzx,matchzS(?m)we found that the label .A. specifies a non-rectangular or non-contiguous area.r{  r|  z4There are duplicate keys .* between the outer layout)z	AAA
c
BBB'All of the rows must be the same lengthr  r  c                 C   sF   t  }tjt|d || W d    d S 1 sw   Y  d S )Nr   )r(   r)   rV   rW   rX   r  )r   rp   r   r4   r8   r8   r9   	test_fail  s   "zTestSubplotMosaic.test_failc                 C   s(   | t t gg | ddgg d S )Nrx  ry  )r  object)r   r  r  r8   r8   r9   test_hashable_keys  s   z$TestSubplotMosaic.test_hashable_keys)abcZcabZbcaZcbaZacbZbacc                 C   sD   t  }||}t|t|ksJ t|jt| ks J d S r   r(   r)   r  r  r|   r  )r   r  r4   ax_dictr8   r8   r9   test_user_order  s   
z!TestSubplotMosaic.test_user_orderc                 C   st   dddgddgggddgdd	d
gdgggggg}t  }||}t|tdks+J t|jt| ks8J d S )Nrx  ry  r{  r|  r  r  r  r  r  IZ	ABCDEFGHIr  r   r   r4   r  r8   r8   r9   test_nested_user_order  s   
z(TestSubplotMosaic.test_nested_user_orderc                 C   sx   dddgddgggddgdd	d
gdgggggg}t  }|j|ddd}|d jddd tdd | D s:J d S )Nrx  ry  r{  r|  r  r  r  r  r  r  T)r   r   r   logit)ZxscaleZyscalec                 s   s(    | ]}|  d ko| dkV  qdS )r   r  N)Z
get_xscale
get_yscaler_  r8   r8   r9   r`    s     z3TestSubplotMosaic.test_share_all.<locals>.<genexpr>)r(   r)   r  r  rP   r  r  r8   r8   r9   test_share_all  s   z TestSubplotMosaic.test_share_all)r   r   r   r	   rV   markparametrizer  r  r  r  r  r  r  r  r  tupler  r  r  r  r  r  r  r  r  r  r8   r8   r8   r9   rv    s    





!












rv  c                  C   sv   t  } | ddd}| ddd}t jddd| d}|  }|  }|  }||ks3J ||ks9J dS )	z)Test that these all use the same gridspecr   r   rm  r;   )r   r   rO  )ro  r4   N)r(   r)   r*   Zsubplot2gridrn  r  )r4   r~   ri   r  r  Zgs2Zgs3r8   r8   r9   test_reused_gridspec  s   r  ztest_subfigure.pngr   )rr  r   c                  C   s   t jd tjdd} | dd}|d dd}|jD ]}|jt j	ddddd	}q|d j
||d
 |d d |d d |d dd}|jD ]}|jt j	ddddd	}qO|d j
||dd |d d |d d | jddd d S )N!N,r  r   r"   r   r   r   ZvminZvmaxr>   	Left Sider   r   Zbottom)r6   locationz
Right SideFigure suptitlexx-largefontsize)r,   rI   seedr(   r)   r   r?   rA   rH   rJ   rK   re   r   )r4   subrL   r6   rN   r8   r8   r9   test_subfigure  s    

r  c                  C   s8   t jdd} | dd}tj| | j j	d d S )Nr  r   r"   r   g       @)
r(   r)   r   r,   rF   rG   rF  r   rD  r   )r4   r  r8   r8   r9   test_subfigure_tightbbox  s   r  c                  C   sV   t jdd} |  }| |  ksJ |d | dks!J |  dks)J d S )Nr!   r   r   )r(   r)   r   Zget_dpiZset_dpir4   sub_figr8   r8   r9   test_subfigure_dpi  s   
r  ztest_subfigure_ss.png{Gz?)rr  r   r   c                  C   s   t jd tjdd} | dd}| j|d dd}|dd}|jD ]}|j	t j
d	d	d
dd}q$|j||d |d | |d }|t d |d | jddd d S )Nr  r  r   r"   r   r   Zpinkr  r   r  r  r>   r  r   r
   r  r  r  )r,   rI   r  r(   r)   r  r  r?   rA   rH   rJ   rK   re   r*   r+   r-   rl   )r4   r5   r  rL   r6   rN   r8   r8   r9   test_subfigure_ss  s   


r  ztest_subfigure_double.pngc            
      C   s  t jd tjddd} | d | jdddd	}|d
 d |d
 d |d d |d d |d
 jddddgd}|d
 d |d
 d |d
 jdddd}|D ]&}d}|j	t j
ddddd}|jd|d |jd|d |jd|d q\|d
 j||d |d d |d d |d jd ddd!}t|D ]\}}|d"|  q|d d# |d d$ |d dd}	d S )%Nr  r  )r'      )r   r   r4   r"   r   gQ?)r  r   Zcoralz
subfigs[0]z
subfigs[1]gffffff?r  zsubfigsnest[0]rk   Tr      r   g      g      @r  zx-labelr  zy-labelTitler>   zsubfigsnest[1]rq   r   rI  ylabelr   r   )r,   rI   r  r(   r)   re   r   r   r?   rH   rJ   r0   r.   rl   rK   r@   r   r   )
r4   rc  ZsubfigsnestZaxsnest0r6   r  rN   Zaxsnest1rM   ZaxsRightr8   r8   r9   test_subfigure_double6  s6   
r  c               	   C   sV  t jdd} | dd}| |d | |dddf | |dddf | |dd dd f g}d}d	}tj|d jjd
|d d g tj|d jj	|d |g tj|d jj|d |d g tj|d jj	|d d |g tj|d jj|d dg tj|d jj	||d g t
dD ]}||   q|   d S )NTr<   r   r  r   r   r"       r   r;   )r(   r)   r  r  r,   rF   rG   rk  minmaxr/   r*   rB   )r4   r5   sub_figsr   r   r7   r8   r8   r9   test_subfigure_spanning`  s$   """r  c            	      C   s   t jddd} | jdddddgd\}}|jdd	d
}||dd df }|jddgddgd |j|dddf |d}|jddgddgd |j|ddd	f |d}d| _|   | }d| _|   | }t	j
|| d S )NT)r'   r   )r=   r   r"   r   r   r   )r  r     )rR  r(  r   g!<LgkX.8@i  i  )rp   rs   r   r  g YI_gRϫW@x   i,  )r(   r)   r   r  r*   rj  r   rB   Z
get_xticksr,   rF   rG   )	r4   Z	subfig_blZ	subfig_brr5   r~   ri   r  Zticks120Zticks300r8   r8   r9   test_subfigure_ticks}  s"   

r  ztest_subfigure_scatter_size.png)rr  rs  c                  C   s   t  } | dd}| |d }|jg dg dddd |jg dg dg ddd | |d	 }|dd}||d	 fD ] }|jg dg dddd
d |jg dg dg dddd q@d S )Nr"   r   r   r   s)r  marker)r   r;   rS   )r   r   r
  r   rk   )r  r  rr   rq   )r(   r)   r  r*   rj  r  r?   )r4   r5   r}   r[  rL   r6   r8   r8   r9   test_subfigure_scatter_size  s   "r  c                  C   sN   t jdd} |  }|d}|dd}|| t }| j|dd d S )Nr  r   rz   r"   r   r   )	r(   r)   r   r*   r  Z	bar_labelr   r   r   )r4   r  r6   rv   bufferr8   r8   r9   test_subfigure_pdf  s   

r  c                  C   s  t  jddddd} d}d}tj| d jjd	|d
 g tj| d jj|d |g tj| d jj|d |d
 g tj| d jj|d |g tj| d jj|d |d
 g tj| d jj||g tj| d jjddg tj| d jj|d |d g tj| d jj|d dg tj| d jj|d |d g tj| d jj|d dg tj| d jj||d g d S )Nr   r   rd   gUUUUUU?)hspacer  r  r  r  r   r   r  rW  gffffff?g?r#   r/  r  r   r   r  r   )	r(   r)   r   r,   rF   rG   rk  r  r  )r  r   r   r8   r8   r9   test_subfigures_wspace_hspace  s   """""r  c                  C   s   t  } | ddd}| ddd}|d usJ ||usJ t   t  } | jddddd}| jddddd}|d us>J ||usDJ t   t  } | jddddd}| ddd}|d usbJ |jdksiJ ||usoJ t   d S )Nr"   r   r   rectilinear)r(   r)   r*   rU   r  r4   r6   r~   r8   r8   r9   test_add_subplot_kwargs  &   r  c                  C   s   t  } | g d}| g d}|d usJ ||usJ t   t  } | jg ddd}| jg ddd}|d us>J ||usDJ t   t  } | jg ddd}| g d}|d usbJ |jdksiJ ||usoJ t   d S )Nry   r   r   r  )r(   r)   r{   rU   r  r  r8   r8   r9   test_add_axes_kwargs  r  r  c                    s   t dd t \ }|jj fdd}td|    dgks'J  fdd}td|  t	j
 d	d
dg d S )Nr   cannot show the figurec                      s$   t d jgddR    d S )Nbutton_press_eventr   r   r"   )r   r   _processr8   r4   Ztransr8   r9   single_press  s   $z!test_ginput.<locals>.single_pressr   r  c                      s   t d jgddR    td jd  t d jgddR    t d jgddR    t d jgdd	R    d S )
Nr   r  r"   key_press_eventZ	backspacer  r   rd   r   r  r   )r   r   r  r   r8   r  r8   r9   multi_presses
  s
      $z"test_ginput.<locals>.multi_pressesr   r  r  )r   r   r(   r?   Z	transDatar3  r   startZginputr,   rF   rG   )recwarnr6   r  r  r8   r  r9   test_ginput  s   r  c                 C   s   t dd t }|jddd u sJ tdtd|jdj	  | du s)J tdt
d|jd	d	d
j	  | du s@J d S )Nr   r  r   )Ztimeoutr  ru   Tr   r   r"   F)r   r   r(   r)   Zwaitforbuttonpressr   r   r   r  r	  r   )r
  r4   r8   r8   r9   test_waitforbuttonpress  s   r  c                  C   s>   t dd} | jdddd}|  dksJ | dksJ d S )Nzwhole Figure)rD   r"   z
sub figure)r   r   rm   r  r8   r8   r9   test_kwargs_pass  s   
r  c                 C   s   |j dddd |jdddd |jdddd tddddd	 |  d | d | d W d    d S 1 s=w   Y  d S )
NZxlabelr   r   )r   r   r  r  Zlightr   )zfigure.labelweightzfigure.labelsizezfigure.titleweightzfigure.titlesize)r   r   re   r   r+  )r  r  r8   r8   r9   test_rcparams'  s   


"r  c                  C   s   t  \} }|ddgddg |d t| }|jd |us#J |jd  dks.J |jd d | dks>J |dd | 	  |	  |
 d	ksTJ |jd 
 d
ks_J d S )Nr   r"   r   r   r   Zlinearr         Y@)r   r  rW  )r(   r?   r+   r   copyZdeepcopyr|   r  rC  rB   Zget_xlim)rg   r6   rh   r8   r8   r9   test_deepcopy5  s   

r  c                  C   sF   t dd} | jd | jdksJ tt| }|jdks!J d S )Nr   r  r   i&  )r   r   r  r   pickleloadsdumps)r4   rh   r8   r8   r9   %test_unpickle_with_device_pixel_ratioN  s
   
r  c                  C   sJ   ddi} t | }tjddddg| d | |ksJ tjdddg| d d S )Nr  r   r"   r   )r  Zgridspec_kwZAB)dictr(   r?   r  )r5   Zgs_origr8   r8   r9   test_gridspec_no_mutate_inputV  s
   r  )r:  r   r   r9  r   Zsvgzc                 C   s   t  jt | i d d S )Nr   Zmetadata)r   r   r   r   r8  r8   r8   r9   test_savefig_metadata^  s   r  )Zjpegr   r   ZtiffZwebprawZrgbac                 C   sJ   t jtdd t jt | i d W d    d S 1 sw   Y  d S )Nzmetadata not supportedr   r  )rV   rW   rX   r   r   r   r   r  r8   r8   r9   test_savefig_metadata_errorc  s   "r  c                  C   s|   ddddd} t g |  }tjtjjd	i | d}tjt	dd |
 |ks,J W d    d S 1 s7w   Y  d S )
Nr   r  gQ?g{Gz?)r)  Zh_padr  r  r   zwill be deprecatedr   r8   )r  r  r(   r)   r   Zlayout_enginer   rV   r   PendingDeprecationWarningZget_constrained_layout_pads)paramsZexpectedr4   r8   r8   r9    test_get_constrained_layout_padsi  s   "r  c                  C   st   t  } t }| j|dd |d d| v sJ | d t }| j|dd |d d| vs8J d S )Nr   r   r   z<g F)r   r   StringIOr   seekr>  r  )r4   r  r8   r8   r9   test_not_visible_figureq  s   


r"  )r  r   r   Zpathlibr   r  platformZ	threadingr   typesr   r   Znumpyr,   rV   ZPILr   Z
matplotlibr   r   Zmatplotlib.testing.decoratorsr   r	   Zmatplotlib.axesr
   Zmatplotlib.backend_basesr   r   Zmatplotlib.figurer   r   Zmatplotlib.layout_enginer   r   r   Zmatplotlib.tickerr   r   r   Zmatplotlib.pyplotZpyplotr(   Zmatplotlib.datesZdatesr   machiner:   rO   rY   rZ   rj   ro   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r   rr  contextr   r   infr   r   r   r   r   r   Zparamr   r  r	  r  r+  r  r  r   r'  r,  r-  r.  r7  rB  rH  rJ  rL  re  ri  rl  rq  rt  ru  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r8   r8   r8   r9   <module>   s0   
'#

,

		

'

	



4




	
Q


	
  7




(








