ZeroDivisionError in L70 of api.py
norlandrhagen opened this issue ยท 5 comments
Hi there,
I'm having an issue when trying to rechunk a 4d zarr store. In the traceback at L70 of algorithm.py
(70 headroom = max_mem // chunk_mem
), I'm getting the error: ZeroDivisionError: integer division or modulo by zero
.
The snippet below should be a MRE.
import xarray as xr
import fsspec
import rechunker
import zarr
store_url = "gs://cmip6/CMIP6/CMIP/CCCma/CanESM5/historical/r1i1p1f1/Omon/thetao/gn/v20190429"
ds = xr.open_dataset(store_url, engine='zarr', chunks={}, decode_cf=False)
group = zarr.open_consolidated(store_url)
chunks_dict = {
'i': {'i': 128},
'j': {'j': 128},
'latitude': {'i': 128, 'j': 128},
'lev': {'lev': -1},
'lev_bnds': {'lev': -1, 'bnds': -1},
'longitude': {'i': 128, 'j': 128},
'thetao': {'i': 128, 'j': 128, 'time': 2, 'lev': -1},
'time': {'time': 2},
'time_bnds': {'time': 2, 'bnds': -1},
'vertices_latitude': {'i': 128, 'j': 128, 'vertices': -1},
'vertices_longitude': {'i': 128, 'j': 128, 'vertices': -1}
}
tmp_mapper = fsspec.get_mapper('temp_store')
tgt_mapper = fsspec.get_mapper('staging_store')
array_plan = rechunker.rechunk(group, chunks_dict, "1000MB", tgt_mapper, temp_store=tmp_mapper)
A few notes:
- It seems like the
ZeroDivisionError
happens on thethetao
var. - In L70 of algorithm.py, in the
headroom = max_mem // chunk_mem
calculation, somehow chunk_mem is being assigned to 0 in the above for loop.
chunk_mem = itemsize * prod(chunks)
if chunk_mem > max_mem:
raise ValueError(f"chunk_mem {chunk_mem} > max_mem {max_mem}")
headroom = max_mem // chunk_mem
new_chunks = list(chunks)
# only consolidate over these axes
axes = sorted(chunk_limit_per_axis.keys())[::-1]
for n_axis in axes:
c_new = min(
chunks[n_axis] * headroom, shape[n_axis], chunk_limit_per_axis[n_axis]
)
# print(f' axis {n_axis}, {chunks[n_axis]} -> {c_new}')
new_chunks[n_axis] = c_new
chunk_mem = itemsize * prod(new_chunks)
headroom = max_mem // chunk_mem
Traceback:
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
Cell In[11], line 2
1 # %pdb on
----> 2 array_plan = rechunker.rechunk(group, chunks_dict, "1000MB", tgt_mapper, temp_store=tmp_mapper)
File ~/opt/anaconda3/envs/install/envs/ncviewjs/lib/python3.10/site-packages/rechunker/api.py:302, in rechunk(source, target_chunks, max_mem, target_store, target_options, temp_store, temp_options, executor)
299 if isinstance(executor, str):
300 executor = _get_executor(executor)
--> 302 copy_spec, intermediate, target = _setup_rechunk(
303 source=source,
304 target_chunks=target_chunks,
305 max_mem=max_mem,
306 target_store=target_store,
307 target_options=target_options,
308 temp_store=temp_store,
309 temp_options=temp_options,
310 )
311 plan = executor.prepare_plan(copy_spec)
312 return Rechunked(executor, plan, source, intermediate, target)
File ~/opt/anaconda3/envs/install/envs/ncviewjs/lib/python3.10/site-packages/rechunker/api.py:457, in _setup_rechunk(source, target_chunks, max_mem, target_store, target_options, temp_store, temp_options)
454 copy_specs = []
456 for array_name, array_target_chunks in target_chunks.items():
--> 457 copy_spec = _setup_array_rechunk(
...
---> 70 headroom = max_mem // chunk_mem
72 if headroom == 1:
73 break
ZeroDivisionError: integer division or modulo by zero
Results of conda list
:
# Name Version Build Channel
adal 1.2.7 pyhd8ed1ab_0 conda-forge
adlfs 2022.11.2 pyhd8ed1ab_0 conda-forge
aiohttp 3.8.3 py310h90acd4f_1 conda-forge
aiosignal 1.3.1 pyhd8ed1ab_0 conda-forge
aiosqlite 0.18.0 pypi_0 pypi
alembic 1.9.1 pyhd8ed1ab_0 conda-forge
anyio 3.6.2 pyhd8ed1ab_0 conda-forge
appdirs 1.4.4 pypi_0 pypi
appnope 0.1.3 pyhd8ed1ab_0 conda-forge
apprise 1.2.1 pypi_0 pypi
argon2-cffi 21.3.0 pyhd8ed1ab_0 conda-forge
argon2-cffi-bindings 21.2.0 py310h90acd4f_3 conda-forge
asciitree 0.3.3 py_2 conda-forge
asgi-lifespan 2.0.0 pypi_0 pypi
asttokens 2.2.1 pyhd8ed1ab_0 conda-forge
async-timeout 4.0.2 pyhd8ed1ab_0 conda-forge
asyncpg 0.27.0 py310h90acd4f_1 conda-forge
attrs 22.2.0 pyh71513ae_0 conda-forge
awscli 1.27.43 py310h2ec42d9_0 conda-forge
azure-core 1.26.1 pyhd8ed1ab_0 conda-forge
azure-datalake-store 0.0.51 pyh9f0ad1d_0 conda-forge
azure-identity 1.12.0 pyhd8ed1ab_0 conda-forge
azure-storage-blob 12.14.1 pyhd8ed1ab_0 conda-forge
backcall 0.2.0 pyh9f0ad1d_0 conda-forge
backports 1.0 pyhd8ed1ab_3 conda-forge
backports.functools_lru_cache 1.6.4 pyhd8ed1ab_0 conda-forge
bcrypt 4.0.1 pypi_0 pypi
beautifulsoup4 4.11.1 pyha770c72_0 conda-forge
bleach 5.0.1 pyhd8ed1ab_0 conda-forge
blinker 1.5 pyhd8ed1ab_0 conda-forge
bokeh 2.4.3 pyhd8ed1ab_3 conda-forge
boto3 1.26.43 pyhd8ed1ab_0 conda-forge
botocore 1.29.43 pyhd8ed1ab_0 conda-forge
brotlipy 0.7.0 py310h90acd4f_1005 conda-forge
bzip2 1.0.8 h0d85af4_4 conda-forge
c-ares 1.18.1 h0d85af4_0 conda-forge
ca-certificates 2022.12.7 h033912b_0 conda-forge
cachetools 5.2.0 pyhd8ed1ab_0 conda-forge
certifi 2022.12.7 pyhd8ed1ab_0 conda-forge
cf_xarray 0.7.6 pyhd8ed1ab_0 conda-forge
cffi 1.15.1 py310ha78151a_3 conda-forge
cfgv 3.3.1 pypi_0 pypi
cftime 1.6.2 py310h936d966_1 conda-forge
charset-normalizer 2.1.1 pyhd8ed1ab_0 conda-forge
click 8.1.3 unix_pyhd8ed1ab_2 conda-forge
cloudpickle 2.2.0 pyhd8ed1ab_0 conda-forge
colorama 0.4.4 pyh9f0ad1d_0 conda-forge
comm 0.1.2 pyhd8ed1ab_0 conda-forge
commonmark 0.9.1 pypi_0 pypi
contourpy 1.0.6 pypi_0 pypi
coolname 2.2.0 pypi_0 pypi
croniter 1.3.8 pypi_0 pypi
cryptography 39.0.0 py310hdd0c95c_0 conda-forge
cycler 0.11.0 pypi_0 pypi
cytoolz 0.12.0 py310h90acd4f_1 conda-forge
dask 2022.12.1 pyhd8ed1ab_0 conda-forge
dask-core 2022.12.1 pyhd8ed1ab_0 conda-forge
dateparser 1.1.5 pypi_0 pypi
debugpy 1.6.5 py310h7a76584_0 conda-forge
decorator 5.1.1 pyhd8ed1ab_0 conda-forge
defusedxml 0.7.1 pyhd8ed1ab_0 conda-forge
dictdiffer 0.9.0 pyhd8ed1ab_0 conda-forge
distlib 0.3.6 pypi_0 pypi
distributed 2022.12.1 pyhd8ed1ab_0 conda-forge
docker 6.0.1 pypi_0 pypi
docutils 0.15.2 py310h2ec42d9_6 conda-forge
entrypoints 0.4 pyhd8ed1ab_0 conda-forge
executing 1.2.0 pyhd8ed1ab_0 conda-forge
fastapi 0.88.0 pyhd8ed1ab_0 conda-forge
fasteners 0.17.3 pyhd8ed1ab_0 conda-forge
fastprogress 1.0.3 pypi_0 pypi
filelock 3.9.0 pypi_0 pypi
flit-core 3.8.0 pyhd8ed1ab_0 conda-forge
fonttools 4.38.0 pypi_0 pypi
freetype 2.12.1 h3f81eb7_1 conda-forge
frozenlist 1.3.3 py310h90acd4f_0 conda-forge
fsspec 2022.11.0 pyhd8ed1ab_0 conda-forge
gcsfs 2022.11.0 pyhd8ed1ab_0 conda-forge
gettext 0.21.1 h8a4c099_0 conda-forge
glib 2.74.1 hbc0c0cd_1 conda-forge
glib-tools 2.74.1 hbc0c0cd_1 conda-forge
google-api-core 2.11.0 pyhd8ed1ab_0 conda-forge
google-auth 2.15.0 pyh1a96a4e_0 conda-forge
google-auth-oauthlib 0.8.0 pyhd8ed1ab_0 conda-forge
google-cloud-core 2.3.2 pyhd8ed1ab_0 conda-forge
google-cloud-storage 2.7.0 pyh1a96a4e_0 conda-forge
google-crc32c 1.1.2 py310h6f7428f_4 conda-forge
google-resumable-media 2.4.0 pyhd8ed1ab_0 conda-forge
googleapis-common-protos 1.57.1 pyhd8ed1ab_0 conda-forge
greenlet 2.0.1 py310h7a76584_0 conda-forge
griffe 0.25.3 pypi_0 pypi
grpcio 1.51.1 py310h0f91fd3_0 conda-forge
gst-plugins-base 1.21.3 h37e1711_1 conda-forge
gstreamer 1.21.3 h1d18e73_1 conda-forge
gunicorn 20.1.0 py310h2ec42d9_3 conda-forge
h11 0.14.0 pyhd8ed1ab_0 conda-forge
h2 4.1.0 pypi_0 pypi
heapdict 1.0.1 py_0 conda-forge
hpack 4.0.0 pypi_0 pypi
httpcore 0.16.3 pypi_0 pypi
httpx 0.23.3 pypi_0 pypi
hyperframe 6.0.1 pypi_0 pypi
icu 70.1 h96cf925_0 conda-forge
identify 2.5.12 pypi_0 pypi
idna 3.4 pyhd8ed1ab_0 conda-forge
importlib-metadata 6.0.0 pyha770c72_0 conda-forge
importlib_resources 5.10.2 pyhd8ed1ab_0 conda-forge
intake 0.6.6 pypi_0 pypi
intake-esm 2022.9.18 pypi_0 pypi
ipykernel 6.19.4 pyh736e0ef_0 conda-forge
ipython 8.8.0 pyhd1c38e8_0 conda-forge
ipython_genutils 0.2.0 py_1 conda-forge
ipywidgets 8.0.4 pyhd8ed1ab_0 conda-forge
isodate 0.6.1 pyhd8ed1ab_0 conda-forge
jedi 0.18.2 pyhd8ed1ab_0 conda-forge
jinja2 3.1.2 pyhd8ed1ab_1 conda-forge
jmespath 1.0.1 pyhd8ed1ab_0 conda-forge
jpeg 9e hac89ed1_2 conda-forge
jsonpatch 1.32 pypi_0 pypi
jsonpointer 2.3 pypi_0 pypi
jsonschema 4.17.3 pyhd8ed1ab_0 conda-forge
jupyter 1.0.0 py310h2ec42d9_8 conda-forge
jupyter_client 7.4.8 pyhd8ed1ab_0 conda-forge
jupyter_console 6.4.4 pyhd8ed1ab_0 conda-forge
jupyter_core 5.1.2 py310h2ec42d9_0 conda-forge
jupyter_events 0.4.0 pyhd8ed1ab_0 conda-forge
jupyter_server 2.0.6 pyhd8ed1ab_0 conda-forge
jupyter_server_terminals 0.4.3 pyhd8ed1ab_0 conda-forge
jupyterlab_pygments 0.2.2 pyhd8ed1ab_0 conda-forge
jupyterlab_widgets 3.0.5 pyhd8ed1ab_0 conda-forge
kiwisolver 1.4.4 pypi_0 pypi
krb5 1.20.1 h049b76e_0 conda-forge
kubernetes 25.3.0 pypi_0 pypi
lcms2 2.14 h29502cd_1 conda-forge
lerc 4.0.0 hb486fe8_0 conda-forge
libabseil 20220623.0 cxx17_h844d122_6 conda-forge
libblas 3.9.0 16_osx64_openblas conda-forge
libcblas 3.9.0 16_osx64_openblas conda-forge
libclang 13.0.1 default_he082bbe_0 conda-forge
libcrc32c 1.1.2 he49afe7_0 conda-forge
libcxx 14.0.6 hccf4f1f_0 conda-forge
libdeflate 1.14 hb7f2c08_0 conda-forge
libedit 3.1.20191231 h0678c8f_2 conda-forge
libffi 3.4.2 h0d85af4_5 conda-forge
libgfortran 5.0.0 11_3_0_h97931a8_27 conda-forge
libgfortran5 11.3.0 h082f757_27 conda-forge
libglib 2.74.1 h4c723e1_1 conda-forge
libgrpc 1.51.1 h966d1d5_0 conda-forge
libiconv 1.17 hac89ed1_0 conda-forge
libjpeg-turbo 2.1.4 hb7f2c08_0 conda-forge
liblapack 3.9.0 16_osx64_openblas conda-forge
libllvm13 13.0.1 h64f94b2_2 conda-forge
libogg 1.3.4 h35c211d_1 conda-forge
libopenblas 0.3.21 openmp_h429af6e_3 conda-forge
libopus 1.3.1 hc929b4f_1 conda-forge
libpng 1.6.39 ha978bb4_0 conda-forge
libpq 15.1 h3640bf0_2 conda-forge
libprotobuf 3.21.12 hbc0c0cd_0 conda-forge
libsodium 1.0.18 hbcb3906_1 conda-forge
libsqlite 3.40.0 ha978bb4_0 conda-forge
libtiff 4.5.0 h6268bbc_0 conda-forge
libvorbis 1.3.7 h046ec9c_0 conda-forge
libwebp-base 1.2.4 h775f41a_0 conda-forge
libxcb 1.13 h0d85af4_1004 conda-forge
libzlib 1.2.13 hfd90126_4 conda-forge
llvm-openmp 15.0.6 h61d9ccf_0 conda-forge
locket 1.0.0 pyhd8ed1ab_0 conda-forge
lz4 4.2.0 py310h8d4e1d9_0 conda-forge
lz4-c 1.9.3 he49afe7_1 conda-forge
mako 1.2.4 pyhd8ed1ab_0 conda-forge
markdown 3.4.1 pypi_0 pypi
markupsafe 2.1.1 py310h90acd4f_2 conda-forge
matplotlib 3.6.2 pypi_0 pypi
matplotlib-inline 0.1.6 pyhd8ed1ab_0 conda-forge
mistune 2.0.4 pyhd8ed1ab_0 conda-forge
msal 1.20.0 pyhd8ed1ab_0 conda-forge
msal_extensions 1.0.0 pyhd8ed1ab_0 conda-forge
msgpack-python 1.0.4 py310ha23aa8a_1 conda-forge
msrest 0.7.1 pyhd8ed1ab_0 conda-forge
multidict 6.0.4 py310h90acd4f_0 conda-forge
mypy_extensions 0.4.3 py310h2ec42d9_6 conda-forge
mysql-common 8.0.31 hc4b2c72_0 conda-forge
mysql-libs 8.0.31 h8658499_0 conda-forge
nbclassic 0.4.8 pyhd8ed1ab_0 conda-forge
nbclient 0.7.2 pyhd8ed1ab_0 conda-forge
nbconvert 7.2.7 pyhd8ed1ab_0 conda-forge
nbconvert-core 7.2.7 pyhd8ed1ab_0 conda-forge
nbconvert-pandoc 7.2.7 pyhd8ed1ab_0 conda-forge
nbformat 5.7.1 pyhd8ed1ab_0 conda-forge
ncurses 6.3 h96cf925_1 conda-forge
ncviewjs-backend 0.0.post28 pypi_0 pypi
nest-asyncio 1.5.6 pyhd8ed1ab_0 conda-forge
netcdf4 1.6.2 pypi_0 pypi
nodeenv 1.7.0 pypi_0 pypi
notebook 6.5.2 pyha770c72_1 conda-forge
notebook-shim 0.2.2 pyhd8ed1ab_0 conda-forge
nspr 4.35 hea0b92c_0 conda-forge
nss 3.78 ha8197d3_0 conda-forge
numcodecs 0.11.0 py310h7a76584_1 conda-forge
numpy 1.24.1 py310h1b7c290_0 conda-forge
oauthlib 3.2.2 pyhd8ed1ab_0 conda-forge
openjpeg 2.5.0 h13ac156_2 conda-forge
openssl 3.0.7 hfd90126_1 conda-forge
orjson 3.8.5 pypi_0 pypi
packaging 22.0 pyhd8ed1ab_0 conda-forge
pandas 1.5.2 py310hecf8f37_0 conda-forge
pandoc 2.19.2 h694c41f_1 conda-forge
pandocfilters 1.5.0 pyhd8ed1ab_0 conda-forge
paramiko 2.12.0 pypi_0 pypi
parso 0.8.3 pyhd8ed1ab_0 conda-forge
partd 1.3.0 pyhd8ed1ab_0 conda-forge
pathspec 0.10.3 pypi_0 pypi
pcre2 10.40 h1c4e4bc_0 conda-forge
pendulum 2.1.2 pypi_0 pypi
pexpect 4.8.0 pyh1a96a4e_2 conda-forge
pickleshare 0.7.5 py_1003 conda-forge
pillow 9.4.0 py310hab5364c_0 conda-forge
pip 22.3.1 pyhd8ed1ab_0 conda-forge
pkgutil-resolve-name 1.3.10 pyhd8ed1ab_0 conda-forge
platformdirs 2.6.2 pyhd8ed1ab_0 conda-forge
ply 3.11 py_1 conda-forge
portalocker 2.6.0 py310h2ec42d9_1 conda-forge
pre-commit 2.21.0 pypi_0 pypi
prefect 2.7.7 pypi_0 pypi
prometheus_client 0.15.0 pyhd8ed1ab_0 conda-forge
prompt-toolkit 3.0.36 pyha770c72_0 conda-forge
prompt_toolkit 3.0.36 hd8ed1ab_0 conda-forge
protobuf 4.21.12 py310h7a76584_0 conda-forge
psutil 5.9.4 py310h90acd4f_0 conda-forge
psycopg2 2.9.3 py310h31f19fa_2 conda-forge
pthread-stubs 0.4 hc929b4f_1001 conda-forge
ptyprocess 0.7.0 pyhd3deb0d_0 conda-forge
pure_eval 0.2.2 pyhd8ed1ab_0 conda-forge
pyasn1 0.4.8 py_0 conda-forge
pyasn1-modules 0.2.7 py_0 conda-forge
pycparser 2.21 pyhd8ed1ab_0 conda-forge
pydantic 1.10.4 py310h90acd4f_0 conda-forge
pygments 2.14.0 pyhd8ed1ab_0 conda-forge
pyjwt 2.6.0 pyhd8ed1ab_0 conda-forge
pynacl 1.5.0 pypi_0 pypi
pyopenssl 23.0.0 pyhd8ed1ab_0 conda-forge
pyparsing 3.0.9 pypi_0 pypi
pyqt 5.15.7 py310hdd03f62_2 conda-forge
pyqt5-sip 12.11.0 py310h415000c_2 conda-forge
pyrsistent 0.19.3 py310h90acd4f_0 conda-forge
pysocks 1.7.1 pyha2e5f31_6 conda-forge
python 3.10.8 he7542f4_0_cpython conda-forge
python-dateutil 2.8.2 pyhd8ed1ab_0 conda-forge
python-fastjsonschema 2.16.2 pyhd8ed1ab_0 conda-forge
python-json-logger 2.0.4 pyhd8ed1ab_0 conda-forge
python-slugify 7.0.0 pypi_0 pypi
python_abi 3.10 3_cp310 conda-forge
pytz 2022.7 pyhd8ed1ab_0 conda-forge
pytz-deprecation-shim 0.1.0.post0 pypi_0 pypi
pytzdata 2020.1 pypi_0 pypi
pyu2f 0.1.5 pyhd8ed1ab_0 conda-forge
pyyaml 5.4.1 py310h90acd4f_4 conda-forge
pyzmq 24.0.1 py310hf615a82_1 conda-forge
qt-main 5.15.6 haeff654_5 conda-forge
qtconsole 5.4.0 pyhd8ed1ab_0 conda-forge
qtconsole-base 5.4.0 pyha770c72_0 conda-forge
qtpy 2.3.0 pyhd8ed1ab_0 conda-forge
re2 2022.06.01 hb486fe8_1 conda-forge
readchar 4.0.3 pypi_0 pypi
readline 8.1.2 h3899abd_0 conda-forge
rechunker 0.5.0 pyhd8ed1ab_0 conda-forge
regex 2022.10.31 pypi_0 pypi
requests 2.28.1 pyhd8ed1ab_1 conda-forge
requests-oauthlib 1.3.1 pyhd8ed1ab_0 conda-forge
rfc3986 1.5.0 pypi_0 pypi
rich 13.0.0 pypi_0 pypi
rsa 4.7.2 pyh44b312d_0 conda-forge
ruamel.yaml 0.17.21 py310h90acd4f_2 conda-forge
ruamel.yaml.clib 0.2.7 py310h90acd4f_1 conda-forge
s3fs 0.4.2 py_0 conda-forge
s3transfer 0.6.0 pyhd8ed1ab_0 conda-forge
send2trash 1.8.0 pyhd8ed1ab_0 conda-forge
setuptools 65.6.3 pyhd8ed1ab_0 conda-forge
sip 6.7.5 py310h7a76584_0 conda-forge
six 1.16.0 pyh6c4a22f_0 conda-forge
skyplane 0.2.1 pypi_0 pypi
sniffio 1.3.0 pyhd8ed1ab_0 conda-forge
sortedcontainers 2.4.0 pyhd8ed1ab_0 conda-forge
soupsieve 2.3.2.post1 pyhd8ed1ab_0 conda-forge
sqlalchemy 1.4.41 py310h90acd4f_0 conda-forge
sqlalchemy2-stubs 0.0.2a31 pyhd8ed1ab_0 conda-forge
sqlite 3.40.0 h9ae0607_0 conda-forge
sqlmodel 0.0.8 pyhd8ed1ab_0 conda-forge
sshtunnel 0.4.0 pypi_0 pypi
stack_data 0.6.2 pyhd8ed1ab_0 conda-forge
starlette 0.22.0 pyhd8ed1ab_0 conda-forge
tblib 1.7.0 pyhd8ed1ab_0 conda-forge
terminado 0.17.1 pyhd1c38e8_0 conda-forge
text-unidecode 1.3 pypi_0 pypi
tinycss2 1.2.1 pyhd8ed1ab_0 conda-forge
tk 8.6.12 h5dbffcc_0 conda-forge
toml 0.10.2 pyhd8ed1ab_0 conda-forge
toolz 0.12.0 pyhd8ed1ab_0 conda-forge
tornado 6.2 py310h90acd4f_1 conda-forge
traitlets 5.8.0 pyhd8ed1ab_0 conda-forge
typer 0.7.0 pypi_0 pypi
typing-extensions 4.4.0 hd8ed1ab_0 conda-forge
typing_extensions 4.4.0 pyha770c72_0 conda-forge
tzdata 2022.7 pypi_0 pypi
tzlocal 4.2 pypi_0 pypi
universal_pathlib 0.0.21 pyh191b570_0 conda-forge
urllib3 1.26.13 pyhd8ed1ab_0 conda-forge
uvicorn 0.20.0 py310h2ec42d9_1 conda-forge
virtualenv 20.17.1 pypi_0 pypi
wcwidth 0.2.5 pyh9f0ad1d_2 conda-forge
webencodings 0.5.1 py_1 conda-forge
websocket-client 1.4.2 pyhd8ed1ab_0 conda-forge
wheel 0.38.4 pyhd8ed1ab_0 conda-forge
widgetsnbextension 4.0.5 pyhd8ed1ab_0 conda-forge
xarray 2022.12.0 pyhd8ed1ab_0 conda-forge
xorg-libxau 1.0.9 h35c211d_0 conda-forge
xorg-libxdmcp 1.1.3 h35c211d_0 conda-forge
xz 5.2.6 h775f41a_0 conda-forge
yaml 0.2.5 h0d85af4_2 conda-forge
yarl 1.8.2 py310h90acd4f_0 conda-forge
zarr 2.13.3 pyhd8ed1ab_0 conda-forge
zeromq 4.3.4 he49afe7_1 conda-forge
zict 2.2.0 pyhd8ed1ab_0 conda-forge
zipp 3.11.0 pyhd8ed1ab_0 conda-forge
zlib 1.2.13 hfd90126_4 conda-forge
zstd 1.5.2 hfa58983_4 conda-forge
Wondering if anyone has any thoughts on why this might be happening.
Thanks!
Thanks for sharing. Can reproduce it even more simply with
target_chunks = (2, -1, 128, 128)
rechunker.rechunk(group['thetao'], target_chunks, "1000MB", tgt_mapper, temp_store=tmp_mapper)
I'll investigate.
So it looks like we can fix it with
target_chunks = (2, 45, 128, 128)
My impression is that we don't support the syntax -1
to mean "the full size of the dimension." This could easily be fixed. Or we could raise an error if you pass a chunk shape as a negative number.
Thanks for the wildly quick response @rabernat!
Didn't realize the -1
means the full size on the dim wasn't supported. Either of those options sounds like an improvement to me!
PR welcome! ๐
The check would go here:
rechunker/rechunker/algorithm.py
Line 68 in 46db807
Just replace the special value of -1 with the corresponding shape (i.e. swap -1 for 45 like I did above), something like
new_chunks = [s if c == -1 else c for c, s in zip(chunks, shape)]
Sounds great! I'll open up a PR.