python-dotenv>=1.0.0
setuptools>=70.0
six>=1.16
typing_extensions>=4.12
pandas<3.0,>=2.0
numpy<3.0,>=1.24
numba>=0.60.0
pandas-stubs
TA-Lib
QuantStats>=0.0.77
backtrader>=1.9.78
futu-api
akshare>=1.18
tqsdk>=3.9
tushare
composio_crewai
ccxt>=4.0
loguru>=0.7.2
pyyaml>=6.0
requests>=2.31
tabulate>=0.9.0
tzlocal
pytz
tzdata
aiohttp>=3.9
aiohappyeyeballs>=2.6
fastapi>=0.115
uvicorn>=0.25
Flask>=3.0
flask_cors>=6.0
Werkzeug>=3.0
starlette==0.50.0
pyqtgraph>=0.13
qdarkstyle>=3.1
qtpy>=2.4
matplotlib>=3.8
plotly>=6.5
seaborn>=0.13
crewai
langchain>=0.1
langchain-openai>=0.1
litellm==1.83.7
celery>=5.3
celery-types
django-celery-beat
redis>=7.0
Django>=5.0
djangorestframework
django-timezone-field
django-crontab
black
flake8
isort
mypy
pytest
pytest-html

[:sys_platform == "darwin"]
pyobjc-core
pyobjc-framework-Cocoa
pyobjc-framework-Quartz
pyobjc-framework-Security
pywebview
PySide6

[ai]
fwquant[core]
crewai
langchain>=0.1
langchain-openai>=0.1
litellm==1.83.7

[core]
python-dotenv>=1.0.0
setuptools>=70.0
six>=1.16
typing_extensions>=4.12
pandas<3.0,>=2.0
numpy<3.0,>=1.24
numba>=0.60.0
pandas-stubs
TA-Lib
QuantStats>=0.0.77
backtrader>=1.9.78
futu-api
akshare>=1.18
tqsdk>=3.9
tushare
composio_crewai
ccxt>=4.0
loguru>=0.7.2
pyyaml>=6.0
requests>=2.31
tabulate>=0.9.0
tzlocal
pytz
tzdata
aiohttp>=3.9
aiohappyeyeballs>=2.6

[dev]
fwquant[core]
black
flake8
isort
mypy
pytest
pytest-html

[django]
fwquant[core]
Django>=5.0
djangorestframework
django-timezone-field
django-crontab

[gui]
fwquant[core]
pyqtgraph>=0.13
qdarkstyle>=3.1
qtpy>=2.4
matplotlib>=3.8
plotly>=6.5
seaborn>=0.13

[macos]
fwquant[core]

[macos:sys_platform == "darwin"]
pyobjc-core
pyobjc-framework-Cocoa
pyobjc-framework-Quartz
pyobjc-framework-Security
pywebview
PySide6

[minimal]
fwquant[ai,core,web]

[task]
fwquant[core]
celery>=5.3
celery-types
django-celery-beat
redis>=7.0

[web]
fwquant[core]
fastapi>=0.115
uvicorn>=0.25
Flask>=3.0
flask_cors>=6.0
Werkzeug>=3.0
starlette==0.50.0
