a
    fø1bæH  ã                   @   s<  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	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mZmZmZ d d	lmZmZ d d
lmZ d dl m!Z!m"Z"m#Z#m$Z$ d dl%Z&d dl'Z'd dl(Z)d dl*m+Z+m,Z, dd„ Z-edgdgdddd„ ƒZ.dd„ Z/edgddddd„ ƒZ0edgddddd„ ƒZ1d d!„ Z2ed"gdd#d$d%d&„ ƒZ3ed'd(gƒd)d*„ ƒZ4ed+ge 5¡ d,krŽd nd-d.d/d0„ ƒZ6ed1gƒd2d3„ ƒZ7d4d5„ Z8ed6gdd#d7d8id9d:d;„ ƒZ9d<d=„ Z:e'j; <d>d?d@g¡e'j; <dAg dB¢¡dCdD„ ƒƒZ=dEdF„ Z>dGdH„ Z?dIdJ„ Z@e'j; <dKdL¡dMdN„ ƒZAdS )Oé    )ÚproductN)Úcbook)Ú
MouseEvent)ÚLogNorm)ÚBboxÚTransformedBbox)Úimage_comparisonÚremove_ticks_and_titles)Ú	axes_sizeÚhost_subplotÚmake_axes_locatableÚGridÚAxesGridÚ	ImageGrid)ÚAnchoredSizeBarÚAnchoredDirectionArrows)ÚHBoxDivider)Úzoomed_inset_axesÚ
mark_insetÚ
inset_axesÚBboxConnectorPatch)Úassert_array_equalÚassert_array_almost_equalc               
      s\  t  ¡ \} }t|ƒ}||jddd|d|jddd|d|jddd|d|jddd|dd	œ‰ | j ¡  | j ¡ }‡ fd
d„ˆ D ƒ}| j}|d jt	 
d| ¡ks¤J ‚|d jt	 
d| ¡ksÀJ ‚|d jt	 
d| ¡ksÜJ ‚|d jt	 
d| ¡ksøJ ‚|d j|d j t	 
d| ¡ks J ‚|d j|d j t	 
d| ¡ksHJ ‚|d j|d j t	 
d| ¡kspJ ‚|d j|d j t	 
d| ¡ks˜J ‚|d j|d j  krÂ|d jksÈn J ‚|d j|d j  krò|d jksøn J ‚|d j|d j  kr"|d jks(n J ‚|d j|d j  krR|d jksXn J ‚d S )NÚtopç333333ó?çš™™™™™¹?)ÚpadZsharexÚbottomÚleft)r   ZshareyÚright)Úmainr   r   r   r   c                    s   i | ]}|ˆ |   ¡ “qS © )Zget_window_extent)Ú.0Úk©Zaxsr!   úAlib/python3.9/site-packages/mpl_toolkits/tests/test_axes_grid1.pyÚ
<dictcomp>*   ó    z,test_divider_append_axes.<locals>.<dictcomp>r    )ÚpltÚsubplotsr   Úappend_axesÚcanvasÚdrawÚget_rendererÚdpiÚheightÚpytestÚapproxÚwidthZy0Úy1Zx0Úx1)ÚfigÚaxÚdividerZrendererZbboxesr.   r!   r$   r%   Útest_divider_append_axes   s0    û

((((000r8   Ztwin_axes_empty_and_removedZpngé   )Ú
extensionsÚtolc                  C   s  t j ddddœ¡ g d¢} g d¢}tt|ƒd t| ƒdƒ}|jdddd	d	d
 tt|| ƒt| ƒd ƒD ]œ\}\}}tt|ƒd t| ƒ|ƒ}t||ƒƒ }d|v r´|j	d d …  
d¡ d|v rÄ| ¡  d|v rà|j	d d …  
d¡ |jdd||röd| nd d	d	d
 qhtjddd d S )Né   )z	font.sizezxtick.labelsizezytick.labelsize)ZtwinxZtwinyÚtwin)Ú úhost invisibleútwin removedútwin invisibleztwin removed
host invisibler9   é   ç      à?r   Úcenter)ZhorizontalalignmentZverticalalignmentrA   Fr@   r?   Ú
r>   )ZwspaceZhspace)ÚmplZrcParamsÚupdater   ÚlenÚtextÚ	enumerater   ÚgetattrÚaxisÚset_visibleÚremover(   Úsubplots_adjust)Ú
generatorsZ	modifiersÚhÚiÚmodÚgenÚtr!   r!   r%   Ú test_twin_axes_empty_and_removed:   s0    
ÿ
ÿ

ÿÿrV   c               	   C   sZ   t  ¡ } t| ddddddd}dtj d	d	¡ }|d
 j|dtƒ d}|jd
  	|¡ d S )Néo   ©r9   r9   r9   ÚLr   Zsingle)Únrows_ncolsZngridsZ
label_modeZcbar_locationZ	cbar_modei'  é
   r   Únearest)ÚinterpolationZnorm)
r(   Úfigurer   ÚnpZrandomZrandÚimshowr   Z	cbar_axesZcolorbar)r5   ÚgridÚZÚimr!   r!   r%   Ú$test_axesgrid_colorbar_log_smoketestV   s    ûrd   zinset_locator.pngÚdefaultT)ÚstyleÚremove_textc               
   C   s$  t jddgd\} }tjddd}d}t d¡}|j\}}||d	d	| …d	d	| …f< |j||d
dd t|ddd}|j||d
dd |j	 
¡ jdd |j 
¡ jdd d\}}	}
}| ||	¡ | |
|¡ t jdd t jdd t||ddddd t|jdddddddd}| |¡ d S )Né   é   ©Úfigsizeúaxes_grid/bivariate_normal.npyT©Znp_load©éýÿÿÿri   éüÿÿÿé   ©é–   rs   é   r\   Úlower©Úextentr]   Úoriginé   úupper right©ZzoomÚlocé   ©Znbins©g      ø¿gÍÌÌÌÌÌì¿g      Àgffffffþ¿F©ZvisiblerB   Únoneú0.5©Úloc1Úloc2ÚfcÚecrC   úlower centerr   ©r|   r   Ú	borderpadÚsepÚframeon)r(   r)   r   Úget_sample_datar_   ÚzerosÚshaper`   r   ÚyaxisÚget_major_locatorÚ
set_paramsÚxaxisÚset_xlimÚset_ylimÚxticksÚyticksr   r   Ú	transDataÚ
add_artist©r5   r6   rb   rw   ZZ2ZnyZnxÚaxinsr4   Zx2r3   Zy2Zasbr!   r!   r%   Útest_inset_locatorf   s:    


ÿ
ÿûrœ   zinset_axes.pngc               
   C   s*  t jddgd\} }tjddd}d}t d¡}|j\}}||d	d	| …d	d	| …f< |j||d
dd t|ddd|j	d}|j||d
dd |j
 ¡ jdd |j ¡ jdd d\}}	}
}| ||	¡ | |
|¡ t jdd t jdd t||ddddd t|jdddddddd}| |¡ d S )Nrh   ri   rj   rl   Trm   rn   rr   rt   r\   ru   rv   ç      ð?rX   )r2   r/   Úbbox_to_anchorÚbbox_transformr}   r~   r   Fr€   rB   r   r‚   rƒ   rC   rˆ   r   r‰   )r(   r)   r   r   r_   rŽ   r   r`   r   Ú	transAxesr   r‘   r’   r“   r”   r•   r–   r—   r   r   r˜   r™   rš   r!   r!   r%   Útest_inset_axes   s>    


ÿ
ÿ
ÿûr¡   c               
   C   sö  d} d}t j|| d\}}| dddd¡ t|dddd}|j ¡  t| ¡ jt	 
d|d  d |d  d|d	  d |d	  ddf¡ƒ t|d
ddd}|j ¡  t| ¡ jt	 
d¡ƒ t|dddddd}|j ¡  t| ¡ jt	 
d|  |d  d|  |d	  d|  d	 |d  d|  d |d	  f¡ƒ t|dddd	d}t|ddd|jdd	d}|j ¡  t| ¡ j| ¡ jƒ t t¡  t|d
ddd}W d   ƒ n1 sª0    Y  t t¡" t|d
d|jd}W d   ƒ n1 sè0    Y  d S )Néd   )ry   rh   )rk   r.   r   çÍÌÌÌÌÌì?g       @r   )r2   r/   rŠ   r9   z40%z30%)gÂõ(\â?g…ëQ¸å?r£   r£   r   r   )éÈ   r¢   rq   )r2   r/   rž   r|   rŠ   g      i@g      Y@z35%z60%)r2   r/   r|   rŠ   z100%)r   r   gffffffÖ?ç333333ã?)r2   r/   rž   rŸ   r|   rŠ   )çš™™™™™Ù?rC   )r2   r/   rž   )r2   r/   rŸ   )r(   r)   rO   r   r+   r,   r   Úget_positionÚextentsr_   Zarrayr    r   r0   ZraisesÚ
ValueErrorZwarnsÚUserWarning)r.   rk   r5   r6   ZinsZins1Zins2r!   r!   r%   Útest_inset_axes_complete½   sZ    
ÿþ
þ
ÿ
 $ÿþþ

ÿÿ&ÿr«   zfill_facecolor.pngZmpl20)rg   rf   c                  C   s.  t  dd¡\} }|  dd¡ tddƒD ]}|| j d¡ q&|d j ¡  t dddd¡}t	||d j
ƒ}t	||d j
ƒ}t||dddd	d
dd}| d¡ |d  |¡ t|d ddd}| dd¡ | dd¡ t  ¡ jj g ¡ t  ¡ jj g ¡ t|d |ddddd t	||d j
ƒ}t	||d j
ƒ}	t||	dddd	d
dd}| d¡ |d  |¡ t|d ddd}| dd¡ | dd¡ t  ¡ jj g ¡ t  ¡ jj g ¡ t|d |ddddd t	||d j
ƒ}
t	||d	 j
ƒ}t|
|dddd	d
dd}| d¡ |d  |¡ t|d ddd}| dd¡ | dd¡ t  ¡ jj g ¡ t  ¡ jj g ¡ t|d |ddddd t	||d	 j
ƒ}t	||d j
ƒ}t||dddd	d
ddd	}| d¡ |d	  |¡ t|d	 ddd}| dd¡ | dd¡ |j g ¡ |j g ¡ t|d	 |dddddd d S )Nr9   rh   ri   Fr   r¦   r¥   rB   rq   ÚrÚb)Úloc1aÚloc2aÚloc1bÚloc2br‡   r†   rz   )r|   çš™™™™™É?r‚   rƒ   Úy)r®   r¯   r°   r±   r‡   Ú	facecolor)r„   r…   r´   r‡   Úg)r®   r¯   r°   r±   r‡   Úcolor)r„   r…   r¶   r‡   )r®   r¯   r°   r±   r‡   r†   Úfill)r„   r…   r†   r‡   r·   )r(   r)   Zset_size_inchesÚranger   rM   Z
tick_rightr   Zfrom_extentsr   r˜   r   Zset_clip_onÚ	add_patchr   r”   r•   ÚgcaÚaxesr“   Z	set_ticksr   )r5   r6   rR   ÚbboxZbbox1Zbbox2Úpr›   Zbbox3Zbbox4Zbbox5Zbbox6Zbbox7Zbbox8r!   r!   r%   Útest_fill_facecoloré   s|    þ
þ
þ
þ
r¾   zzoomed_axes.pngzinverted_zoomed_axes.pngc                  C   s˜   t  ¡ \} }| g d¢g d¢¡ | g d¢¡ t|ddd}| g d¢¡ t  ¡ \} }| g d¢g d¢¡ | g d¢¡ t|ddd}| g d¢¡ d S )	N©r9   rB   rq   )r9   rq   r9   rq   g      @zlower rightr{   )çš™™™™™ñ?çffffffö?rÀ   rÁ   )rq   r9   rq   r9   )rÁ   rÀ   rÁ   rÀ   )r(   r)   ÚplotrL   r   )r5   r6   Zinset_axr!   r!   r%   Útest_zooming_with_inverted_axes7  s    rÃ   zanchored_direction_arrows.pngZx86_64g{®Gáz„?)r;   c                  C   s<   t  ¡ \} }|jt d¡dd t|jddƒ}| |¡ d S )N©r[   r[   r\   ©r]   ÚXÚY)r(   r)   r`   r_   rŽ   r   r    r™   )r5   r6   Zsimple_arrowr!   r!   r%   Útest_anchored_direction_arrowsF  s    rÈ   z'anchored_direction_arrows_many_args.pngc                  C   sT   t  ¡ \} }| t d¡¡ t|jdddddddd	d
ddddddd}| |¡ d S )NrÄ   ÚAÚBrz   Zredg      à¿r¥   rB   Tgffffffæ?g¸…ëQ¸®¿g{®Gáz´¿r   é	   r[   rh   )r|   r¶   Zaspect_ratior   rŠ   rŒ   ZalphaZsep_xZsep_yZback_lengthZ
head_widthZhead_lengthZ
tail_width)r(   r)   r`   r_   Zonesr   r    r™   )r5   r6   Zdirection_arrowsr!   r!   r%   Ú(test_anchored_direction_arrows_many_argsP  s    
ürÌ   c                  C   sx   t  ¡ \} }t|ƒ}t ddi¡ |jddd}W d   ƒ n1 sF0    Y  | j ¡  t 	|j
ddjd¡stJ ‚d S )	Nzfigure.subplot.wspaceg{®Gáz”?r   z5%)ÚsizeF)Zoriginalg@¸Ù/ÄŠ¢?)r(   r)   r   rF   Z
rc_contextr*   r+   r,   r_   Ziscloser§   r2   )r5   r6   r7   Zcaxr!   r!   r%   Útest_axes_locatable_position]  s    ,
ÿrÎ   zimage_grid.pngZbbox_inchesZtight)rg   rf   Zsavefig_kwargc                  C   sd   t  d¡ d¡} t dd¡}t|dddd}td	ƒD ]*}|| j| d
d ||  d 	|¡¡ q4d S )Nr¢   rÄ   r9   )ri   ri   rW   ©rB   rB   r   )rZ   Zaxes_padri   r\   rÅ   ztest {0}{0})
r_   ÚarangeÚreshaper(   r^   r   r¸   r`   Z	set_titleÚformat)rc   r5   ra   rR   r!   r!   r%   Útest_image_gridg  s    rÓ   c                  C   sˆ   t jdd\} }| g d¢g d¢¡\}t|dƒ}| g d¢g d¢¡ t||dddd	d
 t| ƒ |  | j ¡ ¡}t	j
 |jg d¢¡ d S )N)r<   ry   rj   r¿   )r   r9   r   ri   r9   rq   r   z0.3rƒ   )g33333³1ÀgÍÌÌÌÌÌ+ÀgÍÌÌÌÌÌ@gš™™™™™@)r(   r)   rÂ   r   r   r	   Zget_tightbboxr+   r-   r_   Ztestingr   r¨   )r5   r6   ÚlZax_zoomr¼   r!   r!   r%   Útest_gettightbboxv  s    

ÿrÕ   Úclick_onÚbigÚsmallzbig_on_axes,small_on_axes))rº   rº   )ÚhostrÙ   )rÙ   Úparasite)rÚ   rÙ   )rÚ   rÚ   c                    sz  t jddddd}t jdddddd}g ‰ ‡ fd	d
„}t  ¡ j d|¡ | |f}ddddœ}d|v rpt  ¡ |d< d|v s€d|v rœtdƒ|d< |d  ¡ |d< ||   |¡ ||  |¡ |dkrÎ||  }d}	n|| }d}	||d u rî|d }|j	 
|	¡\}
}td|jj|
|dd}| |¡ |dkr,dnd}tˆ ƒ|ksBJ ‚dd„ ˆ D ƒ}||v s^J ‚|dkrv||v svJ ‚dS )z2Test pick events on normal, host or parasite axes.)ç      Ð?rÛ   rC   rh   )Úpicker)r¦   r¦   r²   r¬   )r´   rÜ   c                    s   ˆ   | ¡ d S )N)Úappend)Úevent©Zreceived_eventsr!   r%   Úon_pickš  s    z/test_picking_callbacks_overlap.<locals>.on_pickZ
pick_eventN)rº   rÙ   rÚ   rº   rÙ   rÚ   rW   r×   )ç333333Ó?rá   )rC   rC   Zbutton_press_eventr9   )ZbuttonrØ   rB   c                 S   s   g | ]
}|j ‘qS r!   )Zartist)r"   rÞ   r!   r!   r%   Ú
<listcomp>º  r'   z2test_picking_callbacks_overlap.<locals>.<listcomp>)r(   Z	RectangleZgcfr+   Zmpl_connectrº   r   r=   r¹   r    Z	transformr   r^   ZpickrH   )Zbig_on_axesZsmall_on_axesrÖ   r×   rØ   rà   Zrectangles_on_axesr»   Z
click_axesZaxes_coordsÚxr³   ÚmZexpected_n_eventsZevent_rectsr!   rß   r%   Útest_picking_callbacks_overlap†  s@    ÿ

rå   c            	   	   C   sô   t  d¡ d¡} t  d¡ d¡}t dd¡\}\}}| | ¡ | |¡ d}t|dt |¡t 	|¡t |¡gt 
|¡t d¡t 
|¡gd}| | d	¡¡ | | d¡¡ |j ¡  | ¡ }| ¡ }|j|jksÖJ ‚|j|j t d
¡ksðJ ‚d S )Né   )ri   rh   )rh   ri   r9   rB   rC   rW   )Z
horizontalZverticalr   g|®Gázä?)r_   rÐ   rÑ   r(   r)   r`   r   ÚSizeZAxesXZFixedZAxesYZScaledZset_axes_locatorZnew_locatorr+   r,   r§   r/   r2   r0   r1   )	Zarr1Zarr2r5   Zax1Zax2r   r7   Zp1Zp2r!   r!   r%   Útest_hbox_dividerÀ  s$    

ý
rè   c                  C   s*   t  ¡ } tjjji f}t| dd|d}d S )NrW   rX   )rZ   Ú
axes_class)r(   r^   Úmpl_toolkitsZ
axes_grid1Zmpl_axesZAxesr   )r5   ré   Zgrr!   r!   r%   Útest_axes_class_tuple×  s    rë   c                  C   st   t  ¡ } t| dddd}t||jƒ t|jt |j¡ƒ t|t 	|j¡dƒ t| dddd}t|t 	|j¡dƒ dS )z:Test Grid axes_all, axes_row and axes_column relationship.rW   )rB   rq   Úrow©Ú	directionÚcolumnN)
r(   r^   r   r   Zaxes_allÚaxes_rowr_   Z	transposeZaxes_columnÚravel)r5   ra   r!   r!   r%   Útest_grid_axes_listsÝ  s    rò   rî   )rì   rï   c                 C   s¶   t  ¡ }t|dd| d}dd„ t |j¡D ƒ}|d j|d jkrV|d j|d jk sZJ ‚|d j|d jkr‚|d j|d jks†J ‚|d	 j|d jkr®|d	 j|d jks²J ‚d
S )z%Test positioning of the axes in Grid.rW   rÏ   rí   c                 S   s   g | ]}|  ¡ ‘qS r!   )Zget_axes_locator)r"   r6   r!   r!   r%   râ   í  r'   z+test_grid_axes_position.<locals>.<listcomp>r9   r   rB   rq   N)r(   r^   r   r_   rñ   rð   Z_nxZ_ny)rî   r5   ra   r|   r!   r!   r%   Útest_grid_axes_positionè  s    ,,ró   )BÚ	itertoolsr   ÚplatformZ
matplotlibrF   Zmatplotlib.pyplotZpyplotr(   r   Zmatplotlib.backend_basesr   Zmatplotlib.colorsr   Zmatplotlib.transformsr   r   Zmatplotlib.testing.decoratorsr   r	   Zmpl_toolkits.axes_grid1r
   rç   r   r   r   r   r   Z(mpl_toolkits.axes_grid1.anchored_artistsr   r   Z$mpl_toolkits.axes_grid1.axes_dividerr   Z%mpl_toolkits.axes_grid1.inset_locatorr   r   r   r   Z mpl_toolkits.axes_grid1.mpl_axesrê   r0   Znumpyr_   Znumpy.testingr   r   r8   rV   rd   rœ   r¡   r«   r¾   rÃ   ÚmachinerÈ   rÌ   rÎ   rÓ   rÕ   ZmarkZparametrizerå   rè   rë   rò   ró   r!   r!   r!   r%   Ú<module>   sd    

)
,,
M

ÿ


þ
2