U
    Fvf                  	   @   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	Z	d dl
mZmZ d dlmZ d dlm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# d dlm$Z$ d dl%m&Z& d	d
 Z'edgdddd Z(edgdddd Z)edgdd Z*dd Z+dd Z,edgdddd Z-dd Z.edgddd d! Z/ed"gddd#d$ Z0ed%gde1 d&krd nd'd(d)d* Z2ed+gde1 d&krd nd'd(d,d- Z3ed.gddd/d0 Z4ed1gde1 d&krd nd2d(d3d4 Z5ed5d6gddd7d8 Z6ed9gddd:d; Z7ed<gdd=d>d?d@ Z8dAdB Z9dCdD Z:edEgdFdGdH Z;G dIdJ dJZ<G dKdL dLZ=dMdN Z>edOgdPdQ Z?dRdS Z@dTdU ZAdVdW ZBedXgdYdZ ZCed[gd\d] ZDd^d_ ZEd`da ZFdbdc ZGddde ZHdfdg ZIdhdi ZJdjdk ZKdldm ZLdndo ZMe	jNOdpdqdrds ZPe	jNOdpdqdtdu ZQe	jNOdvdwdxdy ZRdzd{ ZSd|d} ZTd~d ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_e	jNOdvdwdd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfe	jNOdddd Zgdd Zhedd Zidd Zjdd Zke	jNOdddgdelddggdd Zme	jNOdddengdd Zoe	jNOdddgdelddggdd Zpdd Zqdd Zrdd Zsdd ZtddĄ ZuddƄ ZvddȄ Zwe ddʄ ZxdS )    N)mock)assert_allclose)check_figures_equalimage_comparison)needs_usetex)HandlerTuple)
rc_context)FontPropertiesc                  C   s   t jd} t jd}dgd dgd  }dgd dgd  }t \}}t| |||D ]\}}}}	|j||||	d qZ| \}
}t	t||
}|j
| | dd	d
 d S )N
   a   brglabelccenter left)         ?)locbbox_to_anchor)nprandomZrandnpltsubplotszipscatterget_legend_handles_labelscollectionsOrderedDictlegendvalueskeys)XYlabelscolorsfigaxxyr   colorhandlesr!    r.   @/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_legend.pytest_legend_ordereddict   s     r0   Zlegend_auto1T)remove_textc                  C   sR   t  \} }td}|j|d| ddd |j||d ddd |jdd d	S )
Test automatic legend placementd   2   oy=1r   y=-1bestr   N)r   r   r   arangeplotr!   )r(   r)   r*   r.   r.   r/   test_legend_auto1*   s
    
r=   Zlegend_auto2c                  C   sh   t  \} }td}|j||ddd}|j||ddd ddd}|j|d |d gd	d
gdd dS )r2   r3   Zedgem)alignr,   Nr   r   ZupZdownr9   r:   )r   r   r   r;   barr!   )r(   r)   r*   Zb1Zb2r.   r.   r/   test_legend_auto24   s
    
rB   Zlegend_auto3c                  C   sf   t  \} }ddddddg}ddddddg}|j||ddd |d	d
 |d	d
 |jdd dS )r2   ?皙?r   gffffff?皙?zo-liner7                 ?r9   r:   N)r   r   r<   set_xlimset_ylimr!   )r(   r)   r*   r+   r.   r.   r/   test_legend_auto3>   s    rK   c                  C   s   t jddd\} }g }t|jdD ]d\}}|| |jdgddg  tdd	|d
 |jdd}| j	  |
| |j  q"t|d j|d j t|d j|d j dS )z
    Check that the legend location with automatic placement is the same,
    whatever the histogram type is. Related to issue #9580.
       )g@g333333@ncolsfigsize)rA   stepZ
stepfilledr   r   	   r
   Legend)Zbinsr   Zhisttyper9   r:   r      N)r   r   r   flat	set_titlehistranger!   canvasdrawappendget_window_extenttransformed	transAxesinvertedr   bounds)r(   axs
leg_bboxesr)   Zhtlegr.   r.   r/   test_legend_auto4J   s    
"
rc   c                  C   s  t jddd\} }g }t|jdD ]\}}tjddddd	tjtd
dgd
d
gdd
gddgddgddgddgddgddgg	ddtj	ddd
ddddfD ]}|
| q|jddgddgdd |j|d}| j  || |j  q"t|d j|d
 j dS )z
    Check that the automatic placement handle a rather complex
    case with non rectangular patch. Related to issue #9580.
    rS   )g333333#@g333333@rM   )centerr9   )r   rC   皙?皙?C1)Zxywidthheightfcr   r   rC   rH   rD   )rj   )r   r   r   ih  rE   ZC0)rh   rj   z	A segmentr7   r:   N)r   r   r   rT   mpatchesZEllipseZPolygonr   arrayZWedge	add_patchr<   r!   rX   rY   rZ   r[   r\   r]   r^   r   r_   )r(   r`   ra   r)   r   Z_patchrb   r.   r.   r/   test_legend_auto5`   s@              
rn   Zlegend_various_labelsc                  C   sl   t  } | d}|jtdddd |jtddddd |jtddddd	d |jdd
d d S )Ny      r5   r   r7   gffffff@u   Développésr@   Z__nolegend__r9   )	numpointsr   )r   figureZadd_subplotr<   r   r;   linspacer!   r(   r)   r.   r.   r/   test_various_labels   s    
ru   c               	   C   s^   t  \} }|jddgdd\}tjtdd |j|gd}W 5 Q R X t|jdksZt	dS )	z
    Test that artists with labels starting with an underscore are not added to
    the legend, and that a warning is issued if one tries to add them
    explicitly.
    r   r   Z_foor7   z*starts with '_'.*excluded from the legend.matchr-   N)
r   r   r<   pytestwarnsUserWarningr!   lenlegend_handlesAssertionError)r(   r)   rF   r!   r.   r.   r/   )test_legend_label_with_leading_underscore   s    r   zlegend_labels_first.pngc                  C   sh   t  \} }|jtdddd |jtdd ddd |jtddd	d
dd |jddd d S )Nr
   -or   r7   r   z:xr*      r@   dZdiamondr9   F)r   Zmarkerfirst)r   r   r<   r   r;   Zonesr!   rt   r.   r.   r/   test_labels_first   s
    r   zlegend_multiple_keys.pngc                  C   s   t  \} }|dddgd\}|dddgd\}|dddgd\}|j||f||f|gd	d
dgd||ftd d||ftd ddid d S )Nr   rS   rL   r   rp   z-xr   z-dztwo keyszpad=0zone key)ndivider   )r   pad)rq   handler_map)r   r   r<   r!   r   )r(   r)   p1p2Zp3r.   r.   r/   test_multiple_keys   s     
r   zrgba_alpha.pngx86_64g{Gz?)r1   Ztolc                  C   sF   t  \} }|jtddd t jdgdd}|jdddd	g d S )
Nr
   r   lwLonglabel that will go awayrd   r:   r   r   r   )r   r   r<   rW   r!   legendPatchset_facecolorr(   r)   rb   r.   r.   r/   test_alpha_rgba   s    r   zrcparam_alpha.pngc               	   C   sb   t  \} }|jtddd tjddid* t jdgdd	}|jd
dddg W 5 Q R X d S )Nr
   r   r   zlegend.framealphag      ?)rcr   rd   r:   r   r   r   )	r   r   r<   rW   mplr   r!   r   r   r   r.   r.   r/   test_alpha_rcparam   s
    r   Zfancyc                   C   s~   t d t jdgd ddd t jtdtdddd	d t jtdtdd
d
dd t jddd
gddddd d S )Nro   r   r
   zo--ZXXr7   r   r@   zXX
XXr   )ZxerrZyerrr   r   rH   rS   T	My legendr   )r   r   rN   shadowtitlerq   )r   subplotr<   r   r   r;   Zerrorbarr!   r.   r.   r.   r/   
test_fancy   s    
     r   
framealphag{Gz?c                  C   s4   t ddd} | }tj| |ddd tjdd d S )Nr   r3   Zmylabelr
   )r   r   r   )r   )r   rs   r   r<   r!   )r*   r+   r.   r.   r/   test_framealpha   s    r   Zscatter_rc3Zscatter_rc1c                  C   s   t   t d} | jtdtddddd | jddd	gd
d dtjd< t   t d} | jtdtddddd | jddd	gd
d d S )Nro   r
   r   r@   Zthreer7   r   rH   r   r   )r   r   r   r   zlegend.scatterpointsone)	r   rr   r   r   r   r;   r!   r   rcParams)r)   r.   r.   r/   test_rc   s    
 

 r   Zlegend_expandc                  C   s   ddg} t t| d\}}td}t|| D ]t\}}|j|d| ddd |jd	|d
}|| |j||d ddd |jd|d
}|| |jd|dd q0dS )zTest expand modeNexpandr   r3   r4   r5   r6   r7   z
upper left)r   moder8   rightz
lower leftrS   )r   r   rN   )	r   r   r|   r   r;   r   r<   r!   Z
add_artist)Zlegend_modesr(   r`   r*   r)   r   l1l2r.   r.   r/   test_legend_expand   s    


r   Zhatchingdefault)r1   stylec               	   C   s  dt jd< t  \} }t j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 jdddd	dd
dd}|| |jdddg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! |d d! |jd"d"d# d S )$N   ztext.kerning_factor)r   r   333333?ZxxzPatch
default color
filled)hatchr   )Q?r   z||rg   zPatch
explicit color
filled)r   	edgecolorr   )r   皙?FzPatch
default color
unfilled)r   fillr   )r   r   zPatch
explicit color
unfilled)r   r   r   r   r   g333333?re   rC   rH   +zPath
default colorr   gQ?g)\(?ZC2zPath
explicit colorg{Gzg?rp   )ZhandlelengthZhandleheight)	r   r   r   Z	Rectanglerm   fill_betweenrI   rJ   r!   )r(   r)   patchr.   r.   r/   test_hatching   s>    




   r   c                  C   sb   t  \} }|td}| |d}|  | jg ks<t|d}|  | d ks^td S )Nr
   test)	r   r   r<   rW   r!   removeZlegendsr~   Z
get_legend)r(   r)   linesrb   r.   r.   r/   test_legend_remove  s    
r   c            	      C   s   t  \} }d}d}dddg}dddg}|j|||d |d d	 |j|||d |d d	 |j|||d
 |d
 d	 |jdd}dd | D }dd |jD }|tt|kst|tt|kstdS )z6Check that the legend handles and labels are reversed.r   zFirst labelzSecond labelzThird label.,r5   r   r7   rS   Treversec                 S   s   g | ]}|  qS r.   get_text).0tr.   r.   r/   
<listcomp>5  s     z:test_reverse_legend_handles_and_labels.<locals>.<listcomp>c                 S   s   g | ]}|  qS r.   
get_marker)r   hr.   r.   r/   r   6  s     N)	r   r   r<   r!   	get_textsr}   listreversedr~   )	r(   r)   r*   r+   r&   markersrb   Zactual_labelsZactual_markersr.   r.   r/   &test_reverse_legend_handles_and_labels)  s    

r   Zpng)
extensionsc                 C   sp   |   }|jdgddd |jdgddd |jdd	 |  }|jdgddd |jdgddd |  d
S )z3Check that the rendered legend entries are reversedr   rofirstr7   rS   ZbxsecondTr   N)r   r<   r!   )fig_testfig_refr)   r.   r.   r/   test_reverse_legend_display;  s    r   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestLegendFunctionc              	   C   sH   t jtddd}td}t   W 5 Q R X |t  |dg d S )Nr
   hello worldr7   matplotlib.legend.Legendr   r<   rW   r   r   r!   assert_called_withgcaselfr   rR   r.   r.   r/   test_legend_no_argsK  s    z&TestLegendFunction.test_legend_no_argsc              	   C   sJ   t td}td}t |dg W 5 Q R X |t  |dg d S )Nr
   r   r   r   r   r.   r.   r/   %test_legend_positional_handles_labelsQ  s    z8TestLegendFunction.test_legend_positional_handles_labelsc              	   C   s6   t td}tjtdd t | W 5 Q R X d S )Nr
   zbut found an Artistrv   )r   r<   rW   ry   raises	TypeErrorr!   )r   r   r.   r.   r/   #test_legend_positional_handles_onlyW  s    z6TestLegendFunction.test_legend_positional_handles_onlyc              	   C   sL   t jtddd}td}t dg W 5 Q R X |t  |dg d S )Nr
   r   r7   r   foobarr   r   r.   r.   r/   "test_legend_positional_labels_only^  s    z5TestLegendFunction.test_legend_positional_labels_onlyc              	   C   sV   t jtddd}td}t j|dgdd W 5 Q R X |jt  |dgdd d S )Nr
   r   r7   r   r   r   r:   r   r   r.   r.   r/   test_legend_three_argsd  s    z)TestLegendFunction.test_legend_three_argsc              	   C   s^   t jtddd}td"}|dgf|_t jddid W 5 Q R X |t  gddi d S )Nr
   r   r7   z,matplotlib.legend._get_legend_handles_labels1rS   )r   )	r   r<   rW   r   r   Zreturn_valuer!   r   r   )r   r   Zhandles_labelsr.   r.   r/   test_legend_handler_mapj  s    
z*TestLegendFunction.test_legend_handler_mapc              	   C   s   t  \}}tddd}|j||dd\}|j|d| dd\}|j|d| d	d\}td
}|j||gd W 5 Q R X ||||gd	dg d S )Nr   r      r*   r7   rS   2xrL   Z3xr   rx   	r   r   r   rs   r<   r   r   r!   r   )r   r(   r)   r*   ln1ln2Zln3rR   r.   r.   r/   test_legend_kwargs_handles_onlyr  s    z2TestLegendFunction.test_legend_kwargs_handles_onlyc              	   C   sz   t  \}}tddd}|||\}||d| \}td}|jddgd W 5 Q R X ||||gddg d S )	Nr   r   r   rS   r   r*   r   r&   r   )r   r(   r)   r*   r   r   rR   r.   r.   r/   test_legend_kwargs_labels_only|  s    z1TestLegendFunction.test_legend_kwargs_labels_onlyc              	   C   s   t  \}}tddtj d}|j|t|dd\}|j|t|dd\}t	d}|j
d||fd	 W 5 Q R X ||||fd d S )
Nr   rS      sinr7   cosr   r   r   )r&   r-   )r   r   r   rs   pir<   r   r   r   r   r!   r   )r   r(   r)   thlnslncrR   r.   r.   r/   !test_legend_kwargs_handles_labels  s    z4TestLegendFunction.test_legend_kwargs_handles_labelsc              	   C   s   t  \}}tddtj d}|j|t|dd\}|j|t|dd\}t	t
}|j||fdd W 5 Q R X t|d	kstt|d jd
kstd S )Nr   rS   r   r   r7   r   r   r   r   MYou have mixed positional and keyword arguments, some input may be discarded.)r   r   r   rs   r   r<   r   r   ry   rz   r{   r!   r|   r~   strmessage)r   r(   r)   r   r   r   recordr.   r.   r/   test_warn_mixed_args_and_kwargs  s    z2TestLegendFunction.test_warn_mixed_args_and_kwargsc              	   C   s   ddl m} |d}| }|jdddgdddgdd\}|jdddgdddgd	d\}td
}t  W 5 Q R X ||||gdd	g d S )Nr   )host_subploto   r   rS   ZDensityr7   rL   ZTemperaturer   )	Zmpl_toolkits.axes_grid1r   Ztwinxr<   r   r   r   r!   r   )r   r   hostparr   r   rR   r.   r.   r/   test_parasite  s    z TestLegendFunction.test_parasiteN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r   I  s   
	
r   c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )TestLegendFigureFunctionc              	   C   sX   t  \}}|td}td}||dg W 5 Q R X |j||dg|jd d S )Nr
   r   r   bbox_transform	r   r   r<   rW   r   r   r!   r   transFigurer   r(   r)   r   rR   r.   r.   r/   test_legend_handle_label  s    z1TestLegendFigureFunction.test_legend_handle_labelc              	   C   sV   t  \}}|jtddd}td}|  W 5 Q R X |j||dg|jd d S )Nr
   r   r7   r   r   r  r  r.   r.   r/   r     s    z,TestLegendFigureFunction.test_legend_no_argsc              	   C   sV   t  \}}|td}td}|dg W 5 Q R X |j||dg|jd d S )Nr
   r   r   r   r  r  r.   r.   r/   test_legend_label_arg  s    z.TestLegendFigureFunction.test_legend_label_argc              	   C   s\   t  \}}|td}td}||dgd W 5 Q R X |j||dgd|jd d S )Nr
   r   r   r   r   r  r  r.   r.   r/   test_legend_label_three_args  s    z5TestLegendFigureFunction.test_legend_label_three_argsc              	   C   sH   t  \}}|td}tt |j|dgddd W 5 Q R X d S )Nr
   r   r   leftr:   )r   r   r<   rW   ry   r   	Exceptionr!   )r   r(   r)   r   r.   r.   r/   #test_legend_label_three_args_pluskw  s    z<TestLegendFigureFunction.test_legend_label_three_args_pluskwc              	   C   s   t dd\}}|d td}|d tdd }td}|jdd||fd	 W 5 Q R X |j	|||fdd|j
d
 d S )Nr   rS   r   r
          @r   r   r   )r   r&   r-   )r   r   )r   r   r<   rW   r   r;   r   r   r!   r   r  )r   r(   r`   r   lines2rR   r.   r.   r/   test_legend_kw_args  s       z,TestLegendFigureFunction.test_legend_kw_argsc              	   C   s   t dd\}}|d td}|d tdd }tt}|j	||fdd W 5 Q R X t
|dksrtt|d jdkstd S )	Nr   rS   r   r
   r
  r   r   r   )r   r   r<   rW   r   r;   ry   rz   r{   r!   r|   r~   r   r   )r   r(   r`   r   r  r   r.   r.   r/   test_warn_args_kwargs  s    z.TestLegendFigureFunction.test_warn_args_kwargsN)
r   r   r   r  r   r  r  r	  r  r  r.   r.   r.   r/   r     s   
r   c                  C   s  dd dD } | dd dD 7 } | dd dD 7 } | dd dD 7 } dd	d
dg}ddd
dg}dd	d
dg}dd	ddg}||||||||||||g}ddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgddddgg}t | D ]v\}}t| tjddd\}	}
|
jtdd d! |	jd"| d#}|	  t|
	 j
||  t|	 j
||  qd S )$Nc                 S   s   g | ]}d | qS )zupper r.   r   posr.   r.   r/   r     s     z.test_figure_legend_outside.<locals>.<listcomp>)r  rd   r   c                 S   s   g | ]}d | qS )zlower r.   r  r.   r.   r/   r     s     c                 S   s   g | ]}d | qS )zleft r.   r  r.   r.   r/   r     s     )lowerrd   upperc                 S   s   g | ]}d | qS )zright r.   r  r.   r.   r/   r     s     gQnX4@gQn;@gl@gE@g Q@glf@gLNb@gE@g      $@g     X@g     `@g     p@g     (u@g     |@i  g     @g     F@g     ؄@g     q@g     s@Tr3   )Zconstrained_layoutdpir
   ZBoo1r7   zoutside r:   )	enumerateprintr   r   r<   rW   r!   Zdraw_without_renderingr   r[   Zextents)ZtodosZupperextZlowerextZleftextZrightextZaxbbZlegbbnntodor(   r`   rb   r.   r.   r/   test_figure_legend_outside  sX          













r  zlegend_stackplot.pngc                  C   sx   t  \} }tddd}d| }d| d }d| d }|j||||dd	d
gd |d |d |jdd dS )z/Test legend for PolyCollection using stackplot.r   r
   rH   r
  r   g      @rS   y1y2y3r   )r   r
   )r   F   r9   r:   N)r   r   r   rs   Z	stackplotrI   rJ   r!   )r(   r)   r*   r  r  r  r.   r.   r/   test_legend_stackplot  s    

r  c                  C   s<   t  \} }t  \}}|tdtd}||d d S )NrL   foo)r   r   rA   rW   r!   )r(   r)   Zfig2Zax2Zbrsr.   r.   r/   test_cross_figure_patch_legend!  s    r  c               
   C   s   t  \} }|jtjgtjgddddd}||gdg t  \} }dD ]B}d}tjd|\}}d	tj| }|j|||||d
dd qJ|  |d d S )Nr5   r   rL   )marker	facecolorr   sr   )redZgreenZbluei  rS   g      i@r   none)r   r!  r   alpha
edgecolorsT)	r   r   r   r   nanr!   r   randZgrid)r(   r)   r   r,   nr*   r+   Zscaler.   r.   r/   test_nanscatter)  s$       r)  c                  C   s   t  \} }|jdddddd |jdddd	dd |  t|g\}}t|d
ks\tt  \} }|jdddddd |jdddd	dd |  t|g\}}t|d
kstd S )NrG   rH   kr5   r   )r,   r  r   r   r   vrS   )r   r   r   r!   mlegendZ_get_legend_handles_labelsr|   r~   )r(   r)   handZlabr.   r.   r/   test_legend_repeatcheckok=  s    r.  znot_covering_scatter.pngc                  C   sh   dddg} t dD ]}tj|g|g| | d qtjdddgdd t d	d
 t d	d
 d S )Nr   r   r   rL   )r,   r  r9   r:   g      g@)rW   r   r   r!   r   rI   rJ   )r'   r(  r.   r.   r/   test_not_covering_scatterL  s    
r/  z"not_covering_scatter_transform.pngc                  C   s^   t  dd} tddd}t|| tjdgdg| t j	 d tj
dd	gd
d d S )Nir   r        r
   )Z	transformr  rA   r9   r:   )mtransformsZAffine2D	translater   rs   r   r<   r   r   Z	transDatar!   )offsetr*   r.   r.   r/   #test_not_covering_scatter_transformX  s
    r5  c                  C   s  ddgddgg} ddgddggd	dgd
dggg}d
dgddggd	dgddggg}t j| ddd}t j|dd}t j|dd	d}t \}}|| || || ||||gdddg}|j\}	}
}t|||f|	|
|fD ]\}}| d |j	kst
qd S )N)r   r   )r   r   )r   333333?)rf   rf   gffffff?rf   re   r   r   r6  rD   z--rL   )
linestylesr   z-.)r7  :Zline1Zline2zline 3r   )mcollectionsZLineCollectionr   r   Zadd_collectionr!   r}   r   Zget_linestylesZ_dash_patternr~   )Zlines1r  Zlines3Zlc1Zlc2Zlc3r(   r)   rb   h1h2h3Zohlhr.   r.   r/   !test_linecollection_scaled_dashesd  s      


r>  c                  C   s.   t  \} }|jtddd |jdd dS )z(Test legend handler with numpoints <= 1.r   r   r7   r   rq   N)r   r   r<   rW   r!   rt   r.   r.   r/   test_handler_numpointsx  s    r@  c               	   C   s   t  \} }|jddddd tt}|  W 5 Q R X t|dksLtt  \}}|	t
jddd t  td |  W 5 Q R X dS )	z2Test that Text artists with labels raise a warningr   textr   )r*   r+   r!  r   r   )r
   r
   errorN)r   r   rA  ry   rz   r{   r!   r|   r~   Z
pcolormeshr   r   uniformwarningscatch_warningssimplefilterr   )r(   r)   r   fr.   r.   r/   test_text_nohandler_warning  s    

rH  c                   C   s   t jg g dd t   dS )z1Test legend when bar chart is empty with a label.r   r7   N)r   rA   r!   r.   r.   r.   r/    test_empty_bar_chart_with_legend  s    rI  c                  C   sD   t  \} }|jtddd |jddd}|  dks@td S )Nr3   r   r7   Tw)r   r   r   )r   r   r<   rW   r!   Z	get_frameZ	get_alphar~   r   r.   r.   r/   test_shadow_framealpha  s    rK  c                  C   sJ   t  \} }|td | }|  dks6t|  rFtd S )Nr
    )	r   r   r<   rW   r!   	get_titler   r~   Zget_visibler   r.   r.   r/   test_legend_title_empty  s
    rN  c                  C   s   t jdd\} }|jtddd | }|| j j}t jdd\} }|jtddd | }|| j j}t	
|d d|kstd S )	Nr3   r  r
   Aardvarkr7      rS   rD   )r   r   r<   rW   r!   r[   rX   Zget_rendererZx0ry   Zapproxr~   )r(   r)   rb   Zx01Zx02r.   r.   r/    test_legend_proper_window_extent  s    rR  c                  C   sP   t jdd\} }|jtddd | }|  }| j  |  |  d S )Nr3   rO  r
   rP  r7   )r   r   r<   rW   r!   rX   rY   r[   )r(   r)   rb   leg2r.   r.   r/   "test_window_extent_cached_renderer  s    
rT  c            	   	   C   s  t td tt t jdddddd W 5 Q R X t jdtdddd} |  	 dksdt
t jdd	d
d\}}|j}|d td |d jddd}|  dkst
|d td |d jddddd}|  dkst
|d td d tjd< |d jdddid}|  tjd ksBt
|d	 td |d	 jdd}|  tjd kst
|d td dtjd< |d jdddid}|  dkst
|d td |d jdd}|  dks t
d S )Nr
   rP     serif)familysize)r   title_fontsizetitle_fontproperties)r   rZ  rS   rL   )r
   r   )rO   r   )r   rY  r   zlegend.title_fontsizerW  z	font.sizer   rp   r   r   )r   r<   rW   ry   r   
ValueErrorr!   r	   rM  get_sizer~   r   rT   Zget_fontsizer   r   )	rb   r(   axesZleg0Zleg1rS  Zleg3Zleg4Zleg5r.   r.   r/   #test_legend_title_fontprop_fontsize  sL     





r_  	alignment)rd   r  r   c                 C   sV   t  \}}|jtddd |jd| d}| d j| ksBt| | ksRtd S )Nr
   r   r7   rP  )r   r`  r   )	r   r   r<   rW   r!   get_childrenr?   r~   get_alignmentr`  r(   r)   rb   r.   r.   r/   test_legend_alignment  s
    rd  c                 C   sZ   t  \}}|jtddd | }||  | d j| ksFt|	 | ksVtd S )Nr
   r   r7   r   )
r   r   r<   rW   r!   Zset_alignmentra  r?   r~   rb  rc  r.   r.   r/   test_legend_set_alignment  s    
re  r,   )r"  r#  )r   r   r   c                 C   s   t  \}}|jtdtdd dd |jtdtdd dd |jtdtdd dd |j| d	}| D ]}tj	|
 | stqd S )
Nr
   r   #1r7   rS   #2rL   #3Z
labelcolor)r   r   r<   r   r;   r!   r   r   r'   
same_color	get_colorr~   r,   r(   r)   rb   rA  r.   r.   r/   test_legend_labelcolor_single  s       rm  c                  C   s   t  \} }|jtdtdd dd |jtdtdd dd |jtdtdd dd |jd	d
dgd}t| d	d
dgD ]\}}tj	
| |stqd S )Nr
   r   rf  r7   rS   rg  rL   rh  r   r   r   ri  r   r   r<   r   r;   r!   r   r   r   r'   rj  rk  r~   r(   r)   rb   rA  r,   r.   r.   r/   test_legend_labelcolor_list  s       rp  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd |jdd}t| dddgD ]\}}tj	
| |stqd S )Nr
   r   rf  r   r   r,   rS   rg  r   rL   rh  r   	linecolorri  rn  ro  r.   r.   r/    test_legend_labelcolor_linecolor  s    """rs  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd |jdd}t| dddgD ]\}}tj	
| |stqd S )Nr
   r   rf  r   r   rS   rg  r   rL   rh  r   rr  ri  r   r   r   r   r;   r!   r   r   r   r'   rj  rk  r~   ro  r.   r.   r/   /test_legend_pathcollection_labelcolor_linecolor#  s    """ru  c                  C   sv   t  \} }tj dddgd}|jtdtdd d|d |jdd	}|	 \}t
j| d
srtd S )Nr   r   r   r
   r   rf  r   rr  ri  black)r   r   r   r   default_rngchoicer   r;   r!   r   r   r'   rj  rk  r~   )r(   r)   r'   rb   rA  r.   r.   r/   8test_legend_pathcollection_labelcolor_linecolor_iterable/  s    "
ry  c                  C   s`   t  \} }|jtdtdtddd |jdd}| \}tj	|
 ds\td S )Nr
   rf  )r   r   rr  ri  rv  )r   r   r   r   r;   r!   r   r   r'   rj  rk  r~   )r(   r)   rb   rA  r.   r.   r/   4test_legend_pathcollection_labelcolor_linecolor_cmap;  s
    $
rz  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd |jdd}t| dddgD ]\}}tj	
| |stqd S )Nr
   r   rf  r   r   markeredgecolorrS   rg  r   rL   rh  r   r|  ri  rn  ro  r.   r.   r/   &test_legend_labelcolor_markeredgecolorF  s    """r}  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd |jdd}t| dddgD ]\}}tj	
| |stqd S )Nr
   r   rf  r   r   r   rS   rg  r   rL   rh  r   r|  ri  rt  ro  r.   r.   r/   5test_legend_pathcollection_labelcolor_markeredgecolorR  s    """r  c                  C   s   t  \} }tj dddgd}|jtdtdd d|d |jdd	}t	|
 d
gD ]\}}tj| |sbtqbd S )Nr   r   r   r
   r   rf  r~  r|  ri  r*  r   r   r   r   rw  rx  r   r;   r!   r   r   r   r'   rj  rk  r~   r(   r)   r'   rb   rA  r,   r.   r.   r/   >test_legend_pathcollection_labelcolor_markeredgecolor_iterable^  s    "r  c                  C   s   t  \} }tjtjd}|jt	dt	ddt	d|dd |j
dd}t| dgD ]\}}tj| |sdtqdd S )Nr
   rf  ZReds)r   r   r   Zcmapr|  ri  r*  r   r   r   cmZviridisr   r   r'  r   r;   r!   r   r   r'   rj  rk  r~   )r(   r)   r%  rb   rA  r,   r.   r.   r/   :test_legend_pathcollection_labelcolor_markeredgecolor_cmapj  s    	r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd |jdd}t| dddgD ]\}}tj	
| |stqd S )Nr
   r   rf  r   r   markerfacecolorrS   rg  r   rL   rh  r   r  ri  rn  ro  r.   r.   r/   &test_legend_labelcolor_markerfacecolor}  s    """r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd |jdd}t| dddgD ]\}}tj	
| |stqd S )Nr
   r   rf  r   r   r   rS   rg  r   rL   rh  r   r  ri  rt  ro  r.   r.   r/   5test_legend_pathcollection_labelcolor_markerfacecolor  s    """r  c                  C   s   t  \} }tj dddgd}|jtdtdd d|d |jdd	}t	|
 d
gD ]\}}tj| |sbtqbd S )Nr   r   r   r
   r   rf  r  r  ri  r*  r  r  r.   r.   r/   >test_legend_pathcollection_labelcolor_markerfacecolor_iterable  s    "r  c                  C   s   t  \} }tjtjd}|jt	dt	ddt	d|d |j
dd}t| dgD ]\}}tj| |sbtqbd S )Nr
   rf  )r   r   r   r  ri  r*  r  )r(   r)   Z
facecolorsrb   rA  r,   r.   r.   r/   8test_legend_pathcollection_labelcolor_markfacecolor_cmap  s    r  c                 C   s   t  \}}|jtdtdd dd |jtdtdd dd |jtdtdd dd | tjd	< | }| D ]}tj	
| | stqd S )
Nr
   r   rf  r7   rS   rg  rL   rh  legend.labelcolor)r   r   r<   r   r;   r   r   r!   r   r'   rj  rk  r~   rl  r.   r.   r/   %test_legend_labelcolor_rcparam_single  s       
r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd dtjd< | }t|	 dddgD ]\}}tj
| |stqd S )Nr
   r   rf  r   rq  rS   rg  r   rL   rh  r   rr  r  r   r   r<   r   r;   r   r   r!   r   r   r'   rj  rk  r~   ro  r.   r.   r/   (test_legend_labelcolor_rcparam_linecolor  s    """
r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd dtjd< | }t|	 dddgD ]\}}tj
| |stqd S )Nr
   r   rf  r   r{  rS   rg  r   rL   rh  r   r|  r  r  ro  r.   r.   r/   .test_legend_labelcolor_rcparam_markeredgecolor  s    """
r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd dtjd< | }t|	 dddgD ]\}}tj
| |stqd S )Nr
   r   rf  r   r{  rS   rg  r   rL   rh  r   Zmecr  r  ro  r.   r.   r/   4test_legend_labelcolor_rcparam_markeredgecolor_short  s    """
r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd dtjd< | }t|	 dddgD ]\}}tj
| |stqd S )Nr
   r   rf  r   r  rS   rg  r   rL   rh  r   r  r  r  ro  r.   r.   r/   .test_legend_labelcolor_rcparam_markerfacecolor  s    """
r  c                  C   s   t  \} }|jtdtdd ddd |jtdtdd ddd |jtdtdd	 d
dd dtjd< | }t|	 dddgD ]\}}tj
| |stqd S )Nr
   r   rf  r   r  rS   rg  r   rL   rh  r   Zmfcr  r  ro  r.   r.   r/   4test_legend_labelcolor_rcparam_markerfacecolor_short  s    """
r  c                  C   sD   t  } |  rt| d |  s*t| d |  r@td S )NTF)r   r!   get_draggabler~   Zset_draggabler!   r.   r.   r/   test_get_set_draggable  s    

r  	draggable)TFc                 C   s>   t  \}}|jtddd |j| d}| | ks:td S )Nr
   Zshabnamsr7   )r  )r   r   r<   rW   r!   r  r~   )r  r(   r)   rb   r.   r.   r/   test_legend_draggable  s    r  c                  C   s   t jdddgdddd\} }}t  }|jD ]}|d q,| d d	 |d  d d	 ksdt| d d	 |d  d d	 kstd S )
Nr   rS   rL   g      ?datar"  )r$  r   r,   rH   r@   )r   rV   r!   r}   	set_alphaget_facecolorr~   get_edgecolor)r*   r(  hhr!   r=  r.   r.   r/   test_alpha_handles  s    
(r  c                 C   sb   dt jd< dt jd< dt jd< t \}}|jdddd	 |jd
d |j  d| jks^t	d S )NrV  zfont.familyzComputer Modernz
font.serifTztext.usetexr   inputr7   r   r[  z Font family ['serif'] not found.)
r   r   r   r   r<   r!   rX   rY   rA  r~   )Zcaplogr(   r)   r.   r.   r/   test_usetex_no_warn  s    



r  c               	   C   s   t  \} }| j  tdD ]}|jtd|d qtddi |	 }W 5 Q R X t
t}| | W 5 Q R X t|dkst|D ]}t|jdkstqd S )Nr1    r7   z
legend.locr9   rS   zGCreating legend with loc="best" can be slow with large amounts of data.)r   r   rX   rY   rW   r<   r   r;   r   r!   ry   rz   r{   draw_artistr|   r~   r   r   )r(   r)   idxr!   recordsr   r.   r.   r/   test_warn_big_data_best_loc*  s    
r  c                  C   sP   t  \} }| j  tdD ]}|jtd|d q|d}| 	| d S )Nr1  r  r7   r9   )
r   r   rX   rY   rW   r<   r   r;   r!   r  )r(   r)   r  r!   r.   r.   r/   (test_no_warn_big_data_when_loc_specified<  s    

r  label_arraylowhigh)r  r  c                 C   sj   dddg}ddgddgddgg}t  \}}|j||| d | }dd	 | D }|d
dgksftd S )Nr   rS   rL   r   rp   rQ   r7   c                 S   s   g | ]}|  qS r.   r   r   entryr.   r.   r/   r   S  s     z;test_plot_multiple_input_multiple_label.<locals>.<listcomp>r  r  )r   r   r<   r!   r   r~   )r  r*   r+   r(   r)   rb   legend_textsr.   r.   r/   'test_plot_multiple_input_multiple_labelE  s    
r  r   r   r   c                 C   sp   dddg}ddgddgddgg}t  \}}|j||| d | }dd	 | D }|t| gd ksltd S )
Nr   rS   rL   r   rp   rQ   r7   c                 S   s   g | ]}|  qS r.   r   r  r.   r.   r/   r   c  s     z9test_plot_multiple_input_single_label.<locals>.<listcomp>)r   r   r<   r!   r   r   r~   )r   r*   r+   r(   r)   rb   r  r.   r.   r/   %test_plot_multiple_input_single_labelW  s    
r  c                 C   sl   dddg}dddg}t  \}}|j||| d | }t| dksLt| d  t| kshtd S )Nr   rS   rL   r   r   r7   r   )	r   r   r<   r!   r|   r   r~   r   r   )r  r*   r+   r(   r)   rb   r.   r.   r/   %test_plot_single_input_multiple_labelg  s    

r  c               	   C   s`   t tL dddg} ddgddgddgg}ddd	g}t \}}|j| ||d
 W 5 Q R X d S )Nr   rS   rL   r   rp   rQ   r  r  Zmediumr7   )ry   r   r\  r   r   r<   )r*   r+   r   r(   r)   r.   r.   r/   3test_plot_multiple_label_incorrect_length_exceptionv  s    

r  c                  C   s@   t  \} }|jdddgdddgdddgdddd	 |  d S )
Nr   r   rS   rL   rp   r   faceZFill)r   r   r   )r   r   r   r!   rt   r.   r.   r/   test_legend_face_edgecolor  s      r  c                  C   sT   t  \} }|jddgddgdd | }|j|ks:t| d j|ksPtd S )Nr   rS   rL   rp   rF   r7   r   )r   r   r<   r!   r^  r~   r   r   r.   r.   r/   test_legend_text_axes  s
    r  c                  C   sn   t  \} }|jddgddgdd tjdgdgddg}|j|dgdd}|d  |jd  ksjtd S )Nr   r   r+  )r  rP  r?  )	r   r   r   mlinesLine2Dr!   r   r}   r~   )r(   r)   r-   rb   r.   r.   r/   test_handlerline2d  s
    r  c                  C   sF   t   } |  }|jddgddgdd |  }|j| ksBtd S )Nr   r   rF   r7   )r   rr   Z
subfiguresr   r<   r!   r~   )Zsubfigr)   rb   r.   r.   r/   test_subfigure_legend  s
    r  c                  C   s   t jddgddgddd} t   d }|d | d d t|  d d d ks`t| d d t|  d d d kstd S )	Nr   r   rS   rL   z#123456r   )r,   r   r   )	r   r   r!   Zget_patchesr  r  tupler~   r  )Zpcr   r.   r.   r/   -test_setting_alpha_keeps_polycollection_color  s
    
,r  c            	      C   s   dddg} t  \}}dd | D }dddg}d	d |D }|||}d
d | D }dd | D }||  kr| ksn t||kstd S )Nr   *r+  c                 S   s"   g | ]}t jd gd gd|dqS )r   None)Zlsr  )r  r  )r   markr.   r.   r/   r     s   z3test_legend_markers_from_line2d.<locals>.<listcomp>r  rA   Zxyzzyc                 S   s   g | ]}|  qS r.   r   r   rF   r.   r.   r/   r     s     c                 S   s   g | ]}|  qS r.   r   r  r.   r.   r/   r     s     c                 S   s   g | ]}|  qS r.   r   )r   rA  r.   r.   r/   r     s     )r   r   r!   	get_linesr   r~   )	_markersr(   r)   r   r&   r   r!   Znew_markersZ
new_labelsr.   r.   r/   test_legend_markers_from_line2d  s    

r  c                 C   s4   ddddddg}d}| j ||d |j ||d	 d S )
Nr   r   r   r   erG  rL   )Zncol)rN   r  )r   r   stringsrN   r.   r.   r/   test_ncol_ncols  s    r  )yr   platformZunittestr   rD  Znumpyr   Znumpy.testingr   ry   Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing._markersr   Zmatplotlib.pyplotZpyplotr   Z
matplotlibr   Zmatplotlib.patchesZpatchesrk   Zmatplotlib.transformsZ
transformsr2  Zmatplotlib.collectionsr9  Zmatplotlib.linesr   r  Zmatplotlib.legend_handlerr   Zmatplotlib.legendr!   r,  r   Zmatplotlib.font_managerr	   r0   r=   rB   rK   rc   rn   ru   r   r   r   machiner   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r)  r.  r/  r5  r>  r@  rH  rI  rK  rN  rR  rT  r_  r  Zparametrizerd  re  rm  rp  rs  ru  ry  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rl   r  intr  r  r  r  r  r  r  r  r  r  r.   r.   r.   r/   <module>   s  
	
	
 


	







 

`@)


	&

	

	
	
	


			