HKUDS/Vibe-Trading · error · ValueError
factor_cov contains non-finite values
Error message
factor_cov contains non-finite values
What it means
The factor covariance matrix must be fully finite; NaN or ±inf entries would make eigendecomposition and the variance quadratic form meaningless.
Source
Thrown at agent/src/quantlib/factormodel.py:646
Raises:
ValueError: If weights or matrices are empty, contain non-finite values,
or share no common assets or factors.
"""
w_series = pd.Series(portfolio_weights, dtype=float)
if w_series.empty:
raise ValueError("portfolio_weights cannot be empty")
if not np.isfinite(w_series.values).all():
raise ValueError("portfolio_weights contains non-finite values")
if not isinstance(exposures, pd.DataFrame) or exposures.empty:
raise ValueError("exposures must be a non-empty DataFrame")
if not np.isfinite(exposures.values).all():
raise ValueError("exposures contains non-finite values")
if not isinstance(factor_cov, pd.DataFrame) or factor_cov.empty:
raise ValueError("factor_cov must be a non-empty DataFrame")
if not np.isfinite(factor_cov.values).all():
raise ValueError("factor_cov contains non-finite values")
# Align assets
assets = w_series.index.intersection(exposures.index)
if assets.empty:
raise ValueError(
f"No matching assets between weights ({sorted(w_series.index)}) and exposures ({sorted(exposures.index)})"
)
unmatched_weight = float(w_series.drop(index=assets, errors="ignore").abs().sum())
w = w_series.loc[assets]
X = exposures.loc[assets]
# Align factors
factors = X.columns.intersection(factor_cov.index).intersection(factor_cov.columns)
if factors.empty:
raise ValueError(
f"No matching factors between exposures ({sorted(X.columns)}) and factor_cov ({sorted(factor_cov.index)})"
)View on GitHub (pinned to 80ffdda44c)
Solutions
- Recompute the covariance after returns.dropna() or with min_periods
- Locate bad entries: F[~np.isfinite(F.values)]
- Drop factors with insufficient history before estimating F
Example fix
# before F = returns.cov() # after F = returns.dropna(how='any').cov(min_periods=20)
Defensive patterns
Strategy: validation
Validate before calling
assert np.isfinite(factor_cov.values).all()
Prevention
- Estimate covariance only on complete returns (dropna/min_periods)
- Drop factors with insufficient history before estimation
When it happens
Trigger: Covariance estimated from returns with NaNs without dropna, or from too few observations producing inf.
Common situations: pd.DataFrame.cov() on a frame containing NaN pairs; shrinkage estimator divided by zero; stale factor where all returns were missing.
Related errors
- portfolio_weights contains non-finite values
- exposures contains non-finite values
- specific_variances contains non-finite values
- factor_cov must be a non-empty DataFrame
- factor_cov matrix must be symmetric
AI-assisted analysis of HKUDS/Vibe-Trading@80ffdda44c (2026-08-28).
Data as JSON: /api/errors/65f75ac7a35aaca6.
Report an issue: GitHub.