tiergraph 0.2.2__tar.gz → 0.3.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.
Files changed (158) hide show
  1. {tiergraph-0.2.2 → tiergraph-0.3.0}/.gitignore +3 -1
  2. {tiergraph-0.2.2 → tiergraph-0.3.0}/CHANGELOG.md +69 -1
  3. {tiergraph-0.2.2 → tiergraph-0.3.0}/PKG-INFO +4 -5
  4. {tiergraph-0.2.2 → tiergraph-0.3.0}/README.md +3 -4
  5. {tiergraph-0.2.2 → tiergraph-0.3.0}/corpus/accepted-documents.jsonl +186 -186
  6. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/concepts.md +2 -2
  7. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/format.md +24 -8
  8. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/construction.md +3 -1
  9. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/recognize-and-act.md +4 -1
  10. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/serialization.md +2 -2
  11. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/manifest.json +8 -0
  12. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/reference/api.md +235 -26
  13. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/reference/cli.md +1 -1
  14. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/caption_alignment.py +2 -1
  15. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/mix_paths.py +15 -2
  16. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/mixing.py +4 -1
  17. {tiergraph-0.2.2 → tiergraph-0.3.0}/schema/tiergraph.schema.json +57 -3
  18. tiergraph-0.3.0/schema/tiergraph.schema.sha256 +5 -0
  19. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/__init__.py +37 -1
  20. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/build.py +21 -9
  21. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/clock.py +10 -6
  22. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/core.py +168 -30
  23. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/fold.py +7 -0
  24. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/grammar.py +11 -4
  25. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/machine.py +24 -8
  26. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/machine_codec.py +9 -1
  27. tiergraph-0.3.0/src/tiergraph/pathoutput.py +521 -0
  28. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/rewrite.py +12 -6
  29. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/schema.py +31 -3
  30. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/spanview.py +7 -1
  31. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/value.py +6 -2
  32. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/wire.py +55 -17
  33. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph_dot/__init__.py +11 -2
  34. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/fold.py +3 -2
  35. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/schema_codec.py +3 -0
  36. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_alignment_witness.py +12 -3
  37. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_alternation_witness.py +3 -2
  38. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_boundary_witness.py +4 -1
  39. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_build.py +3 -3
  40. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_cli.py +5 -4
  41. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_dot.py +2 -1
  42. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_edit.py +4 -4
  43. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_external_reference_witness.py +8 -2
  44. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_fold.py +4 -1
  45. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_fold_witness.py +4 -1
  46. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_format_growth.py +5 -6
  47. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_grammar.py +3 -2
  48. tiergraph-0.3.0/tests/test_json_attributes.py +343 -0
  49. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_machine_decoders.py +57 -0
  50. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_mix_paths.py +2 -1
  51. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_mix_paths_render.py +3 -2
  52. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_path_alternation.py +4 -2
  53. tiergraph-0.3.0/tests/test_pathoutput.py +864 -0
  54. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_refusal_order.py +3 -3
  55. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_schema.py +2 -1
  56. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_schema_codec_conformance.py +15 -0
  57. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_spanview.py +4 -1
  58. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_value.py +3 -3
  59. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_wire.py +26 -9
  60. tiergraph-0.2.2/schema/tiergraph.schema.sha256 +0 -5
  61. {tiergraph-0.2.2 → tiergraph-0.3.0}/.github/workflows/ci.yml +0 -0
  62. {tiergraph-0.2.2 → tiergraph-0.3.0}/.github/workflows/publish.yml +0 -0
  63. {tiergraph-0.2.2 → tiergraph-0.3.0}/.pre-commit-config.yaml +0 -0
  64. {tiergraph-0.2.2 → tiergraph-0.3.0}/CONTRIBUTING.md +0 -0
  65. {tiergraph-0.2.2 → tiergraph-0.3.0}/LICENSE +0 -0
  66. {tiergraph-0.2.2 → tiergraph-0.3.0}/Makefile +0 -0
  67. {tiergraph-0.2.2 → tiergraph-0.3.0}/RELEASING.md +0 -0
  68. {tiergraph-0.2.2 → tiergraph-0.3.0}/SECURITY.md +0 -0
  69. {tiergraph-0.2.2 → tiergraph-0.3.0}/denied-name-digests.txt +0 -0
  70. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/README.md +0 -0
  71. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/contributing-docs.md +0 -0
  72. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/getting-started.md +0 -0
  73. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/folding.md +0 -0
  74. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/profiles.md +0 -0
  75. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/selection-and-traversal.md +0 -0
  76. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/span-views.md +0 -0
  77. {tiergraph-0.2.2 → tiergraph-0.3.0}/docs/guide/timing.md +0 -0
  78. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/__init__.py +0 -0
  79. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/critical_path.py +0 -0
  80. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/json_document.py +0 -0
  81. {tiergraph-0.2.2 → tiergraph-0.3.0}/examples/text_segmentation.py +0 -0
  82. {tiergraph-0.2.2 → tiergraph-0.3.0}/pyproject.toml +0 -0
  83. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/__init__.py +0 -0
  84. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/capture_corpus.py +0 -0
  85. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/check_changelog_claims.py +0 -0
  86. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/check_documented.py +0 -0
  87. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/check_format_growth.py +0 -0
  88. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/check_format_semantics.py +0 -0
  89. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/check_reservations.py +0 -0
  90. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/check_tracked_clean.py +0 -0
  91. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/generate_docs.py +0 -0
  92. {tiergraph-0.2.2 → tiergraph-0.3.0}/scripts/generate_schema.py +0 -0
  93. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/__main__.py +0 -0
  94. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/action.py +0 -0
  95. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/cli/__init__.py +0 -0
  96. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/inspect.py +0 -0
  97. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/path.py +0 -0
  98. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/pathplan.py +0 -0
  99. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/profile.py +0 -0
  100. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/py.typed +0 -0
  101. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/root.py +0 -0
  102. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/selection.py +0 -0
  103. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/semiring.py +0 -0
  104. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/textgrid.py +0 -0
  105. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph/traversal.py +0 -0
  106. {tiergraph-0.2.2 → tiergraph-0.3.0}/src/tiergraph_dot/py.typed +0 -0
  107. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/__init__.py +0 -0
  108. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/__init__.py +0 -0
  109. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/action.py +0 -0
  110. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/declared_schema_codec_divergences.py +0 -0
  111. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/kernel.py +0 -0
  112. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/machine.py +0 -0
  113. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/recognition.py +0 -0
  114. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/schema.py +0 -0
  115. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/selection.py +0 -0
  116. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/traversal.py +0 -0
  117. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/conformance/wire.py +0 -0
  118. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/fixtures/textgrid/integer-long.TextGrid +0 -0
  119. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/fixtures/textgrid/reference-long.TextGrid +0 -0
  120. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/fixtures/textgrid/reference-short.TextGrid +0 -0
  121. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/semiring_laws.py +0 -0
  122. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_action.py +0 -0
  123. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_canonical_properties.py +0 -0
  124. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_capture_corpus.py +0 -0
  125. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_changelog_claims.py +0 -0
  126. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_cli_envelope.py +0 -0
  127. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_clock.py +0 -0
  128. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_core.py +0 -0
  129. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_displacement.py +0 -0
  130. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_docs.py +0 -0
  131. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_examples.py +0 -0
  132. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_fold_exactness.py +0 -0
  133. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_format_semantics.py +0 -0
  134. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_gate_environment.py +0 -0
  135. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_inspect.py +0 -0
  136. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_machine.py +0 -0
  137. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_machine_codec.py +0 -0
  138. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_ordered_containment.py +0 -0
  139. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_ordered_polyadic_traversal.py +0 -0
  140. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_package.py +0 -0
  141. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_path.py +0 -0
  142. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_pathplan.py +0 -0
  143. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_polyadic_relations.py +0 -0
  144. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_polyadic_view_reachability.py +0 -0
  145. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_profile.py +0 -0
  146. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_publishability_guards.py +0 -0
  147. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_reservation_register.py +0 -0
  148. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_rewrite.py +0 -0
  149. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_root.py +0 -0
  150. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_selection.py +0 -0
  151. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_selection_semiring.py +0 -0
  152. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_semiring.py +0 -0
  153. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_semiring_law_discrimination.py +0 -0
  154. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_shipped_surface.py +0 -0
  155. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_text_domain.py +0 -0
  156. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_textgrid.py +0 -0
  157. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_traversal.py +0 -0
  158. {tiergraph-0.2.2 → tiergraph-0.3.0}/tests/test_value_embedding.py +0 -0
@@ -1,4 +1,6 @@
1
- untracked/
1
+ # Anchored for the same build-root exclusion hazard documented at /.claude/:
2
+ # a worktree beneath another checkout's untracked/ must retain every exclusion.
3
+ /untracked/
2
4
 
3
5
  __pycache__/
4
6
  *.py[cod]
@@ -7,6 +7,72 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.3.0] - 2026-09-22
11
+
12
+ ### Added
13
+
14
+ - Added JSON-valued attributes. `JsonType.JSON` declares an attribute whose
15
+ value is ordinary JSON -- null, a boolean, an integer, a double, a string,
16
+ an array or an object -- held as `JsonAttributeValue` on any carrier a
17
+ scalar attribute can sit on. The value is owned: the attribute keeps its own
18
+ snapshot, so a caller mutating the container it passed, or the one it is
19
+ handed back, changes neither. Kinds and float signs are part of the value's
20
+ identity, so `0`, `0.0` and `False` are three values and `-0.0` crosses the
21
+ wire as `-0.0`.
22
+ - **BREAKING:** `FORMAT_VERSION` moves from `"0.2.0"` to `"0.3.0"`. This
23
+ reader accepts only its own format version, so it refuses a document written
24
+ at `"0.2.0"` with a discriminator refusal. The release line moves because
25
+ the schema grows by the JSON attribute record; otherwise its shape is
26
+ unchanged against the 0.2 line.
27
+
28
+ ### Changed
29
+
30
+ - A JSON integer must lie within +/-(2**53 - 1), the range a JSON peer decodes
31
+ exactly. JSON has one number type and its peers read it as an IEEE double,
32
+ so a larger integer reads back as a different number with no error.
33
+ `JsonAttributeValue` refuses one where it is built, and reading a document
34
+ refuses one as a staged `Refusal` rather than loading a value its peers
35
+ would corrupt.
36
+ - Reading a document refuses an integer literal too long to convert as a
37
+ staged `Refusal`, where it previously raised a bare `ValueError` from the
38
+ process's digit limit. This bounds conversion only; it places no budget on
39
+ integer fields other than JSON attribute values.
40
+ - The scalar attribute constructor and a grammar weight refuse a JSON-typed
41
+ declaration, so a JSON value cannot reach a place that reads only scalars.
42
+
43
+ ## [0.2.3] - 2026-09-15
44
+
45
+ ### Added
46
+
47
+ - Added `Emissions` and `OutputPlan`, which pool the mass of complete paths by
48
+ the output string their items emit, over candidates the caller supplies, beside
49
+ `PathPlan` and without changing it. `OutputPlan.masses` returns `OutputMasses`:
50
+ each candidate's mass and the residual mass of every other output, computed in
51
+ the base algebra by one marginal pass rather than by subtraction, with the zero
52
+ mass reported rather than a distribution fabricated. Its `decided` and `tied`
53
+ certificates are available only under `LOG_PROBABILITY` and `COUNTING`; under
54
+ `LOG_PROBABILITY`, `tied` compares computed values, which an approximate
55
+ algebra can split for equal real masses. `conditioned` restricts the plan to
56
+ paths accepted as one candidate, refused only when no such path exists, and
57
+ `item_marginals` pools those conditioned marginals back to the base plan's
58
+ items as `OutputItemMarginals`. Declared roots and relation-instance
59
+ multiplicity carry into the derived plan. Duplicate or empty candidate sets,
60
+ invalid emissions, and noncommutative multiplication are refused. The pooled
61
+ best output over all strings is intractable in general, so the plan scores the
62
+ candidates it is given and reports the residual that bounds every other (#190).
63
+
64
+ ### Changed
65
+
66
+ - `FORMAT_VERSION` stays `"0.2.0"`: nothing in this line touches the wire
67
+ format, and `make format-growth` reports no break.
68
+
69
+ ### Documentation
70
+
71
+ - The lineage now credits Sue Hertz for the Delta representation, which the
72
+ README and the concepts guide had attributed to Paul Hertz, and spells out
73
+ Heterogeneous Relation Graphs (HRGs) (#189). The README no longer claims that no
74
+ view can disagree with the store.
75
+
10
76
  ## [0.2.2] - 2026-09-14
11
77
 
12
78
  ### Added
@@ -962,7 +1028,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
962
1028
  - TG-PATH canonical addressing for structural and durable items and boundaries, profile-owned alternatives, kind checks, and typed refusals with offender details.
963
1029
  - Canonical selection, bounded bipartite walks, ordered polyadic traversal, and ordered containment queries that preserve declared incidence and child order where applicable.
964
1030
 
965
- [Unreleased]: https://github.com/lenzo-ka/tiergraph/compare/v0.2.2...HEAD
1031
+ [Unreleased]: https://github.com/lenzo-ka/tiergraph/compare/v0.3.0...HEAD
1032
+ [0.3.0]: https://github.com/lenzo-ka/tiergraph/compare/v0.2.3...v0.3.0
1033
+ [0.2.3]: https://github.com/lenzo-ka/tiergraph/compare/v0.2.2...v0.2.3
966
1034
  [0.2.2]: https://github.com/lenzo-ka/tiergraph/compare/v0.2.1...v0.2.2
967
1035
  [0.2.1]: https://github.com/lenzo-ka/tiergraph/compare/v0.2.0...v0.2.1
968
1036
  [0.2.0]: https://github.com/lenzo-ka/tiergraph/compare/v0.1.0...v0.2.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tiergraph
3
- Version: 0.2.2
3
+ Version: 0.3.0
4
4
  Summary: Ordered tiers, declared relations, and an algebra over them
5
5
  Project-URL: Homepage, https://github.com/lenzo-ka/tiergraph
6
6
  Project-URL: Repository, https://github.com/lenzo-ka/tiergraph
@@ -38,8 +38,7 @@ Description-Content-Type: text/markdown
38
38
 
39
39
  tiergraph holds parallel ordered sequences and the declared links between them
40
40
  as one immutable graph, checked when it is built. Every view — selection,
41
- traversal, containment, timing, folds — is computed from that one graph, so no
42
- view can disagree with the store.
41
+ traversal, containment, timing, folds — is computed from that one graph.
43
42
 
44
43
  The shape is the track view of an audio or video editor: rows of items, ordered
45
44
  within a row, aligned across rows, with links between rows. Aligned annotations
@@ -110,8 +109,8 @@ The complete runnable example keeps the displayed phone labels separate from
110
109
  their durable ids and prints `['K', 'AE', 'T']`; see
111
110
  [`examples/caption_alignment.py`](examples/caption_alignment.py).
112
111
 
113
- The model learned from Paul Hertz's Delta representation and the heterogeneous
114
- relation graphs (HRGs) of the Festival Speech Synthesis System. tiergraph keeps
112
+ The model is informed by Sue Hertz's Delta representation and the Heterogeneous
113
+ Relation Graphs (HRGs) of the Festival Speech Synthesis System. tiergraph keeps
115
114
  their emphasis on explicit tiered structure while defining a typed, immutable
116
115
  model and a versioned interchange format.
117
116
 
@@ -4,8 +4,7 @@
4
4
 
5
5
  tiergraph holds parallel ordered sequences and the declared links between them
6
6
  as one immutable graph, checked when it is built. Every view — selection,
7
- traversal, containment, timing, folds — is computed from that one graph, so no
8
- view can disagree with the store.
7
+ traversal, containment, timing, folds — is computed from that one graph.
9
8
 
10
9
  The shape is the track view of an audio or video editor: rows of items, ordered
11
10
  within a row, aligned across rows, with links between rows. Aligned annotations
@@ -76,8 +75,8 @@ The complete runnable example keeps the displayed phone labels separate from
76
75
  their durable ids and prints `['K', 'AE', 'T']`; see
77
76
  [`examples/caption_alignment.py`](examples/caption_alignment.py).
78
77
 
79
- The model learned from Paul Hertz's Delta representation and the heterogeneous
80
- relation graphs (HRGs) of the Festival Speech Synthesis System. tiergraph keeps
78
+ The model is informed by Sue Hertz's Delta representation and the Heterogeneous
79
+ Relation Graphs (HRGs) of the Festival Speech Synthesis System. tiergraph keeps
81
80
  their emphasis on explicit tiered structure while defining a typed, immutable
82
81
  model and a versioned interchange format.
83
82