o
    e_8                     @   sZ  d Z ddlZddlZddlZddlmZ ddlmZ ddlZddl	m
Z
 ddlZddlZddlZddlmZ ddl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 Zej j!dddd Z"dd Z#dd Z$edgddddd Z%dd Z&dd Z'dd Z(d d! Z)ed"gdd#d$d% Z*ed&d'd(d) Z+d*d+ Z,d,d- Z-ed.gdd/e. d0v rd1ndd2d3d4 Z/ed5gdd#d6d7 Z0d8d9 Z1ed:gd;d<d=d> Z2d?d@ Z3e dAdB Z4ej 5dCdDdEged&d'dFdG Z6dHdI Z7dJdK Z8edLgdd/dMdNdO Z9e dPdQ Z:dRdS Z;e dTdU Z<edVgd'dWdX Z=dYdZ Z>dS )[z%
Tests specific to the lines module.
    N)SimpleNamespace)cycler)assert_array_equal)_path)MarkerStyle)Path)image_comparisoncheck_figures_equalc                  C   sH   d\} }t ddgt ddg}}d}tt| ||||dg dS )zTest a problematic case.)i)  i  g     H@g     W@g     @g(\@r   N)nparrayr   mlinessegment_hits)cxcyxyradius r   J/var/www/myenv/lib/python3.10/site-packages/matplotlib/tests/test_lines.pytest_segment_hits   s   r      )rerunsc            
      C   s   d} t dd| }t jj| d}t }t }t||}|	d t
tj|jjddd}|| t
tj|jjddd}|| }d}	||	k sLJ d	S )
ac  
    GitHub issue #1256 identified a bug in Line.draw method

    Despite visibility attribute set to False, the draw method was not
    returning early enough and some pre-rendering code was executed
    though not necessary.

    Consequence was an excessive draw time for invisible Line instances
    holding a large number of points (Npts> 10**6)
    i r      sizeFr   )numberrepeat   N)r
   linspacerandomnormalpltfiguresubplotr   Line2Dset_visiblemintimeitr   canvasdrawadd_line)
Nr   r   figaxl	t_no_linet_invisible_lineslowdown_factorslowdown_thresholdr   r   r   test_invisible_Line_rendering$   s   

r3   c                  C   6   t  \} }tjd |jtjdddgd d S Nr         r   )r   r   )
linestylesr!   subplotsr
   r   seedcontourrandnr,   r-   r   r   r   test_set_line_coll_dashP   s   r@   c                  C   s   t jtdd tdg  W d    n1 sw   Y  t jtdd tg d W d    n1 s5w   Y  tg g } t tj | d W d    n1 sVw   Y  t tj | 	d W d    d S 1 srw   Y  d S )Nzxdata must bematchr   zydata must ber   )
pytestraisesRuntimeErrorr   r$   warnsmplMatplotlibDeprecationWarning	set_xdata	set_ydataliner   r   r   test_invalid_line_dataX   s   "rM   line_dashesTgMb`?)remove_texttolc                  C   s$   t  \} }|jtdddd d S )N
   r8      	linestylelw)r!   r;   plotranger?   r   r   r   test_line_dashesh   s   rX   c                  C   st   t  \} }|jtddd |jtddd |jtddd |jtddd |jtddd | j  d S )NrQ   none)colorrz.3)r   r   r   r   )r   r   r   r!   r;   rV   rW   r(   r)   r?   r   r   r   test_line_colorsq   s   r]   c                  C   F   t g g } tt | d W d    d S 1 sw   Y  d S Nfoobar)r   r$   rC   rD   
ValueError	set_colorrK   r   r   r   test_valid_colors{      "rc   c                  C   sP   t  \} }ddddddddd	d
dg ffD ]}|jtd|d q| j  d S )N-solid--dashedz-.dashdot:dotted)r   N)r   r   r   rQ   )rT   r\   )r,   r-   lsr   r   r   test_linestyle_variants   s   
rm   c                  C   r^   )Naardvark)r   r$   rC   rD   ra   set_linestylerK   r   r   r   test_valid_linestyles   rd   rp   zdrawstyle_variants.png)rO   c                  C   sP   t d\} }g d}t|j|D ]\}}|jtd|d |jddd qd S )N   )defaultz	steps-mid	steps-prez
steps-poststepsN  	drawstyle)r   r   )xlimylim)r!   r;   zipflatrV   rW   set)r,   axsdssr-   dsr   r   r   test_drawstyle_variants   s   r   )png)
extensionsc                 C   sT   |   }td}||d | |  }t dd}|j||||j d d S )Nru   g     @@        )	transform)add_subplotr
   arangerV   mtransformsAffine2D	translate	transData)fig_reffig_testr-   r   tr   r   r   test_no_subslice_with_transform   s   
r   c                  C   r^   r_   )r   r$   rC   rD   ra   set_drawstylerK   r   r   r   test_valid_drawstyles   rd   r   c                  C   s   t ddt j d} t | }t \}}|| |\}|d t|	 j
dt|  d ks2J |d t|	 j
t| ksDJ d S )Nr   r   rQ   rs   r   rr   )r
   r   pisinr!   r;   rV   r   lenget_pathvertices)r   r   r,   r-   rL   r   r   r   test_set_drawstyle   s   

"
r   line_collection_dashesmpl20)aarch64ppc64les390xg?)rO   stylerP   c                  C   r4   r5   r:   r?   r   r   r   test_set_line_coll_dash_image   s   r   zmarker_fill_styles.pngc                  C   s   t g ddddddtg dg} d}td	d	g}td
dg}t \}}tdD ]/\}}ttjj	D ]$\}}	t
| }
|j|d | || d|d   |d||	|	d|
|
dd q7q-|d
dg |ddg d S )Nr   r   r   gz#ff0000cmr   )r   r   r   
lightgreenr   r   	   zov^<>8sp*hHDdPXrQ         ?r   r6   rR   )	marker
markersizemarkerfacecoloralt	fillstylelabel	linewidthrZ   markeredgecolormarkeredgewidthg      @   )	itertoolscycler
   r   r!   r;   	enumerater   r$   
fillStylesnextrV   set_ylimset_xlim)colorsaltcolorr   r   r,   r-   jr   ifsrZ   r   r   r   test_marker_fill_styles   s0    r   c                  C   sB   t jg dtddddd\} |  dksJ |  dksJ dS )z=Test that markerfacecolor does not override fillstyle='none'.r   r   r   orY   )r   red)r   markerfacecolorN)r!   rV   r   get_fillstyleget_markerfacecolor)r.   r   r   r   test_markerfacecolor_fillstyle   s
   r   scaled_linesrr   )r   c            	      C   s   t dd} t \}}g d}ttjd }tt||D ]&\}\}}t dddD ]}|j	| |t 
d d|  f||d	| q+qd S )
Nr       )rh   rk   ri   axes.prop_cycler   rQ   2   皙?rS   )r
   r   r!   r;   r   
matplotlibrcParamsr   rz   rV   ones)	thr,   r-   lins_stylesr   r   rl   styrU   r   r   r   test_lw_scaling   s   .r   c                  C   s   t tg dsJ t tdtjdgsJ t ddgtjgd  ddg r-J dtjj } t	tjg|  t
|  d S )Nr   r   r   r   r   rR   d   r   r   )r   is_sorted_and_has_non_nanr
   r   nanr   r$   _subslice_optim_min_sizer!   rV   rW   )nr   r   r   test_is_sorted_and_has_non_nan   s
   &r   c                 C   s:   |   ddgd |  jg dg ddddgd d S )Nr   r   z-or   )r   r   r   r   	markevery)r;   steprV   r   r   r   r   r   test_step_markers   s   &r   parentr"   axesc              
      s6  t jd t ddd}t jt|}d ddg dddgtd	d
dt t||dk ddg	}g d}|dkrR|d d }|d d }fdd}fdd}n"|dkrtt	ddj
t	ddj
 fdd} fdd}|D ]	}	||||	d qv|D ]}	t t|	tt}
||||
d qd S )N*   r   r         )r   rR   )r   rR      rR   rQ   r   r   333333?)r   皙?)	111111111111111000100010001000100001000010010001000001001000000000000100000101010000011100011101101101101101111001010011011101r"   c                        tj| |d|d d S Nr   r   r   
add_artistr   r$   r   r   r   )r   r   r   add_test     z test_markevery.<locals>.add_testc                   r   r   r   r   )r   r   r   add_ref  r   ztest_markevery.<locals>.add_refr   r   c                      t  j| |d|d d S Nz-gDr   r   rV   r   )axs_testr   r   r   &     c                   r   r   r   r   )axs_refr   r   r   )  r   r   )r
   r   r<   r   randr   slicer   iterr;   r{   r   listastypeintbool)r   r   r   r   r   
cases_test	cases_refr   r   casemer   )r   r   r   r   r   test_markevery  s2   r  c                  C   sb   t  } | tjddgddgddd tt | j	  W d    d S 1 s*w   Y  d S )Nr   r   r   r   r   )
r!   r"   r   r   r$   rC   rD   ra   r(   r)   )r,   r   r   r   .test_markevery_figure_line_unsupported_relsize4  s
    "r	  c                  C   s   t  \} }|jg dtdd\}| j  | dksJ |d | j  |td | j  t	ddgddgdd	gg}|jg d
t|dd\}|jg d|dd\}t
| j|j t
| j|j d S )N)r   r   r   D)r   sr   r   r   r   r   r      )r   ms)r   r   r   )r!   r;   rV   r   r(   r)   
get_marker
set_markerr   _create_closedr   r   )r,   r-   rL   	triangle1line2line3r   r   r   test_marker_as_markerstyle;  s   



r  zstriped_line.png)rO   r   c               	   C   sf   t jd} t \}}|j| jdddddddd	 |j| jddd
dddddd |jdd d S )Ni!N,   r   orangebluerg   rR    )rZ   gapcolorrT   rU   r   r   black)r   )r   rR   r   r   r   )rZ   r  rT   rU   r   alpha)handlelength)r
   r   default_rngr!   r;   rV   uniformlegend)rng_r-   r   r   r   test_striped_linesO  s   r"  c                 C   s8   |   jddgg dd |  jddgg dd d S )Nr   r   r   )dashes)r   r   r   r   r   r   )r   rV   r   r   r   r   test_odd_dashesZ  s   r$  c                  C   s  t  \} }t| jjd | jjd d d}|jddgddgdd\}||\}}|r.J |jddgddgddd	\}||\}}|sGJ t|d
 dg |jddgddgdd\}||\}}|rgJ |	d ||\}}|swJ t|d
 dg d S )Nr      )r   r   r   r   T)pickerr6   )r&  
pickradiusind)
r!   r;   r   bboxwidthheightrV   containsr   set_pickradius)r,   r-   mouse_eventl0foundindicesl1l2r   r   r   test_picking`  s$   
r4  c                 C   s^   t ddd}|  ||d\}td|d d < |d | jg dg dddd d S )	Nr   rq   r   z.-r   rt   )r   r   r   rv   )r
   r   r   rV   rW   r   )r   r   r   r.   r   r   r   test_input_copyz  s
   
"r5  r   c                 C   s   dddg dddgt ddd	d
ddddg}tjd }|tddt|}tdd}d|d  }| }t|D ]\}}	|j|| d|	|| d q9t	||dt
jd< |  }
t|D ]\}}|
|| d q\dS )z*Test that we can set markevery prop_cycle.N   )r7   r6  )      r7   r   r   r      r   r   r   g      ?)r   r   )g?r   jet皙?皙?r   rR   r   zo-)r   rZ   r   )r   rG   	colormapsr
   r   r   r   r   rV   r   r   r   )r   r   casescmapr   r   r   r}   r   r   r-   r!  r   r   r   test_markevery_prop_cycle  s$   
r@  c                  C   s  t  \} }|jddd}|dd}|dd |d |dd |dd | d	ks2J | dks:J | d
ksBJ | dksJJ t	j
tdd |dd W d    n1 sbw   Y  t	j
tdd |d W d    d S 1 sw   Y  d S )N)r   r   333333?)slope)r<  r   r;  r   g333333@r<  )r;  r   )r   r;  )rA  r<  z.Cannot set an 'xy2' value while 'slope' is setrA   z-Cannot set a 'slope' value while 'xy2' is setr   )r!   r;   axlineset_xy1	set_slopeset_xy2get_xy1	get_slopeget_xy2rC   rD   ra   )r,   r-   line1r  r   r   r   test_axline_setters  s*   
"rK  )?__doc__r   platformr'   typesr   r   numpyr
   numpy.testingr   rC   r   rG   r   matplotlib.lineslinesr   matplotlib.markersr   matplotlib.pathr   matplotlib.pyplotpyplotr!   matplotlib.transforms
transformsr   matplotlib.testing.decoratorsr   r	   r   markflakyr3   r@   rM   rX   r]   rc   rm   rp   r   r   r   r   machiner   r   r   r   r   r   parametrizer  r	  r  r"  r$  r4  r5  r@  rK  r   r   r   r   <module>   s~    

+










,






