
    
3j`                        S SK r S SK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	r
S SK	JrJrJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S SKJr  S S	KJrJr  S S
KJrJ r   S SK!J"r"  \ " S/SS9S 5       r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-\"S 5       r.S r/\ " S/SS9S 5       r0\ " S/SS9S  5       r1\
Rd                  Rg                  S!5      \" S"S#/S$9S% 5       5       r4\"S& 5       r5S' r6\ " S(/SS9S) 5       r7S* r8\ " S+/SS9S, 5       r9\ " S-/SS9S. 5       r:\ " S//SS9S0 5       r;\ " S1/SS9S2 5       r<\Rz                  R}                  S3S4S5/5      S6 5       r?\ " S7/SS9S8 5       r@\Rz                  R                  \" S95      (       + S:S;9\ " S</SS9S= 5       5       rB\Rz                  R                  \" S>5      (       + S?S;9\ " S@/SS9SA 5       5       rC\Rz                  R                  \" SB5      (       + SCS;9\ " SD/SS9SE 5       5       rDSF rE\" S"/S$9SG 5       rF\" S"/S$9SH 5       rG\" S"/S$9SI 5       rH\" S"/S$9SJ 5       rI\" S"/S$9SK 5       rJg)L    N)Path)pyplotrcParamsfont_manager)_get_data_path)FT2Font)get_glyphs_subsetfont_as_file)PdfPages)	Rectangle)_gen_multi_font_text_has_tex_package)check_figures_equalimage_comparison)needs_usetexzpdf_use14corefonts.pdf_classic_test)stylec            	          S[         S'   S[         S'   S[         S'   S/[         S'   S	[         S
'   Sn [        R                  " 5       u  pUR                  S5        UR	                  SSU SSSS9  UR                  SSS9  g )NTzpdf.use14corefontsz
sans-serifzfont.family   z	font.size	Helveticazfont.sans-serifr   pdf.compressionu   A three-line text positioned just above a blue line
and containing some French characters and the euro symbol:
"Merci pépé pour les 10 €"z0Test PDF backend with option use14corefonts=True      ?centerbottom   )horizontalalignmentverticalalignmentfontsize)	linewidth)r   pltsubplots	set_titletextaxhline)r#   figaxs      [/home/wildlama/miniconda3/lib/python3.13/site-packages/matplotlib/tests/test_backend_pdf.pytest_use14corefontsr(      s    %)H!"*H]H[#.-H"#H"D llnGCLLCDGGCd&   JJscJ"    c                     [        [        R                  " 5       5       n U R                  5       S:X  d   e[        R
                  " 5       u  pUR                  / SQ5        UR                  U SS9  U R                  5       S:X  d   eU R                  5         U R                  5       S:X  d   e S S S 5        g ! , (       d  f       g = f)Nr   )         pdfformatr+   r,   )r   ioBytesIOget_pagecountr    r!   plotsavefig)r.   r%   r&   s      r'   test_multipage_pagecountr6   ,   s    	"**,	3  "a''',,.
	C&  "a'''  "a''' 
 		s   BB66
Cc                  |   [         R                  " 5       n [        U 5       n[        S5       H;  n[        R
                  " 5       u  p4UR                  S5        UR                  USS9  M=     S S S 5        U R                  5       nUR                  S5      S:X  d   e[        U5      S:  d   eg ! , (       d  f       NG= f)N
   zThis is a long titler.   r/   s	   startxrefr+   i@  )r1   r2   r   ranger    r!   r"   r5   getvaluecountlen)pdfior.   ir%   r&   ss         r'   test_multipage_properfinalizer@   7   s    JJLE	%CrAllnGCLL/0KKEK*  

 	A77< A%%%q6E>> 
s   AB--
B;c                 R   U S-  n[        U5       n S S S 5        UR                  5       (       a   eU S-  n[        U5       nUR                  [        R                  " 5       5        S S S 5        UR                  5       (       d   eg ! , (       d  f       Nz= f! , (       d  f       N7= f)Nza.pdfzb.pdf)r   existsr5   r    figure)tmp_pathfnr.   s      r'   test_multipage_keep_emptyrF   C   sy    	G	B	" 
yy{{? 
G	B	"CJJL! 
99;;; 
 
s   B%B
B
B&c                  j   [         R                  " [         R                  " SSS5      [         R                  " SSS5      5      u  p[         R                  " US-  5      n[        R
                  " 5       u  p4UR                  SS5        UR                  U/ SQS9  UR                  US S S	2   / S
QS9  S[        R                  S'   [        [        R                  " 5       5       nUR                  USS9  [        UR                  R                  5      S:X  d   e S S S 5        S[        R                  S'   [        [        R                  " 5       5       nUR                  USS9  [        UR                  R                  5      S:X  d   e S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N   r+   r,   r   r-   )r   r+   r   r+   )extent)r,   r-   r   r+   Tzimage.composite_imager.   r/   F)npmeshgridarangesinr    r!   set_xlimimshowr   r   r1   r2   r5   r<   _file_images)XYZr%   r&   r.   s         r'   test_composite_imagerW   Q   s=    ;;ryyQ*BIIb!Q,?@DA
qAvAllnGCKK1IIaI%IIa"glI+,0CLL()	"**,	3C&399$$%*** 
  -2CLL()	"**,	3C&399$$%*** 
 		 
 	 
 	s   #6F6F$
F!$
F2c                  
   [         R                  " S5      n [        R                  " S[        R                  S9n[        R
                  " S5      US S 2SS4'   S[        S'   [        R                  " 5       nUR                  USS9  [        R                  " 5       nUR                  US	S
S9  U R                  R                  U5       nUR                  u  nUR                   R#                  5       u  nU R%                  U5      nUR&                  (       d   eUR)                  5       n[        R*                  " UR-                  S5      5      n	S S S 5        [        R.                  R1                  UW	5        g ! , (       d  f       N/= f)Npikepdf)   r+   r-   )dtyperZ   r   Tr   )resizer.   rC   )r0   dpiRGB)pytestimportorskiprL   zerosuint8rN   r   r    rC   figimager1   r2   r5   PdfopenpagesimagesvaluesPdfImageindexedas_pil_imageasarrayconverttestingassert_array_equal)
rY   datar%   bufr.   pageimage	pdf_image	pil_imagergbs
             r'   test_indexed_imagerw   d   s   !!),G88Krxx0DIIcNDAqM"&H
**,CLLdL#
**,CKKExK0			#	#		##%$$U+	    **,	jj**512 
 JJ!!$, 
	s   BE44
Fc                    [         R                  " S5      nU R                  SS5        [        R                  " 5       u  p#UR                  [        S5      5        SSSS[        R                  " S	S
S[        R                  " [        R                  " S5      5      S9SS.n[        R                  " 5       nUR                  XTSS9  UR                  R                  U5       nUR                  R!                  5        VVs0 s H  u  pxU[#        U5      _M     n	nnS S S 5        W	SSS[$        R&                   S3SSS[$        R&                   3SSSS.	:X  d   eg s  snnf ! , (       d  f       NJ= f)NrY   SOURCE_DATE_EPOCH0rI   meMultipage PDF	Test pagetest,pdf,multipage  r   r+   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr.   )metadatar0   D:19700101000000ZMatplotlib v, https://matplotlib.orgD:19680801000000ZMatplotlib pdf backend v/True	z/Authorz/CreationDatez/Creatorz	/Keywordsz/ModDatez	/Producerz/Subjectz/Titlez/Trapped)r_   r`   setenvr    r!   r4   r9   datetimetimezone	timedeltar1   r2   r5   rd   re   docinfoitemsstrmpl__version__
monkeypatchrY   r%   r&   mdrq   r.   kvinfos
             r'   test_savefig_metadatar   |   sF   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,CKKK/			#	#&)kk&7&7&9:&9da3q6	&9: 
 ,"3??"33KL)'//@A!
 
 
 
 ; 
	s    E>EEE
E+c                     [         R                  " 5       u  p[        R                  " [        SS9   U R                  [        R                  " 5       SSS0S9  S S S 5        [        R                  " [        SS9   U R                  [        R                  " 5       SSS	0S9  S S S 5        [        R                  " [        S
S9   U R                  [        R                  " 5       SSS0S9  S S S 5        [        R                  " [        SS9   U R                  [        R                  " 5       SSS0S9  S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       Ny= f! , (       d  f       g = f)Nz#Unknown infodict keyword: 'foobar'.)matchr.   foobarinvalid)r0   r   z%not an instance of datetime.datetime.r   z
1968-08-01z'not one of {"True", "False", "Unknown"}r   fooznot an instance of str.r   i  )r    r!   r_   warnsUserWarningr5   r1   r2   r%   r&   s     r'   test_invalid_metadatar      s   llnGC	kA
CBJJL(I9NO
C 
kC
EBJJL'6 	 	8
E
 
kE
GBJJL)U9KL
G 
k)B	CBJJL'4I 
D	C
C 
C
E 
E

G 
G 
D	Cs/   'D99'E
'E	'E,9
E

E
E),
E:c                 F   [         R                  " S5      nU R                  SS5        [        R                  " 5       u  p#UR                  [        S5      5        SSSS[        R                  " S	S
S[        R                  " [        R                  " S5      5      S9SS.n[        R                  " 5       n[        XTS9 nUR                  U5        UR                  U5        S S S 5        UR                  R                  U5       nUR                   R#                  5        VVs0 s H  u  pxU[%        U5      _M     n	nnS S S 5        W	SSS[&        R(                   S3SSS[&        R(                   3SSSS.	:X  d   eg ! , (       d  f       N= fs  snnf ! , (       d  f       N[= f)NrY   ry   rz   rI   r{   r|   r}   r~   r   r   r+   r   r   r   r   )r   r   r   r   r   r   r   r   )r_   r`   r   r    r!   r4   r9   r   r   r   r1   r2   r   r5   rd   re   r   r   r   r   r   r   s
             r'   test_multipage_metadatar      sg   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,C	#	#sCC 
$ 
		#	#&)kk&7&7&9:&9da3q6	&9: 
 ,"3??"33KL)'//@A!
 
 
 
 
$	#
 ; 
	s*   >#E;F"F:F;
F	F
F c                    ^^ [         R                  " S5      n Sm[        R                  " SS9nUR	                  SSST S3S9  UR	                  SS	S
T S3S9  [
        R                  " 5        nUR                  USS9  U R                  R                  U5       nUR                  S   R                  nS H^  u  nm[        UU4S jU 5       S 5      nUc   e[        USS 5      b   eUR                  S   [        R                   " U5      S-  :X  a  M^   e   S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrY   &https://test_text_urls.matplotlib.org/r,   r+   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr.   r/   r   ))z0.1r   )z0.4r   c              3   f   >#    U  H&  oR                   R                  T T 3:X  d  M"  Uv   M(     g 7fNAURI).0afragmenttest_urls     r'   	<genexpr>!test_text_urls.<locals>.<genexpr>   s)     M1##''z(5L*LQQs   !1	1
QuadPointsr+   H   )r_   r`   r    rC   r#   r1   r2   r5   rd   re   rf   AnnotsnextgetattrRectdecimalDecimal)	rY   r%   fdr.   annotsyannotr   r   s	          @@r'   test_text_urlsr      s+   !!),G7H
**V
$CHHS#'z-?H@HHS#,XJh2GHH	Bu%[[b!SYYq\((F  G8MM (((ulD9AAAzz!}(:R(????  G " 
 "! 
s+   .,D:A6D)D)D:)
D7	3D::
Ec                  j  ^ [         R                  " S5      n Sm[        R                  " SS9nUR	                  SSSST S9  [
        R                  " 5        nUR                  US	S
9  U R                  R                  U5       nUR                  S   R                  n[        U4S jU 5       S 5      nUc   e[        USS 5      c   eUR                  S   UR                  S   [         R"                  " S5      -
  :X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrY   r   )r+   r+   r   r   N-   )rotationr   r.   r/   r   c              3   `   >#    U  H#  oR                   R                  T :X  d  M  Uv   M%     g 7fr   r   r   r   r   s     r'   r   )test_text_rotated_urls.<locals>.<genexpr>  s"     ?FqccggH:&>Fs   .	.r      z0.00001)r_   r`   r    rC   r#   r1   r2   r5   rd   re   rf   r   r   r   r   r   r   r   rY   r%   r   r.   r   r   r   s         @r'   test_text_rotated_urlsr      s   !!),G7H
**V
$CHHS#sRzH;	Bu%[[b!SYYq\((F ?F?E $$$5,5AAA::a="W__Y%??@ @ @ " 
 "! 
s%   ,D$A>DD$
D!	D$$
D2c                  4  ^ [         R                  " S5      n Sm[        R                  " SS9nUR	                  SSSST S	3S
9  [
        R                  " 5        nUR                  USS9  U R                  R                  U5       nUR                  S   R                  n[        U4S jU 5       S 5      nUc   eUR                  S   [        R                  " S5      S-  :X  d   e S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NrY   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r.   r/   r   c              3   d   >#    U  H%  oR                   R                  T S 3:X  d  M!  Uv   M'     g7f)r   Nr   r   s     r'   r   %test_text_urls_tex.<locals>.<genexpr>  s'     BFqccggH:S1A&AFs    0	0r+   z0.7r   )r_   r`   r    rC   r#   r1   r2   r5   rd   re   rf   r   r   r   r   r   r   s         @r'   test_text_urls_texr     s    !!),G7H
**V
$CHHS#'XJc:JHK	Bu%[[b!SYYq\((F BFBE $$$::a=GOOE$:R$???? " 
 "! 
s%   ,D	A!C8'D	8
D	D		
Dc                     [        U S-  5       nUR                  [        R                  " 5       5        S S S 5        g ! , (       d  f       g = f)Nz
unused.pdf)r   r5   r    rC   )rD   r.   s     r'   test_pdfpages_fspathr   &  s/    	(\)	*cCJJL! 
+	*	*s	   %=
Azhatching_legend.pdfmpl20c                     [         R                  " SS9n[        SS/SSSSS9n[        SS/SSSSS9nUR                  X#X#// SQ5        g	)
z.Test for correct hatching on patches in legend)r+   r,   r   r   greenXXXX)	facecolorhatchblue) r   r   r   N)r    rC   r   legend)text_placeholdersr%   r   bs       r'   test_hatching_legendr   +  sS     **V
$C1a&!Q'@A1a&!Q&?A JJa|-.r)   zgrayscale_alpha.pdfc                  <   [         R                  SSS2SSS24   u  p[         R                  " U S-  US-  -   * 5      n[         R                  X"S:  '   [        R
                  " 5       u  p4UR                  USSS9  UR                  / 5        UR                  / 5        g)z9Masking images with NaN did not work for grayscale imagesr,   r   nonegray_r)interpolationcmapN)	rL   ogridexpnanr    r!   rQ   
set_xticks
set_yticks)xr   ddr%   r&   s        r'   test_grayscale_alphar   8  s     88BqGR"W$%DA	!Q$A+	B&&BBwKllnGCIIbXI6MM"MM"r)   defaultr.   eps)
extensionsc           	          U R                  5       nUR                  5         UR                  [        R                  " [        R
                  " SSS5      5      SSS9  UR                  5       nUR                  5         g )NrH   rI   d   r   r   c)add_subplotset_axis_offr4   rL   rO   linspace)fig_testfig_refax_testax_refs       r'   'test_pdf_eps_savefig_when_color_is_noner  D  s`     ""$GLLB3/0#L@  "F
r)   c                      [         R                  " SSS9  [        R                  " [        5         [         R
                  " [        R                  " 5       SS9  SSS5        g! , (       d  f       g= f)z"Test failing latex subprocess callz$22_2_2$T)r   r.   r/   N)r    xlabelr_   raisesRuntimeErrorr5   r1   r2    r)   r'   test_failing_latexr  N  s>     JJz$'	|	$BJJL/ 
%	$	$s   )A""
A0c                      [         R                  " 5       u  pUR                  / / SS9  U R                  [        R
                  " 5       SS9  g )NT)
rasterizedr.   r/   )r    r!   r4   r5   r1   r2   r   s     r'   test_empty_rasterizedr  V  s7    llnGCGGBtG$KK

UK+r)   zkerning.pdfc                  z    [         R                  " 5       n SnU R                  SSUSS9  U R                  SSUSS9  g )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?rI   sizeg      ?   )r    rC   r#   )r%   r?   s     r'   test_kerningr  ]  s:    
**,C!AHHQQQHHHQQRH r)   c                  z   [        [        S5      5      n Sn[        U 5      nUR                  U5        UR	                  5       nU Vs1 s H  oC[        U5         iM     nn[        [        R                  " U S5      U5       n[        [        U5      5      nS S S 5        WR                  U5        UR	                  5       n1 UkU V	s1 s H  n	[        U	5      iM     sn	:X  d   e[        U5      [        U5      :  d   eUR                  5       UR                  5       :X  d   eg s  snf ! , (       d  f       N= fs  sn	f )Nzfonts/ttf/DejaVuSerif.ttfz%these should be subsetted! 1234567890r   )r   r   r   set_textget_charmapordr	   fmFontPathr
   chrr<   get_num_glyphs)
fpathchars	nosubfont	nosubcmapr   glyph_indicessubsetsubfontsubcmapkeys
             r'   test_glyphs_subsetr(  e  s   :;<E3E Iu%%'I 1661s1v&M6	2;;ua0-	@F,v./ 
AU!!#G U8G4GSCG4444 w<#i.((( !!#y'?'?'AAAA 7	@	@ 5s   D"D'D8'
D5zmulti_font_type3.pdfc                      [        5       u  p[        R                  " SU SS9  [        R                  " SSS9  [        R                  " SS9nUR	                  S	S	US
S
S9  g )Nfont   familyr  r.   r-   fonttyper   r   r   r   r   r   r   r   r    rcrC   r#   fontstest_strr%   s      r'   test_multi_font_type3r7    sU    *,OEFF6%b)FF51
**V
$CHHS#x!)X  Gr)   zmulti_font_type42.pdfc                      [        5       u  p[        R                  " SU SS9  [        R                  " SSS9  [        R                  " SS9nUR	                  S	S	US
S
S9  g )Nr*  r+  r,  r.   *   r.  r0  r   r   r   r1  r2  r4  s      r'   test_multi_font_type42r:    sU    *,OEFF6%b)FF52
**V
$CHHS#x!)X  Gr)   zttc_type3.pdfc            
         [         R                  " S/S9n [        [         R                  " U 5      5      R                  S:w  a  [
        R                  " S5        SS/n[        R                  " SSS9  [        R                  " S	S
S9  [        R                  " S[        U5      S-  4S9R                  [        U5      5      n[        X5       H,  u  p4UR                  SSU S[        R                   3USSS9  M.     g )NWenQuanYi Zen Heir-  wqy-zenhei.ttc"Font wqy-zenhei.ttc may be missingWenQuanYi Zen Hei Monor*  r+  r  r.   r-   r.     r,   r   r   : r   r*  r   r   r  FontPropertiesr   findfontnamer_   skipr    r3  rC   r<   
subfigureszipr#   stringascii_uppercasefpr5  figsr*  r%   s        r'   test_ttc_type3rP    s    			#6"7	8BBKKO!!%5589 ":;EFF6FF51::q#e*q.12==c%jID%	cdV2f&<&<%=>T%- 	 	K &r)   zttc_type42.pdfc            
         [         R                  " S/S9n [        [         R                  " U 5      5      R                  S:w  a  [
        R                  " S5        SS/n[        R                  " SSS9  [        R                  " S	S
S9  [        R                  " S[        U5      S-  4S9R                  [        U5      5      n[        X5       H,  u  p4UR                  SSU S[        R                   3USSS9  M.     g )Nr<  r=  r>  r?  r@  r*  r+  r  r.   r9  r.  rA  r,   r   r   rB  r   rC  rD  rM  s        r'   test_ttc_type42rR    s    			#6"7	8BBKKO!!%5589 ":;EFF6FF52::q#e*q.12==c%jID%	cdV2f&<&<%=>T%- 	 	K &r)   zfamily_name, file_name)z	Noto SanszNotoSans-Regular.otf)FreeMonozFreeMono.otfc                    [         R                  " U /S9n[        [         R                  " U5      5      R                  U:w  a  [
        R                  " SU  S35        [        R                  " SU /SS9  [        R                  " 5       nUR                  SSS	5        UR                  [        R                  " 5       S
S9  g )Nr=  zFont z may be missingr*     r,  g333333?gffffff?u   Привет мир!r.   r/   )r  rE  r   rF  rG  r_   rH  r    r3  rC   r#   r5   r1   r2   )family_name	file_namerN  r%   s       r'   test_otf_font_smokerX    s    
 
		;-	0BBKKO!!Y.eK=89FF6;-b1
**,CHHT501KK

UK+r)   ztruetype-conversion.pdfc                     S[         R                  S'   [        R                  " 5       u  pUR	                  SSS[        [        5      R                  S-  SS9  UR                  / 5        UR                  / 5        g )Nr-   zpdf.fonttyper   ABCDEzdata/mpltest.ttfr   )r*  r   )
r   r   r    r!   r#   r   __file__parentr   r   )recwarnr%   r&   s      r'   test_truetype_conversionr^    sd     $%CLL llnGCGGAq'h&&);;b  JMM"MM"r)   
heuristicazLaTeX lacks heuristica package)reasonzfont-heuristica.pdfc                      SR                  S5      [        R                  S'   [        R                  " 5       u  pUR                  SSSSSS9  UR                  / 5        UR                  / 5        g )	N
)z\usepackage{heuristica}\usepackage[T1]{fontenc}\usepackage[utf8]{inputenc}text.latex.preambler   zBHTem fi ffl 1234T2   r   r   joinr   r   r    r!   r#   r   r   r   s     r'   test_font_heuristicarj    s_    
 +/)) 5 +CLL&'
 llnGCGGC*4"GEMM"MM"r)   
DejaVuSanszLaTeX lacks DejaVuSans packagezfont-dejavusans.pdfc                     SR                  S5      [        R                  S'   [        R                  " 5       u  pUR                  SSSSSS9  UR                  SS	S
SSS9  UR                  / 5        UR                  / 5        g )Nrb  )z\usepackage{DejaVuSans}rc  rd  re  r   u   \textsf{ñäö ABCDabcd}Trf  rg  333333?z\textsf{fi ffl 1234}rh  r   s     r'   test_font_dejavusansrn    sv    
 +/)) 5 +CLL&' llnGCGGC1$GLGGC-dRGHMM"MM"r)   charterzLaTeX lacks charter packagezfont-bitstream-charter.pdfc                     SR                  S5      [        R                  S'   [        R                  " 5       u  pUR                  SSSSSS9  UR                  SS	S
SSS9  UR                  / 5        UR                  / 5        g )Nrb  )z\usepackage{charter}rc  rd  re  r   u   åüš ABCDabcdTrf  rg  rm  zfi ffl 1234rh  r   s     r'   test_font_bitstream_charterrq    su     +/)) 5 +CLL&'
 llnGCGGC(GCGGCnTBG?MM"MM"r)   c                     [         R                  R                  S5      n SnU R                  U5      S-  nU R                  U5      S-  nU R                  U5      n[        R                  " 5       u  pVUR                  X#US9  UR                  SS5        UR                  SS5        [        R                  " 5       nUR                  USS9  UR                  5       n[        R                  " U5        [        R                  " 5       u  pU
R                  / / 5        U
R                  SS5        U
R                  SS5        [        R                  " 5       nU	R                  USS9  UR                  5       n[        R                  " U	5        [        R                  " 5       u  pUR                  US-   US-   US9  UR                  SS5        UR                  SS5        [        R                  " 5       nUR                  USS9  UR                  5       n[        R                  " U5        XS	-   :  d   S
U SU S35       eUUS-   :  d   SU SU S35       eUUS-   :  d   SU SU S35       eg)a  
Test that off-axis scatter plots with per-point colors don't bloat PDFs.

Regression test for issue #2488. When scatter points with per-point colors
are completely outside the visible axes, the PDF backend should skip
writing those markers to significantly reduce file size.
!N,  r8   r   r     r.   r/   i  zOff-axis colored scatter PDF (z< bytes) is too large. Expected close to empty scatter size (z- bytes). Markers may not be properly skipped.i:  zVisible scatter PDF (z* bytes) should be much larger than empty (z bytes) to validate the test.z- bytes) should be much larger than off-axis (z! bytes) to validate optimization.N)rL   randomdefault_rngr    r!   scatterrP   set_ylimr1   r2   r5   tellclose)rngn_pointsr   r   r   fig1ax1buf1size_offaxis_coloredfig2ax2buf2
size_emptyfig3ax3buf3size_visibles                    r'   %test_scatter_offaxis_colored_pdf_sizer    sC    ))


)CH

8r!A

8r!A

8A IDKKKLLRLLR::<DLLeL$99;IIdO IDKKBLLRLLR::<DLLeL$JIIdO IDKKBB!K$LLRLLR::<DLLeL$99;LIIdO  u"44 
()=(> ?11; =/	04 *v-- 
~ .!l"?	A- .77 
~ ..//P	R7r)   c                    [         R                  R                  S5      nSnUR                  U5      S-  nUR                  U5      S-  nUR                  U5      nU R                  5       nUR	                  XEUSS9  UR                  SS5        UR                  SS5        UR                  5       nUR	                  XEUSS9  UR                  SS5        UR                  SS5        g)	z
Test that on-axis scatter with per-point colors still renders correctly.

Ensures the optimization for off-axis markers doesn't break normal
scatter rendering.
rs  r   rI   rf  r   r?   r   r8   N)rL   rv  rw  r!   rx  rP   ry  	r  r  r|  r}  r   r   r   r  r  s	            r'   #test_scatter_offaxis_colored_visualr  J  s     ))


)CH

8q A

8q A

8A !GOOAAO$QQ F
NN11N#
OOAr
OOArr)   c                    [         R                  R                  S5      nSnUR                  U5      S-  nUR                  U5      S-  nUR                  U5      S-  S-   nUR                  U5      S-  S-   n[         R                  " XF/5      n[         R                  " XW/5      n	UR                  SU-  5      n
U R	                  5       nUR                  XU
SS9  UR                  SS5        UR                  SS5        UR	                  5       nUR                  XEU
S	U SS9  UR                  SS5        UR                  SS5        g	)
z
Test scatter with some points on-axis and some off-axis.

Ensures the optimization correctly handles the common case where only
some markers are outside the visible area.
rs  rf  rI      r,   r  r   r8   N)rL   rv  rw  concatenater!   rx  rP   ry  )r  r  r|  r}  x_ony_onx_offy_offr   r   r   r  r  s                r'   test_scatter_mixed_onoff_axisr  f  s-    ))


)C H::h!#D::h!#DJJx 1$r)EJJx 1$r)E
}%A
}%A

1x< A !GOOAAO$QQ F
NN49HN4
OOAr
OOArr)   c                    [         R                  " / SQ5      n[         R                  " / SQ5      n[         R                  " / SQ5      nU R                  5       nUR                  X#USS9  UR	                  SS5        UR                  SS5        UR                  5       nUR                  X#USS9  UR	                  SS5        UR                  SS5        g)	z
Test that large markers are rendered when partially visible.

Addresses reviewer concern: markers with centers outside the canvas but
with edges extending into the visible area should still be rendered.
)      g      %@rI   )rI   rI   r  )g?r   g?i  r  r   r8   N)rL   arrayr!   rx  rP   ry  )r  r  r   r   r   r  r  s          r'   'test_scatter_large_markers_partial_clipr    s     	!A
A
!A !GOOAAO%QQ F
NN11N$
OOAr
OOArr)   c                 `   [         R                  R                  S5      nSnSUR                  U5      S-  -  nSUR                  U5      S-  -  nUR                  U5      nU R                  5       nUR	                  XEUSS9  UR                  S5        UR                  S5        UR                  SS5        UR                  SS5        UR                  5       nUR	                  XEUSS9  UR                  S5        UR                  S5        UR                  SS5        UR                  SS5        g	)
z}
Test scatter optimization with logarithmic scales.

Ensures bounds checking works correctly in log-transformed coordinates.
rs  rf  r8      r  logr   rt  N)	rL   rv  rw  r!   rx  
set_xscale
set_yscalerP   ry  r  s	            r'   test_scatter_logscaler    s    ))


)C H
szz(#a'(A
szz(#a'(A

8A !GOOAAO$uuS$S$ F
NN11N#
e
e
OOC
OOCr)   c                    [         R                  R                  S5      nSnUR                  U5      S-  [         R                  -  nUR                  U5      S-  nUR                  U5      nU R	                  SS0S9nUR                  XEUSS9  UR                  S	S5        UR	                  SS0S9nUR                  XEUSS9  UR                  S	S5        g
)zr
Test scatter optimization with polar coordinates.

Ensures bounds checking works correctly in polar projections.
rs  rf  r,   r-   
projectionpolar)
subplot_kwr  r   N)rL   rv  rw  pir!   rx  ry  )	r  r  r|  r}  thetarr   r  r  s	            r'   test_scatter_polarr    s     ))


)CHJJx 1$ruu,E

8q A

8A L'+BCGOOERO(Q ,)@AF
NN5qBN'
OOAqr)   )Kr   r   r1   pathlibr   rK  numpyrL   r_   
matplotlibr   r   r    r   r   r  matplotlib.cbookr   matplotlib.ft2fontr   #matplotlib.backends._backend_pdf_psr	   r
   matplotlib.backends.backend_pdfr   matplotlib.patchesr   matplotlib.testingr   r   matplotlib.testing.decoratorsr   r   matplotlib.testing._markersr   r(   r6   r@   rF   rW   rw   r   r   r   r   r   r   r   r   r   r   contextr  r  r  r  r(  r7  r:  rP  rR  markparametrizerX  r^  skipifrj  rn  rq  r  r  r  r  r  r  r  r)   r'   <module>r     s     	       , & O 4 ( E O 4 +,OD# E#&(	+&-0 FJ("J@6@4 @ @0"
 ()9	/ :	/ ()A B 9/ 0  0 0, =/1! 2!B4 )*':G ;G *+7;G <G ?#73K 4K #$G4K 5K 1?689
,9
, ,-W= > (66;  =()A
 B=
 (66;  =()A B= (338  :/0H
 I:
DN ( )6 ( )B ( )6 ( )> ( )r)   