
    h:                     B   S r SSKrSSKrSSKrSSKJr  SSKJr  SSKrSSK	J
r
  SSKrSSKrSSKrSSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SS	KJrJr  S
 r\R@                  RC                  SS9S 5       r"S r#S r$\" S/SSS9S 5       r%S r&S r'S r(S r)\" S/S\RT                  " 5       S:X  a  SOSS9S 5       r+\" SS9S 5       r,S  r-S! r.\" S"/SS#\RT                  " 5       S:X  a  SOS$S%9S& 5       r/\" S'/SS(9S) 5       r0S* r1\" S+/S,S-9S. 5       r2S/ r3\" 5       S0 5       r4\R@                  Rk                  S1S2S3/5      \" SS9S4 5       5       r6S5 r7S6 r8\" S7/SS#S89S9 5       r9\" 5       S: 5       r:S; r;\" 5       S< 5       r<\" S=/S9S> 5       r=S? r>S@ r?g)Az%
Tests specific to the lines module.
    N)SimpleNamespace)cycler)assert_array_equal)_path)MarkerStyle)Path)image_comparisoncheck_figures_equalc            	          Su  p[         R                  " SS/5      [         R                  " SS/5      p2Sn[        [        R                  " XX#U5      S/5        g)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        M/var/www/html/env/lib/python3.13/site-packages/matplotlib/tests/test_lines.pytest_segment_hitsr      sJ    FB88T4L!288S$K#8qFv**21@1#F       )rerunsc                     Sn [         R                  " SSU 5      n[         R                  R                  U S9n[        R
                  " 5       n[        R                  " 5       n[        R                  " X5      nUR                  S5        [        [        R                  " UR                  R                  SSS95      nUR                  U5        [        [        R                  " UR                  R                  SSS95      nXv-  nSn	X:  d   eg	)
aG  
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                      [         R                  " 5       u  p[        R                  R	                  S5        UR                  [        R                  R                  SS5      S/S9  g Nr         r   )r   r   )
linestylesr$   subplotsr   r"   seedcontourrandnr/   r0   s     r   test_set_line_coll_dashrC   P   sB    llnGCIINN1 JJryyr2&K=JAr   c                  j   [         R                  " [        SS9   [        R                  " S/ 5        S S S 5        [         R                  " [        SS9   [        R                  " / S5        S S S 5        [        R                  " / / 5      n [         R                  " [        SS9   U R                  S5        S S S 5        [         R                  " [        SS9   U R                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nd= f! , (       d  f       g = f)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 
8	|;	7q 
8	7 
<	;	;	; 
8	7	7	7s/   C1D#DD$1
C?
D
D!$
D2line_dashesTg~jth?)remove_texttolc                  f    [         R                  " 5       u  pUR                  [        S5      SSS9  g )N
   r;      	linestylelw)r$   r>   plotrangerB   s     r   test_line_dashesrZ   e   s'     llnGCGGE"IG3r   c                  `   [         R                  " 5       u  pUR                  [        S5      SS9  UR                  [        S5      SS9  UR                  [        S5      SS9  UR                  [        S5      SS9  UR                  [        S5      SS9  U R                  R                  5         g )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                      [         R                  " / / 5      n [        R                  " [        5         U R                  S5        S S S 5        g ! , (       d  f       g = fNfoobar)r   r'   rG   rH   
ValueError	set_colorrL   s    r   test_valid_colorsrf   x   s6    ==R D	z	"x  
#	"	"   A
Ac                      [         R                  " 5       u  pSSSSSSSSS	S
S/ 44 H  nUR                  [        S5      US9  M     U R                  R                  5         g )N-solid--dashedz-.dashdot:dotted)r   N)r    r   rS   )rV   r_   )r/   r0   lss      r   test_linestyle_variantsrr   ~   s^    llnGCGT8YX'Ar7 	b	R(	
 JJOOr   c                      [         R                  " / / 5      n [        R                  " [        5         U R                  S5        S S S 5        g ! , (       d  f       g = f)Naardvark)r   r'   rG   rH   rd   set_linestylerL   s    r   test_valid_linestylesrv      s8    ==R D	z	":& 
#	"	"rg   zdrawstyle_variants.pngx86_64gQ?c                      [         R                  " S5      u  p/ SQn[        UR                  U5       H.  u  p4UR	                  [        S5      US9  UR                  SSS9  M0     g )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      sU     ||AHC
LC
 chh$
dr*
F( %r   )png)
extensionsc                    U R                  5       n[        R                  " S5      nUR                  US-   U5        UR                  5       n[        R
                  " 5       R                  SS5      nUR                  X3XBR                  -   S9  g )Nr}   g     @@        )	transform)add_subplotr   arangerX   mtransformsAffine2D	translate	transData)fig_reffig_testr0   r   ts        r   test_no_subslice_with_transformr      sn    				B
		$AGGAHa				B((5AGGAAllNG+r   c                      [         R                  " / / 5      n [        R                  " [        5         U R                  S5        S S S 5        g ! , (       d  f       g = frb   )r   r'   rG   rH   rd   set_drawstylerL   s    r   test_valid_drawstylesr      s8    ==R D	z	"8$ 
#	"	"rg   c                     [         R                  " SS[         R                  -  S5      n [         R                  " U 5      n[        R
                  " 5       u  p#UR                  X5      u  nUR                  S5        [        UR                  5       R                  5      S[        U 5      -  S-
  :X  d   eUR                  S5        [        UR                  5       R                  5      [        U 5      :X  d   eg )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GGAMED{#t}}''(Ac!fHQJ666y!t}}''(CF222r   line_collection_dashesmpl20g?)rP   stylerQ   c                      [         R                  " 5       u  p[        R                  R	                  S5        UR                  [        R                  R                  SS5      S/S9  g r8   r=   rB   s     r   test_set_line_coll_dash_imager      sB     llnGCIINN1JJryyr2&K=JAr   zmarker_fill_styles.png)rP   c                  6   [         R                  " / SQSSSSS[        R                  " / SQ5      /5      n Sn[        R                  " S	S	/5      n[        R                  " S
S/5      n[        R
                  " 5       u  pE[        S5       Hf  u  pg[        [        R                  R                  5       H:  u  p[        U 5      n
UR                  US-  U-   X(-   SUS-  -  -   USUU	U	SU
U
SS9  M<     Mh     UR                  S
S/5        UR                  SS/5        g )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	v}}778EALEGGAFQJa!e 4!!'/ $)$%  	' 9 2 KKCKKS	r   c                      [         R                  " / SQ[        SSS9SS9u  n U R                  5       S:X  d   eU R	                  5       S:X  d   eg)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            	         [         R                  " SS5      n [        R                  " 5       u  p/ SQn[	        [
        R                  S   5      n[        [        X45      5       HY  u  nu  pg[         R                  " SSS5       H5  nUR                  " X[         R                  " S5      -  SU-  -   4XhS	.UD6  M7     M[     g )
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!#k"679B++b"b)BGGB"''"+R/L2LL * 8r   c                  f   [         R                  " [        R                  " / SQ5      5      (       d   e[         R                  " [        R                  " S[        R                  S/5      5      (       d   e[         R                  " SS/[        R                  /S-  -   SS/-   5      (       a   e[         R                  " [        R                  " SS	/S
5      5      (       a   eS[
        R                  R                  -  n [        R                  " [        R                  /U -  [        U 5      5        g )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D..1v3/F!Q/OPPPP..rxx58I5/QRRRR	FMM222AHHbffX\58$r   c                     U R                  5       R                  SS/S5        UR                  5       R                  / SQ/ SQSSS/S9  g )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                   ^ ^^^ [         R                  R                  S5        [         R                  " SSS5      n[         R                  R	                  [        U5      5      nS SS/ SQSS/[        S	S
S5      [         R                  " [        U5      5      US:     SS/	n/ SQnUS:X  a  US S nUS S nU 4S jnU4S jnO\US:X  aV  [        T R                  SS5      R                  5      m[        TR                  SS5      R                  5      mU4S jnU4S jnU H
  n	W" X4U	S9  M     U HO  n	[         R                  " [        U	5      5      R                  [        5      R                  [        5      n
W" X4U
S9  MQ     g )N*   r   r         )r    rT   )r   rT      rT   rS   r    r   333333?)r   皙?)	111111111111111000100010001000100001000010010001000001001000000000000100000101010000011100011101101101101101111001010011011101r%   c          	      P   > TR                  [        R                  " XSUS95        g Nr   r   r   
add_artistr   r'   )r   r   r   r   s      r   add_test test_markevery.<locals>.add_test  s"    a3)DFr   c          	      P   > TR                  [        R                  " XSUS95        g r   r   )r   r   r   r   s      r   add_reftest_markevery.<locals>.add_ref  s"    a3)DFr   r   r   c                :   > [        T5      R                  XSUS9  g Nz-gDr   r   rX   )r   r   r   axs_tests      r   r  r  %  s    NeyAr   c                :   > [        T5      R                  XSUS9  g r  r	  )r   r   r   axs_refs      r   r  r  (  s    MqUi@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    sT    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 &  XXd4j!((-44T:# r   c            	         [         R                  " 5       n U R                  [        R                  " SS/SS/SSS95        [
        R                  " [        5         U R                  R                  5         S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r   )
r$   r%   r  r   r'   rG   rH   rd   r+   r,   )r/   s    r   .test_markevery_figure_line_unsupported_relsizer  3  sV    
**,CNN6==!Q!QrJK	z	"

 
#	"	"s   A>>
Bc                     [         R                  " 5       u  pUR                  / SQ[        S5      S9u  nU R                  R                  5         UR                  5       S:X  d   eUR                  S5        U R                  R                  5         UR                  [        S5      5        U R                  R                  5         [        R                  " SS/SS/SS	//5      nUR                  / S
Q[        U5      SS9u  nUR                  / SQUSS9u  n[        UR                  5       R                  UR                  5        [        UR                  5       R                  UR                  5        g )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            
         [         R                  R                  S5      n [        R                  " 5       u  pUR                  U R                  SS9SSSSSS	9  UR                  U R                  SS9S
SSSSSS9  UR                  SS9  g )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_linesr5  N  s    
))


)CLLNEAGGCKKRK 6q  -GGCKKRK 'AS  EII1Ir   c                     U R                  5       R                  SS// SQS9  UR                  5       R                  SS// SQS9  g )Nr   r    r   )dashes)r   r    r   r   r    r   )r   rX   r   s     r   test_odd_dashesr8  Y  sC    Ay91v.@Ar   c                  v   [         R                  " 5       u  p[        U R                  R                  S-  U R                  R
                  S-  S-   S9nUR                  SS/SS/SS9u  nUR                  U5      u  pEU(       a   eUR                  SS/SS/SSS	9u  nUR                  U5      u  pEU(       d   e[        US
   S/5        UR                  SS/SS/SS9u  nUR                  U5      u  pEU(       a   eUR                  S5        UR                  U5      u  pEU(       d   e[        US
   S/5        g )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_pickingrI  _  s+   llnGC!CHHNNa$7$'HHOOq$82$=?K ''1a&1a&'
.CB[[-NE9 ''1a&1a&"'
=CB[[-NEL5wu~s+ ''1a&1a&'
.CB[[-NE9b[[-NEL5wu~s+r   c                     [         R                  " SSS5      nU R                  5       R                  X"S5      u  n[	        S5      US S & UR                  S5        UR                  5       R                  / SQ/ SQSSS9  g )	Nr   ry   r    z.-r   r|   )r   r    r   r~   )r   r   r   rX   rY   r   )r   r   r   r1   s       r   test_input_copyrK  y  sl     			!QA					$	$Q4	0BA8AaDOOGy)TWMr   r   c                    SSS/ SQSS/[        SSS	5      S
SSSS/n[        R                  S   nU" [        R                  " SS[        U5      5      5      n[        R                  " SS5      nSUS-  -  nUR                  5       n[        U5       H  u  pUR                  Xh-
  SXU   S9  M     [        UUS9[        R                  S'   U R                  5       n
[        U5       H  u  pU
R                  Xh-
  S5        M     g)z*Test that we can set markevery prop_cycle.N   )r:   rM  )      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   r4  s               r   test_markevery_prop_cyclerX    s     1g|aW3Qc3&E ==D"++c3E
34F
BA	AqDA



C!%(	C ) .4e:@.BJ)* 
			B% 
t !r   c                      [         R                  " 5       u  pUR                  SSS9nUR                  SS5      nUR                  S5        UR	                  S5        UR                  S5        UR                  S5        UR                  5       S:X  d   eUR                  5       S:X  d   eUR                  5       S:X  d   eUR                  5       S:X  d   e[        R                  " [        R                  5         UR                  S	S
5        S S S 5        [        R                  " [        R                  5         UR                  SS5        S S S 5        [        R                  " [        SS9   UR                  S	S
5        S S S 5        [        R                  " [        SS9   UR	                  S5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Nd= f! , (       d  f       g = f)N)r   r   333333?slope)rS  r   )rR  r   g333333@)r   rR  )rZ  rS  rR  r   rS  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   warnsrT  MatplotlibDeprecationWarningrH   rd   )r/   r0   line1r$  s       r   test_axline_settersrg    s~   llnGCIIhcI*EIIh)E 
MM(	OOC	MM(	MM( ==?h&&&??###==?h&&&==?h&&&	c66	7b" 
8	c66	7b" 
8 
zM
Ob"
O 
zL
N
N 
N 
8	7	7	7
O 
O
N 
Ns0   :F<9G-G!G/<
G

G
G,/
G=c                      [         R                  " SSS9n U R                  5       R                  S5      nU R                  5       R                  S5      nUS   US   -
  nUS:  d   eUS:  d   eg)	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)rM   p1p2dys       r   test_axline_small_slopern    sl    ::fE*D					-	-f	5B					-	-f	5B	AAB6M6::r   )@__doc__r   platformr*   typesr   r   numpyr   numpy.testingr   rG   r   rT  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&  r5  r8  rI  rK  rX  rg  rn  rp   r   r   <module>r     sf      !   ,     ! *    + OG !(0 (0VB
 =/t?4 @4!' +,$#++-9atE	)E	) ), *,%
3 +,$g#++-9atEBEB +,$? @>- >")4M 5M% J J
 Hf#56))$ * 7)$XH( %&DH I B B
,4 N N ( )0>r   