U
    Fvf 1  ã                   @   sÊ  d dl 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mZmZ d dlmZ dRdd„Ze	d	gd
ddd„ ƒZe	dgƒdd„ ƒZe	dgƒdd„ ƒZe	dgddddd„ ƒZe	dgƒdd„ ƒZe	dgƒdd„ ƒZe	d gd
dd!d"„ ƒZe	d#gƒd$d%„ ƒZe	d&gƒd'd(„ ƒZd)d*„ ZdSd.d/„Ze	d0d1gƒd2d3„ ƒZd4d5„ Zej  !d6d7d8g¡d9d:„ ƒZ"d;d<„ Z#d=d>„ Z$d?d@„ Z%dAdB„ Z&dCdD„ Z'ej  (dE¡dFdG„ ƒZ)dHdI„ Z*dJdK„ Z+dLdM„ Z,dNdO„ Z-dPdQ„ Z.dS )Té    N)Úassert_array_equal)Úimage_comparison)ÚAnchoredOffsetboxÚDrawingArea)Ú	Rectangleé   c                 C   sH   |   ddg¡ | jdd | jd|d | jd|d | jd|d d S )	Né   é   é   ©Znbinsúx-label©Úfontsizeúy-labelZTitle)ÚplotÚlocator_paramsÚ
set_xlabelÚ
set_ylabelÚ	set_title)Úaxr   © r   úE/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_tightlayout.pyÚexample_plot   s
    r   Ztight_layout1gffffffþ?)Útolc                  C   s$   t  ¡ \} }t|dd t  ¡  dS )z'Test tight_layout for a single subplot.é   r   N©ÚpltÚsubplotsr   Útight_layout©Úfigr   r   r   r   Útest_tight_layout1   s    r!   Ztight_layout2c                  C   sJ   t jddd\} \\}}\}}t|ƒ t|ƒ t|ƒ t|ƒ t  ¡  dS )ú(Test tight_layout for multiple subplots.r	   )ZnrowsZncolsNr   )r    Úax1Úax2Úax3Úax4r   r   r   Útest_tight_layout2   s    r'   Ztight_layout3c                  C   sB   t  d¡} t  d¡}t  d¡}t| ƒ t|ƒ t|ƒ t  ¡  dS )r"   éÝ   éß   éz   N)r   Úsubplotr   r   )r#   r$   r%   r   r   r   Útest_tight_layout3)   s    


r,   Ztight_layout4)z2.5.5z2.6.1ç¸…ëQ¸Ž?)Zfreetype_versionr   c                  C   sj   t  dd¡} t jdddd}t jddddd}t jdddd	}t| ƒ t|ƒ t|ƒ t|ƒ t  ¡  d
S )z#Test tight_layout for subplot2grid.)r
   r
   ©r   r   )r   r   r	   )Úcolspan)r   r   ©r/   Úrowspan)r   r	   )r1   N)r   Úsubplot2gridr   r   )r#   r$   r%   r&   r   r   r   Útest_tight_layout45   s    r3   Ztight_layout5c                  C   s2   t  ¡ } t d¡ d¡}| j|dd t  ¡  dS )zTest tight_layout for image.éd   ©é
   r6   Únone)ÚinterpolationN)r   r+   ÚnpÚarangeÚreshapeZimshowr   )r   Úarrr   r   r   Útest_tight_layout5D   s    r=   Ztight_layout6c            	   	   C   sT  t  ¡ @ t  dt¡ t ¡ } tj dd¡}|  	|d ¡}|  	|d ¡}t
|ƒ t
|ƒ |j| ddddgd tj dd¡}|D ]*}|  	|¡}t
|ƒ | d¡ | d¡ q‚|jd	d
d |j| ddddgdd t|j|jƒ}t|j|jƒ}|j| dd||j  dd|j|  gd |j| dd||j  dd|j|  gdd W 5 Q R X dS )zTest tight_layout for gridspec.Úignorer	   r   r   ç      à?©Úrectr
   Ú r   r   r   gÍÌÌÌÌÌÜ?)rA   Zh_padN)ÚwarningsÚcatch_warningsÚsimplefilterÚUserWarningr   ÚfigureÚmplZgridspecZGridSpecÚadd_subplotr   r   r   r   ÚminÚtopÚmaxÚbottom)	r    Zgs1r#   r$   Zgs2Ússr   rK   rM   r   r   r   Útest_tight_layout6M   s:    

 ÿ ÿþrO   Ztight_layout7c                  C   sr   d} t  ¡ \}}| ddg¡ |jdd |jd| d |jd| d |jd	d
| d |jdd| d t  ¡  d S )Nr   r   r	   r
   r   r   r   r   z
Left TitleÚleft)Úlocr   zRight TitleÚright)r   r   r   r   r   r   r   r   )r   r    r   r   r   r   Útest_tight_layout7w   s    rS   Ztight_layout8c                  C   s6   t  ¡ } | jddd |  ¡ }t|dd |  ¡  dS )ú#Test automatic use of tight_layout.Ztightçš™™™™™¹?)ZlayoutÚpadr   r   N)r   rG   Zset_layout_enginerI   r   Údraw_without_renderingr   r   r   r   Útest_tight_layout8…   s
    rX   Ztight_layout9c                  C   s.   t  dd¡\} }|d d  d¡ t  ¡  d S )Nr	   r   F)r   r   Úset_visibler   )ÚfZaxarrr   r   r   Útest_tight_layout9   s    r[   c                  C   sŒ  t  ¡ } |  d¡}|jjdddd |jjdddd |jjdddddd	 |jjdddddd	 |jjd
gdd |jjd
gdd |  d¡}|jjdddd |jjdddd |  d¡}|jjdddd |jjdddd |  d¡}|jjdddd |jjdddd t  ¡  ddgddggddgddggddgddggddgddggg}t| j	ƒD ](\}}t
t | ¡  ¡ d¡|| ƒ q^dS )rT   r(   Úouté   r
   )ÚtickdirÚlengthÚwidthé    TÚminor)r^   r_   r`   Ztick1OnÚwhichr   )rb   éÞ   Úinr)   Zinoutéà   g²ï§ÆK·?g•C‹lã?gƒÀÊ¡E¶Û?gB`åÐ"Ûí?gºI+‡â?g/Ý$í?gìQ¸…ëÁ?gmçû©ñÒÝ?N)r   rG   rI   ZxaxisZset_tick_paramsZyaxisZ	set_ticksr   Ú	enumerateÚaxesr   r9   ÚroundÚget_positionZ
get_points)r    r   ZansÚnnr   r   r   Útest_outward_ticks˜   sN    
    ÿ    ÿ


ýÿrl   r6   rU   Úblackc              
   C   s°   |d|  }}| | f| df| |f|dfd|f||fd| f|| fd| fg	}|D ]P}t ||ƒ}td|||dddd}	| |	¡ td|d	d|| jd	d
}
|  |
¡ qZ|
S )z&
    Surround ax with OffsetBoxes
    r   r?   r.   ÚNoner   F)r`   ÚheightZ	facecolorZ	edgecolorZ	linewidthZantialiasedÚcenterg        )rQ   ÚchildrV   ZframeonZbbox_to_anchorZbbox_transformZ	borderpad)r   r   Z
add_artistr   Ú	transAxes)r   ÚsizeÚmarginÚcolorÚmÚmpZanchor_pointsZpointÚdaZ
backgroundZanchored_boxr   r   r   Úadd_offsetboxes¹   s<        þ
û
ùry   Ztight_layout_offsetboxes1Ztight_layout_offsetboxes2c                     sŽ   d ‰‰ddddg‰ ddg ‰‰‡ ‡‡‡‡fdd	„} | ƒ }t  ¡  | ƒ }|ˆd d ˆ… D ]&}| ¡ D ]}t|tƒrf| d
¡ qfqZt  ¡  d S )Nr	   ZredZblueZgreenZyellowr   r   c                     sL   t  ˆˆ¡\} }|j}t|ˆ ƒD ]&\}}|jˆˆ|d t|d|d q |S )N)ru   é   )r   r   ZflatÚzipr   ry   )Ú_Úaxsr   ru   ©ÚcolorsÚcolsZrowsÚxÚyr   r   Ú	_subplotsé   s    z0test_tight_layout_offsetboxes.<locals>._subplotsF)r   r   Zget_childrenÚ
isinstancer   rY   )rƒ   r}   r   rq   r   r~   r   Útest_tight_layout_offsetboxes×   s    	
r…   c                  C   s   t  ¡ } |  ¡  dS )zETest that tight layout doesn't cause an error when there are no axes.N)r   Zgcfr   )r    r   r   r   Útest_empty_layoutÿ   s    r†   ÚlabelZxlabelZylabelc                 C   s$   t jdd\}}|jf | diŽ dS )z8Test that no warning emitted when xlabel/ylabel too big.©r
   r	   ©ZfigsizeZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaN)r   r   Úset)r‡   r    r   r   r   r   Útest_verybig_decorators  s    r‹   c                  C   s4   t jdddd\} }|d  d¡ |d  d¡ dS )	z+Test that doesn't warn when xlabel too big.r   r	   rˆ   r‰   r   ZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbN)r   r   r   ©r    r}   r   r   r   Útest_big_decorators_horizontal  s    r   c                  C   s4   t jdddd\} }|d  d¡ |d  d¡ dS )	z+Test that doesn't warn when ylabel too big.r	   r   rˆ   r‰   r   ZaaaaaaaaaaaaaaaaaaaaZbbbbbbbbbbbbbbbbbbbbN)r   r   r   rŒ   r   r   r   Útest_big_decorators_vertical  s    rŽ   c                	   C   s@   t  dd¡ t jddddd t t¡ t  ¡  W 5 Q R X d S )N)é   é   r.   )r   r   )r   r
   r
   r   r0   )r   r2   ÚpytestÚwarnsrF   r   r   r   r   r   Útest_badsubplotgrid  s    r“   c               	   C   sª   t jdd\} }| ddg¡ | ddg¡ |jddddd	 | ¡ }t t¡& t  	¡  | ¡ }|j
|j
ksrt‚W 5 Q R X t t¡ t j	ddd
d
gd W 5 Q R X d S )NT©r   r   r   zBIG LONG STRING)g      ô?r	   )g      %@g      ü?F)ZxyZxytextZannotation_clipgš™™™™™é?r@   )r   r   Zset_xlimZset_ylimZannotaterj   r‘   r’   rF   r   r`   ÚAssertionError)r    r   Úp1Úp2r   r   r   Útest_collapsed#  s    
ÿr˜   c                  C   sJ   t jdd\} }|  d¡}| d¡}| j ¡  | ¡ j| ¡ jksFt	‚d S )NTr”   ZfooÚbar)
r   r   Zsuptitler   ZcanvasZdrawZget_window_extentÚy0Úy1r•   )r    r   ÚstÚtr   r   r   Útest_suptitle8  s
    


rž   Zpdfc                    s@   t jjj‰ ‡ fdd„}|  t jjd|¡ t ¡ \}}| ¡  d S )Nc                    s(   t | tjjjƒst‚ˆ | f|ž|Ž d S )N)r„   rH   ÚbackendsZbackend_pdfZRendererPdfr•   )ÚselfÚargsÚkwargs©Zunpatched_initr   r   Ú__init__D  s    z'test_non_agg_renderer.<locals>.__init__r¤   )rH   Zbackend_basesZRendererBaser¤   Úsetattrr   r   r   )ZmonkeypatchZrecwarnr¤   r    r   r   r£   r   Útest_non_agg_renderer@  s
    
r¦   c               	   C   sŒ   t  dd¡\} }|d jddgddgddgd}|d  ¡ }|  |jd |jd|jg¡}| j||d t	j
td	d
 |  ¡  W 5 Q R X d S )Nr   r	   r   r   )Úcg{®Gázt?r-   )ÚcaxzThis figure includes Axes©Úmatch)r   r   Zscatterrj   Zadd_axesÚx1rš   ro   Zcolorbarr‘   r’   rF   r   )r    rh   ZptsZax_rectr¨   r   r   r   Útest_manual_colorbarO  s     ÿr¬   c            	      C   sæ   t  d¡ d¡} tjdd}|jddd}|jdd	d}|jd
dd}|||fD ]}| d¡ | | d d …df ¡\}| | ¡}| 	¡ sŒt
‚| 	¡ s˜t
‚tddd|jd}| |¡ | | ¡ | ¡ ¡ | 	¡ rÔt
‚| 	¡ rPt
‚qPd S )Nr4   r5   )é   r	   r‰   éƒ   Zrectilinear)Z
projectioné„   Z	mollweideé…   ZpolarFr   r.   r?   )Z	transform)r9   r:   r;   r   rG   rI   Zgridr   ZpcolorZ_fully_clipped_to_axesr•   r   rr   Zset_clip_pathÚget_pathZget_transform)	r<   r    r#   r$   r%   r   Úhrv   rA   r   r   r   Útest_clipped_to_axes\  s     


r³   c               	   C   s@   t  ¡ \} }tjtdd |  ddi¡ W 5 Q R X |  ¡  d S )Nzwill be deprecatedr©   rV   ç333333Ã?)r   r   r‘   r’   ÚPendingDeprecationWarningÚset_tight_layoutrW   r   r   r   r   Útest_tight_padst  s    ÿr·   c                  C   s    t jddid\} }|  ¡  d S )NrV   r´   r”   )r   r   rW   r   r   r   r   Útest_tight_kwargs|  s    r¸   c               	   C   sh   t  ¡ \} }t t¡H |  d¡ |  ¡ s.t‚|  d¡ |  ¡ rDt‚|  d¡ |  ¡ sZt‚W 5 Q R X d S )NTF)r   r   r‘   r’   rµ   r¶   Zget_tight_layoutr•   r   r   r   r   Útest_tight_toggle  s    


r¹   )r   )r6   rU   rm   )/rC   Znumpyr9   Znumpy.testingr   r‘   Z
matplotlibrH   Zmatplotlib.testing.decoratorsr   Zmatplotlib.pyplotZpyplotr   Zmatplotlib.offsetboxr   r   Zmatplotlib.patchesr   r   r!   r'   r,   r3   r=   rO   rS   rX   r[   rl   ry   r…   r†   ÚmarkZparametrizer‹   r   rŽ   r“   r˜   rž   Úbackendr¦   r¬   r³   r·   r¸   r¹   r   r   r   r   Ú<module>   s`   




ÿ


)

	
!


'
	

