From d23627605b94450a7195375ceb974e4684e1d668 Mon Sep 17 00:00:00 2001 From: Doug Strain Date: Tue, 13 Jun 2023 09:26:14 -0700 Subject: [PATCH] Add units to device parameter (#6140) * Add units to device parameter - Add the ability to add unit type for a device parameter. - This will be important for server-side deserialization, where the server will need to know what units the float values are in. - This will allow us to do sweeps of parameters that have units, such as nanoseconds, or GigaHertz. --- .../json_test_data/cirq.google.DeviceParameter.json | 3 ++- .../json_test_data/cirq.google.DeviceParameter.repr | 2 +- cirq-google/cirq_google/study/device_parameter.py | 11 ++++++++--- .../cirq_google/study/device_parameter_test.py | 4 +++- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.json b/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.json index aced06490ea..b56f513fddf 100644 --- a/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.json +++ b/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.json @@ -6,5 +6,6 @@ "key" ], "idx": 4, - "value": 7.5 + "value": 7.5, + "units": "GHz" } diff --git a/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.repr b/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.repr index e924e7d38d1..55b07f89aaa 100644 --- a/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.repr +++ b/cirq-google/cirq_google/json_test_data/cirq.google.DeviceParameter.repr @@ -1 +1 @@ -cirq_google.study.device_parameter.DeviceParameter(path=['test', 'subdir', 'key'], idx=4, value=7.5) +cirq_google.study.device_parameter.DeviceParameter(path=['test', 'subdir', 'key'], idx=4, value=7.5, units='GHz') diff --git a/cirq-google/cirq_google/study/device_parameter.py b/cirq-google/cirq_google/study/device_parameter.py index c190f65754e..9de759d53c2 100644 --- a/cirq-google/cirq_google/study/device_parameter.py +++ b/cirq-google/cirq_google/study/device_parameter.py @@ -46,16 +46,19 @@ class DeviceParameter(SupportsDeviceParameter): entry in a list. idx: If this key is an array, which index to modify. value: value of the parameter to be set, if any. + units: string value of the unit type of the value, if any. + For instance, "GHz", "MHz", "ns", etc. """ path: Sequence[str] idx: Optional[int] = None value: Optional[Any] = None + units: Optional[str] = None def __repr__(self) -> str: return ( 'cirq_google.study.DeviceParameter(' - f'path={self.path!r}, idx={self.idx}, value={self.value!r})' + f'path={self.path!r}, idx={self.idx}, value={self.value!r}, units={self.units!r})' ) @classmethod @@ -64,7 +67,9 @@ def _json_namespace_(cls) -> str: @classmethod def _from_json_dict_(cls, path, idx, value, **kwargs): - return DeviceParameter(path=path, idx=idx, value=value) + return DeviceParameter( + path=path, idx=idx, value=value, units=kwargs['units'] if 'units' in kwargs else None + ) def _json_dict_(self) -> Dict[str, Any]: - return cirq.obj_to_dict_helper(self, ["path", "idx", "value"]) + return cirq.obj_to_dict_helper(self, ["path", "idx", "value", "units"]) diff --git a/cirq-google/cirq_google/study/device_parameter_test.py b/cirq-google/cirq_google/study/device_parameter_test.py index a7703cd6332..533a2a7df2f 100644 --- a/cirq-google/cirq_google/study/device_parameter_test.py +++ b/cirq-google/cirq_google/study/device_parameter_test.py @@ -16,5 +16,7 @@ def test_parameters(): - param = cirq_google.study.DeviceParameter(path=('test', 'subdir'), idx=2, value='tmp') + param = cirq_google.study.DeviceParameter( + path=('test', 'subdir'), idx=2, value='tmp', units='GHz' + ) cirq.testing.assert_equivalent_repr(param, global_vals={'cirq_google': cirq_google})