a
    s=ic$                     @   s   d Z ddlZddlmZ ddlmZ ddlmZmZ ddl	Z	ddl
mZmZ ddlZddlmZmZ ddlmZ G d	d
 d
ejejZdd Zi g fddZeede_G dd deZdddZdd Zdd Zdd ZdS )a  
A role and directive to display mathtext in Sphinx
==================================================

.. warning::
    In most cases, you will likely want to use one of `Sphinx's builtin Math
    extensions
    <https://www.sphinx-doc.org/en/master/usage/extensions/math.html>`__
    instead of this one.

Mathtext may be included in two ways:

1. Inline, using the role::

     This text uses inline math: :mathmpl:`\alpha > \beta`.

   which produces:

     This text uses inline math: :mathmpl:`\alpha > \beta`.

2. Standalone, using the directive::

     Here is some standalone math:

     .. mathmpl::

         \alpha > \beta

   which produces:

     Here is some standalone math:

     .. mathmpl::

         \alpha > \beta

Options
-------

The ``mathmpl`` role and directive both support the following options:

    fontset : str, default: 'cm'
        The font set to use when displaying math. See :rc:`mathtext.fontset`.

    fontsize : float
        The font size, in points. Defaults to the value from the extension
        configuration option defined below.

Configuration options
---------------------

The mathtext extension has the following configuration options:

    mathmpl_fontsize : float, default: 10.0
        Default font size, in points.

    mathmpl_srcset : list of str, default: []
        Additional image sizes to generate when embedding in HTML, to support
        `responsive resolution images
        <https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images>`__.
        The list should contain additional x-descriptors (``'1.5x'``, ``'2x'``,
        etc.) to generate (1x is the default and always included.)

    N)Path)nodes)	Directive
directives)ConfigErrorExtensionError)_apimathtext)validate_float_or_Nonec                   @   s   e Zd ZdS )
latex_mathN)__name__
__module____qualname__ r   r   m/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/matplotlib/sphinxext/mathmpl.pyr   P   s   r   c                 C   s   t | tjjS N)r   choicer	   ZMathTextParserZ_font_type_mapping)argr   r   r   fontset_choiceT   s    r   c           
      C   sZ   | d}||d d }t|}	||	d< |dd|	d< |dtjjj|	d< |	gg fS )N`   latexfontsetcmfontsize)findr   getsetupappconfigmathmpl_fontsize)
ZroleZrawtexttextlinenoZinlineroptionscontentir   noder   r   r   	math_roleX   s    
r(   r   r   c                   @   s2   e Zd ZdZdZdZdZdZee	dZ
dd ZdS )	MathDirectivezR
    The ``.. mathmpl::`` directive, as documented in the module's docstring.
    Tr   Fr)   c                 C   sN   d | j}t| j}||d< | jdd|d< | jdtjjj	|d< |gS )N r   r   r   r   )
joinr%   r   Z
block_textr$   r   r   r   r    r!   )selfr   r'   r   r   r   runq   s    
zMathDirective.runN)r   r   r   __doc__Zhas_contentZrequired_argumentsZoptional_argumentsZfinal_argument_whitespacer   r
   Zoption_specr.   r   r   r   r   r*   f   s   r*   r   
   d   c              	   C   sz   t ||dV ztjd|  d||dd}W n& tyV   td|   d}Y n0 W d    n1 sl0    Y  |S )N)zmathtext.fontsetz	font.size$Zpng)dpiformatz!Could not render math expression r   )mplZ
rc_contextr	   Zmath_to_image	Exceptionr   Zwarn_external)r   filenamer   r   r3   depthr   r   r   	latex2png|   s    
(r9   c                 C   s  t | jtj}| d }| d }| d }dt| | |   dd  }t	t
jjjdd}|jddd	 || d
 }t||||d}	g }
t
jjjD ]b}| d|dd d
}t||| ||dt|d d  d |
t
jjj d| d|  q|
r.dt
jjj d| dd|
 d }
|r:d}nd}|r\|	dkr\d|	d  }nd}dt
jjj d| d|
 | | d	S ) Nr   r   r   zmath-{}iZ_imagesmathmplT)parentsexist_okz.png)r   -._r1   r   )r   r3   z	/mathmpl/ zsrcset="z.png, z, z" r+   zclass="center" r   z)style="position: relative; bottom: -%dpx"r   z
<img src="z.png" z/>)
isinstanceparentr   TextElementr4   hashlibmd5encode	hexdigestr   r   r   builderZoutdirmkdirr9   r    mathmpl_srcsetreplacefloatappendZimgpathr,   )r'   sourceinliner   r   r   nameZdestdirdestr8   Zsrcsetsizer7   clsstyler   r   r   
latex2html   sN    $rU   c              	   C   sp   t | jjD ]^\}}|d dkrZzt|d d  W qj tyV   td|dY qj0 qtd|dqd S )Nr   xz,Invalid value for mathmpl_srcset parameter: ze. Must be a list of strings with the multiplicative factor followed by an "x".  e.g. ["2.0x", "1.5x"])	enumerater    rJ   rL   
ValueErrorr   )r   r    r&   rR   r   r   r   _config_inited   s    

rY   c                 C   s   | t _| ddd | dg d z| dt W n" tyT   | ddd  Y n0 d	d
 }dd }dd }dd }| jt||f||fd | dt	 | 
dt tjdk r| dt	 | 
dt ddd}|S )Nr!   g      $@TrJ   zconfig-initedzenv-updatedc                 S   s
   t | d S r   )rY   )r   envr   r   r   <lambda>       zsetup.<locals>.<lambda>c                 S   s"   | j jd }| jt|| d S )NrN   )document
attributesbodyrM   rU   )r-   r'   rN   r   r   r   visit_latex_math_html   s    z$setup.<locals>.visit_latex_math_htmlc                 S   s   d S r   r   r-   r'   r   r   r   depart_latex_math_html   s    z%setup.<locals>.depart_latex_math_htmlc                 S   sB   t |jtj}|r(| jd|d   n| jd|d dg d S )Nz$%s$r   z\begin{equation}z\end{equation})rA   rB   r   rC   r_   rM   extend)r-   r'   rO   r   r   r   visit_latex_math_latex   s    z%setup.<locals>.visit_latex_math_latexc                 S   s   d S r   r   ra   r   r   r   depart_latex_math_latex   s    z&setup.<locals>.depart_latex_math_latex)htmlr   r:   )r      math)Zparallel_read_safeZparallel_write_safe)r   r   Zadd_config_valueconnectrY   r   add_noder   Zadd_roler(   Zadd_directiver*   sphinxversion_info)r   r`   rb   rd   re   metadatar   r   r   r      s,    	

r   )r   r0   r1   )r/   rD   pathlibr   Zdocutilsr   Zdocutils.parsers.rstr   r   rk   Zsphinx.errorsr   r   Z
matplotlibr5   r   r	   Zmatplotlib.rcsetupr
   ZGeneralZElementr   r   r(   r$   r*   r9   rU   rY   r   r   r   r   r   <module>   s*   A


&