"""0002: utility U = E(r) - 0.5*A*sigma^2 vs sigma for A=2 and A=5 (E(r)=8.5%).

The dashed benchmark is the risk-free utility level: cash pays 3.71% (FRED
DTB3, 2026-08-18) with zero variance, so U(rf) = 3.71% for every A.
"""
import sys

import matplotlib.pyplot as plt
import numpy as np

sys.path.insert(0, ".")
import course_style as cs

cs.apply_style()

ER = 0.085
RF = 0.0371
sig = np.linspace(0, 0.25, 300)


def U(A):
    return ER - 0.5 * A * sig**2


fig, ax = plt.subplots(figsize=(5, 3.3))
ax.plot(sig * 100, U(2) * 100, color=cs.PRIMARY, linewidth=2, label="A = 2")
ax.plot(sig * 100, U(5) * 100, color=cs.TERTIARY, linewidth=2, label="A = 5")

ax.set_title("Utility vs risk, E(r) = 8.5%")
ax.set_xlabel("Portfolio sigma (percent)")
ax.set_ylabel("Utility (percent)")
ax.axhline(RF * 100, color=cs.TICK, linewidth=0.8, linestyle="--")
ax.text(1, RF * 100 + 0.25, "risk-free utility (3.71%)", fontfamily=cs.MONO[0], fontsize=7.5, color=cs.LABEL)
ax.legend(loc="lower left")
ax.grid(True, axis="y")
cs.save_fig(fig, "0002-utility-curves.png")
