Files
NexQuant/test/qlib/test_everything_else.py
T
TPTBusiness cbe1c52e00 refactor: rename project from Predix to NexQuant
Rename all source files, scripts, tests, documentation, and configuration
from Predix/predix to NexQuant/nexquant across the entire codebase.
2026-05-09 17:48:22 +02:00

222 lines
7.8 KiB
Python

"""Tests for ALL remaining untested modules: scripts, web, log, loader, document_reader, gt_code."""
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))
# =============================================================================
# model_coder/gt_code.py — ground truth models
# =============================================================================
class TestGTModels:
def test_file_exists(self):
f = PROJECT_ROOT / "rdagent/components/coder/model_coder/gt_code.py"
assert f.exists()
content = f.read_text()
assert len(content) > 0
# =============================================================================
# log sub-modules
# =============================================================================
class TestLogModules:
def test_storage_importable(self):
from rdagent.log.storage import FileStorage
assert FileStorage is not None
def test_conf_importable(self):
from rdagent.log.conf import LOG_SETTINGS
assert LOG_SETTINGS is not None
def test_timer_importable(self):
from rdagent.log.timer import RD_Agent_TIMER_wrapper
assert RD_Agent_TIMER_wrapper is not None
def test_base_importable(self):
from rdagent.log.base import Storage
assert Storage is not None
def test_utils_importable(self):
from rdagent.log.utils import get_caller_info
assert callable(get_caller_info)
def test_mle_summary_importable(self):
from rdagent.log import mle_summary
assert mle_summary is not None
# =============================================================================
# loader modules
# =============================================================================
class TestLoaderModules:
def test_importable(self):
from rdagent.components.loader.experiment_loader import Loader
assert Loader is not None
def test_factor_experiment_loader_available(self):
from rdagent.components.loader.experiment_loader import FactorExperimentLoader
assert FactorExperimentLoader is not None
# =============================================================================
# document_reader
# =============================================================================
class TestDocumentReader:
def test_importable(self):
from rdagent.components.document_reader.document_reader import (
load_and_process_pdfs_by_langchain,
extract_first_page_screenshot_from_pdf,
)
assert callable(load_and_process_pdfs_by_langchain)
# =============================================================================
# model_loader
# =============================================================================
class TestModelLoader:
def test_load_model_importable(self):
from rdagent.components.model_loader import load_model, list_available_models
assert callable(load_model)
assert callable(list_available_models)
def test_list_available_models_returns_dict(self):
from rdagent.components.model_loader import list_available_models
models = list_available_models()
assert isinstance(models, dict)
assert "local" in models or "standard" in models
# =============================================================================
# web/dashboard_api.py
# =============================================================================
class TestWebDashboard:
def test_importable(self):
sys.path.insert(0, str(PROJECT_ROOT / "web"))
try:
import dashboard_api
assert dashboard_api is not None
except ImportError as e:
pytest.skip(f"dashboard dependency missing: {e}")
# =============================================================================
# scripts/ — import tests (these are operational scripts, not libraries)
# =============================================================================
class TestScriptsImportable:
def test_nexquant_full_eval(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/nexquant_full_eval.py")
assert spec is not None
def test_extract_results(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/extract_results.py")
assert spec is not None
def test_create_strategy(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/create_strategy.py")
assert spec is not None
def test_debug_backtest(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/debug_backtest.py")
assert spec is not None
def test_kronos_factor_gen(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/kronos_factor_gen.py")
assert spec is not None
def test_kronos_model_eval(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/kronos_model_eval.py")
assert spec is not None
def test_nexquant_add_risk_management(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/nexquant_add_risk_management.py")
assert spec is not None
def test_nexquant_gen_strategies(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/nexquant_gen_strategies_real_bt.py")
assert spec is not None
def test_nexquant_quick_daytrading(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/nexquant_quick_daytrading.py")
assert spec is not None
def test_nexquant_rebacktest_unified(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/nexquant_rebacktest_unified.py")
assert spec is not None
def test_realistic_backtest_all(self):
import importlib
spec = importlib.util.spec_from_file_location("m", PROJECT_ROOT / "scripts/realistic_backtest_all.py")
assert spec is not None
# =============================================================================
# fx_validator agents (langchain_openai needed for import)
# =============================================================================
class TestFXValidatorAgents:
def test_session_analyst_exists(self):
f = PROJECT_ROOT / "rdagent/scenarios/qlib/fx_validator/agents/analysts/session_analyst.py"
assert f.exists()
def test_macro_analyst_exists(self):
f = PROJECT_ROOT / "rdagent/scenarios/qlib/fx_validator/agents/analysts/macro_analyst.py"
assert f.exists()
def test_bull_researcher_exists(self):
f = PROJECT_ROOT / "rdagent/scenarios/qlib/fx_validator/agents/researchers/bull_researcher.py"
assert f.exists()
def test_bear_researcher_exists(self):
f = PROJECT_ROOT / "rdagent/scenarios/qlib/fx_validator/agents/researchers/bear_researcher.py"
assert f.exists()
def test_fx_trader_exists(self):
f = PROJECT_ROOT / "rdagent/scenarios/qlib/fx_validator/agents/trader/fx_trader.py"
assert f.exists()
# =============================================================================
# patterns/ — patches
# =============================================================================
class TestPatches:
def test_patches_dir_exists(self):
d = PROJECT_ROOT / "patches"
assert d.exists()
def test_home_page_importable(self):
from rdagent.app.qlib_rd_loop.quant import main as fin_quant
assert callable(fin_quant)