Beispiel #1
0
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)
Beispiel #2
0
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")
Beispiel #3
0
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
Beispiel #4
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"])
Beispiel #5
0
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
Beispiel #6
0
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)
Beispiel #7
0
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)