Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions guppylang/engine.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from collections import defaultdict
from enum import Enum
from types import FrameType

import hugr.build.function as hf
Expand Down Expand Up @@ -58,6 +59,13 @@
BUILTIN_DEFS = {defn.name: defn for defn in BUILTIN_DEFS_LIST}


class CoreMetadataKeys(Enum):
"""Core HUGR metadata keys used by Guppy."""

USED_EXTENSIONS = "core.used_extensions"
GENERATOR = "core.generator"


class DefinitionStore:
"""Storage class holding references to all Guppy definitions created in the current
interpreter session.
Expand Down Expand Up @@ -242,14 +250,14 @@ def compile(self, id: DefId) -> ModulePointer:
hugr.std.int.INT_TYPES_EXTENSION,
hugr.std.logic.EXTENSION,
]
graph.hugr.module_root.metadata["__used_extensions"] = [
graph.hugr.module_root.metadata[CoreMetadataKeys.USED_EXTENSIONS.value] = [
{
"name": ext.name,
"version": str(ext.version),
}
for ext in all_used_extensions
]
graph.hugr.module_root.metadata["__generator"] = {
graph.hugr.module_root.metadata[CoreMetadataKeys.GENERATOR.value] = {
"name": "guppylang",
"version": guppylang.__version__,
}
Expand Down
19 changes: 16 additions & 3 deletions tests/test_version_metadata.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,23 @@
from guppylang import guppy, __version__
from sympy import use

from guppylang import __version__, guppy
from guppylang.engine import CoreMetadataKeys


def test_metadata():
@guppy
def foo() -> None:
pass

hugr = foo.compile().module
assert hugr.module_root.metadata["__generator"]["name"] == "guppylang"
assert hugr.module_root.metadata["__generator"]["version"] == __version__
meta = hugr.module_root.metadata
gen_key = CoreMetadataKeys.GENERATOR.value
assert meta[gen_key]["name"] == "guppylang"
assert meta[gen_key]["version"] == __version__

used_key = CoreMetadataKeys.USED_EXTENSIONS.value
used = meta[used_key]
assert len(used) > 0
assert all("name" in ext and "version" in ext for ext in used)
assert all(isinstance(ext["name"], str) for ext in used)
assert all(isinstance(ext["version"], str) for ext in used)
Loading