asp-plot 1.18.0__tar.gz → 1.18.1__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.
Files changed (46) hide show
  1. {asp_plot-1.18.0 → asp_plot-1.18.1}/AGENTS.md +2 -2
  2. {asp_plot-1.18.0 → asp_plot-1.18.1}/CHANGELOG.md +5 -0
  3. {asp_plot-1.18.0 → asp_plot-1.18.1}/PKG-INFO +1 -1
  4. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/scenes.py +2 -1
  5. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/sensors.py +6 -0
  6. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/stereo.py +2 -1
  7. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/utils.py +28 -8
  8. {asp_plot-1.18.0 → asp_plot-1.18.1}/pyproject.toml +1 -1
  9. {asp_plot-1.18.0 → asp_plot-1.18.1}/.flake8 +0 -0
  10. {asp_plot-1.18.0 → asp_plot-1.18.1}/.github/workflows/release.yml +0 -0
  11. {asp_plot-1.18.0 → asp_plot-1.18.1}/.github/workflows/run-tests.yml +0 -0
  12. {asp_plot-1.18.0 → asp_plot-1.18.1}/.gitignore +0 -0
  13. {asp_plot-1.18.0 → asp_plot-1.18.1}/.pre-commit-config.yaml +0 -0
  14. {asp_plot-1.18.0 → asp_plot-1.18.1}/.readthedocs.yaml +0 -0
  15. {asp_plot-1.18.0 → asp_plot-1.18.1}/LICENSE +0 -0
  16. {asp_plot-1.18.0 → asp_plot-1.18.1}/README.md +0 -0
  17. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/__init__.py +0 -0
  18. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/alignment.py +0 -0
  19. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/altimetry.py +0 -0
  20. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/altimetry_plots.py +0 -0
  21. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/altimetry_source.py +0 -0
  22. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/asp_log.py +0 -0
  23. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/bodies.py +0 -0
  24. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/bundle_adjust.py +0 -0
  25. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/__init__.py +0 -0
  26. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/asp_plot.py +0 -0
  27. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/csm_camera_plot.py +0 -0
  28. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/gallery.py +0 -0
  29. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/request_planetary_altimetry.py +0 -0
  30. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/cli/stereo_geom.py +0 -0
  31. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/csm_analysis.py +0 -0
  32. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/csm_camera.py +0 -0
  33. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/csm_io.py +0 -0
  34. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/gallery.py +0 -0
  35. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/icesat2_source.py +0 -0
  36. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/mapproject.py +0 -0
  37. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/planetary_source.py +0 -0
  38. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/processing_parameters.py +0 -0
  39. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/report.py +0 -0
  40. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/report_captions.py +0 -0
  41. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/report_pipeline.py +0 -0
  42. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/selections.py +0 -0
  43. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/stereo_geometry.py +0 -0
  44. {asp_plot-1.18.0 → asp_plot-1.18.1}/asp_plot/stereopair_metadata_parser.py +0 -0
  45. {asp_plot-1.18.0 → asp_plot-1.18.1}/conda-forge-recipe/meta.yaml +0 -0
  46. {asp_plot-1.18.0 → asp_plot-1.18.1}/environment.yml +0 -0
@@ -110,8 +110,8 @@ The package is organized by functionality, with each module focused on a specifi
110
110
  - Coordinate utilities: `get_utm_epsg()` for determining UTM EPSG from lon/lat, `get_planetary_bounds()` for DEM bounds in planetocentric 0-360 lon/lat
111
111
  - Planetary body detection: `detect_planetary_body(dem_fn)` returns `"earth"`, `"moon"`, or `"mars"` by inspecting CRS WKT DATUM/ELLIPSOID fields
112
112
  - Subprocess utilities: `run_subprocess_command()`
113
- - Vantor/copyright utilities:
114
- - `detect_vantor_satellite(directory)`: Checks XML files for WorldView SATIDs (WV01/WV02/WV03)
113
+ - Vantor/copyright utilities (an **attribution** concern — named for the rights-holder — kept deliberately distinct from sensor/reader **identity**, the WorldView-named abstraction in `sensors.py`; #137):
114
+ - `detect_vantor_satellite(directory)`: True when an XML camera file's `SATID` matches `VANTOR_SATID_PREFIXES` — any DigitalGlobe→Maxar→Vantor-owned satellite, i.e. the WorldView family (`WV*`, incl. Legion `WVLG`), GeoEye (`GE*`), QuickBird (`QB*`), IKONOS (`IK*`) — not just WorldView. Gates the `© Vantor` overlay via `Plotter.is_vantor`
115
115
  - `add_copyright_overlay(ax)`: Adds "© Vantor {year}" text overlay to bottom-right of matplotlib axes
116
116
  - Scene metadata: `get_acquisition_dates(directory, extra_dirs=None)` reads `FIRSTLINETIME` from WorldView/Maxar XMLs and parses the capture timestamp from `AST_L1A_...` file/directory names. Returns a sorted, deduplicated list of `"YYYY-MM-DD HH:MM:SS UTC"` strings; empty if nothing is found. Used by the CLI to populate `ReportMetadata.acquisition_dates`.
117
117
 
@@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.18.1] - 2026-06-26
9
+
10
+ ### Fixed
11
+ - **`© Vantor` attribution now covers all Vantor-owned satellites, not just WorldView** ([#137](https://github.com/uw-cryo/asp_plot/issues/137)). The copyright-overlay check (`detect_vantor_satellite`) matched only `SATID` values starting with `WV`, so GeoEye-1 (`GE01`), QuickBird (`QB02`), and IKONOS scenes — all owned by the same rights-holder (DigitalGlobe → Maxar → Vantor) — were silently left un-attributed. Detection now matches a `VANTOR_SATID_PREFIXES` whitelist (`WV` incl. WorldView Legion `WVLG`, `GE`, `QB`, `IK`). This clarifies that `is_vantor` / `detect_vantor_satellite` are an **attribution** concern (named for the company), intentionally distinct from sensor/reader **identity** (the WorldView-named abstraction in `sensors.py`); the two names are documented as deliberately different so they aren't reconciled into one.
12
+
8
13
  ## [1.18.0] - 2026-06-25
9
14
 
10
15
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: asp_plot
3
- Version: 1.18.0
3
+ Version: 1.18.1
4
4
  Summary: Package for plotting outputs Ames Stereo Pipeline processing
5
5
  Project-URL: Homepage, https://github.com/uw-cryo/asp_plot
6
6
  Project-URL: Documentation, https://asp-plot.readthedocs.io
@@ -26,7 +26,8 @@ class SceneFiles:
26
26
  full_stereo_directory : str
27
27
  Full path to the stereo directory.
28
28
  is_vantor : bool
29
- Whether the source imagery is from a Vantor (WorldView) satellite.
29
+ Whether the source imagery is from a Vantor-owned satellite (WorldView
30
+ family, GeoEye, QuickBird, etc.); gates the "© Vantor" copyright overlay.
30
31
  left_scene_sub_fn, right_scene_sub_fn : str or None
31
32
  Paths to the left/right sub-sampled scene files.
32
33
  """
@@ -106,6 +106,12 @@ class WorldViewMetadata(SensorMetadata):
106
106
  extract per-scene metadata, handling both single XML files and multiple XML
107
107
  tiles per scene (mosaicked with ``dg_mosaic``).
108
108
 
109
+ This class is named for the *sensor family* (the stable WorldView name) and
110
+ governs which reader parses the XML. It is intentionally distinct from the
111
+ *attribution* check :func:`asp_plot.utils.detect_vantor_satellite`, which is
112
+ named for the rights-holder (Vantor) and decides whether the "© Vantor"
113
+ overlay applies. The two concerns use different names on purpose; see #137.
114
+
109
115
  Attributes
110
116
  ----------
111
117
  directory : str
@@ -39,7 +39,8 @@ class StereoFiles:
39
39
  full_directory : str
40
40
  Full path to the stereo directory.
41
41
  is_vantor : bool
42
- Whether the source imagery is from a Vantor (WorldView) satellite.
42
+ Whether the source imagery is from a Vantor-owned satellite (WorldView
43
+ family, GeoEye, QuickBird, etc.); gates the "© Vantor" copyright overlay.
43
44
  reference_dem : str or None
44
45
  Path to the reference DEM (supplied or recovered from the stereo log).
45
46
  left_image_fn, left_image_sub_fn, right_image_sub_fn : str or None
@@ -1101,9 +1101,10 @@ class Plotter:
1101
1101
  title : str, optional
1102
1102
  Plot title, default is None
1103
1103
  is_vantor : bool, optional
1104
- Whether the source imagery is from a Vantor (WorldView) satellite.
1105
- When True, ``plot_array`` adds a copyright overlay for panels that
1106
- request it via ``copyright=True``. Default is False.
1104
+ Whether the source imagery is from a Vantor-owned satellite (the
1105
+ WorldView family, GeoEye, QuickBird, etc.). When True, ``plot_array``
1106
+ adds a "© Vantor" copyright overlay for panels that request it via
1107
+ ``copyright=True``. Default is False.
1107
1108
  """
1108
1109
  self.clim_perc = clim_perc
1109
1110
  self.lognorm = lognorm
@@ -1196,8 +1197,8 @@ class Plotter:
1196
1197
  Whether to add a satellite-imagery copyright overlay, default is
1197
1198
  False. The overlay is only drawn when this is True *and* the Plotter
1198
1199
  was created with ``is_vantor=True`` (i.e. the source imagery is from
1199
- a Vantor/WorldView satellite). Set on the panels that display the
1200
- optical scenes.
1200
+ a Vantor-owned satellite). Set on the panels that display the optical
1201
+ scenes.
1201
1202
 
1202
1203
  Returns
1203
1204
  -------
@@ -1297,8 +1298,26 @@ class Plotter:
1297
1298
  ctx.add_basemap(ax=ax, **ctx_kwargs)
1298
1299
 
1299
1300
 
1301
+ # SATID prefixes for the DigitalGlobe -> Maxar -> Vantor satellite heritage, all
1302
+ # of which carry "© Vantor" attribution. Covers the WorldView family ("WV", incl.
1303
+ # WorldView Legion "WVLG"), GeoEye ("GE"), QuickBird ("QB"), and IKONOS ("IK").
1304
+ VANTOR_SATID_PREFIXES = ("WV", "GE", "QB", "IK")
1305
+
1306
+
1300
1307
  def detect_vantor_satellite(directory):
1301
- """Check if XML files in directory indicate a Vantor (WorldView) satellite.
1308
+ """Check if XML files in directory indicate a Vantor-owned satellite.
1309
+
1310
+ This is an *attribution* check, distinct from sensor/reader identity: it
1311
+ decides whether the "© Vantor" copyright overlay applies (see
1312
+ :func:`add_copyright_overlay` and :class:`Plotter`). It is named for the
1313
+ rights-holder (Vantor, formerly Maxar/DigitalGlobe) and matches *any* Vantor
1314
+ satellite, not just WorldView. Sensor *identity* — which reader parses the
1315
+ XML — is a separate concern handled by the WorldView-named abstraction in
1316
+ :mod:`asp_plot.sensors`; the two names intentionally differ and should not be
1317
+ "reconciled" into one.
1318
+
1319
+ A scene is considered Vantor-owned when an XML camera file carries a SATID
1320
+ matching one of :data:`VANTOR_SATID_PREFIXES`.
1302
1321
 
1303
1322
  Parameters
1304
1323
  ----------
@@ -1308,7 +1327,8 @@ def detect_vantor_satellite(directory):
1308
1327
  Returns
1309
1328
  -------
1310
1329
  bool
1311
- True if any XML file contains a WorldView SATID (WV01, WV02, WV03, etc.).
1330
+ True if any XML file contains a Vantor-heritage SATID (e.g. WV01-WV04,
1331
+ WVLG, GE01, QB02).
1312
1332
  """
1313
1333
  try:
1314
1334
  xml_files = glob_file(directory, "*.[Xx][Mm][Ll]", all_files=True)
@@ -1320,7 +1340,7 @@ def detect_vantor_satellite(directory):
1320
1340
  for xml_file in xml_files:
1321
1341
  try:
1322
1342
  satid = get_xml_tag(xml_file, "SATID")
1323
- if satid.startswith("WV"):
1343
+ if satid.startswith(VANTOR_SATID_PREFIXES):
1324
1344
  return True
1325
1345
  except (ValueError, Exception):
1326
1346
  continue
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "asp_plot"
7
- version = "1.18.0"
7
+ version = "1.18.1"
8
8
  license = {text = "BSD-3-Clause"}
9
9
  authors = [
10
10
  { name="Ben Purinton", email="purinton@uw.edu" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes