From 62672cbeafe525f8e620fd9e22e5c335aff0b448 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 22 Jun 2026 10:00:40 +1000 Subject: [PATCH 1/3] MAINT: upgrade anaconda=2026.06 Bump the Anaconda distribution from 2025.12 to 2026.06. The python pin stays at 3.13 (anaconda=2026.06 ships a py313 build). Verified the environment resolves cleanly via a conda dry-run solve. Co-Authored-By: Claude Opus 4.8 --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index 5603bd2b..6796dad8 100644 --- a/environment.yml +++ b/environment.yml @@ -3,7 +3,7 @@ channels: - default dependencies: - python=3.13 - - anaconda=2025.12 + - anaconda=2026.06 - pip - pip: - jupyter-book>=1.0.4post1,<2.0 From f74e5541f8de452a9176c709762430e7b520f9d6 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 22 Jun 2026 11:03:54 +1000 Subject: [PATCH 2/3] FIX: replace pandas-datareader with direct FRED CSV download (doubts_or_variability) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pandas-datareader (unmaintained, last released 2021) fails to import under pandas 3.0 — pandas.util._decorators.deprecate_kwarg changed signature, raising "deprecate_kwarg() missing 1 required positional argument: 'new_arg_name'". This blocked execution of doubts_or_variability under anaconda=2026.06. Fetch the four FRED series (PCND, PCESV, DPCERD3Q086SBEA, CNP16OV) directly from FRED's CSV endpoint via pandas.read_csv, removing the dependency. Verified locally that the pipeline still yields 236 quarterly observations (235 growth rates) with matching sample moments. Co-Authored-By: Claude Opus 4.8 --- lectures/doubts_or_variability.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lectures/doubts_or_variability.md b/lectures/doubts_or_variability.md index 6f2c5624..1c378337 100644 --- a/lectures/doubts_or_variability.md +++ b/lectures/doubts_or_variability.md @@ -130,7 +130,6 @@ import datetime as dt import numpy as np import pandas as pd import matplotlib.pyplot as plt -from pandas_datareader import data as web from scipy.stats import norm from scipy.optimize import brentq ``` @@ -2011,8 +2010,12 @@ end_date = dt.datetime(2007, 1, 1) def _read_fred_series(series_id, start_date, end_date): - series = web.DataReader(series_id, "fred", start_date, end_date)[series_id] - series = pd.to_numeric(series, errors="coerce").dropna().sort_index() + # Download directly from FRED's CSV endpoint. This avoids pandas-datareader, + # which is unmaintained and incompatible with pandas 3.0. + url = f"https://fred.stlouisfed.org/graph/fredgraph.csv?id={series_id}" + df = pd.read_csv(url, index_col=0, parse_dates=True) + series = pd.to_numeric(df.iloc[:, 0], errors="coerce").dropna().sort_index() + series = series.loc[start_date:end_date] if series.empty: raise ValueError(f"FRED series '{series_id}' returned no data in sample window") return series From 60067866564462132a9c9a755100616cb6107564 Mon Sep 17 00:00:00 2001 From: Matt McKay Date: Mon, 22 Jun 2026 11:03:54 +1000 Subject: [PATCH 3/3] CI: upload _build artifact even when the cache build fails Add `if: always()` to the build-cache upload step so a failed full re-execution still publishes the executed notebooks, enabling inspection of runtime warnings and deprecations. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/cache.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/cache.yml b/.github/workflows/cache.yml index df77aa78..46a20826 100644 --- a/.github/workflows/cache.yml +++ b/.github/workflows/cache.yml @@ -44,6 +44,7 @@ jobs: path: _build/html/reports - name: Upload "_build" folder (cache) uses: actions/upload-artifact@v4 + if: always() with: name: build-cache path: _build