from __future__ import annotations from typing import TYPE_CHECKING, Iterable, Optional, TypeVar, Union from collections.abc import Callable, Sequence from fontTools.misc.filesystem._base import FS from os import PathLike from xml.etree.ElementTree import Element as ElementTreeElement if TYPE_CHECKING: from fontTools.ufoLib import UFOFormatVersion from fontTools.ufoLib.glifLib import GLIFFormatVersion from lxml.etree import _Element as LxmlElement T = TypeVar("T") # Generic type K = TypeVar("K") # Generic dict key type V = TypeVar("V") # Generic dict value type GlyphNameToFileNameFunc = Optional[Callable[[str, set[str]], str]] ElementType = Union[ElementTreeElement, "LxmlElement"] FormatVersion = Union[int, tuple[int, int]] FormatVersions = Optional[Iterable[FormatVersion]] GLIFFormatVersionInput = Optional[Union[int, tuple[int, int], "GLIFFormatVersion"]] UFOFormatVersionInput = Optional[Union[int, tuple[int, int], "UFOFormatVersion"]] IntFloat = Union[int, float] KerningPair = tuple[str, str] KerningDict = dict[KerningPair, IntFloat] KerningGroups = dict[str, Sequence[str]] KerningNested = dict[str, dict[str, IntFloat]] PathStr = Union[str, PathLike[str]] PathOrFS = Union[PathStr, FS]