-
Notifications
You must be signed in to change notification settings - Fork 29
/
test_result_serialization.py
56 lines (45 loc) · 1.84 KB
/
test_result_serialization.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
"""Test that we can serialize a Resuls object"""
import logging
import os
import pickle
import numpy as np
from krotov.result import Result
def test_serialization_roundtrip(request, tmpdir, caplog):
"""Test load/dump of Result"""
testdir = os.path.splitext(request.module.__file__)[0]
with caplog.at_level(logging.WARNING):
result = Result.load(os.path.join(testdir, 'oct_result.dump'))
assert 'Result.objectives contains control placeholders' in caplog.text
assert isinstance(result, Result)
dumpfile = str(tmpdir.join('oct_result.dump'))
result.dump(dumpfile)
with open(dumpfile, 'rb') as dump_fh:
result2 = pickle.load(dump_fh)
for name in result.__dict__:
val1 = getattr(result, name)
val2 = getattr(result2, name)
_check_recursive_equality(val1, val2)
def test_serialization_finalize(request, caplog):
testdir = os.path.splitext(request.module.__file__)[0]
dumpfile = os.path.join(testdir, 'oct_result_incomplete.dump')
with caplog.at_level(logging.WARNING):
result = Result.load(dumpfile)
assert "not finalized" in caplog.text
nt = len(result.tlist)
assert len(result.optimized_controls[0]) == nt - 1
result = Result.load(dumpfile, finalize=True)
assert len(result.optimized_controls[0]) == nt
def test_serialization_broken(request, caplog):
testdir = os.path.splitext(request.module.__file__)[0]
dumpfile = os.path.join(testdir, 'oct_result_broken.dump')
with caplog.at_level(logging.ERROR):
Result.load(dumpfile)
assert "incongruent" in caplog.text
def _check_recursive_equality(val1, val2):
if isinstance(val1, list):
for (v1, v2) in zip(val1, val2):
_check_recursive_equality(v1, v2)
elif isinstance(val1, np.ndarray):
assert np.all(val1 == val2)
else:
assert val1 == val2