Files
sientia-dataops-model-manager/tests/conftest.py
vitor-aignosi 6b1df7c3a7 feat: enhance training and experiment tracking functionality
- Updated `Activities` class to improve garbage collection handling.
- Enhanced error messaging in `ExperimentTracking` for better clarity on update failures.
- Refactored `Training` class to streamline exception handling and improve type hints.
- Introduced new methods in `TrainModelParams` for better handling of experiment run IDs and model metadata.
- Added functionality to extract model equations in `DataManagerRepository` for linear regression models.
2026-04-06 15:05:57 -03:00

94 lines
3.1 KiB
Python

"""
Test bootstrap: stub optional `sientia_do` submodules not shipped in minimal installs.
Must run before importing `model_manager.sientia.models` (pulled in via TrainModelParams).
Stubs Evidently submodules so `model_manager.sientia.reports` imports (via DataManagerRepository).
"""
from __future__ import annotations
import sys
from types import ModuleType
def _make_dummy(name: str) -> type:
return type(name, (), {})
def _stub_evidently() -> None:
"""Minimal Evidently API surface required to import `model_manager.sientia.reports`."""
mp = ModuleType('evidently.metric_preset')
mp.DataDriftPreset = _make_dummy('DataDriftPreset')
sys.modules['evidently.metric_preset'] = mp
metrics = ModuleType('evidently.metrics')
_metric_names = (
'ColumnSummaryMetric',
'ConflictTargetMetric',
'DatasetCorrelationsMetric',
'DatasetSummaryMetric',
'RegressionAbsPercentageErrorPlot',
'RegressionDummyMetric',
'RegressionErrorDistribution',
'RegressionErrorPlot',
'RegressionPerformanceMetrics',
'RegressionPredictedVsActualPlot',
'RegressionPredictedVsActualScatter',
)
for n in _metric_names:
setattr(metrics, n, _make_dummy(n))
sys.modules['evidently.metrics'] = metrics
base = ModuleType('evidently.metrics.base_metric')
def generate_column_metrics(*_a, **_k):
return []
base.generate_column_metrics = generate_column_metrics
sys.modules['evidently.metrics.base_metric'] = base
opt = ModuleType('evidently.options')
opt.ColorOptions = _make_dummy('ColorOptions')
sys.modules['evidently.options'] = opt
rep = ModuleType('evidently.report')
rep.Report = _make_dummy('Report')
sys.modules['evidently.report'] = rep
def pytest_configure(config) -> None: # noqa: ARG001
"""Register stub modules so imports used by production code resolve in CI/dev venvs."""
_stub_evidently()
if 'sientia_do.operations.df_preprocessor' not in sys.modules:
df_pre = ModuleType('sientia_do.operations.df_preprocessor')
def create_features(input_data, *_a, **_k):
return input_data
def limit_dataset(input_data, low_lim, upp_lim, *_a, **_k):
return input_data, low_lim, upp_lim
def treat_nan(input_data, *_a, **_k):
return input_data
df_pre.create_features = create_features
df_pre.limit_dataset = limit_dataset
df_pre.treat_nan = treat_nan
sys.modules['sientia_do.operations.df_preprocessor'] = df_pre
sys.modules.setdefault('sientia_do.operations', ModuleType('sientia_do.operations'))
if 'sientia_do.timeseries.analyzer' not in sys.modules:
ts_an = ModuleType('sientia_do.timeseries.analyzer')
class TimeSeriesDiscontinuityAnalyzer: # noqa: D401
"""Stub for tests."""
pass
ts_an.TimeSeriesDiscontinuityAnalyzer = TimeSeriesDiscontinuityAnalyzer
sys.modules['sientia_do.timeseries.analyzer'] = ts_an
sys.modules.setdefault('sientia_do.timeseries', ModuleType('sientia_do.timeseries'))