#!/usr/bin/env python3
"""Reproduce the checked OLS arithmetic used in the learning page."""

x = [0.0, 1.0, 2.0, 3.0, 4.0]
y = [1.0, 3.0, 2.0, 5.0, 4.0]

xbar = sum(x) / len(x)
ybar = sum(y) / len(y)
sxx = sum((value - xbar) ** 2 for value in x)
sxy = sum((xi - xbar) * (yi - ybar) for xi, yi in zip(x, y))

slope = sxy / sxx
intercept = ybar - slope * xbar
predictions = [intercept + slope * value for value in x]
residuals = [observed - predicted for observed, predicted in zip(y, predictions)]
sse = sum(value**2 for value in residuals)
sst = sum((value - ybar) ** 2 for value in y)
r_squared = 1.0 - sse / sst

assert abs(sum(residuals)) < 1e-12
assert abs(sum(value * residual for value, residual in zip(x, residuals))) < 1e-12

print(f"Achsenabschnitt: {intercept:.3f}")
print(f"Steigung: {slope:.3f}")
print(f"Residuen: {[round(value, 1) for value in residuals]}")
print(f"SSE: {sse:.3f}")
print(f"R²: {r_squared:.3f}")
