-
Notifications
You must be signed in to change notification settings - Fork 64
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
Update displayed device specs #763
base: develop
Are you sure you want to change the base?
Changes from 5 commits
a8cd5f8
eaba991
10c3a67
cf48c7a
93278c8
e0691d5
3138ad1
892908c
d671753
62e9a09
a70e20d
d61c6cd
9bddf28
e173206
6ce5a15
846db9a
846721c
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -19,7 +19,7 @@ | |||||||||||||||||||||||||||||||||||||||
from collections import Counter | ||||||||||||||||||||||||||||||||||||||||
from collections.abc import Mapping | ||||||||||||||||||||||||||||||||||||||||
from dataclasses import dataclass, field, fields | ||||||||||||||||||||||||||||||||||||||||
from typing import Any, Literal, cast, get_args | ||||||||||||||||||||||||||||||||||||||||
from typing import Any, Callable, Literal, cast, get_args | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
import numpy as np | ||||||||||||||||||||||||||||||||||||||||
from scipy.spatial.distance import squareform | ||||||||||||||||||||||||||||||||||||||||
|
@@ -591,71 +591,65 @@ def specs(self) -> str: | |||||||||||||||||||||||||||||||||||||||
"""Text summarizing the specifications of the device.""" | ||||||||||||||||||||||||||||||||||||||||
return self._specs(for_docs=False) | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
def _specs(self, for_docs: bool = False) -> str: | ||||||||||||||||||||||||||||||||||||||||
def yes_no_fn(cond: bool) -> str: | ||||||||||||||||||||||||||||||||||||||||
return "Yes" if cond else "No" | ||||||||||||||||||||||||||||||||||||||||
def _param_yes_no(self, param: Any) -> str: | ||||||||||||||||||||||||||||||||||||||||
return "Yes" if param is True else "No" | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
def _param_check_none(self, param: Any) -> Callable[[str], str]: | ||||||||||||||||||||||||||||||||||||||||
def empty_str_if_none(line: str) -> str: | ||||||||||||||||||||||||||||||||||||||||
if param is None: | ||||||||||||||||||||||||||||||||||||||||
return "" | ||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||
return line.format(param) | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return empty_str_if_none | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
lines = [ | ||||||||||||||||||||||||||||||||||||||||
def _register_lines(self) -> str: | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
register_lines = [ | ||||||||||||||||||||||||||||||||||||||||
"\nRegister parameters:", | ||||||||||||||||||||||||||||||||||||||||
f" - Dimensions: {self.dimensions}D", | ||||||||||||||||||||||||||||||||||||||||
f" - Rydberg level: {self.rydberg_level}", | ||||||||||||||||||||||||||||||||||||||||
f" - Maximum number of atoms: {self.max_atom_num}", | ||||||||||||||||||||||||||||||||||||||||
f" - Maximum distance from origin: {self.max_radial_distance} μm", | ||||||||||||||||||||||||||||||||||||||||
( | ||||||||||||||||||||||||||||||||||||||||
" - Minimum distance between neighbouring atoms: " | ||||||||||||||||||||||||||||||||||||||||
f"{self.min_atom_distance} μm" | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.max_atom_num)( | ||||||||||||||||||||||||||||||||||||||||
" - Maximum number of atoms: {}" | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
f" - Maximum layout filling fraction: {self.max_layout_filling}", | ||||||||||||||||||||||||||||||||||||||||
f" - SLM Mask: {yes_no_fn(self.supports_slm_mask)}", | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.max_radial_distance)( | ||||||||||||||||||||||||||||||||||||||||
" - Maximum distance from origin: {} µm" | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
" - Minimum distance between neighbouring atoms: " | ||||||||||||||||||||||||||||||||||||||||
+ f"{self.min_atom_distance} μm", | ||||||||||||||||||||||||||||||||||||||||
f" - SLM Mask: {self._param_yes_no(self.supports_slm_mask)}", | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if self.max_sequence_duration is not None: | ||||||||||||||||||||||||||||||||||||||||
lines.append( | ||||||||||||||||||||||||||||||||||||||||
" - Maximum sequence duration: " | ||||||||||||||||||||||||||||||||||||||||
f"{self.max_sequence_duration} ns" | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
return "\n".join(line for line in register_lines if line != "") | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
def _device_lines(self) -> str: | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
device_lines = [ | ||||||||||||||||||||||||||||||||||||||||
"\nDevice parameters:", | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if self.max_runs is not None: | ||||||||||||||||||||||||||||||||||||||||
device_lines.append(f" - Maximum number of runs: {self.max_runs}") | ||||||||||||||||||||||||||||||||||||||||
device_lines += [ | ||||||||||||||||||||||||||||||||||||||||
f" - Channels can be reused: {yes_no_fn(self.reusable_channels)}", | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.max_runs)( | ||||||||||||||||||||||||||||||||||||||||
" - Maximum number of runs: {}" | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.max_sequence_duration)( | ||||||||||||||||||||||||||||||||||||||||
" - Maximum sequence duration: {} ns", | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
" - Channels can be reused: " | ||||||||||||||||||||||||||||||||||||||||
+ self._param_yes_no(self.reusable_channels), | ||||||||||||||||||||||||||||||||||||||||
f" - Supported bases: {', '.join(self.supported_bases)}", | ||||||||||||||||||||||||||||||||||||||||
f" - Supported states: {', '.join(self.supported_states)}", | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.interaction_coeff)( | ||||||||||||||||||||||||||||||||||||||||
" - Ising interaction coefficient: {}", | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.interaction_coeff_xy)( | ||||||||||||||||||||||||||||||||||||||||
" - XY interaction coefficient: {}", | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.default_noise_model)( | ||||||||||||||||||||||||||||||||||||||||
" - Default noise model: {}", | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if self.interaction_coeff is not None: | ||||||||||||||||||||||||||||||||||||||||
device_lines.append( | ||||||||||||||||||||||||||||||||||||||||
f" - Ising interaction coefficient: {self.interaction_coeff}" | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if self.interaction_coeff_xy is not None: | ||||||||||||||||||||||||||||||||||||||||
device_lines.append( | ||||||||||||||||||||||||||||||||||||||||
f" - XY interaction coefficient: {self.interaction_coeff_xy}" | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if self.default_noise_model is not None: | ||||||||||||||||||||||||||||||||||||||||
device_lines.append( | ||||||||||||||||||||||||||||||||||||||||
f" - Default noise model: {self.default_noise_model}" | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
layout_lines = [ | ||||||||||||||||||||||||||||||||||||||||
"\nLayout parameters:", | ||||||||||||||||||||||||||||||||||||||||
f" - Requires layout: {yes_no_fn(self.requires_layout)}", | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
if hasattr(self, "accepts_new_layouts"): | ||||||||||||||||||||||||||||||||||||||||
layout_lines.append( | ||||||||||||||||||||||||||||||||||||||||
f" - Accepts new layout: {yes_no_fn(self.accepts_new_layouts)}" | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
return "\n".join(line for line in device_lines if line != "") | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
layout_lines += [ | ||||||||||||||||||||||||||||||||||||||||
f" - Minimal number of traps: {self.min_layout_traps}", | ||||||||||||||||||||||||||||||||||||||||
f" - Maximal number of traps: {self.max_layout_traps}", | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
def _channel_lines(self, for_docs: bool = False) -> str: | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
ch_lines = ["\nChannels:"] | ||||||||||||||||||||||||||||||||||||||||
for name, ch in {**self.channels, **self.dmm_channels}.items(): | ||||||||||||||||||||||||||||||||||||||||
|
@@ -708,7 +702,17 @@ def yes_no_fn(cond: bool) -> str: | |||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||
ch_lines.append(f" - '{name}': {ch!r}") | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return "\n".join(lines + device_lines + layout_lines + ch_lines) | ||||||||||||||||||||||||||||||||||||||||
return "\n".join(line for line in ch_lines if line != "") | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
def _specs(self, for_docs: bool = False) -> str: | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return "\n".join( | ||||||||||||||||||||||||||||||||||||||||
[ | ||||||||||||||||||||||||||||||||||||||||
self._register_lines(), | ||||||||||||||||||||||||||||||||||||||||
self._device_lines(), | ||||||||||||||||||||||||||||||||||||||||
self._channel_lines(for_docs=for_docs), | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+709
to
+715
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This would then become
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
@dataclass(frozen=True, repr=False) | ||||||||||||||||||||||||||||||||||||||||
|
@@ -886,6 +890,33 @@ def from_abstract_repr(obj_str: str) -> Device: | |||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
return device | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
def _layout_lines(self) -> str: | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
layout_lines = [ | ||||||||||||||||||||||||||||||||||||||||
"\nLayout parameters:", | ||||||||||||||||||||||||||||||||||||||||
f" - Requires layout: {self._param_yes_no(self.requires_layout)}", | ||||||||||||||||||||||||||||||||||||||||
" - Accepts new layout: " | ||||||||||||||||||||||||||||||||||||||||
+ self._param_yes_no(self.accepts_new_layouts), | ||||||||||||||||||||||||||||||||||||||||
f" - Minimal number of traps: {self.min_layout_traps}", | ||||||||||||||||||||||||||||||||||||||||
self._param_check_none(self.max_layout_traps)( | ||||||||||||||||||||||||||||||||||||||||
" - Maximal number of traps: {}" | ||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||
f" - Maximum layout filling fraction: {self.max_layout_filling}", | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return "\n".join(line for line in layout_lines if line != "") | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+893
to
+907
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I had something slightly different in mind for the layout parameters. I think the ones that are in
Suggested change
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
def _specs(self, for_docs: bool = False) -> str: | ||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
return "\n".join( | ||||||||||||||||||||||||||||||||||||||||
[ | ||||||||||||||||||||||||||||||||||||||||
self._register_lines(), | ||||||||||||||||||||||||||||||||||||||||
self._layout_lines(), | ||||||||||||||||||||||||||||||||||||||||
self._device_lines(), | ||||||||||||||||||||||||||||||||||||||||
self._channel_lines(for_docs=for_docs), | ||||||||||||||||||||||||||||||||||||||||
] | ||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+909
to
+918
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This (or rather its new version) would then be in |
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||
@dataclass(frozen=True) | ||||||||||||||||||||||||||||||||||||||||
class VirtualDevice(BaseDevice): | ||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can we return
list[str]
instead? This (and the other similar methods) could change to