mirror of https://github.com/m-labs/artiq.git
language/scan: add argument processor
This commit is contained in:
parent
937ca853aa
commit
bb05ed268e
|
@ -1,10 +1,12 @@
|
||||||
from artiq.language import core, environment, units
|
from artiq.language import core, environment, units, scan
|
||||||
from artiq.language.core import *
|
from artiq.language.core import *
|
||||||
from artiq.language.environment import *
|
from artiq.language.environment import *
|
||||||
from artiq.language.units import *
|
from artiq.language.units import *
|
||||||
|
from artiq.language.scan import *
|
||||||
|
|
||||||
|
|
||||||
__all__ = []
|
__all__ = []
|
||||||
__all__.extend(core.__all__)
|
__all__.extend(core.__all__)
|
||||||
__all__.extend(environment.__all__)
|
__all__.extend(environment.__all__)
|
||||||
__all__.extend(units.__all__)
|
__all__.extend(units.__all__)
|
||||||
|
__all__.extend(scan.__all__)
|
||||||
|
|
|
@ -1,6 +1,27 @@
|
||||||
from random import Random, shuffle
|
from random import Random, shuffle
|
||||||
|
import inspect
|
||||||
|
|
||||||
from artiq.language.core import *
|
from artiq.language.core import *
|
||||||
|
from artiq.language.environment import NoDefault, DefaultMissing
|
||||||
|
|
||||||
|
|
||||||
|
__all__ = ["NoScan", "LinearScan", "RandomScan", "ExplicitScan", "Scannable"]
|
||||||
|
|
||||||
|
|
||||||
|
class NoScan:
|
||||||
|
def __init__(self, value):
|
||||||
|
self.value = value
|
||||||
|
|
||||||
|
@portable
|
||||||
|
def _gen(self):
|
||||||
|
yield self.value
|
||||||
|
|
||||||
|
@portable
|
||||||
|
def __iter__(self):
|
||||||
|
return self._gen()
|
||||||
|
|
||||||
|
def describe(self):
|
||||||
|
return {"ty": "NoScan", "value": self.value}
|
||||||
|
|
||||||
|
|
||||||
class LinearScan:
|
class LinearScan:
|
||||||
|
@ -20,6 +41,10 @@ class LinearScan:
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return self._gen()
|
return self._gen()
|
||||||
|
|
||||||
|
def describe(self):
|
||||||
|
return {"ty": "LinearScan",
|
||||||
|
"min": self.min, "max": self.max, "npoints": self.npoints}
|
||||||
|
|
||||||
|
|
||||||
class RandomScan:
|
class RandomScan:
|
||||||
def __init__(self, min, max, npoints, seed=0):
|
def __init__(self, min, max, npoints, seed=0):
|
||||||
|
@ -30,6 +55,11 @@ class RandomScan:
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return iter(self.sequence)
|
return iter(self.sequence)
|
||||||
|
|
||||||
|
def describe(self):
|
||||||
|
return {"ty": "RandomScan",
|
||||||
|
"min": self.min, "max": self.max, "npoints": self.npoints}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ExplicitScan:
|
class ExplicitScan:
|
||||||
def __init__(self, sequence):
|
def __init__(self, sequence):
|
||||||
|
@ -38,3 +68,48 @@ class ExplicitScan:
|
||||||
@portable
|
@portable
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
return iter(self.sequence)
|
return iter(self.sequence)
|
||||||
|
|
||||||
|
def describe(self):
|
||||||
|
return {"ty": "ExplicitScan", "sequence": self.sequence}
|
||||||
|
|
||||||
|
|
||||||
|
_ty_to_scan = {
|
||||||
|
"NoScan": NoScan,
|
||||||
|
"LinearScan": LinearScan,
|
||||||
|
"RandomScan": RandomScan,
|
||||||
|
"ExplicitScan": ExplicitScan
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Scannable:
|
||||||
|
def __init__(self, global_min=None, global_max=None, global_step=None,
|
||||||
|
unit="", default=NoDefault):
|
||||||
|
self.global_min = global_min
|
||||||
|
self.global_max = global_max
|
||||||
|
self.global_step = global_step
|
||||||
|
self.unit = unit
|
||||||
|
if default is not NoDefault:
|
||||||
|
self.default_value = default
|
||||||
|
|
||||||
|
def default(self):
|
||||||
|
if not hasattr(self, "default_value"):
|
||||||
|
raise DefaultMissing
|
||||||
|
return self.default_value
|
||||||
|
|
||||||
|
def process(self, x):
|
||||||
|
cls = _ty_to_scan[x["ty"]]
|
||||||
|
args = dict()
|
||||||
|
for arg in inspect.getargspec(cls).args[1:]:
|
||||||
|
if arg in x:
|
||||||
|
args[arg] = x[arg]
|
||||||
|
return cls(**args)
|
||||||
|
|
||||||
|
def describe(self):
|
||||||
|
d = {"ty": "Scannable"}
|
||||||
|
d["global_min"] = self.global_min
|
||||||
|
d["global_max"] = self.global_max
|
||||||
|
d["global_step"] = self.global_step
|
||||||
|
d["unit"]= self.unit
|
||||||
|
if hasattr(self, "default_value"):
|
||||||
|
d["default"] = self.default_value.describe()
|
||||||
|
return d
|
||||||
|
|
Loading…
Reference in New Issue