PYTHON ?= python3 PROJECT_PYTHONPATH := src:. SMOKE_DIR := artifacts/local-smoke RESEARCH_DIR := artifacts/research-smoke PARITY_REPORT := artifacts/mock-parity/report.json TUSHARE_PROVIDER ?= data/qlib/tushare-csi500-2018-2025-v2 TUSHARE_SNAPSHOT ?= artifacts/local-tushare/scoped-source-manifest.json TUSHARE_EVIDENCE_DIR ?= artifacts/tushare .PHONY: test architecture standard bundle smoke verify research research-verify parity parity-verify doctor secret-scan status status-check notebook-check notebook-smoke tushare-check-root tushare-snapshot tushare-build tushare-verify tushare-lineage tushare-backtest tushare-replay local test: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m unittest discover -s tests -p '*.py' -q architecture: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant_os architecture check standard: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant_os standard validate PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant_os standard evaluate bundle: $(PYTHON) tools/bundle_platforms.py smoke: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant60 smoke --config configs/baseline.json --output $(SMOKE_DIR) verify: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant60 verify-manifest $(SMOKE_DIR)/manifest.json research: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant60 research-smoke --output $(RESEARCH_DIR) research-verify: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant60 verify-research-manifest $(RESEARCH_DIR)/manifest.json parity: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) tools/export_mock_parity.py export --output $(PARITY_REPORT) parity-verify: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) tools/export_mock_parity.py verify $(PARITY_REPORT) doctor: PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m quant_os doctor PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) tools/capability_probe.py secret-scan: $(PYTHON) tools/check_tracked_secrets.py status: $(PYTHON) tools/build_public_status.py status-check: $(PYTHON) tools/build_public_status.py --check notebook-check: $(PYTHON) tools/run_colab_notebook.py notebooks/quant_os_colab.ipynb notebook-smoke: $(PYTHON) tools/run_colab_notebook.py notebooks/quant_os_colab.ipynb --execute tushare-check-root: @test -n "$(TUSHARE_MIRROR_ROOT)" || (echo "set TUSHARE_MIRROR_ROOT=/path/to/tushare-mirror" >&2; exit 2) tushare-snapshot: tushare-check-root $(PYTHON) tools/tushare_snapshot.py \ --mirror-root "$(TUSHARE_MIRROR_ROOT)" \ --start 2018-01-01 \ --end 2025-12-31 \ --apis daily adj_factor trade_cal stock_basic index_daily index_weight \ --index-codes 000905.SH \ --output "$(TUSHARE_SNAPSHOT)" tushare-build: tushare-check-root $(PYTHON) tools/tushare_qlib.py build \ --mirror-root "$(TUSHARE_MIRROR_ROOT)" \ --output-dir "$(TUSHARE_PROVIDER)" \ --start 2018-01-01 \ --end 2025-12-31 \ --market-name tushare_csi500 \ --benchmark-index-code 000905.SH \ --universe-index-code 000905.SH \ --minimum-observations 60 \ --ohlc-policy fail \ --output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-build.json" tushare-verify: $(PYTHON) tools/tushare_qlib.py verify "$(TUSHARE_PROVIDER)" \ --output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-verify.json" tushare-lineage: $(PYTHON) tools/tushare_lineage.py \ --source-manifest "$(TUSHARE_SNAPSHOT)" \ --provider-dir "$(TUSHARE_PROVIDER)" \ --output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-lineage.json" tushare-backtest: PYTHONHASHSEED=0 PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m platforms.qlib_runner \ --provider-uri "$(TUSHARE_PROVIDER)" \ --market tushare_csi500 \ --benchmark SH000905 \ --start 2019-01-02 \ --end 2025-12-30 \ --feature-start 2018-01-02 \ --lookback 20 \ --topk 50 \ --n-drop 5 \ --rebalance weekly \ --output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-1.json" tushare-replay: tushare-backtest PYTHONHASHSEED=0 PYTHONPATH=$(PROJECT_PYTHONPATH) $(PYTHON) -m platforms.qlib_runner \ --provider-uri "$(TUSHARE_PROVIDER)" \ --market tushare_csi500 \ --benchmark SH000905 \ --start 2019-01-02 \ --end 2025-12-30 \ --feature-start 2018-01-02 \ --lookback 20 \ --topk 50 \ --n-drop 5 \ --rebalance weekly \ --output-json "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-2.json" cmp "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-1.json" \ "$(TUSHARE_EVIDENCE_DIR)/csi500-momentum-run-2.json" local: architecture standard test bundle smoke verify research research-verify parity parity-verify doctor secret-scan status-check notebook-check notebook-smoke