Add tests
This commit is contained in:
parent
4e777f295d
commit
e04c0dd3bc
@ -17,6 +17,7 @@ import numpy as np
|
|||||||
from frozendict import frozendict
|
from frozendict import frozendict
|
||||||
|
|
||||||
from . import set_operations
|
from . import set_operations
|
||||||
|
from .metadata import from_nodes
|
||||||
from .node_types import NodeData, RootNodeData
|
from .node_types import NodeData, RootNodeData
|
||||||
from .tree_formatters import (
|
from .tree_formatters import (
|
||||||
HTML,
|
HTML,
|
||||||
@ -111,6 +112,10 @@ class Qube:
|
|||||||
|
|
||||||
return from_json(json)
|
return from_json(json)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def from_nodes(cls, nodes: dict[str, dict], add_root: bool = True):
|
||||||
|
return from_nodes(cls, nodes, add_root)
|
||||||
|
|
||||||
def to_json(self) -> dict:
|
def to_json(self) -> dict:
|
||||||
def to_json(node: Qube) -> dict:
|
def to_json(node: Qube) -> dict:
|
||||||
return {
|
return {
|
||||||
|
41
src/python/qubed/metadata.py
Normal file
41
src/python/qubed/metadata.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
from typing import TYPE_CHECKING, Iterator
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from .value_types import QEnum
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
from .qube import Qube
|
||||||
|
|
||||||
|
|
||||||
|
def make_node(
|
||||||
|
cls,
|
||||||
|
key: str,
|
||||||
|
values: Iterator,
|
||||||
|
shape: list[int],
|
||||||
|
children: "tuple[Qube]",
|
||||||
|
metadata: dict[str, np.ndarray] | None = None,
|
||||||
|
):
|
||||||
|
return cls.make(
|
||||||
|
key=key,
|
||||||
|
values=QEnum(values),
|
||||||
|
metadata={k: np.array(v).reshape(shape) for k, v in metadata.items()}
|
||||||
|
if metadata is not None
|
||||||
|
else {},
|
||||||
|
children=children,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def from_nodes(cls, nodes, add_root=True):
|
||||||
|
shape = [len(n["values"]) for n in nodes.values()]
|
||||||
|
nodes = nodes.items()
|
||||||
|
*nodes, (key, info) = nodes
|
||||||
|
root = make_node(shape=shape, children=(), key=key, **info)
|
||||||
|
|
||||||
|
for key, info in reversed(nodes):
|
||||||
|
shape.pop()
|
||||||
|
root = make_node(shape=shape, children=(root,), key=key, **info)
|
||||||
|
|
||||||
|
if add_root:
|
||||||
|
return cls.root_node(children=(root,))
|
||||||
|
return root
|
0
tests/test_metadata.py
Normal file
0
tests/test_metadata.py
Normal file
Loading…
x
Reference in New Issue
Block a user