Source code for skfolio.exceptions
"""
The :mod:`skfolio.exceptions` module includes all custom warnings and error
classes used across skfolio.
"""
# Copyright (c) 2023-2026
# Author: Hugo Delatte <hugo.delatte@skfoliolabs.com>
# SPDX-License-Identifier: BSD-3-Clause
from __future__ import annotations
import cvxpy as cp
__all__ = [
"ConvexOptimizationError",
"DuplicateGroupsError",
"EquationToMatrixError",
"FactorNotFoundError",
"GroupNotFoundError",
"NonPositiveVarianceError",
"OptimizationError",
"SkfolioError",
"SolverError",
]
[docs]
class SkfolioError(Exception):
"""Base class for all custom skfolio exceptions."""
[docs]
class OptimizationError(SkfolioError):
"""An optimizer could not compute a valid portfolio allocation.
See :ref:`optimization_failure_handling` for fallback behavior and
:ref:`online_failure_handling` for online continuation and restart rules.
"""
[docs]
class ConvexOptimizationError(OptimizationError, cp.SolverError):
"""A convex optimization step could not produce valid portfolio weights.
This includes infeasible problems and unusable numerical results. It can be caught
as `OptimizationError` or `cvxpy.SolverError`. See
:ref:`optimization_failure_handling`.
"""
[docs]
class SolverError(SkfolioError):
"""A solver failed during model estimation, such as entropy pooling.
Portfolio optimization failures use `OptimizationError` instead.
"""
[docs]
class EquationToMatrixError(SkfolioError):
"""Error while processing equations."""
[docs]
class GroupNotFoundError(SkfolioError):
"""Group name not found in the groups."""
[docs]
class FactorNotFoundError(SkfolioError):
"""Factor name not found in factor_groups or loading_matrix not provided."""
[docs]
class DuplicateGroupsError(SkfolioError):
"""Group name appear in multiple group levels."""
[docs]
class NonPositiveVarianceError(SkfolioError):
"""Variance negative or null."""