Merge pull request #6229 from svlandeg/bugfix/disabled

This commit is contained in:
Ines Montani 2020-10-09 16:05:11 +02:00 committed by GitHub
commit b7cb9d95e4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 1 deletions

View File

@ -456,6 +456,8 @@ class Errors:
"issue tracker: http://github.com/explosion/spaCy/issues") "issue tracker: http://github.com/explosion/spaCy/issues")
# TODO: fix numbering after merging develop into master # TODO: fix numbering after merging develop into master
E900 = ("Could not run the full 'nlp' pipeline for evaluation. If you specified "
"frozen components, make sure they were already initialized and trained. ")
E901 = ("Failed to remove existing output directory: {path}. If your " E901 = ("Failed to remove existing output directory: {path}. If your "
"config and the components you train change between runs, a " "config and the components you train change between runs, a "
"non-empty output directory can lead to stale pipeline data. To " "non-empty output directory can lead to stale pipeline data. To "

View File

@ -1034,6 +1034,9 @@ class Language:
) )
) )
disable = to_disable disable = to_disable
# DisabledPipes will restore the pipes in 'disable' when it's done, so we need to exclude
# those pipes that were already disabled.
disable = [d for d in disable if d not in self._disabled]
return DisabledPipes(self, disable) return DisabledPipes(self, disable)
def make_doc(self, text: str) -> Doc: def make_doc(self, text: str) -> Doc:

View File

@ -129,6 +129,7 @@ def test_enable_pipes_method(nlp, name):
@pytest.mark.parametrize("name", ["my_component"]) @pytest.mark.parametrize("name", ["my_component"])
def test_disable_pipes_context(nlp, name): def test_disable_pipes_context(nlp, name):
"""Test that an enabled component stays enabled after running the context manager."""
nlp.add_pipe("new_pipe", name=name) nlp.add_pipe("new_pipe", name=name)
assert nlp.has_pipe(name) assert nlp.has_pipe(name)
with nlp.select_pipes(disable=name): with nlp.select_pipes(disable=name):
@ -136,6 +137,18 @@ def test_disable_pipes_context(nlp, name):
assert nlp.has_pipe(name) assert nlp.has_pipe(name)
@pytest.mark.parametrize("name", ["my_component"])
def test_disable_pipes_context_restore(nlp, name):
"""Test that a disabled component stays disabled after running the context manager."""
nlp.add_pipe("new_pipe", name=name)
assert nlp.has_pipe(name)
nlp.disable_pipes(name)
assert not nlp.has_pipe(name)
with nlp.select_pipes(disable=name):
assert not nlp.has_pipe(name)
assert not nlp.has_pipe(name)
def test_select_pipes_list_arg(nlp): def test_select_pipes_list_arg(nlp):
for name in ["c1", "c2", "c3"]: for name in ["c1", "c2", "c3"]:
nlp.add_pipe("new_pipe", name=name) nlp.add_pipe("new_pipe", name=name)

View File

@ -249,7 +249,10 @@ def create_evaluation_callback(
def evaluate() -> Tuple[float, Dict[str, float]]: def evaluate() -> Tuple[float, Dict[str, float]]:
dev_examples = list(dev_corpus(nlp)) dev_examples = list(dev_corpus(nlp))
try:
scores = nlp.evaluate(dev_examples) scores = nlp.evaluate(dev_examples)
except KeyError as e:
raise KeyError(Errors.E900) from e
# Calculate a weighted sum based on score_weights for the main score. # Calculate a weighted sum based on score_weights for the main score.
# We can only consider scores that are ints/floats, not dicts like # We can only consider scores that are ints/floats, not dicts like
# entity scores per type etc. # entity scores per type etc.