def test_pipe_factory_meta_config_cleanup(): """Test that component-specific meta and config entries are represented correctly and cleaned up when pipes are removed, replaced or renamed.""" nlp = Language() nlp.add_pipe("ner", name="ner_component") nlp.add_pipe("textcat") assert nlp.get_factory_meta("ner") assert nlp.get_pipe_meta("ner_component") assert nlp.get_pipe_config("ner_component") assert nlp.get_factory_meta("textcat") assert nlp.get_pipe_meta("textcat") assert nlp.get_pipe_config("textcat") nlp.rename_pipe("textcat", "tc") assert nlp.get_pipe_meta("tc") assert nlp.get_pipe_config("tc") with pytest.raises(ValueError): nlp.remove_pipe("ner") nlp.remove_pipe("ner_component") assert "ner_component" not in nlp._pipe_meta assert "ner_component" not in nlp._pipe_configs with pytest.raises(ValueError): nlp.replace_pipe("textcat", "parser") nlp.replace_pipe("tc", "parser") assert nlp.get_factory_meta("parser") assert nlp.get_pipe_meta("tc").factory == "parser"
def test_pipe_methods_initialize(): """Test that the [initialize] config reflects the components correctly.""" nlp = Language() nlp.add_pipe("tagger") assert "tagger" not in nlp.config["initialize"]["components"] nlp.config["initialize"]["components"]["tagger"] = {"labels": ["hello"]} assert nlp.config["initialize"]["components"]["tagger"] == {"labels": ["hello"]} nlp.remove_pipe("tagger") assert "tagger" not in nlp.config["initialize"]["components"] nlp.add_pipe("tagger") assert "tagger" not in nlp.config["initialize"]["components"] nlp.config["initialize"]["components"]["tagger"] = {"labels": ["hello"]} nlp.rename_pipe("tagger", "my_tagger") assert "tagger" not in nlp.config["initialize"]["components"] assert nlp.config["initialize"]["components"]["my_tagger"] == {"labels": ["hello"]} nlp.config["initialize"]["components"]["test"] = {"foo": "bar"} nlp.add_pipe("ner", name="test") assert "test" in nlp.config["initialize"]["components"] nlp.remove_pipe("test") assert "test" not in nlp.config["initialize"]["components"]
def test_disable_enable_pipes(): name = "test_disable_enable_pipes" results = {} def make_component(name): results[name] = "" def component(doc): nonlocal results results[name] = doc.text return doc return component c1 = Language.component(f"{name}1", func=make_component(f"{name}1")) c2 = Language.component(f"{name}2", func=make_component(f"{name}2")) nlp = Language() nlp.add_pipe(f"{name}1") nlp.add_pipe(f"{name}2") assert results[f"{name}1"] == "" assert results[f"{name}2"] == "" assert nlp.pipeline == [(f"{name}1", c1), (f"{name}2", c2)] assert nlp.pipe_names == [f"{name}1", f"{name}2"] nlp.disable_pipe(f"{name}1") assert nlp.disabled == [f"{name}1"] assert nlp.component_names == [f"{name}1", f"{name}2"] assert nlp.pipe_names == [f"{name}2"] assert nlp.config["nlp"]["disabled"] == [f"{name}1"] nlp("hello") assert results[f"{name}1"] == "" # didn't run assert results[f"{name}2"] == "hello" # ran nlp.enable_pipe(f"{name}1") assert nlp.disabled == [] assert nlp.pipe_names == [f"{name}1", f"{name}2"] assert nlp.config["nlp"]["disabled"] == [] nlp("world") assert results[f"{name}1"] == "world" assert results[f"{name}2"] == "world" nlp.disable_pipe(f"{name}2") nlp.remove_pipe(f"{name}2") assert nlp.components == [(f"{name}1", c1)] assert nlp.pipeline == [(f"{name}1", c1)] assert nlp.component_names == [f"{name}1"] assert nlp.pipe_names == [f"{name}1"] assert nlp.disabled == [] assert nlp.config["nlp"]["disabled"] == [] nlp.rename_pipe(f"{name}1", name) assert nlp.components == [(name, c1)] assert nlp.component_names == [name] nlp("!") assert results[f"{name}1"] == "!" assert results[f"{name}2"] == "world" with pytest.raises(ValueError): nlp.disable_pipe(f"{name}2") nlp.disable_pipe(name) assert nlp.component_names == [name] assert nlp.pipe_names == [] assert nlp.config["nlp"]["disabled"] == [name] nlp("?") assert results[f"{name}1"] == "!"