ReceiptsRecorded runs, model-free verdicts
VERIFIED

opendatacube__odc-geo-121

VERIFIED on first verdict

1 attempt, 0 appeals. 1 file, 9 added and 2 removed lines. Tokens: 156,370 tokens. Model cost: $0.05. Sandbox time: 1 min 54 s.

The plan

Repository
opendatacube/odc-geo
Base commit
2d5abde (image tag)
Issue
`ValueError: too many values to unpack` when inspecting GeoBox I have a raster in Bathymetry Attributed Grid (bag) format ([supported by GDAL](https://gdal.org/drivers/raster/bag.html)). I'm attempting to load it with `rioxarray`, then analyse and reproject it with `odc-geo` tools. However, when I attempt to inspect its GeoBox via `.odc.geobox`, I get a `ValueError: too many values to unpack (expected 2)` error: ``` import rioxarray import odc.geo.xr
Files to edit
  • odc/geo/crs.py
Approach
Add defensive check before unpacking axis_info to handle cases where axis count isn't exactly 2.

Attempt 1

VERIFIED

Agent branch

KindCommandExitDurationDigest
commandgit ls-files -z
exact command
git ls-files -z
00.003s21d6cfe8
commandgrep -rn "test_crs_units_issue_120" tests/
exact command
grep -rn "test_crs_units_issue_120" tests/
00.004s39ff0f29
writewrite odc/geo/crs.py
exact command
/opt/receipts-1179654b945546c79a6ccc3315ab705d/bin/busybox sh -c 'mkdir -p /odc-geo/odc/geo && cp /opt/receipts-1179654b945546c79a6ccc3315ab705d/incoming/cb0c0753ea50d38bb866f5d9ae899921c93212e67d64f518c3915b74adb718e3 /odc-geo/odc/geo/crs.py'
00.005s57c474de
commandpytest tests/test_crs.py::test_crs_units_issue_120 -v
exact command
/opt/receipts-93f44304bd8845ab8a566d56743d0811/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-93f44304bd8845ab8a566d56743d0811/receipts_pytest.py tests/test_crs.py::test_crs_units_issue_120 -v -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-4.xml
02.607sb75813ebc5a3
commandpytest tests/test_crs.py
exact command
/opt/receipts-16dc9e607b234728b09138e1f5e2d795/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-16dc9e607b234728b09138e1f5e2d795/receipts_pytest.py tests/test_crs.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/agent1-5.xml
08.614sb75813ebc5a3
writewrite verify_fix.py
exact command
/opt/receipts-bb691cec922b47c0806237d9c7248b7a/bin/busybox sh -c 'mkdir -p /odc-geo && cp /opt/receipts-bb691cec922b47c0806237d9c7248b7a/incoming/8b0e178670f0e9c5b5baa9405beac621a354f8d1f5ff78c501c51116c2ce9168 /odc-geo/verify_fix.py'
00.005sa01a9c24
commandpython verify_fix.py
exact command
python verify_fix.py
00.524s2c373a18
commandrm verify_fix.py
exact command
rm verify_fix.py
00.003s8dc99f0d
diffcapture patch
exact command
compute patch in executor staging agent1-0d1be5c19e3a4f84844810dfa5650728: /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false add -A && /opt/homebrew/Cellar/git/2.53.0/bin/git -c core.hooksPath=/dev/null -c core.attributesFile=/dev/null -c diff.external= -c core.quotePath=false diff --cached --binary --no-ext-diff --no-textconv --no-renames 133bffc3fc7087e27b445ab5cb3216d45d6c0dd6
00.054sb75813ebc5a3
Finish summary
Fixed ValueError: too many values to unpack when inspecting GeoBox of compound CRS (like BAG format). The issue was in the CRS.units property which assumed exactly 2 axes when unpacking axis_info, but compound CRS can have 3+ axes (e.g., easting, northing, vertical). Modified the units property to safely handle compound CRS by taking the first two spatial axes.
Worker outcome
finished
  • Target tests pass: yes
  • Full suite passes: yes
  • Files changed: odc/geo/crs.py
  • Ran tests: yes

Witness branch w1

KindCommandExitDurationDigest
applyapply patch 7d95935cf802
exact command
git update-index -q --refresh; git apply -v --3way --recount --ignore-space-change --whitespace=nowarn /opt/receipts-ee84b297312746ff98e35749f4e6bb3b/incoming/7d95935cf8026da56790a1db26ee7eef0cb94feb2a924a0942b4f1c662a2373a.diff
00.008sb75813ebc5a3
verificationpytest (witness) tests/test_crs.py
exact command
/opt/receipts-6359c8182fbc4dc295ef071268af47f1/bin/busybox mkdir -p /opt/receipts/reports && python -I /opt/receipts-6359c8182fbc4dc295ef071268af47f1/receipts_pytest.py --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning tests/test_crs.py -o junit_family=xunit1 -p no:cacheprovider -rA --continue-on-collection-errors --junitxml=/opt/receipts/reports/w1-2.xml
08.589sb75813ebc5a3

Gate predicate checklist

PredicateNameStatusEvidence
R1_fail_to_passFailing specification tests now passPASStarget tests passed: tests/test_crs.py::test_crs_units_issue_120
R2_pass_to_passPreviously passing tests keptPASS25 baseline-passing tests still pass
R3_no_shrinkNo removed tests or new skipsPASSall 26 baseline tests collected; skips unchanged (0)
R4_patch_scopePatch scopePASSpatch touches 1 file(s), all in scope
R5_provenanceWitness chain and patch digestPASSagent chain 4224f06c -> 8dc99f0d unbroken over 9 receipt(s); witness chain 4224f06c -> fd5ffdfc unbroken over 2 receipt(s); applied digest matches
R6_claim_auditAgent claim audit (advisory)PASSclaimed green; own last run: 26 passed, 0 failed

What it said

Finish summary
Fixed ValueError: too many values to unpack when inspecting GeoBox of compound CRS (like BAG format). The issue was in the CRS.units property which assumed exactly 2 axes when unpacking axis_info, but compound CRS can have 3+ axes (e.g., easting, northing, vertical). Modified the units property to safely handle compound CRS by taking the first two spatial axes.
Worker outcome
finished
  • Target tests pass: yes
  • Full suite passes: yes
  • Files changed: odc/geo/crs.py
  • Ran tests: yes

What the record shows

honest: claimed green; own last run: 26 passed, 0 failed

SWE-rebench's official grader: resolved

Agrees with the gate

Shipped patch

diff --git a/odc/geo/crs.py b/odc/geo/crs.pyindex 6c208aa..42e002a 100644--- a/odc/geo/crs.py+++ b/odc/geo/crs.py@@ -213,8 +213,15 @@ class CRS:             return "degrees_north", "degrees_east"          if self.projected:-            x, y = self._crs.axis_info-            return x.unit_name, y.unit_name+            # Handle compound CRS by taking the first two spatial axes (typically easting, northing)+            axis_info = self._crs.axis_info+            if len(axis_info) >= 2:+                # Take the first two axes which should be the spatial dimensions+                x, y = axis_info[0], axis_info[1]+                return x.unit_name, y.unit_name+            else:+                # Fallback for unexpected cases+                raise ValueError("Expected at least 2 axes in projected CRS")          raise ValueError("Neither projected nor geographic")  # pragma: no cover 

Model and costs

Model
NVIDIA Nemotron 3 Super thinking off · temperature 1.0 · top_p 0.95
Tokens
156,370 tokens
Model cost
$0.05
Sandbox time
1 min 54 s
Sandbox cost
Token Factory reported cost: 0.457 (unit not published)
Full environment disclosure
{
  "executor_kind": "tokenfactory",
  "lock_sha256": "8875af9a9c14781c70b81d339ebd1940c571a6c84d5f7adef0ab6822b3162c1c",
  "model": {
    "base_url": "https://api.tokenfactory.nebius.com/v1/",
    "client": "TokenFactoryClient",
    "max_tokens": null,
    "model": "nvidia/nemotron-3-super-120b-a12b",
    "temperature": 1.0,
    "thinking": false,
    "top_p": 0.95
  },
  "pytest_config_digests": {
    "pyproject.toml": "08a90642ec34859d1aaececc19357830cf33d16f98515aded6b0c3413d99d1d9",
    "setup.cfg": "3b74545a3bc74159bd1b1f41677b44a818a5833cb75d10e7ffe4a6a8fee806f3",
    "tests/conftest.py": "7376c3c249568017162043254f5a2f2eca16bbbdf75d437dfee482269772afda"
  },
  "receipts_version": "0.0.1",
  "test_digests": {
    "tests/conftest.py": "7376c3c249568017162043254f5a2f2eca16bbbdf75d437dfee482269772afda",
    "tests/data/au-3577-rotated.tif": "e55dc3c573fd9b2c7971b3ef38a8dfe13028aa99e9c34dffe4918524d38f8976",
    "tests/data/au-3577.tif": "ca215e9c52b08b4148fabd586ba09497ee2b52a497f7a8f77131510cc94e94c0",
    "tests/data/au-gcp.tif": "bb1a0da73fa331655200cac59172c9946acfeba08b8ea03d2b411f903ba33ab2",
    "tests/test-env-py310.yml": "17f206f47a45d7815379463bd1ce4c82b512aec25fde00ce29d7bb2f22947d7e",
    "tests/test_bbox.py": "228272356d6d510312f989668ec9ab322dc1466f71f394ca239cfe145c93d52a",
    "tests/test_blocks.py": "0df8f94e543a65056c0a088adef15a1eb92980d8ab2ed06b560ac506575fb225",
    "tests/test_cog.py": "3cc7b2d54d40b8456c250eaef6233b47d48fa552ed6d9b426fd2a9bbe2801cee",
    "tests/test_converters.py": "b23db55abe6e332e2cae0bf57a29c783d3c751474b4c1028ee558238013c5b91",
    "tests/test_crs.py": "aca75f74496b13ddebc9c8682bf232b80aadef7274765d215b371a5c9d2f6325",
    "tests/test_dask_interop.py": "137b15988f3f2ce5648f58c0f63fee30b7d2efa935055603931add0e46fe7f09",
    "tests/test_datasets.py": "4d5c596bfe91189d2581fb51739486fc352d713459a1bfc4dd72874ae65ed319",
    "tests/test_gbox_ops.py": "19caece6397497c450fd74364a443d86c613b4cade29e6e8412995c197988b6c",
    "tests/test_gcp.py": "b1fd52403b356b6e647da6ba7209ec35ca446b57401e29aa123ea1a050c2adba",
    "tests/test_geobox.py": "db8e84f0e7600986b30a07252377c7b7342198edfad9c3d5154e51bd377386de",
    "tests/test_geoboxtiles.py": "5b32b8e8e856fa8c3d9755f8659b8a2fc05f89c830dd7ef654321891d9ad3383",
    "tests/test_geom.py": "a5a62d0324683c707ae10be19ea7f70e1aacaf4ad3742beeec15316d75f776ec",
    "tests/test_gridspec.py": "a8d5184231532b6aef5f393913416540922ff6428cb13327427603ecfec5f609",
    "tests/test_map.py": "e7471b5ba040d885f93c960a8a89520d59dbf3ccb07f8ea1c2bc9510324b195b",
    "tests/test_math.py": "ec0ffba023ddd5efbaf5473a6709cb02a58a99795b3e78baafbc96a29874a7cb",
    "tests/test_mpu.py": "a954b29141fd7db4b1a17af3bc74e688b3036da477a3ae2652a09c07b724dc88",
    "tests/test_mpu_fs.py": "de9322bee6ae52e4125a6f548618d9ba172024f12cd09892dd04417badfe095c",
    "tests/test_overlap.py": "de26e00dd34715e10be62895d049b95b49f238d36d9503d13ba45379b64dbc8b",
    "tests/test_rgba.py": "cb2e0cd495008c744ee377f500734b7e56aedf237c08288bcec1a5a527c82d13",
    "tests/test_rioxarray_interop.py": "33fb75bddc1ed02612416591e8a91066d2fff111239ec799193df1d946495583",
    "tests/test_roi.py": "ce063d356b1fc368cb2e02d635c2b3a8dc78a0e9a82839f4600ace540975ec10",
    "tests/test_s3.py": "d6ed82e0b3cdf919bcd9d038b6b540458e727bfe25519196d83c62a5c1907bfa",
    "tests/test_types.py": "5b1f08d036b56c16f47881b78e47f496339181e6f80ed6161a9655bf33de025e",
    "tests/test_ui.py": "7a96086638c7f99838402a64d13439595a79c7b164572c82e1ef1eaa8430b7e7",
    "tests/test_xr_interop.py": "8135563fede1708039e2a1f6ca0346a587d71a698e61993bdbc1219a539575d6"
  }
}

The bundle

Recorded JSON and patches. In these copies the local checkout path is removed from file paths, and the home directory is shown as ~.