ipakit 0.3.0__tar.gz → 0.4.0__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.
- {ipakit-0.3.0 → ipakit-0.4.0}/.github/workflows/ci.yml +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/.pre-commit-config.yaml +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/CHANGELOG.md +54 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/MANIFEST.in +7 -3
- {ipakit-0.3.0 → ipakit-0.4.0}/Makefile +11 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/PKG-INFO +27 -8
- {ipakit-0.3.0 → ipakit-0.4.0}/README.md +24 -6
- {ipakit-0.3.0 → ipakit-0.4.0}/conftest.py +24 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/README.md +3 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/capabilities.md +6 -5
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/cli-api-sync.md +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/clts-audit.md +2 -2
- ipakit-0.4.0/docs/clts-gaps.md +379 -0
- ipakit-0.4.0/docs/clts-import.md +99 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/clts-mapping.md +30 -22
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/samprosa.md +1 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/development-sources.md +8 -3
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/distance.md +20 -3
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/espeak-vocabularies.md +3 -3
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/feature-transforms.md +12 -12
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/derived-from-boundaries.dot +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/perhaps-i-am-a-bad-man.dot +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/house-style-exhibits.md +2 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/inventories.md +18 -18
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/inventories.src.md +8 -7
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/inventory-operations.md +22 -8
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/model-operations.md +31 -3
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/phoible.md +31 -25
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/releasing.md +6 -3
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/representation.md +14 -13
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/reviewing.md +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/rules.md +6 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/similarity.md +1 -1
- ipakit-0.4.0/docs/source-receipts.md +61 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tiergraph-acceptance.md +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/ties.md +17 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tract-anatomy.md +17 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tutorial.md +10 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tutorial.src.md +10 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/__init__.py +3 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_base.py +4 -0
- ipakit-0.4.0/ipakit/_clts_import.py +600 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_clts_input.py +17 -0
- ipakit-0.4.0/ipakit/_clts_profile.py +1155 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_convert.py +9 -5
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_corpus.py +7 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_provenance.py +41 -1
- ipakit-0.4.0/ipakit/_source_receipt.py +230 -0
- ipakit-0.4.0/ipakit/_warning_policy.py +56 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/analysis.py +28 -22
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/__init__.py +2 -2
- ipakit-0.4.0/ipakit/bridges/espeak.py +39 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/phoible.py +44 -13
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/vocabulary.py +10 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/__init__.py +8 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/analyze.py +13 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/base.py +42 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/convert.py +5 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/corpus.py +7 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/graph_json.py +2 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/hierarchy.py +4 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/info.py +2 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/inventory.py +11 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/metrics.py +3 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/model.py +178 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/notebook.py +2 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/phoible.py +4 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/policy.py +1 -62
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/query.py +6 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/rules.py +3 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/textgrid.py +9 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/tract.py +9 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/clts.py +20 -3
- ipakit-0.4.0/ipakit/clts_mapping.py +838 -0
- ipakit-0.4.0/ipakit/data/clts/import-result.schema.json +208 -0
- ipakit-0.4.0/ipakit/data/clts/manifest.json +131 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/clts/semantic-mapping.json +1360 -470
- ipakit-0.4.0/ipakit/data/clts/semantic-rules.json +166 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/confusion.json +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/feature-models/NOTICE.md +8 -7
- ipakit-0.4.0/ipakit/data/feature-models/panphon-receipt.json +40 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/feature-models/panphon.xml +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/heads.rng +14 -7
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/inventory-cards.xml +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/ipa.rng +4 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/ipa.xml +12 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phoible/NOTICE.txt +9 -15
- ipakit-0.4.0/ipakit/data/phoible/manifest.json +48 -0
- ipakit-0.4.0/ipakit/data/phonemaps/timit.xml +96 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phonemaps/xsampa.xml +1 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/rules/american-english.rules +5 -8
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/distance_model.py +2 -1
- ipakit-0.4.0/ipakit/espeak_source.py +761 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/extraction/phoible.py +35 -15
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/feature_models.py +4 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/features.py +100 -29
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/form.py +58 -7
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/inventories.py +49 -36
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/metric.py +5 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/notebooks/ipakit-tutorial.ipynb +20 -0
- ipakit-0.4.0/ipakit/panphon_source.py +113 -0
- ipakit-0.4.0/ipakit/phoible_source.py +193 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/rules.py +108 -12
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/tract.py +16 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit.egg-info/PKG-INFO +27 -8
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit.egg-info/SOURCES.txt +38 -133
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit.egg-info/requires.txt +2 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/pyproject.toml +10 -8
- ipakit-0.4.0/scripts/clts_import_fixtures.py +81 -0
- ipakit-0.4.0/scripts/clts_manifest.py +24 -0
- ipakit-0.4.0/scripts/clts_profile_example.py +62 -0
- ipakit-0.4.0/scripts/consolidation_parity.sha256 +1 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/dev_sources.py +24 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/espeak_vocabularies.py +6 -41
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/inventory_cards.py +52 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/panphon_geometry.py +143 -29
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/tiergraph_capture.py +3 -0
- ipakit-0.4.0/scripts/timit_map.py +240 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/xsampa_table.py +10 -0
- ipakit-0.4.0/tests/data/form_operation_classification.json +191 -0
- ipakit-0.4.0/tests/fixtures/clts_import/complete.json +1 -0
- ipakit-0.4.0/tests/fixtures/clts_import/empty.json +1 -0
- ipakit-0.4.0/tests/fixtures/clts_import/error.json +1 -0
- ipakit-0.4.0/tests/fixtures/clts_import/preserved.json +1 -0
- ipakit-0.4.0/tests/fixtures/clts_import/refused.json +1 -0
- ipakit-0.4.0/tests/fixtures/phoible/README.md +15 -0
- ipakit-0.4.0/tests/fixtures/phoible/mappings/InventoryID-Bibtex.csv +3 -0
- ipakit-0.4.0/tests/fixtures/phoible/mappings/InventoryID-LanguageCodes.csv +3 -0
- ipakit-0.4.0/tests/license-classes.json +168 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/panphon/panphon.rng +1 -14
- ipakit-0.4.0/tests/test_bilabial_nasal_release.py +64 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_bridges.py +37 -20
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli_hygiene.py +314 -22
- ipakit-0.4.0/tests/test_cli_model_transform_compare.py +170 -0
- ipakit-0.4.0/tests/test_cli_version.py +17 -0
- ipakit-0.4.0/tests/test_clts_import.py +911 -0
- ipakit-0.4.0/tests/test_clts_import_schema.py +123 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_clts_input.py +58 -0
- ipakit-0.4.0/tests/test_clts_manifest.py +307 -0
- ipakit-0.4.0/tests/test_clts_mapping.py +1191 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_clts_packaging.py +19 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_clts_snapshot.py +7 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_coherent_composition.py +117 -45
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_confusion.py +2 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_declared_not_hardcoded.py +1 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_dev_sources.py +61 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_feature_models.py +6 -13
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_finite_model.py +11 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_form.py +6 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_form_native_profile.py +12 -13
- ipakit-0.4.0/tests/test_form_operation_classification.py +174 -0
- ipakit-0.4.0/tests/test_form_reader_admission.py +134 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_inventories.py +5 -5
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_inventory_cards.py +4 -4
- ipakit-0.4.0/tests/test_library_hygiene.py +458 -0
- ipakit-0.4.0/tests/test_license_classes.py +457 -0
- ipakit-0.4.0/tests/test_overlong.py +50 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_packaging.py +78 -9
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_panphon_geometry.py +7 -7
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_panphon_live_geometry.py +34 -0
- ipakit-0.4.0/tests/test_panphon_receipt.py +110 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_phoible.py +5 -10
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_phoible_packaging.py +15 -8
- ipakit-0.4.0/tests/test_phoible_receipt.py +128 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_phoible_source.py +44 -27
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_query.py +25 -17
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_query_dsl.py +52 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_rule_sets.py +5 -4
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_rules.py +57 -5
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_scalar_reads.py +1 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_schema.py +40 -22
- ipakit-0.4.0/tests/test_superscript_releases.py +81 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_supplements.py +4 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tap_duration.py +7 -5
- ipakit-0.4.0/tests/test_timit_map.py +66 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tract_figures.py +12 -0
- ipakit-0.4.0/tests/test_unspelled_anchor.py +64 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_xsampa.py +310 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/MANIFEST.sha256 +10 -10
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/capture-metadata.json +2 -2
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/coordinates.json +6 -6
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/derived-artifacts.json +25 -10
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/perturbation-proof.json +5 -5
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/piece1-canonical-store.json +8 -8
- ipakit-0.4.0/tests/tiergraph/fixtures/clts_core_bipa_profile.json +2106 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/hot_bridge_projection.json +1 -1
- ipakit-0.4.0/tests/tiergraph/test_clts_profile.py +996 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_fixture_wellformedness.py +2 -1
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_form_store.py +31 -0
- ipakit-0.3.0/docs/clts-gaps.md +0 -352
- ipakit-0.3.0/ipakit/_clts_profile.py +0 -471
- ipakit-0.3.0/ipakit/bridges/espeak.py +0 -25
- ipakit-0.3.0/ipakit/clts_mapping.py +0 -461
- ipakit-0.3.0/ipakit/data/bridges/espeak/af.xml +0 -181
- ipakit-0.3.0/ipakit/data/bridges/espeak/am.xml +0 -133
- ipakit-0.3.0/ipakit/data/bridges/espeak/an.xml +0 -164
- ipakit-0.3.0/ipakit/data/bridges/espeak/ar.xml +0 -139
- ipakit-0.3.0/ipakit/data/bridges/espeak/as.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/az.xml +0 -164
- ipakit-0.3.0/ipakit/data/bridges/espeak/ba.xml +0 -147
- ipakit-0.3.0/ipakit/data/bridges/espeak/be.xml +0 -164
- ipakit-0.3.0/ipakit/data/bridges/espeak/bg.xml +0 -149
- ipakit-0.3.0/ipakit/data/bridges/espeak/bn.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/bpy.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/ca-ba.xml +0 -172
- ipakit-0.3.0/ipakit/data/bridges/espeak/ca-nw.xml +0 -172
- ipakit-0.3.0/ipakit/data/bridges/espeak/ca-va.xml +0 -172
- ipakit-0.3.0/ipakit/data/bridges/espeak/ca.xml +0 -172
- ipakit-0.3.0/ipakit/data/bridges/espeak/chr.xml +0 -192
- ipakit-0.3.0/ipakit/data/bridges/espeak/cmn.xml +0 -204
- ipakit-0.3.0/ipakit/data/bridges/espeak/cs.xml +0 -170
- ipakit-0.3.0/ipakit/data/bridges/espeak/cv.xml +0 -168
- ipakit-0.3.0/ipakit/data/bridges/espeak/cy.xml +0 -173
- ipakit-0.3.0/ipakit/data/bridges/espeak/da.xml +0 -181
- ipakit-0.3.0/ipakit/data/bridges/espeak/de.xml +0 -181
- ipakit-0.3.0/ipakit/data/bridges/espeak/el.xml +0 -157
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-n.xml +0 -230
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-rp.xml +0 -230
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-sc.xml +0 -232
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-us-nyc.xml +0 -229
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-us.xml +0 -229
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-wi.xml +0 -230
- ipakit-0.3.0/ipakit/data/bridges/espeak/en-wm.xml +0 -230
- ipakit-0.3.0/ipakit/data/bridges/espeak/en.xml +0 -70
- ipakit-0.3.0/ipakit/data/bridges/espeak/eo.xml +0 -140
- ipakit-0.3.0/ipakit/data/bridges/espeak/es-la.xml +0 -161
- ipakit-0.3.0/ipakit/data/bridges/espeak/es.xml +0 -161
- ipakit-0.3.0/ipakit/data/bridges/espeak/et.xml +0 -166
- ipakit-0.3.0/ipakit/data/bridges/espeak/eu.xml +0 -162
- ipakit-0.3.0/ipakit/data/bridges/espeak/fa.xml +0 -133
- ipakit-0.3.0/ipakit/data/bridges/espeak/fi.xml +0 -178
- ipakit-0.3.0/ipakit/data/bridges/espeak/fo.xml +0 -193
- ipakit-0.3.0/ipakit/data/bridges/espeak/fr.xml +0 -177
- ipakit-0.3.0/ipakit/data/bridges/espeak/ga.xml +0 -171
- ipakit-0.3.0/ipakit/data/bridges/espeak/gd.xml +0 -176
- ipakit-0.3.0/ipakit/data/bridges/espeak/gn.xml +0 -141
- ipakit-0.3.0/ipakit/data/bridges/espeak/grc.xml +0 -165
- ipakit-0.3.0/ipakit/data/bridges/espeak/gu.xml +0 -192
- ipakit-0.3.0/ipakit/data/bridges/espeak/hak.xml +0 -168
- ipakit-0.3.0/ipakit/data/bridges/espeak/haw.xml +0 -148
- ipakit-0.3.0/ipakit/data/bridges/espeak/he.xml +0 -127
- ipakit-0.3.0/ipakit/data/bridges/espeak/hi.xml +0 -188
- ipakit-0.3.0/ipakit/data/bridges/espeak/hr.xml +0 -179
- ipakit-0.3.0/ipakit/data/bridges/espeak/ht.xml +0 -177
- ipakit-0.3.0/ipakit/data/bridges/espeak/hu.xml +0 -146
- ipakit-0.3.0/ipakit/data/bridges/espeak/hy.xml +0 -144
- ipakit-0.3.0/ipakit/data/bridges/espeak/ia.xml +0 -140
- ipakit-0.3.0/ipakit/data/bridges/espeak/id.xml +0 -163
- ipakit-0.3.0/ipakit/data/bridges/espeak/is.xml +0 -171
- ipakit-0.3.0/ipakit/data/bridges/espeak/it.xml +0 -176
- ipakit-0.3.0/ipakit/data/bridges/espeak/ja.xml +0 -138
- ipakit-0.3.0/ipakit/data/bridges/espeak/jbo.xml +0 -140
- ipakit-0.3.0/ipakit/data/bridges/espeak/ka.xml +0 -134
- ipakit-0.3.0/ipakit/data/bridges/espeak/kaa.xml +0 -144
- ipakit-0.3.0/ipakit/data/bridges/espeak/kk.xml +0 -144
- ipakit-0.3.0/ipakit/data/bridges/espeak/kl.xml +0 -145
- ipakit-0.3.0/ipakit/data/bridges/espeak/kn.xml +0 -188
- ipakit-0.3.0/ipakit/data/bridges/espeak/ko.xml +0 -140
- ipakit-0.3.0/ipakit/data/bridges/espeak/kok.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/ku.xml +0 -166
- ipakit-0.3.0/ipakit/data/bridges/espeak/ky.xml +0 -136
- ipakit-0.3.0/ipakit/data/bridges/espeak/la.xml +0 -154
- ipakit-0.3.0/ipakit/data/bridges/espeak/lb.xml +0 -171
- ipakit-0.3.0/ipakit/data/bridges/espeak/lt.xml +0 -179
- ipakit-0.3.0/ipakit/data/bridges/espeak/lv.xml +0 -164
- ipakit-0.3.0/ipakit/data/bridges/espeak/mi.xml +0 -163
- ipakit-0.3.0/ipakit/data/bridges/espeak/mk.xml +0 -180
- ipakit-0.3.0/ipakit/data/bridges/espeak/ml.xml +0 -193
- ipakit-0.3.0/ipakit/data/bridges/espeak/mr.xml +0 -192
- ipakit-0.3.0/ipakit/data/bridges/espeak/ms.xml +0 -163
- ipakit-0.3.0/ipakit/data/bridges/espeak/mt.xml +0 -167
- ipakit-0.3.0/ipakit/data/bridges/espeak/mto.xml +0 -170
- ipakit-0.3.0/ipakit/data/bridges/espeak/my.xml +0 -246
- ipakit-0.3.0/ipakit/data/bridges/espeak/nci.xml +0 -157
- ipakit-0.3.0/ipakit/data/bridges/espeak/ne.xml +0 -204
- ipakit-0.3.0/ipakit/data/bridges/espeak/nl.xml +0 -164
- ipakit-0.3.0/ipakit/data/bridges/espeak/no.xml +0 -168
- ipakit-0.3.0/ipakit/data/bridges/espeak/nog.xml +0 -144
- ipakit-0.3.0/ipakit/data/bridges/espeak/nso.xml +0 -133
- ipakit-0.3.0/ipakit/data/bridges/espeak/om.xml +0 -144
- ipakit-0.3.0/ipakit/data/bridges/espeak/or.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/pa.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/piqd.xml +0 -176
- ipakit-0.3.0/ipakit/data/bridges/espeak/pl.xml +0 -147
- ipakit-0.3.0/ipakit/data/bridges/espeak/prs.xml +0 -135
- ipakit-0.3.0/ipakit/data/bridges/espeak/pt-pt.xml +0 -185
- ipakit-0.3.0/ipakit/data/bridges/espeak/pt.xml +0 -185
- ipakit-0.3.0/ipakit/data/bridges/espeak/py.xml +0 -144
- ipakit-0.3.0/ipakit/data/bridges/espeak/qdb.xml +0 -230
- ipakit-0.3.0/ipakit/data/bridges/espeak/qu.xml +0 -132
- ipakit-0.3.0/ipakit/data/bridges/espeak/quc.xml +0 -127
- ipakit-0.3.0/ipakit/data/bridges/espeak/qya.xml +0 -159
- ipakit-0.3.0/ipakit/data/bridges/espeak/ro.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/ru-lv.xml +0 -177
- ipakit-0.3.0/ipakit/data/bridges/espeak/ru.xml +0 -177
- ipakit-0.3.0/ipakit/data/bridges/espeak/sd.xml +0 -188
- ipakit-0.3.0/ipakit/data/bridges/espeak/shn.xml +0 -171
- ipakit-0.3.0/ipakit/data/bridges/espeak/si.xml +0 -194
- ipakit-0.3.0/ipakit/data/bridges/espeak/sjn.xml +0 -161
- ipakit-0.3.0/ipakit/data/bridges/espeak/sk.xml +0 -170
- ipakit-0.3.0/ipakit/data/bridges/espeak/sl.xml +0 -150
- ipakit-0.3.0/ipakit/data/bridges/espeak/smj.xml +0 -189
- ipakit-0.3.0/ipakit/data/bridges/espeak/sq.xml +0 -159
- ipakit-0.3.0/ipakit/data/bridges/espeak/sr.xml +0 -181
- ipakit-0.3.0/ipakit/data/bridges/espeak/sv.xml +0 -160
- ipakit-0.3.0/ipakit/data/bridges/espeak/sw.xml +0 -127
- ipakit-0.3.0/ipakit/data/bridges/espeak/ta.xml +0 -194
- ipakit-0.3.0/ipakit/data/bridges/espeak/te.xml +0 -188
- ipakit-0.3.0/ipakit/data/bridges/espeak/th.xml +0 -171
- ipakit-0.3.0/ipakit/data/bridges/espeak/ti.xml +0 -134
- ipakit-0.3.0/ipakit/data/bridges/espeak/tk.xml +0 -173
- ipakit-0.3.0/ipakit/data/bridges/espeak/tn.xml +0 -145
- ipakit-0.3.0/ipakit/data/bridges/espeak/tr.xml +0 -164
- ipakit-0.3.0/ipakit/data/bridges/espeak/tt.xml +0 -147
- ipakit-0.3.0/ipakit/data/bridges/espeak/ug.xml +0 -166
- ipakit-0.3.0/ipakit/data/bridges/espeak/uk.xml +0 -133
- ipakit-0.3.0/ipakit/data/bridges/espeak/ur.xml +0 -188
- ipakit-0.3.0/ipakit/data/bridges/espeak/uz.xml +0 -147
- ipakit-0.3.0/ipakit/data/bridges/espeak/vi-hue.xml +0 -193
- ipakit-0.3.0/ipakit/data/bridges/espeak/vi-sgn.xml +0 -191
- ipakit-0.3.0/ipakit/data/bridges/espeak/vi.xml +0 -200
- ipakit-0.3.0/ipakit/data/bridges/espeak/yue.xml +0 -180
- ipakit-0.3.0/ipakit/data/clts/semantic-rules.json +0 -41
- ipakit-0.3.0/ipakit/data/phoible/GPL-3.0.txt +0 -674
- ipakit-0.3.0/ipakit/data/phoible/manifest.json +0 -27
- ipakit-0.3.0/ipakit/data/phoible/mappings/InventoryID-Bibtex.csv.gz +0 -0
- ipakit-0.3.0/ipakit/data/phoible/mappings/InventoryID-LanguageCodes.csv.gz +0 -0
- ipakit-0.3.0/ipakit/data/phoible-policy.json +0 -12
- ipakit-0.3.0/ipakit/data/phonemaps/timit.xml +0 -96
- ipakit-0.3.0/ipakit/phoible_source.py +0 -83
- ipakit-0.3.0/scripts/consolidation_parity.sha256 +0 -1
- ipakit-0.3.0/tests/fixtures/phoible/README.md +0 -7
- ipakit-0.3.0/tests/fixtures/phoible/mappings/InventoryID-Bibtex.csv +0 -3
- ipakit-0.3.0/tests/fixtures/phoible/mappings/InventoryID-LanguageCodes.csv +0 -3
- ipakit-0.3.0/tests/test_clts_mapping.py +0 -232
- ipakit-0.3.0/tests/tiergraph/test_clts_profile.py +0 -456
- {ipakit-0.3.0 → ipakit-0.4.0}/.github/workflows/publish.yml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/LICENSE +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/anchor-study.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/articulatory-data.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/calculus.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/corpus-scaling-report.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/corpus.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/data/english-syllable-curation-2026-08-11.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/README.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/archive/README.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/archive/ip-p1-store-approach.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/archive/piece1-canonical-store.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/braces.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/captures.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/conlang.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/ecosystem.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/frontal-view.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/historical-linguistics.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/interop.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/mass-budget.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/morph-boundary.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/residency-allowlist.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/supplement-bridges.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/tiers.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/tract-validation.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/vowel-chart-geometry.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/design/vowel-constriction.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-a.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-i.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-m.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-reference.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-rest.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-t.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/frontal-u.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-a.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-eng.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-esh.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-i.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-k.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-m.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-n.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-reference.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-s.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-silence.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-t.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-theta.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/tract-u.svg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/figures/two-pane-timed.html +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/form.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/gestural-model.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/glossary.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/house-style.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/kana.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/mfa-vocabularies.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/perceptual-validation-exhibits.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/pinyin.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/reading.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/state-of-the-work.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/supplements.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/syllabification.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/systems.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/textgrid.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tone.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tract-figures.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tract-reference.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tutorial-basics.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/docs/tutorial-basics.src.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/__main__.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_cmu_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_codecs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_containment_projection.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_corpus_cmudict.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_corpus_query.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_fact_builder.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_form_profile.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_gesture_backend.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_gesture_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_graph_facts.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_identity.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_ipa_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_katakana_codec.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_mora_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_moraic.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_notebook.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_panphon_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_pinyin_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_rewrite_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_rule_model.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_scalar_attribute.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_textgrid_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/_token_corpus.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/align.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/anatomy.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/binary_cost.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/base.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/costmodel.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/generator.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/ipa_dict.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/kana.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/mfa.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/notation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/pinyin.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/bridges/provider.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/__main__.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/analysis_cmds.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/distance.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/features.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/syllabify.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/cli/tiergraph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/closure.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/constants.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/corpus.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/attested/miller_nicely_1955.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/kana/kana.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/arabic.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/bulgarian.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/croatian.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/czech.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/english.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/english_india.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/english_nigeria.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/english_nonnative.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/english_uk.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/english_us.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/french.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/german.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/hausa.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/japanese.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/korean.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/korean_jamo.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/mandarin.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/mandarin_china.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/mandarin_erhua.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/mandarin_taiwan.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/mfa.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/polish.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/portuguese.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/portuguese_brazil.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/portuguese_portugal.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/russian.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/serbocroatian.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/spanish.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/spanish_latin_america.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/spanish_spain.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/swahili.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/swedish.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/tamil.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/thai.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/turkish.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/ukrainian.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/vietnamese.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/vietnamese_hanoi.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/vietnamese_ho_chi_minh_city.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/mfa/vietnamese_hue.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/pinyin/pinyin.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/bridges/vocabulary.rng +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/clts/MAPPING-NOTICE.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/clts/NOTICE.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/clts/core.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/clts/source.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/feature-models/PANPHON-LICENSE.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/heads.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/inventory-cards.rng +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/mfa-curation.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phoible/CC-BY-SA-3.0.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phoible/MIT-upstream.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phoible/data/phoible-references.bib.gz +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phoible/data/phoible.csv.gz +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phonemaps/cmu.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phonemaps/kirshenbaum.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phonemaps/lookalikes.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/phonemaps/phonemap.rng +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/rules/french-liaison.rules +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/rules/german-final-devoicing.rules +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/rules/japanese-moraic.rules +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/rules/spanish-accented-english.rules +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/supplements/aspirated-stops.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/supplements/supplement.rng +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/syllables/english.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/syllables/japanese.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/syllables/mandarin.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/syllables/spanish.xml +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/syllables/syllables.rng +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/textgrid/mfa.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/textgrid/prosody.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/textgrid/segments.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/data/textgrid/words.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/disagreement.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/distance.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/distance_registry.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/experiment.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/extraction/__init__.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/extraction/mfa.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/feature_experiment.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/feature_sets.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/feature_transform.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/finite_declaration.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/finite_model.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/graph_json.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/hierarchy.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/inventory_operations.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/mapper.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/model_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/models.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/phonemaps.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/phoneset_map.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/py.typed +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/segment.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/syllable.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/textgrid.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/tiergraph_dot.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/tract_svg.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/validation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit/xsampa.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit.egg-info/dependency_links.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit.egg-info/entry_points.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/ipakit.egg-info/top_level.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/_comparison_order.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/anchor_study.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/areafunctions.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/articulatory.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/check_hrefs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/compare_inventories.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/confusion.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/consolidation_parity.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/containment_oracle.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/corpus_scaling.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/costmodel_compare.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/disagreement_demo.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/docexamples.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/docquotes.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/frontal_figures.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/gate_subject.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/geometry.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/house_style.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/interop.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/invariants.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/mfa_vocabularies.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/perceptual_validation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/piece1_oracle.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/projection_cache_characterization.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/state_of_work.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/sweep.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/syllable_curation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/tiergraph_example.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/tract_svg.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/scripts/tutorial.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/setup.cfg +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/ANIMATION_LIMITS.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/__init__.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/_renderers.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/conftest.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/corpus.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/_capture_animation_sha256.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/_capture_epiglottal_constriction.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/_capture_posture_golden.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/_capture_velic_contrast.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/alignment/README.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/alignment/hello-world.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/alignment/hello-world.wav +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/animation_sha256.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/cmudict_excerpt.dict +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/epiglottal_constriction.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/espeak_cmn_1_52_0.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/espeak_en_1_52_0.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/ipa_dict_en_US.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/mfa_english_us_v3_1_0.dict +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/phoible/data/phoible.csv +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/posture_golden.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/reference_landmark_distances.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/textgrid/cmudict.TextGrid +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/textgrid/cmudict_stress.TextGrid +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/textgrid/mfa_two_words.TextGrid +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/textgrid/mfa_untied.TextGrid +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/textgrid/prosody_hello.TextGrid +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/velic_contrast.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/fixtures/xrmb_anchor_prompts.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/panphon/shared-corpus.txt +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_agreement.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_align.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_analysis.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_anchor_study.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_animation_rest.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_api.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_api_contracts.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_boundary_distance.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_calculus.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_capture_scripts.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_ci_contract.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli_distance_registry.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli_model.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli_model_query.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli_model_rules.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cli_query.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_closure.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_clts_audit.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_cmu.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_comparison_example.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_constriction_location.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_corpus_cmudict.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_corpus_kernel.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_corpus_query.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_costmodel.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_costmodel_accumulation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_costmodel_admission.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_costmodel_normalization.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_degenerate_boundaries.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_denominator.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_descriptions.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_determinism.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_disagreement.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_distance.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_distance_model.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_distance_registry.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_distinctive_difference.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_doc_citations.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_docquotes.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_espeak_binary.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_espeak_generator.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_experiment.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_extraction.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_feature_experiment.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_feature_reads.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_feature_realization.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_feature_transform.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_features.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_features_narrowing.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_fortis.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_frontal.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_geometry_doc.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_head_arcs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_hierarchy.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_indel_costs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_intervals.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_inventory_operations.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_invertibility.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_ipa_dict.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_japanese_mora_regressions.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_jaw_hinge.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_kana_provenance.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_license.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_ligature_aliases.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_linking_and_agreement.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_metric.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_mfa_vocabularies.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_model_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_model_rules.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_models.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_modifier_modes.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_multi_constriction.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_nearest_pronunciation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_nonfinal_modifiers.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_notation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_notebook.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_one_classification.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_one_composition.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_panphon_facts.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_perceptual_validation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_phonemaps.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_phoneset_comparison.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_phoneset_map.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_posture_animation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_posture_no_side_channel.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_projection_cache.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_projection_coherence.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_prosodic_riders.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_rank_agreement.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_redundant_marks.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_scoring_parameters.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_search.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_segment.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_sentinels.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_sequence_scoring.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_stress.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_strict.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_surface_wave2.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_syllable_docs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_syllable_english.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_syllable_japanese.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_syllable_mandarin.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_syllable_mechanism.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_syllable_spanish.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_textgrid.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tie_convergence.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tie_sense.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tier_context.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tier_rebase.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tiergraph_acceptance_docs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tiers.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tokenization.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tone_contours.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_tract_blend.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_trajectory_track.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_transcription_distance.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_two_marks.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_unicode_normalization.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_unicode_recomposition.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_unplaced_marks.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_validation.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_variable_width.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_vowel_tract_limit.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_wiki.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/test_zero.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/README.md +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/containment-navigation.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/baselines/distance-alignments.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/choice_selection_v1.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/cmudict/pocketsphinx.tsv +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/cmudict/upstream.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/choices_and_containment.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/clock_and_ordering.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/duration_and_relation_endpoints.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/endpoints.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/index.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/prosodic_deliveries.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/signature_edits.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/fixtures/unit_coordinates.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/structured_segment_v3.json +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_choice_selection_golden.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_codecs.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_consolidation_parity.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_declared_values.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_dot.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_gesture_integration.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_ipa_graph.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_j_panphon.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_j_profiles.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_lane_m_stabilization.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_piece1_oracle.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_pinyin_correctness.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_prominence.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_rewrite_bridge.py +0 -0
- {ipakit-0.3.0 → ipakit-0.4.0}/tests/tiergraph/test_scalar_attribute.py +0 -0
|
@@ -209,7 +209,7 @@ jobs:
|
|
|
209
209
|
- name: CLTS snapshot regeneration and exhaustive scorer parity
|
|
210
210
|
env:
|
|
211
211
|
IPAKIT_CLTS_DIR: ${{ github.workspace }}/.clts-source
|
|
212
|
-
run: pytest tests/test_clts_snapshot.py
|
|
212
|
+
run: pytest tests/test_clts_snapshot.py tests/test_clts_mapping.py tests/tiergraph/test_clts_profile.py
|
|
213
213
|
- name: Comparison extras tests (partition check skips in the matrix job)
|
|
214
214
|
run: pytest tests/test_comparison_example.py
|
|
215
215
|
|
|
@@ -53,7 +53,7 @@ repos:
|
|
|
53
53
|
- id: mypy
|
|
54
54
|
# Native GraphProfile subclasses need the same runtime types CI installs.
|
|
55
55
|
# tests/test_ci_contract.py keeps this requirement equal to pyproject.
|
|
56
|
-
additional_dependencies: ["tiergraph>=0.
|
|
56
|
+
additional_dependencies: ["tiergraph>=0.4.0"]
|
|
57
57
|
# NOT widened to match the others. `pyproject.toml` sets
|
|
58
58
|
# `files = ["ipakit"]` deliberately, because the lint job installs
|
|
59
59
|
# `.[lint]`, which has no pytest -- a scope reaching a test file
|
|
@@ -7,6 +7,58 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.4.0] - 2026-09-29
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- A JSON Schema and five canonical fixtures define the public CLTS import envelopes.
|
|
15
|
+
- `unsupported="preserve"` keeps unsupported CLTS occurrences as source material instead of refusing the import.
|
|
16
|
+
- `load_import` reloads a saved strict import only when a fresh import reproduces it exactly.
|
|
17
|
+
- Public strict CLTS import now accepts explicit tokens; only reviewed plain stops (`p b t d`) import successfully, and every other occurrence is reported.
|
|
18
|
+
- `InputLossWarning` is exported for callers that need to classify lossy public reads.
|
|
19
|
+
- The CLTS mapping records its reviewed source-profile basis, and import compatibility refuses a different profile.
|
|
20
|
+
- A final, verified CLTS core-BIPA receipt ships as `manifest.json`.
|
|
21
|
+
- `ˢ`, `ʳ`, and `ʶ` write distinct sibilant, trilled, and uvular release values.
|
|
22
|
+
- `ᵐ` writes the distinct `bilabial-nasal` release value; `ⁿ` remains generic nasal release.
|
|
23
|
+
- `ipakit --version` prints the installed version.
|
|
24
|
+
- `ipakit model transform` applies an explicit finite ternary-to-binary encoding and reports its preimage and loss evidence.
|
|
25
|
+
- `ipakit model compare` compares original and explicitly selected binary encodings over exact token corpora.
|
|
26
|
+
- Written `ːː` is the `overlong` value on the length scale. Each length step is now a quarter of the scale rather than a third; `confusion.json` and `metric_fingerprint` move, so a distance matrix saved before this change is read as a different feature space.
|
|
27
|
+
- CLTS vowel and consonant duration declarations map to distinct house length values when the source asserts them.
|
|
28
|
+
- The CLTS gap report records enhancement candidates, their evidence and dispositions, including the additions accepted for lane H.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- The TIMIT map is generated from ipakit's transcription of NISTIR 4930 §4.3: `epi` is silence, the closures are unreleased stops, and `ux` and `ax-h` are mapped.
|
|
33
|
+
- Requires tiergraph 0.4.0 or later.
|
|
34
|
+
- eSpeak inventories are built from the user's eSpeak NG checkout (`IPAKIT_ESPEAK_NG` or an explicit path); no eSpeak-derived data ships.
|
|
35
|
+
- PHOIBLE's GPL mapping tables are read from the user's PHOIBLE (`IPAKIT_PHOIBLE`); the CC BY-SA main data keeps shipping.
|
|
36
|
+
- CLTS input documents refuse a second host for one tone, a duplicate relation, an unencodable raw, and an out-of-range integer time, each at its location.
|
|
37
|
+
- Profile-bound CLTS eligibility now derives reviewed plain-stop projections and affricate-juncture refusals.
|
|
38
|
+
- Profile-bound CLTS eligibility reports unattempted occurrences with the `not-attempted` reason.
|
|
39
|
+
- Public soft-reader warnings are classified as input loss even when their warning location names the library caller.
|
|
40
|
+
- PHOIBLE's shipped `manifest.json` now uses the shared source-receipt schema, and Panphon provenance lives only in its adjacent receipt.
|
|
41
|
+
- Every CLI command declares the notation it reads, or that it reads none; the fourteen that read one without saying so now name it in their help.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- Rule changes can assign a declared feature value spelled `0`.
|
|
46
|
+
- The X-SAMPA round-trip exception list covers every composition where a table key spans a unit boundary, and the README states the swept spaces exactly.
|
|
47
|
+
- Postfix brace constraints conjoin with their base instead of overwriting it.
|
|
48
|
+
- Reads refuse declared unspelled values instead of silently matching every unit or none.
|
|
49
|
+
- Feature-valued CLTS release rules now state and enforce their source-assertion condition.
|
|
50
|
+
- The public Form reader refuses declared source facts on a tier with no house unit.
|
|
51
|
+
- Source-profile host relations preserve their supplied order through native graph restoration.
|
|
52
|
+
- CLTS mapping dispositions use the reviewed audit classes, and segmental-release sequences state and enforce their host and juncture limits.
|
|
53
|
+
- The CLTS declaration census refuses a same-kind value spelling declared under multiple features.
|
|
54
|
+
- `ipakit corpus validate` exits 3 when a stored form holds a symbol the inventory does not register.
|
|
55
|
+
- Assigning the declared unmarked `stress=none` value removes a written stress mark.
|
|
56
|
+
- Empty and boundary-only forms return no inferred tier intervals instead of crashing.
|
|
57
|
+
- Rest-posture lip, jaw and velum states reject unknown spellings.
|
|
58
|
+
- The tract-anatomy guide describes and measures the current structured drawings.
|
|
59
|
+
- Forms constructed from units use those units' custom inventory declarations in their graph facts.
|
|
60
|
+
- An inventory refuses a declared unspelled value that one of its marks spells, and the metric anchors a prosodic feature at its declared unspelled value.
|
|
61
|
+
|
|
10
62
|
## [0.3.0] - 2026-09-23
|
|
11
63
|
|
|
12
64
|
### Added
|
|
@@ -389,6 +441,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
389
441
|
- Precomposed characters (`ã`) were dropped at ingest; decomposed `ç` misparsed as bare `c` (#8).
|
|
390
442
|
- `docs/distance.md` states plainly that `distance` is not a metric.
|
|
391
443
|
|
|
392
|
-
[Unreleased]: https://github.com/lenzo-ka/ipakit/compare/v0.
|
|
444
|
+
[Unreleased]: https://github.com/lenzo-ka/ipakit/compare/v0.4.0...HEAD
|
|
445
|
+
[0.4.0]: https://github.com/lenzo-ka/ipakit/compare/v0.3.0...v0.4.0
|
|
393
446
|
[0.3.0]: https://github.com/lenzo-ka/ipakit/compare/v0.2.0...v0.3.0
|
|
394
447
|
[0.2.0]: https://github.com/lenzo-ka/ipakit/releases/tag/v0.2.0
|
|
@@ -46,7 +46,11 @@ global-exclude *.py[cod] .DS_Store
|
|
|
46
46
|
prune tests/.pytest_cache
|
|
47
47
|
|
|
48
48
|
# Bridge declarations and the grammars stating their shape.
|
|
49
|
-
|
|
49
|
+
include ipakit/data/bridges/vocabulary.rng
|
|
50
|
+
recursive-include ipakit/data/bridges/kana *.xml
|
|
51
|
+
recursive-include ipakit/data/bridges/mfa *.xml
|
|
52
|
+
recursive-include ipakit/data/bridges/pinyin *.xml
|
|
50
53
|
recursive-include ipakit/data/textgrid *.json
|
|
51
|
-
recursive-include ipakit/data/feature-models *.xml *.txt *.md
|
|
52
|
-
recursive-include ipakit/data/phoible *.
|
|
54
|
+
recursive-include ipakit/data/feature-models *.xml *.txt *.md *-receipt.json
|
|
55
|
+
recursive-include ipakit/data/phoible *.txt *.json
|
|
56
|
+
recursive-include ipakit/data/phoible/data *.gz
|
|
@@ -16,12 +16,12 @@ HEAD ?= adult-male
|
|
|
16
16
|
# put IPA; the symbol it draws is in the second column.
|
|
17
17
|
FIGURES := m:m n:n eng:ŋ t:t k:k theta:θ s:s esh:ʃ a:a i:i u:u silence:␣
|
|
18
18
|
|
|
19
|
-
.PHONY: figures figures-clean tutorial tutorial-basics notebook inventory-cards inventory-cards-check house-style perceptual-validation state-of-work espeak-vocabularies espeak-vocabularies-check mfa-vocabularies mfa-vocabularies-check panphon-geometry-check lint check gate-subject
|
|
19
|
+
.PHONY: figures figures-clean tutorial tutorial-basics notebook inventory-cards inventory-cards-check house-style perceptual-validation state-of-work espeak-vocabularies espeak-vocabularies-check mfa-vocabularies mfa-vocabularies-check timit-map timit-map-check panphon-geometry-check lint check gate-subject
|
|
20
20
|
|
|
21
21
|
ESPEAK_NG ?= $(HOME)/dev/other/espeak-ng
|
|
22
22
|
MFA_MODELS ?= $(HOME)/.cache/ipakit/mfa-models
|
|
23
23
|
|
|
24
|
-
## espeak-vocabularies:
|
|
24
|
+
## espeak-vocabularies: validate user-sourced declarations and refresh the summary
|
|
25
25
|
espeak-vocabularies:
|
|
26
26
|
@if test ! -d "$(ESPEAK_NG)/.git"; then \
|
|
27
27
|
echo "espeak-vocabularies: pinned checkout absent; nothing regenerated"; \
|
|
@@ -51,19 +51,25 @@ mfa-vocabularies-check:
|
|
|
51
51
|
$(PYTHON) scripts/mfa_vocabularies.py check --source "$(MFA_MODELS)"; \
|
|
52
52
|
fi
|
|
53
53
|
|
|
54
|
+
timit-map:
|
|
55
|
+
@$(PYTHON) scripts/timit_map.py generate --write
|
|
56
|
+
|
|
57
|
+
timit-map-check:
|
|
58
|
+
@$(PYTHON) scripts/timit_map.py check
|
|
59
|
+
|
|
54
60
|
## inventory-cards: regenerate docs/inventories.md from declarations and counts
|
|
55
61
|
inventory-cards:
|
|
56
62
|
@if test ! -f "$(MFA_MODELS)/dictionary/english/us_mfa/english_us_mfa.dict"; then \
|
|
57
63
|
echo "inventory-cards: pinned MFA dictionary absent; nothing regenerated"; \
|
|
58
64
|
else \
|
|
59
|
-
$(PYTHON) scripts/inventory_cards.py build --mfa-models "$(MFA_MODELS)"; \
|
|
65
|
+
IPAKIT_ESPEAK_NG="$(ESPEAK_NG)" $(PYTHON) scripts/inventory_cards.py build --mfa-models "$(MFA_MODELS)"; \
|
|
60
66
|
fi
|
|
61
67
|
|
|
62
68
|
inventory-cards-check:
|
|
63
69
|
@if test ! -f "$(MFA_MODELS)/dictionary/english/us_mfa/english_us_mfa.dict"; then \
|
|
64
70
|
echo "inventory-cards: pinned MFA dictionary absent; generated-document check skipped"; \
|
|
65
71
|
else \
|
|
66
|
-
$(PYTHON) scripts/inventory_cards.py check --mfa-models "$(MFA_MODELS)"; \
|
|
72
|
+
IPAKIT_ESPEAK_NG="$(ESPEAK_NG)" $(PYTHON) scripts/inventory_cards.py check --mfa-models "$(MFA_MODELS)"; \
|
|
67
73
|
fi
|
|
68
74
|
|
|
69
75
|
panphon-geometry-check:
|
|
@@ -177,6 +183,7 @@ check: gate-subject lint
|
|
|
177
183
|
@$(NICE) $(PYTHON) scripts/state_of_work.py check
|
|
178
184
|
@$(MAKE) --no-print-directory espeak-vocabularies-check
|
|
179
185
|
@$(MAKE) --no-print-directory mfa-vocabularies-check
|
|
186
|
+
@$(MAKE) --no-print-directory timit-map-check
|
|
180
187
|
@$(MAKE) --no-print-directory panphon-geometry-check
|
|
181
188
|
@$(MAKE) --no-print-directory inventory-cards-check
|
|
182
189
|
@PYTHONHASHSEED=0 $(NICE) $(PYTHON) scripts/tutorial.py check all
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ipakit
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: IPA toolkit: phonetic features, distance, tokenization, rules, and conversions
|
|
5
5
|
Author: Kevin Lenzo
|
|
6
6
|
License-Expression: BSD-2-Clause
|
|
@@ -22,11 +22,12 @@ Classifier: Typing :: Typed
|
|
|
22
22
|
Requires-Python: >=3.12
|
|
23
23
|
Description-Content-Type: text/markdown
|
|
24
24
|
License-File: LICENSE
|
|
25
|
-
Requires-Dist: tiergraph
|
|
25
|
+
Requires-Dist: tiergraph>=0.4.0
|
|
26
26
|
Provides-Extra: test
|
|
27
27
|
Requires-Dist: pytest>=9.1.1; extra == "test"
|
|
28
28
|
Requires-Dist: pytest-xdist>=3.8.0; extra == "test"
|
|
29
29
|
Requires-Dist: lxml>=6.1.2; extra == "test"
|
|
30
|
+
Requires-Dist: jsonschema>=4.26.0; extra == "test"
|
|
30
31
|
Requires-Dist: packaging>=24.2; extra == "test"
|
|
31
32
|
Requires-Dist: PyYAML<7,>=6.0.3; extra == "test"
|
|
32
33
|
Requires-Dist: setuptools>=84.0.0; extra == "test"
|
|
@@ -88,7 +89,7 @@ derived forms, expose structural queries at the shell, and test rule systems
|
|
|
88
89
|
against paired forms. That is also the substrate on which rule induction can
|
|
89
90
|
run; the inducer itself remains a separate concern.
|
|
90
91
|
|
|
91
|
-
Praat TextGrids enter and leave through named tier profiles, including an MFA alignment profile. The
|
|
92
|
+
Praat TextGrids enter and leave through named tier profiles, including an MFA alignment profile. The [inventory registry](https://github.com/lenzo-ka/ipakit/blob/main/docs/inventories.md) includes pinned MFA phone declarations and adds eSpeak NG vocabularies from a user-supplied checkout, while [TextGrid interchange](https://github.com/lenzo-ka/ipakit/blob/main/docs/textgrid.md) applies those inventory styles to tier labels without guessing.
|
|
92
93
|
|
|
93
94
|
The package uses tiergraph for graph navigation; its phonetic data and geometry
|
|
94
95
|
ship as declarations. It is typed, and the Python API and `ipakit` command expose the
|
|
@@ -305,11 +306,27 @@ A word comparison reports `coverage` — the shorter token count over the longer
|
|
|
305
306
|
onset: `from_cmu(["K", "AE1", "T"])` → `kˈæt`. Syllabification is preserved
|
|
306
307
|
across round trips (`W AO1 T ER0` ↔ `wˈɔtɚ`).
|
|
307
308
|
- **Ties are typed** (house convention; see [docs/ties.md](https://github.com/lenzo-ka/ipakit/blob/main/docs/ties.md)): the over-tie fuses constituents into one timing slot (affricates and double articulations: `t͡ʃ`, `k͡p`), the under-tie binds a sequence into one unit (diphthongs, morae: `e͜ɪ`, `a͜ɪ͜ə`), and the over-tie binds tighter in mixed chains (`t͡s͜a`). The glyph is authoritative everywhere; text written in other conventions (where the glyphs are typographic variants, and where the keyboard stands in for the phonetic alphabet) imports explicitly via `ipakit.from_wild` — default parsing never rewrites its input. Tie *presence* is contrastive: `t͡s` is one segment, `ts` is a cluster.
|
|
308
|
-
- **Round-trip guarantee (X-SAMPA only):** IPA written in these conventions round-trips through X-SAMPA (`ipa → xsampa → ipa`), **up to tie sense**: X-SAMPA has a single tie encoding, so the under-tie projects onto the over-tie at the boundary and round trips return canonical over-tie spellings (`t͜s → t_s → t͡s`); the sequential/simultaneous distinction survives only in IPA. Every
|
|
309
|
+
- **Round-trip guarantee (X-SAMPA only):** IPA written in these conventions round-trips through X-SAMPA (`ipa → xsampa → ipa`), **up to tie sense**: X-SAMPA has a single tie encoding, so the under-tie projects onto the over-tie at the boundary and round trips return canonical over-tie spellings (`t͜s → t_s → t͡s`); the sequential/simultaneous distinction survives only in IPA. Every exception in the tested spaces is enumerated here, and the suite asserts the failure set is *exactly* this list. Those spaces are the registered inventory; every registered base with one registered mark in either position; every ordered pair of registered bases; and the finite local boundary-spanning windows derived from the X-SAMPA table. A local window factors each reverse key across two or more forward-table outputs of registered bases and encodable marks (the structural ties and boundaries are left to the composed-form space), keeps an overshooting final output and every factorization of the result, and admits the resulting base run, base-plus-marks unit, or mark run on neutral carrier `a`; runs are bounded by those factorizations. An exhaustive check of every two- and three-atom sequence made from the participating bases and marks also verifies that a greedy match which starts inside an output follows an already enumerated first divergence. This is a claim about those finite spaces, not arbitrary surrounding context. The accepted ligature alias spellings (`ʧ`, `ʦ`, `ƛ`) convert as the thing they spell and come back canonical; they sit outside the registered inventory, so a separate test sweeps the alias map to keep them out of the dropped set.
|
|
309
310
|
- *Ambiguous* — `b͡v`, `t͡θ`, `ŋ͡m` come back as `b̬`, `t˥`, `ŋ̻`: the tie encoding `_` collides with a diacritic/tone encoding (`_v`, `_T`, `_m`). Inherent to X-SAMPA; ICU shares it.
|
|
310
|
-
- *Ambiguous on composition* (see [docs/ties.md](https://github.com/lenzo-ka/ipakit/blob/main/docs/ties.md)) — the table is not prefix-free, so a join between two encodings can spell a key a third entry already claims and longest-match reads that one. `` ` `` is both the rhotacized modifier and X-SAMPA's retroflex suffix, so a base plus `ʴ` spells the retroflex phone and the sound changes: `dʴ lʴ nʴ rʴ sʴ tʴ zʴ ɹʴ t͡sʴ d͡zʴ` come back `ɖ ɭ ɳ ɽ ʂ ʈ ʐ ɻ t͡ʂ d͡ʐ`. `ǀǀ →
|
|
311
|
+
- *Ambiguous on composition* (see [docs/ties.md](https://github.com/lenzo-ka/ipakit/blob/main/docs/ties.md)) — the table is not prefix-free, so a join between two encodings can spell a key a third entry already claims and longest-match reads that one. `` ` `` is both the rhotacized modifier and X-SAMPA's retroflex suffix, so a base plus `ʴ` spells the retroflex phone and the sound changes: `dʴ lʴ nʴ rʴ sʴ tʴ zʴ ɹʴ t͡sʴ d͡zʴ` come back `ɖ ɭ ɳ ɽ ʂ ʈ ʐ ɻ t͡ʂ d͡ʐ`. `ǀǀ → ǁ`, `ǀǁ → ǁǀ`, and `ǀǀǀ → ǁǀ`, because `|\|\` (the alveolar lateral click) is two `|\` (the dental one). The length marks collide the same way: `aːˑ → aːː`: the extra-long key `::` consumes the long mark `:` and the colon of the following half-long `:\`, and the reader reports the leftover backslash as input loss. The retroflex and click keys are X-SAMPA's own.
|
|
312
|
+
- *Redundant on composition* — in three existing cases the sound survives and only a redundant spelling of it does not: `əʴ → ɚ`, `ɜʴ → ɝ`, `tʼ → ť`. The table-derived tone windows below do the same thing: each returned contour spelling declares exactly the same ordered tone levels as its source. The keys that cause them (`_M_H`, `_H_M`, `_L_M`, `_M_L`, `_L_H_L`, `_H_L_H`) are ipakit's own spellings for the contour diacritics, written as the runs of level bars they name; standard X-SAMPA and ICU spell those contours differently. Unlike `_hh` below, they change no value, so they stay. These are the canonicalization `from_wild` is there to do, X-SAMPA being an ASCII convention for writing IPA rather than a phoneset beside it. Writing loses nothing at the joins in the swept spaces, so each is the reader re-segmenting, not the writer dropping.
|
|
313
|
+
|
|
314
|
+
```text
|
|
315
|
+
a˦˧ → a᷇ a˦˧˦ → a᷇˦ a˦˧˨ → a᷇˨
|
|
316
|
+
a˦˨˦ → a᷉ a˦˨˦˧ → a᷉˧ a˦˨˦˨ → a᷉˨
|
|
317
|
+
a˦˨˦˨˦ → a᷉˨˦ a˦˨᷇ → a᷉˧ a˦˨᷉ → a᷉˨˦
|
|
318
|
+
a˦᷄ → a᷇˦ a˦᷆ → a᷇˨ a˦᷈ → a᷉˨
|
|
319
|
+
a˦᷈˦ → a᷉˨˦ a˧˦ → a᷄ a˧˦˧ → a᷄˧
|
|
320
|
+
a˧˦˨˦ → a᷄˨˦ a˧˨ → a᷆ a˧˨˦˨ → a᷆˦˨
|
|
321
|
+
a˧˨˧ → a᷆˧ a˧᷅ → a᷆˧ a˧᷇ → a᷄˧
|
|
322
|
+
a˧᷈ → a᷆˦˨ a˧᷉ → a᷄˨˦ a˨˦˨ → a᷈
|
|
323
|
+
a˨˦˨˦ → a᷈˦ a˨˦˨˦˨ → a᷈˦˨ a˨˦˨˧ → a᷈˧
|
|
324
|
+
a˨˦᷅ → a᷈˧ a˨˦᷈ → a᷈˦˨ a˨˧ → a᷅
|
|
325
|
+
a˨˧˦ → a᷅˦ a˨˧˨ → a᷅˨ a˨᷄ → a᷅˦
|
|
326
|
+
a˨᷆ → a᷅˨ a˨᷉ → a᷈˦ a˨᷉˨ → a᷈˦˨
|
|
327
|
+
```
|
|
311
328
|
- *Redundant spelling* — `˞`, `̀`, `́`, `̄`, `ʻ` are dropped: X-SAMPA has one encoding where IPA has two, and in a bijective table it belongs to the house-canonical spelling — `ʴ` (`` ` ``), the tone bars `˨`/`˦`/`˧` (`_L`/`_H`/`_M`), `ʰ` (`_h`). Written that way, the sound round-trips exactly.
|
|
312
|
-
- *Unencodable* — `ⱱ`, `ˀ`, `ᵊ`, `͈`, `^` are dropped: X-SAMPA has no notation for the labiodental flap (X-SAMPA predates the IPA's 2005 adoption of the symbol, and the standard chart marks that cell as having none), for glottalization, schwa release, or extIPA strong articulation, and unit prominence is house IPA notation that X-SAMPA never had.
|
|
329
|
+
- *Unencodable* — `ⱱ`, `ˀ`, `ᵊ`, `ᵐ`, `ˢ`, `ʳ`, `ʶ`, `͈`, `^` are dropped: X-SAMPA has no notation for the labiodental flap (X-SAMPA predates the IPA's 2005 adoption of the symbol, and the standard chart marks that cell as having none), for glottalization, schwa release, bilabial nasal release, sibilant release, trilled release, uvular release, or extIPA strong articulation, and unit prominence is house IPA notation that X-SAMPA never had. `_n` already means generic nasal release and `_m` means laminal, so neither can preserve `ᵐ`'s distinction; existing s, r, and uvular spellings describe whole segments rather than these release phases. Invented spellings would collide with notation already in use, so these stay unmapped rather than approximated.
|
|
313
330
|
- *Declined rather than impossible* — `ʱ` is dropped too, and for a different reason worth keeping separate from the four above. It had a curated encoding, `_hh`, which extended X-SAMPA's `_h`, so `ʰh` and `ʰɦ` both read back as `ʱ`: an ambiguity ipakit introduced rather than one the standard has. IPA is the primary notation and X-SAMPA a convenience, so declining to spell one mark there costs less than inventing an ambiguity to keep it.
|
|
314
331
|
|
|
315
332
|
A dropped symbol takes its neighbors' adjacency with it (`kⱱt → kt`), which is what `strict=True` is for: `to_xsampa("kⱱt", strict=True)` raises `ValueError` naming the symbol instead. The CMU, TIMIT, and Kirshenbaum mappings are lossy (they collapse IPA distinctions) and carry no round-trip guarantee; Kirshenbaum has no labiodental-flap notation either.
|
|
@@ -376,5 +393,7 @@ table and the phone-distance matrix) against their generators in `scripts/`.
|
|
|
376
393
|
## License
|
|
377
394
|
|
|
378
395
|
BSD 2-Clause — see [LICENSE](https://github.com/lenzo-ka/ipakit/blob/main/LICENSE).
|
|
379
|
-
Third-party data retain their separate terms; the shipped PHOIBLE
|
|
380
|
-
|
|
396
|
+
Third-party data retain their separate terms; the shipped PHOIBLE dataset and
|
|
397
|
+
bibliography carry [file-scoped notices and licenses](ipakit/data/phoible/NOTICE.txt).
|
|
398
|
+
PHOIBLE mapping tables and eSpeak phoneme tables are read from user-supplied
|
|
399
|
+
sources and are not included in the wheel.
|
|
@@ -37,7 +37,7 @@ derived forms, expose structural queries at the shell, and test rule systems
|
|
|
37
37
|
against paired forms. That is also the substrate on which rule induction can
|
|
38
38
|
run; the inducer itself remains a separate concern.
|
|
39
39
|
|
|
40
|
-
Praat TextGrids enter and leave through named tier profiles, including an MFA alignment profile. The
|
|
40
|
+
Praat TextGrids enter and leave through named tier profiles, including an MFA alignment profile. The [inventory registry](https://github.com/lenzo-ka/ipakit/blob/main/docs/inventories.md) includes pinned MFA phone declarations and adds eSpeak NG vocabularies from a user-supplied checkout, while [TextGrid interchange](https://github.com/lenzo-ka/ipakit/blob/main/docs/textgrid.md) applies those inventory styles to tier labels without guessing.
|
|
41
41
|
|
|
42
42
|
The package uses tiergraph for graph navigation; its phonetic data and geometry
|
|
43
43
|
ship as declarations. It is typed, and the Python API and `ipakit` command expose the
|
|
@@ -254,11 +254,27 @@ A word comparison reports `coverage` — the shorter token count over the longer
|
|
|
254
254
|
onset: `from_cmu(["K", "AE1", "T"])` → `kˈæt`. Syllabification is preserved
|
|
255
255
|
across round trips (`W AO1 T ER0` ↔ `wˈɔtɚ`).
|
|
256
256
|
- **Ties are typed** (house convention; see [docs/ties.md](https://github.com/lenzo-ka/ipakit/blob/main/docs/ties.md)): the over-tie fuses constituents into one timing slot (affricates and double articulations: `t͡ʃ`, `k͡p`), the under-tie binds a sequence into one unit (diphthongs, morae: `e͜ɪ`, `a͜ɪ͜ə`), and the over-tie binds tighter in mixed chains (`t͡s͜a`). The glyph is authoritative everywhere; text written in other conventions (where the glyphs are typographic variants, and where the keyboard stands in for the phonetic alphabet) imports explicitly via `ipakit.from_wild` — default parsing never rewrites its input. Tie *presence* is contrastive: `t͡s` is one segment, `ts` is a cluster.
|
|
257
|
-
- **Round-trip guarantee (X-SAMPA only):** IPA written in these conventions round-trips through X-SAMPA (`ipa → xsampa → ipa`), **up to tie sense**: X-SAMPA has a single tie encoding, so the under-tie projects onto the over-tie at the boundary and round trips return canonical over-tie spellings (`t͜s → t_s → t͡s`); the sequential/simultaneous distinction survives only in IPA. Every
|
|
257
|
+
- **Round-trip guarantee (X-SAMPA only):** IPA written in these conventions round-trips through X-SAMPA (`ipa → xsampa → ipa`), **up to tie sense**: X-SAMPA has a single tie encoding, so the under-tie projects onto the over-tie at the boundary and round trips return canonical over-tie spellings (`t͜s → t_s → t͡s`); the sequential/simultaneous distinction survives only in IPA. Every exception in the tested spaces is enumerated here, and the suite asserts the failure set is *exactly* this list. Those spaces are the registered inventory; every registered base with one registered mark in either position; every ordered pair of registered bases; and the finite local boundary-spanning windows derived from the X-SAMPA table. A local window factors each reverse key across two or more forward-table outputs of registered bases and encodable marks (the structural ties and boundaries are left to the composed-form space), keeps an overshooting final output and every factorization of the result, and admits the resulting base run, base-plus-marks unit, or mark run on neutral carrier `a`; runs are bounded by those factorizations. An exhaustive check of every two- and three-atom sequence made from the participating bases and marks also verifies that a greedy match which starts inside an output follows an already enumerated first divergence. This is a claim about those finite spaces, not arbitrary surrounding context. The accepted ligature alias spellings (`ʧ`, `ʦ`, `ƛ`) convert as the thing they spell and come back canonical; they sit outside the registered inventory, so a separate test sweeps the alias map to keep them out of the dropped set.
|
|
258
258
|
- *Ambiguous* — `b͡v`, `t͡θ`, `ŋ͡m` come back as `b̬`, `t˥`, `ŋ̻`: the tie encoding `_` collides with a diacritic/tone encoding (`_v`, `_T`, `_m`). Inherent to X-SAMPA; ICU shares it.
|
|
259
|
-
- *Ambiguous on composition* (see [docs/ties.md](https://github.com/lenzo-ka/ipakit/blob/main/docs/ties.md)) — the table is not prefix-free, so a join between two encodings can spell a key a third entry already claims and longest-match reads that one. `` ` `` is both the rhotacized modifier and X-SAMPA's retroflex suffix, so a base plus `ʴ` spells the retroflex phone and the sound changes: `dʴ lʴ nʴ rʴ sʴ tʴ zʴ ɹʴ t͡sʴ d͡zʴ` come back `ɖ ɭ ɳ ɽ ʂ ʈ ʐ ɻ t͡ʂ d͡ʐ`. `ǀǀ →
|
|
259
|
+
- *Ambiguous on composition* (see [docs/ties.md](https://github.com/lenzo-ka/ipakit/blob/main/docs/ties.md)) — the table is not prefix-free, so a join between two encodings can spell a key a third entry already claims and longest-match reads that one. `` ` `` is both the rhotacized modifier and X-SAMPA's retroflex suffix, so a base plus `ʴ` spells the retroflex phone and the sound changes: `dʴ lʴ nʴ rʴ sʴ tʴ zʴ ɹʴ t͡sʴ d͡zʴ` come back `ɖ ɭ ɳ ɽ ʂ ʈ ʐ ɻ t͡ʂ d͡ʐ`. `ǀǀ → ǁ`, `ǀǁ → ǁǀ`, and `ǀǀǀ → ǁǀ`, because `|\|\` (the alveolar lateral click) is two `|\` (the dental one). The length marks collide the same way: `aːˑ → aːː`: the extra-long key `::` consumes the long mark `:` and the colon of the following half-long `:\`, and the reader reports the leftover backslash as input loss. The retroflex and click keys are X-SAMPA's own.
|
|
260
|
+
- *Redundant on composition* — in three existing cases the sound survives and only a redundant spelling of it does not: `əʴ → ɚ`, `ɜʴ → ɝ`, `tʼ → ť`. The table-derived tone windows below do the same thing: each returned contour spelling declares exactly the same ordered tone levels as its source. The keys that cause them (`_M_H`, `_H_M`, `_L_M`, `_M_L`, `_L_H_L`, `_H_L_H`) are ipakit's own spellings for the contour diacritics, written as the runs of level bars they name; standard X-SAMPA and ICU spell those contours differently. Unlike `_hh` below, they change no value, so they stay. These are the canonicalization `from_wild` is there to do, X-SAMPA being an ASCII convention for writing IPA rather than a phoneset beside it. Writing loses nothing at the joins in the swept spaces, so each is the reader re-segmenting, not the writer dropping.
|
|
261
|
+
|
|
262
|
+
```text
|
|
263
|
+
a˦˧ → a᷇ a˦˧˦ → a᷇˦ a˦˧˨ → a᷇˨
|
|
264
|
+
a˦˨˦ → a᷉ a˦˨˦˧ → a᷉˧ a˦˨˦˨ → a᷉˨
|
|
265
|
+
a˦˨˦˨˦ → a᷉˨˦ a˦˨᷇ → a᷉˧ a˦˨᷉ → a᷉˨˦
|
|
266
|
+
a˦᷄ → a᷇˦ a˦᷆ → a᷇˨ a˦᷈ → a᷉˨
|
|
267
|
+
a˦᷈˦ → a᷉˨˦ a˧˦ → a᷄ a˧˦˧ → a᷄˧
|
|
268
|
+
a˧˦˨˦ → a᷄˨˦ a˧˨ → a᷆ a˧˨˦˨ → a᷆˦˨
|
|
269
|
+
a˧˨˧ → a᷆˧ a˧᷅ → a᷆˧ a˧᷇ → a᷄˧
|
|
270
|
+
a˧᷈ → a᷆˦˨ a˧᷉ → a᷄˨˦ a˨˦˨ → a᷈
|
|
271
|
+
a˨˦˨˦ → a᷈˦ a˨˦˨˦˨ → a᷈˦˨ a˨˦˨˧ → a᷈˧
|
|
272
|
+
a˨˦᷅ → a᷈˧ a˨˦᷈ → a᷈˦˨ a˨˧ → a᷅
|
|
273
|
+
a˨˧˦ → a᷅˦ a˨˧˨ → a᷅˨ a˨᷄ → a᷅˦
|
|
274
|
+
a˨᷆ → a᷅˨ a˨᷉ → a᷈˦ a˨᷉˨ → a᷈˦˨
|
|
275
|
+
```
|
|
260
276
|
- *Redundant spelling* — `˞`, `̀`, `́`, `̄`, `ʻ` are dropped: X-SAMPA has one encoding where IPA has two, and in a bijective table it belongs to the house-canonical spelling — `ʴ` (`` ` ``), the tone bars `˨`/`˦`/`˧` (`_L`/`_H`/`_M`), `ʰ` (`_h`). Written that way, the sound round-trips exactly.
|
|
261
|
-
- *Unencodable* — `ⱱ`, `ˀ`, `ᵊ`, `͈`, `^` are dropped: X-SAMPA has no notation for the labiodental flap (X-SAMPA predates the IPA's 2005 adoption of the symbol, and the standard chart marks that cell as having none), for glottalization, schwa release, or extIPA strong articulation, and unit prominence is house IPA notation that X-SAMPA never had.
|
|
277
|
+
- *Unencodable* — `ⱱ`, `ˀ`, `ᵊ`, `ᵐ`, `ˢ`, `ʳ`, `ʶ`, `͈`, `^` are dropped: X-SAMPA has no notation for the labiodental flap (X-SAMPA predates the IPA's 2005 adoption of the symbol, and the standard chart marks that cell as having none), for glottalization, schwa release, bilabial nasal release, sibilant release, trilled release, uvular release, or extIPA strong articulation, and unit prominence is house IPA notation that X-SAMPA never had. `_n` already means generic nasal release and `_m` means laminal, so neither can preserve `ᵐ`'s distinction; existing s, r, and uvular spellings describe whole segments rather than these release phases. Invented spellings would collide with notation already in use, so these stay unmapped rather than approximated.
|
|
262
278
|
- *Declined rather than impossible* — `ʱ` is dropped too, and for a different reason worth keeping separate from the four above. It had a curated encoding, `_hh`, which extended X-SAMPA's `_h`, so `ʰh` and `ʰɦ` both read back as `ʱ`: an ambiguity ipakit introduced rather than one the standard has. IPA is the primary notation and X-SAMPA a convenience, so declining to spell one mark there costs less than inventing an ambiguity to keep it.
|
|
263
279
|
|
|
264
280
|
A dropped symbol takes its neighbors' adjacency with it (`kⱱt → kt`), which is what `strict=True` is for: `to_xsampa("kⱱt", strict=True)` raises `ValueError` naming the symbol instead. The CMU, TIMIT, and Kirshenbaum mappings are lossy (they collapse IPA distinctions) and carry no round-trip guarantee; Kirshenbaum has no labiodental-flap notation either.
|
|
@@ -325,5 +341,7 @@ table and the phone-distance matrix) against their generators in `scripts/`.
|
|
|
325
341
|
## License
|
|
326
342
|
|
|
327
343
|
BSD 2-Clause — see [LICENSE](https://github.com/lenzo-ka/ipakit/blob/main/LICENSE).
|
|
328
|
-
Third-party data retain their separate terms; the shipped PHOIBLE
|
|
329
|
-
|
|
344
|
+
Third-party data retain their separate terms; the shipped PHOIBLE dataset and
|
|
345
|
+
bibliography carry [file-scoped notices and licenses](ipakit/data/phoible/NOTICE.txt).
|
|
346
|
+
PHOIBLE mapping tables and eSpeak phoneme tables are read from user-supplied
|
|
347
|
+
sources and are not included in the wheel.
|
|
@@ -9,10 +9,34 @@ per session (rather than once per test) keeps the suite fast. The instances are
|
|
|
9
9
|
treated as read-only by the tests, so sharing them across tests is safe.
|
|
10
10
|
"""
|
|
11
11
|
|
|
12
|
+
import os
|
|
13
|
+
|
|
12
14
|
import pytest
|
|
13
15
|
from ipakit import CMUMapper, IPAFeatures
|
|
14
16
|
|
|
15
17
|
|
|
18
|
+
def pytest_collection_modifyitems(items): # type: ignore[no-untyped-def]
|
|
19
|
+
"""Skip source-dependent eSpeak integration tests when no source is supplied."""
|
|
20
|
+
if os.environ.get("IPAKIT_ESPEAK_NG"):
|
|
21
|
+
return
|
|
22
|
+
reason = "set IPAKIT_ESPEAK_NG to run tests requiring eSpeak NG source"
|
|
23
|
+
for item in items:
|
|
24
|
+
path = item.path.name
|
|
25
|
+
if (
|
|
26
|
+
path == "test_espeak_binary.py"
|
|
27
|
+
or (
|
|
28
|
+
path in {"test_bridges.py", "test_inventories.py"}
|
|
29
|
+
and (
|
|
30
|
+
"espeak" in item.name
|
|
31
|
+
or item.name == "test_styles_normalize_canonically_equivalent_input"
|
|
32
|
+
)
|
|
33
|
+
and item.name != "test_espeak_requires_user_source"
|
|
34
|
+
)
|
|
35
|
+
or (path == "test_phoneset_comparison.py" and "espeak" in item.nodeid)
|
|
36
|
+
):
|
|
37
|
+
item.add_marker(pytest.mark.skip(reason=reason))
|
|
38
|
+
|
|
39
|
+
|
|
16
40
|
@pytest.fixture(autouse=True)
|
|
17
41
|
def _doctest_ipakit(doctest_namespace): # type: ignore[no-untyped-def]
|
|
18
42
|
import ipakit
|
|
@@ -40,18 +40,19 @@ keep source distinctions, coverage and conversion losses explicit.
|
|
|
40
40
|
| --- | --- |
|
|
41
41
|
| [Comparative systems](systems.md) | Compare organizing principles and implemented boundaries across models. |
|
|
42
42
|
| [Inventories and styles](inventories.md) | Named vocabularies, strict reading/spelling and dictionary-derived inventories. |
|
|
43
|
-
| [PHOIBLE source inventories](phoible.md) | Shipped
|
|
43
|
+
| [PHOIBLE source inventories](phoible.md) | Shipped main catalog, user-supplied mapping tables, doculect provenance and import refusals. |
|
|
44
44
|
| [Inventory supplements](supplements.md) | Extend the house declaration and understand the effects on realization and comparison. |
|
|
45
45
|
| [Pinyin](pinyin.md) | Syllable-hosted tone, orthographic rendering and the internal graph-constructor boundary. |
|
|
46
46
|
| [Kana](kana.md) | Mora-tier rendering and bounded curated-adaptation API/CLI support. |
|
|
47
47
|
| [CLTS/BIPA](clts-audit.md) | Frozen native feature-set/Jaccard scoring, shared cost comparisons, source extraction and provenance; semantic mapping remains unresolved. |
|
|
48
|
+
| [CLTS import](clts-import.md) | Import explicit source tokens into a native graph, inspect refusals and preservation, and reload same-provenance envelopes. |
|
|
48
49
|
| [CLTS/BIPA coverage gaps](clts-gaps.md) | Generated coverage and refusal counts for the frozen CLTS/BIPA snapshot. |
|
|
49
50
|
| [CLTS mapping table](clts-mapping.md) | Generated directional mapping evidence for the bounded CLTS correspondence. |
|
|
50
51
|
| [Finite model operations](model-operations.md) | Typed declarations, explicit model CLI selection, feature edits and exact realization candidates; links to finite rules and transforms. |
|
|
51
52
|
| [Operations across inventories](inventory-operations.md) | House and Panphon matching and respelling, custom declarations, and all-pairs comparisons across named cost models. |
|
|
52
53
|
| [Feature transformations](feature-transforms.md) | Declared finite re-encoding, explicit loss and preimages, and binary comparison through shared cost/alignment machinery. |
|
|
53
54
|
| [MFA vocabulary exhibit](mfa-vocabularies.md) | Generated declarations, source pins and refusal classes. |
|
|
54
|
-
| [eSpeak vocabulary exhibit](espeak-vocabularies.md) |
|
|
55
|
+
| [eSpeak vocabulary exhibit](espeak-vocabularies.md) | User-source-generated language-scoped and union vocabulary coverage. |
|
|
55
56
|
| [House declaration exhibits](house-style-exhibits.md) | Generated tie, boundary and character-class inventories behind the house conventions. |
|
|
56
57
|
|
|
57
58
|
## Rules and comparison
|
|
@@ -221,11 +221,12 @@ and comparison tooling are usable today. The [CLTS/BIPA library](clts-audit.md)
|
|
|
221
221
|
provides a frozen finite core feature snapshot, native Jaccard scoring, shared
|
|
222
222
|
alignment cost packs, and a declaration census. Runtime scoring uses the shipped
|
|
223
223
|
snapshot; development extraction has separate source pins and validation.
|
|
224
|
-
The CLTS
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
224
|
+
The [CLTS import](clts-import.md) turns explicitly segmented CLTS tokens into
|
|
225
|
+
a house `Form` for the reviewed plain stops `p b t d` and refuses every other
|
|
226
|
+
occurrence with a per-occurrence report; preserve mode keeps the native source
|
|
227
|
+
graph instead. A house `Form` does not carry source-only CLTS claims: a
|
|
228
|
+
preserved import is source-complete and house-incomplete, and `house_form()`
|
|
229
|
+
refuses it. The existing scripts provide auditing and approximation. Full native graph persistence and the public `Form.to_json()`
|
|
229
230
|
linear projection have separate fidelity contracts.
|
|
230
231
|
|
|
231
232
|
The [historical ecosystem assessment](design/ecosystem.md) retains the
|
|
@@ -11,7 +11,7 @@ objects or require caller-supplied graph structure and linguistic choices.
|
|
|
11
11
|
| Module implementation support imports | `annotations`, `Any`, `Iterable`, `Path`, `Sequence` | **Library-only by decision:** these are non-underscored bindings used by the flat module's implementation and type annotations, not ipakit capabilities suitable for CLI commands. |
|
|
12
12
|
| Canonical forms, graph construction, containment, serialization, and DOT rendering | `Form`, `FormBuilder`, `FormProjectionError`, `Attribute`, `Boundary`, `Interval`, `Node`, `Timing`, `Unit`, `levels`, `tier_names`, `units`, `read`, `read_json`, `read_graph_json`, `write_graph_json`, `to_dot`, `Form.graph`, `Form.at`, `Form.to_dot` | **CLI-reachable:** `convert to-json [--pretty]`, `convert from-json`, `graph-json`, `rules units`, and `tiergraph IPA` / `tiergraph --from-json PATH`; graph editing is available through the library constructors. |
|
|
13
13
|
| Segments and normalization | `Constituent`, `Kind`, `Segment`, `Sense`, `tokenize`, `segmented`, `segments`, `segment`, `to_ipa`, `normalize`, `from_wild`, `normalize_lookalikes`, `add_ties` | **CLI-reachable:** `convert tokenize`, `normalize`, and `add-ties`; `features` intentionally offers interactive lookalike reading. |
|
|
14
|
-
| Feature lookup, querying, and respelling | `Feature`, `FeatureNarrowingWarning`, `FeatureQuery`, `Phone`, `PhoneMapping`, `Phoneset`, `features`, `feature_values`, `features_from_cmu`, `features_from_xsampa`, `feature_bundles`, `phones_matching`, `to_phone`, `respell`, `find`, `features_to_shorts`, `shorts_to_features`, `import_phoneset` | **CLI-reachable:** `features`; `query match`, `list`, `features`, `classes`, and `shorts` provide the terminal views and searches. The warning
|
|
14
|
+
| Feature lookup, querying, and respelling | `Feature`, `FeatureNarrowingWarning`, `InputLossWarning`, `FeatureQuery`, `Phone`, `PhoneMapping`, `Phoneset`, `features`, `feature_values`, `features_from_cmu`, `features_from_xsampa`, `feature_bundles`, `phones_matching`, `to_phone`, `respell`, `find`, `features_to_shorts`, `shorts_to_features`, `import_phoneset` | **CLI-reachable:** `features`; `query match`, `list`, `features`, `classes`, and `shorts` provide the terminal views and searches. The warning types are the Python control surface for narrowing reads and input loss. |
|
|
15
15
|
| Description, references, validation, and hierarchy | `wiki`, `wiki_ref`, `wiki_refs`, `describe`, `natural_class`, `minimal_pairs`, `nearest_phones`, `hierarchy`, `hierarchy_text`, `hierarchy_dot`, `stress_markers`, `validate_ipa`, `is_valid_ipa`, `extensions_in`, `is_pure_ipa` | **CLI-reachable:** `describe`; `analysis`; `hierarchy`; `info stress`; and `analyze` provide the useful terminal reports. |
|
|
16
16
|
| Raw distance and inventory-relative percentile positions | `Alignment`, `AlignmentStep`, `CostSchedule`, `Correspondence`, `Coverage`, `PhoneCost`, `PhonePosition`, `UnusableReferenceWarning`, `PhonesetMapping`, `PhonesetComparison`, `PronunciationMatch`, `ScoringParameters`, `SequenceMatch`, `TranscriptionDistanceResult`, `DistanceModel`, `distance`, `segment_distance`, `pairwise_distances`, `transcription_distance`, `directional_transcription_distance`, `transcription_similarity`, `explain_transcription_distance`, `nearest_pronunciation`, `rank_pronunciations`, `sequence_distance`, `sequence_similarity`, `rank_sequences`, `distance_position`, `similarity_position`, `distance_model`, `phoneset_mapping`, `phoneset_comparison` | **CLI-reachable:** `distance pair`, `segment`, `matrix`, `positions`, `transcription`, `nearest`, `seq`, `map`, and `compare`, including alignment/explanation output. `positions` emits `similarity_position` and `distance_position`; `map` relates two phonesets in one selected way; `compare` reports the ordered sets, nearest mappings both ways, similarity matrix, source terms, directional means and worst cases, asymmetry, and caller-chosen `--coverage-at` thresholds. |
|
|
17
17
|
| Inventory lookup and construction | `Inventory`, `Style`, `inventories`, `inventory`, `inventory_from_dictionary` | **CLI-reachable:** `inventory list`, `inventory show`, and `inventory from-dict`, including `min_entries` as `--min-entries` and `refuse_unreadable` as `--refuse-unreadable`. |
|
|
@@ -37,9 +37,9 @@ upstream resolver may support additional sounds.
|
|
|
37
37
|
Inspect `requested`, `entries` and `excluded` for the exact generated
|
|
38
38
|
population. The full CLTS-to-Form importer and general semantic feature mapping
|
|
39
39
|
remain separate work. The [bounded correspondence authority](clts-mapping.md)
|
|
40
|
-
records
|
|
40
|
+
records profile-bound reviewed plain-stop projections; its
|
|
41
41
|
[generated gap report](clts-gaps.md) accounts for master declarations while
|
|
42
|
-
keeping unresolved mappings and
|
|
42
|
+
keeping unresolved mappings and the bounded profile context explicit.
|
|
43
43
|
|
|
44
44
|
<a id="substitute-the-cost-model-not-the-aligner"></a>
|
|
45
45
|
|