homological-observability 1.1.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 (94) hide show
  1. homological_observability-1.1.0/CHANGELOG.md +105 -0
  2. homological_observability-1.1.0/CITATION.cff +30 -0
  3. homological_observability-1.1.0/CONTRIBUTING.md +64 -0
  4. homological_observability-1.1.0/LICENSE +21 -0
  5. homological_observability-1.1.0/MANIFEST.in +16 -0
  6. homological_observability-1.1.0/PAPER_MAP.md +118 -0
  7. homological_observability-1.1.0/PKG-INFO +115 -0
  8. homological_observability-1.1.0/README.md +368 -0
  9. homological_observability-1.1.0/critical_kernel_checks.py +22 -0
  10. homological_observability-1.1.0/docs/CONVENTIONS.md +299 -0
  11. homological_observability-1.1.0/docs/CRITICAL_EXPERIMENT.md +243 -0
  12. homological_observability-1.1.0/docs/END_TO_END_EXAMPLE.md +263 -0
  13. homological_observability-1.1.0/docs/MODEL_GUIDE.md +335 -0
  14. homological_observability-1.1.0/docs/NUMERICS.md +142 -0
  15. homological_observability-1.1.0/docs/OUTPUT_CONTRACT.md +373 -0
  16. homological_observability-1.1.0/docs/PYPI.md +81 -0
  17. homological_observability-1.1.0/docs/SCIENTIFIC_SCOPE.md +230 -0
  18. homological_observability-1.1.0/docs/snapshot_ambiguity.svg +31 -0
  19. homological_observability-1.1.0/docs/wedge_c3_c5.svg +51 -0
  20. homological_observability-1.1.0/examples/biased_c4_critical.json +41 -0
  21. homological_observability-1.1.0/examples/biased_c4_critical_result.json +748 -0
  22. homological_observability-1.1.0/examples/wedge_c3_c5.json +29 -0
  23. homological_observability-1.1.0/examples/wedge_c3_c5_result.json +496 -0
  24. homological_observability-1.1.0/examples/wedge_c3_c5_result.md +24 -0
  25. homological_observability-1.1.0/explore_cycles.py +67 -0
  26. homological_observability-1.1.0/pyproject.toml +89 -0
  27. homological_observability-1.1.0/quickstart.py +157 -0
  28. homological_observability-1.1.0/reproduce_all.py +28 -0
  29. homological_observability-1.1.0/requirements.txt +24 -0
  30. homological_observability-1.1.0/results/REPORT.md +70 -0
  31. homological_observability-1.1.0/results/companion_summary.png +0 -0
  32. homological_observability-1.1.0/results/companion_summary.svg +2663 -0
  33. homological_observability-1.1.0/results/critical_kernel_results.csv +6 -0
  34. homological_observability-1.1.0/results/selected_appendix_checks.csv +29 -0
  35. homological_observability-1.1.0/selected_appendix_checks.py +26 -0
  36. homological_observability-1.1.0/setup.cfg +4 -0
  37. homological_observability-1.1.0/src/homological_observability/__init__.py +115 -0
  38. homological_observability-1.1.0/src/homological_observability/_count_tv.py +97 -0
  39. homological_observability-1.1.0/src/homological_observability/_critical_catalogue.py +803 -0
  40. homological_observability-1.1.0/src/homological_observability/_integer_io.py +62 -0
  41. homological_observability-1.1.0/src/homological_observability/analysis.py +183 -0
  42. homological_observability-1.1.0/src/homological_observability/cli.py +222 -0
  43. homological_observability-1.1.0/src/homological_observability/critical.py +92 -0
  44. homological_observability-1.1.0/src/homological_observability/critical_experiment.py +1455 -0
  45. homological_observability-1.1.0/src/homological_observability/cycles.py +173 -0
  46. homological_observability-1.1.0/src/homological_observability/data/examples/wedge_c3_c5.json +29 -0
  47. homological_observability-1.1.0/src/homological_observability/data/reference/critical_kernel_results.csv +6 -0
  48. homological_observability-1.1.0/src/homological_observability/data/reference/selected_appendix_checks.csv +29 -0
  49. homological_observability-1.1.0/src/homological_observability/examples.py +92 -0
  50. homological_observability-1.1.0/src/homological_observability/filtration.py +274 -0
  51. homological_observability-1.1.0/src/homological_observability/homology.py +178 -0
  52. homological_observability-1.1.0/src/homological_observability/integer_lattice.py +181 -0
  53. homological_observability-1.1.0/src/homological_observability/lattice.py +37 -0
  54. homological_observability-1.1.0/src/homological_observability/model.py +395 -0
  55. homological_observability-1.1.0/src/homological_observability/phase.py +134 -0
  56. homological_observability-1.1.0/src/homological_observability/reference_appendix.py +206 -0
  57. homological_observability-1.1.0/src/homological_observability/reference_critical.py +176 -0
  58. homological_observability-1.1.0/src/homological_observability/reporting.py +226 -0
  59. homological_observability-1.1.0/src/homological_observability/reproduction.py +244 -0
  60. homological_observability-1.1.0/src/homological_observability/schema.py +57 -0
  61. homological_observability-1.1.0/src/homological_observability/schemas/analysis.schema.json +477 -0
  62. homological_observability-1.1.0/src/homological_observability/schemas/critical-experiment.schema.json +551 -0
  63. homological_observability-1.1.0/src/homological_observability/schemas/critical-model.schema.json +120 -0
  64. homological_observability-1.1.0/src/homological_observability/schemas/error.schema.json +14 -0
  65. homological_observability-1.1.0/src/homological_observability/schemas/examples.schema.json +29 -0
  66. homological_observability-1.1.0/src/homological_observability/schemas/model.schema.json +88 -0
  67. homological_observability-1.1.0/src/homological_observability/schemas/reproduction.schema.json +95 -0
  68. homological_observability-1.1.0/src/homological_observability/serialization.py +510 -0
  69. homological_observability-1.1.0/src/homological_observability/version.py +3 -0
  70. homological_observability-1.1.0/src/homological_observability.egg-info/PKG-INFO +115 -0
  71. homological_observability-1.1.0/src/homological_observability.egg-info/SOURCES.txt +92 -0
  72. homological_observability-1.1.0/src/homological_observability.egg-info/dependency_links.txt +1 -0
  73. homological_observability-1.1.0/src/homological_observability.egg-info/entry_points.txt +2 -0
  74. homological_observability-1.1.0/src/homological_observability.egg-info/requires.txt +12 -0
  75. homological_observability-1.1.0/src/homological_observability.egg-info/top_level.txt +1 -0
  76. homological_observability-1.1.0/tests/__init__.py +1 -0
  77. homological_observability-1.1.0/tests/test_critical_catalogue.py +643 -0
  78. homological_observability-1.1.0/tests/test_critical_product_contract.py +483 -0
  79. homological_observability-1.1.0/tests/test_cycles.py +145 -0
  80. homological_observability-1.1.0/tests/test_documentation.py +339 -0
  81. homological_observability-1.1.0/tests/test_extreme_inputs.py +315 -0
  82. homological_observability-1.1.0/tests/test_filtration.py +375 -0
  83. homological_observability-1.1.0/tests/test_integer_lattice.py +81 -0
  84. homological_observability-1.1.0/tests/test_model_io.py +76 -0
  85. homological_observability-1.1.0/tests/test_numerical_boundaries.py +139 -0
  86. homological_observability-1.1.0/tests/test_output_boundaries.py +259 -0
  87. homological_observability-1.1.0/tests/test_phase.py +176 -0
  88. homological_observability-1.1.0/tests/test_product_contract.py +308 -0
  89. homological_observability-1.1.0/tests/test_reproduction_status.py +84 -0
  90. homological_observability-1.1.0/tests/test_scientific_checks.py +265 -0
  91. homological_observability-1.1.0/tests/validate_distribution.py +231 -0
  92. homological_observability-1.1.0/tests/validate_graph_atlas.py +114 -0
  93. homological_observability-1.1.0/tests/validate_schema.py +153 -0
  94. homological_observability-1.1.0/tools/freeze_examples.py +62 -0
@@ -0,0 +1,105 @@
1
+ # Changelog
2
+
3
+ All user-visible software changes are recorded here. The project follows
4
+ semantic versioning for packaged interfaces; schema versions are tracked
5
+ separately inside their JSON documents.
6
+
7
+ ## 1.1.0 — 2026-10-13
8
+
9
+ ### Added
10
+
11
+ - Exact exposure, visible-image, and hidden integer filtrations for user-defined
12
+ connected finite simple graphs.
13
+ - Smith/Hermite graded quotient invariants, including finite torsion factors.
14
+ - Versioned JSON Schemas for topology models and analyses, critical models and
15
+ experiments, example catalogs, reproduction results, and controlled errors.
16
+ - Stable top-level Python API and deterministic JSON, text, and Markdown
17
+ renderers.
18
+ - `examples`, `example`, `analyze`, `critical`, and `reproduce` CLI tasks with
19
+ documented statuses and exit codes.
20
+ - Exact critical-layer path catalogues and theorem-derived marked-Poisson
21
+ experiment specifications for known strictly positive directed edge rates.
22
+ - Exact decimal and rational parsing for critical rates and intensity, with
23
+ atomic path, integer-digit, cycle, and output resource limits.
24
+ - Built-in wedge-of-C3-and-C5 demonstration with a staged exposure, index-two
25
+ visible quotient, and hidden free direction.
26
+ - Rate-biased C4 end-to-end example with an exact nonreversible stationary law,
27
+ conditional critical marks, and a generated machine-readable result.
28
+ - Wheel and sdist distributions with installed reference data.
29
+ - Python 3.11–3.13 support.
30
+
31
+ ### Changed
32
+
33
+ - Analysis Schema version 2 separates completion of the requested horizon from
34
+ certification that the natural filtration is complete.
35
+ - Analyses that complete a restricted horizon without exposing the full
36
+ integral homology lattice now return `PARTIAL_HORIZON` rather than
37
+ `COMPLETE`.
38
+ - `quickstart.py` now creates and manages its validation environment before
39
+ running the reader-side tests and frozen-paper reproduction.
40
+ - Generated reports use `Visible` and `Hidden` consistently for the two
41
+ readout sectors.
42
+ - Terminal tables align quotient values with their column headings.
43
+ - Critical resource controls distinguish an integer-digit preflight admission
44
+ budget from exact digit and output-record ceilings.
45
+
46
+ ### Compatibility
47
+
48
+ - The source-checkout commands `quickstart.py`, `reproduce_all.py`,
49
+ `critical_kernel_checks.py`, `selected_appendix_checks.py`, and
50
+ `explore_cycles.py` remain supported.
51
+
52
+ ### Fixed
53
+
54
+ - Reproduction reports distinguish calculation checks from frozen-reference
55
+ comparison, and failed or interrupted runs invalidate earlier success reports.
56
+ - Equivalent finite-ring endpoint and winding coordinates use the same bounded
57
+ calculation. Oversized floating-point requests raise explicit range or budget
58
+ errors before summation.
59
+ - Source builds require setuptools 77.0.3 or later, matching the SPDX license
60
+ metadata used by the package.
61
+ - Software and companion paper metadata include the complete four-author list.
62
+ - The shared pinned verification dependencies include JSON Schema validation
63
+ and its dependencies, so fresh quickstart environments and CI can run the
64
+ reader-side tests. Existing quickstart environments refresh automatically.
65
+ - Path preflight stops at a certified resource refusal without constructing
66
+ an oversized count. Uncomputed totals remain explicitly unavailable.
67
+ - Generated topology integers share one representation boundary across the
68
+ Python API, JSON, text, and Markdown output.
69
+ - Maximum-value parentheses display correctly in the GitHub-rendered guides.
70
+ - Poisson-averaged MAP evaluation remains finite at large representable means.
71
+ - Small-window endpoint probabilities retain representable subnormal mass;
72
+ unresolved positive probabilities raise explicit range errors. Rare bridges
73
+ use stable series through a unit sampling window.
74
+ - Exact digit checks no longer format oversized integers before counting.
75
+ Explicit decimal input/output bounds keep rejected requests and limited
76
+ results reportable, including model hashes and command-line diagnostics.
77
+ - Direct public graph and readout construction validates integer coefficients,
78
+ graph structure, and analysis settings before scientific computation.
79
+ - Phase regimes now follow the exact binary sampling input, including values
80
+ adjacent to non-dyadic thresholds. Exposure and entropy calculations round
81
+ after exact arithmetic and report unrepresentable results consistently.
82
+ - C3 and C4 count-TV diagnostics use outward-rounded probability recurrences,
83
+ including arithmetic error and omitted tails in the returned intervals.
84
+ - Small-window cycle bridges cancel the rare-endpoint scale before division.
85
+ - Reproduction protects both committed and installed references, including
86
+ symbolic and hard-link aliases with different output names.
87
+ - Critical digit limits include scientific integers, readout maps, marks and
88
+ derived total intensities, with atomic rejection of oversized results.
89
+ - The diametric-chord C6 from Appendix F.4 has its own path-pair regression;
90
+ the existing distance-two chord example remains separately identified.
91
+
92
+ ### Scientific evidence
93
+
94
+ - The C3/C4 TV columns in the critical-kernel table are recalibrated against
95
+ independent high-precision probabilities. The other reference values and
96
+ existing comparison tolerances are retained. See [numerical methods](docs/NUMERICS.md).
97
+ - The exact integer kernel has been checked across all 996 connected graphs in
98
+ the NetworkX graph atlas, including independent path-pair and integer-readout
99
+ comparisons.
100
+
101
+ ## 1.0.0
102
+
103
+ - Initial computational companion for the paper's exactly solvable finite-cycle
104
+ examples, critical kernels, MAP identity, and reciprocal-lattice peak
105
+ mechanism.
@@ -0,0 +1,30 @@
1
+ cff-version: 1.2.0
2
+ message: "If you use this software, please cite the software and companion paper."
3
+ title: "Homological Observability: Research Kernel and Computational Companion"
4
+ type: software
5
+ authors:
6
+ - family-names: Liu
7
+ given-names: HongZheng
8
+ - family-names: Tian
9
+ given-names: YiNuo
10
+ - family-names: Wu
11
+ given-names: Zhiyue
12
+ - family-names: Cheng
13
+ given-names: Jianqun
14
+ version: 1.1.0
15
+ license: MIT
16
+ repository-code: "https://github.com/yeruciwenrou-dotcom/homological-observability"
17
+ preferred-citation:
18
+ type: article
19
+ authors:
20
+ - family-names: Liu
21
+ given-names: HongZheng
22
+ - family-names: Tian
23
+ given-names: YiNuo
24
+ - family-names: Wu
25
+ given-names: Zhiyue
26
+ - family-names: Cheng
27
+ given-names: Jianqun
28
+ title: "Stochastic Histories at Finite Temporal Resolution: Homological Observability and Information Phase Diagrams in Markov Jump Processes"
29
+ year: 2026
30
+ notes: "Unpublished manuscript; public release on arXiv is planned."
@@ -0,0 +1,64 @@
1
+ # Contributing
2
+
3
+ Corrections, reproducible examples, and documentation improvements are welcome.
4
+ Use the [issue forms](https://github.com/yeruciwenrou-dotcom/homological-observability/issues/new/choose)
5
+ to report a problem, including the version or commit, a minimal input, and
6
+ the expected and observed results. For a research question or proposed
7
+ extension, open a regular issue describing the model and observation assumptions.
8
+
9
+ ## Development environment
10
+
11
+ From a source checkout with Python 3.11–3.13, create a virtual environment
12
+ and install the pinned dependencies and development tools. On macOS or Linux:
13
+
14
+ ```bash
15
+ python3 -m venv .venv
16
+ source .venv/bin/activate
17
+ python -m pip install -r requirements.txt
18
+ python -m pip install -c requirements.txt -e '.[test]'
19
+ ```
20
+
21
+ On Windows PowerShell:
22
+
23
+ ```powershell
24
+ py -3.12 -m venv .venv
25
+ .venv\Scripts\python.exe -m pip install -r requirements.txt
26
+ .venv\Scripts\python.exe -m pip install -c requirements.txt -e '.[test]'
27
+ ```
28
+
29
+ This editable installation uses your working source files. In the checks
30
+ below, Windows users can replace `python` with `.venv\Scripts\python.exe`
31
+ and `ruff` with `.venv\Scripts\ruff.exe`; activation is optional.
32
+
33
+ Run the checks relevant to the change:
34
+
35
+ ```bash
36
+ python -W error -m unittest discover -s tests -v
37
+ python -W error reproduce_all.py
38
+ python tests/validate_schema.py
39
+ python tests/validate_graph_atlas.py
40
+ python tests/validate_distribution.py
41
+ ruff check .
42
+ ruff format --check .
43
+ ```
44
+
45
+ The distribution check builds a wheel and source archive, then installs and
46
+ exercises each in a separate environment outside the checkout. It needs
47
+ internet access for build tools and dependencies. CI runs these checks on
48
+ each pull request.
49
+
50
+ ## Scientific changes
51
+
52
+ For a calculation fix, explain the mathematical or numerical reason and add
53
+ a regression that distinguishes the corrected result from the error. Closed forms,
54
+ independent calculations, and structural invariants are useful comparisons.
55
+ Update the input/output guides when a public contract changes.
56
+
57
+ Keep new calculations in a separate output directory. The committed CSV files
58
+ and their packaged copies are the paper's numerical references; changes to
59
+ them need an independently justified correction and a matching changelog entry.
60
+ Regenerate built-in example reports with `python tools/freeze_examples.py` and
61
+ verify them with `python tools/freeze_examples.py --check`.
62
+
63
+ Submit focused pull requests with the user-visible effect and verification
64
+ results. Contributions use the repository's MIT License.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 HongZheng Liu, YiNuo Tian, Zhiyue Wu, and Jianqun Cheng
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,16 @@
1
+ include README.md
2
+ include CITATION.cff
3
+ include CHANGELOG.md
4
+ include CONTRIBUTING.md
5
+ include PAPER_MAP.md
6
+ include critical_kernel_checks.py
7
+ include explore_cycles.py
8
+ include quickstart.py
9
+ include reproduce_all.py
10
+ include requirements.txt
11
+ include selected_appendix_checks.py
12
+ recursive-include docs *.md *.svg
13
+ recursive-include examples *.json *.md
14
+ recursive-include results *.csv *.md *.png *.svg
15
+ recursive-include tests *.py
16
+ recursive-include tools *.py
@@ -0,0 +1,118 @@
1
+ # Paper map and evidence
2
+
3
+ This repository is the companion codebase for the manuscript *Stochastic
4
+ Histories at Finite Temporal Resolution: Homological Observability and
5
+ Information Phase Diagrams in Markov Jump Processes*. The manuscript is not
6
+ yet publicly available. See the
7
+ [citation information](README.md#citation-and-license) for its release status
8
+ and the software record.
9
+
10
+ This guide connects the paper's mathematical objects to their implementation
11
+ and reproducible evidence. Entries are organized by scientific object.
12
+
13
+ The physical target is the accumulated integer cycle history of a particular
14
+ run observed through vertex snapshots and optional counters. The filtration
15
+ determines which history differences can appear at each short-time order;
16
+ the critical experiment determines their limiting weights and what remains
17
+ after the available observations. For a reader's introduction, start with
18
+ [physical interpretation and scope](docs/SCIENTIFIC_SCOPE.md). This page
19
+ provides the implementation and evidence trail behind those interpretations.
20
+
21
+ ## Integer homology and filtrations
22
+
23
+ | Paper object | Computation | Implementation |
24
+ | --- | --- | --- |
25
+ | Integral homology $\Lambda=H_1(G;\mathbb Z)$ | Ordered spanning tree and fundamental cycles | [homology.py](src/homological_observability/homology.py) |
26
+ | Exposure lattice $L_m$ | Simple cycles of length at most $2m$, followed by integer column HNF | [filtration.py](src/homological_observability/filtration.py) |
27
+ | Integer side readout $\pi$ | Edge cochains restricted to cycle coordinates | [model.py](src/homological_observability/model.py), [homology.py](src/homological_observability/homology.py) |
28
+ | Visible image $\pi(L_m)$ | Exact integer image | [integer_lattice.py](src/homological_observability/integer_lattice.py) |
29
+ | Hidden lattice $K_m=L_m\cap\ker\pi$ | Saturated integer kernel and lattice image | [integer_lattice.py](src/homological_observability/integer_lattice.py) |
30
+ | Successive graded quotients | Inclusion coordinates and Smith normal form | [integer_lattice.py](src/homological_observability/integer_lattice.py) |
31
+ | Phase and entropy laws | Apply the paper's exponents and hidden-rank formulas | [phase.py](src/homological_observability/phase.py) |
32
+ | Completeness | Distinguish a completed horizon, full lattice saturation, and exhausted resources | [analysis.py](src/homological_observability/analysis.py) |
33
+
34
+ The [wedge C3–C5 example](docs/END_TO_END_EXAMPLE.md) exhibits staged exposure,
35
+ a visible $\mathbb Z/2\mathbb Z$ quotient, and a hidden free direction. Its
36
+ [JSON result](examples/wedge_c3_c5_result.json) records every lattice and graded
37
+ quotient. These exact integer calculations retain finite-index effects that
38
+ real-rank calculations would lose. Coordinate matrices depend on the chosen
39
+ basis; ranks and quotient invariants do not.
40
+
41
+ Independent checks include:
42
+
43
+ - [Path-pair definitions and basis invariance](tests/test_filtration.py),
44
+ including both chorded C6 models and a pure-torsion graph.
45
+ - [Integer-kernel and quotient tests](tests/test_integer_lattice.py), including
46
+ cases where a rational nullspace basis is insufficient.
47
+ - [All 996 connected graph-atlas models](tests/validate_graph_atlas.py), with
48
+ independent path-pair and readout comparisons.
49
+ - [Phase laws and sampling boundaries](tests/test_phase.py), together with
50
+ [horizon, resource, and CLI checks](tests/test_product_contract.py).
51
+
52
+ The Appendix F.4 C6 uses the diametric chord {0,3}: both independent directions
53
+ appear in $L_2$. The separate chord {0,2} example has ranks 1 and 2 at layers 2
54
+ and 3. The tests identify these as `chorded_c6_diametric` and
55
+ `chorded_c6_distance_two`, respectively.
56
+
57
+ ## Rate-dependent critical experiment
58
+
59
+ | Paper object | Computation | Implementation |
60
+ | --- | --- | --- |
61
+ | Known generator and stationary law | Positive exact rates in both directions; solve $pQ=0$ over the rationals | [critical_experiment.py](src/homological_observability/critical_experiment.py) |
62
+ | Critical marks | Enumerate walks of length $m$, subtract an endpoint reference geodesic, and project to $L_m/L_{m-1}$ | [_critical_catalogue.py](src/homological_observability/_critical_catalogue.py) |
63
+ | Induced readout | Map critical marks to the visible quotient using constructive Smith coordinates | [_critical_catalogue.py](src/homological_observability/_critical_catalogue.py) |
64
+ | Marked-Poisson limit | Combine stationary masses and path weights under $T\delta^{m-1}\to\theta$ | [_critical_catalogue.py](src/homological_observability/_critical_catalogue.py) |
65
+ | Resource completeness | Check path, digit, cycle, and output limits before returning a complete experiment | [critical_experiment.py](src/homological_observability/critical_experiment.py) |
66
+
67
+ The [biased C4 guide](docs/CRITICAL_EXPERIMENT.md) derives the conditional
68
+ probabilities $4/5$ and $1/5$ and total critical intensity $5/2$ from exact
69
+ rates. The complete [generated result](examples/biased_c4_critical_result.json)
70
+ contains the stationary law, quotient groups, catalogue, and limit experiment.
71
+
72
+ [Catalogue tests](tests/test_critical_catalogue.py) compare C3–C5 closed forms,
73
+ nonreversible weights, repeated-vertex walks, zero marks, torsion, and changes
74
+ of reference geodesic. [Public-interface tests](tests/test_critical_product_contract.py)
75
+ check exact parsing, serialization, API/CLI agreement, and atomic resource
76
+ limits. The output is a critical-limit generative specification; it is not an
77
+ exact posterior at finite $(T,\delta)$ or an unconditional critical MAP solver.
78
+
79
+ ## Inputs, outputs, and reproducibility
80
+
81
+ | Interface | Definition | Checks |
82
+ | --- | --- | --- |
83
+ | Models and results | [Model guide](docs/MODEL_GUIDE.md), [output contract](docs/OUTPUT_CONTRACT.md), and [bundled schemas](src/homological_observability/schemas) | [Schema validation](tests/validate_schema.py), [model tests](tests/test_model_io.py), and topology/critical interface tests |
84
+ | Public Python API and CLI | [Package exports](src/homological_observability/__init__.py), [CLI](src/homological_observability/cli.py) | Equality of the structured API and CLI results |
85
+ | Built-in examples | [Example registry](src/homological_observability/examples.py) | [Frozen example checks](tools/freeze_examples.py) and installed-package checks |
86
+ | Probability and input boundaries | [Numerical methods](docs/NUMERICS.md) | [High-precision interval tests](tests/test_numerical_boundaries.py) and [extreme-input regressions](tests/test_extreme_inputs.py) |
87
+ | Installation and reproduction | [Reproduction API](src/homological_observability/reproduction.py) | [Wheel and sdist checks outside the checkout](tests/validate_distribution.py) |
88
+ | Documentation | [README](README.md) and the linked guides | [Executable examples and local-link checks](tests/test_documentation.py) |
89
+
90
+ JSON Schema checks structure; runtime validation also checks connectivity,
91
+ edge and readout semantics, and exact-value limits. Built-in examples are
92
+ versioned demonstrations. The frozen tables below are the numerical reference
93
+ for paper reproduction.
94
+
95
+ ## Frozen finite-cycle evidence
96
+
97
+ | Calculation | Implementation and independent check | Reference |
98
+ | --- | --- | --- |
99
+ | Finite-cycle endpoint and bridge probabilities | [cycles.py](src/homological_observability/cycles.py); [finite-state matrix comparison](tests/test_cycles.py) | [Selected appendix checks](results/selected_appendix_checks.csv) |
100
+ | Winding-sector posterior | [explore_cycles.py](explore_cycles.py); lifted-chain comparison | Reader-selected terminal table |
101
+ | Small-window C3–C6 asymptotics | [reference_appendix.py](src/homological_observability/reference_appendix.py); refinement checks | [Selected appendix checks](results/selected_appendix_checks.csv) |
102
+ | C3/C4 critical count kernels | [critical.py](src/homological_observability/critical.py); independent count laws | [Critical-kernel table](results/critical_kernel_results.csv) |
103
+ | Poisson-averaged binomial MAP identity | [critical.py](src/homological_observability/critical.py); direct mixture and high-precision Bessel comparisons | MAP rows in the appendix table |
104
+ | Reciprocal-lattice peak suppression | [lattice.py](src/homological_observability/lattice.py); positivity, ordering, and refinement checks | Lattice rows in the appendix table and [summary figure](results/companion_summary.png) |
105
+ | Combined reproduction | [reporting.py](src/homological_observability/reporting.py) and [reproduction.py](src/homological_observability/reproduction.py) | [Report](results/REPORT.md) and PNG/SVG figures |
106
+
107
+ `python quickstart.py` runs the reader-side tests and regenerates these
108
+ calculations. Numerical comparison uses the documented tolerances and leaves
109
+ the committed references unchanged.
110
+
111
+ ## Evidence boundary
112
+
113
+ Enumeration and graph-atlas checks support the implementation; they do not
114
+ replace proofs for arbitrary finite graphs. The critical task assumes a known
115
+ exact generator. The frozen cycle examples establish neither a universal
116
+ finite-sample error bound nor extensions to one-way support, multigraphs,
117
+ noisy observations, or unknown models. General theorem statements,
118
+ hypotheses, and proofs remain in the manuscript.
@@ -0,0 +1,115 @@
1
+ Metadata-Version: 2.4
2
+ Name: homological-observability
3
+ Version: 1.1.0
4
+ Summary: Homological observability and asymptotic sampling requirements for finite-state Markov jump processes
5
+ Author: HongZheng Liu, YiNuo Tian, Zhiyue Wu, Jianqun Cheng
6
+ License-Expression: MIT
7
+ Project-URL: Repository, https://github.com/yeruciwenrou-dotcom/homological-observability
8
+ Project-URL: Documentation, https://github.com/yeruciwenrou-dotcom/homological-observability#readme
9
+ Project-URL: Issues, https://github.com/yeruciwenrou-dotcom/homological-observability/issues
10
+ Project-URL: Changelog, https://github.com/yeruciwenrou-dotcom/homological-observability/blob/main/CHANGELOG.md
11
+ Keywords: algebraic topology,integer lattices,Markov jump processes,homological observability,information theory,reproducible research,scientific software
12
+ Classifier: Development Status :: 4 - Beta
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
19
+ Requires-Python: <3.14,>=3.11
20
+ Description-Content-Type: text/markdown
21
+ License-File: LICENSE
22
+ Requires-Dist: matplotlib<4,>=3.10
23
+ Requires-Dist: networkx<4,>=3.6
24
+ Requires-Dist: numpy<3,>=2.3
25
+ Requires-Dist: pandas<3,>=2.2
26
+ Requires-Dist: scipy<2,>=1.17
27
+ Requires-Dist: sympy<2,>=1.14
28
+ Provides-Extra: test
29
+ Requires-Dist: build<2,>=1.3; extra == "test"
30
+ Requires-Dist: jsonschema<5,>=4.25; extra == "test"
31
+ Requires-Dist: mpmath<2,>=1.3; extra == "test"
32
+ Requires-Dist: ruff<1,>=0.12; extra == "test"
33
+ Dynamic: license-file
34
+
35
+ # Homological Observability
36
+
37
+ A Python toolkit for studying which accumulated cycle histories can be
38
+ recovered from discrete observations of a known finite-state Markov jump
39
+ network. Given a network and optional integer counters, it computes hidden
40
+ cycle directions and their asymptotic sampling requirements. With transition
41
+ rates, it also constructs the critical-limit experiment.
42
+
43
+ The toolkit provides exact integer-lattice calculations, a command-line
44
+ interface, a Python API, and reproducible finite-cycle examples.
45
+
46
+ ## Installation
47
+
48
+ Use Python 3.11–3.13. In an activated virtual environment, run:
49
+
50
+ ```bash
51
+ python -m pip install homological-observability
52
+ homological-observability example wedge-c3-c5
53
+ ```
54
+
55
+ The example joins a triangle and a five-cycle at one state and compares the
56
+ cycle information retained by a weighted counter. Models and reference data
57
+ are included in the installed package; no source checkout is needed.
58
+
59
+ ## Python API
60
+
61
+ ```python
62
+ import homological_observability as ho
63
+
64
+ model = ho.load_example("wedge-c3-c5")
65
+ result = ho.analyze_model(model)
66
+ print(ho.render_text(result))
67
+ ```
68
+
69
+ Use `ho.load_model("triangle.json")` to read your own model and
70
+ `ho.analysis_to_dict(result)` to obtain a structured result. The
71
+ [model guide](https://github.com/yeruciwenrou-dotcom/homological-observability/blob/main/docs/MODEL_GUIDE.md)
72
+ describes inputs and resource limits.
73
+
74
+ ## Reproduce the reference calculations
75
+
76
+ ```bash
77
+ homological-observability reproduce --check --output-dir generated_results
78
+ ```
79
+
80
+ This command compares fresh calculations with the packaged reference data
81
+ and writes a report and figure to `generated_results`. For a source checkout
82
+ with pinned dependencies and the reader-side test suite, follow the
83
+ [reproduction guide](https://github.com/yeruciwenrou-dotcom/homological-observability#reproduce-the-paper-evidence).
84
+
85
+ ## Scope and documentation
86
+
87
+ The graph must be finite, connected, undirected, and simple. Critical
88
+ experiments require known positive transition rates in both directions on
89
+ each edge. Lattice operations and finite catalogues are exact when the
90
+ calculation completes; sampling requirements and phase labels describe
91
+ long-time asymptotic limits. They do not supply a finite-run error guarantee.
92
+
93
+ - [Overview and worked examples](https://github.com/yeruciwenrou-dotcom/homological-observability#readme)
94
+ - [Scientific assumptions](https://github.com/yeruciwenrou-dotcom/homological-observability/blob/main/docs/SCIENTIFIC_SCOPE.md)
95
+ - [Results and exit codes](https://github.com/yeruciwenrou-dotcom/homological-observability/blob/main/docs/OUTPUT_CONTRACT.md)
96
+ - [Changes by version](https://github.com/yeruciwenrou-dotcom/homological-observability/blob/main/CHANGELOG.md)
97
+ - [Report an issue](https://github.com/yeruciwenrou-dotcom/homological-observability/issues)
98
+
99
+ ## Companion paper and citation
100
+
101
+ The software accompanies *Stochastic Histories at Finite Temporal Resolution:
102
+ Homological Observability and Information Phase Diagrams in Markov Jump
103
+ Processes*.
104
+
105
+ > **Companion paper:** The manuscript is not yet publicly available. An arXiv
106
+ > link will be added when the preprint is posted.
107
+
108
+ Cite the paper for theoretical results and the software for computations,
109
+ including the software version. Citation metadata is available in
110
+ [CITATION.cff](https://github.com/yeruciwenrou-dotcom/homological-observability/blob/main/CITATION.cff).
111
+
112
+ Authors: HongZheng Liu, YiNuo Tian, Zhiyue Wu, and Jianqun Cheng.
113
+
114
+ The software is distributed under the MIT License. The manuscript has its
115
+ own copyright and licensing status.