Coverage for tests\test_zanj_populate_nested.py: 100%
24 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-14 12:57 -0700
« prev ^ index » next coverage.py v7.6.12, created at 2025-02-14 12:57 -0700
1from __future__ import annotations
3import typing
4from pathlib import Path
6import numpy as np
7from muutils.json_serialize import (
8 SerializableDataclass,
9 serializable_dataclass,
10 serializable_field,
11)
13from zanj import ZANJ
15np.random.seed(0)
17# pylint: disable=missing-function-docstring,missing-class-docstring
19TEST_DATA_PATH: Path = Path("tests/junk_data")
22@serializable_dataclass
23class InnerClassWithArray(SerializableDataclass):
24 some_string: str
25 arr_numbers: np.ndarray
28@serializable_dataclass
29class OuterClassWithNestedList(SerializableDataclass):
30 name: str
31 lst_basic: typing.List[InnerClassWithArray] = serializable_field(
32 serialization_fn=lambda x: [b.serialize() for b in x],
33 loading_fn=lambda x: [InnerClassWithArray.load(b) for b in x["lst_basic"]],
34 )
37def test_nested_populate():
38 instance = OuterClassWithNestedList(
39 name="hello",
40 lst_basic=[
41 InnerClassWithArray(
42 some_string=f"hello_{i}",
43 arr_numbers=np.random.rand(20),
44 )
45 for i in range(20)
46 ],
47 )
49 z = ZANJ(
50 external_array_threshold=10,
51 external_list_threshold=10,
52 )
53 path = TEST_DATA_PATH / "test_nested_populate.zanj"
54 path.unlink(missing_ok=True)
55 z.save(instance, path)
56 recovered = z.read(path)
57 assert instance == recovered