Skip to content

Commit e217576

Browse files
release: v1.5.1 — PyPI readme hotfix + unshipped-import cleanup
Patch release. No code / behaviour changes vs. v1.5.0. - Fix PyPI project-page broken image: README's interactive-plot-editor screenshot was referenced by relative path (./image-1.png), which GitHub resolves but PyPI cannot, so the PyPI v1.5.0 page showed a broken-image icon. Both README.md and README_CN.md now use the absolute raw.githubusercontent.com URL so both renderers work. - Remove premature v1.6 imports from src/statspai/__init__.py that were introduced by commit 8155ada but whose implementations had not yet landed: llm_dag_constrained / llm_dag_validate / LLMConstrainedDAGResult / DAGValidationResult, paper / PaperDraft, and mr_lap / mr_clust / grapple / mr_cml. These broke `import statspai` on any fresh clone of main between v1.5.0 and v1.5.1; the shipped PyPI v1.5.0 wheel was unaffected. They will return in v1.6 alongside their implementations. - README visual-weight fix: v1.5.0 section now carries a "v1.5 Highlights" table paralleling the v1.4 Highlights table so the current release is the README's visual subject. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent ef5358d commit e217576

3 files changed

Lines changed: 57 additions & 14 deletions

File tree

CHANGELOG.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,60 @@
22

33
All notable changes to StatsPAI will be documented in this file.
44

5+
## [1.5.1] — 2026-04-21 — PyPI readme hotfix + unshipped-import cleanup
6+
7+
Patch release. No new features, no behaviour changes to any shipped
8+
estimator, no schema changes. Every public signature present in v1.5.0
9+
is byte-for-byte identical in v1.5.1.
10+
11+
### Fixed
12+
13+
- **PyPI project-page broken image.** The README's `interactive plot
14+
editor` screenshot was referenced via a relative path
15+
(`./image-1.png`), which GitHub resolves correctly but PyPI cannot.
16+
The PyPI v1.5.0 page therefore showed a broken-image icon. Both
17+
`README.md` and `README_CN.md` now use the absolute
18+
`https://raw.githubusercontent.com/brycewang-stanford/StatsPAI/main/image-1.png`
19+
URL so both renderers work.
20+
- **`import statspai` was broken on `main` between v1.5.0 and this
21+
release.** Commit `8155ada` ("feat(agent): unified exception
22+
taxonomy + per-function agent cards") pre-wired four in-progress
23+
v1.6 symbols into the top-level package —
24+
`llm_dag_constrained`, `llm_dag_validate`,
25+
`LLMConstrainedDAGResult`, `DAGValidationResult` (closed-loop LLM-DAG),
26+
`paper`, `PaperDraft` (data → publication-draft pipeline), and the
27+
four MR-frontier estimators `mr_lap`, `mr_clust`, `grapple`,
28+
`mr_cml` — before their implementations landed in the corresponding
29+
sub-packages. Any fresh `git clone` + `pip install -e .` would
30+
raise `ImportError: cannot import name 'llm_dag_constrained' from
31+
'statspai.causal_llm'`. These premature imports are removed in
32+
v1.5.1; they will be re-introduced in v1.6 alongside their
33+
implementations. **This bug did not affect the PyPI v1.5.0 wheel,
34+
which pre-dates `8155ada` and has a clean import graph.**
35+
36+
### Changed — README visual ordering
37+
38+
- **v1.5 Highlights table.** v1.5.0's "NEW" section was a short
39+
paragraph plus bullets, which was visually outweighed by the full
40+
`v1.4 Highlights` table immediately below it. v1.5.0's bullets are
41+
now promoted into a parallel `v1.5 Highlights` table (family guides,
42+
unified dispatchers, two ⚠️ correctness fixes, one ⚠️ breaking
43+
change, registry coverage) so the current release is the README's
44+
visual subject instead of being crowded out by the previous-version
45+
section. `README_CN.md` updated in lockstep.
46+
47+
### Upgrade notes
48+
49+
If you installed v1.5.0 from PyPI: there is no functional reason to
50+
upgrade to v1.5.1. The PyPI v1.5.0 wheel is not affected by the
51+
`import statspai` bug described above, which only existed on the
52+
`main` branch between v1.5.0 and v1.5.1.
53+
54+
If you installed from source off `main`: upgrading (or pulling v1.5.1)
55+
fixes the `ImportError`.
56+
57+
---
58+
559
## [1.5.0] — 2026-04-21 — Interference / Conformal / Mendelian family consolidation
660

761
Minor release. Three concurrent improvements to the interference,

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "StatsPAI"
7-
version = "1.5.0"
7+
version = "1.5.1"
88
description = "The Agent-Native Causal Inference & Econometrics Toolkit for Python"
99
readme = "README.md"
1010
license = {text = "MIT"}

src/statspai/__init__.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
>>> sp.outreg2(result, filename="results.xlsx")
2323
"""
2424

25-
__version__ = "1.5.0"
25+
__version__ = "1.5.1"
2626
__author__ = "Biaoyue Wang"
2727
__email__ = "brycew6m@stanford.edu"
2828

@@ -281,9 +281,6 @@
281281
llm_unobserved_confounders, UnobservedConfounderProposal,
282282
llm_sensitivity_priors, SensitivityPriorProposal,
283283
causal_mas, CausalMASResult,
284-
# P1-A: closed-loop LLM-DAG (constrained discovery + CI validation)
285-
llm_dag_constrained, llm_dag_validate,
286-
LLMConstrainedDAGResult, DAGValidationResult,
287284
)
288285

289286
# === Causal RL (Causal-DQN, benchmarks, offline-safe) ===
@@ -396,7 +393,7 @@
396393
from . import datasets
397394

398395
# === End-to-end workflow orchestrator ===
399-
from .workflow import causal, CausalWorkflow, paper, PaperDraft
396+
from .workflow import causal, CausalWorkflow
400397

401398
# === LLM agent tool-definition surface ===
402399
from . import agent
@@ -500,9 +497,6 @@
500497
ModeBasedResult, FStatisticResult,
501498
mr_multivariable, mr_mediation, mr_bma,
502499
MVMRResult, MediationMRResult, MRBMAResult,
503-
# v1.6 frontier: MR-Lap / MR-Clust / GRAPPLE / MR-cML
504-
mr_lap, mr_clust, grapple, mr_cml,
505-
MRLapResult, MRClustResult, GrappleResult, MRcMLResult,
506500
# v1.5 unified dispatcher (replaces the `sp.mr` module alias)
507501
mr, mr_available_methods,
508502
)
@@ -1326,8 +1320,6 @@
13261320
"llm_dag_propose", "LLMDAGProposal",
13271321
"llm_unobserved_confounders", "UnobservedConfounderProposal",
13281322
"llm_sensitivity_priors", "SensitivityPriorProposal",
1329-
"llm_dag_constrained", "llm_dag_validate",
1330-
"LLMConstrainedDAGResult", "DAGValidationResult",
13311323
# Causal RL
13321324
"causal_dqn", "CausalDQNResult",
13331325
"causal_rl_benchmark", "BanditBenchmarkResult",
@@ -1343,9 +1335,6 @@
13431335
# Bunching frontier
13441336
"general_bunching", "GeneralBunchingResult",
13451337
"kink_unified", "KinkUnifiedResult",
1346-
# v1.6 MR frontier: sample-overlap / clusters / profile-LL / cML
1347-
"mr_lap", "mr_clust", "grapple", "mr_cml",
1348-
"MRLapResult", "MRClustResult", "GrappleResult", "MRcMLResult",
13491338
# v1.5 unified family dispatchers
13501339
"mr", "mr_available_methods",
13511340
"conformal", "conformal_available_kinds",

0 commit comments

Comments
 (0)