diff --git a/pyproject.toml b/pyproject.toml index a89335b01..dc5288c6d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,11 @@ dependencies = [ readme = "README.md" requires-python = ">= 3.10" +[project.optional-dependencies] +pydantic = [ + "pydantic>=2.9.2", +] + [build-system] requires = ["hatchling"] build-backend = "hatchling.build" diff --git a/src/kirin/schema/__init__.py b/src/kirin/schema/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/kirin/schema/ir.py b/src/kirin/schema/ir.py new file mode 100644 index 000000000..4b60b2221 --- /dev/null +++ b/src/kirin/schema/ir.py @@ -0,0 +1,25 @@ +from pydantic import BaseModel + + +class SSAValue(BaseModel): + id: int + name: str | None = None + + +class Statement(BaseModel): + dialect: str + name: str + args: list[SSAValue] + results: list[SSAValue] + successors: list[int] = [] + regions: list["Region"] = [] # NOTE: stmt owns regions + + +class Block(BaseModel): + id: int + args: list[SSAValue] = [] + stmts: list[Statement] = [] + + +class Region(BaseModel): + blocks: list[Block] = []