From 2e32fbd40b2b5d419d4023dad2f03af90902b0b8 Mon Sep 17 00:00:00 2001 From: Chris Fonnesbeck Date: Sat, 8 Nov 2025 12:04:42 -0600 Subject: [PATCH 1/4] Upgrade pyupgrade --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 7a255161a..c20b9f07f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,7 +12,7 @@ repos: - id: nbqa-isort additional_dependencies: [isort==5.6.4] - id: nbqa-pyupgrade - additional_dependencies: [pyupgrade==2.7.4] + additional_dependencies: [pyupgrade==3.19.0] args: [--py37-plus] - repo: https://github.com/MarcoGorelli/madforhooks rev: 0.4.1 From 9af1c3ea7f7f3a98b939531684e71d5c16d7385c Mon Sep 17 00:00:00 2001 From: Chris Fonnesbeck Date: Sat, 8 Nov 2025 12:19:25 -0600 Subject: [PATCH 2/4] Fix pre-commit errors: Replace .format() with f-strings and list comprehensions with generators --- examples/case_studies/factor_analysis.ipynb | 6 +++--- examples/case_studies/factor_analysis.myst.md | 6 +++--- .../case_studies/probabilistic_matrix_factorization.ipynb | 2 +- .../case_studies/probabilistic_matrix_factorization.myst.md | 2 +- examples/gaussian_processes/GP-Heteroskedastic.ipynb | 4 ++-- examples/gaussian_processes/GP-Heteroskedastic.myst.md | 4 ++-- .../GLM-hierarchical-binomial-model.ipynb | 2 +- .../GLM-hierarchical-binomial-model.myst.md | 2 +- .../GLM-robust-with-outlier-detection.ipynb | 2 +- .../GLM-robust-with-outlier-detection.myst.md | 2 +- examples/ode_models/ODE_with_manual_gradients.ipynb | 6 +++--- examples/ode_models/ODE_with_manual_gradients.myst.md | 6 +++--- 12 files changed, 22 insertions(+), 22 deletions(-) diff --git a/examples/case_studies/factor_analysis.ipynb b/examples/case_studies/factor_analysis.ipynb index 3b4cb86b0..81d6b09bd 100644 --- a/examples/case_studies/factor_analysis.ipynb +++ b/examples/case_studies/factor_analysis.ipynb @@ -307,7 +307,7 @@ "source": [ "for i in trace.posterior.chain.values:\n", " samples = trace.posterior[\"W\"].sel(chain=i, observed_columns=3, latent_columns=1)\n", - " plt.plot(samples, label=\"Chain {}\".format(i + 1))\n", + " plt.plot(samples, label=f\"Chain {i + 1}\")\n", " plt.axhline(samples.mean(), color=f\"C{i}\")\n", "plt.legend(ncol=4, loc=\"upper center\", fontsize=12, frameon=True), plt.xlabel(\"Sample\");" ] @@ -484,7 +484,7 @@ "\n", "for i in range(4):\n", " samples = trace.posterior[\"W\"].sel(chain=i, observed_columns=3, latent_columns=1)\n", - " plt.plot(samples, label=\"Chain {}\".format(i + 1))\n", + " plt.plot(samples, label=f\"Chain {i + 1}\")\n", "\n", "plt.legend(ncol=4, loc=\"lower center\", fontsize=8), plt.xlabel(\"Sample\");" ] @@ -704,7 +704,7 @@ "\n", "ax = az.plot_kde(\n", " trace.posterior[\"W\"].sel(**col_selection).values,\n", - " label=\"MCMC posterior for the explicit model\".format(0),\n", + " label=f\"MCMC posterior for the explicit model\",\n", " plot_kwargs={\"color\": f\"C{1}\"},\n", ")\n", "\n", diff --git a/examples/case_studies/factor_analysis.myst.md b/examples/case_studies/factor_analysis.myst.md index 89e6fe4d3..568b4770e 100644 --- a/examples/case_studies/factor_analysis.myst.md +++ b/examples/case_studies/factor_analysis.myst.md @@ -130,7 +130,7 @@ At this point, there are already several warnings regarding failed convergence c ```{code-cell} ipython3 for i in trace.posterior.chain.values: samples = trace.posterior["W"].sel(chain=i, observed_columns=3, latent_columns=1) - plt.plot(samples, label="Chain {}".format(i + 1)) + plt.plot(samples, label=f"Chain {i + 1}") plt.axhline(samples.mean(), color=f"C{i}") plt.legend(ncol=4, loc="upper center", fontsize=12, frameon=True), plt.xlabel("Sample"); ``` @@ -198,7 +198,7 @@ with pm.Model(coords=coords) as PPCA_identified: for i in range(4): samples = trace.posterior["W"].sel(chain=i, observed_columns=3, latent_columns=1) - plt.plot(samples, label="Chain {}".format(i + 1)) + plt.plot(samples, label=f"Chain {i + 1}") plt.legend(ncol=4, loc="lower center", fontsize=8), plt.xlabel("Sample"); ``` @@ -253,7 +253,7 @@ col_selection = dict(observed_columns=3, latent_columns=1) ax = az.plot_kde( trace.posterior["W"].sel(**col_selection).values, - label="MCMC posterior for the explicit model".format(0), + label=f"MCMC posterior for the explicit model", plot_kwargs={"color": f"C{1}"}, ) diff --git a/examples/case_studies/probabilistic_matrix_factorization.ipynb b/examples/case_studies/probabilistic_matrix_factorization.ipynb index 598cc80e8..8a68c867b 100644 --- a/examples/case_studies/probabilistic_matrix_factorization.ipynb +++ b/examples/case_studies/probabilistic_matrix_factorization.ipynb @@ -1135,7 +1135,7 @@ " Method = baseline_methods[name]\n", " method = Method(train)\n", " baselines[name] = method.rmse(test)\n", - " print(\"{} RMSE:\\t{:.5f}\".format(method, baselines[name]))" + " print(f\"{method} RMSE:\\t{baselines[name]:.5f}\")" ] }, { diff --git a/examples/case_studies/probabilistic_matrix_factorization.myst.md b/examples/case_studies/probabilistic_matrix_factorization.myst.md index 5e63be73d..8ab9c7085 100644 --- a/examples/case_studies/probabilistic_matrix_factorization.myst.md +++ b/examples/case_studies/probabilistic_matrix_factorization.myst.md @@ -537,7 +537,7 @@ for name in baseline_methods: Method = baseline_methods[name] method = Method(train) baselines[name] = method.rmse(test) - print("{} RMSE:\t{:.5f}".format(method, baselines[name])) + print(f"{method} RMSE:\t{baselines[name]:.5f}") ``` As expected: the uniform random baseline is the worst by far, the global mean baseline is next best, and the mean of means method is our best baseline. Now let's see how PMF stacks up. diff --git a/examples/gaussian_processes/GP-Heteroskedastic.ipynb b/examples/gaussian_processes/GP-Heteroskedastic.ipynb index babd9fa8e..454914b90 100644 --- a/examples/gaussian_processes/GP-Heteroskedastic.ipynb +++ b/examples/gaussian_processes/GP-Heteroskedastic.ipynb @@ -147,7 +147,7 @@ " return ℓ_μ, ℓ_σ\n", "\n", "\n", - "ℓ_μ, ℓ_σ = [stat for stat in get_ℓ_prior(X_)]" + "ℓ_μ, ℓ_σ = (stat for stat in get_ℓ_prior(X_))" ] }, { @@ -1036,7 +1036,7 @@ " return np.hstack([np.tile(x, (2, 1)), np.vstack([np.zeros(x.shape), np.ones(x.shape)])])\n", "\n", "\n", - "Xu_c, X_obs_c, Xnew_c = [add_coreg_idx(x) for x in [Xu, X_obs, Xnew]]\n", + "Xu_c, X_obs_c, Xnew_c = (add_coreg_idx(x) for x in [Xu, X_obs, Xnew])\n", "\n", "with pm.Model() as model_htsc:\n", " ℓ = pm.InverseGamma(\"ℓ\", mu=ℓ_μ, sigma=ℓ_σ)\n", diff --git a/examples/gaussian_processes/GP-Heteroskedastic.myst.md b/examples/gaussian_processes/GP-Heteroskedastic.myst.md index 0e05d46ad..65b39ef4a 100644 --- a/examples/gaussian_processes/GP-Heteroskedastic.myst.md +++ b/examples/gaussian_processes/GP-Heteroskedastic.myst.md @@ -87,7 +87,7 @@ def get_ℓ_prior(points): return ℓ_μ, ℓ_σ -ℓ_μ, ℓ_σ = [stat for stat in get_ℓ_prior(X_)] +ℓ_μ, ℓ_σ = (stat for stat in get_ℓ_prior(X_)) ``` ```{code-cell} ipython3 @@ -388,7 +388,7 @@ def add_coreg_idx(x): return np.hstack([np.tile(x, (2, 1)), np.vstack([np.zeros(x.shape), np.ones(x.shape)])]) -Xu_c, X_obs_c, Xnew_c = [add_coreg_idx(x) for x in [Xu, X_obs, Xnew]] +Xu_c, X_obs_c, Xnew_c = (add_coreg_idx(x) for x in [Xu, X_obs, Xnew]) with pm.Model() as model_htsc: ℓ = pm.InverseGamma("ℓ", mu=ℓ_μ, sigma=ℓ_σ) diff --git a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb index 32009e17c..8fc68842d 100644 --- a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb +++ b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb @@ -203,7 +203,7 @@ "ix_z, ix_x = np.unravel_index(np.argmax(surface, axis=None), surface.shape)\n", "ax.scatter([X[0, ix_x]], [Z[ix_z, 0]], color=\"red\")\n", "\n", - "text = r\"$({a},{b})$\".format(a=np.round(X[0, ix_x], 2), b=np.round(Z[ix_z, 0], 2))\n", + "text = fr\"$({np.round(X[0, ix_x], 2)},{np.round(Z[ix_z, 0], 2)})$\"\n", "\n", "ax.annotate(\n", " text,\n", diff --git a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md index d42408df6..06968470e 100644 --- a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md +++ b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md @@ -159,7 +159,7 @@ ax.set_ylabel(r"$\log(\alpha+\beta)$", fontsize=16) ix_z, ix_x = np.unravel_index(np.argmax(surface, axis=None), surface.shape) ax.scatter([X[0, ix_x]], [Z[ix_z, 0]], color="red") -text = r"$({a},{b})$".format(a=np.round(X[0, ix_x], 2), b=np.round(Z[ix_z, 0], 2)) +text = fr"$({np.round(X[0, ix_x], 2)},{np.round(Z[ix_z, 0], 2)})$" ax.annotate( text, diff --git a/examples/generalized_linear_models/GLM-robust-with-outlier-detection.ipynb b/examples/generalized_linear_models/GLM-robust-with-outlier-detection.ipynb index f167e43f3..301598c26 100644 --- a/examples/generalized_linear_models/GLM-robust-with-outlier-detection.ipynb +++ b/examples/generalized_linear_models/GLM-robust-with-outlier-detection.ipynb @@ -245,7 +245,7 @@ " columns=[\"id\", \"x\", \"y\", \"sigma_y\", \"sigma_x\", \"rho_xy\"],\n", ")\n", "\n", - "dfhogg[\"id\"] = dfhogg[\"id\"].apply(lambda x: \"p{}\".format(int(x)))\n", + "dfhogg[\"id\"] = dfhogg[\"id\"].apply(lambda x: f\"p{int(x)}\")\n", "dfhogg.set_index(\"id\", inplace=True)\n", "dfhogg.head()" ] diff --git a/examples/generalized_linear_models/GLM-robust-with-outlier-detection.myst.md b/examples/generalized_linear_models/GLM-robust-with-outlier-detection.myst.md index 203d1bf5f..83420a6a4 100644 --- a/examples/generalized_linear_models/GLM-robust-with-outlier-detection.myst.md +++ b/examples/generalized_linear_models/GLM-robust-with-outlier-detection.myst.md @@ -113,7 +113,7 @@ dfhogg = pd.DataFrame( columns=["id", "x", "y", "sigma_y", "sigma_x", "rho_xy"], ) -dfhogg["id"] = dfhogg["id"].apply(lambda x: "p{}".format(int(x))) +dfhogg["id"] = dfhogg["id"].apply(lambda x: f"p{int(x)}") dfhogg.set_index("id", inplace=True) dfhogg.head() ``` diff --git a/examples/ode_models/ODE_with_manual_gradients.ipynb b/examples/ode_models/ODE_with_manual_gradients.ipynb index 0b8a2b469..2dcaf5a9d 100644 --- a/examples/ode_models/ODE_with_manual_gradients.ipynb +++ b/examples/ode_models/ODE_with_manual_gradients.ipynb @@ -100,7 +100,7 @@ " self._y0 = y0\n", "\n", " def simulate(self, parameters, times):\n", - " alpha, beta, gamma, delta, Xt0, Yt0 = [x for x in parameters]\n", + " alpha, beta, gamma, delta, Xt0, Yt0 = (x for x in parameters)\n", "\n", " def rhs(y, t, p):\n", " X, Y = y\n", @@ -165,7 +165,7 @@ " return self._simulate(parameters, times, True)\n", "\n", " def _simulate(self, parameters, times, sensitivities):\n", - " alpha, beta, gamma, delta, Xt0, Yt0 = [x for x in parameters]\n", + " alpha, beta, gamma, delta, Xt0, Yt0 = (x for x in parameters)\n", "\n", " def r(y, t, p):\n", " X, Y = y\n", @@ -951,7 +951,7 @@ " self._times = times\n", "\n", " def _simulate(self, parameters, times):\n", - " a, b, c = [float(x) for x in parameters]\n", + " a, b, c = (float(x) for x in parameters)\n", "\n", " def rhs(y, t, p):\n", " V, R = y\n", diff --git a/examples/ode_models/ODE_with_manual_gradients.myst.md b/examples/ode_models/ODE_with_manual_gradients.myst.md index b1c63f706..ab76e56f1 100644 --- a/examples/ode_models/ODE_with_manual_gradients.myst.md +++ b/examples/ode_models/ODE_with_manual_gradients.myst.md @@ -78,7 +78,7 @@ class LotkaVolterraModel: self._y0 = y0 def simulate(self, parameters, times): - alpha, beta, gamma, delta, Xt0, Yt0 = [x for x in parameters] + alpha, beta, gamma, delta, Xt0, Yt0 = (x for x in parameters) def rhs(y, t, p): X, Y = y @@ -133,7 +133,7 @@ class LotkaVolterraModel: return self._simulate(parameters, times, True) def _simulate(self, parameters, times, sensitivities): - alpha, beta, gamma, delta, Xt0, Yt0 = [x for x in parameters] + alpha, beta, gamma, delta, Xt0, Yt0 = (x for x in parameters) def r(y, t, p): X, Y = y @@ -453,7 +453,7 @@ class FitzhughNagumoModel: self._times = times def _simulate(self, parameters, times): - a, b, c = [float(x) for x in parameters] + a, b, c = (float(x) for x in parameters) def rhs(y, t, p): V, R = y From 23056ebe93cfab20774fd93308d8ddafff2f646f Mon Sep 17 00:00:00 2001 From: Chris Fonnesbeck Date: Sat, 8 Nov 2025 12:30:46 -0600 Subject: [PATCH 3/4] Fix f-string prefix order: fr -> rf --- .../GLM-hierarchical-binomial-model.myst.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md index 06968470e..108cc03f2 100644 --- a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md +++ b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.myst.md @@ -159,7 +159,7 @@ ax.set_ylabel(r"$\log(\alpha+\beta)$", fontsize=16) ix_z, ix_x = np.unravel_index(np.argmax(surface, axis=None), surface.shape) ax.scatter([X[0, ix_x]], [Z[ix_z, 0]], color="red") -text = fr"$({np.round(X[0, ix_x], 2)},{np.round(Z[ix_z, 0], 2)})$" +text = rf"$({np.round(X[0, ix_x], 2)},{np.round(Z[ix_z, 0], 2)})$" ax.annotate( text, From d72ef827f46d9a718fcf5b7e05167a5bd733f4a5 Mon Sep 17 00:00:00 2001 From: Chris Fonnesbeck Date: Sat, 8 Nov 2025 12:43:13 -0600 Subject: [PATCH 4/4] Fix f-string prefix order in .ipynb file: fr -> rf --- .../GLM-hierarchical-binomial-model.ipynb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb index 8fc68842d..46f6a0e19 100644 --- a/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb +++ b/examples/generalized_linear_models/GLM-hierarchical-binomial-model.ipynb @@ -8,7 +8,7 @@ ":::{post} Jan 10, 2023\n", ":tags: generalized linear model, hierarchical model \n", ":category: intermediate\n", - ":author: Demetri Pananos, Junpeng Lao, Raúl Maldonado, Farhan Reynaldo\n", + ":author: Demetri Pananos, Junpeng Lao, Ra\u00fal Maldonado, Farhan Reynaldo\n", ":::" ] }, @@ -203,7 +203,7 @@ "ix_z, ix_x = np.unravel_index(np.argmax(surface, axis=None), surface.shape)\n", "ax.scatter([X[0, ix_x]], [Z[ix_z, 0]], color=\"red\")\n", "\n", - "text = fr\"$({np.round(X[0, ix_x], 2)},{np.round(Z[ix_z, 0], 2)})$\"\n", + "text = rf\"$({np.round(X[0, ix_x], 2)},{np.round(Z[ix_z, 0], 2)})$\"\n", "\n", "ax.annotate(\n", " text,\n", @@ -602,7 +602,7 @@ "\n", ".xr-section-summary-in + label:before {\n", " display: inline-block;\n", - " content: '►';\n", + " content: '\u25ba';\n", " font-size: 11px;\n", " width: 15px;\n", " text-align: center;\n", @@ -613,7 +613,7 @@ "}\n", "\n", ".xr-section-summary-in:checked + label:before {\n", - " content: '▼';\n", + " content: '\u25bc';\n", "}\n", "\n", ".xr-section-summary-in:checked + label > span {\n", @@ -892,7 +892,7 @@ "## Authors\n", "\n", "* Adapted from chapter 5 of Bayesian Data Analysis 3rd Edition {cite:p}`gelman2013bayesian` by Demetri Pananos and Junpeng Lao ([pymc#3054](https://github.com/pymc-devs/pymc/pull/3054))\n", - "* Updated and reexecuted by Raúl Maldonado ([pymc-examples#24](https://github.com/pymc-devs/pymc-examples/pull/24), [pymc-examples#45](https://github.com/pymc-devs/pymc-examples/pull/45) and [pymc-examples#147](https://github.com/pymc-devs/pymc-examples/pull/147))\n", + "* Updated and reexecuted by Ra\u00fal Maldonado ([pymc-examples#24](https://github.com/pymc-devs/pymc-examples/pull/24), [pymc-examples#45](https://github.com/pymc-devs/pymc-examples/pull/45) and [pymc-examples#147](https://github.com/pymc-devs/pymc-examples/pull/147))\n", "* Updated and reexecuted by Farhan Reynaldo in November 2021 ([pymc-examples#248](https://github.com/pymc-devs/pymc-examples/pull/248))\n", "* Rerun with PyMC v5, by Reshama Shaikh, January 2023" ] @@ -969,4 +969,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file