Replaces manual numpy if/elif chain with RegressionMetrics from
sientia_model. Fixes 3 known bugs in one pass:
- NaN now handled via _align_dropna (was silently propagated)
- r2 zero-variance uses sklearn r2_score (was divergent, pinned at 0.0)
- Unknown metric names raise ValueError (were silently dropped)
Also adds r2 lock: when model_type is known and non-linear,
r2 is excluded from calculation with a WARNING notification.
Drops the now-unused `numpy` import (the manual math it backed is gone,
and no other method in this file references it).
SIENTIAPDE-1986