morphata 2.0.3__tar.gz → 2.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. {morphata-2.0.3 → morphata-2.0.5}/CHANGELOG.md +22 -0
  2. {morphata-2.0.3 → morphata-2.0.5}/PKG-INFO +2 -2
  3. {morphata-2.0.3 → morphata-2.0.5}/ci/make-release +3 -3
  4. {morphata-2.0.3 → morphata-2.0.5}/pixi.lock +1 -1
  5. {morphata-2.0.3 → morphata-2.0.5}/pixi.toml +1 -1
  6. {morphata-2.0.3 → morphata-2.0.5}/pyproject.toml +2 -2
  7. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/hoa/__init__.py +2 -1
  8. morphata-2.0.5/src/morphata/hoa/exporter.py +689 -0
  9. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/symbolic/automaton.py +79 -0
  10. morphata-2.0.5/tests/hoa/test_exporter_streaming.py +250 -0
  11. morphata-2.0.5/tests/symbolic/test_to_hoa.py +163 -0
  12. {morphata-2.0.3 → morphata-2.0.5}/uv.lock +2 -2
  13. morphata-2.0.3/src/morphata/hoa/exporter.py +0 -324
  14. {morphata-2.0.3 → morphata-2.0.5}/.basedpyright/baseline.json +0 -0
  15. {morphata-2.0.3 → morphata-2.0.5}/.claude/settings.local.json +0 -0
  16. {morphata-2.0.3 → morphata-2.0.5}/.dockerignore +0 -0
  17. {morphata-2.0.3 → morphata-2.0.5}/.editorconfig +0 -0
  18. {morphata-2.0.3 → morphata-2.0.5}/.envrc +0 -0
  19. {morphata-2.0.3 → morphata-2.0.5}/.envrc.recommended +0 -0
  20. {morphata-2.0.3 → morphata-2.0.5}/.fdignore +0 -0
  21. {morphata-2.0.3 → morphata-2.0.5}/.gitattributes +0 -0
  22. {morphata-2.0.3 → morphata-2.0.5}/.gitignore +0 -0
  23. {morphata-2.0.3 → morphata-2.0.5}/.mailmap +0 -0
  24. {morphata-2.0.3 → morphata-2.0.5}/.python-version +0 -0
  25. {morphata-2.0.3 → morphata-2.0.5}/.rstcheck.cfg +0 -0
  26. {morphata-2.0.3 → morphata-2.0.5}/AGENTS.md +0 -0
  27. {morphata-2.0.3 → morphata-2.0.5}/CLAUDE.md +0 -0
  28. {morphata-2.0.3 → morphata-2.0.5}/CONTRIBUTING.md +0 -0
  29. {morphata-2.0.3 → morphata-2.0.5}/LICENSE +0 -0
  30. {morphata-2.0.3 → morphata-2.0.5}/README.md +0 -0
  31. {morphata-2.0.3 → morphata-2.0.5}/bench/README.md +0 -0
  32. {morphata-2.0.3 → morphata-2.0.5}/bench/__init__.py +0 -0
  33. {morphata-2.0.3 → morphata-2.0.5}/bench/conftest.py +0 -0
  34. {morphata-2.0.3 → morphata-2.0.5}/bench/test_sere_nlm_perf.py +0 -0
  35. {morphata-2.0.3 → morphata-2.0.5}/cliff.toml +0 -0
  36. {morphata-2.0.3 → morphata-2.0.5}/docs/_static/navigation.html +0 -0
  37. {morphata-2.0.3 → morphata-2.0.5}/docs/api/modules.rst +0 -0
  38. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.acceptance.rst +0 -0
  39. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.alphabet.rst +0 -0
  40. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.automaton.rst +0 -0
  41. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.builder.rst +0 -0
  42. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.hoa.rst +0 -0
  43. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.logic.ltl.rst +0 -0
  44. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.logic.psl.rst +0 -0
  45. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.logic.sere.rst +0 -0
  46. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.logic.strel.rst +0 -0
  47. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.operators.matrix.rst +0 -0
  48. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.operators.polynomial.rst +0 -0
  49. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.operators.rst +0 -0
  50. {morphata-2.0.3 → morphata-2.0.5}/docs/api/morphata.symbolic.rst +0 -0
  51. {morphata-2.0.3 → morphata-2.0.5}/docs/concepts/acceptance.rst +0 -0
  52. {morphata-2.0.3 → morphata-2.0.5}/docs/concepts/hoa.rst +0 -0
  53. {morphata-2.0.3 → morphata-2.0.5}/docs/concepts/index.rst +0 -0
  54. {morphata-2.0.3 → morphata-2.0.5}/docs/concepts/operators.rst +0 -0
  55. {morphata-2.0.3 → morphata-2.0.5}/docs/concepts/spec.rst +0 -0
  56. {morphata-2.0.3 → morphata-2.0.5}/docs/concepts/weights.rst +0 -0
  57. {morphata-2.0.3 → morphata-2.0.5}/docs/conf.py +0 -0
  58. {morphata-2.0.3 → morphata-2.0.5}/docs/index.rst +0 -0
  59. {morphata-2.0.3 → morphata-2.0.5}/docs/quick-start.rst +0 -0
  60. {morphata-2.0.3 → morphata-2.0.5}/docs/symbolic-transforms.rst +0 -0
  61. {morphata-2.0.3 → morphata-2.0.5}/justfile +0 -0
  62. {morphata-2.0.3 → morphata-2.0.5}/mypy.ini +0 -0
  63. {morphata-2.0.3 → morphata-2.0.5}/project.utf-8.add +0 -0
  64. {morphata-2.0.3 → morphata-2.0.5}/project.utf-8.add.spl +0 -0
  65. {morphata-2.0.3 → morphata-2.0.5}/pyrefly.toml +0 -0
  66. {morphata-2.0.3 → morphata-2.0.5}/pyrightconfig.json +0 -0
  67. {morphata-2.0.3 → morphata-2.0.5}/pytest.toml +0 -0
  68. {morphata-2.0.3 → morphata-2.0.5}/ruff.toml +0 -0
  69. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/__init__.py +0 -0
  70. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/acceptance.py +0 -0
  71. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/alphabet.py +0 -0
  72. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/automaton.py +0 -0
  73. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/builder.py +0 -0
  74. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/hoa/__main__.py +0 -0
  75. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/hoa/acc_expr.py +0 -0
  76. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/hoa/hoa.lark +0 -0
  77. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/hoa/parser.py +0 -0
  78. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/logic/__init__.py +0 -0
  79. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/logic/_common.py +0 -0
  80. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/logic/ltl.py +0 -0
  81. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/logic/psl.py +0 -0
  82. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/logic/sere.py +0 -0
  83. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/logic/strel.py +0 -0
  84. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/operators/__init__.py +0 -0
  85. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/operators/_backend.py +0 -0
  86. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/operators/matrix.py +0 -0
  87. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/operators/polynomial.py +0 -0
  88. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/py.typed +0 -0
  89. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/symbolic/__init__.py +0 -0
  90. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/symbolic/bdd.py +0 -0
  91. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/symbolic/compose.py +0 -0
  92. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/symbolic/equivalence.py +0 -0
  93. {morphata-2.0.3 → morphata-2.0.5}/src/morphata/symbolic/transforms.py +0 -0
  94. {morphata-2.0.3 → morphata-2.0.5}/tests/conftest.py +0 -0
  95. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut1.hoa +0 -0
  96. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut11.hoa +0 -0
  97. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut2.hoa +0 -0
  98. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut3.2.hoa +0 -0
  99. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut3.hoa +0 -0
  100. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut4.hoa +0 -0
  101. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut5.hoa +0 -0
  102. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut6.hoa +0 -0
  103. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut7.hoa +0 -0
  104. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/aut8.hoa +0 -0
  105. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/finite_aut.hoa +0 -0
  106. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/gen_buchi_3.hoa +0 -0
  107. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/gen_cobuchi_2.hoa +0 -0
  108. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/rabin_2pair.hoa +0 -0
  109. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/streett_2pair.hoa +0 -0
  110. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/test_exporter_basic.py +0 -0
  111. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/test_exporter_roundtrip.py +0 -0
  112. {morphata-2.0.3 → morphata-2.0.5}/tests/hoa/test_parser.py +0 -0
  113. {morphata-2.0.3 → morphata-2.0.5}/tests/logic/__init__.py +0 -0
  114. {morphata-2.0.3 → morphata-2.0.5}/tests/logic/test_ltl.py +0 -0
  115. {morphata-2.0.3 → morphata-2.0.5}/tests/logic/test_psl.py +0 -0
  116. {morphata-2.0.3 → morphata-2.0.5}/tests/logic/test_sere.py +0 -0
  117. {morphata-2.0.3 → morphata-2.0.5}/tests/logic/test_sere_properties.py +0 -0
  118. {morphata-2.0.3 → morphata-2.0.5}/tests/logic/test_strel.py +0 -0
  119. {morphata-2.0.3 → morphata-2.0.5}/tests/operators/test_matrix_from_ir.py +0 -0
  120. {morphata-2.0.3 → morphata-2.0.5}/tests/operators/test_matrix_from_ltl.py +0 -0
  121. {morphata-2.0.3 → morphata-2.0.5}/tests/operators/test_polynomial_from_ir.py +0 -0
  122. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_bdd_helpers.py +0 -0
  123. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_compose.py +0 -0
  124. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_from_hoaf.py +0 -0
  125. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_ltlf2dfa_equivalence.py +0 -0
  126. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_step.py +0 -0
  127. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_symbolic_automaton.py +0 -0
  128. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_symbolic_from_ir.py +0 -0
  129. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_transforms.py +0 -0
  130. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_transforms_ir.py +0 -0
  131. {morphata-2.0.3 → morphata-2.0.5}/tests/symbolic/test_transforms_properties.py +0 -0
  132. {morphata-2.0.3 → morphata-2.0.5}/tests/test_alphabet.py +0 -0
  133. {morphata-2.0.3 → morphata-2.0.5}/tests/test_automaton.py +0 -0
  134. {morphata-2.0.3 → morphata-2.0.5}/tests/test_builder.py +0 -0
  135. {morphata-2.0.3 → morphata-2.0.5}/tests/test_from_parsed.py +0 -0
  136. {morphata-2.0.3 → morphata-2.0.5}/ty.toml +0 -0
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.0.5 — 2026-06-01
4
+
5
+ ### Added
6
+
7
+ `SymbolicAutomaton` and `Automaton` now support a streaming writer
8
+ for HOA export via `morphata.hoa.symbolic_automaton_to_hoa`
9
+ and `morphata.hoa.automaton_to_hoa`, and is also present in `SymbolicAutomaton.to_hoa`.
10
+
11
+ This is mostly a performance thing:
12
+ providing a buffered writer to the exporter allows one to stream the HOA format into a
13
+ file, without having to manifest the entire string representation of the automaton,
14
+ which can be cumbersome.
15
+
16
+ ## 2.0.4 — 2026-05-28
17
+
18
+ ### Added
19
+
20
+ Technically a feature release almost immediately
21
+ after another feature release masquerading as a patch,
22
+ this release adds the ability to translate from a `SymbolicAutomaton` back to an
23
+ `Automaton`, allowing for the `SymbolicAutomaton` to be exported to an HOA file.
24
+
3
25
  ## 2.0.3 — 2026-05-28
4
26
 
5
27
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: morphata
3
- Version: 2.0.3
3
+ Version: 2.0.5
4
4
  Summary: Representation theory for automata, made practical.
5
5
  Project-URL: Documentation, https://docs.anandb.dev/morphata
6
6
  Project-URL: Repository, https://git.anandb.dev/morphata.git
@@ -20,7 +20,7 @@ Requires-Dist: logic-asts>=1.6.2
20
20
  Requires-Dist: networkx
21
21
  Requires-Dist: numpy
22
22
  Requires-Dist: types-networkx
23
- Requires-Dist: typing-extensions
23
+ Requires-Dist: typing-extensions>=4.14
24
24
  Provides-Extra: dot
25
25
  Requires-Dist: pydot>=4.0.1; extra == 'dot'
26
26
  Provides-Extra: jax
@@ -88,7 +88,7 @@ echo "==> Promoting CHANGELOG Unreleased -> ${NEW_VERSION} (${RELEASE_DATE})"
88
88
  sed -i "s/^## Unreleased$/## ${NEW_VERSION} \xe2\x80\x94 ${RELEASE_DATE}/" CHANGELOG.md
89
89
 
90
90
  # Commit
91
- COMMIT_MSG="chore(release): ${NEW_VERSION}"
91
+ COMMIT_MSG="chore(release): $(uv version)"
92
92
  echo "==> Committing: $COMMIT_MSG"
93
93
 
94
94
  if is_jj; then
@@ -120,8 +120,8 @@ echo "==> Tagging $TAG"
120
120
  if is_jj; then
121
121
  jj git import 2>/dev/null || true
122
122
  fi
123
- printf '%s\n\n%s\n' "$TAG_TITLE" "$TAG_BODY" \
124
- | git tag -a "$TAG" --cleanup=verbatim -F -
123
+ printf '%s\n\n%s\n' "$TAG_TITLE" "$TAG_BODY" |
124
+ git tag -a "$TAG" --cleanup=verbatim -F -
125
125
  if is_jj; then
126
126
  jj git import 2>/dev/null || true
127
127
  fi
@@ -5474,7 +5474,7 @@ packages:
5474
5474
  - networkx
5475
5475
  - numpy
5476
5476
  - types-networkx
5477
- - typing-extensions
5477
+ - typing-extensions>=4.14
5478
5478
  - jax>=0.8 ; extra == 'jax'
5479
5479
  - torch>=2.0 ; extra == 'torch'
5480
5480
  - pydot>=4.0.1 ; extra == 'dot'
@@ -17,7 +17,7 @@ lark = ">=1.3.1"
17
17
  networkx = "*"
18
18
  numpy = "*"
19
19
  types-networkx = "*"
20
- typing-extensions = "*"
20
+ typing-extensions = ">=4.14"
21
21
 
22
22
  [pypi-dependencies]
23
23
  morphata = { path = ".", editable = true }
@@ -2,7 +2,7 @@
2
2
  name = "morphata"
3
3
  authors = [{ name = "Anand Balakrishnan", email = "anandbala1597@gmail.com" }]
4
4
  description = "Representation theory for automata, made practical."
5
- version = "2.0.3"
5
+ version = "2.0.5"
6
6
  requires-python = ">=3.12"
7
7
  classifiers = [
8
8
  "Intended Audience :: Science/Research",
@@ -21,7 +21,7 @@ dependencies = [
21
21
  "networkx",
22
22
  "numpy",
23
23
  "types-networkx",
24
- "typing-extensions",
24
+ "typing-extensions>=4.14",
25
25
  ]
26
26
 
27
27
  [project.optional-dependencies]
@@ -37,7 +37,8 @@ Example extended HOA with finite acceptance::
37
37
 
38
38
  import morphata.hoa.parser as parser
39
39
  from morphata.hoa.exporter import automaton_to_hoa as automaton_to_hoa
40
+ from morphata.hoa.exporter import symbolic_automaton_to_hoa as symbolic_automaton_to_hoa
40
41
  from morphata.hoa.parser import ParsedAutomaton as ParsedAutomaton
41
42
  from morphata.hoa.parser import parse as parse
42
43
 
43
- __all__ = ["parse", "parser", "ParsedAutomaton", "automaton_to_hoa"]
44
+ __all__ = ["parse", "parser", "ParsedAutomaton", "automaton_to_hoa", "symbolic_automaton_to_hoa"]