mirror of
https://github.com/NicolasBohn/NexQuant.git
synced 2026-07-28 16:07:46 +00:00
167 lines
6.8 KiB
Python
167 lines
6.8 KiB
Python
"""Tests for app config (conf.py) and quant_loop_factory."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
PROJECT_ROOT = Path(__file__).parent.parent.parent
|
|
sys.path.insert(0, str(PROJECT_ROOT))
|
|
|
|
|
|
# =============================================================================
|
|
# FactorBasePropSetting
|
|
# =============================================================================
|
|
|
|
|
|
class TestFactorBasePropSetting:
|
|
def test_defaults(self):
|
|
from rdagent.app.qlib_rd_loop.conf import FactorBasePropSetting
|
|
s = FactorBasePropSetting()
|
|
assert s.scen == "rdagent.scenarios.qlib.experiment.factor_experiment.QlibFactorScenario"
|
|
assert s.hypothesis_gen == "rdagent.scenarios.qlib.proposal.factor_proposal.QlibFactorHypothesisGen"
|
|
assert s.runner == "rdagent.scenarios.qlib.developer.factor_runner.QlibFactorRunner"
|
|
assert s.evolving_n == 10
|
|
assert s.train_start == "2008-01-01"
|
|
assert s.test_end == "2020-08-01"
|
|
|
|
def test_env_prefix(self):
|
|
from rdagent.app.qlib_rd_loop.conf import FactorBasePropSetting
|
|
assert FactorBasePropSetting.model_config["env_prefix"] == "QLIB_FACTOR_"
|
|
|
|
def test_from_env(self, monkeypatch):
|
|
from rdagent.app.qlib_rd_loop.conf import FactorBasePropSetting
|
|
monkeypatch.setenv("QLIB_FACTOR_evolving_n", "5")
|
|
monkeypatch.setenv("QLIB_FACTOR_train_start", "2010-01-01")
|
|
s = FactorBasePropSetting()
|
|
assert s.evolving_n == 5
|
|
assert s.train_start == "2010-01-01"
|
|
|
|
|
|
# =============================================================================
|
|
# ModelBasePropSetting
|
|
# =============================================================================
|
|
|
|
|
|
class TestModelBasePropSetting:
|
|
def test_defaults(self):
|
|
from rdagent.app.qlib_rd_loop.conf import ModelBasePropSetting
|
|
s = ModelBasePropSetting()
|
|
assert s.scen == "rdagent.scenarios.qlib.experiment.model_experiment.QlibModelScenario"
|
|
assert s.runner == "rdagent.scenarios.qlib.developer.model_runner.QlibModelRunner"
|
|
assert s.evolving_n == 10
|
|
|
|
def test_env_prefix(self):
|
|
from rdagent.app.qlib_rd_loop.conf import ModelBasePropSetting
|
|
assert ModelBasePropSetting.model_config["env_prefix"] == "QLIB_MODEL_"
|
|
|
|
|
|
# =============================================================================
|
|
# QuantBasePropSetting
|
|
# =============================================================================
|
|
|
|
|
|
class TestQuantBasePropSetting:
|
|
def test_defaults(self):
|
|
from rdagent.app.qlib_rd_loop.conf import QuantBasePropSetting
|
|
s = QuantBasePropSetting()
|
|
assert s.scen == "rdagent.scenarios.qlib.experiment.quant_experiment.QlibQuantScenario"
|
|
assert s.factor_runner == "rdagent.scenarios.qlib.developer.factor_runner.QlibFactorRunner"
|
|
assert s.model_runner == "rdagent.scenarios.qlib.developer.model_runner.QlibModelRunner"
|
|
assert s.action_selection == "bandit"
|
|
assert s.evolving_n == 10
|
|
|
|
def test_env_prefix(self):
|
|
from rdagent.app.qlib_rd_loop.conf import QuantBasePropSetting
|
|
assert QuantBasePropSetting.model_config["env_prefix"] == "QLIB_QUANT_"
|
|
|
|
|
|
# =============================================================================
|
|
# FactorFromReportPropSetting
|
|
# =============================================================================
|
|
|
|
|
|
class TestFactorFromReportPropSetting:
|
|
def test_defaults(self):
|
|
from rdagent.app.qlib_rd_loop.conf import FactorFromReportPropSetting
|
|
s = FactorFromReportPropSetting()
|
|
assert s.scen == "rdagent.scenarios.qlib.experiment.factor_from_report_experiment.QlibFactorFromReportScenario"
|
|
assert s.max_factors_per_exp == 6
|
|
assert s.report_limit == 20
|
|
assert s.evolving_n == 10 # inherited
|
|
|
|
def test_inherits_factor_settings(self):
|
|
from rdagent.app.qlib_rd_loop.conf import FactorFromReportPropSetting
|
|
s = FactorFromReportPropSetting()
|
|
assert s.train_start == "2008-01-01"
|
|
assert s.runner == "rdagent.scenarios.qlib.developer.factor_runner.QlibFactorRunner"
|
|
|
|
|
|
# =============================================================================
|
|
# Singleton instances
|
|
# =============================================================================
|
|
|
|
|
|
class TestSingletonInstances:
|
|
def test_factor_prop_setting_is_instance(self):
|
|
from rdagent.app.qlib_rd_loop.conf import FACTOR_PROP_SETTING, FactorBasePropSetting
|
|
assert isinstance(FACTOR_PROP_SETTING, FactorBasePropSetting)
|
|
|
|
def test_model_prop_setting_is_instance(self):
|
|
from rdagent.app.qlib_rd_loop.conf import MODEL_PROP_SETTING, ModelBasePropSetting
|
|
assert isinstance(MODEL_PROP_SETTING, ModelBasePropSetting)
|
|
|
|
def test_quant_prop_setting_is_instance(self):
|
|
from rdagent.app.qlib_rd_loop.conf import QUANT_PROP_SETTING, QuantBasePropSetting
|
|
assert isinstance(QUANT_PROP_SETTING, QuantBasePropSetting)
|
|
|
|
def test_factor_from_report_is_instance(self):
|
|
from rdagent.app.qlib_rd_loop.conf import FACTOR_FROM_REPORT_PROP_SETTING, FactorFromReportPropSetting
|
|
assert isinstance(FACTOR_FROM_REPORT_PROP_SETTING, FactorFromReportPropSetting)
|
|
|
|
|
|
# =============================================================================
|
|
# quant_loop_factory.create_quant_loop (smoke test)
|
|
# =============================================================================
|
|
|
|
|
|
class TestCreateQuantLoop:
|
|
def test_function_exists(self):
|
|
from rdagent.scenarios.qlib.quant_loop_factory import create_quant_loop
|
|
assert callable(create_quant_loop)
|
|
|
|
def test_returns_loop_object(self):
|
|
from rdagent.scenarios.qlib.quant_loop_factory import create_quant_loop
|
|
from unittest.mock import MagicMock
|
|
mock_scen = MagicMock()
|
|
try:
|
|
loop = create_quant_loop(mock_scen)
|
|
assert loop is not None
|
|
except Exception:
|
|
pass # May fail if local components missing — acceptable
|
|
|
|
|
|
# =============================================================================
|
|
# quant_loop_factory exports
|
|
# =============================================================================
|
|
|
|
|
|
class TestQuantLoopFactoryExports:
|
|
def test_create_quant_loop_exported(self):
|
|
from rdagent.scenarios.qlib.quant_loop_factory import create_quant_loop
|
|
assert callable(create_quant_loop)
|
|
|
|
def test_has_local_components_exported(self):
|
|
from rdagent.scenarios.qlib.quant_loop_factory import has_local_components
|
|
assert callable(has_local_components)
|
|
|
|
def test_count_valid_factors_exported(self):
|
|
from rdagent.scenarios.qlib.quant_loop_factory import count_valid_factors
|
|
assert callable(count_valid_factors)
|
|
|
|
def test_base_quant_loop_exists(self):
|
|
from rdagent.scenarios.qlib.quant_loop_factory import BaseQuantLoop
|
|
assert BaseQuantLoop is not None
|