============================= test session starts ==============================
platform linux -- Python 3.12.1, pytest-9.1.1, pluggy-1.6.0
rootdir: /work/scratch/env/simeonma/dev/swot_pixc_study
configfile: pyproject.toml
plugins: anyio-4.14.1
collected 11 items

tests/test_converters.py .FF..                                           [ 45%]
tests/test_converters_mock.py ..                                         [ 63%]
tests/test_dggs.py FF                                                    [ 81%]
tests/test_downloaders.py ss                                             [100%]

=================================== FAILURES ===================================
_________________________ test_convert_zarr_full_area __________________________

input_files = [PosixPath('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_348_078R_20240812T045012_2024...h/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_113_231L_20240803T194540_20240803T194551_PGD0_01.nc')]
first_file = PosixPath('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_113_231L_20240803T194540_20240803T194551_PGD0_01.nc')
tmp_folder = PosixPath('/tmp/pixcdust-test')

    def test_convert_zarr_full_area(input_files, first_file, tmp_folder):
        """Test zarr conversion without area_of_interest.
    
        It is compared to the input data.
        """
        # Conversion
        output =  str(tmp_folder / "zarr_conv_test_full")
        converted_vars = ['height', 'sig0', 'classification']
        pixc = Nc2ZarrConverter(
                input_files,
                variables=converted_vars,
        )
        pixc.database_from_nc(output, mode="o")
    
        # Validation
        pixc_read = ZarrReader(output)
        pixc_read.read()
>       validate_conversion_to_nc(pixc_read.data, converted_vars, first_file)

tests/test_converters.py:138: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/test_converters.py:72: in validate_conversion_to_nc
    validate_conversion(read_data, converted_vars, ncsimple.data,is_longer=True)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

read_data = <xarray.Dataset> Size: 479MB
Dimensions:         (points: 14099886)
Dimensions without coordinates: points
Data variab...erferogram_size_range:    5336
    looks_to_efflooks:           1.5455398525765538
    num_azimuth_looks:           7.0
converted_vars = ['height', 'sig0', 'classification']
expected_data = <xarray.Dataset> Size: 2GB
Dimensions:                                (points: 8520300, complex_depth: 2,
            ... looks_to_efflooks:           1.546137354550594
    num_azimuth_looks:           7.0
    azimuth_offset:              8
is_longer = True, len_tol = 0, sort_var = False

    def validate_conversion(
            read_data: xr.Dataset,
            converted_vars:List[str],
            expected_data: xr.Dataset,
            is_longer: bool,
            len_tol: int = 0,
            sort_var: bool = False
    ) -> None:
        """Compare the read data to the expected data.
    
        Args:
            read_data: Data to validate.
            converted_vars: Names of variables to compare.
            expected_data: Expected data.
            is_longer: Os the expected_data expected to only contain the start of the read_data.
            len_tol: Tolerance for len_tol missing point because of numeric error on lon/lat.
            sort_var: Is the data ordering different and do we neer to sort them.
    
        Raises:
            AssertionError: If the data are too different.
        """
    
        for var in converted_vars:
            read_var = read_data[var].data
            expected_var = expected_data[var].data
            if sort_var:
                # can't do something like sorting by longitude as minor conversion error in the longitude
                # result in random swaps (then a few massive errors because we mismatch the points).
                read_var = np.sort(read_var)
                expected_var = np.sort(expected_var)
>           np.testing.assert_allclose(read_var[0:30], expected_var[0:30])
E           AssertionError: 
E           Not equal to tolerance rtol=1e-07, atol=0
E           
E           Mismatched elements: 30 / 30 (100%)
E           First 5 mismatches are at indices:
E            [0]: 488.3445129394531 (ACTUAL), 362.88482666015625 (DESIRED)
E            [1]: 487.55810546875 (ACTUAL), 362.3760986328125 (DESIRED)
E            [2]: 486.7953186035156 (ACTUAL), 361.032958984375 (DESIRED)
E            [3]: 486.0445556640625 (ACTUAL), 360.1246643066406 (DESIRED)
E            [4]: 485.2817077636719 (ACTUAL), 340.7319030761719 (DESIRED)
E           Max absolute difference among violations: 269.8112
E           Max relative difference among violations: 0.8415479
E            ACTUAL: array([488.3445  , 487.5581  , 486.79532 , 486.04456 , 485.2817  ,
E                  484.621   , 483.71646 , 482.83252 , 482.1064  , 481.3321  ,
E                  480.5089  , 479.85547 , 479.09402 , 478.33875 , 477.63367 ,...
E            DESIRED: array([362.88483, 362.3761 , 361.03296, 360.12466, 340.7319 , 340.02332,
E                  339.19437, 338.40833, 337.6251 , 336.93546, 336.25558, 336.11316,
E                  335.26712, 332.47772, 331.81348, 330.92517, 330.0719 , 329.20966,...

tests/test_converters.py:104: AssertionError
----------------------------- Captured stderr call -----------------------------
2026-06-25 09:12:49,441 - distributed.worker - ERROR - Worker stream died during communication: tcp://127.0.0.1:45753
Traceback (most recent call last):
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/tornado/iostream.py", line 861, in _read_to_buffer
    bytes_read = self.read_from_fd(buf)
                 ^^^^^^^^^^^^^^^^^^^^^^
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/tornado/iostream.py", line 1113, in read_from_fd
    return self.socket.recv_into(buf, len(buf))
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ConnectionResetError: [Errno 104] Connection reset by peer

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/worker.py", line 1964, in gather_dep
    response = await get_data_from_worker(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/worker.py", line 2720, in get_data_from_worker
    response = await send_recv(
               ^^^^^^^^^^^^^^^^
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/core.py", line 982, in send_recv
    response = await comm.read(deserializers=deserializers)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/comm/tcp.py", line 237, in read
    convert_stream_closed_error(self, e)
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/comm/tcp.py", line 143, in convert_stream_closed_error
    raise CommClosedError(f"in {obj}: {exc.__class__.__name__}: {exc}") from exc
distributed.comm.core.CommClosedError: in <TCP (closed) Ephemeral Worker->Worker for gather local=tcp://127.0.0.1:55422 remote=tcp://127.0.0.1:45753>: ConnectionResetError: [Errno 104] Connection reset by peer
------------------------------ Captured log call -------------------------------
INFO     distributed.http.proxy:proxy.py:86 To route to workers diagnostics web server please install jupyter-server-proxy: python -m pip install jupyter-server-proxy
INFO     distributed.scheduler:scheduler.py:1735 State start
INFO     distributed.scheduler:scheduler.py:4433   Scheduler at:     tcp://127.0.0.1:37181
INFO     distributed.scheduler:scheduler.py:4448   dashboard at:  http://127.0.0.1:8787/status
INFO     distributed.scheduler:scheduler.py:8134 Registering Worker plugin shuffle
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:46375'
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:42177'
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:39227'
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:42123'
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:44115 name: 0
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:44115
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:37654
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:46465 name: 3
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:46465
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:37650
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:34007 name: 1
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:34007
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:37660
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:45753 name: 2
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:45753
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:37636
INFO     distributed.scheduler:scheduler.py:5913 Receive client connection: Client-04ca4e3b-7076-11f1-93d9-00001029fe80
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:37672
INFO     distributed.core:core.py:857 Connection to tcp://127.0.0.1:37636 has been closed.
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:45753 name: 2 (stimulus_id='handle-worker-cleanup-1782378769.441338')
WARNING  distributed.scheduler:scheduler.py:5681 Removing worker 'tcp://127.0.0.1:45753' caused the cluster to lose already computed task(s), which will be recomputed elsewhere: {('concatenate-b5d81df1b5163896143b46ccfd268b43', 23), 'original-open_dataset-latitude-a28776511e6c4e2d0a5d035921f2487f', ('astype-concatenate-b5d81df1b5163896143b46ccfd268b43', 20), ('concatenate-b5d81df1b5163896143b46ccfd268b43', 2), 'original-open_dataset-latitude-1ed9a30b53530d5a6264f9637da0caaf'} (stimulus_id='handle-worker-cleanup-1782378769.441338')
INFO     distributed.nanny:nanny.py:780 Worker process 3659206 was killed by signal 11
WARNING  distributed.nanny:nanny.py:543 Restarting worker
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:37711 name: 2
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:37711
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:35496
INFO     distributed.scheduler:scheduler.py:5913 Receive client connection: Client-worker-0d7de8fd-7076-11f1-95be-00001029fe80
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:35508
INFO     distributed.scheduler:scheduler.py:5958 Remove client Client-04ca4e3b-7076-11f1-93d9-00001029fe80
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:37672; closing.
INFO     distributed.scheduler:scheduler.py:5958 Remove client Client-04ca4e3b-7076-11f1-93d9-00001029fe80
INFO     distributed.scheduler:scheduler.py:5950 Close client connection: Client-04ca4e3b-7076-11f1-93d9-00001029fe80
INFO     distributed.scheduler:scheduler.py:7553 Retire worker addresses (stimulus_id='retire-workers-1782378777.9634671') (0, 1, 2, 3)
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:46375'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:42177'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:39227'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:42123'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:37660; closing.
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:34007 name: 1 (stimulus_id='handle-worker-cleanup-1782378777.969649')
INFO     distributed.scheduler:scheduler.py:5958 Remove client Client-worker-0d7de8fd-7076-11f1-95be-00001029fe80
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:35508; closing.
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:35496; closing.
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:37650; closing.
INFO     distributed.scheduler:scheduler.py:5958 Remove client Client-worker-0d7de8fd-7076-11f1-95be-00001029fe80
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:37711 name: 2 (stimulus_id='handle-worker-cleanup-1782378777.971565')
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:46465 name: 3 (stimulus_id='handle-worker-cleanup-1782378777.971789')
INFO     distributed.scheduler:scheduler.py:5950 Close client connection: Client-worker-0d7de8fd-7076-11f1-95be-00001029fe80
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:37654; closing.
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:44115 name: 0 (stimulus_id='handle-worker-cleanup-1782378777.9950588')
INFO     distributed.scheduler:scheduler.py:5726 Lost all workers
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:39227' closed.
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:42177' closed.
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:46375' closed.
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:42123' closed.
INFO     distributed.scheduler:scheduler.py:4490 Closing scheduler. Reason: unknown
INFO     distributed.scheduler:scheduler.py:4518 Scheduler closing all comms
INFO     distributed.scheduler:scheduler.py:1735 State start
INFO     distributed.scheduler:scheduler.py:4433   Scheduler at: inproc://10.120.120.51/3658713/1
INFO     distributed.scheduler:scheduler.py:4448   dashboard at:  http://10.120.120.51:8787/status
INFO     distributed.scheduler:scheduler.py:8134 Registering Worker plugin shuffle
INFO     distributed.worker:worker.py:1355       Start worker at: inproc://10.120.120.51/3658713/4
INFO     distributed.worker:worker.py:1356          Listening to:        inproc10.120.120.51
INFO     distributed.worker:worker.py:1359           Worker name:                          0
INFO     distributed.worker:worker.py:1361          dashboard at:        10.120.120.51:44079
INFO     distributed.worker:worker.py:1362 Waiting to connect to: inproc://10.120.120.51/3658713/1
INFO     distributed.worker:worker.py:1363 -------------------------------------------------
INFO     distributed.worker:worker.py:1364               Threads:                          4
INFO     distributed.worker:worker.py:1366                Memory:                   0.98 TiB
INFO     distributed.worker:worker.py:1370       Local Directory: /tmp/dask-scratch-space/worker-scyzsu31
INFO     distributed.worker:worker.py:1083 -------------------------------------------------
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: inproc://10.120.120.51/3658713/4 name: 0
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, inproc://10.120.120.51/3658713/4
INFO     distributed.core:core.py:847 Starting established connection to inproc://10.120.120.51/3658713/5
INFO     distributed.worker:worker.py:1776 Starting Worker plugin shuffle
INFO     distributed.worker:worker.py:1150         Registered to: inproc://10.120.120.51/3658713/1
INFO     distributed.worker:worker.py:1151 -------------------------------------------------
INFO     distributed.core:core.py:847 Starting established connection to inproc://10.120.120.51/3658713/1
INFO     distributed.scheduler:scheduler.py:5913 Receive client connection: Client-0f8b1d70-7076-11f1-93d9-00001029fe80
INFO     distributed.core:core.py:847 Starting established connection to inproc://10.120.120.51/3658713/6
___________________ test_convert_gpkg_and_zarr_limited_area ____________________

>   file = self._cache[self._key]
    ^^^^^^^^^^^^^^^^^

../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py:211: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   value = self._cache[key]
    ^^^^^^^^^^^^^^^^^
E   KeyError: [<class 'netCDF4._netCDF4.Dataset'>, ('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_070_078L_20240802T062800_20240802T062805_PGD0_01.nc',), 'r', (('clobber', True), ('diskless', False), ('format', 'NETCDF4'), ('persist', False)), 'a17437db-4a64-4f26-aed1-8edffbd2c585']

../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/lru_cache.py:56: KeyError

During handling of the above exception, another exception occurred:

input_files = [PosixPath('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_348_078R_20240812T045012_2024...h/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_113_231L_20240803T194540_20240803T194551_PGD0_01.nc')]
first_file = PosixPath('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_113_231L_20240803T194540_20240803T194551_PGD0_01.nc')
tmp_folder = PosixPath('/tmp/pixcdust-test')
converted_lim_gpkg = '/tmp/pixcdust-test/gpkg_conv_test_lim'

    def test_convert_gpkg_and_zarr_limited_area(input_files, first_file, tmp_folder, converted_lim_gpkg):
        """Test geopackage and zarr conversion with area_of_interest.
    
        They are compared to each other.
        Note that they are ordered differently with some missing points due tu lon/lat casting.
        """
        # Conversion
        output_zarr = str(tmp_folder / "zarr_conv_test_lim")
        converted_vars = ['height', 'sig0', 'classification']
        output_gpkg = converted_lim_gpkg
    
        Nc2ZarrConverter(
                input_files,
                variables=converted_vars,
                area_of_interest=LIM_AREA_GEOM,
>       ).database_from_nc(output_zarr, mode="o")
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/test_converters.py:167: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
converters/zarr.py:99: in database_from_nc
    xr_ds.open_mfdataset(
readers/netcdf.py:289: in open_mfdataset
    self.__postprocess_points()
readers/netcdf.py:345: in __postprocess_points
    geom = gpd.points_from_xy(
../../../pixcdust_312/lib/python3.12/site-packages/geopandas/array.py:312: in points_from_xy
    y = np.asarray(y, dtype="float64")
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/common.py:180: in __array__
    return np.array(self.values, dtype=dtype, copy=copy)
                    ^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/dataarray.py:814: in values
    return self.variable.values
           ^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/variable.py:566: in values
    return _as_array_or_item(self._data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/variable.py:363: in _as_array_or_item
    data = np.asarray(data)
           ^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/dask/array/core.py:1720: in __array__
    x = self.compute()
        ^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/dask/base.py:377: in compute
    (result,) = compute(self, traverse=False, **kwargs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/dask/base.py:685: in compute
    results = schedule(expr, keys, **kwargs)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py:578: in __array__
    return np.asarray(self.get_duck_array(), dtype=dtype, copy=copy)
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py:583: in get_duck_array
    return self.array.get_duck_array()
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py:794: in get_duck_array
    return self.array.get_duck_array()
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py:664: in get_duck_array
    array = array.get_duck_array()
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/coding/variables.py:81: in get_duck_array
    return self.func(self.array.get_duck_array())
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py:657: in get_duck_array
    array = self.array[self.key]
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py:103: in __getitem__
    return indexing.explicit_indexing_adapter(
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py:1018: in explicit_indexing_adapter
    result = raw_indexing_method(raw_key.tuple)
      ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py:115: in _getitem
    original_array = self.get_array(needs_lock=False)
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py:94: in get_array
    ds = self.datastore._acquire(needs_lock)
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py:455: in _acquire
    with self._manager.acquire_context(needs_lock) as root:
    ^^^^^^^^^^^^^^^^^
/work/softs/rh8/install/python/3.12.1_raw/.spack-env/view/lib/python3.12/contextlib.py:137: in __enter__
    return next(self.gen)
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py:199: in acquire_context
    file, cached = self._acquire_with_cache_info(needs_lock)
    ^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py:217: in _acquire_with_cache_info
    file = self._opener(*self._args, **kwargs)
    ^^^^^^^^^^^^^^^^^
src/netCDF4/_netCDF4.pyx:2521: in netCDF4._netCDF4.Dataset.__init__
    ???
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   ???
E   OSError: [Errno -101] NetCDF: HDF error: '/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_070_078L_20240802T062800_20240802T062805_PGD0_01.nc'

src/netCDF4/_netCDF4.pyx:2158: OSError
---------------------------- Captured stderr setup -----------------------------

  0%|          | 0/3 [00:00<?, ?it/s]
 33%|███▎      | 1/3 [00:11<00:23, 11.68s/it]
 67%|██████▋   | 2/3 [00:31<00:16, 16.29s/it]
100%|██████████| 3/3 [01:30<00:00, 35.85s/it]
100%|██████████| 3/3 [01:30<00:00, 30.11s/it]
------------------------------ Captured log setup ------------------------------
INFO     distributed.core:core.py:574 Event loop was unresponsive in Worker for 3.98s.  This is often caused by long-running GIL-holding functions or moving large chunks of data. This can cause timeouts and instability.
INFO     distributed.core:core.py:574 Event loop was unresponsive in Scheduler for 3.98s.  This is often caused by long-running GIL-holding functions or moving large chunks of data. This can cause timeouts and instability.
----------------------------- Captured stderr call -----------------------------
Exception ignored in: <function CachingFileManager.__del__ at 0x1523b695f380>
Traceback (most recent call last):
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py", line 250, in __del__
    self.close(needs_lock=False)
  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py", line 234, in close
    file.close()
  File "src/netCDF4/_netCDF4.pyx", line 2680, in netCDF4._netCDF4.Dataset.close
  File "src/netCDF4/_netCDF4.pyx", line 2647, in netCDF4._netCDF4.Dataset._close
  File "src/netCDF4/_netCDF4.pyx", line 2164, in netCDF4._netCDF4._ensure_nc_success
RuntimeError: NetCDF: HDF error
2026-06-25 09:14:38,680 - distributed.worker - ERROR - Compute Failed
Key:       ('astype-concatenate-b5d81df1b5163896143b46ccfd268b43', 0)
State:     executing
Task:  <Task ('astype-concatenate-b5d81df1b5163896143b46ccfd268b43', 0) _execute_subgraph(...)>
Exception: "OSError(-101, 'NetCDF: HDF error')"
Traceback: '  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/dask/array/core.py", line 140, in getter\n    c = np.asarray(c)\n        ^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py", line 578, in __array__\n    return np.asarray(self.get_duck_array(), dtype=dtype, copy=copy)\n                      ^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py", line 583, in get_duck_array\n    return self.array.get_duck_array()\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py", line 794, in get_duck_array\n    return self.array.get_duck_array()\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py", line 664, in get_duck_array\n    array = array.get_duck_array()\n            ^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/coding/variables.py", line 81, in get_duck_array\n    return self.func(self.array.get_duck_array())\n                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py", line 657, in get_duck_array\n    array = self.array[self.key]\n            ~~~~~~~~~~^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py", line 103, in __getitem__\n    return indexing.explicit_indexing_adapter(\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/indexing.py", line 1018, in explicit_indexing_adapter\n    result = raw_indexing_method(raw_key.tuple)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py", line 115, in _getitem\n    original_array = self.get_array(needs_lock=False)\n                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py", line 94, in get_array\n    ds = self.datastore._acquire(needs_lock)\n         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/netCDF4_.py", line 455, in _acquire\n    with self._manager.acquire_context(needs_lock) as root:\n  File "/work/softs/rh8/install/python/3.12.1_raw/.spack-env/view/lib/python3.12/contextlib.py", line 137, in __enter__\n    return next(self.gen)\n           ^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py", line 199, in acquire_context\n    file, cached = self._acquire_with_cache_info(needs_lock)\n                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "/work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/backends/file_manager.py", line 217, in _acquire_with_cache_info\n    file = self._opener(*self._args, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File "src/netCDF4/_netCDF4.pyx", line 2521, in netCDF4._netCDF4.Dataset.__init__\n  File "src/netCDF4/_netCDF4.pyx", line 2158, in netCDF4._netCDF4._ensure_nc_success\n'

2026-06-25 09:14:38,707 - distributed.worker.state_machine - WARNING - Async instruction for <Task cancelled name="execute(('astype-concatenate-b5d81df1b5163896143b46ccfd268b43', 1))" coro=<Worker.execute() done, defined at /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/worker_state_machine.py:3606>> ended with CancelledError
------------------------------ Captured log call -------------------------------
INFO     distributed.scheduler:scheduler.py:1735 State start
INFO     distributed.scheduler:scheduler.py:4433   Scheduler at:     tcp://127.0.0.1:37705
INFO     distributed.scheduler:scheduler.py:4448   dashboard at:  http://127.0.0.1:45109/status
INFO     distributed.scheduler:scheduler.py:8134 Registering Worker plugin shuffle
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:36903'
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:44243'
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:38171'
INFO     distributed.nanny:nanny.py:350         Start Nanny at: 'tcp://127.0.0.1:42289'
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:39889 name: 0
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:39889
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:45324
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:44101 name: 3
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:44101
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:45338
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:33859 name: 2
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:33859
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:45362
INFO     distributed.scheduler:scheduler.py:4781 Register worker addr: tcp://127.0.0.1:44615 name: 1
INFO     distributed.scheduler:scheduler.py:6178 Starting worker compute stream, tcp://127.0.0.1:44615
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:45354
INFO     distributed.scheduler:scheduler.py:5913 Receive client connection: Client-47114103-7076-11f1-93d9-00001029fe80
INFO     distributed.core:core.py:847 Starting established connection to tcp://127.0.0.1:45366
INFO     distributed.scheduler:scheduler.py:5958 Remove client Client-47114103-7076-11f1-93d9-00001029fe80
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:45366; closing.
INFO     distributed.scheduler:scheduler.py:5958 Remove client Client-47114103-7076-11f1-93d9-00001029fe80
INFO     distributed.scheduler:scheduler.py:5950 Close client connection: Client-47114103-7076-11f1-93d9-00001029fe80
INFO     distributed.scheduler:scheduler.py:7553 Retire worker addresses (stimulus_id='retire-workers-1782378878.7048998') (0, 1, 2, 3)
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:36903'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:44243'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:38171'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.nanny:nanny.py:586 Closing Nanny at 'tcp://127.0.0.1:42289'. Reason: nanny-close
INFO     distributed.nanny:nanny.py:833 Nanny asking worker to close. Reason: nanny-close
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:45324; closing.
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:45354; closing.
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:39889 name: 0 (stimulus_id='handle-worker-cleanup-1782378878.709842')
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:44615 name: 1 (stimulus_id='handle-worker-cleanup-1782378878.7106283')
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:45338; closing.
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:44101 name: 3 (stimulus_id='handle-worker-cleanup-1782378878.7121747')
INFO     distributed.core:core.py:872 Received 'close-stream' from tcp://127.0.0.1:45362; closing.
INFO     distributed.scheduler:scheduler.py:5598 Remove worker addr: tcp://127.0.0.1:33859 name: 2 (stimulus_id='handle-worker-cleanup-1782378878.7143126')
INFO     distributed.scheduler:scheduler.py:5726 Lost all workers
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:36903' closed.
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:38171' closed.
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:42289' closed.
WARNING  distributed.nanny:nanny.py:854 Worker process still alive after 4.0 seconds, killing
INFO     distributed.nanny:nanny.py:780 Worker process 3660887 was killed by signal 9
INFO     distributed.nanny:nanny.py:601 Nanny at 'tcp://127.0.0.1:44243' closed.
INFO     distributed.scheduler:scheduler.py:4490 Closing scheduler. Reason: unknown
INFO     distributed.scheduler:scheduler.py:4518 Scheduler closing all comms
______________________________ test_h3_conversion ______________________________

first_file = PosixPath('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_113_231L_20240803T194540_20240803T194551_PGD0_01.nc')

    def test_h3_conversion(first_file):
        """
        Test the conversion of the dataset to the H3 grid.
        """
        # Resolution can be parameterized based on what you want to test
        resolution = 8
    
        reader = NcSimpleReader(first_file)
        reader.read()
        # Run the H3 conversion function
>       ds_h3 = reader.to_h3(variables='height', resolution=resolution)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/test_dggs.py:15: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
readers/netcdf.py:314: in to_h3
    return prepare_dataset_h3(data, resolution=resolution, interp=interp, method=method)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
dggs/dggs_converter.py:125: in prepare_dataset_h3
    ds_h3 = ds_h3.pipe(xdggs.decode)
            ^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/common.py:849: in pipe
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xdggs/conventions/__init__.py:105: in decode
    return call_on_dataset(
../../../pixcdust_312/lib/python3.12/site-packages/xdggs/utils.py:49: in call_on_dataset
    result = func(ds, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <xdggs.conventions.xdggs.Xdggs object at 0x14ed2b45a360>
ds = <xarray.Dataset> Size: 163kB
Dimensions:   (cell_ids: 5820)
Coordinates:
  * cell_ids  (cell_ids) int64 47kB 612916719... looks_to_efflooks:           1.546137354550594
    num_azimuth_looks:           7.0
    azimuth_offset:              8
grid_info = {'grid_name': 'h3', 'resolution': 8}, name = 'cell_ids'
index_options = {}

    def decode(
        self,
        ds: xr.Dataset,
        *,
        grid_info: dict[str, Any] | DGGSInfo | None = None,
        name: Hashable | None = None,
        index_options: dict[str, Any] | None = None,
    ) -> xr.Dataset:
        if name is None:
            name = "cell_ids"
    
        try:
            var = ds[name]
        except KeyError:
            raise DecoderError(
                f"xdggs convention: Cannot find the cell ids coordinate ({name})"
            )
    
        if len(var.dims) != 1:
            # TODO: allow 0D
            raise DecoderError(
                "xdggs convention: cell id coordinate must be 1D"
                f" but has dims {tuple(var.dims)}"
            )
        [dim] = var.dims
    
        if grid_info is None:
            grid_info = var.attrs
        elif isinstance(grid_info, DGGSInfo):
            # TODO: avoid serializing / deserializing cycle
            grid_info = grid_info.to_dict()
    
        grid_name = grid_info["grid_name"]
        if grid_name not in GRID_REGISTRY:
            raise DecoderError(f"xdggs convention: unknown grid name: {grid_name}")
        index_cls = GRID_REGISTRY[grid_name]
    
        var_ = var.copy(deep=True)
        var_.attrs = grid_info
        index = index_cls.from_variables({name: var_}, options=index_options)
    
>       return ds.assign_coords(xr.Coordinates.from_xindex(index))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: type object 'Coordinates' has no attribute 'from_xindex'

../../../pixcdust_312/lib/python3.12/site-packages/xdggs/conventions/xdggs.py:57: AttributeError
___________________________ test_healpix_conversion ____________________________

first_file = PosixPath('/work/scratch/data/simeonma/test_pix_312/SWOT_L2_HR_PIXC/SWOT_L2_HR_PIXC_019_113_231L_20240803T194540_20240803T194551_PGD0_01.nc')

    def test_healpix_conversion(first_file):
        """
        Test the conversion of the dataset to the HEALPix grid.
        """
        resolution = 10  # You can adjust resolution as needed
    
        reader = NcSimpleReader(first_file)
        reader.read()
        # Run the HEALPix conversion function
>       ds_healpix = reader.to_healpix(variables='height', resolution=resolution)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/test_dggs.py:36: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
readers/netcdf.py:338: in to_healpix
    return prepare_dataset_healpix(data, resolution=resolution, interp=interp, method=method)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
dggs/dggs_converter.py:222: in prepare_dataset_healpix
    ds_healpix.pipe(xdggs.decode)
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/common.py:849: in pipe
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
../../../pixcdust_312/lib/python3.12/site-packages/xdggs/conventions/__init__.py:105: in decode
    return call_on_dataset(
../../../pixcdust_312/lib/python3.12/site-packages/xdggs/utils.py:49: in call_on_dataset
    result = func(ds, *args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <xdggs.conventions.xdggs.Xdggs object at 0x14ed2b45a360>
ds = <xarray.Dataset> Size: 4kB
Dimensions:      (cell_ids: 137)
Coordinates:
  * cell_ids     (cell_ids) int64 1kB 3497207... looks_to_efflooks:           1.546137354550594
    num_azimuth_looks:           7.0
    azimuth_offset:              8
grid_info = {'grid_name': 'healpix', 'nside': 1024, 'nest': True}
name = 'cell_ids', index_options = {}

    def decode(
        self,
        ds: xr.Dataset,
        *,
        grid_info: dict[str, Any] | DGGSInfo | None = None,
        name: Hashable | None = None,
        index_options: dict[str, Any] | None = None,
    ) -> xr.Dataset:
        if name is None:
            name = "cell_ids"
    
        try:
            var = ds[name]
        except KeyError:
            raise DecoderError(
                f"xdggs convention: Cannot find the cell ids coordinate ({name})"
            )
    
        if len(var.dims) != 1:
            # TODO: allow 0D
            raise DecoderError(
                "xdggs convention: cell id coordinate must be 1D"
                f" but has dims {tuple(var.dims)}"
            )
        [dim] = var.dims
    
        if grid_info is None:
            grid_info = var.attrs
        elif isinstance(grid_info, DGGSInfo):
            # TODO: avoid serializing / deserializing cycle
            grid_info = grid_info.to_dict()
    
        grid_name = grid_info["grid_name"]
        if grid_name not in GRID_REGISTRY:
            raise DecoderError(f"xdggs convention: unknown grid name: {grid_name}")
        index_cls = GRID_REGISTRY[grid_name]
    
        var_ = var.copy(deep=True)
        var_.attrs = grid_info
        index = index_cls.from_variables({name: var_}, options=index_options)
    
>       return ds.assign_coords(xr.Coordinates.from_xindex(index))
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^
E       AttributeError: type object 'Coordinates' has no attribute 'from_xindex'

../../../pixcdust_312/lib/python3.12/site-packages/xdggs/conventions/xdggs.py:57: AttributeError
=============================== warnings summary ===============================
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/dtypes.py:97
../../../pixcdust_312/lib/python3.12/site-packages/xarray/core/dtypes.py:97
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/xarray/core/dtypes.py:97: DeprecationWarning: The 'generic' unit for NumPy timedelta is deprecated, and will raise an error in the future. This includes implicit conversion of bare integers (e.g. `+ 1`).Please use a specific unit instead.
    NAT_TYPES = {np.datetime64("NaT").dtype, np.timedelta64("NaT").dtype}

pixcdust/tests/test_converters.py::test_nc_simple_reader_conditions
  <frozen importlib._bootstrap>:488: RuntimeWarning: numpy.ndarray size changed, may indicate binary incompatibility. Expected 16 from C header, got 96 from PyObject

pixcdust/tests/test_converters.py::test_convert_zarr_full_area
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/client.py:3415: UserWarning: Sending large graph of size 107.57 MiB.
  This may cause some slowdown.
  Consider loading the data with Dask directly
   or using futures or delayed objects to embed the data into the graph without repetition.
  See also https://docs.dask.org/en/stable/best-practices.html#load-data-with-dask for more information.
    warnings.warn(

pixcdust/tests/test_converters.py::test_convert_gpkg_and_zarr_limited_area
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/pyogrio/__init__.py:5: DeprecationWarning: The 'shapely.geos' module is deprecated, and will be removed in a future version. All attributes of 'shapely.geos' are available directly from the top-level 'shapely' namespace (since shapely 2.0.0).
    import shapely.geos  # noqa

pixcdust/tests/test_converters.py::test_convert_gpkg_and_zarr_limited_area
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/pyogrio/raw.py:709: RuntimeWarning: The filename extension should be 'gpkg' instead of '' to conform to the GPKG specification.
    ogr_write(

pixcdust/tests/test_converters.py::test_convert_gpkg_and_zarr_limited_area
pixcdust/tests/test_converters.py::test_convert_gpkg_and_zarr_limited_area
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/pyogrio/raw.py:709: RuntimeWarning: File /tmp/pixcdust-test/gpkg_conv_test_lim has GPKG application_id, but non conformant file extension
    ogr_write(

pixcdust/tests/test_converters.py::test_convert_gpkg_and_zarr_limited_area
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/distributed/node.py:188: UserWarning: Port 8787 is already in use.
  Perhaps you already have a cluster running?
  Hosting the HTTP server on port 45109 instead
    warnings.warn(

pixcdust/tests/test_converters.py::test_convert_shape_limited_area
pixcdust/tests/test_converters.py::test_convert_shape_limited_area
pixcdust/tests/test_converters.py::test_convert_shape_limited_area
  /work/scratch/env/simeonma/dev/swot_pixc_study/pixcdust/converters/shapefile.py:72: UserWarning: Column names longer than 10 characters will be truncated when saved to ESRI Shapefile.
    gdf.to_file(path_shp)

pixcdust/tests/test_converters.py::test_convert_shape_limited_area
pixcdust/tests/test_converters.py::test_convert_shape_limited_area
pixcdust/tests/test_converters.py::test_convert_shape_limited_area
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/pyogrio/raw.py:709: RuntimeWarning: Normalized/laundered field name: 'classification' to 'classifica'
    ogr_write(

pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
  /work/softs/rh8/install/python/3.12.1_raw/.spack-env/view/lib/python3.12/contextlib.py:137: RuntimeWarning: File /tmp/pixcdust-test/gpkg_conv_test_lim has GPKG application_id, but non conformant file extension
    return next(self.gen)

pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
pixcdust/tests/test_converters.py::test_gpkg_dggs_projecter
  /work/scratch/env/simeonma/pixcdust_312/lib/python3.12/site-packages/pyogrio/raw.py:709: RuntimeWarning: File /tmp/pixcdust-test/gpkg_dggs_output has GPKG application_id, but non conformant file extension
    ogr_write(

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
=========================== short test summary info ============================
FAILED tests/test_converters.py::test_convert_zarr_full_area - AssertionError: 
FAILED tests/test_converters.py::test_convert_gpkg_and_zarr_limited_area - OS...
FAILED tests/test_dggs.py::test_h3_conversion - AttributeError: type object '...
FAILED tests/test_dggs.py::test_healpix_conversion - AttributeError: type obj...
======= 4 failed, 5 passed, 2 skipped, 27 warnings in 291.67s (0:04:51) ========
