p.singular_noun("pair_of_scissors") raises a TypeError
This seems to be a regression sometime between v6.0.4 and 7.4.0 with a simple repro step.
Reproed on MacOS Python 3.11, 3.9, confirms v6.0.4 works as expected, as long as pydantic dependency is <v2.
import inflect
p = inflect.engine()
p.singular_noun("pair of scissors")
Expected behaviour: Returns "pair of scissors"
Actual behaviour: TypeError: sequence item 0: expected str instance, bool found
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/paulannetts/.pyenv/versions/3.9.18-test/lib/python3.9/site-packages/inflect/__init__.py", line 2597, in singular_noun
sing = self._sinoun(word, count=count, gender=gender)
File "/Users/paulannetts/.pyenv/versions/3.9.18-test/lib/python3.9/site-packages/inflect/__init__.py", line 3233, in _sinoun
return self._handle_long_compounds(words, count=1) or word
File "/Users/paulannetts/.pyenv/versions/3.9.18-test/lib/python3.9/site-packages/inflect/__init__.py", line 3037, in _handle_long_compounds
return next(solutions, None)
File "/Users/paulannetts/.pyenv/versions/3.9.18-test/lib/python3.9/site-packages/inflect/__init__.py", line 3027, in <genexpr>
" ".join(
TypeError: sequence item 0: expected str instance, bool found
That does seem like a bug. I'm slightly surprised that case isn't covered by a unit test. Perhaps it's not because "pair of scissors" isn't a plural noun, so calling singular_noun on it is unsupported. I welcome you or others to step up and investigate the underlying cause and propose a solution.
This is still affecting my use case — running large-scale NER pipelines with compound biomedical terms triggers this bug.
PR #228 seems to address the root cause. Would be great to have this reviewed and merged if possible. Thanks!