czbiohub-sf / iohub

Pythonic and parallelizable I/O for N-dimensional imaging data with OME metadata
https://czbiohub-sf.github.io/iohub/
BSD 3-Clause "New" or "Revised" License
29 stars 7 forks source link

`create_position` fails when inconsistent row/column capitalization is used #253

Open ieivanov opened 3 days ago

ieivanov commented 3 days ago

create_position fails with following example:

from iohub import open_ome_zarr

ds = open_ome_zarr("~/Documents/tmp.zarr", layout='hcs', mode='w', channel_names=['GFP'])

ds.create_position('S', '0', '1')
ds.create_position('s', '1', '0')

ds.close()

throwing error:

Traceback (most recent call last):
  File "/Users/ivan.ivanov/Documents/GitHub/iohub/debug.py", line 6, in <module>
    ds.create_position('s', '1', '0')
  File "/Users/ivan.ivanov/Documents/GitHub/iohub/iohub/ngff/nodes.py", line 1614, in create_position
    well = self.create_well(
  File "/Users/ivan.ivanov/Documents/GitHub/iohub/iohub/ngff/nodes.py", line 1559, in create_well
    row_grp = self.zgroup.create_group(
  File "/Users/ivan.ivanov/miniconda3/envs/iohub/lib/python3.10/site-packages/zarr/hierarchy.py", line 978, in create_group
    return self._write_op(self._create_group_nosync, name, overwrite=overwrite)
  File "/Users/ivan.ivanov/miniconda3/envs/iohub/lib/python3.10/site-packages/zarr/hierarchy.py", line 952, in _write_op
    return f(*args, **kwargs)
  File "/Users/ivan.ivanov/miniconda3/envs/iohub/lib/python3.10/site-packages/zarr/hierarchy.py", line 984, in _create_group_nosync
    init_group(self._store, path=path, chunk_store=self._chunk_store, overwrite=overwrite)
  File "/Users/ivan.ivanov/miniconda3/envs/iohub/lib/python3.10/site-packages/zarr/storage.py", line 682, in init_group
    _init_group_metadata(store=store, overwrite=overwrite, path=path, chunk_store=chunk_store)
  File "/Users/ivan.ivanov/miniconda3/envs/iohub/lib/python3.10/site-packages/zarr/storage.py", line 727, in _init_group_metadata
    raise ContainsGroupError(path)
zarr.errors.ContainsGroupError: path 's' contains a group

It seem like zarr (or the OS) does make a distinction between S and s. This is causing problems in #252

ieivanov commented 3 days ago

@ziw-liu how do you suggest we fix this issue? Does ome-zarr recommend one or the other? Should we stick to only lower or upper case row/column names? Or at least enforce consistent lower/upper case names?