# RTD-only pins: mcp.types.TaskMetadata declares __pydantic_extra__ with
# an unqualified Dict forward-ref that recent pydantic strict-validates
# and rejects. We need BOTH: pydantic<2.13 (skips the strict check) AND
# mcp<1.20 (predates TaskMetadata entirely). mcp pulled in transitively
# via scitex-writer → fastmcp.
mcp<1.20
pydantic<2.13

sphinx>=7.0
sphinx-rtd-theme>=2.0
myst-parser>=2.0
sphinx-copybutton>=0.5
sphinx-autodoc-typehints>=1.25
nbsphinx>=0.9

# Core scientific packages
matplotlib
scipy
numpy
pandas
scikit-learn
seaborn
pillow
pyyaml
requests
natsort
ruamel.yaml
joblib
tqdm
xarray
h5py
markdown2

# Database
sqlalchemy
psycopg2-binary

# IO / parsing
openpyxl
xlrd
lxml
lxml_html_clean
beautifulsoup4

# CLI / tools
click
GitPython
ipython
pyperclip
readchar

# Ecosystem packages (for autodoc)
scitex-writer>=2.0
socialia>=0.3.0
figrecipe
crossref-local
# openalex-local  # Excluded: pulls awscli which causes pip resolver deadlock
scitex-linter
