U
    \	aY                  	   @   st  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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 d dlmZmZ d dlmZ ejje	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#dd Z$edgdd Z%dd Z&ed gd!d" Z'ed#gddd$d% Z(ed&gd'd( Z)d)d* Z*ejj+d+d,d-gd.d/gd0d1d2 Z,d3d4 Z-d5d6 Z.d7d8 Z/d9d: Z0d;d< Z1d=d> Z2ej+d?d@dAdBgej+dCd@dDdEdFdGgdHdI Z3edJgdKdL Z4edMgdNdO Z5edPgdQdR Z6dSdT Z7edUgdVdW Z8dXdY Z9edZgd[d\ Z:ej+d]d^d_d`gdadb Z;dcdd Z<dedf Z=edgdh Z>edidj Z?ej+dkdldmdngdodp Z@edqgdrds ZAedtgdudv ZBdwdx ZCdydz ZDedlgd{d|d} ZEed~gdddd ZFdd ZGdd ZHdd ZIedlgd{dd ZJdd ZKdd ZLdd ZMdd ZNedgdddd ZOdS )    )datetimeN)assert_almost_equal)
MouseEvent)FontProperties)check_figures_equalimage_comparison)TextTz"This test needs a TeX installation)reasonZfont_stylesc                     s   fdd} ddl m m tjddtdd t \}}| d	d
d
dd}|jddd|d | dd
d
dddd}|jddd|d | ddd
dddd}|jddd|d | d	d
d
dddd}|jddd|d | d	d
d
dddd}|jd d!d|d |	g  |
g  d S )"Nc                     s$    f | }|t  d} |dS )N)	directory)fname)mplZget_data_path)kwproppathr   findfont >/tmp/pip-unpacked-wheel-wjyw_3jo/matplotlib/tests/test_text.pyfind_matplotlib_font   s    
z.test_font_styles.<locals>.find_matplotlib_fontr   r   ignorez>findfont: Font family \[u?'Foo'\] not found. Falling back to .zmatplotlib.font_manager)modulez
sans-serifnormal   )familystylevariantsizezNormal Font)皙?r   axes fraction)xycoordsfontpropertiesZFooboldi  )r   r   r   weightZstretchr   z	Bold Font)r   皙?z
sans serifZitalici  zBold Italic Font)r   333333?   z
Light Font)r   皙?d   zCondensed Font)r         ?)matplotlib.font_managerr   r   warningsfilterwarningsUserWarningpltsubplotsannotate
set_xticks
set_yticks)r   figaxZnormal_fontZ	bold_fontZbold_italic_fontZ
light_fontZcondensed_fontr   r   r   test_font_styles   s    
r4   	multilinec                  C   s   t   t ddd} | d t jddddddd	 t jddd
dddd	 t jddddddd	 t dd t dd | g  | g  d S )N   zmultiline
text alignmentr#   r(   zTpTpTp
$M$
TpTpTp   centertop)r   havazTpTpTp
$M^{M^{M^{M}}}$
TpTpTpg?zTpTpTp
$M_{q_{q_{q}}}$
TpTpTpr   )	r-   figuresubplot	set_titletextZxlimZylimr0   r1   r3   r   r   r   test_multilinel   s>    
             
rA   Z
multiline2Zmpl20)r   c               	      s  dt jd< t  \} }|ddg |ddg |jdddd	 d
dddddg}| j   fdd}d}t|D ].\}}|j	d| d d||dd}||| qt|j	ddddd |jdddd	 t|D ].\}}|j	d| d d||dd}||| q|j	ddddd |jdddd	 t|D ]0\}}|j	d| d d||dd}||| q(|j	ddddd |jdddd	 t|D ]2\}}|j	d| d d||dd d!}||| q|j	ddd"dd d S )#N   text.kerning_factorr   gffffff?   r(   ZC2r$   )colorZ	linewidthZLinez2 Lineg
 2 Lgz$\sum_i x $zhi $\sum_i x $
testztest
 $\sum_i x $z$\sum_i x $
 $\sum_i x $c                    sB   t jdddd| jd}|| | j j | | d S )Nr   r   r6   F)clip_on	transform)	mpatchesZ	Rectangle	transAxesZ
set_boundsget_window_extentZtransformedinvertedZboundsZ	add_patch)r3   ttrrendererr   r   draw_box   s    
z!test_multiline2.<locals>.draw_boxleftr#   r   bottomhorizontalalignmentverticalalignmentg333333?zBottom alignrE   g?r9   z	Top aligng?baselinezBaseline alignr7   )rU   rV   rotationzBot align, rot20)
r-   rcParamsr.   set_xlimset_ylimZaxhlinecanvasget_renderer	enumerater?   )r2   r3   stsrQ   ZhoralnnstrM   r   rO   r   test_multiline2   sP    
 
	 rc   zantialiased.pngc                  C   sB   dt jd< tjdd} | jdddddd	 | jdd
dddd	 d S )NTztext.antialiased)g      @      ?figsizer(   rd   Zantialiasedr8   rT         ?z
$\sqrt{x}$)r   rZ   r-   r<   r?   r2   r   r   r   test_antialiasing   s    
ri   c               	   C   sH   t jjddd} t| d}t j|}W 5 Q R X |ddksDtd S )NZ	Helveticaafm)ZfontextrbZVAVAVAVAVAVA)g     @i  )r   font_managerr   openrj   ZAFMZstring_width_heightAssertionError)fnfhrj   r   r   r   test_afm_kerning   s    rq   ztext_contains.pngc                  C   s   t  } t  }td| jdddd }tddd}tddd}t||\}}t jdddd	ddd
}| j	  t
|j|jD ]f\}}t  j||g\|_|_||\}}	|rdnd}
|j }|j||d|
d |j| q~d S )Nbutton_press_eventr(   r6   rg   rd      r&   zhello worldr8   )r:   fontsizerY   ZyellowZredorW   )r-   r<   Zaxesr   r]   npZlinspaceZmeshgridr?   drawzipZflatgcarJ   rH   xycontainsZviewLimfrozenplotset)r2   r3   ZmeventxsZystxtrz   r{   r|   _rE   Zvlr   r   r   test_contains   s,         

r   c                  C   s`   t  \} }|jdddddid}| j  td| jf|jd }||d	i fks\t	d S )
NZhello)r&   r&   )333333?r   Z
arrowstylez->)xyxytextZ
arrowpropsrr   )r(   r   F)
r-   r.   r/   r]   rw   r   Z	transDatarH   r|   rn   )r2   r3   anneventr   r   r   test_annotation_contains   s       
 
r   titlesc                  C   sJ   t   t ddd} | jddd | jddd | g  | g  d S )Nr6   z
left titlerR   loczright titleright)r-   r<   r=   r>   r0   r1   r@   r   r   r   test_titles   s    
r   Ztext_alignmentc                  C   s   t   t ddd} d}dD ]N}dD ]D}| j|d|d ||tdddd	d
 | j|dd||d |d7 }q&q| ddgddg | ddgddg | ddg | ddg | g  | 	g  d S )Nr6   r   )r   rs   )r9   rS   rX   r8   r(   z TjroundZwheat)boxstyleZ	facecoloralpha)r;   rY   bboxg      ?z$\sum_{i=0}^{j}$)r;   rY   r   g      ?)
r-   r<   r=   r?   dictr~   r[   r\   r0   r1   )r3   rz   rY   	alignmentr   r   r   test_alignment  s6            
r   zaxes_titles.pngc                  C   sP   t   t ddd} | jddddd | jddddd | jd	d	ddd d S )
Nr6   r8   r7   i  )r   rt   Z
fontweightrR      i  r   )r-   r<   r=   r>   r@   r   r   r   test_axes_titles  s
    r   c                  C   s  t  \} }|jddddd}| j  || jj}d}|||f | j  || jj}t|j	|j	D ]\}}|| |ksnt
qn|jddddd}| j  || jj}d}||f|_| j  || jj}t|j	|j	D ]\}}|| |kst
qd S )NtestrF   figure pixels)r   
textcoords   )r-   r.   r/   r]   rw   rK   rP   Zset_positionrx   minrn   Zxyann)r2   r3   r   Zinit_posZ	shift_valZpost_posabr   r   r   test_set_position&  s:       

   


r   r?    Oemptyz	non-empty)idsc                 C   sx   t  \}}|jdd| ddd}|j  |j}| }|j|d d}tjj	|
 |
 d dd |j|ksttd S )	Nr(   rR   rS   )r:   r;   
   )dpi皙?Zrtol)r-   r.   r?   r]   rw   r   rK   rv   testingassert_allclose
get_pointsrn   )r?   r2   r3   t1r   Zbbox1Zbbox2r   r   r   test_non_default_dpiF  s    
r   c                   C   s@   t jddkstt jddks(tt jddks<td S )NZ
horizontal        Zverticalg     V@z15.      .@r   r?   get_rotationrn   r   r   r   r   test_get_rotation_stringV  s    r   c                  C   s"   dD ]} t j| | kstqd S )N)r   g333330@gYS@r   ir   r   r   test_get_rotation_float\  s    r   c                  C   s&   dD ]} t j| t| kstqd S )N)C      )   )r   r?   r   floatrn   r   r   r   r   test_get_rotation_inta  s    r   c                	   C   s&   t t tjd W 5 Q R X d S )NZ
hozirontal)pytestraises
ValueErrorr   r?   r   r   r   r   r   test_get_rotation_raisesf  s    r   c                   C   s   t jd dkstd S )Nr   r   r   r   r   r   test_get_rotation_nonek  s    r   c                  C   s6   t dddgdddgD ]\} }ttj| | qd S )Ng     v@g     w@g	@r   g      1@gfffff&f@)rx   r   r   r?   r   )r   jr   r   r   test_get_rotation_mod360o  s    r   r:   r8   r   rR   r;   r9   rS   rX   Zcenter_baselinec                 C   sv   t  \}}td|| d}|jdddi|}|jd	ddi|}|j  t||jj	 ||jj	  d S )
Nr   )rY   r;   r:   r(   r   Zrotation_modeanchordefault)r(   r(   r   )r(   r(   r   )
r-   r.   r   r?   r]   rw   r   rK   rP   r   )r:   r;   r2   r3   r   t0r   r   r   r   %test_null_rotation_with_rotation_modet  s    
r   Ztext_bboxclipc                  C   s8   t jdddddd t jddddd	} | d
di d S )Ng?r#   zIs bbox clipped?rN   T)ZbackgroundcolorrG   r(   zIs fancy bbox clipped?rG   r   zround, pad=0.1)r-   r?   Zset_bbox)tr   r   r   test_bbox_clipping  s    r   z!annotation_negative_ax_coords.pngc               	   C   s   t  \} }|jdddgdddgddd |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 |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 |jdddgdddgddd	d
 d S )N+ ptsrs   r7   zaxes points    r   r   r   r   rt   - ptsir9   r   r   r   r   rt   r;   + fracrd   r   r   - frac皙+ pixels      zaxes pixels- pixelsir-   r.   r/   r2   r3   r   r   r   "test_annotation_negative_ax_coords  s\                      r   z"annotation_negative_fig_coords.pngc               	   C   s   t  \} }|jdddgdddgddd |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 |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 |jdddgdddgddd
d d S )Nr   r   x   zfigure pointsr   r   r      r9   r   r   r   g?zfigure fractionr   r   r(   r   2   r   r   ir'   r   r   r   r   r   #test_annotation_negative_fig_coords  s\                      r   c                  C   s   t dd\} \}}t   |jr&t|jr0t| jr:t|ddd}|jsRt|js\t| jsft|jdddgd}|jst|jst| jstt   |jrt|jrt| jrtd S )Nr6   rD   r(   Zaardvarkr   )r-   r.   Zdraw_allstalern   r?   r/   )r2   ax1ax2Ztxt1Zann1r   r   r   test_text_stale  s"    










r   zagg_text_clip.pngc                  C   sZ   t jd td\} \}}t jddD ](\}}|j||ddd |||d q,d S )Nr6   rD   r   fooTr   )rv   randomseedr-   r.   Zrandr?   )r2   r   r   rz   r{   r   r   r   test_agg_text_clip  s
    r   c                  C   s>   dt jd< t jjdd} |  }dt jd< ||  ks:td S )Nr   z	font.sizeZlarger   r'   )r   rZ   rl   r   Zget_size_in_pointsrn   )fpZsz1r   r   r   test_text_size_binding  s
    

r   zfont_scaling.pdfc                  C   s   dt jd< tjdd\} }|jt  |jt  |dd t	t
ddd	D ]&\}}|jd
|d dj|d|d qVd S )N*   zpdf.fonttype)g@g(@re   r   iX     +   rD   r   rs   z{fs} pt font size)fs)rt   )r   rZ   r-   r.   xaxisZset_major_locatorZNullLocatoryaxisr\   r_   ranger?   format)r2   r3   r   r   r   r   r   test_font_scaling  s    
r   zspacing1, spacing2)r&   rD   )rD   r&   )rD   rD   c           	      C   s   d}t  }|j }t jdd|| d}t jdd||d}|j  |j|d}|j|d}|j|jkslt| |kr|j	|j	kstn|j	|j	kstd S )Nzline1
line2rg   r(   )ZlinespacingrO   )
r-   r<   r]   r^   r?   rw   rK   widthrn   height)	Zspacing1Zspacing2Ztext_stringr2   rP   text1text2Zbox1Zbox2r   r   r   test_two_2line_texts  s    

r   c                  C   s:   t  \} }|dtjd |tjdd | j  d S )Nr   naninf)r-   r.   r?   rv   r   r   r]   rw   r   r   r   r   test_nonfinite_pos
  s    r   c                  C   sj   dt jd< t  } | ddd}| jt dd | j}| jt dd t	j
j| j|dd	 d S )
Nr6   ztext.hinting_factorr(   z	some textsvgr   pngr   r   )r-   rZ   r<   r?   savefigioBytesIOrK   Z	intervalxrv   r   r   )r2   r   expectedr   r   r   test_hinting_factor_backends  s    

r   c                  C   sx   t  } dt jd< | d}dt jd< | d}| j  |df|dffD ](\}}|jjD ]}|j	 |ksZt
qZqJd S )NFtext.usetexy   Tz   )r-   r<   rZ   add_subplotr]   rw   r   
majorTickslabel1Z
get_usetexrn   )r2   r   r   r3   usetexr   r   r   r   test_usetex_is_copied  s    




r  c                  C   s(   t  } | jddddd | j  d S )Nr(   z	$\frac12$Tr  )r-   r<   r?   r]   rw   rh   r   r   r   test_single_artist_usetex.  s    r
  fmtr   Zpdfr   c                 C   s:   dt jd< t  }|jddddd |jt | d d S )NTr  r(   Z2_2_2Fr	  r   )r-   rZ   r<   r?   r   r   r   )r  r2   r   r   r   test_single_artist_usenotex8  s    
r  ztext_as_path_opacity.svgc                   C   sP   t   t    t jddddd t jddddd t jddd	dd
d d S )Nrg   cr   r   r   r(   rW   r(   r   r   rd   rz   r   r   r   r6   r   rE   )r-   r<   ry   set_axis_offr?   r   r   r   r   test_text_as_path_opacityD  s
    r  ztext_as_text_opacity.svgc                   C   sZ   dt jd< t  t   tjddddd tjddddd	 tjdd
dddd d S )Nnonezsvg.fonttyperg   z50% using `color`r  rW   r(   z50% using `alpha`r  rd   z"50% using `alpha` and 100% `color`r  r  )r   rZ   r-   r<   ry   r  r?   r   r   r   r   test_text_as_text_opacityM  s    
r  c                   C   s,   t ddgddg tt dgdd d S )NABr6   rD   r(   ZBoo)r-   r~   reprr?   r   r   r   r   test_text_reprX  s    r  c                  C   sf   t dd\} }|jddd}|| j }|   || j }tj|	 |	 ddrbt
d S )Nr6   
annotation)r(   r(   r   gư>r   )r-   r.   r/   rK   r]   r^   Ztight_layoutrv   Zallcloser   rn   )r2   r3   ZanZextent1Zextent2r   r   r   test_annotation_update^  s    r  )
extensionsc                 C   sl   |   }|t dd |jdt dfdddd |  }|t dd |jdt dfdd	 d S )
Nr6   ru   rz   r(   )datar   rF   zoffset points)r   r   r   )r   )r  r~   r   nowr/   Zfig_testZfig_refr3   r   r   r   test_annotation_unitsi  s     r   zlarge_subscript_title.pngc                  C   s   dt jd< d t jd< t jddddd\} }|d	 }|d
 |jddd |d |d }|jd
dd |jddd |d d S )NrB   rC   zaxes.titleyr6   rD   )	   g      @T)rf   Zconstrained_layoutr   z$\sum_{i} x_i$zNew wayrR   r   r   g)\(?)r{   zOld Way)r-   rZ   r.   r>   Zset_xticklabels)r2   Zaxsr3   r   r   r   test_large_subscript_titleu  s    



r"  c                  C   s@   t jdd} d}| jdd|dd}| j  | dks<td S )	NrB   r   re   z?This is a very long text that should be wrapped multiple times.gffffff?r(   Twrapz?This is a very long
text that should be
wrapped multiple
times.r-   r<   r?   r]   rw   Z_get_wrapped_textrn   )r2   sr?   r   r   r   	test_wrap  s
    
r(  c                  C   s<   t jdd} | jddddd}| j  | dks8td S )Nr#  re   g      #@   ZAlonglineoftexttowrapTr$  r&  r2   r?   r   r   r   test_long_word_wrap  s    
r+  c                  C   s<   t jdd} | jddddd}| j  | dks8td S )Nr#  re   r   znon wrapped textTr$  r&  r*  r   r   r   test_wrap_no_wrap  s    
r,  c                 C   s`   |   }|ddg |ddg |jjd jd |  }|ddg |ddg d S )Nr   r6   u   €r   wr   )r  r1   Zset_yticklabelsr   r  r  Z	set_colorr  r   r   r   test_buffer_size  s    r.  c                  C   sL   t   t jdddd} t jdddd}|  dks8t| dksHtdS )z>Test that kwargs take precedence over fontproperties defaults.valuezTimes New Romang      D@)r    r   counts)r   r    N)r-   r<   ZxlabelZylabelget_sizern   )r   r   r   r   r   $test_fontproperties_kwarg_precedence  s
    r2  c                  C   s@   t  } t d}| jddd|dd}| }t|d d S )Nrs   r   r   T)rH   Ztransform_rotates_text)r-   ry   mtransformsZAffine2DZ
rotate_degr?   r   r   )r3   rH   r?   resultr   r   r   test_transform_rotates_text  s    r5  c                  C   sV   t tddd d} t | }t }||  | d |d ks>t| d |d ksRtd S )Nr!   )r"   )r    r   r    r   )r   r   r   updatern   )inpcacher   r   r   r   test_update_mutate_input  s    

r9  c                	   C   s,   t t tjddddd W 5 Q R X d S )Nr(   r   Zfoobar)r  )r   r   r   r-   figtextr   r   r   r   test_invalid_color  s    r;  ztext_pdf_kerning.pdfc                   C   s   t   t jddddd d S )Nr   r(   ZATATATATATATATATATArs   r   )r-   r<   r:  r   r   r   r   test_pdf_kerning  s    r<  )Pr   r   r*   Znumpyrv   Znumpy.testingr   r   Z
matplotlibr   Zmatplotlib.backend_basesr   r)   r   Zmatplotlib.patchesZpatchesrI   Zmatplotlib.pyplotZpyplotr-   Zmatplotlib.transformsZ
transformsr3  Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.textr   markZskipifZcheckdep_usetexZneeds_usetexr4   rA   rc   ri   rq   r   r   r   r   r   r   Zparametrizer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r
  r  r  r  r  r  r   r"  r(  r+  r,  r.  r2  r5  r9  r;  r<  r   r   r   r   <module>   s   

S

3





	 
 




	



	








		
