Skip to content

Release v0.5.0: Stabilize JAX/Diffrax workflows and merge global into main#71

Merged
bibymaths merged 46 commits into
mainfrom
global
Jun 18, 2026
Merged

Release v0.5.0: Stabilize JAX/Diffrax workflows and merge global into main#71
bibymaths merged 46 commits into
mainfrom
global

Conversation

@bibymaths

Copy link
Copy Markdown
Owner

PR Summary: Merge global into main and prepare v0.5.0 release

This PR merges the current global development branch into main and prepares the repository for the v0.5.0 release.

The release consolidates the major PhosKinTime refactor around the JAX/JAXopt/Diffrax-based modelling stack, improves multimodal input handling, stabilizes networkmodel and protwise, standardizes dashboard-ready outputs, and updates documentation, tests, release workflows, and future extension planning.

Major changes

NetworkModel and global ODE workflow

  • Migrated the networkmodel scalar optimization path to the JAX/Diffrax/JAXopt stack.
  • Improved multimodal support for protein, phospho, and mRNA data.
  • Added support for missing-data scenarios, including protein-only, phospho-only, and missing RNA modalities.
  • Fixed phosphosite objective mapping, state offsets, parameter packing, and prior handling in the raw theta objective.
  • Restored and stabilized JAX combinatorial phosphorylation transitions.
  • Added exact validation for networkmodel slice/bounds layouts.
  • Improved posterior/profile-likelihood/multistart inference wiring through the networkmodel configuration and runner.
  • Added posterior sampling diagnostics, progress logging, and parameter-name support for inference outputs.

ProtWise local ODE models

  • Centralized local ProtWise model solving through a Diffrax-backed solver.
  • Canonicalized randmod subset ordering and masks.
  • Refactored local parameter estimation to operate in physical parameter space.
  • Removed unsafe/silent bound resizing and replaced it with deterministic bounds expansion based on parameter-name order.
  • Added parameter-count validation between optimizer vectors, ODE RHS functions, and model-specific parameter layouts.
  • Added optimizer diagnostics to detect flat fits and lower-bound collapse.
  • Added a synthetic ProtWise optimization sanity example.
  • Added unit tests for ProtWise parameterization, bounds expansion, model dispatch, and randmod aggregation.

Dashboard and frontend

  • Standardized the dashboard-ready output contract.
  • Added result browsing, upload/configuration UI, and workflow-specific dashboard panels.
  • Added dashboard CLI launcher support.
  • Improved dashboard discovery of reports and child runs.
  • Restricted dashboard config inputs to TOML for safer handling.
  • Added user, developer, and troubleshooting documentation for the dashboard.
  • Fixed advanced analysis dashboard command handling.
  • Added legacy compatibility aliases for older result naming.

Performance and memory safety

  • Made the combinatorial model memory safe.
  • Fixed combinatorial S-rate export cache shape.
  • Reduced combinatorial model state-phase memory pressure from explosive allocation to a streaming/vectorized implementation.
  • Fixed the forward phosphosite ODE panel.
  • Improved posterior density plotting and high-resolution figure output.
  • Added caching and RHS improvements for model ODE solving.

Configuration, imports, and runtime safety

  • Deferred ODE input validation until ProtWise runtime.
  • Made imports safe with empty or minimal config.toml.
  • Made empty output paths and missing workflow-specific inputs safe during generic imports and test collection.
  • Cleaned legacy/dead configuration paths.
  • Improved custom config handling for both NetworkModel and ProtWise.
  • Removed dead SciPy/Pymoo custom and legacy odeint code paths where no longer needed.
  • Removed unused/dead scripts and obsolete PyPI README files.

Documentation, notebooks, and release materials

  • Added multimodal input audit documentation.
  • Added JAXopt/Diffrax migration audit documentation.
  • Restored and updated current NetworkModel documentation.
  • Added executable educational notebooks for KinOpt, TFOpt, ProtWise, and NetworkModel.
  • Added notebook readiness tests.
  • Updated README with workflow figure, coverage badge, release information, and future extension planning.
  • Added PhosKinTime extension planning for future directions.
  • Added project presentation material using sample results.
  • Updated changelog and release documentation for v0.5.0.

Repository maintenance

  • Added community, governance, citation, and repository-maintenance files.
  • Added CODEOWNERS metadata.
  • Added git-cliff changelog tooling and Pixi changelog tasks.
  • Removed Poetry lockfile and decoupled dependency management from Poetry.
  • Updated Pixi configuration and release workflow for GitHub/Zenodo release flow instead of PyPI publication.
  • Added/updated CI dependencies including SALib and coverage tooling.

Testing

The following areas were tested or stabilized during this release cycle:

  • NetworkModel distributive workflow.
  • NetworkModel posterior sampling with MCMC/NUTS progress logging.
  • NetworkModel bounds and slice-layout validation.
  • ProtWise parameterization and model-specific solver dispatch.
  • Missing-data scenarios across protein, phospho, and RNA modalities.
  • Dashboard result discovery and workflow-specific panels.
  • Educational notebooks across modules.
  • Combinatorial model memory-safety behavior.
  • Coverage workflow using the Pixi dev environment.

Expected release validation command:

pixi install -e dev
pixi run -e dev coverage-all

Release notes

This PR prepares PhosKinTime v0.5.0.

This release should be treated as a major framework stabilization release rather than a small patch. The main focus is making the JAX/JAXopt/Diffrax-based workflow usable, testable, dashboard-ready, and compatible with realistic multimodal and missing-modality scenarios.

After merging, create and push the release tag:

git tag -a v0.5.0 -m "Release v0.5.0"
git push origin v0.5.0

The GitHub release can then be created from the tag, with Zenodo archiving enabled through the linked repository.

bibymaths and others added 30 commits June 10, 2026 13:07
…dy-output-contract

Standardize dashboard-ready output contract
…nd added imageio and gravis libs, module levelling for scripts
…amics-panel

Fix forward phosphosite ODE panel
bibymaths and others added 16 commits June 12, 2026 18:48
…es-for-combinatorial-model

Make combinatorial model memory safe
…no memory explosion in for loop, vectorized RHS for combinatorial model.

Example: 10 multi-starts
17 protein entities × 14 time points, 17 RNA entities × 9 time points, 36 phosphosites × 14 time points
238 protein rows, 153 RNA rows, 504 phospho rows | Total 895 observation rows
 Parameter vector size: 149
 Memory is use: 18 GB RAM on server
…th-empty-config.toml

Defer ODE input validation until ProtWise runtime
@bibymaths bibymaths self-assigned this Jun 18, 2026
@bibymaths bibymaths added documentation Improvements or additions to documentation enhancement New feature or request dependencies Pull requests that update a dependency file python Pull requests that update python code math Functional programming update biology Biological references for implementation model Changes to model, any model techstack Modification to techstack labels Jun 18, 2026
@bibymaths bibymaths changed the title Global Release v0.5.0: Stabilize JAX/Diffrax workflows and merge global into main Jun 18, 2026
@bibymaths bibymaths merged commit e81162a into main Jun 18, 2026
1 check passed

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 490a294299

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".


- name: Run tests
run: |
pixi run test || echo "No Pixi test task configured; skipping tests."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Do not mask release test failures

In the tag-release workflow, this || echo makes the test step succeed for any non-zero pixi run test exit, including real pytest failures and the default-environment case where pytest is not installed. Because the archive and gh release create steps run unconditionally after this, a broken tag can still publish a GitHub release instead of stopping at the test gate.

Useful? React with 👍 / 👎.

Computed result from this routine.
"""
p = Path(output_dir) / "dashboard_bundle.pkl"
p = Path(output_dir) / "artifacts" / "dashboard_bundle.pkl"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Fall back to legacy dashboard bundles

Existing networkmodel result directories created before this change store dashboard_bundle.pkl at the run root, and the new panel still discovers that legacy location, but load_dashboard_bundle() now only opens artifacts/dashboard_bundle.pkl. Users opening old runs through networkmodel/dashboard_app.py or the unified panel will get FileNotFoundError even though the bundle exists, so keep a root-level fallback when the artifacts copy is absent.

Useful? React with 👍 / 👎.

description="PhosKinTime - SLSQP/TRUST-CONSTR Kinase Phosphorylation Optimization Problem prior to ODE Modelling."
)

parser.add_argument("--conf", default=None, help="Compatibility option; configuration is loaded before argument parsing.")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor the KinOpt config path

When the dashboard or config.cli passes --conf for a KinOpt run, this parser accepts the option but never uses it; _CFG, INPUT1, INPUT2, and the defaults were already loaded from the project config.toml at import time. That makes a user-selected TOML silently ignored, so experiments can run with the wrong input files and bounds instead of the uploaded/custom configuration.

Useful? React with 👍 / 👎.

parser = argparse.ArgumentParser(
description="PhosKinTime - SLSQP mRNA-TF Optimization Problem."
)
parser.add_argument("--conf", default=None, help="Compatibility option; configuration is loaded before argument parsing.")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Honor the TFOpt config path

The TFOpt launcher has the same silent no-op behavior for --conf: the option is parsed here, but all config-derived constants and defaults were loaded from the default project config before argument parsing. Any dashboard/config-cli run that selects a custom TOML will therefore execute with the wrong TFOpt inputs and settings while appearing to have accepted the file.

Useful? React with 👍 / 👎.

@bibymaths bibymaths deleted the global branch June 18, 2026 11:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

biology Biological references for implementation dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation enhancement New feature or request math Functional programming update model Changes to model, any model python Pull requests that update python code techstack Modification to techstack

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant