From a31506e06060c559abfeda043503935691af2e98 Mon Sep 17 00:00:00 2001 From: ines Date: Tue, 28 Nov 2017 20:37:55 +0100 Subject: [PATCH] Fix off-by-one error in nlp.add_pipe(after=name) (fixes #1654) --- spacy/language.py | 2 +- spacy/tests/regression/test_issue1654.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/spacy/language.py b/spacy/language.py index b982583f0..ec0c5d68f 100644 --- a/spacy/language.py +++ b/spacy/language.py @@ -260,7 +260,7 @@ class Language(object): elif before and before in self.pipe_names: self.pipeline.insert(self.pipe_names.index(before), pipe) elif after and after in self.pipe_names: - self.pipeline.insert(self.pipe_names.index(after), pipe) + self.pipeline.insert(self.pipe_names.index(after) + 1, pipe) else: msg = "Can't find '{}' in pipeline. Available names: {}" unfound = before or after diff --git a/spacy/tests/regression/test_issue1654.py b/spacy/tests/regression/test_issue1654.py index 448bf80a1..531c00757 100644 --- a/spacy/tests/regression/test_issue1654.py +++ b/spacy/tests/regression/test_issue1654.py @@ -7,7 +7,6 @@ from ...language import Language from ...vocab import Vocab -@pytest.mark.xfail def test_issue1654(): nlp = Language(Vocab()) assert not nlp.pipeline @@ -15,3 +14,10 @@ def test_issue1654(): nlp.add_pipe(lambda doc: doc, name='2', after='1') nlp.add_pipe(lambda doc: doc, name='3', after='2') assert nlp.pipe_names == ['1', '2', '3'] + + nlp2 = Language(Vocab()) + assert not nlp2.pipeline + nlp2.add_pipe(lambda doc: doc, name='3') + nlp2.add_pipe(lambda doc: doc, name='2', before='3') + nlp2.add_pipe(lambda doc: doc, name='1', before='2') + assert nlp2.pipe_names == ['1', '2', '3']