Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: m-labs/artiq
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 91645ffc2438
Choose a base ref
...
head repository: m-labs/artiq
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 08f903b8f406
Choose a head ref
  • 2 commits
  • 4 files changed
  • 1 contributor

Commits on Apr 16, 2016

  1. Copy the full SHA
    0a25941 View commit details
  2. Copy the full SHA
    08f903b View commit details
Showing with 41 additions and 14 deletions.
  1. +3 −0 RELEASE_NOTES.rst
  2. +4 −1 artiq/examples/master/repository/arguments_demo.py
  3. +32 −9 artiq/language/environment.py
  4. +2 −4 artiq/master/worker_impl.py
3 changes: 3 additions & 0 deletions RELEASE_NOTES.rst
Original file line number Diff line number Diff line change
@@ -13,6 +13,9 @@ unreleased [1.0rc3]
from ARTIQ, trusting that h5py maps and converts types between HDF5 and
python/numpy "as expected".

* NumberValue now returns an integer if ``ndecimals`` = 0, ``scale`` = 1 and
``step`` is integer.


1.0rc2
------
5 changes: 4 additions & 1 deletion artiq/examples/master/repository/arguments_demo.py
Original file line number Diff line number Diff line change
@@ -44,6 +44,8 @@ def build(self):
self.setattr_argument("number", NumberValue(42e-6,
unit="us", scale=1e-6,
ndecimals=4))
self.setattr_argument("integer", NumberValue(42,
step=1, ndecimals=0))
self.setattr_argument("string", StringValue("Hello World"))
self.setattr_argument("scan", Scannable(global_max=400,
default=NoScan(325),
@@ -65,7 +67,8 @@ def run(self):
print(self.pyon_value)
print(self.boolean)
print(self.enum)
print(self.number)
print(self.number, type(self.number))
print(self.integer, type(self.integer))
print(self.string)
for i in self.scan:
print(i)
41 changes: 32 additions & 9 deletions artiq/language/environment.py
Original file line number Diff line number Diff line change
@@ -78,7 +78,12 @@ def describe(self):


class NumberValue(_SimpleArgProcessor):
"""An argument that can take a numerical value (typically floating point).
"""An argument that can take a numerical value.
If ndecimals = 0, scale = 1 and step is integer, then it returns
an integer value. Otherwise, it returns a floating point value.
The simplest way to represent an integer argument is
``NumberValue(step=1, ndecimals=0)``.
:param unit: A string representing the unit of the value, for user
interface (UI) purposes.
@@ -94,16 +99,38 @@ def __init__(self, default=NoDefault, unit="", scale=1.0,
step=None, min=None, max=None, ndecimals=2):
if step is None:
step = scale/10.0
_SimpleArgProcessor.__init__(self, default)
if default is not NoDefault:
self.default_value = default
self.unit = unit
self.scale = scale
self.step = step
self.min = min
self.max = max
self.ndecimals = ndecimals

def _is_int(self):
return (self.ndecimals == 0
and int(self.step) == self.step
and self.scale == 1)

def default(self):
if not hasattr(self, "default_value"):
raise DefaultMissing
if self._is_int():
return int(self.default_value)
else:
return float(self.default_value)

def process(self, x):
if self._is_int():
return int(x)
else:
return float(x)

def describe(self):
d = _SimpleArgProcessor.describe(self)
d = {"ty": self.__class__.__name__}
if hasattr(self, "default_value"):
d["default"] = self.default_value
d["unit"] = self.unit
d["scale"] = self.scale
d["step"] = self.step
@@ -122,14 +149,13 @@ class HasEnvironment:
"""Provides methods to manage the environment of an experiment (devices,
parameters, results, arguments)."""
def __init__(self, device_mgr=None, dataset_mgr=None, *, parent=None,
default_arg_none=False, enable_processors=False, **kwargs):
default_arg_none=False, **kwargs):
self.requested_args = OrderedDict()

self.__device_mgr = device_mgr
self.__dataset_mgr = dataset_mgr
self.__parent = parent
self.__default_arg_none = default_arg_none
self.__enable_processors = enable_processors

self.__kwargs = kwargs
self.__in_build = True
@@ -188,10 +214,7 @@ def get_argument(self, key, processor=None, group=None):
return None
else:
raise
if self.__enable_processors:
return processor.process(argval)
else:
return argval
return processor.process(argval)

def setattr_argument(self, key, processor=None, group=None):
"""Sets an argument as attribute. The names of the argument and of the
6 changes: 2 additions & 4 deletions artiq/master/worker_impl.py
Original file line number Diff line number Diff line change
@@ -139,8 +139,7 @@ def examine(device_mgr, dataset_mgr, file):
if name[-1] == ".":
name = name[:-1]
exp_inst = exp_class(device_mgr, dataset_mgr,
default_arg_none=True,
enable_processors=True)
default_arg_none=True)
arginfo = OrderedDict(
(k, (proc.describe(), group))
for k, (proc, group) in exp_inst.requested_args.items())
@@ -210,8 +209,7 @@ def main():
device_mgr.virtual_devices["scheduler"].set_run_info(
rid, obj["pipeline_name"], expid, obj["priority"])
exp_inst = exp(
device_mgr, dataset_mgr, enable_processors=True,
**expid["arguments"])
device_mgr, dataset_mgr, **expid["arguments"])
put_object({"action": "completed"})
elif action == "prepare":
exp_inst.prepare()