o
    h:                     @   st  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e* d#krdnd$dd%d& Z+ed'd(d)d* Z,d+d, Z-d-d. Z.ed/gdd0e* d#krdnd1d2d3d4 Z/ed5gdd6d7d8 Z0d9d: Z1ed;gd<d=d>d? Z2d@dA Z3e dBdC Z4ej 5dDdEdFged'd(dGdH Z6dIdJ Z7dKdL Z8edMgdd0dNdOdP Z9e dQdR Z:dSdT Z;e dUdV Z<edWgd(dXdY Z=dZd[ Z>d\d] 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   o/var/www/html/construction_image-detection-poc/venv/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 jtdd | d W d    n1 sWw   Y  t jtdd | d W d    d S 1 stw   Y  d S )Nzxdata must bematchr   zydata must ber   z	x must bez	y must be)pytestraisesRuntimeErrorr   r$   	set_xdata	set_ydataliner   r   r   test_invalid_line_dataX   s   "rJ   line_dashesTg~jth?)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_dashese   s   rU   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 )NrN   none)colorrz.3)r   r   r   r   )r   r   r   r!   r;   rS   rT   r(   r)   r?   r   r   r   test_line_colorsn   s   rZ   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_colorrH   r   r   r   test_valid_colorsx      "r`   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   rN   )rQ   rY   )r,   r-   lsr   r   r   test_linestyle_variants~   s   
rj   c                  C   r[   )Naardvark)r   r$   rC   rD   r^   set_linestylerH   r   r   r   test_valid_linestyles   ra   rm   zdrawstyle_variants.pngx86_64gQ?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flatrS   rT   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 )Nrs   g     @@        )	transform)add_subplotr
   arangerS   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   r^   set_drawstylerH   r   r   r   test_valid_drawstyles   ra   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   rN   rq   r   rp   )r
   r   pisinr!   r;   rS   r   lenget_pathvertices)r   r   r,   r-   rI   r   r   r   test_set_drawstyle   s   

"
r   line_collection_dashesmpl20g?)rL   stylerM   c                  C   r4   r5   r:   r?   r   r   r   test_set_line_coll_dash_image   s   r   zmarker_fill_styles.png)rL   c                  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*hHDdPXrN         ?r   r6   rO   )	marker
markersizemarkerfacecoloralt	fillstylelabel	linewidthrW   markeredgecolormarkeredgewidthg      @   )	itertoolscycler
   r   r!   r;   	enumerater   r$   
fillStylesnextrS   set_ylimset_xlim)colorsaltcolorr   r   r,   r-   jr   ifsrW   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   orV   )r   red)r   markerfacecolorN)r!   rS   r   get_fillstyleget_markerfacecolor)r.   r   r   r   test_markerfacecolor_fillstyle   s
   r   scaled_linesrp   )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       )re   rh   rf   axes.prop_cycler   rN   2   皙?rP   )r
   r   r!   r;   r   
matplotlibrcParamsr   rx   rS   ones)	thr,   r-   lins_stylesr   r   ri   styrR   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 t tdd	gd
r:J dtjj } t	tjg|  t
|  d S )Nr   r   r   r   r   rO   d   r   r   i   i   z>i4)r   is_sorted_and_has_non_nanr
   r   nanr   r$   _subslice_optim_min_sizer!   rS   rT   )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;   steprS   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   rO   )r   rO      rO   rN   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   rS   r   )axs_testr   r   r   %     c                   r   r   r   r   )axs_refr   r   r   (  r   r   )r
   r   r<   r   randr   slicer   iterr;   ry   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   r^   r(   r)   )r,   r   r   r   .test_markevery_figure_line_unsupported_relsize3  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;   rS   r   r(   r)   
get_marker
set_markerr   _create_closedr   r   )r,   r-   rI   	triangle1line2line3r   r   r   test_marker_as_markerstyle:  s   



r  zstriped_line.png)rL   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bluerd   rO    )rW   gapcolorrQ   rR   r   r   black)r   )r   rO   r   r   r   )rW   r  rQ   rR   r   alpha)handlelength)r
   r   default_rngr!   r;   rS   uniformlegend)rng_r-   r   r   r   test_striped_linesN  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   rS   r   r   r   r   test_odd_dashesY  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heightrS   containsr   set_pickradius)r,   r-   mouse_eventl0foundindicesl1l2r   r   r   test_picking_  s$   
r/  c                 C   s^   t ddd}|  ||d\}td|d d < |d | jg dg dddd d S )	Nr   ro   r   z.-r   rr   )r   r   r   rt   )r
   r   r   rS   rT   r   )r   r   r   r.   r   r   r   test_input_copyy  s
   
"r0  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   r1  )      r7   r   r   r      r   r   r   g      ?)r   r   )g?r   jet皙?皙?r   rO   r   zo-)r   rW   r   )r   mpl	colormapsr
   r   r   r   r   rS   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   sv  t  \} }|jddd}|dd}|d |d |d |d | dks/J | dks7J | dks?J | dksGJ t	
tj |d	d
 W d    n1 s^w   Y  t	
tj |dd W d    n1 szw   Y  t	jtdd |d	d
 W d    n1 sw   Y  t	jtdd |d W d    d S 1 sw   Y  d S )N)r   r   333333?slope)r7  r   )r6  r   g333333@)r   r6  )r=  r7  r6  r   r7  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   warnsr8  MatplotlibDeprecationWarningrD   r^   )r,   r-   line1r  r   r   r   test_axline_setters  s6   



"rJ  c                  C   sV   t jddd} |  d}|  d}|d |d  }|dks#J |dk s)J dS )	z@Test that small slopes are not coerced to zero in the transform.)r   r   g+=r>  )r   r   r   r   g-=N)r!   r@  get_transformtransform_point)rI   p1p2dyr   r   r   test_axline_small_slope  s   rP  )@__doc__r   platformr'   typesr   r   numpyr
   numpy.testingr   rC   r   r8  r   matplotlib.lineslinesr   matplotlib.markersr   matplotlib.pathr   matplotlib.pyplotpyplotr!   matplotlib.transforms
transformsr   matplotlib.testing.decoratorsr   r	   r   markflakyr3   r@   rJ   rU   rZ   r`   rj   rm   machiner~   r   r   r   r   r   r   r   r   r   parametrizer  r  r  r  r  r/  r0  r<  rJ  rP  r   r   r   r   <module>   s    

+












,






