
    fJj`                        d dl Z d dl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	Z
d dl	mZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZm Z  d dl!m"Z"  e dgd      d        Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-e"d        Z.d Z/ e dgd      d        Z0 e dgd      d         Z1e
jd                  jg                  d!       ed"d#g$      d%               Z4e"d&        Z5d' Z6 e d(gd      d)        Z7d* Z8 e d+gd      d,        Z9 e d-gd      d.        Z: e d/gd      d0        Z; e d1gd      d2        Z<ejz                  j}                  d3d4d5g      d6        Z? e d7gd      d8        Z@ejz                  j                   ed9       d:;       e d<gd      d=               ZBejz                  j                   ed>       d?;       e d@gd      dA               ZCejz                  j                   edB       dC;       e dDgd      dE               ZDdF ZE ed"g$      dG        ZF ed"g$      dH        ZG ed"g$      dI        ZH ed"g$      dJ        ZI ed"g$      dK        ZJy)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                     dt         d<   dt         d<   dt         d<   dgt         d<   d	t         d
<   d} t        j                         \  }}|j                  d       |j	                  dd| ddd       |j                  dd       y )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      k/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/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                     t        t        j                               5 } | j                         dk(  sJ t	        j
                         \  }}|j                  g d       |j                  | d       | j                         dk(  sJ | j                          | j                         dk(  sJ 	 d d d        y # 1 sw Y   y xY w)Nr   )         pdfformatr+   r,   )r   ioBytesIOget_pagecountr    r!   plotsavefig)r.   r%   r&   s      r'   test_multipage_pagecountr6   ,   s    	"**,	3  "a''',,.R
	C&  "a'''  "a''' 
 		s   BB55B>c                  p   t        j                         } t        |       5 }t        d      D ]=  }t	        j
                         \  }}|j                  d       |j                  |d       ? 	 d d d        | j                         }|j                  d      dk(  sJ t        |      dk  sJ y # 1 sw Y   @xY w)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,,B5c                 (   | dz  }t        |      5 }	 d d d        |j                         rJ | dz  }t        |      5 }|j                  t        j                                d d d        |j                         sJ y # 1 sw Y   jxY w# 1 sw Y   (xY w)Nza.pdfzb.pdf)r   existsr5   r    figure)tmp_pathfnr.   s      r'   test_multipage_keep_emptyrF   C   su    	G	B	" 
yy{? 
G	B	"CJJL! 
99;; 
 
s   A<$B<BBc                  `   t        j                  t        j                  ddd      t        j                  ddd            \  } }t        j                  |dz        }t	        j
                         \  }}|j                  dd       |j                  |g d       |j                  |d d d	   g d
       dt        j                  d<   t        t        j                               5 }|j                  |d       t        |j                  j                        dk(  sJ 	 d d d        dt        j                  d<   t        t        j                               5 }|j                  |d       t        |j                  j                        dk(  sJ 	 d d d        y # 1 sw Y   {xY w# 1 sw Y   y xY w)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   sA    ;;ryyQ*BIIb!Q,?@DAq
qAvAllnGCKK1IIaI%IIa"glI+,0CLL()	"**,	3C&399$$%*** 
  -2CLL()	"**,	3C&399$$%*** 
 		 
 	 
 	s   %8F8F$F!$F-c                     t        j                  d      } t        j                  dt        j                        }t        j
                  d      |d d ddf<   dt        d<   t        j                         }|j                  |d       t        j                         }|j                  |d	d
       | j                  j                  |      5 }|j                  \  }|j                   j#                         \  }| j%                  |      }|j&                  sJ |j)                         }t        j*                  |j-                  d            }	d d d        t        j.                  j1                  |	       y # 1 sw Y   *xY w)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   A>E22E;c                    t        j                  d      }| j                  dd       t        j                         \  }}|j                  t        d             ddddt        j                  d	d
dt        j                  t        j                  d                  dd}t        j                         }|j                  ||d       |j                  j                  |      5 }|j                  j!                         D ci c]  \  }}|t#        |       }	}}d d d        	dddt$        j&                   ddddt$        j&                   dddd	k(  sJ y c c}}w # 1 sw Y   DxY w)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   |   sL   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,CKKbK/			#	#&)kk&7&7&9:&9da3q6	&9: 
 ,"3??"33KL)'//@A!
 
 
 
 ; 
	s   "E EEEE%c                     t        j                         \  } }t        j                  t        d      5  | j                  t        j                         dddi       d d d        t        j                  t        d      5  | j                  t        j                         ddd	i       d d d        t        j                  t        d
      5  | j                  t        j                         dddi       d d d        t        j                  t        d      5  | j                  t        j                         dddi       d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   nxY w# 1 sw Y   y xY w)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/   )E	?)E)E!)E-	EE!E*-E6c                 0   t        j                  d      }| j                  dd       t        j                         \  }}|j                  t        d             ddddt        j                  d	d
dt        j                  t        j                  d                  dd}t        j                         }t        ||      5 }|j                  |       |j                  |       d d d        |j                  j                  |      5 }|j                   j#                         D ci c]  \  }}|t%        |       }	}}d d d        	dddt&        j(                   ddddt&        j(                   dddd	k(  sJ y # 1 sw Y   xY wc c}}w # 1 sw Y   PxY w)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      sm   !!),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                     t        j                  d      } dt        j                  d      }|j	                  ddd d       |j	                  dd	d
 d       t        j                         5 }|j                  |d       | j                  j                  |      5 }|j                  d   j                  }dD ]X  \  }t        fd|D        d       }|J t        |dd       J |j                  d   t        j                   |      dz  k(  rXJ  	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)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   ^   K   | ]$  }|j                   j                    k(  s!| & y wNAURI).0afragmenttest_urls     r'   	<genexpr>z!test_text_urls.<locals>.<genexpr>   s*     M1!##''z(5L*LQs   "--
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+   4/D8#A3D,D,D8,D5	1D88Ec                  X   t        j                  d      } dt        j                  d      }|j	                  dddd        t        j                         5 }|j                  |d	
       | j                  j                  |      5 }|j                  d   j                  }t        fd|D        d       }|J t        |dd       J |j                  d   |j                  d   t!        j"                  d      z
  k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrY   r   )r+   r+   r   r   N-   )rotationr   r.   r/   r   c              3   X   K   | ]!  }|j                   j                   k(  s| # y wr   r   r   r   r   s     r'   r   z)test_text_rotated_urls.<locals>.<genexpr>  s#     ?FqaccggH:&>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 	A9DD D	D  D)c                  $   t        j                  d      } dt        j                  d      }|j	                  dddd d	
       t        j                         5 }|j                  |d       | j                  j                  |      5 }|j                  d   j                  }t        fd|D        d       }|J |j                  d   t        j                  d      dz  k(  sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NrY   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r.   r/   r   c              3   \   K   | ]#  }|j                   j                   d k(  s | % yw)r   Nr   r   s     r'   r   z%test_text_urls_tex.<locals>.<genexpr>  s(     BFqaccggH:S1A&AFs   !,,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C:)D:D	?DDc                     t        | dz        5 }|j                  t        j                                d d d        y # 1 sw Y   y xY w)Nz
unused.pdf)r   r5   r    rC   )rD   r.   s     r'   test_pdfpages_fspathr   &  s/    	(\)	*cCJJL! 
+	*	*s	   $<Azhatching_legend.pdfmpl20c                     t        j                  d      }t        ddgdddd      }t        ddgdddd      }|j                  ||||gg d       y	)
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   +  sW     **V
$C1a&!Q'@A1a&!Q&?A JJ1a|-.r)   zgrayscale_alpha.pdfc                  D   t         j                  ddddddf   \  } }t        j                  | dz  |dz  z          }t         j                  ||dk  <   t	        j
                         \  }}|j                  |dd       |j                  g        |j                  g        y)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$%DAq	!Q$A+	B&&BrBwKllnGCIIbXI6MM"MM"r)   defaultr.   eps)
extensionsc           	          | j                         }|j                          |j                  t        j                  t        j
                  ddd            dd       |j                         }|j                          y )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                      t        j                  dd       t        j                  t              5  t        j
                  t        j                         d       ddd       y# 1 sw Y   yxY w)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$$A-c                      t        j                         \  } }|j                  g g d       | j                  t	        j
                         d       y )NT)
rasterizedr.   r/   )r    r!   r4   r5   r1   r2   r   s     r'   test_empty_rasterizedr  V  s9    llnGCGGBtG$KK

UK+r)   zkerning.pdfc                      t        j                         } d}| j                  dd|d       | j                  dd|d       y )Nu   AVAVAVAVAVAVAVAV€AAVVr   g      ?rI   sizeg      ?   )r    rC   r#   )r%   r?   s     r'   test_kerningr  ]  s:    
**,C!AHHQQQHHHQQRH r)   c                  ^   t        t        d            } d}t        |       }|j                  |       |j	                         }|D ch c]  }|t        |          }}t        t        j                  | d      |      5 }t        t        |            }d d d        j                  |       |j	                         }h ||D 	ch c]  }	t        |	       c}	k(  sJ t        |      t        |      k  sJ |j                         |j                         k(  sJ y c c}w # 1 sw Y   xY wc c}	w )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1Ys1v&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D*D'zmulti_font_type3.pdfc                      t               \  } }t        j                  d| d       t        j                  dd       t        j                  d      }|j	                  d	d	|d
d
       y )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_type3r4    sW    *,OE8FF6%b)FF51
**V
$CHHS#x!)X  Gr)   zmulti_font_type42.pdfc                      t               \  } }t        j                  d| d       t        j                  dd       t        j                  d      }|j	                  d	d	|d
d
       y )Nr'  r(  r)  r.   *   r+  r-  r   r   r   r.  r/  r1  s      r'   test_multi_font_type42r7    sW    *,OE8FF6%b)FF52
**V
$CHHS#x!)X  Gr)   zttc_type3.pdfc            	      
   t        j                  dg      } t        t        j                  |             j                  dk7  rt        j                  d       ddg}t        j                  dd       t        j                  d	d
       t        j                  dt        |      dz  f      j                  t        |            }t        ||      D ]/  \  }}|j                  dd| dt        j                   |dd       1 y )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    r0  rC   r<   
subfigureszipr#   stringascii_uppercasefpr2  figsr'  r%   s        r'   test_ttc_type3rM    s    			#6"7	8BBKKO!!%5589 ":;EFF6FF51::q#e*q.12==c%jID%	ccdV2f&<&<%=>T%- 	 	K &r)   zttc_type42.pdfc            	      
   t        j                  dg      } t        t        j                  |             j                  dk7  rt        j                  d       ddg}t        j                  dd       t        j                  d	d
       t        j                  dt        |      dz  f      j                  t        |            }t        ||      D ]/  \  }}|j                  dd| dt        j                   |dd       1 y )Nr9  r:  r;  r<  r=  r'  r(  r  r.   r6  r+  r>  r,   r   r   r?  r   r@  rA  rJ  s        r'   test_ttc_type42rO    s    			#6"7	8BBKKO!!%5589 ":;EFF6FF52::q#e*q.12==c%jID%	ccdV2f&<&<%=>T%- 	 	K &r)   zfamily_name, file_name)z	Noto SanszNotoSans-Regular.otf)FreeMonozFreeMono.otfc                    t        j                  | g      }t        t        j                  |            j                  |k7  rt        j                  d|  d       t        j                  d| gd       t        j                         }|j                  ddd	       |j                  t        j                         d
       y )Nr:  zFont z may be missingr'     r)  g333333?gffffff?u   Привет мир!r.   r/   )r  rB  r   rC  rD  r_   rE  r    r0  rC   r#   r5   r1   r2   )family_name	file_namerK  r%   s       r'   test_otf_font_smokerU    s    
 
		;-	0BBKKO!!Y.eK=89FF6;-b1
**,CHHT501KK

UK+r)   ztruetype-conversion.pdfc                     dt         j                  d<   t        j                         \  }}|j	                  dddt        t              j                  dz  d       |j                  g        |j                  g        y )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[    sf     $%CLL llnGCGGAq'h&&);;b  JMM"MM"r)   
heuristicazLaTeX lacks heuristica package)reasonzfont-heuristica.pdfc                      dj                  d      t        j                  d<   t        j                         \  } }|j                  ddddd       |j                  g        |j                  g        y )	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_heuristicarg    sa    
 +/)) 5 +CLL&'
 llnGCGGC*4"GEMM"MM"r)   
DejaVuSanszLaTeX lacks DejaVuSans packagezfont-dejavusans.pdfc                     dj                  d      t        j                  d<   t        j                         \  } }|j                  ddddd       |j                  dd	d
dd       |j                  g        |j                  g        y )Nr_  )z\usepackage{DejaVuSans}r`  ra  rb  r   u   \textsf{ñäö ABCDabcd}Trc  rd  333333?z\textsf{fi ffl 1234}re  r   s     r'   test_font_dejavusansrk    sx    
 +/)) 5 +CLL&' llnGCGGC1$GLGGC-dRGHMM"MM"r)   charterzLaTeX lacks charter packagezfont-bitstream-charter.pdfc                     dj                  d      t        j                  d<   t        j                         \  } }|j                  ddddd       |j                  dd	d
dd       |j                  g        |j                  g        y )Nr_  )z\usepackage{charter}r`  ra  rb  r   u   åüš ABCDabcdTrc  rd  rj  zfi ffl 1234re  r   s     r'   test_font_bitstream_charterrn    sw     +/)) 5 +CLL&'
 llnGCGGC(GCGGCnTBG?MM"MM"r)   c                     t         j                  j                  d      } d}| j                  |      dz  }| j                  |      dz  }| j                  |      }t        j                         \  }}|j                  |||       |j                  dd       |j                  dd       t        j                         }|j                  |d       |j                         }t        j                  |       t        j                         \  }	}
|
j                  g g        |
j                  dd       |
j                  dd       t        j                         }|	j                  |d       |j                         }t        j                  |	       t        j                         \  }}|j                  |dz   |dz   |       |j                  dd       |j                  dd       t        j                         }|j                  |d       |j                         }t        j                  |       ||d	z   k  sJ d
| d| d       ||dz   kD  sJ d| d| d       ||dz   kD  sJ d| d| d       y)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    sM    ))


)CH

8r!A

8r!A

8A ID#KK1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                    t         j                  j                  d      }d}|j                  |      dz  }|j                  |      dz  }|j                  |      }| j                         }|j	                  |||d       |j                  dd       |j                  dd       |j                         }|j	                  |||d       |j                  dd       |j                  dd       y)	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.
    rp  r   rI   rc  r   r?   r   r8   N)rL   rs  rt  r!   ru  rP   rv  	r  r  ry  rz  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OOAqAO$QQ F
NN1a1N#
OOAr
OOArr)   c                    t         j                  j                  d      }d}|j                  |      dz  }|j                  |      dz  }|j                  |      dz  dz   }|j                  |      dz  dz   }t        j                  ||g      }t        j                  ||g      }	|j                  d|z        }
| j	                         }|j                  ||	|
d       |j                  dd       |j                  dd       |j	                         }|j                  |||
d	| d       |j                  dd       |j                  dd       y	)
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.
    rp  rc  rI      r,   r  r   r8   N)rL   rs  rt  concatenater!   ru  rP   rv  )r  r  ry  rz  x_ony_onx_offy_offr   r   r   r  r  s                r'   test_scatter_mixed_onoff_axisr  f  s5    ))


)C H::h!#D::h!#DJJx 1$r)EJJx 1$r)E
e}%A
e}%A

1x< A !GOOAqAO$QQ F
NN49HN4
OOAr
OOArr)   c                    t        j                  g d      }t        j                  g d      }t        j                  g d      }| j                         }|j                  |||d       |j	                  dd       |j                  dd       |j                         }|j                  |||d       |j	                  dd       |j                  dd       y)	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!   ru  rP   rv  )r  r  r   r   r   r  r  s          r'   'test_scatter_large_markers_partial_clipr    s     	!A
A
!A !GOOAqAO%QQ F
NN1a1N$
OOAr
OOArr)   c                 p   t         j                  j                  d      }d}d|j                  |      dz  z  }d|j                  |      dz  z  }|j                  |      }| j                         }|j	                  |||d       |j                  d       |j                  d       |j                  dd       |j                  dd       |j                         }|j	                  |||d       |j                  d       |j                  d       |j                  dd       |j                  dd       y	)
z
    Test scatter optimization with logarithmic scales.

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

8A !GOOAqAO$uuS$S$ F
NN1a1N#
e
e
OOC
OOCr)   c                    t         j                  j                  d      }d}|j                  |      dz  t         j                  z  }|j                  |      dz  }|j                  |      }| j	                  ddi      }|j                  |||d       |j                  d	d       |j	                  ddi      }|j                  |||d       |j                  d	d       y
)z~
    Test scatter optimization with polar coordinates.

    Ensures bounds checking works correctly in polar projections.
    rp  rc  r,   r-   
projectionpolar)
subplot_kwr  r   N)rL   rs  rt  pir!   ru  rv  )	r  r  ry  rz  thetarr   r  r  s	            r'   test_scatter_polarr    s     ))


)CHJJx 1$ruu,E

8q A

8A L'+BCGOOE1RO(Q ,)@AF
NN5!qBN'
OOAqr)   )Kr   r   r1   pathlibr   rH  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%  r4  r7  rM  rO  markparametrizerU  r[  skipifrg  rk  rn  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)   