numpy>=1.26
pandas>=2.2
python-dateutil
python-dotenv
requests
tzdata

[ai]
anthropic>=0.30
openai>=1.0
google-genai>=1.0
pydantic>=2.0
pypdf>=3.0

[all]
cannlytics[ai,coa,datasets,firebase,qr,qr-cv,science,utils,web]

[coa]
pdfplumber>=0.10.0
Pillow>=10.0

[datasets]
pyarrow>=10.0

[dev]
cannlytics[test]
ruff>=0.4
build>=1.0
twine>=5.0

[firebase]
firebase-admin>=6.0
google-cloud-secret-manager>=2.0
google-cloud-firestore>=2.0

[qr]
pyzbar>=0.1.9

[qr-cv]
opencv-python>=4.0

[science]
matplotlib>=3.0
scikit-learn>=1.0
scikit-image>=0.20
statsmodels>=0.14
pyarrow>=10.0

[test]
cannlytics[ai,coa,datasets,firebase,science]
XlsxWriter>=3.0
beautifulsoup4>=4.0
openpyxl>=3.0
pytest>=7.0
pytest-cov>=4.0
reportlab>=4.0

[utils]
datasets>=2.0
fredapi>=0.5
googlemaps>=4.0
openpyxl>=3.0
XlsxWriter>=3.0
zipcodes>=1.2

[web]
beautifulsoup4>=4.0
selenium>=4.0
