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.
- homological_observability-1.1.0/CHANGELOG.md +105 -0
- homological_observability-1.1.0/CITATION.cff +30 -0
- homological_observability-1.1.0/CONTRIBUTING.md +64 -0
- homological_observability-1.1.0/LICENSE +21 -0
- homological_observability-1.1.0/MANIFEST.in +16 -0
- homological_observability-1.1.0/PAPER_MAP.md +118 -0
- homological_observability-1.1.0/PKG-INFO +115 -0
- homological_observability-1.1.0/README.md +368 -0
- homological_observability-1.1.0/critical_kernel_checks.py +22 -0
- homological_observability-1.1.0/docs/CONVENTIONS.md +299 -0
- homological_observability-1.1.0/docs/CRITICAL_EXPERIMENT.md +243 -0
- homological_observability-1.1.0/docs/END_TO_END_EXAMPLE.md +263 -0
- homological_observability-1.1.0/docs/MODEL_GUIDE.md +335 -0
- homological_observability-1.1.0/docs/NUMERICS.md +142 -0
- homological_observability-1.1.0/docs/OUTPUT_CONTRACT.md +373 -0
- homological_observability-1.1.0/docs/PYPI.md +81 -0
- homological_observability-1.1.0/docs/SCIENTIFIC_SCOPE.md +230 -0
- homological_observability-1.1.0/docs/snapshot_ambiguity.svg +31 -0
- homological_observability-1.1.0/docs/wedge_c3_c5.svg +51 -0
- homological_observability-1.1.0/examples/biased_c4_critical.json +41 -0
- homological_observability-1.1.0/examples/biased_c4_critical_result.json +748 -0
- homological_observability-1.1.0/examples/wedge_c3_c5.json +29 -0
- homological_observability-1.1.0/examples/wedge_c3_c5_result.json +496 -0
- homological_observability-1.1.0/examples/wedge_c3_c5_result.md +24 -0
- homological_observability-1.1.0/explore_cycles.py +67 -0
- homological_observability-1.1.0/pyproject.toml +89 -0
- homological_observability-1.1.0/quickstart.py +157 -0
- homological_observability-1.1.0/reproduce_all.py +28 -0
- homological_observability-1.1.0/requirements.txt +24 -0
- homological_observability-1.1.0/results/REPORT.md +70 -0
- homological_observability-1.1.0/results/companion_summary.png +0 -0
- homological_observability-1.1.0/results/companion_summary.svg +2663 -0
- homological_observability-1.1.0/results/critical_kernel_results.csv +6 -0
- homological_observability-1.1.0/results/selected_appendix_checks.csv +29 -0
- homological_observability-1.1.0/selected_appendix_checks.py +26 -0
- homological_observability-1.1.0/setup.cfg +4 -0
- homological_observability-1.1.0/src/homological_observability/__init__.py +115 -0
- homological_observability-1.1.0/src/homological_observability/_count_tv.py +97 -0
- homological_observability-1.1.0/src/homological_observability/_critical_catalogue.py +803 -0
- homological_observability-1.1.0/src/homological_observability/_integer_io.py +62 -0
- homological_observability-1.1.0/src/homological_observability/analysis.py +183 -0
- homological_observability-1.1.0/src/homological_observability/cli.py +222 -0
- homological_observability-1.1.0/src/homological_observability/critical.py +92 -0
- homological_observability-1.1.0/src/homological_observability/critical_experiment.py +1455 -0
- homological_observability-1.1.0/src/homological_observability/cycles.py +173 -0
- homological_observability-1.1.0/src/homological_observability/data/examples/wedge_c3_c5.json +29 -0
- homological_observability-1.1.0/src/homological_observability/data/reference/critical_kernel_results.csv +6 -0
- homological_observability-1.1.0/src/homological_observability/data/reference/selected_appendix_checks.csv +29 -0
- homological_observability-1.1.0/src/homological_observability/examples.py +92 -0
- homological_observability-1.1.0/src/homological_observability/filtration.py +274 -0
- homological_observability-1.1.0/src/homological_observability/homology.py +178 -0
- homological_observability-1.1.0/src/homological_observability/integer_lattice.py +181 -0
- homological_observability-1.1.0/src/homological_observability/lattice.py +37 -0
- homological_observability-1.1.0/src/homological_observability/model.py +395 -0
- homological_observability-1.1.0/src/homological_observability/phase.py +134 -0
- homological_observability-1.1.0/src/homological_observability/reference_appendix.py +206 -0
- homological_observability-1.1.0/src/homological_observability/reference_critical.py +176 -0
- homological_observability-1.1.0/src/homological_observability/reporting.py +226 -0
- homological_observability-1.1.0/src/homological_observability/reproduction.py +244 -0
- homological_observability-1.1.0/src/homological_observability/schema.py +57 -0
- homological_observability-1.1.0/src/homological_observability/schemas/analysis.schema.json +477 -0
- homological_observability-1.1.0/src/homological_observability/schemas/critical-experiment.schema.json +551 -0
- homological_observability-1.1.0/src/homological_observability/schemas/critical-model.schema.json +120 -0
- homological_observability-1.1.0/src/homological_observability/schemas/error.schema.json +14 -0
- homological_observability-1.1.0/src/homological_observability/schemas/examples.schema.json +29 -0
- homological_observability-1.1.0/src/homological_observability/schemas/model.schema.json +88 -0
- homological_observability-1.1.0/src/homological_observability/schemas/reproduction.schema.json +95 -0
- homological_observability-1.1.0/src/homological_observability/serialization.py +510 -0
- homological_observability-1.1.0/src/homological_observability/version.py +3 -0
- homological_observability-1.1.0/src/homological_observability.egg-info/PKG-INFO +115 -0
- homological_observability-1.1.0/src/homological_observability.egg-info/SOURCES.txt +92 -0
- homological_observability-1.1.0/src/homological_observability.egg-info/dependency_links.txt +1 -0
- homological_observability-1.1.0/src/homological_observability.egg-info/entry_points.txt +2 -0
- homological_observability-1.1.0/src/homological_observability.egg-info/requires.txt +12 -0
- homological_observability-1.1.0/src/homological_observability.egg-info/top_level.txt +1 -0
- homological_observability-1.1.0/tests/__init__.py +1 -0
- homological_observability-1.1.0/tests/test_critical_catalogue.py +643 -0
- homological_observability-1.1.0/tests/test_critical_product_contract.py +483 -0
- homological_observability-1.1.0/tests/test_cycles.py +145 -0
- homological_observability-1.1.0/tests/test_documentation.py +339 -0
- homological_observability-1.1.0/tests/test_extreme_inputs.py +315 -0
- homological_observability-1.1.0/tests/test_filtration.py +375 -0
- homological_observability-1.1.0/tests/test_integer_lattice.py +81 -0
- homological_observability-1.1.0/tests/test_model_io.py +76 -0
- homological_observability-1.1.0/tests/test_numerical_boundaries.py +139 -0
- homological_observability-1.1.0/tests/test_output_boundaries.py +259 -0
- homological_observability-1.1.0/tests/test_phase.py +176 -0
- homological_observability-1.1.0/tests/test_product_contract.py +308 -0
- homological_observability-1.1.0/tests/test_reproduction_status.py +84 -0
- homological_observability-1.1.0/tests/test_scientific_checks.py +265 -0
- homological_observability-1.1.0/tests/validate_distribution.py +231 -0
- homological_observability-1.1.0/tests/validate_graph_atlas.py +114 -0
- homological_observability-1.1.0/tests/validate_schema.py +153 -0
- 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.
|