Esempio n. 1
0
    def test_can_import_from_same_level(self):
        m1_name, m2_name = "mod1", "mod2"
        with create_modules(m1_name, m2_name) as mods:
            with mods[m2_name].open("a") as fp:
                print(f"from {m1_name} import _MODULE_NAME as _M1_NAME", file=fp)

            mod1 = tools.file_import(str(mods[m1_name]))
            mod2 = tools.file_import(str(mods[m2_name]))

            self.assertEqual(mod2._M1_NAME, mod1._MODULE_NAME)
Esempio n. 2
0
def examine(device_mgr, dataset_mgr, file):
    previous_keys = set(sys.modules.keys())
    try:
        module = tools.file_import(file)
        for class_name, exp_class in inspect.getmembers(
                module, is_public_experiment):
            if exp_class.__doc__ is None:
                name = class_name
            else:
                name = exp_class.__doc__.strip().splitlines()[0].strip()
                if name[-1] == ".":
                    name = name[:-1]
            argument_mgr = TraceArgumentManager()
            scheduler_defaults = {}
            cls = exp_class(  # noqa: F841 (fill argument_mgr)
                (device_mgr, dataset_mgr, argument_mgr, scheduler_defaults))
            arginfo = OrderedDict(
                (k, (proc.describe(), group, tooltip))
                for k, (proc, group,
                        tooltip) in argument_mgr.requested_args.items())
            argument_ui = None
            if hasattr(exp_class, "argument_ui"):
                argument_ui = exp_class.argument_ui
            register_experiment(class_name, name, arginfo, argument_ui,
                                scheduler_defaults)
    finally:
        new_keys = set(sys.modules.keys())
        for key in new_keys - previous_keys:
            del sys.modules[key]
Esempio n. 3
0
def examine(device_mgr, dataset_mgr, file):
    previous_keys = set(sys.modules.keys())
    try:
        module = file_import(file)
        for class_name, exp_class in module.__dict__.items():
            if class_name[0] == "_":
                continue
            if is_experiment(exp_class):
                if exp_class.__doc__ is None:
                    name = class_name
                else:
                    name = exp_class.__doc__.strip().splitlines()[0].strip()
                    if name[-1] == ".":
                        name = name[:-1]
                argument_mgr = TraceArgumentManager()
                scheduler_defaults = {}
                cls = exp_class((device_mgr, dataset_mgr, argument_mgr,
                                 scheduler_defaults))
                arginfo = OrderedDict(
                    (k, (proc.describe(), group, tooltip))
                    for k, (proc, group,
                            tooltip) in argument_mgr.requested_args.items())
                register_experiment(class_name, name, arginfo,
                                    scheduler_defaults)
    finally:
        new_keys = set(sys.modules.keys())
        for key in new_keys - previous_keys:
            del sys.modules[key]
Esempio n. 4
0
def examine(device_mgr, dataset_mgr, file):
    previous_keys = set(sys.modules.keys())
    try:
        module = file_import(file)
        for class_name, exp_class in module.__dict__.items():
            if class_name[0] == "_":
                continue
            if is_experiment(exp_class):
                if exp_class.__doc__ is None:
                    name = class_name
                else:
                    name = exp_class.__doc__.splitlines()[0].strip()
                    if name[-1] == ".":
                        name = name[:-1]
                argument_mgr = TraceArgumentManager()
                scheduler_defaults = {}
                cls = exp_class((device_mgr, dataset_mgr, argument_mgr, scheduler_defaults))
                arginfo = OrderedDict(
                    (k, (proc.describe(), group, tooltip))
                    for k, (proc, group, tooltip) in argument_mgr.requested_args.items())
                register_experiment(class_name, name, arginfo, scheduler_defaults)
    finally:
        new_keys = set(sys.modules.keys())
        for key in new_keys - previous_keys:
            del sys.modules[key]
Esempio n. 5
0
def device_db_from_file(filename):
    mod = file_import(filename)

    # use __dict__ instead of direct attribute access
    # for backwards compatibility of the exception interface
    # (raise KeyError and not AttributeError if device_db is missing)
    return mod.__dict__["device_db"]
Esempio n. 6
0
    def test_multiple_experiments(self):
        with create_modules(MODNAME) as mods:
            with mods[MODNAME].open("a") as fp:
                print(
                    """
from artiq.experiment import *

class Exp1(EnvExperiment):
    pass

class Exp2(EnvExperiment):
    pass
                """,
                    file=fp,
                )

            mod = tools.file_import(str(mods[MODNAME]))

            # by class name
            self.assertIs(mod.Exp1, tools.get_experiment(mod, "Exp1"))
            self.assertIs(mod.Exp2, tools.get_experiment(mod, "Exp2"))

            # by elimination should fail
            with self.assertRaises(ValueError):
                tools.get_experiment(mod)
Esempio n. 7
0
def get_exp(file, class_name):
    module = file_import(file)
    if class_name is None:
        exps = [v for k, v in module.__dict__.items() if is_experiment(v)]
        if len(exps) != 1:
            raise ValueError("Found {} experiments in module".format(
                len(exps)))
        return exps[0]
    else:
        return getattr(module, class_name)
Esempio n. 8
0
def get_exp(file, class_name):
    module = file_import(file, prefix="artiq_worker_")
    if class_name is None:
        exps = [v for k, v in module.__dict__.items()
                if is_experiment(v)]
        if len(exps) != 1:
            raise ValueError("Found {} experiments in module"
                             .format(len(exps)))
        return exps[0]
    else:
        return getattr(module, class_name)
Esempio n. 9
0
def get_unit(file, unit):
    module = file_import(file)
    if unit is None:
        units = [
            v for k, v in module.__dict__.items() if k[0] != "_" and isclass(v)
            and issubclass(v, AutoDB) and v is not AutoDB
        ]
        if len(units) != 1:
            raise ValueError("Found {} units in module".format(len(units)))
        return units[0]
    else:
        return getattr(module, unit)
Esempio n. 10
0
def main():
    args = get_argparser().parse_args()

    ddb = FlatFileDB(args.ddb)
    pdb = FlatFileDB(args.pdb)
    pdb.hooks.append(SimpleParamLogger())
    rdb = ResultDB(set())
    dbh = DBHub(ddb, pdb, rdb)
    try:
        if args.elf:
            if args.arguments:
                print("Run arguments are not supported in ELF mode")
                sys.exit(1)
            unit_inst = ELFRunner(dps)
            unit_inst.run(args.file)
        else:
            module = file_import(args.file)
            if args.unit is None:
                units = [(k, v) for k, v in module.__dict__.items()
                         if k[0] != "_" and isclass(v)
                         and issubclass(v, AutoDB) and v is not AutoDB]
                l = len(units)
                if l == 0:
                    print("No units found in module")
                    sys.exit(1)
                elif l > 1:
                    print("More than one unit found in module:")
                    for k, v in sorted(units, key=itemgetter(0)):
                        print("    " + k)
                    print("Use -u to specify which unit to use.")
                    sys.exit(1)
                else:
                    unit = units[0][1]
            else:
                unit = getattr(module, args.unit)

            try:
                arguments = _parse_arguments(args.arguments)
            except:
                print("Failed to parse run arguments")
                sys.exit(1)

            unit_inst = unit(dbh, **arguments)
            unit_inst.run()

            if rdb.data.read or rdb.realtime_data.read:
                print("Results:")
                for k, v in chain(rdb.realtime_data.read.items(),
                                  rdb.data.read.items()):
                    print("{}: {}".format(k, v))
    finally:
        dbh.close()
Esempio n. 11
0
    def test_fail_hidden_experiment(self):
        with create_modules(MODNAME) as mods:
            with mods[MODNAME].open("a") as fp:
                print(
                    """
from artiq.experiment import *

class _Exp1(EnvExperiment):
    pass
                """,
                    file=fp,
                )

            mod = tools.file_import(str(mods[MODNAME]))
            with self.assertRaises(ValueError):
                tools.get_experiment(mod)
Esempio n. 12
0
def examine(device_mgr, dataset_mgr, file):
    module = file_import(file)
    for class_name, exp_class in module.__dict__.items():
        if class_name[0] == "_":
            continue
        if is_experiment(exp_class):
            if exp_class.__doc__ is None:
                name = class_name
            else:
                name = exp_class.__doc__.splitlines()[0].strip()
                if name[-1] == ".":
                    name = name[:-1]
            exp_inst = exp_class(device_mgr, dataset_mgr, default_arg_none=True)
            arguments = [(k, (proc.describe(), group))
                         for k, (proc, group) in exp_inst.requested_args.items()]
            register_experiment(class_name, name, arguments)
Esempio n. 13
0
def examine(dmgr, pdb, rdb, file):
    module = file_import(file)
    for class_name, exp_class in module.__dict__.items():
        if class_name[0] == "_":
            continue
        if is_experiment(exp_class):
            if exp_class.__doc__ is None:
                name = class_name
            else:
                name = exp_class.__doc__.splitlines()[0].strip()
                if name[-1] == ".":
                    name = name[:-1]
            exp_inst = exp_class(dmgr, pdb, rdb, default_arg_none=True)
            arguments = [(k, (proc.describe(), group))
                         for k, (proc,
                                 group) in exp_inst.requested_args.items()]
            register_experiment(class_name, name, arguments)
Esempio n. 14
0
def examine(device_mgr, dataset_mgr, file):
    module = file_import(file)
    for class_name, exp_class in module.__dict__.items():
        if class_name[0] == "_":
            continue
        if is_experiment(exp_class):
            if exp_class.__doc__ is None:
                name = class_name
            else:
                name = exp_class.__doc__.splitlines()[0].strip()
                if name[-1] == ".":
                    name = name[:-1]
            argument_mgr = TraceArgumentManager()
            exp_inst = exp_class((device_mgr, dataset_mgr, argument_mgr))
            arginfo = OrderedDict(
                (k, (proc.describe(), group))
                for k, (proc, group) in argument_mgr.requested_args.items())
            register_experiment(class_name, name, arginfo)
Esempio n. 15
0
def examine(device_mgr, dataset_mgr, file):
    module = file_import(file)
    for class_name, exp_class in module.__dict__.items():
        if class_name[0] == "_":
            continue
        if is_experiment(exp_class):
            if exp_class.__doc__ is None:
                name = class_name
            else:
                name = exp_class.__doc__.splitlines()[0].strip()
                if name[-1] == ".":
                    name = name[:-1]
            argument_mgr = TraceArgumentManager()
            exp_class((device_mgr, dataset_mgr, argument_mgr))
            arginfo = OrderedDict(
                (k, (proc.describe(), group, tooltip))
                for k, (proc, group, tooltip) in argument_mgr.requested_args.items())
            register_experiment(class_name, name, arginfo)
Esempio n. 16
0
    def test_single_experiment(self):
        with create_modules(MODNAME) as mods:
            with mods[MODNAME].open("a") as fp:
                print(
                    """
from artiq.experiment import *

class Exp1(EnvExperiment):
    pass
                """,
                    file=fp,
                )

            mod = tools.file_import(str(mods[MODNAME]))

            # by class name
            self.assertIs(mod.Exp1, tools.get_experiment(mod, "Exp1"))

            # by elimination
            self.assertIs(mod.Exp1, tools.get_experiment(mod))
Esempio n. 17
0
 def test_fail_no_experiments(self):
     with create_modules(MODNAME) as mods:
         mod = tools.file_import(str(mods[MODNAME]))
         with self.assertRaises(ValueError):
             tools.get_experiment(mod)
Esempio n. 18
0
    def test_get_ddb(self):
        ddb = self.ddb.get_device_db()
        raw = file_import(self.ddb_file.name).device_db

        self.assertEqual(ddb, raw)
Esempio n. 19
0
def get_experiment_from_file(file, class_name):
    module = tools.file_import(file, prefix="artiq_worker_")
    return tools.get_experiment(module, class_name)
Esempio n. 20
0
 def test_can_import_not_in_source_suffixes(self):
     for extension in ["", ".something"]:
         self.assertNotIn(extension, importlib.machinery.SOURCE_SUFFIXES)
         with create_modules(MODNAME, extension=extension) as mods:
             mod = tools.file_import(str(mods[MODNAME]))
             self.assertEqual(Path(mod.__file__).name, f"{MODNAME}{extension}")
Esempio n. 21
0
 def test_import_and_prefix_is_present(self):
     prefix = "prefix_"
     with create_modules(MODNAME) as mods:
         mod = tools.file_import(str(mods[MODNAME]), prefix=prefix)
         self.assertEqual(prefix + MODNAME, mod.__name__)