swatplus-builder 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- swatplus_builder-0.5.0/.gitignore +150 -0
- swatplus_builder-0.5.0/CHANGELOG.md +70 -0
- swatplus_builder-0.5.0/CITATION.cff +59 -0
- swatplus_builder-0.5.0/LICENSE +21 -0
- swatplus_builder-0.5.0/PKG-INFO +480 -0
- swatplus_builder-0.5.0/README.md +376 -0
- swatplus_builder-0.5.0/pyproject.toml +158 -0
- swatplus_builder-0.5.0/src/swatplus_builder/__init__.py +26 -0
- swatplus_builder-0.5.0/src/swatplus_builder/artifacts/__init__.py +34 -0
- swatplus_builder-0.5.0/src/swatplus_builder/artifacts/hashing.py +49 -0
- swatplus_builder-0.5.0/src/swatplus_builder/artifacts/models.py +128 -0
- swatplus_builder-0.5.0/src/swatplus_builder/artifacts/store.py +198 -0
- swatplus_builder-0.5.0/src/swatplus_builder/autoresearch/__init__.py +47 -0
- swatplus_builder-0.5.0/src/swatplus_builder/autoresearch/loop.py +411 -0
- swatplus_builder-0.5.0/src/swatplus_builder/autoresearch/surrogate.py +557 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/__init__.py +52 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/bridge_diagnostics.py +339 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/calibrator.py +1172 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/diagnostic_calibrator.py +1025 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/forward.py +472 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/locked_benchmark.py +1433 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/nwis.py +61 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/pyswatplus_runtime.py +93 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/real_engine.py +467 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/report.py +476 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/sensitivity_screen.py +126 -0
- swatplus_builder-0.5.0/src/swatplus_builder/calibration/spotpy_adapter.py +144 -0
- swatplus_builder-0.5.0/src/swatplus_builder/cli.py +1831 -0
- swatplus_builder-0.5.0/src/swatplus_builder/config.py +72 -0
- swatplus_builder-0.5.0/src/swatplus_builder/db/__init__.py +1 -0
- swatplus_builder-0.5.0/src/swatplus_builder/db/mock_datasets.py +470 -0
- swatplus_builder-0.5.0/src/swatplus_builder/db/project.py +275 -0
- swatplus_builder-0.5.0/src/swatplus_builder/db/schema.py +367 -0
- swatplus_builder-0.5.0/src/swatplus_builder/db/seed.py +132 -0
- swatplus_builder-0.5.0/src/swatplus_builder/db/writer.py +415 -0
- swatplus_builder-0.5.0/src/swatplus_builder/diagnostics.py +822 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/__init__.py +5 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/api.py +726 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/Pipfile +13 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/__init__.py +0 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/create_databases.py +119 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/get_swatplus_check.py +902 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/import_export_data.py +249 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/import_gis.py +1644 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/import_gis_legacy.py +2007 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/import_weather.py +1466 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/load_scenarios.py +97 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/read_output.py +432 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/read_output_legacy.py +350 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/reimport_gis.py +100 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/run_all.py +105 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/setup_project.py +154 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/update_datasets.py +485 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/update_project.py +1132 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/actions/write_files.py +1098 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/__init__.py +0 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/__init__.py +0 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/base.py +8 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/basin.py +77 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/change.py +10 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/climate.py +29 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/decision_table.py +41 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/definitions.py +88 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/hru_parm_db.py +165 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/init.py +21 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/lum.py +70 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/ops.py +61 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/setup.py +732 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/soils.py +41 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/datasets/structural.py +78 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/lib.py +95 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/__init__.py +0 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/aquifer.py +80 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/base.py +8 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/basin.py +78 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/change.py +147 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/channel.py +146 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/climate.py +110 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/config.py +79 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/connect.py +148 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/decision_table.py +41 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/dr.py +93 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/exco.py +93 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/gis.py +125 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/gwflow.py +160 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/hru.py +52 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/hru_parm_db.py +172 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/hydrology.py +62 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/init.py +240 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/link.py +21 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/lum.py +74 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/ops.py +61 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/recall.py +35 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/regions.py +134 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/reservoir.py +105 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/routing_unit.py +57 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/salts.py +467 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/setup.py +307 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/simulation.py +114 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/soils.py +53 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/structural.py +78 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/project/water_rights.py +49 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/soils.py +207 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/vardefs.py +50 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/database/wgn.py +139 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/__init__.py +0 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/aquifer.py +124 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/base.py +497 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/basin.py +55 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/change.py +405 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/channel.py +178 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/climate.py +261 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/config.py +350 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/connect.py +329 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/decision_table.py +241 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/dr.py +51 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/exco.py +195 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/gwflow.py +717 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/hru.py +109 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/hru_parm_db.py +177 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/hydrology.py +100 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/init.py +272 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/lum.py +373 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/ops.py +259 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/recall.py +199 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/regions.py +132 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/reservoir.py +223 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/routing_unit.py +136 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/salts.py +1152 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/simulation.py +284 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/soils.py +114 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/structural.py +243 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/fileio/water_rights.py +170 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/get-pip.py +32992 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/helpers/executable_api.py +19 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/helpers/table_mapper.py +186 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/helpers/utils.py +193 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/python-build-linux.sh +3 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/python-build-mac.sh +3 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/python-build-windows.bat +2 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/aquifer.py +340 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/auto_complete.py +261 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/basin.py +23 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/change.py +362 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/channel.py +461 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/climate.py +457 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/config.py +17 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/decision_table.py +296 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/defaults.py +608 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/definitions.py +60 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/gwflow.py +565 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/hru.py +306 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/hru_lte.py +212 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/hru_parm_db.py +336 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/hydrology.py +110 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/init.py +478 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/lum.py +504 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/ops.py +252 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/recall.py +331 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/regions.py +132 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/reservoir.py +723 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/routing_unit.py +248 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/salts.py +871 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/setup.py +458 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/soils.py +119 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/structural.py +212 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/rest/water_rights.py +106 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/swatplus_api.py +206 -0
- swatplus_builder-0.5.0/src/swatplus_builder/editor/vendored/swatplus_rest_api.py +73 -0
- swatplus_builder-0.5.0/src/swatplus_builder/errors.py +43 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/__init__.py +0 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/parameter_bridge.py +476 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/routing_fixes.py +303 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/topology_converter.py +367 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/verify_conversion.py +246 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/warmup.py +182 -0
- swatplus_builder-0.5.0/src/swatplus_builder/full_mode/water_balance_gate.py +354 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/__init__.py +17 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/complexity.py +130 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/delineation.py +1172 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/hru.py +910 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/landuse.py +178 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/nldi_fallback.py +72 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/overlay_repair.py +286 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/soil.py +574 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/tables.py +653 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/terrain.py +61 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/topology.py +84 -0
- swatplus_builder-0.5.0/src/swatplus_builder/gis/validate.py +286 -0
- swatplus_builder-0.5.0/src/swatplus_builder/mcp/__init__.py +5 -0
- swatplus_builder-0.5.0/src/swatplus_builder/mcp/server.py +754 -0
- swatplus_builder-0.5.0/src/swatplus_builder/orchestrate.py +280 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/__init__.py +35 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/et_diagnostics.py +344 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/eval.py +682 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/mass_diagnostics.py +279 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/mass_trace.py +2496 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/metadata.py +85 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/metrics.py +279 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/__init__.py +35 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/fdc.py +50 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/hydrograph.py +62 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/residuals.py +51 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/scatter.py +55 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/seasonal.py +55 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/soil.py +78 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/spatial.py +107 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/style.py +32 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/utils.py +117 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/plots/wrapper.py +175 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/reader.py +305 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/realism.py +423 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/summary.py +202 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/volume_diagnostics.py +3109 -0
- swatplus_builder-0.5.0/src/swatplus_builder/output/weather_forcing.py +352 -0
- swatplus_builder-0.5.0/src/swatplus_builder/params/__init__.py +37 -0
- swatplus_builder-0.5.0/src/swatplus_builder/params/governance.py +219 -0
- swatplus_builder-0.5.0/src/swatplus_builder/params/registry.py +452 -0
- swatplus_builder-0.5.0/src/swatplus_builder/ref/__init__.py +38 -0
- swatplus_builder-0.5.0/src/swatplus_builder/ref/bootstrap.py +308 -0
- swatplus_builder-0.5.0/src/swatplus_builder/ref/catalog.py +99 -0
- swatplus_builder-0.5.0/src/swatplus_builder/run/__init__.py +18 -0
- swatplus_builder-0.5.0/src/swatplus_builder/run/swatplus.py +851 -0
- swatplus_builder-0.5.0/src/swatplus_builder/sensitivity.py +217 -0
- swatplus_builder-0.5.0/src/swatplus_builder/skills/__init__.py +17 -0
- swatplus_builder-0.5.0/src/swatplus_builder/skills/swatplus_playbook/README.md +21 -0
- swatplus_builder-0.5.0/src/swatplus_builder/skills/swatplus_playbook/__init__.py +13 -0
- swatplus_builder-0.5.0/src/swatplus_builder/skills/swatplus_playbook/rules.py +64 -0
- swatplus_builder-0.5.0/src/swatplus_builder/skills/swatplus_playbook/schemas.py +54 -0
- swatplus_builder-0.5.0/src/swatplus_builder/skills/swatplus_playbook/update.py +41 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/__init__.py +53 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/builder.py +157 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/gnatsgo.py +763 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/models.py +36 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/params.py +330 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/pc.py +242 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/plot.py +167 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/sda.py +277 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/soilgrids.py +114 -0
- swatplus_builder-0.5.0/src/swatplus_builder/soil/writer.py +260 -0
- swatplus_builder-0.5.0/src/swatplus_builder/tools/__init__.py +18 -0
- swatplus_builder-0.5.0/src/swatplus_builder/tools/agent.py +159 -0
- swatplus_builder-0.5.0/src/swatplus_builder/types.py +525 -0
- swatplus_builder-0.5.0/src/swatplus_builder/validation/__init__.py +6 -0
- swatplus_builder-0.5.0/src/swatplus_builder/validation/runner.py +403 -0
- swatplus_builder-0.5.0/src/swatplus_builder/weather/__init__.py +29 -0
- swatplus_builder-0.5.0/src/swatplus_builder/weather/daymet.py +459 -0
- swatplus_builder-0.5.0/src/swatplus_builder/weather/gridmet.py +510 -0
- swatplus_builder-0.5.0/src/swatplus_builder/weather/synthetic.py +253 -0
- swatplus_builder-0.5.0/src/swatplus_builder/weather/wgn.py +33 -0
- swatplus_builder-0.5.0/src/swatplus_builder/weather/writer.py +369 -0
- swatplus_builder-0.5.0/src/swatplus_builder/workflows/__init__.py +5 -0
- swatplus_builder-0.5.0/src/swatplus_builder/workflows/contracts.py +108 -0
- swatplus_builder-0.5.0/src/swatplus_builder/workflows/full_build.py +347 -0
- swatplus_builder-0.5.0/src/swatplus_builder/workflows/usgs_e2e.py +2251 -0
- swatplus_builder-0.5.0/tests/__init__.py +0 -0
- swatplus_builder-0.5.0/tests/fixtures/README.md +12 -0
- swatplus_builder-0.5.0/tests/test_artifact_hashing.py +70 -0
- swatplus_builder-0.5.0/tests/test_artifact_models.py +77 -0
- swatplus_builder-0.5.0/tests/test_artifact_store.py +82 -0
- swatplus_builder-0.5.0/tests/test_autoresearch_loop.py +200 -0
- swatplus_builder-0.5.0/tests/test_autoresearch_surrogate.py +199 -0
- swatplus_builder-0.5.0/tests/test_bridge_diagnostics.py +366 -0
- swatplus_builder-0.5.0/tests/test_calibration_calibrator.py +421 -0
- swatplus_builder-0.5.0/tests/test_calibration_forward.py +127 -0
- swatplus_builder-0.5.0/tests/test_calibration_nwis.py +30 -0
- swatplus_builder-0.5.0/tests/test_calibration_pyswatplus_integration.py +66 -0
- swatplus_builder-0.5.0/tests/test_calibration_pyswatplus_runtime.py +39 -0
- swatplus_builder-0.5.0/tests/test_calibration_real_engine.py +849 -0
- swatplus_builder-0.5.0/tests/test_calibration_report.py +151 -0
- swatplus_builder-0.5.0/tests/test_calibration_spotpy_adapter.py +87 -0
- swatplus_builder-0.5.0/tests/test_ci_routing_regression.py +126 -0
- swatplus_builder-0.5.0/tests/test_cli_calibrate.py +354 -0
- swatplus_builder-0.5.0/tests/test_cli_diagnose.py +32 -0
- swatplus_builder-0.5.0/tests/test_cli_inspect.py +50 -0
- swatplus_builder-0.5.0/tests/test_cli_sensitivity.py +71 -0
- swatplus_builder-0.5.0/tests/test_cli_validate.py +48 -0
- swatplus_builder-0.5.0/tests/test_cli_version_health.py +226 -0
- swatplus_builder-0.5.0/tests/test_cli_workflow.py +319 -0
- swatplus_builder-0.5.0/tests/test_container_baseline.py +119 -0
- swatplus_builder-0.5.0/tests/test_curated_basins.py +19 -0
- swatplus_builder-0.5.0/tests/test_diagnostics.py +222 -0
- swatplus_builder-0.5.0/tests/test_editor_api.py +507 -0
- swatplus_builder-0.5.0/tests/test_et_diagnostics.py +112 -0
- swatplus_builder-0.5.0/tests/test_full_build.py +413 -0
- swatplus_builder-0.5.0/tests/test_full_mode_warmup.py +39 -0
- swatplus_builder-0.5.0/tests/test_gis_delineation_preflight.py +276 -0
- swatplus_builder-0.5.0/tests/test_gis_hru.py +629 -0
- swatplus_builder-0.5.0/tests/test_gis_landuse.py +124 -0
- swatplus_builder-0.5.0/tests/test_gis_snap_max_acc.py +208 -0
- swatplus_builder-0.5.0/tests/test_gis_soil.py +600 -0
- swatplus_builder-0.5.0/tests/test_gis_tables.py +422 -0
- swatplus_builder-0.5.0/tests/test_locked_benchmark.py +1119 -0
- swatplus_builder-0.5.0/tests/test_mass_diagnostics.py +68 -0
- swatplus_builder-0.5.0/tests/test_mcp_server.py +377 -0
- swatplus_builder-0.5.0/tests/test_nldi_fallback.py +98 -0
- swatplus_builder-0.5.0/tests/test_orchestrate.py +246 -0
- swatplus_builder-0.5.0/tests/test_output_eval.py +512 -0
- swatplus_builder-0.5.0/tests/test_output_metadata.py +47 -0
- swatplus_builder-0.5.0/tests/test_output_plots_utils.py +49 -0
- swatplus_builder-0.5.0/tests/test_output_reader.py +376 -0
- swatplus_builder-0.5.0/tests/test_output_realism.py +216 -0
- swatplus_builder-0.5.0/tests/test_overlay_repair.py +142 -0
- swatplus_builder-0.5.0/tests/test_parameter_bridge.py +342 -0
- swatplus_builder-0.5.0/tests/test_parameter_registry.py +128 -0
- swatplus_builder-0.5.0/tests/test_phase2_step7.py +316 -0
- swatplus_builder-0.5.0/tests/test_real_basin_e2e.py +153 -0
- swatplus_builder-0.5.0/tests/test_routing_fixes.py +94 -0
- swatplus_builder-0.5.0/tests/test_run_multibasin_e2e.py +168 -0
- swatplus_builder-0.5.0/tests/test_run_swatplus.py +629 -0
- swatplus_builder-0.5.0/tests/test_script_policy.py +2689 -0
- swatplus_builder-0.5.0/tests/test_sensitivity_bridge.py +52 -0
- swatplus_builder-0.5.0/tests/test_sensitivity_screen.py +75 -0
- swatplus_builder-0.5.0/tests/test_skill_md.py +63 -0
- swatplus_builder-0.5.0/tests/test_smoke.py +594 -0
- swatplus_builder-0.5.0/tests/test_soil_builder.py +159 -0
- swatplus_builder-0.5.0/tests/test_soil_gnatsgo.py +405 -0
- swatplus_builder-0.5.0/tests/test_soil_params.py +254 -0
- swatplus_builder-0.5.0/tests/test_soil_sda.py +71 -0
- swatplus_builder-0.5.0/tests/test_soil_writer.py +245 -0
- swatplus_builder-0.5.0/tests/test_soilgrids.py +62 -0
- swatplus_builder-0.5.0/tests/test_solver_wrapper.py +87 -0
- swatplus_builder-0.5.0/tests/test_swatplus_playbook.py +63 -0
- swatplus_builder-0.5.0/tests/test_topology_converter.py +192 -0
- swatplus_builder-0.5.0/tests/test_validation_runner.py +75 -0
- swatplus_builder-0.5.0/tests/test_volume_diagnostics.py +1037 -0
- swatplus_builder-0.5.0/tests/test_water_balance_gate.py +107 -0
- swatplus_builder-0.5.0/tests/test_weather_daymet.py +302 -0
- swatplus_builder-0.5.0/tests/test_weather_forcing.py +96 -0
- swatplus_builder-0.5.0/tests/test_weather_gridmet.py +693 -0
- swatplus_builder-0.5.0/tests/test_weather_writer.py +310 -0
- swatplus_builder-0.5.0/tests/test_workflow_usgs_e2e.py +3578 -0
- swatplus_builder-0.5.0/tests/test_writer.py +412 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
*.egg
|
|
7
|
+
.eggs/
|
|
8
|
+
build/
|
|
9
|
+
dist/
|
|
10
|
+
.venv/
|
|
11
|
+
venv/
|
|
12
|
+
env/
|
|
13
|
+
.python-version
|
|
14
|
+
.ipynb_checkpoints/
|
|
15
|
+
.claude/
|
|
16
|
+
demo_runs/
|
|
17
|
+
docs/
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
# Editors / OS
|
|
22
|
+
.vscode/
|
|
23
|
+
.idea/
|
|
24
|
+
.DS_Store
|
|
25
|
+
Thumbs.db
|
|
26
|
+
|
|
27
|
+
# Test / coverage
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
.coverage
|
|
30
|
+
.coverage.*
|
|
31
|
+
htmlcov/
|
|
32
|
+
.mypy_cache/
|
|
33
|
+
.ruff_cache/
|
|
34
|
+
|
|
35
|
+
# Docs build
|
|
36
|
+
site/
|
|
37
|
+
_site/
|
|
38
|
+
|
|
39
|
+
# Data / caches (no large blobs in git)
|
|
40
|
+
data/
|
|
41
|
+
bin/
|
|
42
|
+
*.sqlite
|
|
43
|
+
*.sqlite-journal
|
|
44
|
+
*.tif
|
|
45
|
+
*.tiff
|
|
46
|
+
*.gpkg
|
|
47
|
+
*.shp
|
|
48
|
+
*.shx
|
|
49
|
+
*.dbf
|
|
50
|
+
*.prj
|
|
51
|
+
*.cpg
|
|
52
|
+
*.qpj
|
|
53
|
+
*.nc
|
|
54
|
+
*.nc4
|
|
55
|
+
*.zip
|
|
56
|
+
reference_dbs/
|
|
57
|
+
TxtInOut/
|
|
58
|
+
watershed_data/
|
|
59
|
+
/output/
|
|
60
|
+
scratch/
|
|
61
|
+
cache/
|
|
62
|
+
marsh_creek_output/
|
|
63
|
+
soil_benchmark/
|
|
64
|
+
_e2e_runs/
|
|
65
|
+
diagnostics.out
|
|
66
|
+
simulation.out
|
|
67
|
+
area_calc.out
|
|
68
|
+
files_out.out
|
|
69
|
+
erosion.txt
|
|
70
|
+
docs/
|
|
71
|
+
|
|
72
|
+
# Local working docs (authoritative docs live elsewhere)
|
|
73
|
+
docs/DECISIONS.md
|
|
74
|
+
docs/PROGRESS.md
|
|
75
|
+
docs/TROUBLESHOOTING_AND_WORKFLOW.md
|
|
76
|
+
|
|
77
|
+
# Planning / phase docs — local only, never commit
|
|
78
|
+
PROGRESS.md
|
|
79
|
+
DECISIONS.md
|
|
80
|
+
ROADMAP.md
|
|
81
|
+
!PROJECT.md
|
|
82
|
+
!PROGRESS.md
|
|
83
|
+
!DECISIONS.md
|
|
84
|
+
!ROADMAP.md
|
|
85
|
+
!SKILL.md
|
|
86
|
+
BACKLOG.md
|
|
87
|
+
PHASE_*.md
|
|
88
|
+
*_PLAN.md
|
|
89
|
+
*_CLOSEOUT.md
|
|
90
|
+
*_READINESS.md
|
|
91
|
+
CALIBRATION_PLAN*.md
|
|
92
|
+
handover_docs.md
|
|
93
|
+
|
|
94
|
+
# Local-only notes (never commit)
|
|
95
|
+
local-docs/
|
|
96
|
+
Research_article/
|
|
97
|
+
|
|
98
|
+
# Allow small test fixtures explicitly
|
|
99
|
+
!tests/fixtures/**/*.sqlite
|
|
100
|
+
!tests/fixtures/**/*.tif
|
|
101
|
+
!tests/fixtures/**/*.gpkg
|
|
102
|
+
!tests/fixtures/**/*.shp
|
|
103
|
+
!tests/fixtures/**/*.dbf
|
|
104
|
+
!tests/fixtures/**/*.prj
|
|
105
|
+
!tests/fixtures/**/*.shx
|
|
106
|
+
!tests/fixtures/**/*.cpg
|
|
107
|
+
|
|
108
|
+
# Vendored code is tracked (this IS the package), but caches inside are not
|
|
109
|
+
src/swatplus_builder/editor/vendored/**/__pycache__/
|
|
110
|
+
src/swatplus_builder/editor/vendored/**/*.pyc
|
|
111
|
+
# Keep editor vendored runtime-output DB stubs ignored (not used by builder API)
|
|
112
|
+
src/swatplus_builder/editor/vendored/database/output/
|
|
113
|
+
|
|
114
|
+
# Local test artifacts
|
|
115
|
+
tests/_artifacts/
|
|
116
|
+
|
|
117
|
+
# Build artifacts and test data
|
|
118
|
+
multibasin_test/
|
|
119
|
+
demo_runs/
|
|
120
|
+
docs/*
|
|
121
|
+
!docs/
|
|
122
|
+
!docs/AGENT_WORKFLOW.md
|
|
123
|
+
!docs/CALIBRATION_PARAMETER_REGISTRY.md
|
|
124
|
+
!docs/PIPELINE_LEARNING_LOG.md
|
|
125
|
+
!docs/PIPELINE_RESEARCH_GRADE_AUDIT.md
|
|
126
|
+
!docs/REPRODUCIBILITY.md
|
|
127
|
+
Research_article/
|
|
128
|
+
SWATplus_original_docs/
|
|
129
|
+
.codebuddy/
|
|
130
|
+
.claude/
|
|
131
|
+
**/__pycache__/
|
|
132
|
+
|
|
133
|
+
# SWAT+ temp files
|
|
134
|
+
codes.bsn
|
|
135
|
+
.commandcode/
|
|
136
|
+
|
|
137
|
+
tests/_artifacts/
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
# Build/test artifact directories
|
|
143
|
+
basins/
|
|
144
|
+
examples/build_real_basin.py
|
|
145
|
+
examples/real_basin_marsh_creek.py
|
|
146
|
+
PROGRESS.md
|
|
147
|
+
PLAYBOOK.md
|
|
148
|
+
|
|
149
|
+
# stray reproduction virtualenv (session artifact)
|
|
150
|
+
.venv-repro/
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to swatplus-builder are documented here.
|
|
4
|
+
|
|
5
|
+
## [0.5.0] — 2026-06-12
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **`run_workflow` + `workflow_status` MCP tools** (13-tool server): launch the
|
|
9
|
+
governed end-to-end pipeline as a detached background process — immune to MCP
|
|
10
|
+
client timeouts and conda/venv drift — and poll it for evidence-bundle
|
|
11
|
+
pointers. The `build_project` placeholder no longer fake-succeeds silently.
|
|
12
|
+
- **Engine version provenance**: every run now reads the SWAT+ revision directly
|
|
13
|
+
from the engine — both the startup banner and the persisted output-file header
|
|
14
|
+
(`MODULAR Rev …`) — and records the verified value in the evidence bundle. If
|
|
15
|
+
an asserted version disagrees with the binary, the workflow records the
|
|
16
|
+
engine's value and flags the mismatch. Version is verified, never operator-asserted.
|
|
17
|
+
- **A2 positive-control fixture test**: the claim-governance gate stack
|
|
18
|
+
(`_claim_lists` / `_effective_claim_tier`) is now tested in the *passing*
|
|
19
|
+
direction (synthetic research-grade single-channel basin), not only failing.
|
|
20
|
+
- **Overclaiming pilot harness** (`scripts/overclaiming_pilot/`): runner, LLM
|
|
21
|
+
judge, and H1–H4 analysis scaffold for the pre-registered overclaiming experiment.
|
|
22
|
+
- **`docs/REPRODUCIBILITY.md`**: documents the external reference-DB dependency
|
|
23
|
+
(esp. `swatplus_wgn.sqlite`) that is required but not bundled — a reproducibility
|
|
24
|
+
caveat for downstream results.
|
|
25
|
+
|
|
26
|
+
### Fixed
|
|
27
|
+
- **Daymet date-range defect**: pydaymet ≥ 0.19 could ignore `dates=()` and
|
|
28
|
+
return the full 1980-present archive. The adapter now clips every response to
|
|
29
|
+
the requested window and fills the Dec-31 rows Daymet omits in leap years;
|
|
30
|
+
validation reports "range ignored" vs "server clamped" as distinct failures.
|
|
31
|
+
- **Reference-DB bootstrap honesty**: `scripts/bootstrap_reference_dbs.sh` no
|
|
32
|
+
longer claims to download from a non-existent mirror. It now checks which DBs
|
|
33
|
+
are present and exits non-zero with manual-install instructions if any are missing.
|
|
34
|
+
- **MCP health check** improvements; added `mcp-check` command.
|
|
35
|
+
|
|
36
|
+
### Changed
|
|
37
|
+
- Engine version documentation corrected to the **validated range
|
|
38
|
+
60.5.7 – 61.0.2.61** (shipped builds use rev 61.0.2.61), replacing the
|
|
39
|
+
inaccurate single-version claim.
|
|
40
|
+
|
|
41
|
+
## [0.4.0] — 2026-06-11
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
- **Locked calibration protocol**: `lock-benchmark` → `locked-calibrate` → independent verification chain. Reported metrics always come from a clean rerun, never from the optimizer loop.
|
|
45
|
+
- **Claim governance**: runtime gates assign each result a tier (`exploratory → diagnostic → research_grade → publication_grade`). A strong metric never self-promotes past a failed gate.
|
|
46
|
+
- **Machine-readable evidence bundle**: every run writes `evidence_summary.json`, `run_manifest.json`, `events.jsonl`, `calibration_provenance.json`, `physical_gates.json` — including typed, evidence-backed refusals.
|
|
47
|
+
- **11-tool MCP server** (`swat mcp`): full agent interface for building, running, calibrating, and querying results via the Model Context Protocol.
|
|
48
|
+
- **Full-mode engine compatibility** (Phase 3L): parameter bridge, routing fixes, topology converter, water-balance gate.
|
|
49
|
+
- **New modules**: `nldi_fallback`, ET/mass/volume diagnostics, weather forcing, SoilGrids adapter, Daymet weather, full-build workflow, params governance.
|
|
50
|
+
- **`swat workflow run`**: canonical one-command end-to-end path from USGS gauge ID to evidence bundle.
|
|
51
|
+
- **Container baseline**: Dockerfile + docker-compose with MCP stdio service.
|
|
52
|
+
- **Publication-ready figures**: 7+ figure types including hydro comparison, soil depth, gate matrix.
|
|
53
|
+
- **`swat readiness-table`**: multi-basin calibration readiness summary.
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
- `swat watershed`, `swat hrus`, `swat project`, `swat build`: now print a clear redirect to `swat workflow run` instead of crashing with an opaque error.
|
|
57
|
+
- `pyproject.toml` description and keywords updated to reflect the package's actual identity.
|
|
58
|
+
- Version aligned to `0.4.0` across `pyproject.toml` and `__init__.py`.
|
|
59
|
+
|
|
60
|
+
### Infrastructure
|
|
61
|
+
- MkDocs Material documentation site at <https://ai-hydro.github.io/swatplus-builder/>.
|
|
62
|
+
- GitHub Actions: CI (lint + smoke + routing regression), docs deploy, and this publish workflow.
|
|
63
|
+
|
|
64
|
+
## [0.3.x] — internal development
|
|
65
|
+
|
|
66
|
+
Phase 3 calibration and engine compatibility work. Not released to PyPI.
|
|
67
|
+
|
|
68
|
+
## [0.1.0 – 0.2.x] — internal development
|
|
69
|
+
|
|
70
|
+
Initial pipeline scaffold. Not released to PyPI.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: >-
|
|
3
|
+
If you use swatplus-builder in your research, please cite it using
|
|
4
|
+
the metadata below. When reporting a specific result, also include
|
|
5
|
+
the run's provenance hash from evidence_summary.json so the claim
|
|
6
|
+
is traceable to the exact run.
|
|
7
|
+
title: "swatplus-builder: Claim-governed SWAT+ hydrologic modeling from a USGS gauge ID"
|
|
8
|
+
version: 0.5.0
|
|
9
|
+
date-released: "2026-06-12"
|
|
10
|
+
doi: 10.5281/zenodo.20650908
|
|
11
|
+
license: MIT
|
|
12
|
+
repository-code: "https://github.com/AI-Hydro/swatplus-builder"
|
|
13
|
+
url: "https://ai-hydro.github.io/swatplus-builder/"
|
|
14
|
+
authors:
|
|
15
|
+
- family-names: Galib
|
|
16
|
+
given-names: Mohammad
|
|
17
|
+
affiliation: "Purdue University West Lafayette"
|
|
18
|
+
- family-names: Merwade
|
|
19
|
+
given-names: Venkatesh
|
|
20
|
+
affiliation: "Purdue University West Lafayette"
|
|
21
|
+
orcid: "https://orcid.org/0000-0002-4572-8531"
|
|
22
|
+
abstract: >-
|
|
23
|
+
swatplus-builder builds and calibrates SWAT+ hydrologic models in Python,
|
|
24
|
+
starting from a single USGS streamgage ID. A locked benchmark calibration
|
|
25
|
+
protocol (lock → calibrate → independently verified rerun) ensures that
|
|
26
|
+
reported metrics come from a clean rerun, not the optimizer. Runtime gates
|
|
27
|
+
assign each result a claim tier and write a machine-readable evidence bundle
|
|
28
|
+
— including typed, evidence-backed refusals — so both successes and
|
|
29
|
+
limitations are fully inspectable. The pipeline runs with no desktop GIS and
|
|
30
|
+
exposes an 11-tool MCP surface for AI agent operation.
|
|
31
|
+
keywords:
|
|
32
|
+
- SWAT+
|
|
33
|
+
- hydrology
|
|
34
|
+
- watershed modeling
|
|
35
|
+
- streamflow calibration
|
|
36
|
+
- claim governance
|
|
37
|
+
- scientific reproducibility
|
|
38
|
+
- GIS
|
|
39
|
+
- Python
|
|
40
|
+
- MCP
|
|
41
|
+
- AI agents
|
|
42
|
+
- USGS
|
|
43
|
+
- evidence bundle
|
|
44
|
+
- locked calibration
|
|
45
|
+
preferred-citation:
|
|
46
|
+
type: software
|
|
47
|
+
title: "swatplus-builder: Claim-governed SWAT+ hydrologic modeling from a USGS gauge ID"
|
|
48
|
+
authors:
|
|
49
|
+
- family-names: Galib
|
|
50
|
+
given-names: Mohammad
|
|
51
|
+
affiliation: "Purdue University West Lafayette"
|
|
52
|
+
- family-names: Merwade
|
|
53
|
+
given-names: Venkatesh
|
|
54
|
+
affiliation: "Purdue University West Lafayette"
|
|
55
|
+
orcid: "https://orcid.org/0000-0002-4572-8531"
|
|
56
|
+
doi: 10.5281/zenodo.20650908
|
|
57
|
+
url: "https://github.com/AI-Hydro/swatplus-builder"
|
|
58
|
+
year: 2026
|
|
59
|
+
version: 0.5.0
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mohammad Galib
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|