U
    f"                  	   @   s  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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rd ndddd Z+dd Z,dd Z-dd Z.dd Z/edgdd Z0ed gd!d" Z1d#d$ Z2d%d& Z3d'd( Z4ed)gd*d+ Z5d,d- Z6ed.gddgd/d0d1d2d3d4 Z7d5d6 Z8d7d8 Z9d9d: Z:d;d< Z;d=d> Z<ej=>d?d@dAdBgdCdD Z?ej@AdEdFdG ZBej=>dHdIejCfdJejDdIfgdKdL ZEdMdN ZFdOdP ZGdQdR ZHdSdT ZIdUdV ZJej=>dWejKdXej=LdXgdYejKdZej=LdZgdYgd[d\ ZMd]d^ ZNd_d` ZOdadb ZPdcdd ZQdedf ZRedgdgdhdi ZSej=>djdkdlgdmdn ZTdodp ZUeddqgdgdrds ZVej=>dtddqdudvdgdwdx ZWdydz ZXd{d| ZYd}d~ ZZej=>dddgdd Z[dd Z\ej@Addd Z]dd Z^edgdddddddd Z_eddqdvdgdgdd Z`G dd dZadd Zbedgdddiddd Zcdd Zddd Zeedgdddidddd Zfedgdddiddd Zgdd Zhej@Addd Ziedgddddd Zjdd Zkdd Zldd Zmdd Zndd Zodd Zpdd Zqedgdgdd ZrddÄ Zsddń ZtddǄ ZuddɄ ZvdS )    N)datetime)Path)Timer)SimpleNamespace)Image)gridspec)image_comparisoncheck_figures_equal)Axes)Figure
FigureBase)ConstrainedLayoutEngineTightLayoutEnginePlaceHolderLayoutEngine)AutoMinorLocatorFixedFormatterScalarFormatterZfigure_align_labelspngsvg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 ]}| |d|f }|d|  |
d|  |dkr|jd |j  |dkr| D ]}|d q|dkrv|jd |j  qvt	dD ]}| |d|f }|
d|  |d|  |dkr|tdd
d |jd |j  | D ]}|d qq|   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 r7   C/tmp/pip-target-lpfmz8o1/lib/python/matplotlib/tests/test_figure.pytest_align_labels   s>    



r9   c                  C   s  t dd\} }t|jD ]<\}}|d |d |td| td|  q|   | 	  | 
  td}td}t|jD ]0\}}|jj d ||< |jj d ||< qtj|d d |dd   tj|d d d |dd d  t jdddd\} }t|jD ]2\}}|d |d |tjd	d	}q| j||d
 |   | 	  | 
  td}td}t|jD ]2\}}|jj d ||< |jj d ||< qtj|d d |dd   tj|d d d |dd d  d S )Nr   BooZWho   r!   r   Tconstrained_layoutr&   r5   )r'   subplots	enumerateflatr/   r*   r+   r,   Zalign_ylabelsZalign_xlabelsdraw_without_renderingzerosr0   labelget_positionr2   testingassert_allclose
pcolormeshrandomrandncolorbar)r3   axsnnr5   ZxnZynpcr7   r7   r8   test_align_labels_stray_axesE   s>    

"

"



rO   c               	   C   s  t d t d} t d t d t   t d t d t d t  dddddgkshtt  d	dd	dd	gkstt d
 t   t d t d t  ddgkstt  d	dgkstt |  t  | ksttt	 t t
  W 5 Q R X d S )Nalltodayr   tomorrowr   r!   r;       r&   )r'   closer(   Zget_fignumsAssertionErrorZget_figlabelsZgcfpytestraises
ValueErrorr   )Z	fig_todayr7   r7   r8   test_figure_labelh   s(    










rZ   c                   C   s   t d t d t d t   t ds4tt dsBtt dsPtt ds^tt d t d t drtt drtd S )Noner   threer;   )r'   r(   Zfignum_existsrV   rU   r7   r7   r7   r8   test_fignum_exists   s    




r]   c                  C   s   d} d}t jdd}||  dd |jD | gks8tt jddd}|d	d	| ||ks`td
d |jD | |gks|tt jddddd\}}||kstdd |jD g kstd S )NzA fancy plotzReally fancy!r!   )numc                 S   s   g | ]}|  qS r7   Zget_text.0tr7   r7   r8   
<listcomp>   s     z$test_clf_keyword.<locals>.<listcomp>F)r^   clear      ?c                 S   s   g | ]}|  qS r7   r_   r`   r7   r7   r8   rc      s     r   Tc                 S   s   g | ]}|  qS r7   r_   r`   r7   r7   r8   rc      s     )r'   r(   suptitleZtextsrV   textr?   )Ztext1Ztext2Zfig0fig1fig2ax2r7   r7   r8   test_clf_keyword   s    
rk   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   )r3   r5   r7   r7   r8   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yrl   re   kZ_yzb)r'   r?   r*   Zlegendr3   rL   r7   r7   r8   test_figure_legend   s    rx   c                  C   s   t  } | ddddg}|  |ks*t| d}|  |ksDt| | | j||gks`t|  |kspt| | | j||gkst| | | j||gkst|  |kstd S )Nr   r!   o   )r'   r(   add_axesZgcarV   r)   axesZsca)r3   ax0ax1r7   r7   r8   test_gca   s    



r~   c               	   C   s   t  } | jtd tt | jtdd W 5 Q R X tt | jtdd W 5 Q R X tt | jddd W 5 Q R X tt | jdd W 5 Q R X d S )	N)
axes_class3d)r   
projectionT)r   polar)r   r   *   r   )r'   r(   r)   r
   rW   rX   rY   	TypeErrorr3   r7   r7   r8   test_add_subplot_subclass   s    r   c               	   C   s  t  } tjtdd | ddd W 5 Q R X tjtdd | ddd W 5 Q R X tjtdd | ddd W 5 Q R X tjtdd | ddd W 5 Q R X tjtdd | ddd	 W 5 Q R X tjtd
d | d W 5 Q R X tjtd
d | d W 5 Q R X tjtdd | dd W 5 Q R X tjtdd | dddd W 5 Q R X tjtdd | ddd W 5 Q R X tjtdd | ddd W 5 Q R X t  \}}tjtdd | | W 5 Q R X 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   re   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(   rW   rX   rY   r)   r   r?   r3   _r5   r7   r7   r8   test_add_subplot_invalid   sH    r   Zfigure_suptitlec                  C   s.   t  \} }| jddd | jdddd d S )NZhellorl   )rr   titlerq      )rr   Zrotation)r'   r?   rf   )r3   r   r7   r7   r8   test_suptitle  s    r   c                  C   sV   t  \} }tjjddd}| jd|d}| | ks>t|	 |	 ksRtd S )NZlargebold)sizeweightzfontprops title)Zfontproperties)
r'   r?   mplZfont_managerZFontPropertiesrf   Zget_fontsizeZget_size_in_pointsrV   Z
get_weight)r3   r5   Zfpstxtr7   r7   r8   test_suptitle_fontproperties  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!   figsizer   r         333333?red)Zradiusalphar   )	r'   r(   set_facecolorpatchZ	set_alphaZpatchesappendr   ZCirclePolygonr   r7   r7   r8   
test_alpha"  s    
   r   c               	   C   s:   t t& ttjd d D ]} t  qW 5 Q R X d S )Nzfigure.max_open_warningr!   )rW   warnsRuntimeWarningr.   r   ZrcParamsr'   r(   )r6   r7   r7   r8   test_too_many_figures1  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| f|| d S N)r
   __init__)selfr   argskwargsr7   r7   r8   r   C  s    z7test_iterability_axes_argument.<locals>.MyAxes.__init__)__name__
__module____qualname__r   r7   r7   r7   r8   MyAxesB  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)rY   )r   itemr7   r7   r8   __getitem__H  s    z;test_iterability_axes_argument.<locals>.MyClass.__getitem__c                    s    d| ifS )Nr   r7   r   r   r7   r8   _as_mpl_axesL  s    z<test_iterability_axes_argument.<locals>.MyClass._as_mpl_axesN)r   r   r   r   r   r7   r   r7   r8   MyClassF  s   r   r!   r   )r
   r'   r(   r)   rU   )r   r3   r7   r   r8   test_iterability_axes_argument7  s
    	r   c                  C   s   t  } | d |  dks"t| d |  dks<t| dd |  dksXt|  dksht| d |  dkst|  dkstd S )NrS   r!   r   r;   )r!   r   r   )r'   r(   Zset_figwidthZget_figwidthrV   Zset_figheightZget_figheightset_size_inchesr   r7   r7   r8   test_set_fig_sizeT  s    


r   c                  C   sh   t dd\} }|d   | d d D ]}|| jks,tq,|d | jksRtt| jdksdtd S )Nr   )r   r   r   r   )r'   r?   removeZravelr{   rV   lenr3   rL   r5   r7   r7   r8   test_axes_removej  s    r   c                  C   s   t tdtd \} }||  dks.tt d\} }||  dksLtt td\} }||  dksptt td\} }||  dkstd S )Nr   r!   r!   r   re   )r   r   )r'   Z	figaspectr+   Zfloat64rV   rC   )whr7   r7   r8   test_figaspects  s    r   whichbothmajorminorc           
      C   sN  ddddddddd	d
ddg}ddddddddddddg}d}ddddddd g}t |}t |}t \}}||| |  |  |jt	d t
 " t
d!d" |jt| W 5 Q R X |d#|d$|  | d%kr|jd& d'd(D ]}	t|	 |kstq| d)krJ|jd& d*d+D ]}	t|	 |ks,tq,d S ),Nz
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 2013z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         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_dater0   Zset_minor_locatorr   warningscatch_warningsfilterwarningsZset_minor_formatterr   Zautofmt_xdater{   r1   intZget_rotationrV   )
r   datetimeZangleZminorsrp   rs   r3   r5   rD   r7   r7   r8   test_autofmt_xdate~  sR          
     




r   defaultc                  C   sn   t jdd} |   | jjjdks&t| jjjdks8td| _|   | jjjdksXt| jjjdksjtd S )N)r;   r;   r   i  2      )	r'   r(   rB   canvasrendererheightrV   widthdpir   r7   r7   r8   test_change_dpi  s    r   zwidth, heightr!   )r   r!   c              	   C   sT   t t tj| |fd W 5 Q R X t }t t || | W 5 Q R X d S )Nr   )rW   rX   rY   r'   r(   r   )r   r   r3   r7   r7   r8   test_invalid_figure_size  s
    r   c               	   C   s   t  } tjtdd |   W 5 Q R X tt | dddtjf W 5 Q R X tjtdd$ | jddddgddddgd W 5 Q R X t 	 \}}tjtd	d | | W 5 Q R X d S )
Nz.missing 1 required positional argument: 'rect'r   皙?re   z#multiple values for argument 'rect'r   r!   )rectr   )
r'   r(   rW   rX   r   rz   rY   r+   nanr?   r   r7   r7   r8   test_invalid_figure_add_axes  s    (r   c                  C   s  t jdddddd\} }|jD ]}|dddgdddg q|d |d |d	d d f D ]}d	t|jjd
dks`t	q`|dd d f D ]}d	t|jjd
dk st	q|d d df D ]}d	t|j
jd
dkst	q|d d d	f D ]}d	t|j
jd
dk st	qd S )Nr   TF)sharexshareyZsqueezer&   r   r   logr   r   )r   r!   )r'   r?   rA   r*   
set_yscaleZ
set_xscaler   r0   Zget_ticklabelsrV   r2   r   r7   r7   r8   test_subplots_shareax_loglabels  s    


r   c               	   C   s6   t  } d}tjt|d | dd W 5 Q R X d S )Nz9savefig\(\) takes 2 positional arguments but 3 were givenr   z
fname1.pngz
fname2.png)r'   r(   rW   rX   r   savefig)r3   msgr7   r7   r8   test_savefig  s    r   c               
   C   s@   t  } dD ].}tt | jt |dd W 5 Q R X qd S )N)r   pdfr   ZtifZjpgT)formatZnon_existent_kwarg)r'   r(   rW   rX   r   r   ioBytesIO)r3   r   r7   r7   r8   test_savefig_warns  s    r   c               	   C   s\   t  } tjtdd | jddd W 5 Q R X tjtdd | jddd W 5 Q R X d S )	NzNo module named '@absent'r   testzmodule://@absent)backendz-The 'pdf' backend does not support png outputztest.pngr   )r'   r(   rW   rX   ModuleNotFoundErrorr   rY   r   r7   r7   r8   test_savefig_backend  s    r   r   ZAgg)ZmarksZCairoc              	   C   s   t  \}}|dddg t &}|j|dd t|}|  W 5 Q R X t  \}}|dddg |j	
d t &}|j|dd t|}|  W 5 Q R X ||kstd S )Nr!   r   r   r   r   )r'   r?   r*   r   r   r   r   openloadr   _set_device_pixel_ratiorV   )r   r3   r5   bufZratio1Zratio2r7   r7   r8   test_savefig_pixel_ratio   s    



r   c                  C   s0   t jdd} | jt dd |  js,td S )N
compressedr   r   bbox_inches)r'   r(   r   r   r   get_layout_engineZ	_compressrV   r   r7   r7   r8   #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sxtd S )
Nr   (   )Zaspectr   r;   r   T)originalF)r'   r?   rH   r+   rI   rJ   rK   r   r   r   r   Z
transformsZBboxr5   rE   ZboundsrV   )r3   r5   rN   Zcbarr7   r7   r8   test_savefig_locate_colorbar  s    &r  c                  C   s"   t jddd} t| dkstd S )N)r&   r   r&   )r   r   z!<Figure size 100x200 with 0 Axes>)r'   r(   reprrV   r   r7   r7   r8   test_figure_repr)  s    r  c                  C   sj   t d d} |  rt|  r"tt dd} |  s8t|  rDtt dd} |  rZt|  sftd S )Nr   r   constrained)r   Zget_tight_layoutrV   Zget_constrained_layoutr   r7   r7   r8   test_valid_layouts.  s    


r  c               	   C   sV  t jdd\} }tt | jdd W 5 Q R X t|  tsDt	d}tjt|d t
ddd	} W 5 Q R X t|  tst	d
}tjt|d t
ddd} W 5 Q R X t|  trt	t|  tst	tjtdd t
dd W 5 Q R X t jdd\} }| d t|  ts t	| d t|  ts>t	t jdd\} }|tjdd}| | tjtdd | d W 5 Q R X | d tjtdd | d W 5 Q R X t jdd\} }|tjdd}| | tjtdd | d W 5 Q R X | d t|  ts.t	tjtdd | d W 5 Q R X 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?   rW   r   UserWarningZsubplots_adjust
isinstancer   r   rV   r   r   rX   rY   set_layout_enginerH   r+   rI   rJ   rK   RuntimeErrorr   )r3   r5   ZwstrN   r7   r7   r8   test_invalid_layouts<  sN    





r  r   c              
   C   sd   t || gddgD ]L\}}td|i |jdd}|jdd W 5 Q R X t| tstqd S )NFTzfigure.autolayoutr   )ncolsr&   )w_pad)	zipr   
rc_contextr?   r
  r  r   r   rV   )fig_testfig_refr3   Z
autolayoutr{   r7   r7   r8   &test_tightlayout_autolayout_deconflictp  s
    r  r   r  r   c              	   C   s6   t j| d\}}tjtdd t   W 5 Q R X 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?   rW   r   r  r
  )r   r3   r5   r7   r7   r8   test_layout_change_warningy  s    r  c                  C   s"   t  } |   |   |   d S r   )r   r
  r   r7   r7   r8   test_repeated_tightlayout  s    r  r   c           	   	   C   s0  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 ]}| | q|  | }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 ]}|| qd S )Nr    r   ffffff?l1)gidr	  l2)r   r   ZC1)	transformr  )r  re   皙?ZC2)g      @r	  g?ZcrimsonZC3)r  r   r     )r  r  zorderFr   )r  clip_onr!  r  )r  r   r"  r!  r  )	r   r?   r'   ZLine2DZCircleZdpi_scale_transZ
add_artistr   ZtransFigure)	r  r  r  r  r1r2Zr3r   rj   r7   r7   r8   test_add_artist  sB         r%  fmtZpsZepsc              	   C   sP   t |d| }t| |d"}| d|d ksBtW 5 Q R X d S )Nztest.{}rbasciir    )	r   r   r'   r   r   encodereadlowerrV   )r&  Ztmpdiroutfiler7   r7   r8   test_fspath  s    
r.  c                  C   sZ  t  \} }|dd |ddd}| j }d}t||j|| j	  dk sVt
t||j|| j	  dk sxt
t| |j| dk st
t| |jd	 dk st
|d
 d}t||j|| j	  dk st
t| |j| dk st
|d d}t||j|| j	  dk s.t
t|j|g dj|| j	  dk sVt
d S )Nr   r!   g      ?re   zThis dangles over endgR"@r   r  g|?5^?FgET@T)Zbbox_extra_artists)r'   r?   set_xlimrg   r   get_rendererabsget_tightbboxx1r   rV   x0Zset_in_layout)r3   r5   rb   r   Zx1Nom0Zx1Nomr7   r7   r8   test_tightbbox  s*    
""
"
$r5  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	sbt
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st
d S )Nr!   r   Tr   r   i  )r'   r?   r   r*   r   r  r0   Zget_major_formatterr   ZAutoDateFormatterrV   Zset_major_formatterr   rw   r7   r7   r8   test_axes_removal  s    ((r7  c                  C   s,   t jddd\} }|d   | j  d S )Nr   Tr6  r   )r'   r?   r   r   drawrw   r7   r7   r8   test_removed_axis  s    r9  
clear_methrd   clfc                    s"  t       jg kst d}t |    jg ksBt fddtdD }t |    jg ksrt jddd 	d }|d}t |   | j
kst jg kst 	d }|d} d }|   j|gkst d }|   j|gks&t| j
ks6t|d}| jksPt| jks`tt||   | j
ks|t||jkst| jkst| jkst|d}t |    jg kst j
g kst fddd	D }d
d |D }t fdd|D s tt fdd|D s<tt|d |   |d  jks`t|d  jkstt|d  j
kstt|d |    fddd	D }dd |D }t fdd|D stt fdd|D stt |    j
g kst jg kstd S )Nry   c                    s   g | ]}  d d|d qS r   r!   r)   ra   r6   r   r7   r8   rc     s     z%test_figure_clear.<locals>.<listcomp>r   r!   )r  nrowsr   c                    s   g | ]}  | qS r7   add_subfigurer>  r3   r4   r7   r8   rc   !  s     r   r!   c                 S   s   g | ]}| d qS ry   r=  ra   sfigr7   r7   r8   rc   "  s     c                 3   s   | ]}| j kV  qd S r   r{   ra   r5   r   r7   r8   	<genexpr>#  s     z$test_figure_clear.<locals>.<genexpr>c                 3   s   | ]}| j kV  qd S r   subfigsrE  r   r7   r8   rI  $  s     c                    s   g | ]}  | qS r7   r@  r>  rB  r7   r8   rc   .  s     c                 S   s   g | ]}| d qS rD  r=  rE  r7   r7   r8   rc   /  s     c                 3   s   | ]}| j kV  qd S r   rG  rH  r   r7   r8   rI  0  s     c                 3   s   | ]}| j kV  qd S r   rJ  rE  r   r7   r8   rI  1  s     )r'   r(   rd   r{   rV   r)   getattrr.   add_gridspecrA  rK  r   rP   )r:  r5   r{   ZsubfigZsubaxesZmainaxesrK  r7   rB  r8   test_figure_clear  sh    




rN  c                  C   s    t  D ]} d| jkstqd S )Nr;  )r   __subclasses____dict__rV   )klassr7   r7   r8   test_clf_not_redefined7  s    rR  Zmpl20c                  C   s   t  \} }|jdgdgdgdd | j  | jr8tt|jj	|jj
d  |jj|jjd  |d d}| | | jr|td S )Nr   r   T)Zpickerr   )rp   rs   ZinaxesZguiEvent)r'   r?   scatterr   r8  stalerV   r   bboxr4  r   Zy0r   pick)r3   r5   Zmouse_eventr7   r7   r8   test_picking_does_not_stale=  s    

 
rW  c               	   C   s*  t  } | ddd}| jtddks.t| jtddksFt| ddd}| jtddkslt| jtddkst| ddd}| jtddkst| jtddkst| ddd}| jtddkst| jtddkstt	t
 | ddd	 W 5 Q R X d S )
Nr   r   r   rS   r!   r   )r;   r   )r   r   )r;   rS   )r   r   )r'   r(   r)   get_subplotspecZrowspanr.   rV   colspanrW   rX   
IndexError)r3   r}   rj   ax3Zax4r7   r7   r8   test_add_subplot_twotupleK  s    r]  ztightbbox_box_aspect.svgr   teal)r   r   T)styler   remove_textc                  C   sL   t  } | dd}| |d }| j|d dd}|d |d d S )	Nr!   r   r   r   rC  r   r   re   )r   r!   r!   )r'   r(   rM  r)   Zset_box_aspect)r3   r4   r}   rj   r7   r7   r8   test_tightbbox_box_aspect]  s    
rb  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_testr7   r7   r8    test_animated_with_canvas_changej  s    rc  c                   @   sx  e Zd Zedgdejddddgdddggddd	gd
dd	g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d2d3d4d5gd6d7 Zejd8ddgddggd9fddgdddgddggggd:fd;dddgdgggd<d<ggd=fgd>d? Zedgdd@dA Zejd2dBdCdDdEdFdGgdHdI ZdJdK ZdLdM ZdS )NTestSubplotMosaicr   r  rp   ABCDr!   r   r   r;   ))re  re  rf  )rg  rh  rf  ))r!   r!   r   )r   r;   r   c                 C   s   | |}| D ]\}}|| qtt|}t|t|ksHt|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itemsrm   sortedr+   uniquer   rV   rM  r)   )r   r  r  rp   	grid_axesrt   r5   labelsr4   axAaxBaxCaxDr7   r7   r8   
test_basict  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 ]}||  qL|d
d}|d dd}t|D ]2\}	}
t|
D ] \}}|||	|f | qq|d dd}t|D ]2\}	}
t|
D ] \}}|||	|f | qqd S )Nre  rf  rg  rh  EFGHr  r!   r   ra  rC  )	r  rk  valuesrm   rn   rM  subgridspecr@   r)   )r   r  r  rp   rs   ro  r5   r4   Zgs_leftjrl   rt   rD   Zgs_rightr7   r7   r8   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 ]\}}|| qB|dd}|d	 dd}	||	d
 }
|
d ||	d }|d ||	d	 }|d ||	d }|d ||d
 }|d d S )Nr  re  rf  rg  rh  rw  r   r!   ri  ra  rC  rj  )r  rk  rl  rm   rM  r{  r)   )r   r  r  rp   rs   ro  rt   r5   r4   Zgs_nrq  rr  rs  rt  ZaxFr7   r7   r8   test_nested  s&    






zTestSubplotMosaic.test_nestedc                 C   s@   dddgdddgg}d}| dg|gg | dg|gg d S )Nre  rf  rg  rh  ))re  rf  rf  )rg  rg  rh  rw  )rk  )r   r  r  rp   Zxtr7   r7   r8   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sDt|d   |ks\td S )Nre  rf  rg  r   r!   )width_ratios)r'   rk  get_gridspecZget_width_ratiosrV   )r   rp   r  r3   axdr7   r7   r8   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sJt|d   |ksbtd S )Nre  rf  rg  rh  r!   r   height_ratios)r'   rk  r  Zget_height_ratiosrV   )r   rp   r  r3   r  r7   r7   r8   test_nested_height_ratios  s    z+TestSubplotMosaic.test_nested_height_ratioszx, empty_sentinelN.SKIPr   c                 C   s   |dkrd|i}ni }|j |f|}| D ]\}}|| q,tdd |D |dh }	t|	t|ksnt|dd}
||
d }||	d  ||
d	 }||	d
  d S )Nr  empty_sentinelc                 S   s   h | ]}|D ]}|qqS r7   r7   )ra   rownamer7   r7   r8   	<setcomp>   s       z/TestSubplotMosaic.test_empty.<locals>.<setcomp>r  r   ra  r   rj  r!   )rk  rl  rm   rm  r   rV   rM  r)   )r   r  r  rp   r  r   ro  rt   r5   rp  r4   rq  rr  r7   r7   r8   
test_empty  s    
zTestSubplotMosaic.test_emptyc              	   C   s   t jtdd tddg W 5 Q R X t jtdd tdg W 5 Q R X t jtdd tddgg W 5 Q R X t jtdd tddgdd	gg W 5 Q R X d S )
Nz
must be 2Dr   Zfoobar)r  r   rv   )r   rv   c)rW   rX   rY   r'   rk  r   r7   r7   r8   test_fail_list_of_str  s    z'TestSubplotMosaic.test_fail_list_of_str
subplot_kwr   r   c           	      C   sT   ddgg}|j ||d}|pi }|dd}|j|d f|}|j|d f|}d S )Nr!   r   )r  ra  rC  )rk  rM  r)   )	r   r  r  r  rp   ro  r4   rq  rr  r7   r7   r8   test_subplot_kw  s    
z!TestSubplotMosaic.test_subplot_kwmulti_valueBCc           	      C   sb   d}|j |ddidddi|ddiid}|dd}tddddg|D ]\}}|j||d	 qFd S )
NzAB;CDr   r   rh  bluegreen)r  per_subplot_kwr   r   )rk  rM  r  r)   )	r   r  r  r  rp   ro  r4   rr   specr7   r7   r8   test_per_subplot_kw"  s      	z%TestSubplotMosaic.test_per_subplot_kwc                 C   s   t j}|ddddggkst|dddgddggks:t|dddgddgddggks\t|d	dddggkstt|d
ddgddggkst|dddgddgddggkstd S )NABCre  rf  rg  zAB;CCzAB;CC;DErh  rv  z7
                         ABC
                         zR
                         AB
                         CC
                         zn
                         AB
                         CC
                         DE
                         )r   Z_normalize_grid_stringrV   r   	normalizer7   r7   r8   test_string_parser3  s    "
z$TestSubplotMosaic.test_string_parserc              	   C   s   t j}|i i di i dks"t|di ii i dks<ttjtdddd |i i d W 5 Q R X tjtdddd |i i d W 5 Q R X d S )Nre  rf  zThe key rf  z appears multiple timesr   )r  rf  )rf  r  )r   Z_norm_per_subplot_kwrV   rW   rX   rY   r  r7   r7   r8   test_per_subplot_kw_expanderF  s     
 
z.TestSubplotMosaic.test_per_subplot_kw_expanderc              	   C   s>   t jtdtddd t jddi id W 5 Q R X d S )Nz	The keys rf  z are inr   re  )r  )rW   rX   rY   setr   rk  r   r7   r7   r8   test_extra_per_subplot_kwS  s
     z+TestSubplotMosaic.test_extra_per_subplot_kwstr_patternzAAA
BBBz	
AAA
BBB
zABC
DEFc                 C   s,   | |}| dd | dD }d S )Nc                 S   s   g | ]}t |qS r7   )list)ra   lnr7   r7   r8   rc   a  s     z;TestSubplotMosaic.test_single_str_input.<locals>.<listcomp>
)rk  stripsplit)r   r  r  r  ro  r7   r7   r8   test_single_str_inputY  s    
z'TestSubplotMosaic.test_single_str_inputzx,matchzS(?m)we found that the label .A. specifies a non-rectangular or non-contiguous area.z4There are duplicate keys .* between the outer layout)z	AAA
c
BBB'All of the rows must be the same lengthrv  r  c              	   C   s0   t  }tjt|d || W 5 Q R X d S )Nr   )r'   r(   rW   rX   rY   rk  )r   rp   r   r3   r7   r7   r8   	test_faild  s    zTestSubplotMosaic.test_failc                 C   s(   | t t gg | ddgg d S )Nre  rf  )rk  object)r   r  r  r7   r7   r8   test_hashable_keys~  s    z$TestSubplotMosaic.test_hashable_keysabcZcabZbcaZcbaZacbZbacc                 C   sD   t  }||}t|t|ks&tt|jt| ks@td S r   r'   r(   rk  r  rV   r{   rz  )r   r  r3   ax_dictr7   r7   r8   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sVtt|jt| ksptd S )Nre  rf  rg  rh  rv  rw  rx  r  ry  IZ	ABCDEFGHIr  r   r   r3   r  r7   r7   r8   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 sttd S )Nre  rf  rg  rh  rv  rw  rx  r  ry  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_yscalerH  r7   r7   r8   rI    s   z3TestSubplotMosaic.test_share_all.<locals>.<genexpr>)r'   r(   rk  r  rP   rz  rV   r  r7   r7   r8   test_share_all  s    z TestSubplotMosaic.test_share_all)r   r   r   r	   rW   markparametrizeru  r}  r~  r  r  r  r  r  r  tupler  r  r  r  r  r  r  r  r  r  r7   r7   r7   r8   rd  s  s   




!




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








rd  c                  C   sv   t  } | ddd}| ddd}t jddd| d}|  }|  }|  }||ksft||ksrtdS )	z)Test that these all use the same gridspecr   r   rX  r;   )r   r   r<  )rZ  r3   N)r'   r(   r)   Zsubplot2gridrY  r  rV   )r3   r}   rj   r\  Zgs1Zgs2Zgs3r7   r7   r8   test_reused_gridspec  s    r  ztest_subfigure.pngr   )r_  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}|jD ]}|jt j	ddddd	}q|d j
||dd |d d | jddd d S )N!N,r  r   r!   r   r   r   ZvminZvmaxr>   	Left Sider   bottom)r5   locationz
Right SideFigure suptitlexx-largefontsize)r+   rI   seedr'   r(   
subfiguresr?   rA   rH   rJ   rK   rf   )r3   subrL   r5   rN   r7   r7   r8   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   r2  r   r0  r   )r3   r  r7   r7   r8   test_subfigure_tightbbox  s    r  c                  C   sV   t jdd} |  }| |  ks(t|d | dksBt|  dksRtd S )Nr    r   r   )r'   r(   r  Zget_dpirV   Zset_dpir3   sub_figr7   r7   r8   test_subfigure_dpi  s    
r  ztest_subfigure_ss.png{Gz?)r_  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}qH|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(   rM  rA  r?   rA   rH   rJ   rK   rf   r)   r*   r,   rm   )r3   r4   r  rL   r5   rN   r7   r7   r8   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 ]L}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"|  qP|d d# |d d$ |d dd}	d S )%Nr  r  )r&      )r   r   r3   r!   r   gQ?)wspacer   Zcoralz
subfigs[0]z
subfigs[1]gffffff?r  zsubfigsnest[0]rl   Tr      r   g      g      @r  zx-labelr  zy-labelTitler>   zsubfigsnest[1]rq   r   r6  ylabel	supxlabel	supylabel)r+   rI   r  r'   r(   rf   r  r   r?   rH   rJ   r/   r-   rm   rK   r@   r  r  )
r3   rK  ZsubfigsnestZaxsnest0r5   r  rN   Zaxsnest1rM   ZaxsRightr7   r7   r8   test_subfigure_double  s6    
r  c               	   C   sX  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 ]}||   q8|   d S )NTr<   r   ra  r   r   r!               r;   )r'   r(   rM  rA  r+   rF   rG   rU  minmaxr.   r)   rB   )r3   r4   sub_figsr   r   r6   r7   r7   r8   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     )r?  r  r   g!<LgkX.8@i  i  )rp   rs   r   r  g YI_gRϫW@x   i,  )r'   r(   r  rM  r)   rS  r   rB   Z
get_xticksr+   rF   rG   )	r3   Z	subfig_blZ	subfig_brr4   r}   rj   r\  Zticks120Zticks300r7   r7   r8   test_subfigure_ticks?  s"    

r  ztest_subfigure_scatter_size.png)r_  r`  c                  C   s   t  } | dd}| |d }|jdddgdddgddd |jdddgdddgd	dd
gdd | |d }|dd}||d fD ]J}|jdddgdddgdddd |jdddgdddgd	dd
gddd qd S )Nr!   r   r   r   s)r  markerr;   rS   r   r  r   rl   )r  r  rr   rq   )r'   r(   rM  r)   rS  rA  r?   )r3   r4   r|   rF  rL   r5   r7   r7   r8   test_subfigure_scatter_size[  s    $ r  c                  C   sN   t jdd} |  }|d}|dd}|| t }| j|dd d S )Nr  r   ry   r!   r   r   )	r'   r(   r  r)   r  Z	bar_labelr   r   r   )r3   r  r5   rv   bufferr7   r7   r8   test_subfigure_pdfl  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   re   gUUUUUU?)hspacer  r  r  ra  r  r   333333?rC  gffffff?g?r"   r  ri  r   r   rj  r   )	r'   r(   r  r+   rF   rG   rU  r  r  )r  r   r   r7   r7   r8   test_subfigures_wspace_hspacev  s    """"r  c                  C   s   t  } | ddd}| ddd}|d k	s0t||k	s<tt   t  } | jddddd}| jddddd}|d k	s|t||k	stt   t  } | jddddd}| ddd}|d k	st|jdkst||k	stt   d S )Nr!   r   r   rectilinear)r'   r(   r)   rV   rU   r  r3   r5   r}   r7   r7   r8   test_add_subplot_kwargs  s&    r  c                  C   s  t  } | ddddg}| ddddg}|d k	s8t||k	sDtt   t  } | jddddgdd}| jddddgdd}|d k	st||k	stt   t  } | jddddgdd}| ddddg}|d k	st|jdkst||k	stt   d S )Nr   r!   r   r   r  )r'   r(   rz   rV   rU   r  r  r7   r7   r8   test_add_axes_kwargs  s&    r  c                    s~   t dd t \  fdd}td|   dgksFt fdd}td|  tj	
d	d
dg d S )Nr   cannot show the figurec                      s   j j jdd  d S )Nr   r   r!   )r!   )r   button_press_event	transDatar  r7   r5   r3   r7   r8   single_press  s    z!test_ginput.<locals>.single_pressr   r  c                      sp   j j jdd  j d j j jdd	  j j jdd
  j j jdd  d S )Nr  r!   Z	backspacer  r   re   r   ra  r   )r!   )r!   )r!   )r   )r   r  r  r  key_press_eventr7   r  r7   r8   multi_presses  s
    z"test_ginput.<locals>.multi_pressesr   r  r  )r   r   r'   r?   r   startZginputrV   r+   rF   rG   )recwarnr  r  r7   r  r8   test_ginput  s    r  c                 C   st   t dd t }|jddd ks(ttd|jjd	  | dksLttd|jj
d	  | dksptd S )	Nr   r  r   )timeout)ru   T)r   r   r!   F)r   r   r'   r(   ZwaitforbuttonpressrV   r   r   r  r  r  )r  r3   r7   r7   r8   test_waitforbuttonpress  s    r  c                  C   s>   t dd} | jdddd}|  dks*t| dks:td S )Nzwhole Figure)rD   r!   z
sub figure)r   r  rn   rV   r  r7   r7   r8   test_kwargs_pass  s    
r  c              	   C   sr   |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 5 Q R X d S )
NZxlabelr   r   )r   r   r  r  Zlightr   )zfigure.labelweightzfigure.labelsizezfigure.titleweightzfigure.titlesize)r  r  rf   r   r  )r  r  r7   r7   r8   test_rcparams  s    


r   c                  C   s   t  \} }|ddgddg |d t| }|jd |k	sFt|jd  dks\t|jd d | dks|t|	dd | 
  |
  | d	kst|jd  d
kstd S )Nr   r!   r   r   r   Zlinearr         Y@)r   r  rC  )r'   r?   r*   r   copydeepcopyr{   rV   r  r/  rB   Zget_xlim)rh   r5   ri   r7   r7   r8   test_deepcopy  s    

r  c                  C   sF   t dd} | jd | jdks$ttt| }|jdksBtd S )Nr   r  r   i&  )r   r   r   r   rV   pickleloadsdumps)r3   ri   r7   r7   r8   %test_unpickle_with_device_pixel_ratio  s
    
r  c                  C   sJ   ddi} t | }tjddddg| d | |ks2ttjdddg| d d S )Nleftr   r!   r   )r  Zgridspec_kwZAB)dictr'   r?   rV   rk  )r4   Zgs_origr7   r7   r8   test_gridspec_no_mutate_input  s
    r  c               	   C   s`   ddddd} t |  }tjtjjf | d}tjt	dd |
 |ksRtW 5 Q R X d S )	Nr   r  gQ?g{Gz?)r  Zh_padr  r  r   zwill be deprecatedr   )r  rz  r'   r(   r   Zlayout_enginer   rW   r   PendingDeprecationWarningZget_constrained_layout_padsrV   )paramsexpectedr3   r7   r7   r8    test_get_constrained_layout_pads  s
    r  )wr  r   r   pathlibr   r  platform	threadingr   typesr   r   numpyr+   rW   ZPILr   Z
matplotlibr   r   Zmatplotlib.testing.decoratorsr   r	   Zmatplotlib.axesr
   Zmatplotlib.figurer   r   Zmatplotlib.layout_enginer   r   r   Zmatplotlib.tickerr   r   r   Zmatplotlib.pyplotZpyplotr'   Zmatplotlib.datesdatesr   machiner9   rO   rZ   r]   rk   ro   rx   r~   r   r   r   r   r   r   r   r   r   r   r  r  r   r_  contextr   r   infr   r   r   r   r   r   paramr   r   r  r  r  r  r  r  r  r  r%  r.  r5  r7  r9  rN  rR  rW  r]  rb  rc  rd  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r7   r7   r7   r8   <module>   s  
'#

,

		
'


	

4





	
Q


	
  7


 

(






