Source code for episia.core.exceptions
"""
This module defines custom exception classes for specific error
conditions in epidemiological analysis.
"""
[docs]
class EpisiaError(Exception):
"""Base exception for all Episia errors."""
[docs]
def __init__(self, message: str = "An error occurred in Episia"):
self.message = message
super().__init__(self.message)
[docs]
class ValidationError(EpisiaError):
"""Raised when data validation fails."""
[docs]
def __init__(self, message: str = "Data validation failed"):
super().__init__(message)
[docs]
class ConvergenceError(EpisiaError):
"""Raised when numerical algorithm fails to converge."""
[docs]
def __init__(self, message: str = "Algorithm failed to converge"):
super().__init__(message)
[docs]
class ConfigurationError(EpisiaError):
"""Raised when configuration is invalid."""
[docs]
def __init__(self, message: str = "Invalid configuration"):
super().__init__(message)
[docs]
class DataError(EpisiaError):
"""Raised when data is invalid or insufficient."""
[docs]
def __init__(self, message: str = "Invalid or insufficient data"):
super().__init__(message)
[docs]
class ModelError(EpisiaError):
"""Raised when model fitting or evaluation fails."""
[docs]
def __init__(self, message: str = "Model error occurred"):
super().__init__(message)
[docs]
class StatisticalError(EpisiaError):
"""Raised when statistical assumptions are violated."""
[docs]
def __init__(self, message: str = "Statistical assumption violated"):
super().__init__(message)
[docs]
class DimensionError(EpisiaError):
"""Raised when array dimensions are incompatible."""
[docs]
def __init__(self, message: str = "Dimension mismatch"):
super().__init__(message)
[docs]
class ParameterError(EpisiaError):
"""Raised when function parameters are invalid."""
[docs]
def __init__(self, message: str = "Invalid parameter value"):
super().__init__(message)
[docs]
class ComputationError(EpisiaError):
"""Raised when numerical computation fails."""
[docs]
def __init__(self, message: str = "Numerical computation failed"):
super().__init__(message)
[docs]
class FileError(EpisiaError):
"""Raised when file operations fail."""
[docs]
def __init__(self, message: str = "File operation failed"):
super().__init__(message)
[docs]
class PlotError(EpisiaError):
"""Raised when plotting fails."""
[docs]
def __init__(self, message: str = "Plotting failed"):
super().__init__(message)
[docs]
class WarningManager:
"""
Manager for warnings in Episia.
Provides consistent warning formatting and filtering.
"""
[docs]
@staticmethod
def warn(
message: str,
warning_type: type = UserWarning,
stacklevel: int = 2
) -> None:
"""
Issue a warning with consistent formatting.
Args:
message: Warning message
warning_type: Type of warning
stacklevel: Stack level for warning origin
"""
import warnings
warnings.warn(f"[Episia] {message}", warning_type, stacklevel)
[docs]
@staticmethod
def filter_warnings(action: str = "default") -> None:
"""
Set warning filters for Episia.
Args:
action: 'default', 'ignore', or 'error'
"""
import warnings
if action == "ignore":
warnings.filterwarnings("ignore", module="episia")
elif action == "error":
warnings.filterwarnings("error", module="episia")
elif action == "default":
# Default filters
warnings.filterwarnings("once", category=DeprecationWarning, module="episia")
warnings.filterwarnings("always", category=RuntimeWarning, module="episia")