scriptconv 0.0.4a7__tar.gz → 0.0.4a8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. {scriptconv-0.0.4a7/scriptconv.egg-info → scriptconv-0.0.4a8}/PKG-INFO +1 -1
  2. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/diacritics.py +26 -18
  3. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/registry.py +7 -3
  4. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/version.py +1 -1
  5. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8/scriptconv.egg-info}/PKG-INFO +1 -1
  6. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_diacritics_graph.py +46 -0
  7. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/LICENSE +0 -0
  8. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/README.md +0 -0
  9. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/pyproject.toml +0 -0
  10. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/requirements.txt +0 -0
  11. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/__init__.py +0 -0
  12. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/__main__.py +0 -0
  13. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/cangjie.py +0 -0
  14. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/conventions.py +0 -0
  15. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/data/__init__.py +0 -0
  16. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/data/cangjie5_tc.tsv.gz +0 -0
  17. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/graph.py +0 -0
  18. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/notation.py +0 -0
  19. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/__init__.py +0 -0
  20. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/__init__.py +0 -0
  21. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/bw2ipa.py +0 -0
  22. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/hangul2ipa.py +0 -0
  23. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/aspiration.csv +0 -0
  24. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/assimilation.csv +0 -0
  25. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/double_coda.csv +0 -0
  26. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/hanja.tsv +0 -0
  27. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/ipa.csv +0 -0
  28. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/neutralization.csv +0 -0
  29. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/tensification.csv +0 -0
  30. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/ko_tables/yale.csv +0 -0
  31. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/__init__.py +0 -0
  32. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/codeswitch.py +0 -0
  33. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/diacritize.py +0 -0
  34. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/dialectal.py +0 -0
  35. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/english_g2p.py +0 -0
  36. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/espeak.py +0 -0
  37. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/frontend.py +0 -0
  38. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/levantine_g2p.py +0 -0
  39. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/normalize.py +0 -0
  40. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/shami/phoneme_inventory.py +0 -0
  41. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_thirdparty/zh_num.py +0 -0
  42. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/__init__.py +0 -0
  43. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/kog2p/LICENSE.md +0 -0
  44. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/kog2p/__init__.py +0 -0
  45. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/kog2p/rulebook.txt +0 -0
  46. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/LICENSE.md +0 -0
  47. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/__init__.py +0 -0
  48. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/buck/__init__.py +0 -0
  49. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/buck/phonetise_buckwalter.py +0 -0
  50. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/buck/symbols.py +0 -0
  51. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/buck/tokenization.py +0 -0
  52. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/num2words.py +0 -0
  53. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/_vendored/mantoq/unicode_symbol2label.py +0 -0
  54. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/ar.py +0 -0
  55. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/base.py +0 -0
  56. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/en.py +0 -0
  57. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/enums.py +0 -0
  58. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/eu.py +0 -0
  59. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/fa.py +0 -0
  60. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/gl.py +0 -0
  61. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/he.py +0 -0
  62. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/ja.py +0 -0
  63. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/ko.py +0 -0
  64. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/mul.py +0 -0
  65. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/mwl.py +0 -0
  66. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/o2ipa.py +0 -0
  67. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/pt.py +0 -0
  68. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/shami.py +0 -0
  69. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/vi.py +0 -0
  70. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/phonemizers/zh.py +0 -0
  71. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/py.typed +0 -0
  72. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/readings.py +0 -0
  73. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/scripts.py +0 -0
  74. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv/translit.py +0 -0
  75. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv.egg-info/SOURCES.txt +0 -0
  76. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv.egg-info/dependency_links.txt +0 -0
  77. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv.egg-info/requires.txt +0 -0
  78. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/scriptconv.egg-info/top_level.txt +0 -0
  79. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/setup.cfg +0 -0
  80. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_arpa_stress.py +0 -0
  81. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_cangjie.py +0 -0
  82. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_cli.py +0 -0
  83. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_conventions.py +0 -0
  84. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_diacritics.py +0 -0
  85. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_errors_policy.py +0 -0
  86. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_examples.py +0 -0
  87. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_graph.py +0 -0
  88. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_notation.py +0 -0
  89. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_phonemizers_base.py +0 -0
  90. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_phonemizers_cjk_ar.py +0 -0
  91. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_readings.py +0 -0
  92. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_readings_zh.py +0 -0
  93. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_scripts.py +0 -0
  94. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_scripts_stressonnx_compat.py +0 -0
  95. {scriptconv-0.0.4a7 → scriptconv-0.0.4a8}/tests/test_translit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scriptconv
3
- Version: 0.0.4a7
3
+ Version: 0.0.4a8
4
4
  Summary: Zero-dependency script & phoneme-notation core — ISO-15924 detection & metadata, IPA↔ARPABET/X-SAMPA/Lexique/Kirshenbaum/Cotovía/RFE, Buckwalter↔Arabic, Hangul→jamo, kana
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/TigreGotico/scriptconv
@@ -245,24 +245,27 @@ def _sense_diacritics_pt(text: str) -> str:
245
245
  return add_extra_diacritics(text)
246
246
 
247
247
 
248
- def diacritize(text: str, lang: str = "und", model=None,
249
- phonikud_model=None, diacritizer_model=None, **_) -> str:
248
+ def diacritize(text: str, lang: str = "und", diacritizer_model=None,
249
+ **kwargs) -> str:
250
250
  """Add pronunciation-disambiguating diacritics to *text* for *lang*.
251
251
 
252
- Four backends, each restoring information ordinary orthography omits but
253
- downstream G2P needs:
254
-
255
- - Hebrew (``he``) — niqqud via phonikud. ``phonikud_model=`` is optional:
256
- omitted, the small public phonikud ONNX model is auto-downloaded and
257
- cached (``$SCRIPTCONV_CACHE``/``$XDG_CACHE_HOME``); pass a path or
258
- zero-arg callable to override.
259
- - Arabic (``ar``) — tashkeel via text2tashkeel (``[tashkeel]``,
260
- ``model=``/``diacritizer_model=``).
252
+ ``diacritizer_model=`` is the one model knob for the diacritizer edge — the
253
+ model for whichever backend the language routes to (there is one such knob,
254
+ parallel to ``phonemizer_model=`` on the ``text -> ipa`` phonemizer edge):
255
+
256
+ - Hebrew (``he``) niqqud via phonikud; ``diacritizer_model`` is the
257
+ phonikud ONNX path (or a zero-arg callable). Optional: when omitted the
258
+ small public phonikud model is auto-downloaded and cached
259
+ (``$SCRIPTCONV_CACHE``/``$XDG_CACHE_HOME``).
260
+ - Arabic (``ar``) — tashkeel via text2tashkeel (``[tashkeel]``);
261
+ ``diacritizer_model`` is the text2tashkeel model name (defaults to
262
+ ``rawi-ensemble``).
261
263
  - East Slavic, Bulgarian/Macedonian/Slovene, Latvian, Armenian, Georgian,
262
264
  and Turkic/Caucasian languages (``STRESS_LANGS``, 26 stressonnx tags) —
263
- word stress via stressonnx (``[stress]``); stress is unwritten or
264
- under-marked in these languages, and in East Slavic unstressed vowels
265
- also reduce, so a missing mark can corrupt more than prosody.
265
+ word stress via stressonnx (``[stress]``); ``diacritizer_model`` is the
266
+ stressonnx model. Stress is unwritten or under-marked in these languages,
267
+ and in East Slavic unstressed vowels also reduce, so a missing mark can
268
+ corrupt more than prosody.
266
269
  - European Portuguese (``pt``/``pt-PT``, never ``pt-BR``) —
267
270
  heterophonic-homograph sense diacritics via bifonia (``[pt]``);
268
271
  ordinary Portuguese orthographic marks that any downstream G2P reads
@@ -272,13 +275,17 @@ def diacritize(text: str, lang: str = "und", model=None,
272
275
  ``ImportError`` naming its extra when the optional dependency is missing
273
276
  — scriptconv never installs anything on the caller's behalf.
274
277
  """
278
+ # one knob for the diacritizer edge; fold the pre-unification kwargs so
279
+ # older callers keep working (phonikud_model was the Hebrew-only name).
280
+ diacritizer_model = (diacritizer_model or kwargs.get("phonikud_model")
281
+ or kwargs.get("model"))
275
282
  family = _diacritizer_family(lang)
276
283
  if family == "he":
277
- return _phonikud(phonikud_model).add_diacritics(text)
284
+ return _phonikud(diacritizer_model).add_diacritics(text)
278
285
  if family == "ar":
279
- return _tashkeel(model or diacritizer_model).diacritize(text)
286
+ return _tashkeel(diacritizer_model).diacritize(text)
280
287
  if family == "stress":
281
- return _stress(text, lang, model)
288
+ return _stress(text, lang, diacritizer_model)
282
289
  if family == "pt":
283
290
  return _sense_diacritics_pt(text)
284
291
  return text
@@ -359,7 +366,8 @@ def register(graph) -> None:
359
366
  """
360
367
  graph.register(
361
368
  Edge("text", DIACRITIZED,
362
- lambda text, lang="und", model=None, **c: diacritize(text, lang, model, **c),
369
+ lambda text, lang="und", diacritizer_model=None, **c:
370
+ diacritize(text, lang, diacritizer_model=diacritizer_model, **c),
363
371
  lossless=False))
364
372
  graph.register(
365
373
  Edge(DIACRITIZED, "text",
@@ -231,9 +231,13 @@ def register(graph) -> None:
231
231
  from scriptconv.graph import Edge
232
232
 
233
233
  def _text_to_ipa(text: str, lang: str = "und",
234
- override: Optional[Phonemizer] = None, **_):
235
- return phonemizer_for_lang(lang, Alphabet.IPA,
236
- override).phonemize_string(text, lang)
234
+ override: Optional[Phonemizer] = None,
235
+ phonemizer_model: Optional[str] = None, **_):
236
+ # phonemizer_model is the model knob for this (phonemizer) edge —
237
+ # forwarded to model-backed phonemizers (ByT5/Charsiu/…); parallel to
238
+ # diacritizer_model on the text -> text-diacritized edge.
239
+ return phonemizer_for_lang(lang, Alphabet.IPA, override,
240
+ phonemizer_model).phonemize_string(text, lang)
237
241
 
238
242
  graph.register(Edge("text", "ipa", _text_to_ipa, lossless=False))
239
243
  graph.register(Edge("text-diacritized", "ipa", _text_to_ipa, lossless=False))
@@ -2,7 +2,7 @@
2
2
  VERSION_MAJOR = 0
3
3
  VERSION_MINOR = 0
4
4
  VERSION_BUILD = 4
5
- VERSION_ALPHA = 7
5
+ VERSION_ALPHA = 8
6
6
  # END_VERSION_BLOCK
7
7
 
8
8
  VERSION_STR = f"{VERSION_MAJOR}.{VERSION_MINOR}.{VERSION_BUILD}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: scriptconv
3
- Version: 0.0.4a7
3
+ Version: 0.0.4a8
4
4
  Summary: Zero-dependency script & phoneme-notation core — ISO-15924 detection & metadata, IPA↔ARPABET/X-SAMPA/Lexique/Kirshenbaum/Cotovía/RFE, Buckwalter↔Arabic, Hangul→jamo, kana
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/TigreGotico/scriptconv
@@ -101,3 +101,49 @@ class TestDiacriticsGraphExtension(unittest.TestCase):
101
101
 
102
102
  if __name__ == "__main__":
103
103
  unittest.main()
104
+
105
+
106
+ class TestEdgeModelKeys(unittest.TestCase):
107
+ """The two model-bearing edges each read their own context key: the
108
+ diacritizer edge (text -> text-diacritized) reads ``diacritizer_model``,
109
+ the phonemizer edge (text -> ipa) reads ``phonemizer_model``. Neither picks
110
+ up the other's key."""
111
+
112
+ def setUp(self):
113
+ self.graph = DEFAULT_GRAPH.extend(diacritics.register).extend(phonemizers.register)
114
+
115
+ def test_diacritizer_edge_reads_diacritizer_model(self):
116
+ seen = {}
117
+ backend = types.SimpleNamespace(diacritize=lambda t: t)
118
+
119
+ def _spy(m=None):
120
+ seen["m"] = m
121
+ return backend
122
+
123
+ with mock.patch.object(diacritics, "_tashkeel", _spy):
124
+ self.graph.convert("نص", "text", "text-diacritized", lang="ar",
125
+ diacritizer_model="RAWI-X",
126
+ phonemizer_model="IGNORED")
127
+ self.assertEqual(seen["m"], "RAWI-X")
128
+
129
+ def test_phonemizer_edge_reads_phonemizer_model(self):
130
+ from scriptconv.phonemizers import registry
131
+ cap = {}
132
+
133
+ class _P:
134
+ def phonemize_string(self, t, l):
135
+ return "IPA"
136
+
137
+ def _spy(lang, alphabet, override=None, model=None, **k):
138
+ cap["model"] = model
139
+ return _P()
140
+
141
+ with mock.patch.object(registry, "phonemizer_for_lang", _spy):
142
+ self.graph.convert("hello", "text", "ipa", lang="en",
143
+ phonemizer_model="BYT5-CKPT",
144
+ diacritizer_model="IGNORED")
145
+ self.assertEqual(cap["model"], "BYT5-CKPT")
146
+
147
+
148
+ if __name__ == "__main__":
149
+ unittest.main()
File without changes
File without changes
File without changes