Ë
    ¨eh¹:  ã                   ó¬   — d Z ddlZddlZddlZddlZddlmZ ddlZddlm	Z	 ddl
ZddlZddlmZmZ  ej                   e«      Zddœd„Z G d„ d	«      Zy)
aŠ  
Support for embedded TeX expressions in Matplotlib.

Requirements:

* LaTeX.
* \*Agg backends: dvipng>=1.6.
* PS backend: PSfrag, dvips, and Ghostscript>=9.0.
* PDF and SVG backends: if LuaTeX is present, it will be used to speed up some
  post-processing steps, but note that it is not used to parse the TeX string
  itself (only LaTeX is supported).

To enable TeX rendering of all text in your Matplotlib figure, set
:rc:`text.usetex` to True.

TeX and dvipng/dvips processing results are cached
in ~/.matplotlib/tex.cache for reuse between sessions.

`TexManager.get_rgba` can also be used to directly obtain raster output as RGBA
NumPy arrays.
é    N)ÚPath)ÚTemporaryDirectory)ÚcbookÚdviread©Úoptionc                ó&   — |�d|› d�nd}d| |dœz  S )a$  
    Output LaTeX code that loads a package (possibly with an option) if it
    hasn't been loaded yet.

    LaTeX cannot load twice a package with different options, so this helper
    can be used to protect against users loading arbitrary packages/options in
    their custom preamble.
    ú[ú]Ú z]\makeatletter\@ifpackageloaded{%(package)s}{}{\usepackage%(option)s{%(package)s}}\makeatother©Úpackager   © r   s     úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/matplotlib/texmanager.pyÚ_usepackage_if_not_loadedr   '   s1   € ð %Ð0ˆq��˜‰]°b€Fð	ð  vÑ.ñ	/ð /ó    c                   óò  — e Zd ZdZej
                  j                   ej                  «       d«      Z	i Z
dZi dd“dd“dd	“d
d“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“dd“ZdddddddddddddœZej                  d „ «       Zed!„ «       Zed"„ «       Zed0d$„«       Zed%„ «       Zed&„ «       Zed'„ «       Zed(„ «       Zed#d)œd*„«       Zed+„ «       Zed,„ «       Zed1d-„«       Zed2d.„«       Zed0d/„«       Zy#)3Ú
TexManagera  
    Convert strings to dvi files using TeX, caching the results to a directory.

    The cache directory is called ``tex.cache`` and is located in the directory
    returned by `.get_cachedir`.

    Repeated calls to this constructor always return the same instance.
    z	tex.cache)Úserifú
sans-serifÚcursiveÚ	monospaceúnew century schoolbookz\renewcommand{\rmdefault}{pnc}Úbookmanz\renewcommand{\rmdefault}{pbk}Útimesz\usepackage{mathptmx}Úpalatinoz\usepackage{mathpazo}úzapf chanceryz\usepackage{chancery}r   Úcharterz\usepackage{charter}r   r   r   Ú	helveticaz\usepackage{helvet}úavant gardez\usepackage{avant}Úcourierz\usepackage{courier}r   z\usepackage{type1ec}úcomputer modern romanúcomputer modern sans serifúcomputer modern typewriter)r   r   r   r   r   r   r   r    r!   r"   r#   r$   c                 óx   — t        | j                  «      j                  dd¬«       t        j	                  | «      S )NT©ÚparentsÚexist_ok)r   Ú	_texcacheÚmkdirÚobjectÚ__new__©Úclss    r   r,   zTexManager.__new__j   s-   € äˆS�]‰]Ó×!Ñ!¨$¸Ð!Ô>Ü�~‰~˜cÓ"Ð"r   c                 óh  — t         j                  d   }t        |«      dk(  r|d   j                  «       nd}t        |«      dk(  r|| j                  v r|dfS t        |«      dk(  r|| j
                  v r| j                  |   dfS t        j                  ddj                  | j                  «      «       y	)
z<Return the font family name and whether the font is reduced.úfont.familyé   r   NFTzXfont.family must be one of (%s) when text.usetex is True. serif will be used by default.ú, )r   F)
ÚmplÚrcParamsÚlenÚlowerÚ_font_familiesÚ_font_preamblesÚ_font_typesÚ_logÚinfoÚjoin)r.   ÚffÚff_vals      r   Ú_get_font_family_and_reducedz'TexManager._get_font_family_and_reducedo   s£   € ô �\‰\˜-Ñ(ˆÜ"% b£'¨Q¢,��A‘—‘”°DˆÜˆr‹7�aŠ<˜F c×&8Ñ&8Ñ8Ø˜5�=Ð Ü�‹W˜Š\˜f¨×(;Ñ(;Ñ;Ø—?‘? 6Ñ*¨DÐ0Ð0ä�I‰Ið =à—i‘i × 2Ñ 2Ó3ô5ð "r   c                 ó4  — | j                  «       \  }}i }| j                  D �]  }|r:||k(  r5| j                  t        j                  d   d   j                  «          ||<   Œ@t        j                  d|› �   }t        t        t        j
                  |«      «      D ]b  \  }}|| j                  v sŒ| j                  |   ||<   t        j                  d|| j                  |   ||   dj                  |d | «      «        ŒÝ t        j                  d|«       | j                  |   ||<   �Œ dD �ch c]  }||   ’Œ	 }	}|dk(  r|	j                  |d   «       |	j                  d	«       d
j                  t        |	«      «      }
|dk(  rdn|dk(  rdnd}|
|fS c c}w )Nr0   r   zfont.z.family: %s, package: %s, font: %s, skipped: %sr2   zPNo LaTeX-compatible font found for the %s fontfamily in rcParams. Using default.)r   r   r   r   z\usepackage{type1cm}ú
r   z	\sffamilyr   z	\ttfamilyz	\rmfamily)r?   r7   r8   r3   r4   r6   Ú	enumerateÚmapÚstrr:   Údebugr<   r;   ÚaddÚsorted)r.   Úrequested_familyÚis_reduced_fontÚ	preamblesÚfont_familyÚrcfontsÚiÚfontÚfamilyÚcmdÚpreambleÚfontcmds               r   Ú_get_font_preamble_and_commandz)TexManager._get_font_preamble_and_command~   sÄ  € à,/×,LÑ,LÓ,NÑ)Ð˜/àˆ	Ø×-Ñ-ó 	NˆKÙ ;Ð2BÒ#BØ),×)<Ñ)<Ü—L‘L Ñ/°Ñ2×8Ñ8Ó:ñ*<�	˜+Ò&ô Ÿ,™,¨¨{¨mÐ'<Ñ=�Ü(¬¬S¯Y©Y¸Ó)@ÓAò N‘G�A�tØ˜s×2Ñ2Ò2Ø14×1DÑ1DÀTÑ1J˜	 +Ñ.ÜŸ
™
ØLØ'¨×)<Ñ)<¸TÑ)BÀGÈAÁJØ ŸI™I g¨b¨q kÓ2ôñ
 ðNô —I‘Ið Cà)ô+ð .1×-@Ñ-@ÀÑ-M�I˜kÓ*ð'	Nð0 BöCØð ˜Ó ð Cˆð Cà˜yÒ(Ø�G‰G�I˜iÑ(Ô)Ø�‰Ð'Ô(Ø—9‘9œV C›[Ó)ˆØ#3°|Ò#C‘<Ø#3°{Ò#B‘<Øð 	ð ˜Ð Ð ùòCs   Ä/FNc                 ó’  — | j                  ||«      t        |«      z   }t        j                  |j	                  d«      d¬«      j                  «       }t        | j                  «      }d\  }}t        d||z  |«      D ]  }	|t        ||	|	dz    «      z  }Œ |j                  dd¬«       t        j                  j                  ||«      S )	zU
        Return a filename based on a hash of the string, fontsize, and dpi.
        úutf-8F)Úusedforsecurity)é   rW   r   rW   Tr&   )Ú_get_tex_sourcerD   ÚhashlibÚsha256ÚencodeÚ	hexdigestr   r)   Úranger*   ÚosÚpathr<   )
r.   ÚtexÚfontsizeÚdpiÚsrcÚfilehashÚfilepathÚnum_lettersÚ
num_levelsrM   s
             r   Úget_basefilezTexManager.get_basefile¥   s¿   € ð
 ×!Ñ! # xÓ0´3°s³8Ñ;ˆÜ—>‘>Ø�J‰J�wÓØ!ô
÷ ‰)‹+ð 	ô ˜Ÿ™Ó&ˆà"&Ñˆ�ZÜ�q˜+ jÑ0°+Ó>ò 	8ˆAØ¤$ x°°!°A±# Ó"7Ñ7‰Hð	8ð 	�‰˜t¨dˆÔ3Ü�w‰w�|‰|˜H hÓ/Ð/r   c                 ó,   — | j                  «       \  }}|S )zU
        Return a string containing font configuration for the tex preamble.
        )rS   )r.   Úfont_preambleÚcommands      r   Úget_font_preamblezTexManager.get_font_preamble¸   s   € ð
 "%×!CÑ!CÓ!EÑˆ�wØÐr   c                 ó(   — t         j                  d   S )z>Return a string containing user additions to the tex preamble.ztext.latex.preamble)r3   r4   r-   s    r   Úget_custom_preamblezTexManager.get_custom_preambleÀ   s   € ô �|‰|Ð1Ñ2Ð2r   c           "      óî   — | j                  «       \  }}d|z  }dj                  ddddd|dd	d
ddd| j                  «       ddt        dd¬«      ddt        d«      ddddddd|› d|› d�dd |› d!|› d�d"g«      S )#z;Return the complete TeX source for processing a TeX string.g      ô?rA   z\documentclass{article}z=% Pass-through \mathdefault, which is used in non-usetex modez>% to use the default text font but was historically suppressedz% in usetex mode.z \newcommand{\mathdefault}[1]{#1}z\usepackage[utf8]{inputenc}z.\DeclareUnicodeCharacter{2212}{\ensuremath{-}}z3% geometry is loaded before the custom preamble as z<% convert_psfrags relies on a custom preamble to change the z% geometry.z1\usepackage[papersize=72in, margin=1in]{geometry}z?% Use `underscore` package to take care of underscores in text.z?% The [strings] option allows to use underscores in file names.Ú
underscoreÚstringsr   z;% Custom packages (e.g. newtxtext) may already have loaded z"% textcomp with different options.Útextcompz\pagestyle{empty}z\begin{document}z>% The empty hbox ensures that a page is printed even for emptyz=% inputs, except when using psfrag which gets confused by it.z;% matplotlibbaselinemarker is used by dviread to detect thez% last line's baseline.z
\fontsize{z}{z}%z!\ifdefined\psfrag\else\hbox{}\fi%ú{ú z\end{document})rS   r<   rn   r   )r.   r`   ra   rj   rR   Úbaselineskips         r   rX   zTexManager._get_tex_sourceÅ   sÀ   € ð "%×!CÑ!CÓ!EÑˆ�wØ˜h‘ˆØ�y‰yØ&ØLØMØ Ø/ØØ*Ø=ØBØKØØ@Ø×#Ñ#Ó%ØNØNÜ% l¸9ÔEØJØ1Ü% jÓ1Ø ØØMØLØJØ&Ø˜8˜* D¨¨°cÐ:Ø0Ø�'�˜!˜C˜5 Ð$Øð;
ó ð 	r   c                 óˆ   — | j                  ||«      dz   }t        |«      j                  | j                  ||«      d¬«       |S )zv
        Generate a tex file to render the tex string at a specific font size.

        Return the file name.
        z.texrU   )Úencoding)rh   r   Ú
write_textrX   )r.   r`   ra   Útexfiles       r   Úmake_texzTexManager.make_texê   sI   € ð ×"Ñ" 3¨Ó1°FÑ:ˆÜˆW‹× Ñ  ×!4Ñ!4°S¸(Ó!CØ*1ð 	!ô 	3àˆr   ©Úcwdc                ó  — t         j                  t        j                  |«      «       	 t	        j
                  ||�|n| j                  t        j                  ¬«      }t         j                  |«       |S # t        $ r}t        d|d   › d�«      |‚d }~wt        j                  $ rc}t        dj                  |d   t        j                  |«      |j                  d«      |j                  j                  dd«      ¬	«      «      d ‚d }~ww xY w)
N)r|   Ústderrz*Failed to process string with tex because r   z could not be foundzŒ{prog} was not able to process the following string:
{tex!r}

Here is the full command invocation and its output:

{format_command}

{exc}

Úunicode_escaperU   Úbackslashreplace)ÚprogÚformat_commandr`   Úexc)r:   rE   r   Ú_pformat_subprocessÚ
subprocessÚcheck_outputr)   ÚSTDOUTÚFileNotFoundErrorÚRuntimeErrorÚCalledProcessErrorÚformatr[   ÚoutputÚdecode)r.   rk   r`   r|   Úreportrƒ   s         r   Ú_run_checked_subprocessz"TexManager._run_checked_subprocessö   s  € ä�
‰
”5×,Ñ,¨WÓ5Ô6ð	Ü×,Ñ,Ø C O™S¸¿¹Ü!×(Ñ(ô*ˆFô& 	�
‰
�6ÔØˆøô# !ò 	/ÜØ<¸WÀQ¹Z¸Lð I%ð %ó&à+.ð/ûô ×,Ñ,ò 	Üð÷ #™FØ  ™Ü#(×#<Ñ#<¸WÓ#EØŸ
™
Ð#3Ó4ØŸ
™
×)Ñ)¨'Ð3EÓFð	 #ó Hó
ð ð
ûð	ús$   ª4A5 Á5	D
Á>BÂD
Â'ADÄD
c                 óà  — | j                  ||«      }d|z  }t        j                  j                  |«      sªt	        | j                  ||«      «      }t	        |«      j                  }t        |¬«      5 }t	        |«      }| j                  dddd|j                  › �|j                  › g||¬«       |t	        |«      j                  z  j                  |«       ddd«       |S |S # 1 sw Y   |S xY w)	zm
        Generate a dvi file containing latex's layout of tex string.

        Return the file name.
        z%s.dvi)ÚdirÚlatexz-interaction=nonstopmodez--halt-on-errorz--output-directory=r{   N)rh   r^   r_   Úexistsr   rz   Úparentr   r�   ÚnameÚreplace)	r.   r`   ra   ÚbasefileÚdvifilery   r|   ÚtmpdirÚtmppaths	            r   Úmake_dvizTexManager.make_dvi  sê   € ð ×#Ñ# C¨Ó2ˆØ˜XÑ%ˆÜ�w‰w�~‰~˜gÔ&Ü˜3Ÿ<™<¨¨XÓ6Ó7ˆGô �w“-×&Ñ&ˆCÜ#¨Ô,ð @°Ü˜v›,�Ø×+Ñ+ØÐ8Ð:KØ*¨7¯<©<¨.Ð9ØŸ™�~ð(à),°#ð ,ô 7ð œ4 ›=×-Ñ-Ñ-×6Ñ6°wÔ?÷@ð ˆˆwˆ÷@ð ˆús   Á3A$C#Ã#C-c           
      óp  — | j                  |||«      }d|z  }t        j                  j                  |«      s~| j	                  ||«      }ddddt        |«      ddd||g
}t        t        d	d
«      r4t        j                  d«      j                  dk7  r|j                  dd«       | j                  ||«       |S )zp
        Generate a png file containing latex's rendering of tex string.

        Return the file name.
        z%s.pngÚdvipngz-bgÚTransparentz-Dz-TÚtightz-oÚ_called_from_pytestFz1.16r1   z--freetype0)rh   r^   r_   r“   r›   rD   Úgetattrr3   Ú_get_executable_infoÚraw_versionÚinsertr�   )r.   r`   ra   rb   r—   Úpngfiler˜   rP   s           r   Úmake_pngzTexManager.make_png.  s®   € ð ×#Ñ# C¨°3Ó7ˆØ˜XÑ%ˆä�w‰w�~‰~˜gÔ&Ø—l‘l 3¨Ó1ˆGØ˜U M°4¼¸S»Ø˜ $¨°ð:ˆCô œÐ2°EÔ:Ü×,Ñ,¨XÓ6×BÑBÀfÒLØ—
‘
˜1˜mÔ,Ø×'Ñ'¨¨SÔ1Øˆr   c                 ó¦  — |st         j                  d   }|st         j                  d   }| j                  ||«      |f}| j                  j	                  |«      }|€u| j                  |||«      }t         j                  j                  t        j                  j                  | j                  |«      «      }|dd…dd…df   x| j                  |<   }|S )zReturn the alpha channel.z	font.sizezsavefig.dpiNéÿÿÿÿ)r3   r4   rX   Ú_grey_arraydÚgetr¦   ÚimageÚimreadr^   r_   r<   r)   )r.   r`   ra   rb   ÚkeyÚalphar¥   Úrgbas           r   Úget_greyzTexManager.get_greyF  sµ   € ñ Ü—|‘| KÑ0ˆHÙÜ—,‘,˜}Ñ-ˆCØ×!Ñ! # xÓ0°#Ð5ˆØ× Ñ ×$Ñ$ SÓ)ˆØˆ=Ø—l‘l 3¨°#Ó6ˆGÜ—9‘9×#Ñ#¤B§G¡G§L¡L°·±ÀÓ$HÓIˆDØ,0²²A°r°©NÐ:ˆC×Ñ˜SÑ! EØˆr   c                 óÊ   — | j                  |||«      }t        j                  g |j                  ¢d‘­«      }t        j
                  j                  |«      |ddd…f<   ||d<   |S )a*  
        Return latex's rendering of the tex string as an RGBA array.

        Examples
        --------
        >>> texmanager = TexManager()
        >>> s = r"\TeX\ is $\displaystyle\sum_n\frac{-e^{i\pi}}{2^n}$!"
        >>> Z = texmanager.get_rgba(s, fontsize=12, dpi=80, rgb=(1, 0, 0))
        é   .Né   ).r¨   )r°   ÚnpÚemptyÚshaper3   ÚcolorsÚto_rgb)r.   r`   ra   rb   Úrgbr®   r¯   s          r   Úget_rgbazTexManager.get_rgbaU  sa   € ð —‘˜S (¨CÓ0ˆÜ�x‰xÐ)˜%Ÿ+™+Ð) qÑ)Ó*ˆÜŸ
™
×)Ñ)¨#Ó.ˆˆS�"�1�"ˆW‰ØˆˆW‰Øˆr   c                 ó<  — |j                  «       dk(  ry| j                  ||«      }|r|j                  d«      nd}t        j                  |d|z  «      5 }|\  }ddd«       j
                  |j                  |j                  z   |j                  fS # 1 sw Y   Œ9xY w)z-Return width, height and descent of the text.r   ©r   r   r   g      ð?r1   éH   N)Ústripr›   Úpoints_to_pixelsr   ÚDviÚwidthÚheightÚdescent)r.   r`   ra   Úrendererr˜   Údpi_fractionÚdviÚpages           r   Úget_text_width_height_descentz(TexManager.get_text_width_height_descentf  sŽ   € ð �9‰9‹;˜"ÒØØ—,‘,˜s HÓ-ˆÙ8@�x×0Ñ0°Ô4ÀaˆÜ�[‰[˜ " |Ñ"3Ó4ð 	¸Ø‰EˆD÷	ð �z‰z˜4Ÿ;™;¨¯©Ñ5°t·|±|ÐCÐC÷	ð 	ús   ÁBÂB)N)NN)NNr¼   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r^   r_   r<   r3   Úget_cachedirr)   r©   r7   r8   r9   Ú	functoolsÚ	lru_cacher,   Úclassmethodr?   rS   rh   rl   rn   rX   rz   r�   r›   r¦   r°   rº   rÈ   r   r   r   r   r   8   sV  „ ñð —‘—‘Ð-˜S×-Ñ-Ó/°Ó=€IØ€LàD€NðØ Ð"CðàÐ4ðð 	Ð)ðð 	Ð,ð	ð
 	Ð1ðð 	Ð+ðð 	Ð*ðð 	�ðð 	�bðð 	Ð+ðð 	Ð,ðð 	Ð*ðð  	Ð,ð!ð" 	 Ð!8ð#ð$ 	%Ð&=ð%ð& 	%Ð&=ð'€Oð, #*ØØØØ"ØØ!Ø#ØØ!(Ø&2Ø&1ñ€Kð ×Ññ#ó ð#ð ñ"ó ð"ð ñ$!ó ð$!ðL ò0ó ð0ð$ ñó ðð ñ3ó ð3ð ñ"ó ð"ðH ñ	ó ð	ð Ø:>ó ó ðð2 ñó ðð: ñó ðð. òó ðð òó ðð  ò	Dó ñ	Dr   r   )rÌ   rÎ   rY   Úloggingr^   Úpathlibr   r…   Útempfiler   Únumpyr´   Ú
matplotlibr3   r   r   Ú	getLoggerrÉ   r:   r   r   r   r   r   ú<module>r×      sT   ðñó, Û Û Û 	Ý Û Ý 'ã ã ß %à€w×Ñ˜Ó"€ð 26ô /÷"xDò xDr   