[project]
name = "giant"
version = "0.1.0"
description = "Geant4 step-function surrogate via conditional flow matching"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "numpy>=1.26,<3",
    "pandas>=2.2,<4",
    "pyarrow>=16,<25",
    "tqdm>=4.60,<5",
    "typer>=0.12,<1",
    "pyyaml>=6,<7",
]

[project.optional-dependencies]
cpu = [
    "torch>=2.3,<2.4",
]
cuda = [
    "torch>=2.3,<2.4",
]
dev = [
    "pytest>=8,<10",
    "ruff>=0.15,<1",
    "ty>=0.0.50,<0.1",
    "giant[convert,analysis,geometry]",
]
geometry = [
    "scikit-learn>=1.4,<2",
]
convert = [
    "uproot>=5.3,<6",
    "awkward>=2.6,<3",
    "polars>=1.0,<2",
]
analysis = [
    "matplotlib>=3.8,<4",
    "polars>=1.0,<2",
    "ipykernel>=7.3.0",
]

[project.scripts]
giant = "giant.cli:app"
dwarf = "scripts.dwarf:app"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.hatch.build.targets.wheel]
packages = ["giant", "scripts"]

[tool.uv]
conflicts = [
    [
        { extra = "cpu" },
        { extra = "cuda" },
    ],
]

[tool.uv.sources]
torch = [
    { index = "pytorch-cpu", extra = "cpu" },
    { index = "pytorch-cu118", extra = "cuda" },
]

[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true

[[tool.uv.index]]
name = "pytorch-cu118"
url = "https://download.pytorch.org/whl/cu118"
explicit = true
