-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrequirements-ci.txt
More file actions
78 lines (73 loc) · 2.95 KB
/
Copy pathrequirements-ci.txt
File metadata and controls
78 lines (73 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# =====================================================================
# FinAI Research Workflow — minimal CI test dependencies
# =====================================================================
# CI runs ~741 pytest cases that only need:
# - numpy, pandas, matplotlib (data + plotting)
# - scipy, statsmodels (some econometrics tests)
# - networkx, scikit-learn (tooling)
# - requests, python-dotenv, pyyaml, pydantic (config + LLM stubs)
# - pytest + pytest-asyncio + pytest-cov + pytest-timeout (test runner)
# - ruff (lint)
#
# Heavyweight deps (streamlit, fastapi, jupyter, openai full, anthropic,
# pdfplumber, mcp, etc.) are NOT installed in CI. The CLI entry points
# and most MCP data-fetch code paths gracefully degrade to missing
# optional dep messages at runtime; tests do not exercise those paths.
#
# This file is the SINGLE SOURCE OF TRUTH for CI install.
# Workflows pin to it via: pip install -r requirements-ci.txt
# =====================================================================
# Core data + plotting
# Python 3.10-3.12 retain the validated NumPy 1.x ABI. Python 3.13 has no
# NumPy 1.26 wheels, so the matrix uses NumPy 2.x with linearmodels 7.x.
numpy>=1.26.0,<2.0; python_version < "3.13"
numpy>=2.1.0,<3.0; python_version >= "3.13"
pandas>=2.0.0,<3.0
scipy>=1.13.0,<2.0
statsmodels>=0.14.0,<1.0
scikit-learn>=1.4.0,<2.0
linearmodels>=6.0.0
networkx>=3.2.0,<4.0
# matplotlib pinned to <3.10 because matplotlib 3.10+ requires numpy>=2.0
# (see matplotlib 3.10 release notes). With numpy<2 we need matplotlib<3.10.
matplotlib>=3.8.0,<3.11
seaborn>=0.13.0,<1.0
graphviz>=0.20.0,<1.0
# tenacity required by data_fetcher.py / retry_utils.py — scripts/ imports
# it unconditionally at module top, so even though `retry_utils.py` is
# "optional" semantically, the module-level import fails if missing.
# Mirrors pyproject.toml `dependencies` entry.
tenacity>=8.2.0,<10.0
# Config / LLM stubs
requests>=2.31.0,<3.0
python-dotenv>=1.0.0,<2.0
pyyaml>=6.0.0,<7.0
pydantic>=2.0.0,<3.0
httpx>=0.27.0,<1.0
openai>=1.0.0,<2.0
anthropic>=0.30.0,<1.0
tiktoken>=0.7.0,<1.0
tabulate>=0.9.0
openpyxl>=3.1.0
psutil>=5.9.0
# duckdb is required by scripts/core/data_cache.py for the persistent
# cache layer. Without it, data_cache silently degrades to no-op and
# 6 tests in tests/test_data_cache.py fail. Pin to pyproject.toml range.
duckdb>=0.9.0,<2.0
# docx is required by tests/test_generate_docx_tables_unit.py for the
# docx table generation tests. The script itself conditionally imports,
# but the test imports docx directly.
python-docx>=1.0.0
# Test runner
pytest>=7.4.0,<10.0
pytest-asyncio>=0.23.0,<2.0
pytest-cov>=4.1.0,<8.0
pytest-timeout>=2.2.0
# MCP (P3-audit-2026-07-04: 加入让 test_mcp_servers_import.py 真正跑 import 而非 skip)
# 之前注释说 "mcp 是 heavyweight",但实际 mcp 2.1MB,且能让 43 个 server.py 的
# 1235 stmts 进入 coverage 覆盖。如果后续想瘦身,可以单独砍。
mcp>=1.0.0,<2.0
# Lint
ruff>=0.4.0
pip-audit
bandit>=1.9.0,<2.0