Skip to content

Add units to device parameter #6140

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
"key"
],
"idx": 4,
"value": 7.5
"value": 7.5,
"units": "GHz"
}
Original file line number Diff line number Diff line change
@@ -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')
11 changes: 8 additions & 3 deletions cirq-google/cirq_google/study/device_parameter.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a plan for exposing the spec for units? i.e. how do users know the valid options here? If there's a limited subset of Pyle units that we support, might it be worth providing those explicitly?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To answer this comment a bit belatedly, there isn't an immediate plan to expose the units. However, there is also no plan to expose the valid path either. Users will generally need an expert internal user in order to use this feature anyway.

The valid spec is to use labrad units, which we may eventually expose, but this is a longer term project. We probably should revisit this when we start looking at how we want to integrate services like reg/DV with cirq_google.


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
Expand All @@ -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"])
4 changes: 3 additions & 1 deletion cirq-google/cirq_google/study/device_parameter_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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})