{"receipt_id":"agent1-1","seq":1,"branch_id":"agent1","kind":"command","cmd":"git ls-files -z","path":null,"exit_code":0,"stdout_tail":".github/codecov.yml\u0000.github/workflows/main.yml\u0000.github/workflows/publish-pypi.yml\u0000.gitignore\u0000.pre-commit-config.yaml\u0000.readthedocs.yaml\u0000LICENSE\u0000MANIFEST.in\u0000README.rst\u0000dev-env.yml\u0000developer.md\u0000docs/Makefile\u0000docs/_static/intro.svg\u0000docs/_static/xr-fixes.css\u0000docs/api-geobox.rst\u0000docs/api.rst\u0000docs/conf.py\u0000docs/index.rst\u0000docs/intro-geobox.rst\u0000docs/intro-xr.rst\u0000docs/intro.rst\u0000docs/make.bat\u0000docs/migration.rst\u0000docs/raster-tools.rst\u0000docs/rtd-requirements.txt\u0000docs/tocs.rst\u0000odc/geo/__init__.py\u0000odc/geo/_blocks.py\u0000odc/geo/_compress.py\u0000odc/geo/_dask.py\u0000odc/geo/_interop.py\u0000odc/geo/_map.py\u0000odc/geo/_rgba.py\u0000odc/geo/_version.py\u0000odc/geo/_xr_interop.py\u0000odc/geo/cog/__init__.py\u0000odc/geo/cog/_mpu.py\u0000odc/geo/cog/_mpu_fs.py\u0000odc/geo/cog/_rio.py\u0000odc/geo/cog/_s3.py\u0000odc/geo/cog/_shared.py\u0000odc/geo/cog/_tifffile.py\u0000odc/geo/converters.py\u0000odc/geo/crs.py\u0000odc/geo/data/__init__.py\u0000odc/geo/data/gbox.css\u0000odc/geo/data/ocean.geojson.xz\u0000odc/geo/gcp.py\u0000odc/geo/geobox.py\u0000odc/geo/geom.py\u0000odc/geo/gridspec.py\u0000odc/geo/math.py\u0000odc/geo/overlap.py\u0000odc/geo/py.typed\u0000odc/geo/roi.py\u0000odc/geo/testutils.py\u0000odc/geo/types.py\u0000odc/geo/ui.py\u0000odc/geo/warp.py\u0000odc/geo/xr.py\u0000pyproject.toml\u0000requirements-dev.txt\u0000scripts/patch_version.py\u0000setup.cfg\u0000setup.py\u0000tests/conftest.py\u0000tests/data/au-3577-rotated.tif\u0000tests/data/au-3577.tif\u0000tests/data/au-gcp.tif\u0000tests/test-env-py310.yml\u0000tests/test_bbox.py\u0000tests/test_blocks.py\u0000tests/test_cog.py\u0000tests/test_converters.py\u0000tests/test_crs.py\u0000tests/test_dask_interop.py\u0000tests/test_datasets.py\u0000tests/test_gbox_ops.py\u0000tests/test_gcp.py\u0000tests/test_geobox.py\u0000tests/test_geoboxtiles.py\u0000tests/test_geom.py\u0000tests/test_gridspec.py\u0000tests/test_map.py\u0000tests/test_math.py\u0000tests/test_mpu.py\u0000tests/test_mpu_fs.py\u0000tests/test_overlap.py\u0000tests/test_rgba.py\u0000tests/test_rioxarray_interop.py\u0000tests/test_roi.py\u0000tests/test_s3.py\u0000tests/test_types.py\u0000tests/test_ui.py\u0000tests/test_xr_interop.py\u0000","stderr_tail":"","stdout_sha256":"b0529faef140471f54e6846a98b7bd638766db8605b6a5509e488e041bab89e6","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-1.log","tree_digest":null,"tree_download_s":null,"started_at":"2026-10-03T20:05:57.506261Z","duration_s":0.003473,"timed_out":false,"image_before":"4224f06c-d666-441f-9f18-32d760ab8534","image_after":"21d6cfe8-2105-46b6-b4b6-6d1662d6f76d","junit":null,"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-2","seq":2,"branch_id":"agent1","kind":"command","cmd":"grep -rn \"test_crs_units_issue_120\" tests/","path":null,"exit_code":0,"stdout_tail":"tests/test_crs.py:288:def test_crs_units_issue_120():\n","stderr_tail":"","stdout_sha256":"c77c976aed785addc80bcdf8daee1a0fd9307b2026ac41fd67d858a33a09e404","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-2.log","tree_digest":null,"tree_download_s":null,"started_at":"2026-10-03T20:06:08.960105Z","duration_s":0.004199,"timed_out":false,"image_before":"21d6cfe8-2105-46b6-b4b6-6d1662d6f76d","image_after":"39ff0f29-57a8-4735-932a-cb8a3f379e0a","junit":null,"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-3","seq":3,"branch_id":"agent1","kind":"write","cmd":"/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'","path":"odc/geo/crs.py","exit_code":0,"stdout_tail":"","stderr_tail":"","stdout_sha256":"cb0c0753ea50d38bb866f5d9ae899921c93212e67d64f518c3915b74adb718e3","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-3.log","tree_digest":null,"tree_download_s":null,"started_at":"2026-10-03T20:06:16.782111Z","duration_s":0.004869999999999999,"timed_out":false,"image_before":"39ff0f29-57a8-4735-932a-cb8a3f379e0a","image_after":"57c474de-2351-4bcc-8177-f281924f381e","junit":null,"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-4","seq":4,"branch_id":"agent1","kind":"command","cmd":"/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","path":null,"exit_code":0,"stdout_tail":"============================= test session starts ==============================\nplatform linux -- Python 3.10.19, pytest-9.0.2, pluggy-1.6.0 -- /usr/local/bin/python\nrootdir: /odc-geo\nconfigfile: pyproject.toml\ncollecting ... collected 1 item\n\ntests/test_crs.py::test_crs_units_issue_120 PASSED                       [100%]\n\n=============================== warnings summary ===============================\nodc/geo/_map.py:189\n  /odc-geo/odc/geo/_map.py:189: DeprecationWarning: invalid escape sequence '\\*'\n    \"\"\"\n\n../usr/local/lib/python3.10/site-packages/shapely/decorators.py:173\n  /usr/local/lib/python3.10/site-packages/shapely/decorators.py:173: DeprecationWarning: The 'resolution' argument is deprecated. Use 'quad_segs' instead\n    result = func(*args, **kwargs)\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n==================================== PASSES ====================================\n------------ generated xml file: /opt/receipts/reports/agent1-4.xml ------------\n=========================== short test summary info ============================\nPASSED tests/test_crs.py::test_crs_units_issue_120\n======================== 1 passed, 2 warnings in 0.17s =========================\n","stderr_tail":"","stdout_sha256":"1c1ad4e9b6085118c1819da666c7d021c87c0d8b2799e33ad11bb141822b79f0","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-4.log","tree_digest":"b75813ebc5a36046da14eebb5daefef9033bf6f4ebcd29fa24d6766e96f980af","tree_download_s":2.5027756670024246,"started_at":"2026-10-03T20:06:18.789376Z","duration_s":2.607254,"timed_out":false,"image_before":"57c474de-2351-4bcc-8177-f281924f381e","image_after":"1ba9d74d-914d-4a4c-9f1d-a7f0a9a4fa2b","junit":{"passed":["tests/test_crs.py::test_crs_units_issue_120"],"failed":[],"errors":[],"skipped":[],"collection_errors":[],"failure_text":{}},"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-5","seq":5,"branch_id":"agent1","kind":"command","cmd":"/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","path":null,"exit_code":0,"stdout_tail":"============================= test session starts ==============================\ncollected 26 items\n\ntests/test_crs.py ..........................                             [100%]\n\n==================================== PASSES ====================================\n------------ generated xml file: /opt/receipts/reports/agent1-5.xml ------------\n=========================== short test summary info ============================\nPASSED tests/test_crs.py::test_common_crs\nPASSED tests/test_crs.py::TestCRSEqualityComparisons::test_comparison_edge_cases\nPASSED tests/test_crs.py::TestCRSEqualityComparisons::test_australian_albers_comparison\nPASSED tests/test_crs.py::test_no_epsg\nPASSED tests/test_crs.py::test_crs\nPASSED tests/test_crs.py::test_crs_compat\nPASSED tests/test_crs.py::test_crs_int[4326]\nPASSED tests/test_crs.py::test_crs_int[3577]\nPASSED tests/test_crs.py::test_crs_int[3587]\nPASSED tests/test_crs.py::test_crs_hash\nPASSED tests/test_crs.py::test_crs_units_per_degree\nPASSED tests/test_crs.py::test_rio_crs__no_epsg\nPASSED tests/test_crs.py::test_norm_crs\nPASSED tests/test_crs.py::test_crs_utm[-180-32601]\nPASSED tests/test_crs.py::test_crs_utm[x1-32701]\nPASSED tests/test_crs.py::test_crs_utm[x2-32631]\nPASSED tests/test_crs.py::test_crs_utm[x3-32660]\nPASSED tests/test_crs.py::test_crs_utm[x4-32632]\nPASSED tests/test_crs.py::test_crs_utm[x5-32732]\nPASSED tests/test_crs.py::test_crs_utm[x6-32632]\nPASSED tests/test_crs.py::test_crs_utm[x7-32632]\nPASSED tests/test_crs.py::test_crs_utm[x8-32632]\nPASSED tests/test_crs.py::test_crs_utm[x9-32631]\nPASSED tests/test_crs.py::test_crs_utm[x10-32631]\nPASSED tests/test_crs.py::test_crs_utm[x11-32632]\nPASSED tests/test_crs.py::test_crs_units_issue_120\n============================== 26 passed in 6.25s ==============================\n","stderr_tail":"","stdout_sha256":"edca9d248c2ec65176af37a466a7d5cd23644fe7b032743e564e306898589d96","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-5.log","tree_digest":"b75813ebc5a36046da14eebb5daefef9033bf6f4ebcd29fa24d6766e96f980af","tree_download_s":2.2693286249414086,"started_at":"2026-10-03T20:06:27.611504Z","duration_s":8.61361,"timed_out":false,"image_before":"1ba9d74d-914d-4a4c-9f1d-a7f0a9a4fa2b","image_after":"047a680f-b6d1-4ebc-abb0-78462a009327","junit":{"passed":["tests/test_crs.py::test_common_crs","tests/test_crs.py::TestCRSEqualityComparisons::test_comparison_edge_cases","tests/test_crs.py::TestCRSEqualityComparisons::test_australian_albers_comparison","tests/test_crs.py::test_no_epsg","tests/test_crs.py::test_crs","tests/test_crs.py::test_crs_compat","tests/test_crs.py::test_crs_int[4326]","tests/test_crs.py::test_crs_int[3577]","tests/test_crs.py::test_crs_int[3587]","tests/test_crs.py::test_crs_hash","tests/test_crs.py::test_crs_units_per_degree","tests/test_crs.py::test_rio_crs__no_epsg","tests/test_crs.py::test_norm_crs","tests/test_crs.py::test_crs_utm[-180-32601]","tests/test_crs.py::test_crs_utm[x1-32701]","tests/test_crs.py::test_crs_utm[x2-32631]","tests/test_crs.py::test_crs_utm[x3-32660]","tests/test_crs.py::test_crs_utm[x4-32632]","tests/test_crs.py::test_crs_utm[x5-32732]","tests/test_crs.py::test_crs_utm[x6-32632]","tests/test_crs.py::test_crs_utm[x7-32632]","tests/test_crs.py::test_crs_utm[x8-32632]","tests/test_crs.py::test_crs_utm[x9-32631]","tests/test_crs.py::test_crs_utm[x10-32631]","tests/test_crs.py::test_crs_utm[x11-32632]","tests/test_crs.py::test_crs_units_issue_120"],"failed":[],"errors":[],"skipped":[],"collection_errors":[],"failure_text":{}},"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-6","seq":6,"branch_id":"agent1","kind":"write","cmd":"/opt/receipts-bb691cec922b47c0806237d9c7248b7a/bin/busybox sh -c 'mkdir -p /odc-geo && cp /opt/receipts-bb691cec922b47c0806237d9c7248b7a/incoming/8b0e178670f0e9c5b5baa9405beac621a354f8d1f5ff78c501c51116c2ce9168 /odc-geo/verify_fix.py'","path":"verify_fix.py","exit_code":0,"stdout_tail":"","stderr_tail":"","stdout_sha256":"8b0e178670f0e9c5b5baa9405beac621a354f8d1f5ff78c501c51116c2ce9168","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-6.log","tree_digest":null,"tree_download_s":null,"started_at":"2026-10-03T20:06:48.719220Z","duration_s":0.005006,"timed_out":false,"image_before":"047a680f-b6d1-4ebc-abb0-78462a009327","image_after":"a01a9c24-80a3-41e2-9169-6034abe43133","junit":null,"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-7","seq":7,"branch_id":"agent1","kind":"command","cmd":"python verify_fix.py","path":null,"exit_code":0,"stdout_tail":"CRS: COMPOUNDCRS[\"GDA94 / MGA zone 50 + Instantaneous Water Level Height\",\nPROJCRS[\"GDA94 / MGA zone 50\",\n    BASEGEOGCRS[\"GDA94\",\n        DATUM[\"Geocentric Datum of Australia 1994\",\n            ELLIPSOID[\"GRS 1980\",6378137,298.257222101,\n                LENGTHUNIT[\"metre\",1]]],\n        PRIMEM[\"Greenwich\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        ID[\"EPSG\",4283]],\n    CONVERSION[\"UTM zone 50S\",\n        METHOD[\"Transverse Mercator\",\n            ID[\"EPSG\",9807]],\n        PARAMETER[\"Latitude of natural origin\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8801]],\n        PARAMETER[\"Longitude of natural origin\",117,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8802]],\n        PARAMETER[\"Scale factor at natural origin\",0.9996,\n            SCALEUNIT[\"unity\",1],\n            ID[\"EPSG\",8805]],\n        PARAMETER[\"False easting\",500000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8806]],\n        PARAMETER[\"False northing\",10000000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8807]]],\n    CS[Cartesian,2],\n        AXIS[\"easting\",east,\n            ORDER[1],\n            LENGTHUNIT[\"metre\",1]],\n        AXIS[\"northing\",north,\n            ORDER[2],\n            LENGTHUNIT[\"metre\",1]],\n    ID[\"EPSG\",28350]],\nVERTCRS[\"Instantaneous Water Level Height\",\n    VDATUM[\"Instantaneous Water Level\"],\n    CS[vertical,1],\n        AXIS[\"up\",up,\n            LENGTHUNIT[\"metre\",1]],\n    ID[\"EPSG\",5829]]]\nProjected: True\nGeographic: False\nUnits: ('metre', 'metre')\n✓ Fix verified: units property correctly returns 2-element tuple\n","stderr_tail":"","stdout_sha256":"ed7a029c47d101d20b2d4b2922fec6c48f03eb1192b726bdb69d0e96c5f5fa4c","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-7.log","tree_digest":null,"tree_download_s":null,"started_at":"2026-10-03T20:06:51.561778Z","duration_s":0.5239050000000001,"timed_out":false,"image_before":"a01a9c24-80a3-41e2-9169-6034abe43133","image_after":"2c373a18-4b02-4383-998a-fb76fd25be7a","junit":null,"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-8","seq":8,"branch_id":"agent1","kind":"command","cmd":"rm verify_fix.py","path":null,"exit_code":0,"stdout_tail":"","stderr_tail":"","stdout_sha256":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","log_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/logs/agent1/agent1-8.log","tree_digest":null,"tree_download_s":null,"started_at":"2026-10-03T20:06:54.300156Z","duration_s":0.002864,"timed_out":false,"image_before":"2c373a18-4b02-4383-998a-fb76fd25be7a","image_after":"8dc99f0d-cd55-477c-82b5-6d15de0f4d26","junit":null,"diff":null,"patch_sha256":null,"dropped_paths":[],"snapshot_sha":null}
{"receipt_id":"agent1-9","seq":9,"branch_id":"agent1","kind":"diff","cmd":"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","path":null,"exit_code":0,"stdout_tail":"diff --git a/odc/geo/crs.py b/odc/geo/crs.py\nindex 6c208aa..42e002a 100644\n--- a/odc/geo/crs.py\n+++ b/odc/geo/crs.py\n@@ -213,8 +213,15 @@ class CRS:\n             return \"degrees_north\", \"degrees_east\"\n \n         if self.projected:\n-            x, y = self._crs.axis_info\n-            return x.unit_name, y.unit_name\n+            # Handle compound CRS by taking the first two spatial axes (typically easting, northing)\n+            axis_info = self._crs.axis_info\n+            if len(axis_info) >= 2:\n+                # Take the first two axes which should be the spatial dimensions\n+                x, y = axis_info[0], axis_info[1]\n+                return x.unit_name, y.unit_name\n+            else:\n+                # Fallback for unexpected cases\n+                raise ValueError(\"Expected at least 2 axes in projected CRS\")\n \n         raise ValueError(\"Neither projected nor geographic\")  # pragma: no cover\n \n","stderr_tail":"","stdout_sha256":"7d95935cf8026da56790a1db26ee7eef0cb94feb2a924a0942b4f1c662a2373a","log_path":null,"tree_digest":"b75813ebc5a36046da14eebb5daefef9033bf6f4ebcd29fa24d6766e96f980af","tree_download_s":1.5680044170003384,"started_at":"2026-10-03T20:07:02.331151Z","duration_s":0.05430837511084974,"timed_out":false,"image_before":"8dc99f0d-cd55-477c-82b5-6d15de0f4d26","image_after":"8dc99f0d-cd55-477c-82b5-6d15de0f4d26","junit":null,"diff":{"files":[{"path":"odc/geo/crs.py","added":9,"deleted":2,"category":"source","status":"modified"}],"patch_sha256":"7d95935cf8026da56790a1db26ee7eef0cb94feb2a924a0942b4f1c662a2373a","patch_path":"~/dev/nebius-hackathon/pilot/v2-P/opendatacube__odc-geo-121/runs/pilot-opendatacube__odc-geo-121-153f4bb468/artifacts/agent1/agent1-9.patch"},"patch_sha256":"7d95935cf8026da56790a1db26ee7eef0cb94feb2a924a0942b4f1c662a2373a","dropped_paths":[],"snapshot_sha":"133bffc3fc7087e27b445ab5cb3216d45d6c0dd6"}
