o
    h                  	   @   sL  d dl Z d dl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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 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e1 dkrd nd'd d(d) Z4ed*gde1 dkrd nd'd d+d, Z5ed-gdd.d d/d0 Z6ed1gde1 dkrd nd2d d3d4 Z7ed5d6gddd7d8 Z8ed9gddd:d; Z9ed<gdd=d>d?d@ Z:dAdB Z;dCdD Z<edEgdFdGdH Z=G dIdJ dJZ>G dKdL dLZ?dMdN Z@edOge1 dkrnd ndPdQdRdS ZAdTdU ZBdVdW ZCdXdY ZDedZgd[d\ ZEed]gd^d_ ZFd`da ZGdbdc ZHddde ZIdfdg ZJedhgddie1 dkrd ndjdkdldm ZKdndo ZLdpdq ZMdrds ZNdtdu ZOdvdw ZPdxdy ZQejRSdzd{d|d} ZTejRSd~ddd ZUejRSd~ddd ZVejRSdzd{dd ZWejRSdddd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd ZeejRSdddd Zfdd Zgdd Zhdd Zidd Zjdd ZkejRlddd ZmejRSdddd Zndd Zoedd Zpdd Zqdd ZrejRSdddgde	sddggddń ZtejRSdddeugddʄ ZvejRSdddgde	sddggdd̄ Zwdd΄ ZxddЄ Zydd҄ ZzddԄ Z{ddք Z|dd؄ Z}ddڄ Z~dd܄ Ze ddބ Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZejRlddd Zdd Zdd Zdd Zdd Zd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 q-| \}
}t	t||
}|j
| | dd	d
 d S )N
   a   brglabelccenter left)         ?)locbbox_to_anchor)nprandom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/   p/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/matplotlib/tests/test_legend.pytest_legend_ordereddict   s   
r1   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?   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 )r4   r5   edgem)alignr-   Nr   r   updownr;   r<   )r   r   r   r=   barr"   )r)   r*   r+   b1b2r/   r/   r0   test_legend_auto27   s
   
$rJ   legend_auto3c                  C   sV   t  \} }g d}g d}|j||ddd |dd |dd |jdd	 d
S )r4   ?皙?rN   rM   rM   r   ffffff?rP   皙?rQ   r   r   o-liner9                 ?r;   r<   N)r   r   r>   set_xlimset_ylimr"   )r)   r*   r+   r,   r/   r/   r0   test_legend_auto3A   s   rX   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)rG   step
stepfilledr   r   	   r
   Legend)binsr   histtyper;   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*   htlegr/   r/   r0   test_legend_auto4M   s   
"
rt   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.
    rc   )g333333#@g333333@rZ   centerr;   )r   rM   皙?皙?C1)xywidthheightfcr   r   rM   rU   rN   )r}   )r   r   r   ih  rQ   C0)r{   r}   z	A segmentr9   r<   N)r   r   r   rd   mpatchesEllipsePolygonr   arrayWedge	add_patchr>   r"   rh   ri   rj   rk   rl   rm   rn   r   ro   )r)   rp   rq   r*   r   _patchrs   r/   r/   r0   test_legend_auto5c   s,   $
r   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      r7   r   r9   gffffff@u   DéveloppésrD   __nolegend__r;   )	numpointsr   )r   figureadd_subplotr>   r   r=   linspacer"   r)   r*   r/   r/   r0   test_various_labels   s   
r   zlegend_labels_first.pngx86_64g9v?)r3   tolc                  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   r9   r   z:xr+      rD   ddiamondr;   F)r   markerfirst)r   r   r>   r   r=   onesr"   r   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   rc   rY   r   rc   rY   r   z-xrY   r   r   z-d)ztwo keyszpad=0zone keyr   )ndivider   )r   pad)r   handler_map)r   r   r>   r"   r   )r)   r*   p1p2p3r/   r/   r0   test_multiple_keys   s   
r   zrgba_alpha.pnggQ?c                  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 awayrv   r<   r   r   r   r   )r   r   r>   rg   r"   legendPatchset_facecolorr)   r*   rs   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      ?)rcr   rv   r<   r   )	r   r   r>   rg   mplr   r"   r   r   r   r/   r/   r0   test_alpha_rcparam   s   "r   fancyrQ   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 )Nr   r   r
   zo--XXr9   r   rD   zXX
XXr   )xerryerrr   r   rU   rc   T	My legendr   )r   r   r[   shadowtitler   )r   subplotr>   r   r   r=   errorbarr"   r/   r/   r/   r0   
test_fancy   s   
 
r   
framealphag~jt?c                  C   s4   t ddd} | }tj| |ddd tjdd d S )Nr   r5   mylabelr
   )r   r   r   )r   )r   r   r   r>   r"   )r+   r,   r/   r/   r0   test_framealpha   s   r   scatter_rc3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 )Nr   r
   r   rD   threer9   r   rU   r   r   )r   r   r   r   zlegend.scatterpointsone)	r   r   r   r   r   r=   r"   r   rcParams)r*   r/   r/   r0   test_rc   s   
 

 
r   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   r5   r6   r7   r8   r9   
upper left)r   moder:   right
lower leftrc   )r   r   r[   )	r   r   lenr   r=   r   r>   r"   
add_artist)legend_modesr)   rp   r+   r*   r   l1l2r/   r/   r0   test_legend_expand   s   


r   hatchingdefault)r3   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?xxzPatch
default color
filled)hatchr   )Q?r   z||ry   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   )rw   rw   rw   )rM   rU   rM   +zPath
default color)r   gQ?g)\(?C2zPath
explicit colorg{Gz皙?r   )handlelengthhandleheight)	r   r   r   	Rectangler   fill_betweenrV   rW   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>   rg   r"   removelegends
get_legend)r)   r*   linesrs   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).,r7   r   r9   rc   Treversec                 S      g | ]}|  qS r/   get_text).0tr/   r/   r0   
<listcomp>/      z:test_reverse_legend_handles_and_labels.<locals>.<listcomp>c                 S   r   r/   
get_markerr   hr/   r/   r0   r   0  r   N)r   r   r>   r"   	get_textslegend_handleslistreversed)	r)   r*   r+   r,   r'   markersrs   actual_labelsactual_markersr/   r/   r0   &test_reverse_legend_handles_and_labels#  s   r   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firstr9   rc   bxsecondTr   N)r   r>   r"   )fig_testfig_refr*   r/   r/   r0   test_reverse_legend_display5  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 worldr9   matplotlib.legend.Legendr   r>   rg   r   r   r"   assert_called_withgcaselfr   r`   r/   r/   r0   test_legend_no_argsE  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_labelsK  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 Artistmatch)r   r>   rg   pytestraises	TypeErrorr"   )r  r   r/   r/   r0   #test_legend_positional_handles_onlyQ  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	  r9   r
  foobarr  r  r/   r/   r0   "test_legend_positional_labels_onlyX  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	  r9   r
  r  r   r<   r  r  r/   r/   r0   test_legend_three_args^  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	  r9   z,matplotlib.legend._get_legend_handles_labels1rc   )r   )	r   r>   rg   r   r   return_valuer"   r  r  )r  r   handles_labelsr/   r/   r0   test_legend_handler_mapd  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+   r9   rc   2xrY   3xr
  )r.   	r   r   r   r   r>   r   r   r"   r  )r  r)   r*   r+   ln1ln2ln3r`   r/   r/   r0   test_legend_kwargs_handles_onlyl  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  rc   r
  r+   r   r'   r"  )r  r)   r*   r+   r#  r$  r`   r/   r/   r0   test_legend_kwargs_labels_onlyv  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   rc      sinr9   cosr
  r   r   )r'   r.   )r   r   r   r   pir>   r*  r+  r   r   r"   r  )r  r)   r*   thlnslncr`   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
sZJ d S )Nr   rc   r)  r*  r9   r+  r,  r'  r   MYou have mixed positional and keyword arguments, some input may be discarded.)r   r   r   r   r-  r>   r*  r+  r  warnsDeprecationWarningr"   r   strmessage
startswith)r  r)   r*   r.  r/  r0  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   rc   Densityr9   )r   rY   rc   Temperaturer
  )	mpl_toolkits.axes_grid1r:  twinxr>   r   r   r   r"   r  )r  r:  hostparr   r   r`   r/   r/   r0   test_parasite  s   
z TestLegendFunction.test_parasiteN)__name__
__module____qualname__r  r  r  r  r  r  r&  r(  r1  r9  rC  r/   r/   r/   r0   r  C  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>   rg   r   r   r"   r  transFigurer  r)   r*   r   r`   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	  r9   r
  rH  rJ  rL  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  rH  rJ  rL  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-2r  r  r   leftr<   )r   r   r>   rg   r  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   rc   r   r
          @r
  r   r,  )r   r'   r.   )r   rI  )r   r   r>   rg   r   r=   r   r   r"   r  rK  )r  r)   rp   r   lines2r`   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sOJ d S )	Nr   rc   r   r
   rQ  r,  r'  r2  )r   r   r>   rg   r   r=   r  r3  r4  r"   r   r5  r6  r7  )r  r)   rp   r   rR  r8  r/   r/   r0   test_warn_args_kwargs  s   z.TestLegendFigureFunction.test_warn_args_kwargsN)	rD  rE  rF  rM  r  rN  rP  rS  rT  r/   r/   r/   r0   rG    s    
rG  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>)rO  rv   r   c                 S   rU  )zlower r/   rV  r/   r/   r0   r     r   c                 S   rU  )zleft r/   rV  r/   r/   r0   r     r   )lowerrv   upperc                 S   rU  )zright r/   rV  r/   r/   r0   r     r   )QnX4@Qn;@l@gE@)rZ  g Q@r\  lf@)gLNb@r[  r\  r]  )rZ  r[  gE@r]  )      $@     X@     `@     p@)     (u@r_       |@ra  )  r_       @ra  )r^  r^  r`       F@)rb  r^  rc  rf  )     ؄@r^  re  rf  )r^       q@r`       s@)rd  r^  re  rf  )rg  rh  re  ri  )rg  r_  re  ra  Tr5   )constrained_layoutdpir
   Boo1r9   zoutside r<   )	enumerateprintr   r   r>   rg   r"   draw_without_renderingr   rk   extents)todosupperextlowerextleftextrightextaxbblegbbnntodor)   rp   rs   r/   r/   r0   test_figure_legend_outside  sN   

rz  zlegend_stackplot.pnggX9v?)r   c                  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
   rU   rQ  r   g      @rc   )y1y2y3r'  )r   r
   )r   F   r;   r<   N)r   r   r   r   	stackplotrV   rW   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 )NrY   foo)r   r   rG   rg   r"   )r)   r*   fig2ax2brsr/   r/   r0   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 ]!}d}tjd|\}}d	tj| }|j|||||d
dd q%|  |d d S )Nr7   r   rY   )marker	facecolorr   sr   )redgreenbluei  rc   g      i@r   none)r   r  r   alpha
edgecolorsT)	r   r   r   r   nanr"   r   randgrid)r)   r*   r   r-   nr+   r,   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 )NrT   rU   kr7   r   )r-   r  r   r   r   vrc   )r   r   r   r"   mlegend_get_legend_handles_labelsr   )r)   r*   handlabr/   r/   r0   test_legend_repeatcheckok0  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   rY   )r-   )r  r  r  r;   r<   g      皙@)rg   r   r   r"   r  rV   rW   )r(   r  r/   r/   r0   test_not_covering_scatter?  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      i  r
   )	transformr  rG   r;   r<   )mtransformsAffine2D	translater   r   r   r>   r   r  	transDatar"   )offsetr+   r/   r/   r0   #test_not_covering_scatter_transformK  s
   r  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?)rx   rx   gffffff?rx   rw   r   r   r  rN   z--rY   )
linestylesr   z-.)r  :)line1line2zline 3r   )
mcollectionsLineCollectionr   r   add_collectionr"   r   r   get_linestyles_dash_pattern)lines1rR  lines3lc1lc2lc3r)   r*   rs   h1h2h3ohlhr/   r/   r0   !test_linecollection_scaled_dashesW  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   r9   r   r   N)r   r   r>   rg   r"   r   r/   r/   r0   test_handler_numpointsk  s   r  c                  C   s   t  \} }|jdgdd |jddddd tt}|  W d   n1 s+w   Y  t|dks8J t  \}}|	t
jddd	 t  td
 |  W d   dS 1 sbw   Y  dS )z2Test that Text artists with labels raise a warningr   	mock datar9   textr   )r+   r,   r  r   Nr   )r
   r
   error)r   r   r>   r  r  r3  UserWarningr"   r   
pcolormeshr   r   uniformwarningscatch_warningssimplefilterr   )r)   r*   r8  fr/   r/   r0   test_text_nohandler_warnings  s   



"r  c                   C   s   t jg g dd t   dS )z1Test legend when bar chart is empty with a label.r   r9   N)r   rG   r"   r/   r/   r/   r0    test_empty_bar_chart_with_legend  s   r  zshadow_argument_types.pngmpl20gy&1?)r3   r   r   c               	   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   r9   r   Tr   r   upper rightFr   r  rN   )r-   r  center right)rN   rx   r   )r-   oyr   ztab:cyanr
   )r-   oxlower rightr<   )r   r   r>   r"   r   )r)   r*   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   r9   zdict or boolr  r   aardvarkr  )r   r   r>   r  r  
ValueErrorr"   r   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 )Nr5   r   r9   Tw)r   r  r   )r   r   r>   rg   r"   	get_frame	get_alphar   r/   r/   r0   test_shadow_framealpha  s   r  c                  C   sN   t  \} }|jtddd | }|  dksJ |  r%J d S )Nr
   r  r9    )r   r   r>   rg   r"   	get_titler   get_visibler   r/   r/   r0   test_legend_title_empty  s
   r  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 )	Nr5   rk  r
   Aardvarkr9      rc   rN   )r   r   r>   rg   r"   rk   rh   get_rendererx0r  approx)r)   r*   rs   x01x02r/   r/   r0    test_legend_proper_window_extent  s   r  c                  C   sP   t jdd\} }|jtddd | }|  }| j  |  |  d S )Nr5   r  r
   r  r9   )r   r   r>   rg   r"   rh   ri   rk   )r)   r*   rs   leg2r/   r/   r0   "test_window_extent_cached_renderer  s   
r  c            	      C   s.  t jtdd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 jtddd |d jddd}|  dksiJ |d jtddd |d jddddd	}|  dksJ |d
 jtddd d tjd< |d
 jdddid	}|  tjd ksJ |d jtddd |d jdd}|  tjd ksJ |d jtddd dtjd< |d jdddid	}|  dksJ |d jtddd |d jdd}|  dksJ d S )Nr
   r  r9   r     serif)familysize)r   title_fontsizetitle_fontproperties)r   r  rc   rY   )r
   r   )r\   r   )r   r  r   zlegend.title_fontsizer  z	font.sizer   r   r   r   )r   r>   rg   r  r  r  r"   r	   r  get_sizer   rd   get_fontsizer   r   )	rs   r)   axesleg0leg1r  leg3leg4leg5r/   r/   r0   #test_legend_title_fontprop_fontsize  sL   





r  	alignment)rv   rO  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   r9   r  )r   r  r   )r   r   r>   rg   r"   get_childrenrC   get_alignmentr  r)   r*   rs   r/   r/   r0   test_legend_alignment  s
   r  r   ru   c                 C   sL   t  \}}|jtddd | }||  | tjj	|  ks$J d S )Nr
   r   r9   )
r   r   r>   rg   r"   set_loc_get_locr  r`   codesr   r)   r*   rs   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   r9   outsider   )r   r   r>   rg   r"   r  r7  splitr   r  r`   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   r9   r   )	r   r   r>   rg   r"   set_alignmentr  rC   r  r  r/   r/   r0   test_legend_set_alignment  s   
r  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	|
 | sMJ q@d S )
Nr
   r   #1r9   rc   #2rY   #3
labelcolor)r   r   r>   r   r=   r"   r   r   r(   
same_color	get_colorr-   r)   r*   rs   r  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	  r9   rc   r
  rY   r  r   r   r   r  r   r   r>   r   r=   r"   r   r   r   r(   r  r  r)   r*   rs   r  r-   r/   r/   r0   test_legend_labelcolor_list3  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-   rc   r
  r   rY   r  r   	linecolorr  r  r  r  r/   r/   r0    test_legend_labelcolor_linecolor?     """r  c                  C   r  )Nr
   r   r	  r   r   rc   r
  r   rY   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_linecolorK  r  r  c                  C   sl   t  \} }tg dd }|jtdtdd|d |jdd}| \}tj	
| ds4J d S )	Nr   r   r   r   rB   rc   r
   r	  r   r  r  black)r   r   r   r   r   r=   r"   r   r   r(   r  r  )r)   r*   r(   rs   r  r/   r/   r0   8test_legend_pathcollection_labelcolor_linecolor_iterableW  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*   rs   r  r/   r/   r0   4test_legend_pathcollection_labelcolor_linecolor_cmapc  s
   $
r   c                  C   r  )Nr
   r   r	  r   r   markeredgecolorrc   r
  r   rY   r  r   r"  r  r  r  r  r/   r/   r0   &test_legend_labelcolor_markeredgecolorn  r  r#  c                  C   r  )Nr
   r   r	  r   r   r   rc   r
  r   rY   r  r   r"  r  r  r  r  r/   r/   r0   5test_legend_pathcollection_labelcolor_markeredgecolorz  r  r%  c                  C   |   t  \} }tg dd }|jtdtdd|d |jdd}t| dgD ]\}}t	j
| |s;J q,d S )	Nr  rc   r
   r	  r$  r"  r  r  r   r   r   r   r   r=   r"   r   r   r   r(   r  r  r)   r*   r(   rs   r  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	  Reds)r   r   r   cmapr"  r  r  r   r   r   cmviridisr   r   r  r   r=   r"   r   r   r(   r  r  )r)   r*   r  rs   r  r-   r/   r/   r0   :test_legend_pathcollection_labelcolor_markeredgecolor_cmap  s   	r0  c                  C   r  )Nr
   r   r	  r   r   markerfacecolorrc   r
  r   rY   r  r   r2  r  r  r  r  r/   r/   r0   &test_legend_labelcolor_markerfacecolor  r  r3  c                  C   r  )Nr
   r   r	  r   r   r  rc   r
  r   rY   r  r   r2  r  r  r  r  r/   r/   r0   5test_legend_pathcollection_labelcolor_markerfacecolor  r  r5  c                  C   r&  )	Nr  rc   r
   r	  r4  r2  r  r  r'  r(  r/   r/   r0   >test_legend_pathcollection_labelcolor_markerfacecolor_iterable  r*  r6  c                  C   s~   t  \} }tjtjd}|jt	dt	dd|d |j
dd}t| dgD ]\}}tj| |s<J q-d S )Nr
   r	  r   r2  r  r  r-  r(  r/   r/   r0   8test_legend_pathcollection_labelcolor_markfacecolor_cmap  s   r7  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	  r9   rc   r
  rY   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      
r9  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  rc   r
  r   rY   r  r   r  r8  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!  rc   r
  r   rY   r  r   r"  r8  r  r;  r  r/   r/   r0   .test_legend_labelcolor_rcparam_markeredgecolor  r=  r>  c                  C   r:  )Nr
   r   r	  r   r!  rc   r
  r   rY   r  r   mecr8  r  r;  r  r/   r/   r0   4test_legend_labelcolor_rcparam_markeredgecolor_short  r=  r@  c                  C   r:  )Nr
   r   r	  r   r1  rc   r
  r   rY   r  r   r2  r8  r  r;  r  r/   r/   r0   .test_legend_labelcolor_rcparam_markerfacecolor  r=  rA  c                  C   r:  )Nr
   r   r	  r   r1  rc   r
  r   rY   r  r   mfcr8  r  r;  r  r/   r/   r0   4test_legend_labelcolor_rcparam_markerfacecolor_short  r=  rC  z4ignore:No artists with labels found to put in legendc                  C   sD   t  } |  r
J | d |  sJ | d |  r J d S )NTF)r   r"   get_draggableset_draggabler"   r/   r/   r0   test_get_set_draggable)  s   

rG  	draggable)TFc                 C   s>   t  \}}|jtddd |j| d}| | u sJ d S )Nr
   shabnamsr9   )rH  )r   r   r>   rg   r"   rD  )rH  r)   r*   rs   r/   r/   r0   test_legend_draggable3  s   rJ  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      ?datar  )r  r   r-   rU   rD   r   )r   rf   r"   r   	set_alphaget_facecolorget_edgecolor)r+   r  hhr"   r  r/   r/   r0   test_alpha_handles;  s   
(,rP  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 )Nr  zfont.familyzComputer Modernz
font.serifTztext.usetexr   inputr9   r   r  z Font family ['serif'] not found.)	r   r   r   r   r>   r"   rh   ri   r  )caplogr)   r*   r/   r/   r0   test_usetex_no_warnD  s   



rS  c                    s   t jddd | td fdd t \}}|j  g d}g d}|j||d	d
d t	ddi |
 }W d    n1 sCw   Y  tjtdd}|| W d    n1 s_w   Y  t|dkslJ d S )Nr         ?r]   perf_counterc                         t  S Nnextr/   counterr/   r0   <lambda>U      z-test_warn_big_data_best_loc.<locals>.<lambda>rL   rO   rR   rS   r9   z
legend.locr;   zGCreating legend with loc="best" can be slow with large amounts of data.r  rc   )	itertoolscountsetattrtimer   r   rh   ri   r>   r   r"   r  r3  r  draw_artistr   )monkeypatchr)   r*   r+   r,   r"   recordsr/   r[  r0   test_warn_big_data_best_locR  s"   

rf  c                    st   t jddd | td fdd t \}}|j  g d}g d}|j||d	d
d |	d}|
| d S )Nr   rT  rU  rV  c                      rW  rX  rY  r/   r[  r/   r0   r]  m  r^  z:test_no_warn_big_data_when_loc_specified.<locals>.<lambda>rL   rO   rR   rS   r9   r;   )r_  r`  ra  rb  r   r   rh   ri   r>   r"   rc  )rd  r)   r*   r+   r,   r"   r/   r[  r0   (test_no_warn_big_data_when_loc_specifiedj  s   

rg  label_arraylowhigh)ri  rj  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   rc   r   r   r_   r9   c                 S   r   r/   r   r   entryr/   r/   r0   r     r   z;test_plot_multiple_input_multiple_label.<locals>.<listcomp>ri  rj  )r   r   r>   r"   r   )rh  r+   r,   r)   r*   rs   legend_textsr/   r/   r0   'test_plot_multiple_input_multiple_label{  s   rn  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   rc   r   r   r_   r9   c                 S   r   r/   r   rk  r/   r/   r0   r     r   z9test_plot_multiple_input_single_label.<locals>.<listcomp>)r   r   r>   r"   r   r5  )r   r+   r,   r)   r*   rs   rm  r/   r/   r0   %test_plot_multiple_input_single_label  s   ro  c                 C   s   g d}g d}t  \}}tjtjdd |j||| d W d    n1 s)w   Y  | }t|	 dks<J |	 d 
 t| ksJJ d S )Nr   )rc   r   r   z$Passing label as a length 2 sequencer  r9   r   r   )r   r   r  r3  r   MatplotlibDeprecationWarningr>   r"   r   r   r   r5  )rh  r+   r,   r)   r*   rs   r/   r/   r0   %test_plot_single_input_multiple_label  s    rq  c                  C   s:   t  \} }|jdgdggdgd\}| dksJ d S )Nr   r   Ar9   )r   r   r>   	get_label)r)   r*   rS   r/   r/   r0   !test_plot_single_input_list_label  s   rt  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   rc   r   r   r_   )rj  ri  mediumr9   )r  r  r  r   r   r>   )r+   r,   r   r)   r*   r/   r/   r0   3test_plot_multiple_label_incorrect_length_exception  s   "rv  c                  C   s:   t  \} }|jg dg dg ddddd |  d S )Nr<  r   r   r   faceFill)r  r   r   )r   r   r   r"   r   r/   r/   r0   test_legend_face_edgecolor  s
   ry  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   rc   rY   r   rS   r9   r   )r   r   r>   r"   r  r   r   r/   r/   r0   test_legend_text_axes  s
   rz  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  )r  r  r  )r   r   r   mlinesLine2Dr"   r   r   )r)   r*   r.   rs   r/   r/   r0   test_handlerline2d  s
   "r}  c                  C   sL   t   } |  }|jddgddgdd |  }|jdd| u s$J d S )Nr   r   rS   r9   F)root)r   r   
subfiguresr   r>   r"   
get_figure)subfigr*   rs   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   rc   rY   z#123456r   )r-   r   r   )r   r   r"   get_patchesrL  rM  tuplerN  )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)lsr  )r{  r|  )r   markr/   r/   r0   r     s    z3test_legend_markers_from_line2d.<locals>.<listcomp>)r  rG   xyzzyc                 S   r   r/   r   r   rS   r/   r/   r0   r     r   c                 S   r   r/   r   r  r/   r/   r0   r     r   c                 S   r   r/   r   )r   r  r/   r/   r0   r     r   )r   r   r"   	get_linesr   )	_markersr)   r*   r   r'   r   r"   new_markers
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   er  rY   )ncol)r[   rF  )r  r  stringsr[   r/   r/   r0   test_ncol_ncols  s   r  c                  C   s   t  \} }tjtdd |jddgd W d    n1 s w   Y  tjtdd |jddgd W d    n1 s?w   Y  tjtdd |jd	dgd W d    d S 1 s_w   Y  d S )
NzFloc must be string, coordinate tuple, or an integer 0-10, not \(1.1,\)r  )r   r  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   r  r  r  r"   r   r/   r/   r0    test_loc_invalid_tuple_exception  s   "r  c                  C   s0   t  \} }|jddgd |jddgd d S )N)r  }?5^I?r  r  )r   rc   r   r   r"   r   r/   r/   r0   test_loc_valid_tuple  s   r  c                  C   s8   t  \} }|jddgdgd |jddgdgd d S )Nr  r  r  r  r   rc   r  r   r/   r/   r0   test_loc_valid_list  s   r  c                  C   sT   t  \} }tjtdd |jg ddg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\]r  )r   r  gffffff
@r  r  r  r   r/   r/   r0   test_loc_invalid_list_exception#     "r  c                  C   sT   t  \} }tjtdd |jddidg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}r  notTr  r  r  r   r/   r/   r0   test_loc_invalid_type*  r  r  c                  C   s   t  \} }|jddgd |jddgd |jddgd |jddgd tjtdd |jd	dgd W d    n1 s@w   Y  tjtd
d |jddgd W d    d S 1 s`w   Y  d S )Nr   r  r  r   r   r
   z@loc must be string, coordinate tuple, or an integer 0-10, not 11r  r  z@loc must be string, coordinate tuple, or an integer 0-10, not -1rD   r   r   r"   r  r  r  r   r/   r/   r0   !test_loc_validation_numeric_value1  s   "r  c                  C   s   t  \} }dg}|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 sww   Y  d S )Nr  r;   r  r  r   r   r  r   r   r  zlower centerzupper centerz 'wrong' is not a valid value forr  wrongr  )r)   r*   r'   r/   r/   r0    test_loc_validation_string_value@  s"   "r  c                  C   s   t td\} t td\}tjtdd' t j| |gg dd}t|jdks,J t|	 dks6J W d    d S 1 sAw   Y  d S )Nr
   znumber of handles and labelsr  pl1pl2pl3r.   r'   rc   )
r   r>   rg   r  r3  r  r"   r   r   r   r  r  r"   r/   r/   r0   !test_legend_handle_label_mismatchS  s   "r  c                  C   sh   t td\} t td\}t jt| |gtg dd}t|jdks(J t| dks2J d S )Nr
   r  r  rc   )r   r>   rg   r"   iterr   r   r   r  r/   r/   r0   (test_legend_handle_label_mismatch_no_len\  s   
r  c                   C   sJ   t g d tjtdd t   W d    d S 1 sw   Y  d S )Nr   zNo artists with labels foundr  )r   r>   r  r  r  r"   r/   r/   r/   r0   test_legend_nolabels_warninge  s   
"r  c                   C   s.   t g d t   t   d usJ d S )Nr   )r   r>   r"   r  r   r/   r/   r/   r0   test_legend_nolabels_drawk  s   r  c            	   	   C   s   g d} g d}g d}g }t jddd\}}t|jdD ]3\}}|j| ||dd	d
d |dd |dd |j|d}|j	  |
| |j  qt|d j|d j d S )Nr   )r   r   r   )r   r   r   rc   r
   r   rZ   r;   r   grayr   zShaded Area)r-   r  r   r   r   rD   r   r<   r   )r   r   r   rd   r   rV   rW   r"   rh   ri   rj   rk   rl   rm   rn   r   ro   )	r+   r{  r|  rq   r)   rp   r*   r   rs   r/   r/   r0   test_legend_loc_polycollectionr  s   
r  c                  C   s   t jddd\} }g }t|jdD ]5\}}ddg}ddg}|j||dd |jddd	d
d |j|d}| j  |	|
 |j  qt|d j|d j d S )Nrc   r  rZ   r  r   z	plot namer9   rT  zsome text blahblahtop)verticalalignmentr<   r   )r   r   r   rd   r>   r  r"   rh   ri   rj   rk   rl   rm   rn   r   ro   )r)   rp   rq   r*   r   r+   r,   rs   r/   r/   r0   test_legend_text  s   
r  c                  C   s   t  \} }|jg ddd |jddd |jdd tjj| d	| jd
}| 	t
  W d    n1 s8w   Y  |  d S )Nr   Liner9   r   )r   r   )rz   r   r<   _get_renderer)wraps)r   r   r>   annotater"   r   r   objectr  savefigioBytesIOassert_not_called)r)   r*   mocked_get_rendererr/   r/   r0   test_legend_annotate  s   r  c            
      C   s  t jd t jd} tjddd\}}g d}|d j| d|d	}d
d |d D |ks0J |d  \}}||ks>J tdd |D sIJ |d j| |dd}dd |d D |ks`J |d  \}}||ksnJ tdd |D syJ tj	t
dd |d j| |d d d}W d    n1 sw   Y  |d j| dd}	|	d d  dksJ tdd |	d dd  D sJ d S )Ni!N,)r
   r   r   r   )nrowsr[   )box Azbox Bzbox Czbox Dr   T)patch_artistr   c                 S   r   r/   rs  r   r  r/   r/   r0   r     r   z.test_boxplot_legend_labels.<locals>.<listcomp>boxesc                 s       | ]
}t |tjjV  qd S rX  )
isinstancer   patches	PathPatchr   r/   r/   r0   	<genexpr>      z-test_boxplot_legend_labels.<locals>.<genexpr>F)r   showboxc                 S   r   r/   r  r  r/   r/   r0   r     r   mediansc                 s   r  rX  )r  r   r   r|  r   r/   r/   r0   r    r  z values must have same the lengthr  rc   rD   r9   rY   r  c                 s   s    | ]
}|  d V  qdS )_N)rs  r7  )r   r+   r/   r/   r0   r    r  )r   r   seedr   r   boxplotr   allr  r  r  rs  )
rK  r)   rp   legend_labelsbp1r.   r'   bp2bp3bp4r/   r/   r0   test_boxplot_legend_labels  s(   &r  )r    r  r_  platformrb  unittestr   r  numpyr   numpy.testingr   r  matplotlib.testing.decoratorsr   r   matplotlib.testing._markersr   matplotlib.pyplotpyplotr   
matplotlibr   matplotlib.patchesr  r   matplotlib.transforms
transformsr  matplotlib.collectionsr  matplotlib.linesr   r{  matplotlib.legend_handlerr   matplotlib.legendr"   r  r   matplotlib.font_managerr	   r1   r?   rJ   rX   rt   r   r   machiner   r   r   r   r   r   r   r   r   r   r   r  r  rG  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  parametrizer  r  r  r  r  r  r  r  r  r   r#  r%  r)  r0  r3  r5  r6  r7  r9  r<  r>  r@  rA  rC  filterwarningsrG  rJ  rP  rS  rf  rg  r   rn  intro  rq  rt  rv  ry  rz  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r/   r/   r/   r0   <module>   sT   
	
	
 


	







!

`8)




		&




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