mapsmith 0.2.2__tar.gz → 0.4.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.
- mapsmith-0.4.0/.gitignore +68 -0
- mapsmith-0.4.0/.zenodo.json +19 -0
- mapsmith-0.4.0/CHANGELOG.md +990 -0
- mapsmith-0.4.0/CITATION.cff +31 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/CLAUDE.md +12 -7
- {mapsmith-0.2.2 → mapsmith-0.4.0}/CONTRIBUTING.md +1 -1
- {mapsmith-0.2.2 → mapsmith-0.4.0}/Dockerfile +43 -32
- mapsmith-0.4.0/PKG-INFO +1105 -0
- mapsmith-0.4.0/README.md +1063 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/SECURITY.md +84 -9
- mapsmith-0.4.0/docs/argleton-run.json +11 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/docs/benchmarks.md +125 -2
- mapsmith-0.4.0/docs/catalog-entry-spec.md +295 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/examples/03_validated_plans.ipynb +23 -23
- {mapsmith-0.2.2 → mapsmith-0.4.0}/pyproject.toml +113 -87
- mapsmith-0.4.0/schema/operation.schema.json +207 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/server.json +49 -49
- mapsmith-0.4.0/site/build.py +391 -0
- mapsmith-0.4.0/site/index.template.html +635 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/__init__.py +12 -12
- mapsmith-0.4.0/src/mapsmith/antimeridian.py +205 -0
- mapsmith-0.4.0/src/mapsmith/catalog.py +5238 -0
- mapsmith-0.4.0/src/mapsmith/discovery_log.py +182 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/engines/dispatch.py +181 -124
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/engines/duckdb_engine.py +106 -6
- mapsmith-0.4.0/src/mapsmith/engines/esri.py +239 -0
- mapsmith-0.4.0/src/mapsmith/engines/geodesy.py +200 -0
- mapsmith-0.4.0/src/mapsmith/engines/linework.py +845 -0
- mapsmith-0.4.0/src/mapsmith/engines/network.py +1085 -0
- mapsmith-0.4.0/src/mapsmith/engines/raster.py +1341 -0
- mapsmith-0.4.0/src/mapsmith/engines/sampling.py +610 -0
- mapsmith-0.4.0/src/mapsmith/engines/spatial_stats.py +794 -0
- mapsmith-0.4.0/src/mapsmith/engines/summaries.py +582 -0
- mapsmith-0.4.0/src/mapsmith/engines/vector.py +2974 -0
- mapsmith-0.4.0/src/mapsmith/engines/whitebox_engine.py +1603 -0
- mapsmith-0.4.0/src/mapsmith/grid.py +435 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/plans/executor.py +3 -3
- mapsmith-0.4.0/src/mapsmith/plans/registry.py +897 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/plans/validator.py +706 -689
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/preview.py +266 -291
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/provenance.py +433 -278
- mapsmith-0.4.0/src/mapsmith/readers.py +397 -0
- mapsmith-0.4.0/src/mapsmith/retrieval.py +163 -0
- mapsmith-0.4.0/src/mapsmith/server.py +967 -0
- mapsmith-0.4.0/src/mapsmith/sql_policy.py +255 -0
- mapsmith-0.4.0/src/mapsmith/stacks.py +290 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/verify.py +738 -702
- mapsmith-0.4.0/tests/conftest.py +37 -0
- mapsmith-0.4.0/tests/data/discovery_queries.json +1536 -0
- mapsmith-0.4.0/tests/data/manifest-v1.schema.json +284 -0
- mapsmith-0.4.0/tests/data/manifest_spec_validator.py +268 -0
- mapsmith-0.4.0/tests/test_ambiguous_layer.py +68 -0
- mapsmith-0.4.0/tests/test_antimeridian.py +302 -0
- mapsmith-0.4.0/tests/test_band_math.py +138 -0
- mapsmith-0.4.0/tests/test_catalog.py +166 -0
- mapsmith-0.4.0/tests/test_catalog_applicability.py +209 -0
- mapsmith-0.4.0/tests/test_catalog_entry_spec.py +109 -0
- mapsmith-0.4.0/tests/test_centroid_convert.py +141 -0
- mapsmith-0.4.0/tests/test_clip_reclassify_raster.py +179 -0
- mapsmith-0.4.0/tests/test_contours_and_cost.py +287 -0
- mapsmith-0.4.0/tests/test_dashboard.py +319 -0
- mapsmith-0.4.0/tests/test_describe_raster.py +75 -0
- mapsmith-0.4.0/tests/test_discovery_contract.py +345 -0
- mapsmith-0.4.0/tests/test_discovery_log.py +268 -0
- mapsmith-0.4.0/tests/test_discovery_report.py +217 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_duckdb_sandbox.py +69 -0
- mapsmith-0.4.0/tests/test_environment.py +505 -0
- mapsmith-0.4.0/tests/test_geodesy.py +148 -0
- mapsmith-0.4.0/tests/test_geoparquet2.py +444 -0
- mapsmith-0.4.0/tests/test_grid_registration.py +436 -0
- mapsmith-0.4.0/tests/test_linework.py +443 -0
- mapsmith-0.4.0/tests/test_measure_area.py +184 -0
- mapsmith-0.4.0/tests/test_merge_simplify.py +188 -0
- mapsmith-0.4.0/tests/test_nearest_explode.py +97 -0
- mapsmith-0.4.0/tests/test_network.py +472 -0
- mapsmith-0.4.0/tests/test_overlay_dissolve.py +136 -0
- mapsmith-0.4.0/tests/test_path_containment.py +365 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_plans.py +55 -0
- mapsmith-0.4.0/tests/test_published_figures.py +275 -0
- mapsmith-0.4.0/tests/test_raster_reproject_bands.py +353 -0
- mapsmith-0.4.0/tests/test_resample_raster.py +149 -0
- mapsmith-0.4.0/tests/test_retrieval.py +109 -0
- mapsmith-0.4.0/tests/test_retrieval_at_scale.py +221 -0
- mapsmith-0.4.0/tests/test_retrieval_degradation.py +310 -0
- mapsmith-0.4.0/tests/test_sampling.py +491 -0
- mapsmith-0.4.0/tests/test_select_and_extract.py +720 -0
- mapsmith-0.4.0/tests/test_showcase.py +1171 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_smoke.py +92 -90
- mapsmith-0.4.0/tests/test_south_up_and_mixed.py +257 -0
- mapsmith-0.4.0/tests/test_spatial_stats.py +485 -0
- mapsmith-0.4.0/tests/test_sql_axis_order.py +111 -0
- mapsmith-0.4.0/tests/test_sql_credentials.py +289 -0
- mapsmith-0.4.0/tests/test_stacks.py +289 -0
- mapsmith-0.4.0/tests/test_summaries.py +468 -0
- mapsmith-0.4.0/tests/test_terrain_derivatives.py +101 -0
- mapsmith-0.4.0/tests/test_tier_a_operations.py +307 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_verification_status.py +135 -135
- mapsmith-0.4.0/tests/test_verify.py +788 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_verify_repair.py +10 -2
- mapsmith-0.4.0/tests/test_voronoi.py +182 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_whitebox.py +201 -201
- mapsmith-0.4.0/tests/test_whitebox_derivatives.py +351 -0
- mapsmith-0.4.0/tests/test_whitebox_geographic_refusal.py +167 -0
- mapsmith-0.4.0/tests/test_worked_example.py +120 -0
- mapsmith-0.2.2/.gitignore +0 -44
- mapsmith-0.2.2/CHANGELOG.md +0 -336
- mapsmith-0.2.2/PKG-INFO +0 -466
- mapsmith-0.2.2/README.md +0 -430
- mapsmith-0.2.2/src/mapsmith/catalog.py +0 -975
- mapsmith-0.2.2/src/mapsmith/engines/raster.py +0 -134
- mapsmith-0.2.2/src/mapsmith/engines/vector.py +0 -292
- mapsmith-0.2.2/src/mapsmith/engines/whitebox_engine.py +0 -444
- mapsmith-0.2.2/src/mapsmith/plans/registry.py +0 -161
- mapsmith-0.2.2/src/mapsmith/server.py +0 -465
- mapsmith-0.2.2/src/mapsmith/sql_policy.py +0 -105
- mapsmith-0.2.2/tests/test_catalog.py +0 -85
- mapsmith-0.2.2/tests/test_geoparquet2.py +0 -177
- mapsmith-0.2.2/tests/test_showcase.py +0 -378
- mapsmith-0.2.2/tests/test_sql_credentials.py +0 -117
- mapsmith-0.2.2/tests/test_verify.py +0 -69
- {mapsmith-0.2.2 → mapsmith-0.4.0}/.dockerignore +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/LICENSE +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/MANIFESTO.md +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/TRADEMARKS.md +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/docker-compose.yml +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/examples/01_verified_geoprocessing.ipynb +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/examples/02_terrain_hydrology.ipynb +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/examples/README.md +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/examples/fixtures/mount_st_helens_dem.tif +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/funding.json +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/engines/__init__.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/engines/sedona_engine.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/gdal_policy.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/jobs.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/plans/__init__.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/plans/models.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/ui.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/src/mapsmith/workspace.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_catalog_retrieval.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_engines.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_gdal_policy.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_preview.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_raster.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_redaction.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_ui.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_whitebox_encoding.py +0 -0
- {mapsmith-0.2.2 → mapsmith-0.4.0}/tests/test_workspace.py +0 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*.egg-info/
|
|
5
|
+
dist/
|
|
6
|
+
build/
|
|
7
|
+
.venv/
|
|
8
|
+
venv/
|
|
9
|
+
.pytest_cache/
|
|
10
|
+
.ruff_cache/
|
|
11
|
+
|
|
12
|
+
# Data & outputs (never commit datasets)
|
|
13
|
+
*.gpkg
|
|
14
|
+
*.gpkg-journal
|
|
15
|
+
*.shp
|
|
16
|
+
*.shx
|
|
17
|
+
*.dbf
|
|
18
|
+
*.prj
|
|
19
|
+
*.tif
|
|
20
|
+
*.tiff
|
|
21
|
+
*.parquet
|
|
22
|
+
*.provenance.json
|
|
23
|
+
data/
|
|
24
|
+
# ...except the vendored spec artefacts: test dependencies, not datasets. This
|
|
25
|
+
# has now bitten twice in the same way -- the validator was silently ignored
|
|
26
|
+
# once, and on 2026-08-26 the schema next to it went the same way, because the
|
|
27
|
+
# exception was a filename rather than a rule. Both times the conformance test
|
|
28
|
+
# passed locally and CI could not find the file. The comment did not prevent the
|
|
29
|
+
# second one, so `test_showcase.py` now checks that everything under
|
|
30
|
+
# `tests/data/` is tracked: a rule that asserts a property without checking it
|
|
31
|
+
# is worse than no rule.
|
|
32
|
+
!tests/data/
|
|
33
|
+
tests/data/*
|
|
34
|
+
!tests/data/manifest_spec_validator.py
|
|
35
|
+
!tests/data/manifest-v1.schema.json
|
|
36
|
+
# The discovery benchmark: 95 queries written by a second model from work
|
|
37
|
+
# scenarios, never from this catalog. It is tracked BECAUSE it is a dataset — an
|
|
38
|
+
# evaluation set nobody can inspect is a claim, not a measurement.
|
|
39
|
+
!tests/data/discovery_queries.json
|
|
40
|
+
|
|
41
|
+
# Scratch databases: probing the DuckDB sandbox (ATTACH, COPY) drops these in
|
|
42
|
+
# the repo root, and one of them reached a public commit before we noticed.
|
|
43
|
+
*.db
|
|
44
|
+
*.duckdb
|
|
45
|
+
*.wal
|
|
46
|
+
|
|
47
|
+
# OS / editors
|
|
48
|
+
.DS_Store
|
|
49
|
+
Thumbs.db
|
|
50
|
+
.vscode/
|
|
51
|
+
.idea/
|
|
52
|
+
|
|
53
|
+
# Notebook gallery runtime data
|
|
54
|
+
examples/data/
|
|
55
|
+
|
|
56
|
+
# ...but the gallery's one real-world input is versioned on purpose: a
|
|
57
|
+
# showcase built on synthetic terrain does not show what the tools do.
|
|
58
|
+
!examples/fixtures/
|
|
59
|
+
!examples/fixtures/*.tif
|
|
60
|
+
uv.lock
|
|
61
|
+
|
|
62
|
+
# The site is generated: `python site/build.py dist` rebuilds it from a real run.
|
|
63
|
+
site/generated/
|
|
64
|
+
|
|
65
|
+
# Written by `benchmarks/dashboard.py` and by MAPSMITH_DISCOVERY_LOG:
|
|
66
|
+
# both hold the queries somebody typed, so they stay out of the repository.
|
|
67
|
+
dashboard.html
|
|
68
|
+
*.jsonl
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"upload_type": "software",
|
|
3
|
+
"title": "MapSmith: geospatial processing for AI agents, with verifiable provenance",
|
|
4
|
+
"version": "0.4.0",
|
|
5
|
+
"creators": [
|
|
6
|
+
{"name": "The MapSmith project"}
|
|
7
|
+
],
|
|
8
|
+
"license": "agpl-3.0-or-later",
|
|
9
|
+
"access_right": "open",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"GIS",
|
|
12
|
+
"geospatial",
|
|
13
|
+
"provenance",
|
|
14
|
+
"reproducibility",
|
|
15
|
+
"Model Context Protocol",
|
|
16
|
+
"MCP"
|
|
17
|
+
],
|
|
18
|
+
"description": "<p>An MCP server that gives AI agents professional geoprocessing under a rule the agent cannot bend: every geometry and every number comes from a real engine run, never from the model.</p><p>Each operation that writes a dataset also writes a manifest beside it — the inputs and their hashes, the exact parameters, the coordinate-system decisions and the reason for each, the engine and its version, the environment that changed the answer, and the deterministic checks that ran. The manifest is written <em>before</em> a failed check raises, so the audit trail survives the error rather than disappearing with it.</p><p>Capabilities are reached through a searchable catalogue rather than a wall of tools, because a caller's ability to pick the right tool degrades long before a catalogue does. The catalogue answers with a set of candidates and the text that distinguishes them, not with a verdict.</p><p>A manifest records what was done; it does <em>not</em> certify that what was done was right. MapSmith says so in its own documentation, and a separate correctness suite exists to measure the difference.</p>"
|
|
19
|
+
}
|