o
    i                     @   sp   d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 eddd	 ZG d
d dZG dd de
ZdS )z7
Common functionality between the PDF and PS backends.
    N   )font_managerft2font)AFM)RendererBase2   c                 C   s6   t | d}t|W  d    S 1 sw   Y  d S )Nrb)openr   )fnamefh r   ^/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/matplotlib/backends/_backend_pdf_ps.py_cached_get_afm_from_fname   s   $r   c                   @   s@   e Zd ZdZdd Zejdedd Z	dd Z
d	d
 ZdS )CharacterTrackerz
    Helper for font subsetting by the pdf and ps backends.

    Maintains a mapping of font paths to the set of character codepoints that
    are being used from that font.
    c                 C   s
   i | _ d S N)usedselfr   r   r   __init__   s   
zCharacterTracker.__init__z3.3c                 C   s8   i }| j  D ]\}}tj|\}}||f||< q|S r   )r   itemsmplcbookget_realpath_and_stat)r   dr
   charsrealpathstat_keyr   r   r   used_characters   s
   z CharacterTracker.used_charactersc                 C   s6   t |tr|}n|j}| j|t tt| dS )z:Record that string *s* is being typeset using font *font*.N)	
isinstancestrr
   r   
setdefaultsetupdatemapord)r   fontsr
   r   r   r   track'   s   
 zCharacterTracker.trackc                 C   s,   |  D ]\}}| j|t | qdS )z5Update self with a font path to character codepoints.N)r   r   r    r!   r"   )r   otherr
   charsetr   r   r   merge0   s   zCharacterTracker.mergeN)__name__
__module____qualname____doc__r   r   r   
deprecatedpropertyr   r'   r*   r   r   r   r   r      s    
	r   c                       sT   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )RendererPDFPSBasec                    s   t    || _|| _d S r   )superr   widthheight)r   r3   r4   	__class__r   r   r   ;   s   

zRendererPDFPSBase.__init__c                 C      dS )NFr   r   r   r   r   flipy@      zRendererPDFPSBase.flipyc                 C   r7   )NTr   r   r   r   r   option_scale_imageD   r9   z$RendererPDFPSBase.option_scale_imagec                 C   s   t jd  S )Nzimage.composite_image)r   rcParamsr   r   r   r   option_image_nocompositeH   s   z*RendererPDFPSBase.option_image_nocompositec                 C   s   | j d | jd fS )Ng      R@)r3   r4   r   r   r   r   get_canvas_width_heightM   s   z)RendererPDFPSBase.get_canvas_width_heightc                 C   s
  |dkr|   }| }|j||| d\}}}|||fS |r.| j|d|}	|	j|	j|	jfS tj	| j
 rZ| |}
|
|\}}}}}| d }||9 }||9 }||9 }|||fS | |}
|
j|dtjd |
 \}}|
 }d}||9 }||9 }||9 }|||fS )NTeX)rendererH   i  g        )flagsg      ?)get_texmanagerget_size_in_pointsget_text_width_height_descentmathtext_parserparser3   r4   depthr   r;   _use_afm_rc_name_get_font_afmget_str_bbox_and_descent_get_font_ttfset_textr   LOAD_NO_HINTINGget_width_heightget_descent)r   r&   propismath
texmanagerfontsizewhr   rF   r%   lbscaler   r   r   rD   Q   s6   




z/RendererPDFPSBase.get_text_width_height_descentc                 C   s   t j|d| jd}t|S )Nafm)fontext	directory)r   findfont_afm_font_dirr   )r   rP   r
   r   r   r   rI   o   s   zRendererPDFPSBase._get_font_afmc                 C   s0   t |}t |}|  || d |S )Nr@   )r   r\   get_fontclearset_sizerC   )r   rP   r
   r%   r   r   r   rK   t   s
   

zRendererPDFPSBase._get_font_ttf)r+   r,   r-   r   r8   r:   r<   r=   rD   rI   rK   __classcell__r   r   r5   r   r1   6   s    r1   )r.   	functools
matplotlibr    r   r   rY   r   backend_basesr   	lru_cacher   r   r1   r   r   r   r   <module>   s    
#