Skip to content

Commit

Permalink
feat(hugr-py)!: Reexport commonly used classes from the package root (#…
Browse files Browse the repository at this point in the history
…1393)

I had to move `serialization_version` and delay a an `import hugr` to
avoid cyclic dependencies.

drive-by: Import `Edge` / `OrderEdge` aliases from guppy

BREAKING CHANGE: Moved `hugr.get_serialization_version` to
`hugr.serialization.serial_hugr.serialization_version`
  • Loading branch information
aborgna-q authored Aug 5, 2024
1 parent d554072 commit 69925d0
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 21 deletions.
22 changes: 17 additions & 5 deletions hugr-py/src/hugr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,23 @@
representation.
"""

from .hugr import Hugr
from .node_port import Direction, InPort, Node, OutPort, Wire
from .ops import Op
from .tys import Kind, Type

__all__ = [
"Hugr",
"Node",
"OutPort",
"InPort",
"Direction",
"Op",
"Kind",
"Type",
"Wire",
]

# This is updated by our release-please workflow, triggered by this
# annotation: x-release-please-version
__version__ = "0.5.0"


def get_serialization_version() -> str:
"""Return the current version of the serialization schema."""
return "live"
8 changes: 3 additions & 5 deletions hugr-py/src/hugr/serialization/extension.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@
import pydantic as pd
from pydantic_extra_types.semantic_version import SemanticVersion

from hugr import get_serialization_version

from .ops import Value
from .serial_hugr import SerialHugr
from .serial_hugr import SerialHugr, serialization_version
from .tys import (
ConfiguredBaseModel,
ExtensionId,
Expand Down Expand Up @@ -76,7 +74,7 @@ class Extension(ConfiguredBaseModel):

@classmethod
def get_version(cls) -> str:
return get_serialization_version()
return serialization_version()


class Package(ConfiguredBaseModel):
Expand All @@ -85,4 +83,4 @@ class Package(ConfiguredBaseModel):

@classmethod
def get_version(cls) -> str:
return get_serialization_version()
return serialization_version()
14 changes: 10 additions & 4 deletions hugr-py/src/hugr/serialization/serial_hugr.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

from pydantic import ConfigDict, Field

import hugr
from hugr import get_serialization_version
from hugr.node_port import NodeIdx, PortOffset

from .ops import OpType
Expand All @@ -13,8 +11,14 @@
Port = tuple[NodeIdx, PortOffset | None]
Edge = tuple[Port, Port]


def serialization_version() -> str:
"""Return the current version of the serialization schema."""
return "live"


VersionField = Field(
default_factory=get_serialization_version,
default_factory=serialization_version,
title="Version",
description="Serialisation Schema Version",
frozen=True,
Expand All @@ -34,7 +38,9 @@ class SerialHugr(ConfiguredBaseModel):

def to_json(self) -> str:
"""Return a JSON representation of the Hugr."""
self.encoder = f"hugr-py v{hugr.__version__}"
from hugr import __version__ as hugr_version

self.encoder = f"hugr-py v{hugr_version}"
return self.model_dump_json()

@classmethod
Expand Down
5 changes: 2 additions & 3 deletions hugr-py/tests/serialization/test_basic.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from hugr import get_serialization_version
from hugr.serialization.serial_hugr import SerialHugr
from hugr.serialization.serial_hugr import SerialHugr, serialization_version


def test_empty():
h = SerialHugr(nodes=[], edges=[])
assert h.model_dump() == {
"version": get_serialization_version(),
"version": serialization_version(),
"nodes": [],
"edges": [],
"metadata": None,
Expand Down
7 changes: 3 additions & 4 deletions hugr-py/tests/serialization/test_extension.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from semver import Version

from hugr import get_serialization_version
from hugr.serialization.extension import (
ExplicitBound,
Extension,
Expand All @@ -9,7 +8,7 @@
TypeDef,
TypeDefBound,
)
from hugr.serialization.serial_hugr import SerialHugr
from hugr.serialization.serial_hugr import SerialHugr, serialization_version
from hugr.serialization.tys import (
FunctionType,
PolyFuncType,
Expand Down Expand Up @@ -75,7 +74,7 @@


def test_extension():
assert get_serialization_version() == Extension.get_version()
assert serialization_version() == Extension.get_version()
param = TypeParam(root=TypeTypeParam(b=TypeBound.Copyable))

bound = TypeDefBound(root=ExplicitBound(bound=TypeBound.Copyable))
Expand Down Expand Up @@ -113,7 +112,7 @@ def test_extension():


def test_package():
assert get_serialization_version() == Package.get_version()
assert serialization_version() == Package.get_version()

ext = Extension(
version=Version(0, 1, 0),
Expand Down

0 comments on commit 69925d0

Please sign in to comment.