o
    Gf˿                  	   @   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$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! Z0ed"gddd#d$ Z1ed%gde2 d&krd nd'd(d)d* Z3ed+gde2 d&krd nd'd(d,d- Z4ed.gdd/d(d0d1 Z5ed2gde2 d&krd nd3d(d4d5 Z6ed6d7gddd8d9 Z7ed:gddd;d< Z8ed=gdd>d?d@dA Z9dBdC Z:dDdE Z;edFgdGdHdI Z<G dJdK dKZ=G dLdM dMZ>dNdO Z?edPgdQdR Z@dSdT ZAdUdV ZBdWdX ZCedYgdZd[ ZDed\gd]d^ ZEd_d` ZFdadb ZGdcdd ZHdedf ZIedggddhd?didj ZJdkdl ZKdmdn ZLdodp ZMdqdr ZNdsdt ZOdudv ZPe	jQRdwdxdydz ZSe	jQRd{d|d}d~ ZTe	jQRd{ddd ZUe	jQRdwdxdd ZVe	jQRdddd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zde	jQRdddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zke	jQRdddd Zldd Zmedd Zndd Zodd Zpe	jQRdddgdeqddggdd Zre	jQRdddesgddƄ Zte	jQRdddgdeqddggddȄ Zuddʄ Zvdd̄ Zwdd΄ ZxddЄ Zydd҄ ZzddԄ Z{ddք Z|e dd؄ Z}ddڄ Z~dd܄ Zddބ Zdd Zdd Zdd Zdd ZdS )    N)mock)assert_allclose)check_figures_equalimage_comparison)needs_usetex)HandlerTuple)_api
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 q-| \}
}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/   <lib/python3.10/site-packages/matplotlib/tests/test_legend.pytest_legend_ordereddict   s   
r1   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/   r0   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 )r3   r4   Zedgem)alignr-   Nr   r   ZupZdownr:   r;   )r   r   r   r<   barr"   )r)   r*   r+   Zb1Zb2r/   r/   r0   test_legend_auto24   s
   
$rC   Zlegend_auto3c                  C   sV   t  \} }g d}g d}|j||ddd |dd |dd |jdd	 d
S )r3   )?皙?rE   rD   rD   r   )ffffff?rF   皙?rG   r   r   zo-liner8                 ?r:   r;   N)r   r   r=   set_xlimset_ylimr"   )r)   r*   r+   r,   r/   r/   r0   test_legend_auto3>   s   rM   c                  C   s   t jddd\} }g }t|jdD ]2\}}|| |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)rB   stepZ
stepfilledr   r   	   r   Legend)Zbinsr   Zhisttyper:   r;   r      N)r   r   r   flatZ	set_titlehistranger"   canvasdrawappendget_window_extenttransformed	transAxesinvertedr   bounds)r)   axs
leg_bboxesr*   Zhtlegr/   r/   r0   test_legend_auto4J   s   
"
rd   c                  C   s  t jddd\} }g }t|jdD ]h\}}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 ]}|
| qM|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.
    rU   )g333333#@g333333@rO   centerr:   )r   rD   皙?皙?C1)ZxywidthZheightfcr   r   rD   rJ   rE   )rk   )r   r   r   ih  rG   ZC0)rj   rk   z	A segmentr8   r;   N)r   r   r   rV   mpatchesZEllipseZPolygonr   arrayZWedge	add_patchr=   r"   rY   rZ   r[   r\   r]   r^   r_   r   r`   )r)   ra   rb   r*   r   Z_patchrc   r/   r/   r0   test_legend_auto5`   s,   $
ro   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      r6   r   r8   gffffff@u   DéveloppésrA   Z__nolegend__r:   )	numpointsr   )r   figureZadd_subplotr=   r   r<   linspacer"   r)   r*   r/   r/   r0   test_various_labels   s   
rv   c                  C   st   t  \} }|jddgdd\}tjtjdd |j|gd}W d   n1 s*w   Y  t|j	dks8J 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_foor8   zwith an underscorematchr.   N)
r   r   r=   pytestwarnsr   ZMatplotlibDeprecationWarningr"   lenlegend_handles)r)   r*   rH   r"   r/   r/   r0   )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   r8   r   z:xr+      rA   dZdiamondr:   F)r   Zmarkerfirst)r   r   r=   r   r<   Zonesr"   ru   r/   r/   r0   test_labels_first   s
   r   zlegend_multiple_keys.pngc                  C   s   t  \} }|g dd\}|g dd\}|g dd\}|j||f||f|gg dd||ftd d	||ftd d
did d S )Nr   rU   rN   r   rU   rN   rq   z-x)rN   rq   r   z-d)ztwo keyszpad=0zone keyr   )ndivider   )r   Zpad)rr   handler_map)r   r   r=   r"   r   )r)   r*   p1p2Zp3r/   r/   r0   test_multiple_keys   s   
r   zrgba_alpha.pngZx86_64g{Gz?)r2   Ztolc                  C   sB   t  \} }|jtddd t jdgdd}|jg d d S )Nr   r   lwLonglabel that will go awayrf   r;   r   r   r   r   )r   r   r=   rX   r"   legendPatchset_facecolorr)   r*   rc   r/   r/   r0   test_alpha_rgba   s   r   zrcparam_alpha.pngc                  C   st   t  \} }|jtddd tjddid t jdgdd	}|jg d
 W d    d S 1 s3w   Y  d S )Nr   r   r   zlegend.framealphag      ?)Zrcr   rf   r;   r   )	r   r   r=   rX   mplr	   r"   r   r   r   r/   r/   r0   test_alpha_rcparam   s   "r   ZfancyrG   c                   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 )Nrp   r   r   zo--ZXXr8   r   rA   zXX
XXr   )ZxerrZyerrr   r   rJ   rU   T	My legendr   )r   r   rP   shadowtitlerr   )r   subplotr=   r   r   r<   Zerrorbarr"   r/   r/   r/   r0   
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   r4   Zmylabelr   )r   r   r   )r   )r   rt   r   r=   r"   )r+   r,   r/   r/   r0   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 )Nrp   r   r   rA   Zthreer8   r   rJ   r   r   )r   r   r   r   zlegend.scatterpointsone)	r   rs   r   r   r   r<   r"   r   rcParams)r*   r/   r/   r0   test_rc   s   
 

 
r   Zlegend_expandc                  C   s   ddg} t t| d\}}td}t|| D ]:\}}|j|d| ddd |jd	|d
}|| |j||d ddd |jd|d
}|| |jd|dd qdS )zTest expand modeNexpandr   r4   r5   r6   r7   r8   
upper left)r   moder9   right
lower leftrU   )r   r   rP   )	r   r   r|   r   r<   r   r=   r"   
add_artist)Zlegend_modesr)   ra   r+   r*   r   l1l2r/   r/   r0   test_legend_expand   s   


r   Zhatchingdefault)r2   Z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g dg dg dddd |jg dg dg d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||ri   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?r   )rg   rg   rg   )rD   rJ   rD   +zPath
default color)r   gQ?g)\(?ZC2zPath
explicit colorg{Gz皙?rq   )ZhandlelengthZhandleheight)	r   r   r   Z	Rectanglern   fill_betweenrK   rL   r"   )r)   r*   patchr/   r/   r0   test_hatching   s8   




r   c                  C   sb   t  \} }|td}| |d}|  | jg ksJ |d}|  | d u s/J d S )Nr   test)r   r   r=   rX   r"   removeZlegendsZ
get_legend)r)   r*   linesrc   r/   r/   r0   test_legend_remove   s   
r   c            	      C   s   t  \} }d}d}g d}g d}|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sZJ |tt|ksdJ dS )z6Check that the legend handles and labels are reversed.r   )zFirst labelzSecond labelzThird label).,r6   r   r8   rU   Treversec                 S      g | ]}|  qS r/   get_text).0tr/   r/   r0   
<listcomp>7      z:test_reverse_legend_handles_and_labels.<locals>.<listcomp>c                 S   r   r/   
get_marker)r   hr/   r/   r0   r   8  r   N)r   r   r=   r"   	get_textsr}   listreversed)	r)   r*   r+   r,   r'   markersrc   Zactual_labelsZactual_markersr/   r/   r0   &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firstr8   rU   ZbxsecondTr   N)r   r=   r"   )fig_testfig_refr*   r/   r/   r0   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   s\   t jtddd}td}t   W d    n1 sw   Y  |t  |dg d S )Nr   hello worldr8   matplotlib.legend.Legendr   r=   rX   r   r   r"   assert_called_withgcaselfr   rT   r/   r/   r0   test_legend_no_argsM  s
   
z&TestLegendFunction.test_legend_no_argsc                 C   s^   t td}td}t |dg W d    n1 sw   Y  |t  |dg d S )Nr   r   r   r   r   r/   r/   r0   %test_legend_positional_handles_labelsS  s
   z8TestLegendFunction.test_legend_positional_handles_labelsc                 C   sL   t td}tjtdd t | W d    d S 1 sw   Y  d S )Nr   zbut found an Artistrw   )r   r=   rX   rz   raises	TypeErrorr"   )r   r   r/   r/   r0   #test_legend_positional_handles_onlyY  s   "z6TestLegendFunction.test_legend_positional_handles_onlyc                 C   s`   t jtddd}td}t dg W d    n1 sw   Y  |t  |dg d S )Nr   r   r8   r   foobarr   r   r/   r/   r0   "test_legend_positional_labels_only`  s
   z5TestLegendFunction.test_legend_positional_labels_onlyc                 C   sj   t jtddd}td}t j|dgdd W d    n1 s"w   Y  |jt  |dgdd d S )Nr   r   r8   r   r   r   r;   r   r   r/   r/   r0   test_legend_three_argsf  s
   z)TestLegendFunction.test_legend_three_argsc                 C   sr   t jtddd}td}|dgf|_t jddid W d    n1 s'w   Y  |t  gddi d S )Nr   r   r8   z,matplotlib.legend._get_legend_handles_labels1rU   )r   )	r   r=   rX   r   r   Zreturn_valuer"   r   r   )r   r   Zhandles_labelsr/   r/   r0   test_legend_handler_mapl  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 d    n1 sDw   Y  ||||gd	dg d S )Nr   r      r+   r8   rU   2xrN   Z3xr   ry   	r   r   r   rt   r=   r   r   r"   r   )r   r)   r*   r+   ln1ln2Zln3rT   r/   r/   r0   test_legend_kwargs_handles_onlyt  s   z2TestLegendFunction.test_legend_kwargs_handles_onlyc                 C   s   t  \}}tddd}|||\}||d| \}td}|jddgd W d    n1 s5w   Y  ||||gddg d S )	Nr   r   r   rU   r   r+   r   r'   r   )r   r)   r*   r+   r   r   rT   r/   r/   r0   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 d    n1 sAw   Y  ||||fd d S )
Nr   rU      sinr8   cosr   r   r   )r'   r.   )r   r   r   rt   pir=   r   r   r   r   r"   r   )r   r)   r*   thlnslncrT   r/   r/   r0   !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 d    n1 sAw   Y  t|d	ksNJ t|d jd
ksYJ d S )Nr   rU   r   r   r8   r   r   r   r   MYou have mixed positional and keyword arguments, some input may be discarded.)r   r   r   rt   r   r=   r   r   rz   r{   UserWarningr"   r|   strmessage)r   r)   r*   r   r   r   recordr/   r/   r0   test_warn_mixed_args_and_kwargs  s   z2TestLegendFunction.test_warn_mixed_args_and_kwargsc                 C   s   ddl m} |d}| }|jg dg ddd\}|jg dg ddd\}td	}t  W d    n1 s<w   Y  ||||gddg d S )
Nr   )host_subploto   r   r   rU   ZDensityr8   )r   rN   rU   ZTemperaturer   )	Zmpl_toolkits.axes_grid1r   Ztwinxr=   r   r   r   r"   r   )r   r   ZhostZparr   r   rT   r/   r/   r0   test_parasite  s   
z TestLegendFunction.test_parasiteN)__name__
__module____qualname__r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r   K  s    
	
r   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestLegendFigureFunctionc                 C   sl   t  \}}|td}td}||dg W d    n1 s$w   Y  |j||dg|jd d S )Nr   r   r   bbox_transform	r   r   r=   rX   r   r   r"   r   transFigurer   r)   r*   r   rT   r/   r/   r0   test_legend_handle_label  s   
z1TestLegendFigureFunction.test_legend_handle_labelc                 C   sj   t  \}}|jtddd}td}|  W d    n1 s#w   Y  |j||dg|jd d S )Nr   r   r8   r   r  r  r  r/   r/   r0   r     s   

z,TestLegendFigureFunction.test_legend_no_argsc                 C   sj   t  \}}|td}td}|dg W d    n1 s#w   Y  |j||dg|jd d S )Nr   r   r   r  r  r  r/   r/   r0   test_legend_label_arg  s   
z.TestLegendFigureFunction.test_legend_label_argc                 C   s   t  \}}|td}tjtdd ||dgd W d    n1 s'w   Y  tjtdd |j|dgddd W d    d S 1 sIw   Y  d S )Nr   z0-2rw   r   r   leftr;   )r   r   r=   rX   rz   r   r   r"   )r   r)   r*   r   r/   r/   r0   test_legend_label_three_args  s   "z5TestLegendFigureFunction.test_legend_label_three_argsc                 C   s   t dd\}}|d td}|d tdd }td}|jdd||fd	 W d    n1 s7w   Y  |j	|||fdd|j
d
 d S )Nr   rU   r   r          @r   r   r   )r   r'   r.   )r   r  )r   r   r=   rX   r   r<   r   r   r"   r   r  )r   r)   ra   r   lines2rT   r/   r/   r0   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 d    n1 s6w   Y  t
|dksCJ t|d jdksNJ d S )	Nr   rU   r   r   r  r   r   r   )r   r   r=   rX   r   r<   rz   r{   r   r"   r|   r   r   )r   r)   ra   r   r  r   r/   r/   r0   test_warn_args_kwargs  s   z.TestLegendFigureFunction.test_warn_args_kwargsN)	r   r   r  r  r   r	  r  r  r  r/   r/   r/   r0   r    s    
r  c                  C   sN  dd dD } | dd dD 7 } | dd dD 7 } | dd dD 7 } g d}g d	}g d
}g d}||||||||||||g}g dg dg dg dg dg dg dg dg dg dg dg dg}t | D ]:\}}t| tjddd\}	}
|
jtddd |	jd| d}|	  t|
	 j
||  t|	 j
||  qjd S )Nc                 S      g | ]}d | qS )zupper r/   r   posr/   r/   r0   r     r   z.test_figure_legend_outside.<locals>.<listcomp>)r
  rf   r   c                 S   r  )zlower r/   r  r/   r/   r0   r     r   c                 S   r  )zleft r/   r  r/   r/   r0   r     r   )lowerrf   upperc                 S   r  )zright r/   r  r/   r/   r0   r     r   )QnX4@Qn;@l@gE@)r  g Q@r  lf@)gLNb@r  r  r  )r  r  gE@r  )      $@     X@     `@     p@)     (u@r       |@r  )  r       @r  )r  r  r       F@)r  r  r  r!  )     ؄@r  r   r!  )r       q@r       s@)r  r  r   r!  )r"  r#  r   r$  )r"  r  r   r  Tr4   )Zconstrained_layoutdpir   ZBoo1r8   zoutside r;   )	enumerateprintr   r   r=   rX   r"   Zdraw_without_renderingr   r\   Zextents)ZtodosZupperextZlowerextZleftextZrightextZaxbbZlegbbnnZtodor)   ra   rc   r/   r/   r0   test_figure_legend_outside  sN   

r)  zlegend_stackplot.pngc                  C   sv   t  \} }tddd}d| }d| d }d| d }|j||||g dd	 |d
 |d |jdd dS )z/Test legend for PolyCollection using stackplot.r   r   rJ   r  r   g      @rU   )y1y2y3r   )r   r   )r   F   r:   r;   N)r   r   r   rt   Z	stackplotrK   rL   r"   )r)   r*   r+   r*  r+  r,  r/   r/   r0   test_legend_stackplot  s   

r.  c                  C   s<   t  \} }t  \}}|tdtd}||d d S )NrN   foo)r   r   rB   rX   r"   )r)   r*   Zfig2Zax2Zbrsr/   r/   r0   test_cross_figure_patch_legend  s   r0  c               
   C   s   t  \} }|jtjgtjgddddd}||gdg t  \} }dD ]!}d}tjd|\}}d	tj| }|j|||||d
dd q%|  |d d S )Nr6   r   rN   )marker	facecolorr   sr   )redZgreenZbluei  rU   g      i@r   none)r   r3  r   alpha
edgecolorsT)	r   r   r   r   nanr"   r   randZgrid)r)   r*   r   r-   nr+   r,   Zscaler/   r/   r0   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.J t  \} }|jdddddd |jdddd	dd |  t|g\}}t|d
ks\J d S )NrI   rJ   kr6   r   )r-   r1  r   r   r   vrU   )r   r   r   r"   mlegendZ_get_legend_handles_labelsr|   )r)   r*   ZhandZlabr/   r/   r0   test_legend_repeatcheckok7  s   r?  znot_covering_scatter.pngc                  C   sd   g d} t dD ]}tj|g|g| | d qtjg ddd t dd t dd d S )	N)r   r   r   rN   )r-   )r/  r/  r/  r:   r;   g      皙@)rX   r   r   r"   r   rK   rL   )r(   r:  r/   r/   r0   test_not_covering_scatterF  s   rA  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/  rB   r:   r;   )mtransformsZAffine2D	translater   rt   r   r=   r   r   Z	transDatar"   )offsetr+   r/   r/   r0   #test_not_covering_scatter_transformR  s
   rG  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g d}|j\}	}
}t|||f|	|
|fD ]\}}| d |j	ksJ qpd S )N)r   r   )r   r   )r   333333?)rh   rh   gffffff?rh   rg   r   r   rH  rE   z--rN   )
linestylesr   z-.)rI  :)Zline1Zline2zline 3r   )
mcollectionsZLineCollectionr   r   Zadd_collectionr"   r}   r   Zget_linestylesZ_dash_pattern)Zlines1r  Zlines3Zlc1Zlc2Zlc3r)   r*   rc   Zh1Zh2Zh3Zohlhr/   r/   r0   !test_linecollection_scaled_dashes^  s     


rM  c                  C   s.   t  \} }|jtddd |jdd dS )z(Test legend handler with numpoints <= 1.r   r   r8   r   rr   N)r   r   r=   rX   r"   ru   r/   r/   r0   test_handler_numpointsr  s   rO  c                  C   s   t  \} }|jddddd tt}|  W d   n1 s#w   Y  t|dks0J t  \}}|t	j
ddd t  td |  W d   dS 1 sZw   Y  dS )	z2Test that Text artists with labels raise a warningr   textr   )r+   r,   r3  r   Nr   )r   r   error)r   r   rP  rz   r{   r   r"   r|   Z
pcolormeshr   r   Zuniformwarningscatch_warningssimplefilterr   )r)   r*   r   fr/   r/   r0   test_text_nohandler_warningz  s   



"rV  c                   C   s   t jg g dd t   dS )z1Test legend when bar chart is empty with a label.r   r8   N)r   rB   r"   r/   r/   r/   r0    test_empty_bar_chart_with_legend  s   rW  zshadow_argument_types.pngZmpl20c               	   C   s   t  \} }|jg ddd |jddd|jddd|jd	d
ddd|jddddd|jdddddf}|D ]}|| q:|jdd d S )Nr   r   r8   r   Tr   r   upper rightFr   r4  rE   )r-   r6  center right)rE   rh   r   )r-   Zoyr   ztab:cyanr   )r-   Zoxlower rightr;   )r   r   r=   r"   r   )r)   r*   Zlegslr/   r/   r0   test_shadow_argument_types  s"   	r^  c                  C   s`   t  \} }|jg ddd tjtdd |jddd W d    d S 1 s)w   Y  d S )	Nr   r   r8   zdict or boolrw   r   ZaardvarkrX  )r   r   r=   rz   r   
ValueErrorr"   ru   r/   r/   r0   test_shadow_invalid_argument  s
   "r`  c                  C   sD   t  \} }|jtddd |jddd}|  dks J d S )Nr4   r   r8   Tw)r   r2  r   )r   r   r=   rX   r"   Z	get_frameZ	get_alphar   r/   r/   r0   test_shadow_framealpha  s   rb  c                  C   sJ   t  \} }|td | }|  dksJ |  r#J d S )Nr    )r   r   r=   rX   r"   	get_titler   Zget_visibler   r/   r/   r0   test_legend_title_empty  s
   re  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sHJ d S )	Nr4   r%  r   Aardvarkr8      rU   rE   )r   r   r=   rX   r"   r\   rY   Zget_rendererZx0rz   Zapprox)r)   r*   rc   Zx01Zx02r/   r/   r0    test_legend_proper_window_extent  s   ri  c                  C   sP   t jdd\} }|jtddd | }|  }| j  |  |  d S )Nr4   rf  r   rg  r8   )r   r   r=   rX   r"   rY   rZ   r\   )r)   r*   rc   leg2r/   r/   r0   "test_window_extent_cached_renderer  s   
rk  c            	      C   s  t td tt t jdddddd W d    n1 s"w   Y  t jdtdddd} |  	 dks<J t j
dd	d
d\}}|j}|d td |d jddd}|  dkseJ |d td |d jddddd}|  dksJ |d td d tjd< |d jdddid}|  tjd ksJ |d	 td |d	 jdd}|  tjd ksJ |d td dtjd< |d jdddid}|  dksJ |d td |d jdd}|  dksJ d S )Nr   rg     serif)familysize)r   title_fontsizetitle_fontproperties)r   rq  rU   rN   )r   r   )rQ   r   )r   rp  r   zlegend.title_fontsizern  z	font.sizer   rq   r   r   )r   r=   rX   rz   r   r_  r"   r
   rd  Zget_sizer   rV   Zget_fontsizer   r   )	rc   r)   axesZleg0Zleg1rj  Zleg3Zleg4Zleg5r/   r/   r0   #test_legend_title_fontprop_fontsize  sL   





rt  	alignment)rf   r
  r   c                 C   sV   t  \}}|jtddd |jd| d}| d j| ks!J | | ks)J d S )Nr   r   r8   rg  )r   ru  r   )r   r   r=   rX   r"   get_childrenr@   get_alignmentru  r)   r*   rc   r/   r/   r0   test_legend_alignment  s
   ry  r   re   c                 C   sL   t  \}}|jtddd | }||  | tjj	|  ks$J d S )Nr   r   r8   )
r   r   r=   rX   r"   set_loc_get_locr>  rT   codesr   r)   r*   rc   r/   r/   r0   test_ax_legend_set_loc  s
   
r~  )zoutside rightr   c                 C   sf   t  \}}|jtddd | }||  | dr#|  d n| } | t	j
j|  ks1J d S )Nr   r   r8   Zoutsider   )r   r   r=   rX   r"   rz  
startswithsplitr{  r>  rT   r|  r}  r/   r/   r0   test_fig_legend_set_loc  s   
r  c                 C   sZ   t  \}}|jtddd | }||  | d j| ks#J | | ks+J d S )Nr   r   r8   r   )	r   r   r=   rX   r"   Zset_alignmentrv  r@   rw  rx  r/   r/   r0   test_legend_set_alignment"  s   
r  r-   )r4  r5  )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	|
 | sMJ q@d S )
Nr   r   #1r8   rU   #2rN   #3Z
labelcolor)r   r   r=   r   r<   r"   r   r   r(   
same_color	get_colorr-   r)   r*   rc   rP  r/   r/   r0   test_legend_labelcolor_single,  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 |jg d	d
}t| g d	D ]\}}tj	
| |sVJ qGd S )Nr   r   r  r8   rU   r  rN   r  r   r   r   r  r   r   r=   r   r<   r"   r   r   r   r(   r  r  r)   r*   rc   rP  r-   r/   r/   r0   test_legend_labelcolor_list9  s      r  c                  C      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| g dD ]\}}tj	
| |sWJ qHd S )Nr   r   r  r   r   r-   rU   r  r   rN   r  r   	linecolorr  r  r  r  r/   r/   r0    test_legend_labelcolor_linecolorE     """r  c                  C   r  )Nr   r   r  r   r   rU   r  r   rN   r  r   r  r  r  r   r   r   r   r<   r"   r   r   r   r(   r  r  r  r/   r/   r0   /test_legend_pathcollection_labelcolor_linecolorQ  r  r  c                  C   st   t  \} }tj g dd}|jtdtdd d|d |jdd}|	 \}t
j| ds8J d S )	Nr  r   r   r  r   r  r  black)r   r   r   r   default_rngchoicer   r<   r"   r   r   r(   r  r  )r)   r*   r(   rc   rP  r/   r/   r0   8test_legend_pathcollection_labelcolor_linecolor_iterable]  s   "
r  c                  C   s`   t  \} }|jtdtdtddd |jdd}| \}tj	|
 ds.J d S )Nr   r  )r   r   r  r  r  )r   r   r   r   r<   r"   r   r   r(   r  r  )r)   r*   rc   rP  r/   r/   r0   4test_legend_pathcollection_labelcolor_linecolor_cmapi  s
   $
r  c                  C   r  )Nr   r   r  r   r   markeredgecolorrU   r  r   rN   r  r   r  r  r  r  r  r/   r/   r0   &test_legend_labelcolor_markeredgecolort  r  r  c                  C   r  )Nr   r   r  r   r   r   rU   r  r   rN   r  r   r  r  r  r  r  r/   r/   r0   5test_legend_pathcollection_labelcolor_markeredgecolor  r  r  c                  C      t  \} }tj g dd}|jtdtdd d|d |jdd}t	|
 dgD ]\}}tj| |s?J q0d S )	Nr  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(   rc   rP  r-   r/   r/   r0   >test_legend_pathcollection_labelcolor_markeredgecolor_iterable     "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| |sAJ q2d S )Nr   r  ZReds)r   r   r   Zcmapr  r  r<  r   r   r   cmZviridisr   r   r9  r   r<   r"   r   r   r(   r  r  )r)   r*   r7  rc   rP  r-   r/   r/   r0   :test_legend_pathcollection_labelcolor_markeredgecolor_cmap  s   	r  c                  C   r  )Nr   r   r  r   r   markerfacecolorrU   r  r   rN   r  r   r  r  r  r  r  r/   r/   r0   &test_legend_labelcolor_markerfacecolor  r  r  c                  C   r  )Nr   r   r  r   r   r2  rU   r  r   rN   r  r   r  r  r  r  r  r/   r/   r0   5test_legend_pathcollection_labelcolor_markerfacecolor  r  r  c                  C   r  )	Nr  r   r   r  r  r  r  r<  r  r  r/   r/   r0   >test_legend_pathcollection_labelcolor_markerfacecolor_iterable  r  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| |s@J q1d S )Nr   r  )r   r   r2  r  r  r<  r  )r)   r*   Z
facecolorsrc   rP  r-   r/   r/   r0   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	
| | sPJ qCd S )
Nr   r   r  r8   rU   r  rN   r  legend.labelcolor)r   r   r=   r   r<   r   r   r"   r   r(   r  r  r  r/   r/   r0   %test_legend_labelcolor_rcparam_single  s      
r  c                  C      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|	 g dD ]\}}tj
| |sZJ qKd S )Nr   r   r  r   r  rU   r  r   rN   r  r   r  r  r  r   r   r=   r   r<   r   r   r"   r   r   r(   r  r  r  r/   r/   r0   (test_legend_labelcolor_rcparam_linecolor     """
r  c                  C   r  )Nr   r   r  r   r  rU   r  r   rN   r  r   r  r  r  r  r  r/   r/   r0   .test_legend_labelcolor_rcparam_markeredgecolor  r  r  c                  C   r  )Nr   r   r  r   r  rU   r  r   rN   r  r   Zmecr  r  r  r  r/   r/   r0   4test_legend_labelcolor_rcparam_markeredgecolor_short	  r  r  c                  C   r  )Nr   r   r  r   r  rU   r  r   rN   r  r   r  r  r  r  r  r/   r/   r0   .test_legend_labelcolor_rcparam_markerfacecolor  r  r  c                  C   r  )Nr   r   r  r   r  rU   r  r   rN   r  r   Zmfcr  r  r  r  r/   r/   r0   4test_legend_labelcolor_rcparam_markerfacecolor_short#  r  r  c                  C   sD   t  } |  r
J | d |  sJ | d |  r J d S )NTF)r   r"   get_draggableZset_draggabler"   r/   r/   r0   test_get_set_draggable0  s   

r  	draggable)TFc                 C   s>   t  \}}|jtddd |j| d}| | u sJ d S )Nr   Zshabnamsr8   )r  )r   r   r=   rX   r"   r  )r  r)   r*   rc   r/   r/   r0   test_legend_draggable9  s   r  c                  C   s   t jg ddddd\} }}t  }|jD ]}|d q| d d |d  d d ks1J | d d |d  d d ksEJ d S )	Nr   g      ?datar4  )r6  r   r-   rJ   rA   r   )r   rW   r"   r}   	set_alphaget_facecolorget_edgecolor)r+   r:  Zhhr"   rL  r/   r/   r0   test_alpha_handlesA  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vs/J d S )Nrm  zfont.familyzComputer Modernz
font.serifTztext.usetexr   inputr8   r   rr  z Font family ['serif'] not found.)	r   r   r   r   r=   r"   rY   rZ   rP  )Zcaplogr)   r*   r/   r/   r0   test_usetex_no_warnJ  s   



r  c                  C   s   t  \} }| j  tdD ]}|jtd|d qtddi |	 }W d    n1 s1w   Y  t
t}| | W d    n1 sKw   Y  t|dksXJ |D ]}t|jdkseJ qZd S )NrC    r8   z
legend.locr:   rU   zGCreating legend with loc="best" can be slow with large amounts of data.)r   r   rY   rZ   rX   r=   r   r<   r	   r"   rz   r{   r   draw_artistr|   r   r   )r)   r*   idxr"   Zrecordsr   r/   r/   r0   test_warn_big_data_best_locX  s    


r  c                  C   sP   t  \} }| j  tdD ]}|jtd|d q|d}| 	| d S )NrC  r  r8   r:   )
r   r   rY   rZ   rX   r=   r   r<   r"   r  )r)   r*   r  r"   r/   r/   r0   (test_no_warn_big_data_when_loc_specifiedj  s   

r  label_arraylowhigh)r  r  c                 C   sh   g d}ddgddgddgg}t  \}}|j||| d | }dd	 | D }|d
dgks2J d S )Nr   r   rU   r   rq   rS   r8   c                 S   r   r/   r   r   entryr/   r/   r0   r     r   z;test_plot_multiple_input_multiple_label.<locals>.<listcomp>r  r  )r   r   r=   r"   r   )r  r+   r,   r)   r*   rc   legend_textsr/   r/   r0   'test_plot_multiple_input_multiple_labels  s   r  r   r   r   c                 C   sn   g d}ddgddgddgg}t  \}}|j||| d | }dd	 | D }|t| gd ks5J d S )
Nr   r   rU   r   rq   rS   r8   c                 S   r   r/   r   r  r/   r/   r0   r     r   z9test_plot_multiple_input_single_label.<locals>.<listcomp>)r   r   r=   r"   r   r   )r   r+   r,   r)   r*   rc   r  r/   r/   r0   %test_plot_multiple_input_single_label  s   r  c                 C   sh   g d}g d}t  \}}|j||| d | }t| dks$J | d  t| ks2J d S )Nr   )rU   r   r   r8   r   r   )r   r   r=   r"   r|   r   r   r   )r  r+   r,   r)   r*   rc   r/   r/   r0   %test_plot_single_input_multiple_label  s    r  c                  C   sr   t t* g d} ddgddgddgg}g d}t \}}|j| ||d W d    d S 1 s2w   Y  d S )	Nr   r   rU   r   rq   rS   )r  r  Zmediumr8   )rz   r   r_  r   r   r=   )r+   r,   r   r)   r*   r/   r/   r0   3test_plot_multiple_label_incorrect_length_exception  s   "r  c                  C   s:   t  \} }|jg dg dg ddddd |  d S )Nr   r   r   r   ZfaceZFill)r2  r   r   )r   r   r   r"   ru   r/   r/   r0   test_legend_face_edgecolor  s
   r  c                  C   sT   t  \} }|jddgddgdd | }|j|u sJ | d j|u s(J d S )Nr   rU   rN   rq   rH   r8   r   )r   r   r=   r"   rs  r   r   r/   r/   r0   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s5J d S )Nr   r   r=  )r1  rg  rN  )r   r   r   mlinesLine2Dr"   r   r}   )r)   r*   r.   rc   r/   r/   r0   test_handlerline2d  s
   "r  c                  C   sF   t   } |  }|jddgddgdd |  }|j| u s!J d S )Nr   r   rH   r8   )r   rs   Z
subfiguresr   r=   r"   )Zsubfigr*   rc   r/   r/   r0   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s0J | d d t|  d d d ksFJ d S )	Nr   r   rU   rN   z#123456r   )r-   r   r   )r   r   r"   Zget_patchesr  r  tupler  )Zpcr   r/   r/   r0   -test_setting_alpha_keeps_polycollection_color  s
   
,0r  c            	      C   s   g d} t  \}}dd | D }g d}dd |D }|||}dd | D }dd | D }||  kr?| ksBJ  J ||ksHJ d S )N)r   *r=  c                 S   s"   g | ]}t jd gd gd|dqS )r   None)Zlsr1  )r  r  )r   markr/   r/   r0   r     s    z3test_legend_markers_from_line2d.<locals>.<listcomp>)r/  rB   Zxyzzyc                 S   r   r/   r   r   rH   r/   r/   r0   r     r   c                 S   r   r/   r   r  r/   r/   r0   r     r   c                 S   r   r/   r   )r   rP  r/   r/   r0   r     r   )r   r   r"   	get_linesr   )	Z_markersr)   r*   r   r'   r   r"   Znew_markersZ
new_labelsr/   r/   r0   test_legend_markers_from_line2d  s   r  c                 C   s,   g d}d}| j ||d |j ||d d S )N)r   r   r   r   erU  rN   )Zncol)rP   r  )r   r   stringsrP   r/   r/   r0   test_ncol_ncols  s   r  c                  C   s   t  \} }tjtdd |jdd W d    n1 sw   Y  tjtdd |jdd W d    n1 s;w   Y  tjtdd |jdd W d    d S 1 sYw   Y  d S )	NzFloc must be string, coordinate tuple, or an integer 0-10, not \(1.1,\)rw   )r   r;   zWloc must be string, coordinate tuple, or an integer 0-10, not \(0.481, 0.4227, 0.4523\))bX9?g:M?gm{?zRloc must be string, coordinate tuple, or an integer 0-10, not \(0.481, 'go blue'\))r  zgo bluer   r   rz   r   r_  r"   ru   r/   r/   r0    test_loc_invalid_tuple_exception  s   "r  c                  C   s(   t  \} }|jdd |jdd d S )N)r  }?5^I?r;   )r   rU   r   r   r"   ru   r/   r/   r0   test_loc_valid_tuple  s   r  c                  C   s0   t  \} }|jddgd |jddgd d S )Nr  r  r;   r   rU   r  ru   r/   r/   r0   test_loc_valid_list  s   r  c                  C   sP   t  \} }tjtdd |jg dd W d    d S 1 s!w   Y  d S )NzOloc must be string, coordinate tuple, or an integer 0-10, not \[1.1, 2.2, 3.3\]rw   )r   r@  gffffff
@r;   r  ru   r/   r/   r0   test_loc_invalid_list_exception     "r  c                  C   sP   t  \} }tjtdd |jddid W d    d S 1 s!w   Y  d S )NzKloc must be string, coordinate tuple, or an integer 0-10, not {'not': True}rw   notTr;   r  ru   r/   r/   r0   test_loc_invalid_type  r  r  c                  C   s   t  \} }|jdd |jdd |jdd |jdd tjtdd |jdd W d    n1 s6w   Y  tjtd	d |jd
d W d    d S 1 sTw   Y  d S )Nr   r;   r   r   r   z@loc must be string, coordinate tuple, or an integer 0-10, not 11rw   r   z@loc must be string, coordinate tuple, or an integer 0-10, not -1rA   r   r   r"   rz   r   r_  ru   r/   r/   r0   !test_loc_validation_numeric_value!  s   "r  c                  C   s   t  \} }|jdd |jdd |jdd |jdd |jdd |jdd |jdd |jdd |jdd |jd	d |jd
d |jdd tjtdd |jdd W d    d S 1 sgw   Y  d S )Nr:   r;   rY  r   r   r\  r   r   rZ  zlower centerzupper centerz 'wrong' is not a valid value forrw   Zwrongr  ru   r/   r/   r0    test_loc_validation_string_value0  s    "r  )r    platformZunittestr   rR  Znumpyr   Znumpy.testingr   rz   Zmatplotlib.testing.decoratorsr   r   Zmatplotlib.testing._markersr   Zmatplotlib.pyplotZpyplotr   Z
matplotlibr   Zmatplotlib.patchesZpatchesrl   Zmatplotlib.transformsZ
transformsrD  Zmatplotlib.collectionsrK  Zmatplotlib.linesr   r  Zmatplotlib.legend_handlerr   Zmatplotlib.legendr"   r>  r   r	   Zmatplotlib.font_managerr
   r1   r>   rC   rM   rd   ro   rv   r~   r   r   machiner   r   r   r   r   r   r   r   r   r   r   r  r)  r.  r0  r;  r?  rA  rG  rM  rO  rV  rW  r^  r`  rb  re  ri  rk  rt  r  Zparametrizery  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  rm   r  intr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/   r/   r/   r0   <module>   s.   
	
	
 


	







!

`8)



		&




	

	
	
	


			
