/
value.py
68 lines (48 loc) · 1.54 KB
/
value.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
57
58
59
60
61
62
63
64
65
66
67
68
"""Value."""
# pylint: disable=no-name-in-module,import-error
from mlir._mlir_libs._concretelang._compiler import (
Value as _Value,
)
from .wrapper import WrapperCpp
# pylint: enable=no-name-in-module,import-error
class Value(WrapperCpp):
"""An encrypted/clear value which can be scalar/tensor."""
def __init__(self, value: _Value):
"""
Wrap the native C++ object.
Args:
value (_Value):
object to wrap
Raises:
TypeError:
if `value` is not of type `_Value`
"""
if not isinstance(value, _Value):
raise TypeError(f"value must be of type _Value, not {type(value)}")
super().__init__(value)
def serialize(self) -> bytes:
"""
Serialize value into bytes.
Returns:
bytes: serialized value
"""
return self.cpp().serialize()
@staticmethod
def deserialize(serialized_value: bytes) -> "Value":
"""
Deserialize value from bytes.
Args:
serialized_value (bytes):
previously serialized value
Returns:
Value:
deserialized value
Raises:
TypeError:
if `serialized_value` is not of type `bytes`
"""
if not isinstance(serialized_value, bytes):
raise TypeError(
f"serialized_value must be of type bytes, not {type(serialized_value)}"
)
return Value.wrap(_Value.deserialize(serialized_value))