[build-system] requires = ["hatchling>=1.25"] build-backend = "hatchling.build" [project] name = "custom-models" version = "0.1.0" description = "E1 genus probe: torch models and train/validate/test wrapper" readme = "README.md" requires-python = ">=3.11" license = { text = "MIT" } authors = [{ name = "Tom Kasper" }] dependencies = [ "numpy>=2.0,<3", "polars>=1.0", "torch>=2.6", ] [project.optional-dependencies] pod5 = ["pod5"] dev = ["pytest>=8", "ruff>=0.8", "pod5"] [project.scripts] custom-models = "custom_models.cli:main" [tool.hatch.build.targets.wheel] packages = ["src/custom_models"] [tool.pytest.ini_options] testpaths = ["tests"] addopts = "-q" [tool.ruff] line-length = 100 src = ["src", "tests"] [tool.ruff.lint] select = ["E", "F", "W", "D", "B", "RUF", "TRY", "I"] ignore = [ "TRY003", # long messages are the run-artifact contract here "TRY004", # ValueError (not TypeError) on config/type misuse: deliberate "TRY300", "B905", # explicit strict in zip() is noisy for internal iteration ] [tool.ruff.lint.per-file-ignores] "tests/*" = ["D103", "D401"] # UV: dev/build environment resolves torch from the CPU wheel index so the # venv stays small. pip installs into the workflow's conda envs ignore this # (torch comes from conda there and satisfies the requirement). [tool.uv] index-strategy = "unsafe-best-match" [[tool.uv.index]] name = "pytorch-cpu" url = "https://download.pytorch.org/whl/cpu" explicit = true [tool.uv.sources] torch = { index = "pytorch-cpu" }