views-frames 1.1.0__tar.gz → 1.1.1__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.
- {views_frames-1.1.0 → views_frames-1.1.1}/PKG-INFO +18 -3
- {views_frames-1.1.0 → views_frames-1.1.1}/README.md +17 -2
- {views_frames-1.1.0 → views_frames-1.1.1}/pyproject.toml +1 -1
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/tower.py +5 -4
- {views_frames-1.1.0 → views_frames-1.1.1}/.gitignore +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/LICENSE +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/__init__.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/_typing.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/_validation.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/conformance/__init__.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/feature_frame.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/index.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/io/__init__.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/io/arrow.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/io/npz.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/metadata.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/prediction_frame.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/protocols.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/py.typed +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/spatial_level.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames/target_frame.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/__init__.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/_common.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/aggregate.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/bimodality.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/collapse.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/conformance.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/interval.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/point.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/py.typed +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/summarize_tower.py +0 -0
- {views_frames-1.1.0 → views_frames-1.1.1}/src/views_frames_summarize/tower_point.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: views-frames
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.1
|
|
4
4
|
Summary: The VIEWS platform data-contract layer: immutable array+identifier frames (numpy only, root of the dependency DAG).
|
|
5
5
|
Project-URL: Homepage, https://github.com/views-platform/views-frames
|
|
6
6
|
Project-URL: Repository, https://github.com/views-platform/views-frames
|
|
@@ -30,8 +30,8 @@ Description-Content-Type: text/markdown
|
|
|
30
30
|
> containers (`FeatureFrame`, `PredictionFrame`, and their anticipated siblings)
|
|
31
31
|
> that every other repo depends on and that depends on nothing internal.
|
|
32
32
|
>
|
|
33
|
-
> **Status:** **v1.1.
|
|
34
|
-
> is purely additive — the coherent posterior summary, ADR-019). This README is the design
|
|
33
|
+
> **Status:** **v1.1.1 — frozen API** (frozen since v1.0.0, ADR-018; the v1.1.0 surface
|
|
34
|
+
> is purely additive — the coherent posterior summary, ADR-019; v1.1.1 is a docs patch). This README is the design
|
|
35
35
|
> bible; the contract it specifies is realised in `src/views_frames/` (index, frames,
|
|
36
36
|
> io, conformance suite) plus the `src/views_frames_summarize/` sibling package
|
|
37
37
|
> (sample-axis summarization — `collapse`/MAP/HDI/quantiles, the coherent-tower estimators
|
|
@@ -95,6 +95,21 @@ Both are numpy-only. For the subtler cm↔pgm surface — a time-varying
|
|
|
95
95
|
`aggregate_distributions` (`HDI(sum) ≠ sum(HDI)`) — see
|
|
96
96
|
[`examples/cross_level.py`](examples/cross_level.py).
|
|
97
97
|
|
|
98
|
+
**Which estimator? (two coherent paths, v1.1.0).** Each frozen estimator has a
|
|
99
|
+
coherent-tower sibling (ADR-019): `map_estimate` ↔ `tower_point` (an unbinned
|
|
100
|
+
median-of-the-narrowest-floor point, free of `map_estimate`'s histogram tie-break bias),
|
|
101
|
+
and `hdi`/`quantiles` ↔ `hdi_tower(masses=…)` (HDIs nested **by construction** and
|
|
102
|
+
reproducible — a mass's interval is identical regardless of which others you request),
|
|
103
|
+
with `summarize_tower` returning all three in one pass. Use the **frozen** estimators for
|
|
104
|
+
parity with existing pipelines; use the **tower** path when you need coherent, reproducible
|
|
105
|
+
bands plus a matching point.
|
|
106
|
+
|
|
107
|
+
**Reading the `bimodality` flag.** It is a *deliberately conservative* heuristic, **not** a
|
|
108
|
+
formal multimodality test — tuned for **zero false positives** at the cost of recall on
|
|
109
|
+
overlapping / unequal mixtures. A `1` means "clearly-separated modes detected"; a `0` means
|
|
110
|
+
**"no clear bimodality detected," not "proven unimodal."** (Full caveat: the `bimodality`
|
|
111
|
+
module docstring; register C-34.)
|
|
112
|
+
|
|
98
113
|
---
|
|
99
114
|
|
|
100
115
|
## 1. Why this package exists (the problems it kills)
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
> containers (`FeatureFrame`, `PredictionFrame`, and their anticipated siblings)
|
|
5
5
|
> that every other repo depends on and that depends on nothing internal.
|
|
6
6
|
>
|
|
7
|
-
> **Status:** **v1.1.
|
|
8
|
-
> is purely additive — the coherent posterior summary, ADR-019). This README is the design
|
|
7
|
+
> **Status:** **v1.1.1 — frozen API** (frozen since v1.0.0, ADR-018; the v1.1.0 surface
|
|
8
|
+
> is purely additive — the coherent posterior summary, ADR-019; v1.1.1 is a docs patch). This README is the design
|
|
9
9
|
> bible; the contract it specifies is realised in `src/views_frames/` (index, frames,
|
|
10
10
|
> io, conformance suite) plus the `src/views_frames_summarize/` sibling package
|
|
11
11
|
> (sample-axis summarization — `collapse`/MAP/HDI/quantiles, the coherent-tower estimators
|
|
@@ -69,6 +69,21 @@ Both are numpy-only. For the subtler cm↔pgm surface — a time-varying
|
|
|
69
69
|
`aggregate_distributions` (`HDI(sum) ≠ sum(HDI)`) — see
|
|
70
70
|
[`examples/cross_level.py`](examples/cross_level.py).
|
|
71
71
|
|
|
72
|
+
**Which estimator? (two coherent paths, v1.1.0).** Each frozen estimator has a
|
|
73
|
+
coherent-tower sibling (ADR-019): `map_estimate` ↔ `tower_point` (an unbinned
|
|
74
|
+
median-of-the-narrowest-floor point, free of `map_estimate`'s histogram tie-break bias),
|
|
75
|
+
and `hdi`/`quantiles` ↔ `hdi_tower(masses=…)` (HDIs nested **by construction** and
|
|
76
|
+
reproducible — a mass's interval is identical regardless of which others you request),
|
|
77
|
+
with `summarize_tower` returning all three in one pass. Use the **frozen** estimators for
|
|
78
|
+
parity with existing pipelines; use the **tower** path when you need coherent, reproducible
|
|
79
|
+
bands plus a matching point.
|
|
80
|
+
|
|
81
|
+
**Reading the `bimodality` flag.** It is a *deliberately conservative* heuristic, **not** a
|
|
82
|
+
formal multimodality test — tuned for **zero false positives** at the cost of recall on
|
|
83
|
+
overlapping / unequal mixtures. A `1` means "clearly-separated modes detected"; a `0` means
|
|
84
|
+
**"no clear bimodality detected," not "proven unimodal."** (Full caveat: the `bimodality`
|
|
85
|
+
module docstring; register C-34.)
|
|
86
|
+
|
|
72
87
|
---
|
|
73
88
|
|
|
74
89
|
## 1. Why this package exists (the problems it kills)
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "views-frames"
|
|
7
|
-
version = "1.1.
|
|
7
|
+
version = "1.1.1"
|
|
8
8
|
description = "The VIEWS platform data-contract layer: immutable array+identifier frames (numpy only, root of the dependency DAG)."
|
|
9
9
|
authors = [
|
|
10
10
|
{ name = "Simon Polichinel von der Maase", email = "simmaa@prio.org" },
|
|
@@ -53,10 +53,11 @@ def _ks(sample_count: int) -> NDArray[np.intp]:
|
|
|
53
53
|
def _pin(masses: Sequence[float]) -> NDArray[np.intp]:
|
|
54
54
|
"""Index of the nearest canonical floor for each requested mass.
|
|
55
55
|
|
|
56
|
-
Deterministic
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
Deterministic: ``argmin`` of the distance, breaking ties on the lowest index. A
|
|
57
|
+
mass at the midpoint between two floors (e.g. ``0.075`` between ``0.05`` and
|
|
58
|
+
``0.10``) therefore pins **down** to the lower floor — unambiguous and
|
|
59
|
+
reproducible. Fails loud (ADR-008) on a mass outside ``(0, 1)`` rather than silently
|
|
60
|
+
pinning a nonsense value to the nearest floor and returning a plausible interval.
|
|
60
61
|
"""
|
|
61
62
|
m = np.asarray(masses, dtype=np.float64)
|
|
62
63
|
if m.size == 0 or not np.all((m > 0.0) & (m < 1.0)):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|