From cbecdfa17ac6aa056df64f5856d914abc1f67c31 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Thu, 20 Aug 2026 11:12:46 +1000 Subject: [PATCH 1/2] Pin jax to 0.11.0 in the three execution-* workflows The 2026-08-19 pin (#617) covered cache.yml, ci.yml and publish.yml, but this repo has six workflows that install jax. execution-linux.yml, execution-osx.yml and execution-win.yml install "jax[CPU]" unpinned and build with `jb build lectures -W --keep-going`, which executes every lecture -- so jax 0.11.1 fails them on CellTimeoutError in numpy_vs_numba_vs_jax. execution-linux.yml runs on a daily cron and has been red since 2026-08-18: run 32152771492 (08-18) and run 32268416676 (08-19, head_sha 915bfd9f, i.e. after #617 merged) both log "Successfully installed jax-0.11.1 jaxlib-0.11.1" and then CellTimeoutError at the 600s myst-nb timeout. The 08-16 run resolved jax 0.11.0 and executed the same lecture in 4.35 seconds. Pinning jax alone is sufficient: jax 0.11.0's metadata carries Requires-Dist: jaxlib<=0.11.0,>=0.11.0, and the pairing is additionally enforced at import in both directions, so jaxlib cannot drift. Closes #619 Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/execution-linux.yml | 9 ++++++++- .github/workflows/execution-osx.yml | 9 ++++++++- .github/workflows/execution-win.yml | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.github/workflows/execution-linux.yml b/.github/workflows/execution-linux.yml index cda5c148..2555988e 100644 --- a/.github/workflows/execution-linux.yml +++ b/.github/workflows/execution-linux.yml @@ -31,7 +31,14 @@ jobs: - name: Install Jax [CPU] shell: bash -l {0} run: | - pip install "jax[CPU]" + # Pinned: jax 0.11.1 (2026-08-17) regresses XLA:CPU execution -- + # numpy_vs_numba_vs_jax's lax.fori_loop and lax.scan cells go + # quadratic in n, so this -W build dies on CellTimeoutError. Matches + # the pin already in cache/ci/publish.yml; evidence and the exposure + # map are recorded in QuantEcon/workspace-lectures#49. With jax + # already present, the lecture's unpinned `!pip install quantecon + # jax` cell is satisfied and does not upgrade. + pip install "jax[CPU]==0.11.0" - name: Build Lectures (+ Execution Checks) shell: bash -l {0} run: jb build lectures --path-output=./ -W --keep-going diff --git a/.github/workflows/execution-osx.yml b/.github/workflows/execution-osx.yml index d65360ea..afd2b231 100644 --- a/.github/workflows/execution-osx.yml +++ b/.github/workflows/execution-osx.yml @@ -31,7 +31,14 @@ jobs: - name: Install Jax [CPU] shell: bash -l {0} run: | - pip install "jax[CPU]" + # Pinned: jax 0.11.1 (2026-08-17) regresses XLA:CPU execution -- + # numpy_vs_numba_vs_jax's lax.fori_loop and lax.scan cells go + # quadratic in n, so this -W build dies on CellTimeoutError. Matches + # the pin already in cache/ci/publish.yml; evidence and the exposure + # map are recorded in QuantEcon/workspace-lectures#49. With jax + # already present, the lecture's unpinned `!pip install quantecon + # jax` cell is satisfied and does not upgrade. + pip install "jax[CPU]==0.11.0" - name: Build Lectures (+ Execution Checks) shell: bash -l {0} run: jb build lectures --path-output=./ -W --keep-going diff --git a/.github/workflows/execution-win.yml b/.github/workflows/execution-win.yml index 7983ad3f..98a8b4f9 100644 --- a/.github/workflows/execution-win.yml +++ b/.github/workflows/execution-win.yml @@ -35,7 +35,14 @@ jobs: - name: Install Jax [CPU] shell: bash -l {0} run: | - pip install "jax[CPU]" + # Pinned: jax 0.11.1 (2026-08-17) regresses XLA:CPU execution -- + # numpy_vs_numba_vs_jax's lax.fori_loop and lax.scan cells go + # quadratic in n, so this -W build dies on CellTimeoutError. Matches + # the pin already in cache/ci/publish.yml; evidence and the exposure + # map are recorded in QuantEcon/workspace-lectures#49. With jax + # already present, the lecture's unpinned `!pip install quantecon + # jax` cell is satisfied and does not upgrade. + pip install "jax[CPU]==0.11.0" - name: Build Lectures (+ Execution Checks) shell: powershell run: jb build lectures --path-output=./ -W --keep-going From 47d88cd4d082341c3425b304c81ae0acd96cf292 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Thu, 20 Aug 2026 11:32:35 +1000 Subject: [PATCH 2/2] Keep the !pip install command on a single comment line The wrap split `!pip install quantecon jax` across two comment lines, so skimming the first showed `!pip install quantecon` with `jax` orphaned behind the next `# ` -- dropping the one token the sentence exists to explain. Matches the unbroken form already used in cache.yml, ci.yml and publish.yml. Comments only; the pin is unchanged. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/execution-linux.yml | 5 +++-- .github/workflows/execution-osx.yml | 5 +++-- .github/workflows/execution-win.yml | 5 +++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/execution-linux.yml b/.github/workflows/execution-linux.yml index 2555988e..8e9d5984 100644 --- a/.github/workflows/execution-linux.yml +++ b/.github/workflows/execution-linux.yml @@ -36,8 +36,9 @@ jobs: # quadratic in n, so this -W build dies on CellTimeoutError. Matches # the pin already in cache/ci/publish.yml; evidence and the exposure # map are recorded in QuantEcon/workspace-lectures#49. With jax - # already present, the lecture's unpinned `!pip install quantecon - # jax` cell is satisfied and does not upgrade. + # already present, the lecture's unpinned + # `!pip install quantecon jax` cell is satisfied and does not + # upgrade. pip install "jax[CPU]==0.11.0" - name: Build Lectures (+ Execution Checks) shell: bash -l {0} diff --git a/.github/workflows/execution-osx.yml b/.github/workflows/execution-osx.yml index afd2b231..897b49a2 100644 --- a/.github/workflows/execution-osx.yml +++ b/.github/workflows/execution-osx.yml @@ -36,8 +36,9 @@ jobs: # quadratic in n, so this -W build dies on CellTimeoutError. Matches # the pin already in cache/ci/publish.yml; evidence and the exposure # map are recorded in QuantEcon/workspace-lectures#49. With jax - # already present, the lecture's unpinned `!pip install quantecon - # jax` cell is satisfied and does not upgrade. + # already present, the lecture's unpinned + # `!pip install quantecon jax` cell is satisfied and does not + # upgrade. pip install "jax[CPU]==0.11.0" - name: Build Lectures (+ Execution Checks) shell: bash -l {0} diff --git a/.github/workflows/execution-win.yml b/.github/workflows/execution-win.yml index 98a8b4f9..b6c20e84 100644 --- a/.github/workflows/execution-win.yml +++ b/.github/workflows/execution-win.yml @@ -40,8 +40,9 @@ jobs: # quadratic in n, so this -W build dies on CellTimeoutError. Matches # the pin already in cache/ci/publish.yml; evidence and the exposure # map are recorded in QuantEcon/workspace-lectures#49. With jax - # already present, the lecture's unpinned `!pip install quantecon - # jax` cell is satisfied and does not upgrade. + # already present, the lecture's unpinned + # `!pip install quantecon jax` cell is satisfied and does not + # upgrade. pip install "jax[CPU]==0.11.0" - name: Build Lectures (+ Execution Checks) shell: powershell