|
17 | 17 | from cirq import value |
18 | 18 | from cirq_google.api.v2 import program_pb2 |
19 | 19 |
|
20 | | -# from cirq_google.serialization import arg_func_langs |
21 | | - |
22 | 20 |
|
23 | 21 | @value.value_equality |
24 | 22 | class InternalTag: |
@@ -62,18 +60,31 @@ def _value_equality_values_(self): |
62 | 60 | return (self.name, self.package, tag_args_eq_values) |
63 | 61 |
|
64 | 62 | def to_proto(self, msg: Optional[program_pb2.Tag] = None) -> program_pb2.Tag: |
| 63 | + # To avoid circular import |
| 64 | + from cirq_google.serialization import arg_func_langs |
| 65 | + |
65 | 66 | if msg is None: |
66 | 67 | msg = program_pb2.Tag() |
67 | 68 | msg.internal_tag.tag_name = self.name |
68 | 69 | msg.internal_tag.tag_package = self.package |
| 70 | + for k, v in self.tag_args.items(): |
| 71 | + arg_func_langs.arg_to_proto( |
| 72 | + v, out=msg.internal_tag.tag_args[k], arg_function_language='exp' |
| 73 | + ) |
69 | 74 | return msg |
70 | 75 |
|
71 | 76 | @staticmethod |
72 | 77 | def from_proto(msg: program_pb2.Tag) -> 'InternalTag': |
| 78 | + # To avoid circular import |
| 79 | + from cirq_google.serialization import arg_func_langs |
| 80 | + |
73 | 81 | if msg.WhichOneof("tag") != "internal_tag": |
74 | 82 | raise ValueError(f"Message is not a InternalTag, {msg}") |
| 83 | + |
| 84 | + kw_dict = {} |
| 85 | + for k, v in msg.internal_tag.tag_args.items(): |
| 86 | + kw_dict[k] = arg_func_langs.arg_from_proto(v, arg_function_language='exp') |
| 87 | + |
75 | 88 | return InternalTag( |
76 | | - name=msg.internal_tag.tag_name, |
77 | | - package=msg.internal_tag.tag_package, |
78 | | - **msg.internal_tag.tag_args, |
| 89 | + name=msg.internal_tag.tag_name, package=msg.internal_tag.tag_package, **kw_dict |
79 | 90 | ) |
0 commit comments