def test_subscription_from_config_wrong_name(dataset): """ This test checks that an exception is thrown if a wrong name for a subscriber is passed """ # This string represents the config file in the home directory: config = """ { "subscription":{ "subscribers":{ "test_subscriber_wrong":{ "factory": "qcodes.tests.dataset.test_subscribing.MockSubscriber", "factory_kwargs":{ "lg": false }, "subscription_kwargs":{ "min_wait": 0, "min_count": 1, "callback_kwargs": {} } } } } } """ db_location = qcodes.config.core.db_location with default_config(user_config=config): qcodes.config.core.db_location = db_location assert 'test_subscriber' not in qcodes.config.subscription.subscribers with pytest.raises(RuntimeError): sub_id_c = dataset.subscribe_from_config('test_subscriber')
def test_set_guid_location_code(loc, monkeypatch): monkeypatch.setattr('builtins.input', lambda x: str(loc)) with default_config(): orig_cfg = qc.config original_loc = orig_cfg['GUID_components']['location'] set_guid_location_code() cfg = qc.config if 257 > loc > 0: assert cfg['GUID_components']['location'] == loc else: assert cfg['GUID_components']['location'] == original_loc
def test_set_guid_workstation_code(ws, monkeypatch): monkeypatch.setattr('builtins.input', lambda x: str(ws)) with default_config(): orig_cfg = qc.config original_ws = orig_cfg['GUID_components']['work_station'] set_guid_work_station_code() cfg = qc.config if 16777216 > ws > 0: assert cfg['GUID_components']['work_station'] == ws else: assert cfg['GUID_components']['work_station'] == original_ws
def test_update_from_path(path_to_config_file_on_disk): with default_config(): cfg = qcodes.config # check that the default is still the default assert cfg["core"]["db_debug"] is False cfg.update_config(path=path_to_config_file_on_disk) assert cfg['core']['db_debug'] is True # check that the settings NOT specified in our config file on path # are still saved as configurations assert cfg['gui']['notebook'] is True assert cfg['station']['default_folder'] == '.' expected_path = os.path.join(path_to_config_file_on_disk, 'qcodesrc.json') assert cfg.current_config_path == expected_path
def test_defaults(dataset_with_outliers): run_id = dataset_with_outliers.run_id # plot_by_id loads from the database location provided in the qcodes # config. But the tests are supposed to run with the standard config. # Therefore we need to backup the db location and add it to the default # config context. db_location = qcodes.config.core.db_location with default_config(): qcodes.config.core.db_location = db_location _, cb = plot_by_id(run_id) assert cb[0].extend == 'neither' qcodes.config.plotting.auto_color_scale.enabled = True _, cb = plot_by_id(run_id) assert cb[0].extend == 'both' plt.close()
def test_generate_guid(loc, stat, smpl): # update config to generate a particular guid. Read it back to verify with default_config(): cfg = qc.config cfg['GUID_components']['location'] = loc cfg['GUID_components']['work_station'] = stat cfg['GUID_components']['sample'] = smpl guid = generate_guid() gen_time = int(np.round(time.time() * 1000)) comps = parse_guid(guid) if smpl == 0: smpl = int('a' * 8, base=16) assert comps['location'] == loc assert comps['work_station'] == stat assert comps['sample'] == smpl assert comps['time'] - gen_time < 2
def test_add_and_describe(): """ Test that a key an be added and described """ with default_config(): key = 'newkey' value = 'testvalue' value_type = 'string' description = 'A test' default = 'testdefault' cfg = qcodes.config cfg.add(key=key, value=value, value_type=value_type, description=description, default=default) desc = cfg.describe(f'user.{key}') expected_desc = (f"{description}.\nCurrent value: {value}. " f"Type: {value_type}. Default: {default}.") assert desc == expected_desc
def test_subscription_from_config(dataset, basic_subscriber): """ This test is similar to `test_basic_subscription`, with the only difference that another subscriber from a config file is added. """ # This string represents the config file in the home directory: config = """ { "subscription":{ "subscribers":{ "test_subscriber":{ "factory": "qcodes.tests.dataset.test_subscribing.MockSubscriber", "factory_kwargs":{ "lg": false }, "subscription_kwargs":{ "min_wait": 0, "min_count": 1, "callback_kwargs": {} } } } } } """ # This little dance around the db_location is due to the fact that the # dataset fixture creates a dataset in a db in a temporary directory. # Therefore we need to 'backup' the path to the db when using the # default configuration. db_location = qcodes.config.core.db_location with default_config(user_config=config): qcodes.config.core.db_location = db_location assert 'test_subscriber' in qcodes.config.subscription.subscribers xparam = ParamSpecBase(name='x', paramtype='numeric', label='x parameter', unit='V') yparam = ParamSpecBase(name='y', paramtype='numeric', label='y parameter', unit='Hz') idps = InterDependencies_(dependencies={yparam: (xparam,)}) dataset.set_interdependencies(idps) dataset.mark_started() sub_id = dataset.subscribe(basic_subscriber, min_wait=0, min_count=1, state={}) sub_id_c = dataset.subscribe_from_config('test_subscriber') assert len(dataset.subscribers) == 2 assert list(dataset.subscribers.keys()) == [sub_id, sub_id_c] expected_state = {} # Here we are only testing 2 to reduce the CI time for x in range(2): y = -x**2 dataset.add_results([{'x': x, 'y': y}]) expected_state[x+1] = [(x, y)] @retry_until_does_not_throw( exception_class_to_expect=AssertionError, tries=10) def assert_expected_state(): assert dataset.subscribers[sub_id].state == expected_state assert dataset.subscribers[sub_id_c].state == expected_state assert_expected_state()
def use_default_config(): with default_config(): yield
def test_filter_guid(locs, stats, smpls): def make_test_guid(cfg, loc: int, smpl: int, stat: int): cfg['GUID_components']['location'] = loc cfg['GUID_components']['work_station'] = stat cfg['GUID_components']['sample'] = smpl guid = generate_guid() gen_time = int(np.round(time.time() * 1000)) comps = parse_guid(guid) assert comps['location'] == loc assert comps['work_station'] == stat assert comps['sample'] == smpl assert comps['time'] - gen_time < 2 return guid with default_config(): guids = [] cfg = qc.config corrected_smpls = [ smpl if smpl != 0 else int('a' * 8, base=16) for smpl in smpls ] # there is a possibility that we could generate 0 and 2863311530, which # are considered equivalent since int('a' * 8, base=16) == 2863311530. # We want unique samples, so we exclude this case. assume(corrected_smpls[0] != corrected_smpls[1]) # first we generate a guid that we are going to match against guids.append(make_test_guid(cfg, locs[0], corrected_smpls[0], stats[0])) # now generate some guids that will not match because one of the # components changed guids.append(make_test_guid(cfg, locs[1], corrected_smpls[0], stats[0])) guids.append(make_test_guid(cfg, locs[0], corrected_smpls[1], stats[0])) guids.append(make_test_guid(cfg, locs[0], corrected_smpls[0], stats[1])) assert len(guids) == 4 # first filter on all parts. This should give exactly one matching guid filtered_guids = filter_guids_by_parts(guids, location=locs[0], sample_id=corrected_smpls[0], work_station=stats[0]) assert len(filtered_guids) == 1 assert filtered_guids[0] == guids[0] # now filter on 2 components filtered_guids = filter_guids_by_parts(guids, location=locs[0], sample_id=corrected_smpls[0]) assert len(filtered_guids) == 2 assert filtered_guids[0] == guids[0] assert filtered_guids[1] == guids[3] filtered_guids = filter_guids_by_parts(guids, location=locs[0], work_station=stats[0]) assert len(filtered_guids) == 2 assert filtered_guids[0] == guids[0] assert filtered_guids[1] == guids[2] filtered_guids = filter_guids_by_parts(guids, sample_id=corrected_smpls[0], work_station=stats[0]) assert len(filtered_guids) == 2 assert filtered_guids[0] == guids[0] assert filtered_guids[1] == guids[1] # now filter on 1 component filtered_guids = filter_guids_by_parts(guids, location=locs[0]) assert len(filtered_guids) == 3 assert filtered_guids[0] == guids[0] assert filtered_guids[1] == guids[2] assert filtered_guids[2] == guids[3] filtered_guids = filter_guids_by_parts(guids, work_station=stats[0]) assert len(filtered_guids) == 3 assert filtered_guids[0] == guids[0] assert filtered_guids[1] == guids[1] assert filtered_guids[2] == guids[2] filtered_guids = filter_guids_by_parts( guids, sample_id=corrected_smpls[0], ) assert len(filtered_guids) == 3 assert filtered_guids[0] == guids[0] assert filtered_guids[1] == guids[1] assert filtered_guids[2] == guids[3]