[build-system]
requires = ["setuptools>=42", "wheel"]
build-backend = "setuptools.build_meta"

[project]
name = "skydiscover"
dynamic = ["version"]
description = "A Flexible Framework for AI-Driven Scientific and Algorithmic Discovery"
readme = "README.md"
requires-python = ">=3.10, <3.14"
license = {text = "Apache-2.0"}
dependencies = [
    "openai>=1.0.0",
    "pyyaml>=6.0",
    "tqdm>=4.64.0",
    "numpy>=1.22.0",
]

[project.optional-dependencies]
math = [
    "scipy>=1.11.0",
    "sympy>=1.14.0",
    "jax>=0.6.2",
    "optax>=0.2.6",
    "torch",
    "scikit-learn>=1.0.0",
    "numba",
    "pandas",
    "matplotlib",
    "plotly",
    "networkx",
    "cvxpy",
    "autograd",
    "pymoo",
    "PyWavelets",
]
adrs = [
    "numpy>=1.22.0",
    "pandas",
    "networkx>=3.2,<3.4",
    "torch",
]
external = [
    "openevolve",
    "gepa[full]",
    "litellm>=1.81",  # gepa[full] needs litellm, but uv override-dependencies strips the [full] extra
]
dev = [
    "pytest>=7.0.0",
    "pytest-asyncio>=0.21.0",
    "black>=22.0.0",
    "isort>=5.10.0",
    "mypy>=0.950",
    "requests>=2.28.0",
]
frontier-cs = [
    "anthropic>=0.74.0",
    "colorlog>=6.10.1",
    "datasets>=4.4.1",
    "google-genai>=1.55.0",
    "google-generativeai>=0.8.5",
    "numpy>=2.0.0",  # Frontier-CS requires numpy 2.x
    "python-dotenv>=1.2.1",
    "skypilot>=0.10.5",
]
prompt-optimization = [
    "dspy>=3.1.3",
    "litellm>=1.81",
    "bm25s>=0.3.0",
    "pystemmer>=2.2.0.3",
    "datasets>=4.5.0",
    "diskcache>=5.6.3",
    "ujson>=5.11.0",
]

[tool.uv]
override-dependencies = ["httpx>=0.28.1", "gepa>=0.0.26"]

[tool.uv.sources]
openevolve = { git = "https://github.com/algorithmicsuperintelligence/openevolve.git", branch = "main" }
gepa = { git = "https://github.com/gepa-ai/gepa.git", branch = "main" }

[tool.black]
line-length = 100
target-version = ['py310']
include = '\.pyi?$'

[tool.isort]
profile = "black"
line_length = 100

[tool.mypy]
python_version = "3.10"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true

[project.scripts]
skydiscover-run = "skydiscover.cli:main"
skydiscover-viewer = "skydiscover.extras.monitor.viewer:main"

[tool.pytest.ini_options]
markers = [
    "slow: marks tests as slow (deselect with '-m \"not slow\"')",
    "integration: marks tests as integration tests requiring external services"
]
addopts = "--strict-markers"

[tool.setuptools.packages.find]
include = ["skydiscover*"]

[tool.setuptools.package-data]
skydiscover = ["prompt/*/templates/*.txt", "extras/external/defaults/*.yaml", "extras/monitor/dashboard.html"]

[tool.setuptools.dynamic]
version = {attr = "skydiscover._version.__version__"}