[build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" [project] name = "roverdevkit" version = "0.1.0" description = "ML-accelerated co-design of mobility and power subsystems for lunar micro-rovers" readme = "README.md" license = { file = "LICENSE" } requires-python = ">=3.11" authors = [ { name = "Autonomous Mission Systems Lab, Duke University" }, ] keywords = [ "lunar", "rover", "terramechanics", "tradespace", "surrogate", "multi-objective-optimization", "space-systems", ] classifiers = [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Topic :: Scientific/Engineering", ] dependencies = [ "numpy>=1.26", "scipy>=1.11", "pandas>=2.1", "scikit-learn>=1.4", "xgboost>=2.0", "pymoo>=0.6.1", "shap>=0.44", "optuna>=3.5", "matplotlib>=3.8", "plotly>=5.18", "pydantic>=2.5", "pyyaml>=6.0", "tqdm>=4.66", "pyarrow>=14", ] [project.optional-dependencies] torch = ["torch>=2.2"] webapp = [ # Browser-based tradespace tool backend. # Frontend toolchain (Node 20 LTS + npm) is managed separately under webapp/frontend/. "fastapi>=0.115", "uvicorn[standard]>=0.30", "sse-starlette>=2.1", "httpx>=0.27", "python-multipart>=0.0.9", ] dev = [ "pytest>=8.0", "pytest-cov>=4.1", "ruff>=0.3", "mypy>=1.8", "jupyterlab>=4.0", "nbstripout>=0.7", ] [project.urls] Repository = "https://github.com/Autonomous-Mission-Systems-Lab/roverdevkit" [tool.setuptools.packages.find] include = ["roverdevkit*"] [tool.setuptools.package-data] roverdevkit = ["py.typed"] [tool.ruff] line-length = 100 target-version = "py311" [tool.ruff.lint] select = ["E", "F", "W", "I", "N", "UP", "B", "SIM", "NPY"] ignore = ["E501"] [tool.ruff.lint.per-file-ignores] # Allow the conventional sklearn naming (`X_train`, `Y_pred`, `X_feas`) # in surrogate ML code; lowercase variants would obscure the standard # convention. "roverdevkit/surrogate/baselines.py" = ["N806"] "roverdevkit/surrogate/tuning.py" = ["N803", "N806"] "roverdevkit/surrogate/uncertainty.py" = ["N803", "N806"] "scripts/tune_baselines.py" = ["N806"] "scripts/calibrate_intervals.py" = ["N806"] "tests/test_surrogate_tuning.py" = ["N806"] "tests/test_surrogate_uncertainty.py" = ["N803", "N806"] "webapp/backend/services/predict.py" = ["N803"] "webapp/backend/routes/predict.py" = ["N806"] [tool.ruff.format] quote-style = "double" [tool.mypy] python_version = "3.11" ignore_missing_imports = true warn_unused_ignores = true warn_redundant_casts = true [tool.pytest.ini_options] testpaths = ["tests", "webapp/backend/tests"] # Repo root is added to sys.path so `import webapp.backend...` works # without installing the webapp package. The webapp is a deployment # artifact, not a Python distribution; it lives next to roverdevkit. pythonpath = ["."] addopts = "-ra --strict-markers" markers = [ "slow: slow tests (>10s)", "integration: full mission evaluator integration tests", ]