Skip to content
Merged

wip #35

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
# verbecc Changelog

- 1.11.6 [TBR]
- Misc. cleanup
- Promoted applicable `Inflector` methods to public

- 1.11.5 [24 October 2025]
- Fixed Spanish Voseo imperativo
- Fixed Spanish Voseo imperativo afirmativo

- 1.11.4 [24 October 2025]
- Added support for Spanish Voseo

- 1.11.3 [19 October 2025]
- improved typing
- changed `Language` enum to `LangCodeISO639_1`
- changed `Language` enum to `LangCodeISO639_1` (suggest `from verbecc import LangCodeISO639_1 as Lang`)

- 1.12.2 [17 October 2025]
- Added typing for mood and tense using `StrEnum` (backwards-compatible with string values)
Expand All @@ -25,9 +29,9 @@
- **Changes should be transparent to users of top level `Conjugator.conjugate` function, however in sub-level conjugate methods the `alternate: bool` parameter has been replaced with the `alternate_options: AlternateOptions` parameter.**
- **Officially dropping support for python <=3.8. Python 3.8 has been EOL for over a year now. Update to python 3.9 or later. Now supporting Python 3.9, 3.10, 3.11, 3.12, 3.13 and 3.14.**
- Significant refactoring
- Eliminated a lot of code duplication introduced during initial implementation of `include_alternates` option
- Moved most language-specific conjugation logic into the `Inflector` sub-classes
- Moved most language-agnostic conjugation logic into `Conjugator`
- Eliminated a lot of code duplication introduced during initial implementation of `include_alternates` option
- Moved most language-specific conjugation logic into the `Inflector` sub-classes
- Moved most language-agnostic conjugation logic into `Conjugator`
- Improved typing, now have typehint definitions for all returned data structures
- Organized source tree into subdirectories
- Added fixtures to optimize unit tests
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"

[project]
name = "verbecc"
version = "1.11.5"
version = "1.11.6"
dependencies = [
"cython>=3.1.4",
"importlib_resources==6.4.5 ; python_version < '3.13'",
Expand Down
4 changes: 2 additions & 2 deletions tests/test_inflectors/test_inflector_ca.py
Original file line number Diff line number Diff line change
Expand Up @@ -2961,12 +2961,12 @@ def test_inflector_ca_get_conj_obs_3(cg):


def test_inflector_ca_get_verb_stem_from_template_name(cg):
verb_stem = cg._inflector._get_verb_stem_from_template_name("parlar", "cant:ar")
verb_stem = cg._inflector.get_verb_stem_from_template_name("parlar", "cant:ar")
assert verb_stem == "parl"


def test_inflector_ca_get_verb_stem_from_template_name_2(cg):
verb_stem = cg._inflector._get_verb_stem_from_template_name("abandonar", "cant:ar")
verb_stem = cg._inflector.get_verb_stem_from_template_name("abandonar", "cant:ar")
assert verb_stem == "abandon"


Expand Down
2 changes: 1 addition & 1 deletion tests/test_inflectors/test_inflector_es.py
Original file line number Diff line number Diff line change
Expand Up @@ -616,7 +616,7 @@ def test_inflector_es_get_conj_obs():


def test_inflector_es_get_verb_stem_from_template_name():
verb_stem = cg._inflector._get_verb_stem_from_template_name("abañar", "cort:ar")
verb_stem = cg._inflector.get_verb_stem_from_template_name("abañar", "cort:ar")
assert verb_stem == "abañ"


Expand Down
34 changes: 17 additions & 17 deletions tests/test_inflectors/test_inflector_fr.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,27 +29,27 @@ def test_all_verbs_have_templates(cg):

def test_add_subjunctive_relative_prounoun(cg):
assert (
cg._inflector._add_subjunctive_relative_pronoun("tu manges", "")
cg._inflector.add_subjunctive_relative_pronoun("tu manges", "")
== "que tu manges"
)
assert (
cg._inflector._add_subjunctive_relative_pronoun("il mange", "") == "qu'il mange"
cg._inflector.add_subjunctive_relative_pronoun("il mange", "") == "qu'il mange"
)
assert (
cg._inflector._add_subjunctive_relative_pronoun("elles mangent", "")
cg._inflector.add_subjunctive_relative_pronoun("elles mangent", "")
== "qu'elles mangent"
)


def test_add_reflexive_pronoun(cg):
assert cg._inflector._add_reflexive_pronoun("lever") == "se lever"
assert cg._inflector._add_reflexive_pronoun("écrouler") == "s'écrouler"
def testadd_reflexive_pronoun(cg):
assert cg._inflector.add_reflexive_pronoun("lever") == "se lever"
assert cg._inflector.add_reflexive_pronoun("écrouler") == "s'écrouler"


def test_split_reflexive(cg):
assert cg._inflector._split_reflexive("se lever") == (True, "lever")
assert cg._inflector._split_reflexive("s'écrouler") == (True, "écrouler")
assert cg._inflector._split_reflexive("secouer") == (False, "secouer")
def testsplit_reflexive(cg):
assert cg._inflector.split_reflexive("se lever") == (True, "lever")
assert cg._inflector.split_reflexive("s'écrouler") == (True, "écrouler")
assert cg._inflector.split_reflexive("secouer") == (False, "secouer")


@pytest.mark.parametrize(
Expand All @@ -61,8 +61,8 @@ def test_split_reflexive(cg):
("manger", True),
],
)
def test_inflector_fr_verb_can_be_reflexive(cg, infinitive, expected_result):
assert cg._inflector._verb_can_be_reflexive(infinitive) == expected_result
def test_inflector_frverb_can_be_reflexive(cg, infinitive, expected_result):
assert cg._inflector.verb_can_be_reflexive(infinitive) == expected_result


def test_inflector_fr_impersonal_verbs(cg):
Expand Down Expand Up @@ -125,18 +125,18 @@ def test_inflector_fr_conjugate_simple_mood_tense(cg):


def test_inflector_fr_get_verb_stem_from_template_name(cg):
verb_stem = cg._inflector._get_verb_stem_from_template_name("manger", "man:ger")
verb_stem = cg._inflector.get_verb_stem_from_template_name("manger", "man:ger")
assert verb_stem == "man"
verb_stem = cg._inflector._get_verb_stem_from_template_name("téléphoner", "aim:er")
verb_stem = cg._inflector.get_verb_stem_from_template_name("téléphoner", "aim:er")
assert verb_stem == "téléphon"
verb_stem = cg._inflector._get_verb_stem_from_template_name("vendre", "ten:dre")
verb_stem = cg._inflector.get_verb_stem_from_template_name("vendre", "ten:dre")
assert verb_stem == "ven"
# In the case of irregular verbs, the verb stem is empty string
verb_stem = cg._inflector._get_verb_stem_from_template_name("aller", ":aller")
verb_stem = cg._inflector.get_verb_stem_from_template_name("aller", ":aller")
assert verb_stem == ""
# The infinitive ending must match the template ending
with pytest.raises(ConjugatorError):
verb_stem = cg._inflector._get_verb_stem_from_template_name("vendre", "man:ger")
verb_stem = cg._inflector.get_verb_stem_from_template_name("vendre", "man:ger")


@pytest.mark.parametrize(
Expand Down
5 changes: 2 additions & 3 deletions tests/test_inflectors/test_inflector_it.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,10 +83,9 @@ def test_inflector_it_conjugate(cg):
assert cg.conjugate("avere") != None


def test_inflector_it_add_subjunctive_relative_pronoun(cg):
def test_inflector_itadd_subjunctive_relative_pronoun(cg):
assert (
cg._inflector._add_subjunctive_relative_pronoun("io abbia", "")
== "che io abbia"
cg._inflector.add_subjunctive_relative_pronoun("io abbia", "") == "che io abbia"
)


Expand Down
Loading