Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
271906e
Add Python 3.15
remlapmot Oct 1, 2026
9f48c77
Test on Python 3.15
remlapmot Oct 1, 2026
f876f99
Bump version
remlapmot Oct 11, 2026
a101476
Auto-format code
github-actions[bot] Oct 11, 2026
6bfe739
Exclude jax on 3.15 - no wheels yet
remlapmot Oct 11, 2026
d12428a
Merge branch 'devel-2026-10-01' of https://github.com/CausalInference…
remlapmot Oct 11, 2026
f267f8c
Stop converting numeric fixed covariates to categories
remlapmot Oct 12, 2026
5e0dc02
Match the baseline and squared indicators only as name suffixes
remlapmot Oct 12, 2026
2fb6132
Reorder expected coefficients now that numeric fixed covariates are n…
remlapmot Oct 12, 2026
3b8f927
Keep the subgroup column in the expansion
remlapmot Oct 12, 2026
9ee4099
Leave each subject's first row out of the pre-expansion weight models
remlapmot Oct 12, 2026
a14c197
Make treatment weights independent of the order of treatment_level
remlapmot Oct 12, 2026
07d7c30
Make the expansion read excused_colnames the same way as the weight m…
remlapmot Oct 12, 2026
8f8ee11
Fix the excused-censoring weights for every arm and treatment_level o…
remlapmot Oct 12, 2026
0b56a75
Pin the multinomial weights rather than a divergent outcome fit
remlapmot Oct 12, 2026
deaf79a
Match subgroup bootstrap results by subgroup value, not position
remlapmot Oct 12, 2026
0ab8168
Count only trial-periods that can reach the window as eligible for en…
remlapmot Oct 12, 2026
1c189fb
Give an informative error naming any model term that is undefined for…
remlapmot Oct 12, 2026
c57b8d4
Bake the spline centring constraint and check transform state before …
remlapmot Oct 12, 2026
5eadb02
Keep followup interactions working with followup_spline
remlapmot Oct 12, 2026
4e51500
Silence numpy warnings in the undefined-term check
remlapmot Oct 13, 2026
fce4b65
Collect and report subgroup outcome models by subgroup
remlapmot Oct 13, 2026
399c6cb
Update end_of_followup.md
remlapmot Oct 13, 2026
d326bed
Use the probability of remaining under follow-up in the LTFU censorin…
remlapmot Oct 13, 2026
1b65ff3
Label the report's plot by what it shows, not as Kaplan-Meier curves
remlapmot Oct 13, 2026
d36057a
Regenerate the advanced-analysis vignettes for clearer, sensible output
remlapmot Oct 13, 2026
8e18e66
Keep the supplied weight bounds when truncating at percentiles
remlapmot Oct 13, 2026
36d5129
Install OpenMP, xsimd and jemalloc for the Python 3.15 CI job
remlapmot Oct 13, 2026
45e4486
Override lifelines' pandas cap in the Python 3.15 CI job
remlapmot Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .github/workflows/python-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
fail-fast: false
matrix:
os: [macos-26]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14", "3.15"]

steps:
- uses: actions/checkout@v7
Expand All @@ -28,6 +28,19 @@ jobs:
- name: Set up Python ${{ matrix.python-version }}
run: uv python install ${{ matrix.python-version }}

# tabmat and glum have no Python 3.15 wheels yet, so they build from source.
# lifelines caps pandas below 3, and pandas 2.x is broken on 3.15, so override
# the cap and stop uv run from re-syncing it back.
- name: Prepare Python 3.15 build
if: matrix.python-version == '3.15'
run: |
brew install libomp xsimd jemalloc
echo "CPPFLAGS=-I$(brew --prefix libomp)/include -I$(brew --prefix xsimd)/include -I$(brew --prefix jemalloc)/include" >> "$GITHUB_ENV"
echo "LDFLAGS=-L$(brew --prefix libomp)/lib -L$(brew --prefix jemalloc)/lib" >> "$GITHUB_ENV"
echo "pandas>=3" > "$RUNNER_TEMP/uv-overrides.txt"
echo "UV_OVERRIDE=$RUNNER_TEMP/uv-overrides.txt" >> "$GITHUB_ENV"
echo "UV_NO_SYNC=1" >> "$GITHUB_ENV"

- name: Install dependencies
run: |
uv venv --python ${{ matrix.python-version }}
Expand Down
2 changes: 1 addition & 1 deletion CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ authors:
affiliation: "CAUSALab, Department of Epidemiology, Harvard T.H. Chan School of Public Health; Department of Biostatistics, Harvard T.H. Chan School of Public Health"
orcid: https://orcid.org/0000-0003-1619-8456
title: "pySEQTarget: Sequential Target Trial Emulation"
version: 0.14.2
version: 0.14.3
url: https://pyseqtarget.readthedocs.io/
repository-code: https://github.com/CausalInference/pySEQTarget
repository-artifact: https://pypi.org/project/pySEQTarget/
Binary file modified docs/vignettes/SEQuential_results.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 8 additions & 8 deletions docs/vignettes/end_of_followup.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ model.eof_data.select(["A", "Proportion", "SE", "95% LCI", "95% UCI",
┌─────┬────────────┬──────────┬──────────┬──────────┬────────────┬──────────┐
│ A ┆ Proportion ┆ SE ┆ 95% LCI ┆ 95% UCI ┆ % Censored ┆ Subjects │
╞═════╪════════════╪══════════╪══════════╪══════════╪════════════╪══════════╡
│ 0 ┆ 0.019865 ┆ 0.003014 ┆ 0.013956 ┆ 0.025773 ┆ 19.687712 ┆ 266 │
│ 1 ┆ 0.027256 ┆ 0.002342 ┆ 0.022666 ┆ 0.031847 ┆ 28.46412 ┆ 236 │
│ 0 ┆ 0.019865 ┆ 0.003014 ┆ 0.013956 ┆ 0.025773 ┆ 17.098809 ┆ 266 │
│ 1 ┆ 0.027256 ┆ 0.002342 ┆ 0.022666 ┆ 0.031847 ┆ 24.81102 ┆ 236 │
└─────┴────────────┴──────────┴──────────┴──────────┴────────────┴──────────┘
```

Expand Down Expand Up @@ -108,8 +108,8 @@ windowed.eof_data.select(["A", "Proportion", "95% LCI", "95% UCI",
│ A ┆ Proportion ┆ 95% LCI ┆ 95% UCI ┆ Trial-period ┆ Trial-period ┆ Trial-period ┆ % Censored │
│ ┆ ┆ ┆ ┆ s (Eligible) ┆ s (Analysed) ┆ s (Censored) ┆ │
╞═════╪════════════╪══════════╪══════════╪══════════════╪══════════════╪══════════════╪════════════╡
│ 0 ┆ 0.075704 ┆ 0.058602 ┆ 0.092805 ┆ 2946 ┆ 2523 ┆ 423 ┆ 14.358452 │
│ 1 ┆ 0.102475 ┆ 0.0864 ┆ 0.11855 ┆ 6257 ┆ 4889 ┆ 1368 ┆ 21.863513 │
│ 0 ┆ 0.075704 ┆ 0.058602 ┆ 0.092805 ┆ 2894 ┆ 2523 ┆ 371 ┆ 12.819627 │
│ 1 ┆ 0.102475 ┆ 0.0864 ┆ 0.11855 ┆ 6073 ┆ 4889 ┆ 1184 ┆ 19.49613 │
└─────┴────────────┴──────────┴──────────┴──────────────┴──────────────┴──────────────┴────────────┘
```

Expand Down Expand Up @@ -150,8 +150,8 @@ windowed.diagnostics["nonunique_eof"]
│ tx_init_bas ┆ Eligible ┆ At k ┆ In window ┆ Excluded (outside ┆ Excluded (no measurement) │
│ ┆ ┆ ┆ ┆ window) ┆ │
╞═════════════╪══════════╪══════╪═══════════╪═══════════════════╪═══════════════════════════╡
│ 0 ┆ 2946 ┆ 2366 ┆ 157 ┆ 423 ┆ 0 │
│ 1 ┆ 6257 ┆ 4476 ┆ 413 ┆ 1368 ┆ 0 │
│ 0 ┆ 2894 ┆ 2366 ┆ 157 ┆ 371 ┆ 0 │
│ 1 ┆ 6073 ┆ 4476 ┆ 413 ┆ 1184 ┆ 0 │
└─────────────┴──────────┴──────┴───────────┴───────────────────┴───────────────────────────┘
```

Expand Down Expand Up @@ -272,8 +272,8 @@ perprotocol.eof_data.select(["A", "Proportion", "95% LCI", "95% UCI",
┌─────┬────────────┬──────────┬──────────┬────────────┬──────────┐
│ A ┆ Proportion ┆ 95% LCI ┆ 95% UCI ┆ % Censored ┆ Subjects │
╞═════╪════════════╪══════════╪══════════╪════════════╪══════════╡
│ 0 ┆ 0.045069 ┆ 0.011689 ┆ 0.07845 ┆ 82.959946 ┆ 86 │
│ 1 ┆ 0.088733 ┆ 0.065572 ┆ 0.111894 ┆ 49.592456 ┆ 211 │
│ 0 ┆ 0.043282 ┆ 0.012381 ┆ 0.074182 ┆ 82.653766 ┆ 86 │
│ 1 ┆ 0.088984 ┆ 0.065753 ┆ 0.112215 ┆ 48.065207 ┆ 211 │
└─────┴────────────┴──────────┴──────────┴────────────┴──────────┘
```

Expand Down
Loading
Loading