pyproject.toml

# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (C) 2025 SWGY, Inc
[project]
name = "pressure-wave"
version = "0.3.0"
description = "Warp-accelerated blast-overpressure ray-tracing simulation for helmet/armor geometry."
requires-python = ">=3.11"
license = "AGPL-3.0-or-later"

# Host-side deps. The GPU ray-tracing backend (NVIDIA Warp) is a platform-
# specific wheel installed via the `cuda` extra: `uv sync --extra cuda`.
dependencies = [
    "numpy>=1.26",
    "trimesh>=4.6",
    "pyyaml>=6.0",
    "scipy>=1.11",          # trimesh.fix_normals() needs scipy.sparse.csgraph
]

[project.optional-dependencies]
# GPU backend for the DGX Spark / GB10 (aarch64 + CUDA). PyPI serves the
# CUDA-12.9 build (works on Blackwell/sm_121); for the CUDA-13 stack use the
# official aarch64 wheel instead:
#   uv pip install \
#     https://github.com/NVIDIA/warp/releases/download/v1.15.0/warp_lang-1.15.0+cu13-py3-none-manylinux_2_34_aarch64.whl
# Smoke-test first: python -c "import warp as wp; wp.init(); print(wp.get_cuda_devices())"
cuda = ["warp-lang>=1.15"]

[dependency-groups]
# mpmath: exact Legendre-Q wedge oracle in tests/test_diffraction.py
dev = ["pytest>=8.0", "mpmath>=1.3"]
# Interactive walkthrough (Exploration.ipynb): uv sync --group notebook --extra cuda
notebook = ["jupyterlab>=4.2", "matplotlib>=3.8"]

[tool.uv]
# Flat-module application (modules live at the repo root, not an installed
# package), so uv manages the environment without trying to build a wheel.
package = false

[tool.pytest.ini_options]
pythonpath = ["."]     # make the root-level modules importable from tests/
testpaths = ["tests"]