-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathpyproject.toml
More file actions
128 lines (116 loc) · 4.55 KB
/
Copy pathpyproject.toml
File metadata and controls
128 lines (116 loc) · 4.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
[project]
name = "fimbox"
version = "0.1.14"
description = "A modular open-source testbed framework to standardize Flood Inundation Mapping simulations and evaluation with custom datasets and hydrologic parameters with reproducible workflows."
authors = [
{ name = "Surface Dynamics Modeling Lab (SDML), The University of Alabama" },
{ name = "Supath Dhital", email = "sdhital@ua.edu" },
]
maintainers = [
{ name = "Surface Dynamics Modeling Lab (SDML), The University of Alabama" },
{ name = "Supath Dhital", email = "sdhital@ua.edu" },
]
keywords = ["flood inundation mapping", "terrain modeling", "hydrology", "hydraulics", "floodplain mapping", "cloud computing"]
license = { text = "GPL-3.0" }
readme = "README.md"
requires-python = ">=3.10,<3.13"
dependencies = [
"pynhd",
"pygeohydro",
"geopandas",
"tqdm>=4.67.1",
"osmnx>=2.0.7",
"py7zr>=1.1.0",
"dask[distributed]>=2024.1.0",
"rasterio>=1.3",
"scipy>=1.11",
"laspy>=2.0",
"lazrs>=0.6",
"whitebox>=2.3",
"fiona>=1.10.1",
"rasterstats>=0.19",
"teehr==0.5.0",
"numba>=0.60,<0.67",
"pooch>=1.8",
"s3fs",
"xarray",
"netCDF4",
"beautifulsoup4",
"requests",
"matplotlib",
"plotly",
"pystac-client>=0.8",
"planetary-computer>=1.0",
"odc-stac>=0.3",
"fimbench",
"fimeval",
# ngen hydrofabric: duckdb reads the community parquet mirror, row-group
# pruned so only the AOI's data is fetched. See fimbox.ngen.
"duckdb>=1.5",
]
[project.optional-dependencies]
dev = [
"pytest>=8.3,<9.2",
"ruff>=0.6",
]
# ngiab_data_preprocess (the NGIAB data preprocessor) is deliberately NOT
# declared here, not even as an extra. It cannot be co-resolved with fimbox:
# `uv lock` reports "fimbox[ngen] and teehr==0.5.0 are incompatible" for every
# published ngiab version, and it additionally pins tqdm==4.66.4 (fimbox needs
# >=4.67.1), dask==2024.4.1, xarray==2024.2.0, zarr==2.17.1, s3fs==2024.3.1,
# requests==2.33.0, and caps requires-python at <=3.12. teehr drives NWM
# retrospective retrieval, so it is the one that stays.
#
# fimbox.ngen therefore reads the hydrofabric from the community parquet mirror
# with duckdb and owns its own upstream traversal. When ngiab happens to be
# installed in the same environment, fimbox.ngen._ngiab detects it and defers to
# its network graph for exact parity; nothing requires it.
[project.urls]
Homepage = "https://github.com/sdmlua/fimbox"
Repository = "https://github.com/sdmlua/fimbox"
Issues = "https://github.com/sdmlua/fimbox/issues"
[tool.uv]
# fimbench -> arcgis -> pylerc. arcgis has no pin on pylerc, so uv otherwise
# picks pylerc 4.1.1 for Python >= 3.11, which ships wheels ONLY for
# manylinux_x86_64, macosx_15+_universal2, and win_amd64 -- and NO sdist. That
# leaves macOS 14 / Apple Silicon (and any other unlisted platform) unable to
# resolve, breaking `uv sync`/`uv run` for contributors on those machines.
# Constraining to < 4.1 selects pylerc 4.0, which ships an sdist and therefore
# builds on every platform. Constraint (not a direct dep): applies to the
# transitive pin without adding pylerc to fimbox's dependency surface.
constraint-dependencies = ["pylerc<4.1"]
[build-system]
requires = ["setuptools>=69.0", "setuptools-scm>=8.0"]
build-backend = "setuptools.build_meta"
[tool.setuptools]
include-package-data = true
[tool.setuptools.packages.find]
where = ["src"]
exclude = ["tests*"]
[tool.ruff]
line-length = 88
target-version = "py310"
src = ["src", "tests"]
[tool.ruff.lint]
select = ["E", "F", "I"] # pyflakes + pycodestyle errors + import sorting
# Don't flag line length: docstrings, long comments, URLs, and commented-out
# example blocks routinely exceed any fixed width, and enforcing it there adds
# noise without value. `ruff format` still keeps code lines sensibly wrapped.
ignore = ["E501"]
[tool.pytest.ini_options]
minversion = "6.0"
# The per-stage calibration tests re-run work the combined pipeline test already
# covers, so they sit out a normal run; `pytest -m step` selects them.
addopts = "-ra -q -m 'not step'"
testpaths = ["tests"]
markers = [
"step: a single calibration stage, run on its own for debugging",
]
# Silence third-party DeprecationWarnings we don't control: py3dep/pygeoutils
# and rioxarray emit `include_z` positional-arg warnings (legacy DEM path), and
# planetary-computer emits a Pydantic v2 class-based-config warning. None come
# from fimbox code; filtering keeps test output clean.
filterwarnings = [
"ignore:positional argument `include_z`:DeprecationWarning",
"ignore:Support for class-based `config`:DeprecationWarning",
]