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_analysis_validate_attrs_remove_pipe(): """Test that attributes are validated correctly on remove.""" @Language.component("pipe_analysis_c6", assigns=["token.tag"]) def c1(doc): return doc @Language.component("pipe_analysis_c7", requires=["token.pos"]) def c2(doc): return doc nlp = Language() nlp.add_pipe("pipe_analysis_c6") nlp.add_pipe("pipe_analysis_c7") problems = nlp.analyze_pipes()["problems"] assert problems["pipe_analysis_c7"] == ["token.pos"] nlp.remove_pipe("pipe_analysis_c7") problems = nlp.analyze_pipes()["problems"] assert all(p == [] for p in problems.values())
def test_analysis_validate_attrs_remove_pipe(): """Test that attributes are validated correctly on remove.""" spacy.language.ENABLE_PIPELINE_ANALYSIS = True @component("c1", assigns=["token.tag"]) def c1(doc): return doc @component("c2", requires=["token.pos"]) def c2(doc): return doc nlp = Language() nlp.add_pipe(c1) with pytest.warns(UserWarning): nlp.add_pipe(c2) with pytest.warns(None) as record: nlp.remove_pipe("c2") assert not record.list
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"] == "!"
def remove_maskedlm_pipe(nlp: Language): """Remove maskedlm pipe from nlp""" targets = [PIPES.bert_for_maskedlm, PIPES.bert_for_maskedlm_preprocessor] for k in targets: if k in nlp.pipe_names: nlp.remove_pipe(k)