# bquant.core.exceptions — Исключения

## Обзор

Кастомные исключения BQuant для однородной обработки ошибок в данных, анализе, визуализации и конфигурации.

## Классы

- `BQuantError(Exception)`: базовый класс всех исключений BQuant.
- `DataError(BQuantError)`: общие ошибки данных.
  - `DataValidationError`, `DataLoadingError`, `DataProcessingError`.
- `ConfigurationError(BQuantError)`: ошибки конфигурации.
  - `InvalidTimeframeError`, `InvalidIndicatorParametersError`.
- `AnalysisError(BQuantError)`: ошибки анализа.
  - `IndicatorCalculationError`, `ZoneAnalysisError`, `StatisticalAnalysisError`.
- `VisualizationError(BQuantError)`: ошибки визуализации.
- `MLError(BQuantError)`: ошибки ML (будущие модули).
  - `FeatureExtractionError`, `ModelTrainingError`.
- `FileOperationError(BQuantError)`: ошибки файловых операций.
- `NotImplementedError(BQuantError)`: обращение к ещё не реализованной функциональности.

## Фабрики ошибок

- `create_data_validation_error(message, column=None, expected_type=None, actual_type=None, expected_shape=None, actual_shape=None) -> DataValidationError`
- `create_indicator_calculation_error(indicator_name, message, parameters=None, data_shape=None) -> IndicatorCalculationError`
- `create_configuration_error(parameter_name, message, expected_values=None, actual_value=None) -> ConfigurationError`

## Контекст и валидаторы

- `BQuantErrorContext(operation, logger=None)`: контекстный менеджер обработки исключений (логирует и оборачивает чужие исключения в семейство BQuant).
- `validate_timeframe(timeframe, supported_timeframes)`: валидирует таймфрейм, бросает `InvalidTimeframeError`.
- `validate_indicator_parameters(indicator, parameters, required_params)`: проверяет обязательные параметры индикатора.
- `validate_ohlcv_data(data, required_columns=None)`: валидирует структуру OHLCV DataFrame.

## Примеры

Использование фабрики и перехват ошибок:
```python
from bquant.core.exceptions import (
    create_data_validation_error,
    DataValidationError,
    BQuantErrorContext,
)

try:
    raise create_data_validation_error("Неверный формат", expected_type="DataFrame", actual_type="dict")
except DataValidationError as e:
    print(e)

from bquant.core.logging_config import get_logger
logger = get_logger(__name__)

with BQuantErrorContext("load data", logger=logger):
    # Любая ошибка внутри будет обернута в BQuantError/ConfigurationError
    1 / 0
```
