"""
This type stub file was generated by pyright.
"""

import os
from dataclasses import dataclass
from matplotlib._afm import AFM
from matplotlib import ft2font
from pathlib import Path
from collections.abc import Iterable
from typing import Any, Literal

font_scalings: dict[str | None, float]
stretch_dict: dict[str, int]
weight_dict: dict[str, int]
font_family_aliases: set[str]
MSFolders: str
MSFontDirectories: list[str]
MSUserFontDirectories: list[str]
X11FontDirectories: list[str]
OSXFontDirectories: list[str]
def get_fontext_synonyms(fontext: str) -> list[str]:
    ...

def list_fonts(directory: str, extensions: Iterable[str]) -> list[str]:
    ...

def win32FontDirectory() -> str:
    ...

def findSystemFonts(fontpaths: Iterable[str | os.PathLike | Path] | None = ..., fontext: str = ...) -> list[str]:
    ...

@dataclass
class FontEntry:
    fname: str = ...
    name: str = ...
    style: str = ...
    variant: str = ...
    weight: str | int = ...
    stretch: str = ...
    size: str = ...


def ttfFontProperty(font: ft2font.FT2Font) -> FontEntry:
    ...

def afmFontProperty(fontpath: str, font: AFM) -> FontEntry:
    ...

class FontProperties:
    def __init__(self, family: str | Iterable[str] | None = ..., style: Literal["normal", "italic", "oblique"] | None = ..., variant: Literal["normal", "small-caps"] | None = ..., weight: int | str | None = ..., stretch: int | str | None = ..., size: float | str | None = ..., fname: str | os.PathLike | Path | None = ..., math_fontfamily: str | None = ...) -> None:
        ...
    
    def __hash__(self) -> int:
        ...
    
    def __eq__(self, other: object) -> bool:
        ...
    
    def get_family(self) -> list[str]:
        ...
    
    def get_name(self) -> str:
        ...
    
    def get_style(self) -> Literal["normal", "italic", "oblique"]:
        ...
    
    def get_variant(self) -> Literal["normal", "small-caps"]:
        ...
    
    def get_weight(self) -> int | str:
        ...
    
    def get_stretch(self) -> int | str:
        ...
    
    def get_size(self) -> float:
        ...
    
    def get_file(self) -> str | bytes | None:
        ...
    
    def get_fontconfig_pattern(self) -> dict[str, list[Any]]:
        ...
    
    def set_family(self, family: str | Iterable[str] | None) -> None:
        ...
    
    def set_style(self, style: Literal["normal", "italic", "oblique"] | None) -> None:
        ...
    
    def set_variant(self, variant: Literal["normal", "small-caps"] | None) -> None:
        ...
    
    def set_weight(self, weight: int | str | None) -> None:
        ...
    
    def set_stretch(self, stretch: int | str | None) -> None:
        ...
    
    def set_size(self, size: float | str | None) -> None:
        ...
    
    def set_file(self, file: str | os.PathLike | Path | None) -> None:
        ...
    
    def set_fontconfig_pattern(self, pattern: str) -> None:
        ...
    
    def get_math_fontfamily(self) -> str:
        ...
    
    def set_math_fontfamily(self, fontfamily: str | None) -> None:
        ...
    
    def copy(self) -> FontProperties:
        ...
    
    set_name = ...
    get_slant = ...
    set_slant = ...
    get_size_in_points = ...


def json_dump(data: FontManager, filename: str | Path | os.PathLike) -> None:
    ...

def json_load(filename: str | Path | os.PathLike) -> FontManager:
    ...

class FontManager:
    __version__: int
    default_size: float | None
    defaultFamily: dict[str, str]
    afmlist: list[FontEntry]
    ttflist: list[FontEntry]
    def __init__(self, size: float | None = ..., weight: str = ...) -> None:
        ...
    
    def addfont(self, path: str | Path | os.PathLike) -> None:
        ...
    
    @property
    def defaultFont(self) -> dict[str, str]:
        ...
    
    def get_default_weight(self) -> str:
        ...
    
    @staticmethod
    def get_default_size() -> float:
        ...
    
    def set_default_weight(self, weight: str) -> None:
        ...
    
    def score_family(self, families: str | list[str] | tuple[str], family2: str) -> float:
        ...
    
    def score_style(self, style1: str, style2: str) -> float:
        ...
    
    def score_variant(self, variant1: str, variant2: str) -> float:
        ...
    
    def score_stretch(self, stretch1: str | int, stretch2: str | int) -> float:
        ...
    
    def score_weight(self, weight1: str | float, weight2: str | float) -> float:
        ...
    
    def score_size(self, size1: str | float, size2: str | float) -> float:
        ...
    
    def findfont(self, prop: str | FontProperties, fontext: Literal["ttf", "afm"] = ..., directory: str | None = ..., fallback_to_default: bool = ..., rebuild_if_missing: bool = ...) -> str:
        ...
    
    def get_font_names(self) -> list[str]:
        ...
    


def is_opentype_cff_font(filename: str) -> bool:
    ...

def get_font(font_filepaths: Iterable[str | Path | bytes] | str | Path | bytes, hinting_factor: int | None = ...) -> ft2font.FT2Font:
    ...

fontManager: FontManager
def findfont(prop: str | FontProperties, fontext: Literal["ttf", "afm"] = ..., directory: str | None = ..., fallback_to_default: bool = ..., rebuild_if_missing: bool = ...) -> str:
    ...

def get_font_names() -> list[str]:
    ...

