o
    :a^^                     @   s  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?g d@ej+dAg dBdCdD Z3edEgdFdG Z4edHgdIdJ Z5edKgdLdM Z6dNdO Z7edPgdQdR Z8dSdT Z9edUgdVdW Z:ej+dXg dYdZd[ Z;d\d] Z<d^d_ Z=ed`da Z>edbdc Z?ej+ddg dedfdg Z@edhgdidj ZAedkgdldm ZBdndo ZCdpdq ZDedrgdsdtdu ZEedvgdddwdx ZFdydz ZGd{d| ZHd}d~ ZIedrgdsdd ZJdd ZKdd ZLdd ZMdd ZNedgdddd ZOdd ZPdd ZQedgdddd ZRedgdddd ZSd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(    di | }|t  d} |dS )N)Z	directory)fname )mplZget_data_path)kwZproppathr   findfontr   </usr/lib/python3/dist-packages/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-serifZ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   
r1   Z	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ylimr-   r.   r0   r   r   r   test_multilinel   s$   

r=   Z
multiline2Zmpl20)r   c               	      s  dt jd< t  \} }|ddg |ddg |jdddd	 g d
}| j   fdd}d}t|D ]\}}|j	d| d d||dd}||| q6|j	ddddd |jdddd	 t|D ]\}}|j	d| d d||dd}||| qc|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 ]\}}|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	linewidth)Z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   r2   F)clip_on	transform)	mpatchesZ	Rectangle	transAxesZ
set_boundsget_window_extentZtransformedinvertedZboundsZ	add_patch)r0   ttrrendererr   r   draw_box   s   z!test_multiline2.<locals>.draw_boxleftr    r   bottomhorizontalalignmentverticalalignmentg333333?zBottom alignrA   g?r5   z	Top aligng?baselinezBaseline alignr3   )rQ   rR   rotationzBot align, rot20)
r*   rcParamsr+   set_xlimset_ylimZaxhlinecanvasget_renderer	enumerater;   )r/   r0   stsrM   ZhoralnnstrI   r   rK   r   test_multiline2   sH   

	r_   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%   r`   Zantialiasedr4   rP         ?z
$\sqrt{x}$)r   rV   r*   r8   r;   r/   r   r   r   test_antialiasing   s   

re   c                  C   s\   t jjddd} t| d}t j|}W d    n1 sw   Y  |ddks,J d S )NZ	Helveticaafm)ZfontextrbZVAVAVAVAVAVA)g     @i  )r   font_managerr   openrf   ZAFMZstring_width_height)fnZfhrf   r   r   r   test_afm_kerning   s
   rk   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 ]3\}}t  j||g\|_|_||\}}	|r\dnd}
|j }|j||d|
d |j| q?d S )Nbutton_press_eventr%   r2   rc   r`      r#   zhello worldr4   )r6   fontsizerU   ZyellowZredorS   )r*   r8   Zaxesr   rY   npZlinspaceZmeshgridr;   drawzipZflatgcarF   rD   xycontainsZviewLimfrozenplotset)r/   r0   ZmeventZxsZysZtxtrt   ru   rv   _rA   Zvlr   r   r   test_contains   s$   

r{   c                  C   sb   t  \} }|jdddddid}| j  td| jg|jdR  }||d	i fks/J d S )
NZhello)r#   r#   )333333?r|   Z
arrowstylez->)xyxytextZ
arrowpropsrl   )r%   r|   F)	r*   r+   r,   rY   rq   r   Z	transDatarD   rv   )r/   r0   annZeventr   r   r   test_annotation_contains   s   

r   Ztitlesc                  C   sJ   t   t ddd} | jddd | jddd | g  | g  d S )Nr2   z
left titlerN   loczright titleright)r*   r8   r9   r:   r-   r.   r<   r   r   r   test_titles   s   
r   Ztext_alignmentc                  C   s   t   t ddd} d}d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 )Nr2   r   )r   rm   )r5   rO   rT   r4   r%   z TjroundZwheat)boxstyleZ	facecoloralpha)r7   rU   bboxg      ?z$\sum_{i=0}^{j}$)r7   rU   r   g      ?)
r*   r8   r9   r;   dictrx   rW   rX   r-   r.   )r0   rt   rU   Z	alignmentr   r   r   test_alignment  s(   


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 )
Nr2   r4   r3   i  )r   rn   Z
fontweightrN      i  r   )r*   r8   r9   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sCJ q7|jddddd}| j  || jj}d}||f|_
| j  || jj}t|j	|j	D ]\}}|| |ksJ qsd S )NtestrB   figure pixels)r~   
textcoords   )r*   r+   r,   rY   rq   rG   rL   Zset_positionrr   minZxyann)r/   r0   r   Zinit_posZ	shift_valZpost_posabr   r   r   test_set_position&  s0   




r   r;    Oemptyz	non-empty)Zidsc                 C   sx   t  \}}|jdd| ddd}|j  |j}| }|j|d d}tjj	|
 |
 d dd |j|ks:J d S )	Nr%   rN   rO   )r6   r7   
   )dpi皙?Zrtol)r*   r+   r;   rY   rq   r   rG   rp   testingassert_allclose
get_points)r;   r/   r0   t1r   Zbbox1Zbbox2r   r   r   test_non_default_dpiF  s   
r   c                   C   s@   t jddks
J t jddksJ t jddksJ d S )NZ
horizontal        Zverticalg     V@z15.      .@r   r;   get_rotationr   r   r   r   test_get_rotation_stringV  s   r   c                  C   s"   dD ]} t j| | ksJ 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J qd S )N)C      )   )r   r;   r   floatr   r   r   r   test_get_rotation_inta  s   r   c                   C   s<   t t tjd W d    d S 1 sw   Y  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
J d S )Nr   r   r   r   r   r   test_get_rotation_nonek  s   r   c                  C   s2   t g dg dD ]\} }ttj| | q	d S )N)g     v@g     w@g	@)r   g      1@gfffff&f@)rr   r   r   r;   r   )r   jr   r   r   test_get_rotation_mod360o  s   r   r6   )r4   r   rN   r7   )r4   r5   rO   rT   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   )rU   r7   r6   )r%   r%   r   Zrotation_modeZanchordefault)
r*   r+   r   r;   rY   rq   r   rG   rL   r   )r6   r7   r/   r0   r   Z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?rJ   T)ZbackgroundcolorrC   r%   zIs fancy bbox clipped?rC   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+ ptsrm   r3   zaxes points    r~   r   r}   r   rn   - ptsir5   r~   r   r}   r   rn   r7   + fracr`   r   r   - frac皙+ pixels      zaxes pixels- pixelsir*   r+   r,   r/   r0   r   r   r   "test_annotation_negative_ax_coords  8   






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      r5   r   r   r   g?zfigure fractionr   r   r%   r   2   r   r   ir$   r   r   r   r   r   #test_annotation_negative_fig_coords  r   r   c                  C   s   t dd\} \}}t   |jrJ |jrJ | jrJ |ddd}|js)J |js.J | js3J |jdddgd}|jsAJ |jsFJ | jsKJ t   |jrTJ |jrYJ | jr^J d S )Nr2   r@   r%   Zaardvarkr}   )r*   r+   Zdraw_allZstaler;   r,   )r/   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 )Nr2   r@   r   fooTr   )rp   ZrandomZseedr*   r+   Zrandr;   )r/   r   r   rt   ru   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J d S )Nr   z	font.sizeZlarger   r$   )r   rV   rh   r   Zget_size_in_points)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 q+d S )N*   pdf.fonttype)g@g(@ra   r   iX     +   r@   r   rm   z{fs} pt font size)fs)rn   )r   rV   r*   r+   xaxisZset_major_locatorZNullLocatoryaxisrX   r[   ranger;   format)r/   r0   r   r   r   r   r   test_font_scaling  s   
 r   zspacing1, spacing2))r#   r@   )r@   r#   )r@   r@   c           	      C   s   d}t  }|j }t jdd|| d}t jdd||d}|j  |j|d}|j|d}|j|jks6J | |krD|j|jksBJ d S |j|jksLJ d S )Nzline1
line2rc   r%   )ZlinespacingrK   )	r*   r8   rY   rZ   r;   rq   rG   widthZheight)	Zspacing1Zspacing2Ztext_stringr/   rL   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;   rp   r   r   rY   rq   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 )
Nr2   ztext.hinting_factorr%   z	some textsvgr   pngr   r   )r*   rV   r8   r;   savefigioBytesIOrG   Z	intervalxrp   r   r   )r/   r   Z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s8J q-q%d S )NFtext.usetexy   Tz   )
r*   r8   rV   add_subplotrY   rq   r   
majorTickslabel1Z
get_usetex)r/   r   r   r0   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*   r8   r;   rY   rq   rd   r   r   r   test_single_artist_usetex.  s   r   fmt)r   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*   rV   r8   r;   r   r   r   )r   r/   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 )Nrc   cr   r   r   r%   rS   r%   r   r   r`   rt   r   r   r   r2   r   rA   )r*   r8   rs   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 )NZnonezsvg.fonttyperc   z50% using `color`r   rS   r%   z50% using `alpha`r   r`   z"50% using `alpha` and 100% `color`r   r   )r   rV   r*   r8   rs   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Br2   r@   r%   ZBoo)r*   rx   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r1J d S )Nr2   
annotation)r%   r%   r   gư>r   )
r*   r+   r,   rG   rY   rZ   Ztight_layoutrp   Zallcloser   )r/   r0   ZanZextent1Zextent2r   r   r   test_annotation_update^  s   r	  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 )
Nr2   ro   rt   r%   )datar   rB   zoffset points)r   r~   r   )r   )r   rx   r   Znowr,   Zfig_testZfig_refr0   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 |g  |d }|jd
dd |jddd |g  d S )Nr>   r?   zaxes.titleyr2   r@   )	   g      @T)rb   Zconstrained_layoutr   z$\sum_{i} x_i$zNew wayrN   r   g)\(?)ru   zOld Way)r*   rV   r+   r:   Zset_xticklabels)r/   Zaxsr0   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J d S )	Nr>   r   ra   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*   r8   r;   rY   rq   Z_get_wrapped_text)r/   sr;   r   r   r   	test_wrap  s
   
r  c                  C   s<   t jdd} | jddddd}| j  | dksJ d S )Nr  ra   g      #@   ZAlonglineoftexttowrapTr  r  r/   r;   r   r   r   test_long_word_wrap     
r  c                  C   s<   t jdd} | jddddd}| j  | dksJ d S )Nr  ra   r   znon wrapped textTr  r  r  r   r   r   test_wrap_no_wrap  r  r  c                 C   s`   |   }|ddg |ddg |jjd jd |  }|ddg |ddg d S )Nr   r2   u   €r   wr   )r   r.   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sJ | dks$J dS )z>Test that kwargs take precedence over fontproperties defaults.valuezTimes New Romang      D@)r   r   Zcounts)r   r   N)r*   r8   ZxlabelZylabelZget_size)r   r   r   r   r   $test_fontproperties_kwarg_precedence  s
   r  c                  C   s@   t  } t d}| jddd|dd}| }t|d d S )Nrm   r   r   T)rD   Ztransform_rotates_text)r*   rs   mtransformsZAffine2DZ
rotate_degr;   r   r   )r0   rD   r;   resultr   r   r   test_transform_rotates_text  s   r!  c                  C   sV   t tddd d} t | }t }||  | d |d ksJ | d |d ks)J d S )Nr   )r   )r   r   r   r   )r   r   r   update)inpcacher   r   r   r   test_update_mutate_input  s   

r%  c                   C   sB   t t tjddddd W d    d S 1 sw   Y  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ATATATATATATATATATArm   r   )r*   r8   r&  r   r   r   r   test_pdf_kerning  s   r(  c                 C   sT   t  }|ddd |j  tdd | D sJ dd | D ddgks(J d S )	Nr%   u   ০c                 s   s    | ]	}t |jtV  qd S )N)
isinstancemessager)   .0warnr   r   r   	<genexpr>  s    z*test_unsupported_script.<locals>.<genexpr>c                 S   s   g | ]}|j jqS r   )r*  argsr+  r   r   r   
<listcomp>  s    z+test_unsupported_script.<locals>.<listcomp>)z>Glyph 2534 (\N{BENGALI DIGIT ZERO}) missing from current font.)z7Matplotlib currently does not support Bengali natively.)r*   r8   r;   rY   rq   all)Zrecwarnr/   r   r   r   test_unsupported_script  s   

r2  c                  C   sx   t  \} }|jddddd | j  |jddddd tjtdd | j  W d    d S 1 s5w   Y  d S )Nr   z$ \wrong{math} $F)Z
parse_mathTzUnknown symbol)match)r*   r+   r;   rY   rq   r   r   r   r   r   r   r   test_parse_math  s   
"r4  ztext_pdf_font42_kerning.pdfc                   C   s(   dt jd< t   t jddddd d S )Nr   r   r   r%   ZATAVATAVATAVATAVATArm   r   r*   rV   r8   r&  r   r   r   r   test_pdf_font42_kerning  s   
r6  ztext_pdf_chars_beyond_bmp.pdfc                   C   s2   dt jd< dt jd< t   t jddddd	 d S )
Nr   r   Zstixsanszmathtext.fontsetr   r%   u   Mass $m$ 𐌈rm   r   r5  r   r   r   r   test_pdf_chars_beyond_bmp  s   

r7  )Tr   r   r'   Znumpyrp   Znumpy.testingr   r   Z
matplotlibr   Zmatplotlib.backend_basesr   r&   r   Zmatplotlib.patchesZpatchesrE   Zmatplotlib.pyplotZpyplotr*   Zmatplotlib.transformsZ
transformsr  Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.textr   ZmarkZskipifZcheckdep_usetexZneeds_usetexr1   r=   r_   re   rk   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  r  r!  r%  r'  r(  r2  r4  r6  r7  r   r   r   r   <module>   s    

S

3





	 





	



	








		



