mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-27 23:47:46 +00:00
210 lines
8.2 KiB
Python
210 lines
8.2 KiB
Python
"""Tests for factor_experiment, model_experiment, workspace."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
PROJECT_ROOT = Path(__file__).parent.parent.parent
|
|
sys.path.insert(0, str(PROJECT_ROOT))
|
|
|
|
_MOCK_ENV = "Mock environment info"
|
|
|
|
|
|
# =============================================================================
|
|
# QlibFactorScenario
|
|
# =============================================================================
|
|
|
|
|
|
class TestQlibFactorScenario:
|
|
@pytest.fixture(autouse=True)
|
|
def _mock_env(self, monkeypatch):
|
|
monkeypatch.setattr(
|
|
"rdagent.scenarios.qlib.experiment.factor_experiment.get_runtime_environment_by_env",
|
|
lambda env: _MOCK_ENV,
|
|
)
|
|
monkeypatch.setattr(
|
|
"rdagent.scenarios.qlib.experiment.factor_experiment.get_factor_env",
|
|
lambda: MagicMock(),
|
|
)
|
|
|
|
def test_background_returns_string(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
assert isinstance(scen.background, str)
|
|
assert len(scen.background) > 0
|
|
|
|
def test_get_source_data_desc(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
desc = scen.get_source_data_desc()
|
|
assert isinstance(desc, str)
|
|
|
|
def test_output_format(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
assert isinstance(scen.output_format, str)
|
|
|
|
def test_interface(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
assert isinstance(scen.interface, str)
|
|
|
|
def test_simulator(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
assert isinstance(scen.simulator, str)
|
|
|
|
def test_rich_style_description(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
assert isinstance(scen.rich_style_description, str)
|
|
|
|
def test_experiment_setting(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
assert isinstance(scen.experiment_setting, str)
|
|
|
|
def test_get_scenario_all_desc(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
desc = scen.get_scenario_all_desc()
|
|
assert "Background" in desc
|
|
assert "source data" in desc.lower()
|
|
assert "interface" in desc.lower()
|
|
assert "simulator" in desc.lower()
|
|
|
|
def test_get_scenario_all_desc_simple_background(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
desc = scen.get_scenario_all_desc(simple_background=True)
|
|
assert "Background" in desc
|
|
# simple_background returns ONLY background, without interface/simulator sections
|
|
|
|
def test_get_runtime_environment(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorScenario
|
|
scen = QlibFactorScenario()
|
|
env = scen.get_runtime_environment()
|
|
assert env == _MOCK_ENV
|
|
|
|
|
|
# =============================================================================
|
|
# QlibModelScenario
|
|
# =============================================================================
|
|
|
|
|
|
class TestQlibModelScenario:
|
|
@pytest.fixture(autouse=True)
|
|
def _mock_env(self, monkeypatch):
|
|
monkeypatch.setattr(
|
|
"rdagent.scenarios.qlib.experiment.model_experiment.get_runtime_environment_by_env",
|
|
lambda env: _MOCK_ENV,
|
|
)
|
|
monkeypatch.setattr(
|
|
"rdagent.scenarios.qlib.experiment.model_experiment.get_model_env",
|
|
lambda: MagicMock(),
|
|
)
|
|
|
|
def test_background_returns_string(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
assert isinstance(scen.background, str)
|
|
|
|
def test_source_data_raises_not_implemented(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
with pytest.raises(NotImplementedError):
|
|
_ = scen.source_data
|
|
|
|
def test_output_format(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
assert isinstance(scen.output_format, str)
|
|
|
|
def test_interface(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
assert isinstance(scen.interface, str)
|
|
|
|
def test_simulator(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
assert isinstance(scen.simulator, str)
|
|
|
|
def test_rich_style_description(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
assert isinstance(scen.rich_style_description, str)
|
|
|
|
def test_experiment_setting(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
assert isinstance(scen.experiment_setting, str)
|
|
|
|
def test_get_scenario_all_desc(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
desc = scen.get_scenario_all_desc()
|
|
assert "Background" in desc
|
|
assert "interface" in desc.lower()
|
|
assert "simulator" in desc.lower()
|
|
|
|
def test_get_runtime_environment(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelScenario
|
|
scen = QlibModelScenario()
|
|
env = scen.get_runtime_environment()
|
|
assert env == _MOCK_ENV
|
|
|
|
|
|
# =============================================================================
|
|
# QlibFactorExperiment
|
|
# =============================================================================
|
|
|
|
|
|
class TestQlibFactorExperiment:
|
|
def test_init_with_subtasks(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorExperiment
|
|
from rdagent.core.experiment import Task
|
|
exp = QlibFactorExperiment(sub_tasks=[Task(name="t1")])
|
|
assert exp.stdout == ""
|
|
assert exp.base_features == {}
|
|
assert exp.experiment_workspace is not None
|
|
|
|
def test_stdout_settable(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorExperiment
|
|
from rdagent.core.experiment import Task
|
|
exp = QlibFactorExperiment(sub_tasks=[Task(name="t1")])
|
|
exp.stdout = "test output"
|
|
assert exp.stdout == "test output"
|
|
|
|
def test_base_features_default_empty(self):
|
|
from rdagent.scenarios.qlib.experiment.factor_experiment import QlibFactorExperiment
|
|
from rdagent.core.experiment import Task
|
|
exp = QlibFactorExperiment(sub_tasks=[Task(name="t1")])
|
|
assert exp.base_feature_codes == {}
|
|
|
|
|
|
# =============================================================================
|
|
# QlibModelExperiment
|
|
# =============================================================================
|
|
|
|
|
|
class TestQlibModelExperiment:
|
|
def test_init_with_subtasks(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelExperiment
|
|
from rdagent.core.experiment import Task
|
|
exp = QlibModelExperiment(sub_tasks=[Task(name="t1")])
|
|
assert exp.stdout == ""
|
|
assert exp.base_features == {}
|
|
assert exp.experiment_workspace is not None
|
|
|
|
def test_stdout_settable(self):
|
|
from rdagent.scenarios.qlib.experiment.model_experiment import QlibModelExperiment
|
|
from rdagent.core.experiment import Task
|
|
exp = QlibModelExperiment(sub_tasks=[Task(name="t1")])
|
|
exp.stdout = "model output"
|
|
assert exp.stdout == "model output"
|