
    ^ja                        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m	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 Z0e%d        Z1d Z2 e#dgd      d        Z3 e#d gd      d!        Z4ejj                  jm                  d"       e"d#d$g%      d&               Z7e%d'        Z8d( Z9 e#d)gd      d*        Z:d+ Z; e#d,gd      d-        Z< e#d.gd      d/        Z= e#d0gd      d1        Z> e#d2gd      d3        Z?ej                  j                  d4d5d6g      d7        ZB e#d8gd      d9        ZCej                  j                   e d:       d;<       e#d=gd      d>               ZEej                  j                   e d?       d@<       e#dAgd      dB               ZFej                  j                   e dC       dD<       e#dEgd      dF               ZGdG ZH e"d#g%      dH        ZI e"d#g%      dI        ZJ e"d#g%      dJ        ZK e"d#g%      dK        ZL e"d#g%      dL        ZMy)M    N)Path)parse)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      l/var/www/ramen.bs-engineer-server.com/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_pagecountr7   -   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/   r0   s	   startxrefr,   i@  )r2   r3   r   ranger!   r"   r#   r6   getvaluecountlen)pdfior/   ir&   r'   ss         r(   test_multipage_properfinalizerA   8   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   existsr6   r!   figure)tmp_pathfnr/   s      r(   test_multipage_keep_emptyrG   D   s    	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/   r0   F)npmeshgridarangesinr!   r"   set_xlimimshowr   r   r2   r3   r6   r=   _file_images)XYZr&   r'   r/   s         r(   test_composite_imagerX   R   sQ    ;;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                  \  }t!        | j"                        t!        d      k  r|j$                  j'                         \  }n |j)                         j'                         \  }| j+                  |      }|j,                  sJ |j/                         }t        j0                  |j3                  d            }	d d d        t        j4                  j7                  |	       y # 1 sw Y   *xY w)Npikepdf)   r,   r.   )dtyper[   r   Tr   )resizer/   rD   )r1   dpiz10.9.0RGB)pytestimportorskiprM   zerosuint8rO   r   r!   rD   figimager2   r3   r6   Pdfopenpagesparse_version__version__imagesvalues
get_imagesPdfImageindexedas_pil_imageasarrayconverttestingassert_array_equal)
rZ   datar&   bufr/   pageimage	pdf_image	pil_imagergbs
             r(   test_indexed_imager{   e   sS   !!),G88Krxx0DIIcNDAqM"&H
**,CLLdL#
**,CKKExK0			#	 	3#		,,-h0GG[['')FE__&--/FE$$U+	    **,	jj**512	3 JJ!!$,	3 	3s   C F44F=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)NrZ   SOURCE_DATE_EPOCH0rJ   meMultipage PDF	Test pagetest,pdf,multipage  r   r,   r   tzinfoTrueAuthorTitleSubjectKeywordsModDateTrappedr/   )metadatar1   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`   ra   setenvr!   r"   r5   r:   datetimetimezone	timedeltar2   r3   r6   re   rf   docinfoitemsstrmplri   
monkeypatchrZ   r&   r'   mdru   r/   kvinfos
             r(   test_savefig_metadatar      sP   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,CKKbK/			#	 ;#&)kk&7&7&9:da3q6	::; ,"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)r1   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UserWarningr6   r2   r3   r&   r'   s     r(   test_invalid_metadatar      s;   llnGC	kA
C PBJJL(I9NOP 
kC
E 8BJJL'6 	 	88
 
kE
G MBJJL)U9KLM 
k)B	C JBJJL'4IJ JP P8 8
M MJ Js/   )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)NrZ   r}   r~   rJ   r   r   r   r   r   r   r,   r   r   r   r   )r   r   r   r   r   r   r   r   )r`   ra   r   r!   r"   r5   r:   r   r   r   r2   r3   r   r6   re   rf   r   r   r   r   ri   r   s
             r(   test_multipage_metadatar      sx   !!),G*C0llnGCGGE!H  ($$!Qx001C1CA1FGI
B **,C	#	# sCC 
		#	 ;#&)kk&7&7&9:da3q6	::; ,"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)NrZ   &https://test_text_urls.matplotlib.org/r-   r,   figsize皙?ztest plain 123plain)urlg?ztest mathtext $123$mathtextr/   r0   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)     M1!##''z(5L*LQMs   "--
QuadPointsr,   H   )r`   ra   r!   rD   r$   r2   r3   r6   re   rf   rg   AnnotsnextgetattrRectdecimalDecimal)	rZ   r&   fdr/   annotsyannotr   r   s	          @@r(   test_text_urlsr      sL   !!),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(????@	@@ @	@ 	@@ @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)NrZ   r   )r,   r,   r   r   N-   )rotationr   r/   r0   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"     ?qaccggH:&>?s   **r      z0.00001)r`   ra   r!   rD   r$   r2   r3   r6   re   rf   rg   r   r   r   r   r   r   r   rZ   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)NrZ   r   r   r   r   gffffff?ztest tex $123$Ttex)usetexr   r/   r0   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'     BqaccggH:S1A&ABs   !,,r,   z0.7r   )r`   ra   r!   rD   r$   r2   r3   r6   re   rf   rg   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   r6   r!   rD   )rE   r/   s     r(   test_pdfpages_fspathr   *  s8    	(\)	* "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!   rD   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)	rM   ogridexpnanr!   r"   rR   
set_xticks
set_yticks)xr   ddr&   r'   s        r(   test_grayscale_alphar   <  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 )NrI   rJ   d   r   r   c)add_subplotset_axis_offr5   rM   rP   linspace)fig_testfig_refax_testax_refs       r(   'test_pdf_eps_savefig_when_color_is_noner  H  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/   r0   N)r!   xlabelr`   raisesRuntimeErrorr6   r2   r3    r*   r(   test_failing_latexr  R  sG     JJz$'	|	$ 0BJJL/0 0 0s   *A$$A-c                      t        j                         \  } }|j                  g g d       | j                  t	        j
                         d       y )NT)
rasterizedr/   r0   )r!   r"   r5   r6   r2   r3   r   s     r(   test_empty_rasterizedr  Z  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      ?rJ   sizeg      ?   )r!   rD   r$   )r&   r@   s     r(   test_kerningr  a  s:    
**,C!AHHQQQHHHQQRH r*   c                  r   t        t        d            } d}t        |       }|j                  |       |j	                         }|D ch c]  }|t        |          }}t        t        j                  | d      |      5 }t        t        |j                              }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   fontchrr=   get_num_glyphs)
fpathchars	nosubfont	nosubcmapr   glyph_indicessubsetsubfontsubcmapkeys
             r(   test_glyphs_subsetr)  i  s   :;<E3E Iu%%'I 1661Ys1v&6M6	2;;ua0-	@ 5F,v{{345U!!#G U8G4SC4444 w<#i.((( !!#y'?'?'AAAA 75 5 5s   D#>D(D4(D1zmulti_font_type3.pdfc                      t               \  } }t        j                  d| d       t        j                  dd       t        j                  d      }|j	                  d	d	|d
d
       y )Nr     familyr  r/   r.   fonttyper   r   r   r   r   r   r   r   r!   rcrD   r$   fontstest_strr&   s      r(   test_multi_font_type3r7    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.  r0  r   r   r   r1  r2  r4  s      r(   test_multi_font_type42r:    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!   r3  rD   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% K	ccdV2f&<&<%=>T%- 	 	K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 )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% K	ccdV2f&<&<%=>T%- 	 	K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/   r0   )r  rE  r   rF  rG  r`   rH  r!   r3  rD   r$   r6   r2   r3   )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                     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_heuristicarj    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 )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    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 )Nrb  )z\usepackage{charter}rc  rd  re  r   u   åüš ABCDabcdTrf  rg  rm  zfi ffl 1234rh  r   s     r(   test_font_bitstream_charterrq    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,  r9   r   r     r/   r0   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)rM   randomdefault_rngr!   r"   scatterrQ   set_ylimr2   r3   r6   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.
    rs  r   rJ   rf  r   r@   r   r9   N)rM   rv  rw  r"   rx  rQ   ry  	r  r  r|  r}  r   r   r   r  r  s	            r(   #test_scatter_offaxis_colored_visualr  N  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.
    rs  rf  rJ      r-   r  r   r9   N)rM   rv  rw  concatenater"   rx  rQ   ry  )r  r  r|  r}  x_ony_onx_offy_offr   r   r   r  r  s                r(   test_scatter_mixed_onoff_axisr  j  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      %@rJ   )rJ   rJ   r  )g?r   g?i  r  r   r9   N)rM   arrayr"   rx  rQ   ry  )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.
    rs  rf  r9      r  logr   rt  N)	rM   rv  rw  r"   rx  
set_xscale
set_yscalerQ   ry  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.
    rs  rf  r-   r.   
projectionpolar)
subplot_kwr  r   N)rM   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OOE1RO(Q ,)@AF
NN5!qBN'
OOAqr*   )Nr   r   r2   pathlibr   rK  numpyrM   packaging.versionr   rh   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)   r7   rA   rG   rX   r{   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     	    4    , & O 4 ( E O 4 +,OD# E#&(	+&-6 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*   