
    g{:                     z   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
 Zej@                  jC                  d      d        Z"d Z#d Z$ edgdd      d        Z%d Z&d Z'd Z(d Z) edgd ejT                         dk(  rdnd      d        Z+ ed      d        Z,d  Z-d! Z. ed"gdd# ejT                         d$k(  rdnd%&      d'        Z/ ed(gd)      d*        Z0d+ Z1 ed,gd-.      d/        Z2d0 Z3 e       d1        Z4ej@                  jk                  d2d3d4g       ed      d5               Z6d6 Z7d7 Z8 ed8gdd#9      d:        Z9 e       d;        Z:d< Z; e       d=        Z< ed>g      d?        Z=d@ Z>dA Z?y)Bz%
Tests specific to the lines module.
    N)SimpleNamespace)cycler)assert_array_equal)_path)MarkerStyle)Path)image_comparisoncheck_figures_equalc            	          d\  } }t        j                  ddg      t        j                  ddg      }}d}t        t        j                  | ||||      dg       y)zTest a problematic case.)i)  i  g     H@g     W@g     @g(\@r   N)nparrayr   mlinessegment_hits)cxcyxyradiuss        X/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/matplotlib/tests/test_lines.pytest_segment_hitsr      sR    FB88T4L!288S$K#8qAFv**2r1a@1#F       )rerunsc                  &   d} t        j                  dd|       }t         j                  j                  |       }t	        j
                         }t	        j                         }t        j                  ||      }|j                  d       t        t        j                  |j                  j                  dd            }|j                  |       t        t        j                  |j                  j                  dd            }||z  }d}	||	k  sJ y	)
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_thresholds
             r   test_invisible_Line_renderingr6   $   s     	A
Aq!A
		a A **,C	B 	aAMM%
 FMM#**//!AFGI KKN 6==1MN '2O////r   c                      t        j                         \  } }t        j                  j	                  d       |j                  t        j                  j                  dd      dg       y Nr         r   )r   r   )
linestylesr$   subplotsr   r"   seedcontourrandnr/   r0   s     r   test_set_line_coll_dashrC   P   sD    llnGCIINN1 JJryyr2&K=JAr   c                  L   t        j                  t        d      5  t        j                  dg        d d d        t        j                  t        d      5  t        j                  g d       d d d        t        j                  g g       } t        j                  t        d      5  | j                  d       d d d        t        j                  t        d      5  | j                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)Nzxdata must bematchr   zydata must ber   z	x must bez	y must be)pytestraisesRuntimeErrorr   r'   	set_xdata	set_ydatalines    r   test_invalid_line_datarN   X   s    	|?	; a	|?	; b! ==R D	|;	7 q	|;	7 q     s/   C6D&DD6C?DDD#line_dashesTg~jth?)remove_texttolc                  l    t        j                         \  } }|j                  t        d      dd       y )N
   r;      	linestylelw)r$   r>   plotrangerB   s     r   test_line_dashesrZ   e   s)     llnGCGGE"IG3r   c                  ~   t        j                         \  } }|j                  t        d      d       |j                  t        d      d       |j                  t        d      d       |j                  t        d      d       |j                  t        d      d       | j                  j                          y )NrS   none)colorrz.3)r   r   r   r   )r   r   r   r$   r>   rX   rY   r+   r,   rB   s     r   test_line_colorsr`   n   s    llnGCGGE"IVG$GGE"ISG!GGE"ITG"GGE"I\G*GGE"IYG'JJOOr   c                      t        j                  g g       } t        j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY wNfoobar)r   r'   rG   rH   
ValueError	set_colorrL   s    r   test_valid_colorsrf   x   s?    ==R D	z	" !x ! ! !   AAc                      t        j                         \  } }ddddddddd	d
dg ffD ]  }|j                  t        d      |         | j                  j                          y )N-solid--dashedz-.dashdot:dotted)r   N)r    r   rS   )rV   r_   )r/   r0   lss      r   test_linestyle_variantsrr   ~   se    llnGCGT8YX'Ar7 ) 	b	R(	)
 JJOOr   c                      t        j                  g g       } t        j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY w)Naardvark)r   r'   rG   rH   rd   set_linestylerL   s    r   test_valid_linestylesrv      sA    ==R D	z	" ':&' ' 'rg   zdrawstyle_variants.pngarm64gQ?c                      t        j                  d      \  } }g d}t        |j                  |      D ]4  \  }}|j	                  t        d      |       |j                  dd       6 y )N   )defaultz	steps-mid	steps-prez
steps-poststepsN  	drawstyle)r   r    )xlimylim)r$   r>   zipflatrX   rY   set)r/   axsdssr0   dss        r   test_drawstyle_variantsr      s^     ||AHC
LC
 chh$ )B
dr*
F()r   )png)
extensionsc                 "   | j                         }t        j                  d      }|j                  |dz   |       |j                         }t	        j
                         j                  dd      }|j                  ||||j                  z          y )Nr}   g     @@        )	transform)add_subplotr   arangerX   mtransformsAffine2D	translate	transData)fig_reffig_testr0   r   ts        r   test_no_subslice_with_transformr      sr    				B
		$AGGAHa				B((5AGGAqAbllNG+r   c                      t        j                  g g       } t        j                  t              5  | j                  d       d d d        y # 1 sw Y   y xY wrb   )r   r'   rG   rH   rd   set_drawstylerL   s    r   test_valid_drawstylesr      sA    ==R D	z	" %8$% % %rg   c                     t        j                  ddt         j                  z  d      } t        j                  |       }t	        j
                         \  }}|j                  | |      \  }|j                  d       t        |j                         j                        dt        |       z  dz
  k(  sJ |j                  d       t        |j                         j                        t        |       k(  sJ y )Nr   r    rS   r{   r   rz   )r   r!   pisinr$   r>   rX   r   lenget_pathvertices)r   r   r/   r0   rM   s        r   test_set_drawstyler      s    
Aqw#A
q	AllnGCGGAqMED{#t}}''(Ac!fHQJ666y!t}}''(CF222r   line_collection_dashesmpl20x86_64g?)rP   stylerQ   c                      t        j                         \  } }t        j                  j	                  d       |j                  t        j                  j                  dd      dg       y r8   r=   rB   s     r   test_set_line_coll_dash_imager      sD     llnGCIINN1JJryyr2&K=JAr   zmarker_fill_styles.png)rP   c                  2   t        j                  g ddddddt        j                  g d      g      } d}t        j                  d	d	g      }t        j                  d
dg      }t	        j
                         \  }}t        d      D ]i  \  }}t        t        j                  j                        D ]>  \  }}	t        |       }
|j                  |dz  |z   ||z   d|dz  z  z   |d||	|	d|
|
d       @ k |j                  d
dg       |j                  ddg       y )Nr   r   r   gz#ff0000cmr   )r   r   r   
lightgreenr   r   	   zov^<>8sp*hHDdPXrS         ?r    r9   rT   )	marker
markersizemarkerfacecoloralt	fillstylelabel	linewidthr]   markeredgecolormarkeredgewidthg      @   )	itertoolscycler   r   r$   r>   	enumerater   r'   
fillStylesnextrX   set_ylimset_xlim)colorsaltcolorr   r   r/   r0   jr   ifsr]   s              r   test_marker_fill_stylesr      s   __iic3 hhy13 4FH
!QA
!QAllnGC 01 '	6v}}778 	'EArLEGGAFQJAa!e 4!!'/ $)$%  	'	'' KKCKKS	r   c                      t        j                  g dt        dd      d      \  } | j                         dk(  sJ | j	                         dk(  sJ y)z=Test that markerfacecolor does not override fillstyle='none'.r   r   r    or\   )r   red)r   markerfacecolorN)r$   rX   r   get_fillstyleget_markerfacecolor)r1   s    r   test_markerfacecolor_fillstyler      sL    	)Kv$F"'
)BA??&&&  "f,,,r   scaled_linesrz   )r   c            	      |   t        j                  dd      } t        j                         \  }}g d}t	        t
        j                  d         }t        t        ||            D ]W  \  }\  }}t        j                  ddd      D ]5  } |j                  | |t        j                  d      z  d|z  z   f||d	| 7 Y y )
Nr       )rl   ro   rm   axes.prop_cycler   rS   2   皙?rU   )r   r!   r$   r>   r   
matplotlibrcParamsr   r   rX   ones)	thr/   r0   lins_stylesr   r   rq   styrW   s	            r   test_lw_scalingr      s    	Q	BllnGC1K	
##$56	7B!#k2"67 M9B++b"b) 	MBBGGB"''"+R/L2"LL	MMr   c                  .   t        j                  t        j                  g d            sJ t        j                  t        j                  dt        j                  dg            sJ t        j                  ddgt        j                  gdz  z   ddgz         rJ t        j                  t        j                  dd	gd
            rJ dt
        j                  j                  z  } t        j                  t        j                  g| z  t        |              y )Nr   r    r   r   r   rT   d   r   r    i   i   z>i4)r   is_sorted_and_has_non_nanr   r   nanr   r'   _subslice_optim_min_sizer$   rX   rY   )ns    r   test_is_sorted_and_has_non_nanr      s    **288I+>???**288QN+CDDD..1v3/F!Q/OPPP..rxx58I5/QRRR	FMM222AHHbffX\58$r   c                     | j                         j                  ddgd       |j                         j                  g dg ddddg       y )Nr   r   z-or   )r   r   r   r    	markevery)r>   steprX   r   r   s     r   test_step_markersr      sC    aVT*Iy$1a&Ir   parentr%   axesc                     t         j                  j                  d       t        j                  ddd      }t         j                  j	                  t        |            }d ddg dddgt        d	d
d      t        j                  t        |            |dkD     ddg	}g d}|dk(  r|d d }|d d } fd}fd}nY|dk(  rTt         j                  dd      j                        t        j                  dd      j                        fd}fd}|D ]  }	 |||	        |D ]Q  }	t        j                  t        |	            j                  t              j                  t              }
 |||
       S y )N*   r   r         )r    rT   )r   rT      rT   rS   r    r   333333?)r   皙?)	111111111111111000100010001000100001000010010001000001001000000000000100000101010000011100011101101101101101111001010011011101r%   c                V    j                  t        j                  | |d|             y Nr   r   r   
add_artistr   r'   )r   r   r   r   s      r   add_testz test_markevery.<locals>.add_test  s$    a3)DFr   c                V    j                  t        j                  | |d|             y r   r  )r   r   r   r   s      r   add_refztest_markevery.<locals>.add_ref  s$    a3)DFr   r   r   c                B    t              j                  | |d|       y Nz-gDr   r   rX   )r   r   r   axs_tests      r   r  z test_markevery.<locals>.add_test&  s    N1eyAr   c                B    t              j                  | |d|       y r  r  )r   r   r   axs_refs      r   r  ztest_markevery.<locals>.add_ref)  s    Mq!Ui@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	  s   ``         @@r   test_markeveryr    sb    IINN2
Aq"A
		s1vA6:b'5B?))CF#AG,z#JGI _
crN		F	F 
6	))!Q/445w''1-223	B	A  'A&'  $XXd4j!((-44T:1#$r   c                     t        j                         } | j                  t        j                  ddgddgdd             t        j                  t              5  | j                  j                          d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   )
r$   r%   r  r   r'   rG   rH   rd   r+   r,   )r/   s    r   .test_markevery_figure_line_unsupported_relsizer  4  s_    
**,CNN6==!Q!QrJK	z	" 

  s   A>>Bc                     t        j                         \  } }|j                  g dt        d            \  }| j                  j                          |j                         dk(  sJ |j                  d       | j                  j                          |j                  t        d             | j                  j                          t        j                  ddgddgdd	gg      }|j                  g d
t        |      d      \  }|j                  g d|d      \  }t        |j                         j                  |j                         t        |j                         j                  |j                         y )N)r    r   r   D)r   sr   r   r   r   r    r      )r   ms)r   r    r   )r$   r>   rX   r   r+   r,   
get_marker
set_markerr   _create_closedr   r   )r/   r0   rM   	triangle1line2line3s         r   test_marker_as_markerstyler%  ;  s   llnGCGGIk#&6G7EDJJOO??### 	OOCJJOOOOK$%JJOO##b"X2wA$?@IWWY{9'="WEFEWWYyRW8FEu'')22I4F4FGu'')22I4F4FGr   zstriped_line.png)rP   r   c            	      2   t         j                  j                  d      } t        j                         \  }}|j                  | j                  d      ddddd	       |j                  | j                  d      d
ddddd       |j                  d       y )Ni!N,   r   orangebluerk   rT    )r]   gapcolorrV   rW   r   r   black)r   )r    rT   r   r    r   )r]   r+  rV   rW   r   alpha)handlelength)r   r"   default_rngr$   r>   rX   uniformlegend)rng_r0   s      r   test_striped_linesr4  O  s    
))


)CLLNEArGGCKKRK 6q  -GGCKKRK 'AS  EII1Ir   c                     | j                         j                  ddgg d       |j                         j                  ddgg d       y )Nr   r    r   )dashes)r   r    r   r   r    r   )r   rX   r   s     r   test_odd_dashesr7  Z  sC    Ay91v.@Ar   c                  n   t        j                         \  } }t        | j                  j                  dz  | j                  j
                  dz  dz         }|j                  ddgddgd      \  }|j                  |      \  }}|rJ |j                  ddgddgdd	      \  }|j                  |      \  }}|sJ t        |d
   dg       |j                  ddgddgd      \  }|j                  |      \  }}|rJ |j                  d       |j                  |      \  }}|sJ t        |d
   dg       y )Nr       )r   r   r   r   T)pickerr9   )r:  
pickradiusind)
r$   r>   r   bboxwidthheightrX   containsr   set_pickradius)r/   r0   mouse_eventl0foundindicesl1l2s           r   test_pickingrH  `  s5   llnGC!CHHNNa$7$'HHOOq$82$=?K ''1a&1a&'
.CB[[-NE79 ''1a&1a&"'
=CB[[-NE7L5wu~s+ ''1a&1a&'
.CB[[-NE79b[[-NE7L5wu~s+r   c                    t        j                  ddd      }| j                         j                  ||d      \  }t	        d      |d d  |j                  d       |j                         j                  g dg ddd       y )	Nr   ry   r    z.-r   r|   )r   r    r   r~   )r   r   r   rX   rY   r   )r   r   r   r1   s       r   test_input_copyrJ  z  sn     			!QA					$	$Q4	0BA8AaDOOGy)TWMr   r   c                    dddg dddgt        ddd	      d
ddddg}t        j                  d   } |t        j                  ddt        |                  }t        j                  dd      }d|dz  z  }|j                         }t        |      D ]   \  }}	|j                  ||z
  d|	||          " t        ||      t        j                  d<   | j                         }
t        |      D ]  \  }}|
j                  ||z
  d        y)z*Test that we can set markevery prop_cycle.N   )r:   rL  )      r:   r   r   r      r   r   r   g      ?)r   r   )g?r   jet皙?皙?r   rT   r    zo-)r   r]   r   )r  mpl	colormapsr   r!   r   r   r   rX   r   r   r   )r   r   casescmapr   r   r   r   r   r   r0   r3  s               r   test_markevery_prop_cyclerW    s    1g|aW3Qc3&E ==D"++c3E
34F
BA	AqDA



C!%( D9Q	CD .4e:@.BJ)* 
			B%  1
Atr   c                     t        j                         \  } }|j                  dd      }|j                  dd      }|j                  d       |j	                  d       |j                  d       |j                  d       |j                         dk(  sJ |j                         dk(  sJ |j                         dk(  sJ |j                         dk(  sJ t        j                  t        j                        5  |j                  d	d
       d d d        t        j                  t        j                        5  |j                  dd       d d d        t        j                  t        d      5  |j                  d	d
       d d d        t        j                  t        d      5  |j	                  d       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   WxY w# 1 sw Y   y xY w)N)r   r   333333?slope)rR  r   )rQ  r   g333333@)r   rQ  )rY  rR  rQ  r   rR  z.Cannot set an 'xy2' value while 'slope' is setrE   z-Cannot set a 'slope' value while 'xy2' is setr   )r$   r>   axlineset_xy1	set_slopeset_xy2get_xy1	get_slopeget_xy2rG   warnsrS  MatplotlibDeprecationWarningrH   rd   )r/   r0   line1r#  s       r   test_axline_settersrf    s   llnGCIIhcI*EIIh)E 
MM(	OOC	MM(	MM( ==?h&&&??###==?h&&&==?h&&&	c66	7 b"	c66	7 b" 
zM
O b" 
zL
N      s0   8F=6G	,G"G!=G	GG!G*c                      t        j                  dd      } | j                         j                  d      }| j                         j                  d      }|d   |d   z
  }|dkD  sJ |dk  sJ y)	z@Test that small slopes are not coerced to zero in the transform.)r   r   g+=rZ  )r   r   r   r   g-=N)r$   r\  get_transformtransform_point)rM   p1p2dys       r   test_axline_small_sloperm    sl    ::fE*D					-	-f	5B					-	-f	5B	AAB6M6::r   )@__doc__r   platformr*   typesr   r   numpyr   numpy.testingr   rG   r   rS  r   matplotlib.lineslinesr   matplotlib.markersr   matplotlib.pathr   matplotlib.pyplotpyplotr$   matplotlib.transforms
transformsr   matplotlib.testing.decoratorsr	   r
   r   markflakyr6   rC   rN   rZ   r`   rf   rr   rv   machiner   r   r   r   r   r   r   r   r   r   parametrizer  r  r%  r4  r7  rH  rJ  rW  rf  rm  rp   r   r   <module>r     sh      !   ,     ! *    + OG !(0 (0VB
 =/t?4 @4!' +,$.h..0G;dD	)D	) ), *,%
3 DX8+7B7B +,$? @>- >")4M 5M% J J
 Hf#56))$ * 7)$XH( %&DH I B B
,4 N N ( )0>r   