#!/usr/bin/env python3 """Figure ch05 — sensibilité de la capitalisation d'un écart de taxe foncière : perte de valeur (en % de la valeur) selon l'écart de taux (points de base de la valeur) pour quatre taux de capitalisation et deux degrés de capitalisation. Calculs : ch05_rente.capitalisation_taxe (formule exacte) ; aucune donnée observée. Sortie : assets/figures/ch05/ch05-fig-capitalisation-taxe.pdf""" import sys, pathlib ROOT = pathlib.Path(__file__).resolve().parents[3] sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) import numpy as np import matplotlib.pyplot as plt from traite.style import setup, palette, savefig, LARGEUR import ch05_rente as c5 def main(): setup() pb = np.linspace(0, 100, 101); tau0 = 0.0070 fig, ax = plt.subplots(figsize=(LARGEUR, 3.2)) for k, i in enumerate([0.04, 0.05, 0.06, 0.07]): exact = np.array([c5.capitalisation_taxe(1.0, tau0, tau0 + p / 1e4, i)["dV_pct_exact"] for p in pb]) * 100 ax.plot(pb, exact, color=palette.cat[k], lw=1.7, label=f"$i$ = {i*100:.0f} %, capitalisation complète (exacte)") if i == 0.05: ax.plot(pb, 0.6 * exact, color=palette.cat[k], lw=1.2, ls="--", label="$i$ = 5 %, capitalisation à 60 %") ax.plot(pb, -pb / 1e4 / i * 100, color=palette.cat[k], lw=0.9, ls=":", label="$i$ = 5 %, approximation $-\\Delta T / i$") for x, lab in [(10, "10 pb"), (22.4, "écart nominal\nQuébec–Gatineau 2026"), (50, "50 pb")]: ax.axvline(x, color=palette.grid, lw=0.8, ls="--"); ax.text(x + 1, -0.6, lab, fontsize=6.8, color=palette.ink2, va="top") ax.set_xlim(0, 100); ax.set_ylim(-25, 0) ax.set_xlabel("Écart de taux de taxe foncière (points de base de la valeur marchande)") ax.set_ylabel("Variation de la valeur (%)") ax.legend(fontsize=6.8, loc="lower left") out = savefig(fig, "ch05/ch05-fig-capitalisation-taxe.pdf"); print("OK", out) if __name__ == "__main__": main()