import os
from typing import Callable, Literal, final

class HardwareDescriptionLanguage:
    def __init__(
        self,
        module_name: str,
        lib: str,
        ipc: Literal["sock", "zmq"],
        module_dir: str = ...,
        lib_dir: str = ...,
        desc: str = ...,
    ) -> None: ...
    def __get_comp_defs(self) -> dict[str, str]: ...
    def __generate_comp_str(self) -> str: ...
    def __generate_driver_str(self) -> str: ...
    def _get_driver_inputs(self) -> str: ...
    def _get_driver_outputs(self) -> str: ...
    def _get_driver_defs(self) -> str: ...
    def _compute_signal_buffer_len(
        self, signal_type: str, signal_len: int
    ) -> int: ...
    @staticmethod
    def _sig_fmt(
        fmt: str,
        split_func: Callable[[dict[str, str]], dict[str, str]],
        array: list[dict[str, str | int]],
        delim: str,
    ) -> str: ...
    def _get_signal_width_from_macro(
        self, signal_type: str, signal_type_macro: str
    ) -> str: ...
    def _get_all_ports(self) -> list[dict[str, str | int]]: ...
    def _get_input_ports(self) -> list[dict[str, str | int]]: ...
    def _get_output_ports(self) -> list[dict[str, str | int]]: ...
    @staticmethod
    def _get_num_digits(signal: int) -> int: ...
    def set_template_paths(
        self,
        template_dir_path: os.PathLike = ...,
        driver_template_path: os.PathLike = ...,
        component_template_path: os.PathLike = ...,
    ) -> None: ...
    def set_gen_paths(
        self,
        gen_dir_path: os.PathLike = ...,
        driver_path: os.PathLike = ...,
        comp_path: os.PathLike = ...,
    ) -> None: ...
    @final
    def fixed_width_float_output(self, precision: int) -> None: ...
    @final
    def disable_runtime_warnings(self, warnings: str | list[str]) -> None: ...
    @final
    def set_width_macros(self, width_macros: dict[str, int]) -> None: ...
    @final
    def set_ports(
        self,
        ports: dict[str, str | dict[str, str | list[dict[str, str | int]]]],
    ) -> None: ...
    @final
    def generate_boilerplate(self) -> None: ...
