Skip to content

Code Generation

FunctionBase dataclass

Bases: ABC

Abstract base class for all code-generatable functions.

Subclasses must provide the header/source code fragments and any codegen constants needed to emit a complete C++ module via generate_module.

Source code in src/anvil/codegen/common.py
@dataclass(frozen=True)
class FunctionBase(ABC):
  """Abstract base class for all code-generatable functions.

  Subclasses must provide the header/source code fragments and any codegen constants
  needed to emit a complete C++ module via `generate_module`.
  """

  name: str

  @abstractmethod
  def __call__(self, *args, **kwargs) -> Any:
    pass

  def dependencies(self) -> "list[FunctionBase]":
    return []

  @property
  @abstractmethod
  def codegen_constants(self) -> set[CodegenIntConstant]: ...

  @property
  @abstractmethod
  def header_includes(self) -> set[str]: ...

  @property
  @abstractmethod
  def header_code(self) -> str: ...

  @property
  @abstractmethod
  def source_includes(self) -> set[str]: ...

  @property
  @abstractmethod
  def source_code(self) -> str: ...

FloatArray = NDArray[np.floating]