mirror of
https://github.com/explosion/spaCy.git
synced 2025-01-28 02:04:07 +03:00
a7977b5143
```python def test_vocab_lexeme_add_flag_auto_id(en_vocab): is_len4 = en_vocab.add_flag(lambda string: len(string) == 4) assert en_vocab["1999"].check_flag(is_len4) is True assert en_vocab["1999"].check_flag(IS_DIGIT) is True assert en_vocab["199"].check_flag(is_len4) is False > assert en_vocab["199"].check_flag(IS_DIGIT) is True E assert False is True E + where False = <built-in method check_flag of spacy.lexeme.Lexeme object at 0x7fa155c36840>(3) E + where <built-in method check_flag of spacy.lexeme.Lexeme object at 0x7fa155c36840> = <spacy.lexeme.Lexeme object at 0x7fa155c36840>.check_flag spacy/tests/vocab_vectors/test_lexeme.py:49: AssertionError ``` > `pytest==6.1.1` > > `numpy==1.19.2` > > `Python version: 3.8.3` To reproduce the error, run `pytest --random-order-bucket=global --random-order-seed=170158 -v spacy/tests` If `test_vocab_lexeme_add_flag_auto_id` is run after `test_vocab_lexeme_add_flag_provided_id`, it fails. It seems like `test_vocab_lexeme_add_flag_provided_id` uses the `IS_DIGIT` bit for testing purposes but does not reset the bit. This solution seems to work but, if anyone has a better fix, please let me know and I will integrate it.
65 lines
2.3 KiB
Python
65 lines
2.3 KiB
Python
import pytest
|
|
import numpy
|
|
from spacy.attrs import IS_ALPHA, IS_DIGIT
|
|
from spacy.util import OOV_RANK
|
|
|
|
|
|
@pytest.mark.parametrize("text1,prob1,text2,prob2", [("NOUN", -1, "opera", -2)])
|
|
def test_vocab_lexeme_lt(en_vocab, text1, text2, prob1, prob2):
|
|
"""More frequent is l.t. less frequent"""
|
|
lex1 = en_vocab[text1]
|
|
lex1.prob = prob1
|
|
lex2 = en_vocab[text2]
|
|
lex2.prob = prob2
|
|
|
|
assert lex1 < lex2
|
|
assert lex2 > lex1
|
|
|
|
|
|
@pytest.mark.parametrize("text1,text2", [("phantom", "opera")])
|
|
def test_vocab_lexeme_hash(en_vocab, text1, text2):
|
|
"""Test that lexemes are hashable."""
|
|
lex1 = en_vocab[text1]
|
|
lex2 = en_vocab[text2]
|
|
lexes = {lex1: lex1, lex2: lex2}
|
|
assert lexes[lex1].orth_ == text1
|
|
assert lexes[lex2].orth_ == text2
|
|
|
|
|
|
def test_vocab_lexeme_is_alpha(en_vocab):
|
|
assert en_vocab["the"].flags & (1 << IS_ALPHA)
|
|
assert not en_vocab["1999"].flags & (1 << IS_ALPHA)
|
|
assert not en_vocab["hello1"].flags & (1 << IS_ALPHA)
|
|
|
|
|
|
def test_vocab_lexeme_is_digit(en_vocab):
|
|
assert not en_vocab["the"].flags & (1 << IS_DIGIT)
|
|
assert en_vocab["1999"].flags & (1 << IS_DIGIT)
|
|
assert not en_vocab["hello1"].flags & (1 << IS_DIGIT)
|
|
|
|
|
|
def test_vocab_lexeme_add_flag_auto_id(en_vocab):
|
|
is_len4 = en_vocab.add_flag(lambda string: len(string) == 4)
|
|
assert en_vocab["1999"].check_flag(is_len4) is True
|
|
assert en_vocab["1999"].check_flag(IS_DIGIT) is True
|
|
assert en_vocab["199"].check_flag(is_len4) is False
|
|
assert en_vocab["199"].check_flag(IS_DIGIT) is True
|
|
assert en_vocab["the"].check_flag(is_len4) is False
|
|
assert en_vocab["dogs"].check_flag(is_len4) is True
|
|
|
|
|
|
def test_vocab_lexeme_add_flag_provided_id(en_vocab):
|
|
is_len4 = en_vocab.add_flag(lambda string: len(string) == 4, flag_id=IS_DIGIT)
|
|
assert en_vocab["1999"].check_flag(is_len4) is True
|
|
assert en_vocab["199"].check_flag(is_len4) is False
|
|
assert en_vocab["199"].check_flag(IS_DIGIT) is False
|
|
assert en_vocab["the"].check_flag(is_len4) is False
|
|
assert en_vocab["dogs"].check_flag(is_len4) is True
|
|
en_vocab.add_flag(lambda string: string.isdigit(), flag_id=IS_DIGIT)
|
|
|
|
def test_vocab_lexeme_oov_rank(en_vocab):
|
|
"""Test that default rank is OOV_RANK."""
|
|
lex = en_vocab["word"]
|
|
assert OOV_RANK == numpy.iinfo(numpy.uint64).max
|
|
assert lex.rank == OOV_RANK
|