def test_pf_remove_plugin_feature(): """Remove individual plugin features""" ds = dclab.new_dataset(retrieve_data("fmt-hdf5_fl_2018.zip")) assert "circ_per_area" not in ds assert "circ_times_area" not in ds plugin_path = data_dir / "feat_anc_plugin_creative.py" plugin_list = dclab.load_plugin_feature(plugin_path) assert len(plugin_list) == 2 assert "circ_per_area" in ds assert "circ_per_area" not in ds.features_innate assert "circ_times_area" in ds assert "circ_times_area" not in ds.features_innate assert dclab.dfn.feature_exists("circ_per_area") assert dclab.dfn.feature_exists("circ_times_area") remove_plugin_feature(plugin_list[0]) remove_plugin_feature(plugin_list[1]) assert "circ_per_area" not in ds assert "circ_times_area" not in ds assert not dclab.dfn.feature_exists("circ_per_area") assert not dclab.dfn.feature_exists("circ_times_area") with pytest.raises(TypeError, match="hould be an instance of PlugInFeature"): not_a_plugin_instance = [4, 6, 5] remove_plugin_feature(not_a_plugin_instance)
def test_pf_remove_all_plugin_features(): """Remove all plugin features at once""" ds = dclab.new_dataset(retrieve_data("fmt-hdf5_fl_2018.zip")) assert "circ_per_area" not in ds.features_innate assert "circ_times_area" not in ds.features_innate plugin_path = data_dir / "feat_anc_plugin_creative.py" dclab.load_plugin_feature(plugin_path) assert "circ_per_area" in ds assert "circ_times_area" in ds assert dclab.dfn.feature_exists("circ_per_area") assert dclab.dfn.feature_exists("circ_times_area") remove_all_plugin_features() assert "circ_per_area" not in ds assert "circ_times_area" not in ds assert not dclab.dfn.feature_exists("circ_per_area") assert not dclab.dfn.feature_exists("circ_times_area")
def test_pf_attributes_af_inherited(): """Check the plugin feature attributes inherited from AncillaryFeature""" plugin_path = data_dir / "feat_anc_plugin_creative.py" plugin_list = dclab.load_plugin_feature(plugin_path) pf, _ = plugin_list plugin_file_info = import_plugin_feature_script(plugin_path) assert pf.feature_name == plugin_file_info["feature names"][0] assert pf.method == plugin_file_info["method"] assert pf.req_config == plugin_file_info["config required"] assert pf.req_features == plugin_file_info["features required"] assert pf.req_func == plugin_file_info["method check required"] assert pf.priority == 0
def test_pf_load_plugin(): """Basic check for loading a plugin feature via a script""" ds = dclab.new_dataset(retrieve_data("fmt-hdf5_fl_2018.zip")) assert "circ_per_area" not in ds.features_innate assert "circ_times_area" not in ds.features_innate plugin_path = data_dir / "feat_anc_plugin_creative.py" plugin_list = dclab.load_plugin_feature(plugin_path) assert isinstance(plugin_list[0], PlugInFeature) assert isinstance(plugin_list[1], PlugInFeature) assert "circ_per_area" in ds assert "circ_times_area" in ds circ_per_area = ds["circ_per_area"] circ_times_area = ds["circ_times_area"] assert np.allclose(circ_per_area, ds["circ"] / ds["area_um"]) assert np.allclose(circ_times_area, ds["circ"] * ds["area_um"])
def test_pf_attributes(): """Check the plugin feature attributes""" plugin_path = data_dir / "feat_anc_plugin_creative.py" plugin_list = dclab.load_plugin_feature(plugin_path) pf1, pf2 = plugin_list plugin_file_info = import_plugin_feature_script(plugin_path) assert pf1.feature_name == pf1.feature_name == \ plugin_file_info["feature names"][0] assert pf2.feature_name == pf2.feature_name == \ plugin_file_info["feature names"][1] assert plugin_path.samefile(pf1.plugin_path) assert plugin_path.samefile(pf1.plugin_feature_info["plugin path"]) assert plugin_path.samefile(pf2.plugin_path) assert plugin_path.samefile(pf2.plugin_feature_info["plugin path"]) assert pf1._original_info == plugin_file_info assert pf2._original_info == plugin_file_info
def test_pf_feature_exists(): """Basic check that the plugin feature name exists in definitions""" plugin_path = data_dir / "feat_anc_plugin_creative.py" plugin_list = dclab.load_plugin_feature(plugin_path) assert dclab.dfn.feature_exists(plugin_list[0].feature_name) assert dclab.dfn.feature_exists(plugin_list[1].feature_name)
This example shows how to load a user-defined plugin feature recipe in dclab and use it in a scatter plot. Please also download the :download:`plugin_example.py <../examples/plugin_example.py>` file for this example. """ import pathlib import matplotlib.pyplot as plt import dclab plugin_path = pathlib.Path(__file__).parent # load a single plugin feature dclab.load_plugin_feature(plugin_path / "plugin_example.py") # load some data from DCOR ds = dclab.new_dataset("fb719fb2-bd9f-817a-7d70-f4002af916f0") # access the features circ_per_area = ds["circ_per_area"] circ_times_area = ds["circ_times_area"] # create a plot with a plugin feature plt.figure(figsize=(8, 4)) xlabel = dclab.dfn.get_feature_label("circ_times_area") ylabel = dclab.dfn.get_feature_label("deform") ax1 = plt.subplot(title="Plot with a plugin feature") ax1.plot(ds["circ_times_area"], ds["deform"], "o", color="k", alpha=.2, ms=1)