[v3] SyncError: Calling sync() from within a running loop #2133

Description

@jhamman

Zarr version

'3.0.0a2.dev5+g8446607e.d20240827'

Numcodecs version

0.13.0

Python Version

3.11

Operating System

Mac

Installation

pip

Description

Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

Steps to reproduce

a=np.arange(10)
za=zarr.array(a, chunks=2)
ix= [False, True, False, True, False, True, False, True, False, True]
zix=zarr.array(ix, chunks=2)
za=zarr.array(a, chunks=2)
za.oindex[zix]

Produces this traceback 👇

---------------------------------------------------------------------------
SyncError Traceback (most recent call last)
Cell In[102], line 7
5 zix = zarr.array(ix, chunks=2)
6 za = zarr.array(a, chunks=2)
----> 7 za.oindex[zix] # will not load all zix into memory
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
843 new_selection = ensure_tuple(new_selection)
844 new_selection = replace_lists(new_selection)
--> 845 return self.array.get_orthogonal_selection(
846 cast(OrthogonalSelection, new_selection), fields=fields
847 )
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
1336 prototype = default_buffer_prototype()
1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
-> 1338 return sync(
1339 self._async_array._get_selection(
1340 indexer=indexer, out=out, fields=fields, prototype=prototype
1341 )
1342 )
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
88 return_result =next(iter(finished)).result()
90ifisinstance(return_result, BaseException):
---> 91 raise return_result
92else:
93return return_result
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
47 exception, the exception will be returned.
48"""49try:
---> 50 return await coro
51exceptExceptionas ex:
52return ex
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
458 out_buffer = prototype.nd_buffer.create(
459 shape=indexer.shape,
460 dtype=out_dtype,
461 order=self.order,
462 fill_value=self.metadata.fill_value,
463 )
464if product(indexer.shape) >0:
465# reading chunks and decoding them466awaitself.codec_pipeline.read(
--> 467 [
468 (
469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
471 chunk_selection,
472 out_selection,
473 )
474for chunk_coords, chunk_selection, out_selection in indexer
475 ],
476 out_buffer,
477 drop_axes=indexer.drop_axes,
478 )
479return out_buffer.as_ndarray_like()
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
458 out_buffer = prototype.nd_buffer.create(
459 shape=indexer.shape,
460 dtype=out_dtype,
461 order=self.order,
462 fill_value=self.metadata.fill_value,
463 )
464if product(indexer.shape) >0:
465# reading chunks and decoding them466awaitself.codec_pipeline.read(
--> 467 [
468 (
469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
471 chunk_selection,
472 out_selection,
473 )
474for chunk_coords, chunk_selection, out_selection in indexer
475 ],
476 out_buffer,
477 drop_axes=indexer.drop_axes,
478 )
479return out_buffer.as_ndarray_like()
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
812def__iter__(self) -> Iterator[ChunkProjection]:
--> 813 for dim_projections in itertools.product(*self.dim_indexers):
814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
816 p.dim_chunk_sel for p in dim_projections
817 )
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
539for dim_chunk_ix inself.dim_chunk_ixs:
540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
--> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
--> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
900else:
901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
1336 prototype = default_buffer_prototype()
1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
-> 1338 return sync(
1339 self._async_array._get_selection(
1340 indexer=indexer, out=out, fields=fields, prototype=prototype
1341 )
1342 )
File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
76 loop0 = asyncio.events.get_running_loop()
77if loop0 is loop:
---> 78 raise SyncError("Calling sync() from within a running loop")
79exceptRuntimeError:
80passSyncError: Calling sync() from within a running loop

Additional output

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugPotential issues with the zarr-python library

    Type

    No type

    Projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    [v3] SyncError: Calling sync() from within a running loop #2133

    Description

    @jhamman

    Zarr version

    '3.0.0a2.dev5+g8446607e.d20240827'

    Numcodecs version

    0.13.0

    Python Version

    3.11

    Operating System

    Mac

    Installation

    pip

    Description

    Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

    Steps to reproduce

    a=np.arange(10)
    za=zarr.array(a, chunks=2)
    ix= [False, True, False, True, False, True, False, True, False, True]
    zix=zarr.array(ix, chunks=2)
    za=zarr.array(a, chunks=2)
    za.oindex[zix]

    Produces this traceback 👇

    ---------------------------------------------------------------------------
    SyncError Traceback (most recent call last)
    Cell In[102], line 7
    5 zix = zarr.array(ix, chunks=2)
    6 za = zarr.array(a, chunks=2)
    ----> 7 za.oindex[zix] # will not load all zix into memory
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
    843 new_selection = ensure_tuple(new_selection)
    844 new_selection = replace_lists(new_selection)
    --> 845 return self.array.get_orthogonal_selection(
    846 cast(OrthogonalSelection, new_selection), fields=fields
    847 )
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
    1336 prototype = default_buffer_prototype()
    1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
    -> 1338 return sync(
    1339 self._async_array._get_selection(
    1340 indexer=indexer, out=out, fields=fields, prototype=prototype
    1341 )
    1342 )
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
    88 return_result =next(iter(finished)).result()
    90ifisinstance(return_result, BaseException):
    ---> 91 raise return_result
    92else:
    93return return_result
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
    45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
    47 exception, the exception will be returned.
    48"""49try:
    ---> 50 return await coro
    51exceptExceptionas ex:
    52return ex
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
    458 out_buffer = prototype.nd_buffer.create(
    459 shape=indexer.shape,
    460 dtype=out_dtype,
    461 order=self.order,
    462 fill_value=self.metadata.fill_value,
    463 )
    464if product(indexer.shape) >0:
    465# reading chunks and decoding them466awaitself.codec_pipeline.read(
    --> 467 [
    468 (
    469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
    470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
    471 chunk_selection,
    472 out_selection,
    473 )
    474for chunk_coords, chunk_selection, out_selection in indexer
    475 ],
    476 out_buffer,
    477 drop_axes=indexer.drop_axes,
    478 )
    479return out_buffer.as_ndarray_like()
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
    458 out_buffer = prototype.nd_buffer.create(
    459 shape=indexer.shape,
    460 dtype=out_dtype,
    461 order=self.order,
    462 fill_value=self.metadata.fill_value,
    463 )
    464if product(indexer.shape) >0:
    465# reading chunks and decoding them466awaitself.codec_pipeline.read(
    --> 467 [
    468 (
    469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
    470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
    471 chunk_selection,
    472 out_selection,
    473 )
    474for chunk_coords, chunk_selection, out_selection in indexer
    475 ],
    476 out_buffer,
    477 drop_axes=indexer.drop_axes,
    478 )
    479return out_buffer.as_ndarray_like()
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
    812def__iter__(self) -> Iterator[ChunkProjection]:
    --> 813 for dim_projections in itertools.product(*self.dim_indexers):
    814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
    815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
    816 p.dim_chunk_sel for p in dim_projections
    817 )
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
    539for dim_chunk_ix inself.dim_chunk_ixs:
    540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
    --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
    544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
    897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
    898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
    --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
    900else:
    901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
    1336 prototype = default_buffer_prototype()
    1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
    -> 1338 return sync(
    1339 self._async_array._get_selection(
    1340 indexer=indexer, out=out, fields=fields, prototype=prototype
    1341 )
    1342 )
    File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
    76 loop0 = asyncio.events.get_running_loop()
    77if loop0 is loop:
    ---> 78 raise SyncError("Calling sync() from within a running loop")
    79exceptRuntimeError:
    80passSyncError: Calling sync() from within a running loop

    Additional output

    No response

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      bugPotential issues with the zarr-python library

      Type

      No type

      Projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      [v3] SyncError: Calling sync() from within a running loop #2133

      Description

      @jhamman

      Zarr version

      '3.0.0a2.dev5+g8446607e.d20240827'

      Numcodecs version

      0.13.0

      Python Version

      3.11

      Operating System

      Mac

      Installation

      pip

      Description

      Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

      Steps to reproduce

      a=np.arange(10)
      za=zarr.array(a, chunks=2)
      ix= [False, True, False, True, False, True, False, True, False, True]
      zix=zarr.array(ix, chunks=2)
      za=zarr.array(a, chunks=2)
      za.oindex[zix]

      Produces this traceback 👇

      ---------------------------------------------------------------------------
      SyncError Traceback (most recent call last)
      Cell In[102], line 7
      5 zix = zarr.array(ix, chunks=2)
      6 za = zarr.array(a, chunks=2)
      ----> 7 za.oindex[zix] # will not load all zix into memory
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
      843 new_selection = ensure_tuple(new_selection)
      844 new_selection = replace_lists(new_selection)
      --> 845 return self.array.get_orthogonal_selection(
      846 cast(OrthogonalSelection, new_selection), fields=fields
      847 )
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
      1336 prototype = default_buffer_prototype()
      1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
      -> 1338 return sync(
      1339 self._async_array._get_selection(
      1340 indexer=indexer, out=out, fields=fields, prototype=prototype
      1341 )
      1342 )
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
      88 return_result =next(iter(finished)).result()
      90ifisinstance(return_result, BaseException):
      ---> 91 raise return_result
      92else:
      93return return_result
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
      45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
      47 exception, the exception will be returned.
      48"""49try:
      ---> 50 return await coro
      51exceptExceptionas ex:
      52return ex
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
      458 out_buffer = prototype.nd_buffer.create(
      459 shape=indexer.shape,
      460 dtype=out_dtype,
      461 order=self.order,
      462 fill_value=self.metadata.fill_value,
      463 )
      464if product(indexer.shape) >0:
      465# reading chunks and decoding them466awaitself.codec_pipeline.read(
      --> 467 [
      468 (
      469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
      470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
      471 chunk_selection,
      472 out_selection,
      473 )
      474for chunk_coords, chunk_selection, out_selection in indexer
      475 ],
      476 out_buffer,
      477 drop_axes=indexer.drop_axes,
      478 )
      479return out_buffer.as_ndarray_like()
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
      458 out_buffer = prototype.nd_buffer.create(
      459 shape=indexer.shape,
      460 dtype=out_dtype,
      461 order=self.order,
      462 fill_value=self.metadata.fill_value,
      463 )
      464if product(indexer.shape) >0:
      465# reading chunks and decoding them466awaitself.codec_pipeline.read(
      --> 467 [
      468 (
      469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
      470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
      471 chunk_selection,
      472 out_selection,
      473 )
      474for chunk_coords, chunk_selection, out_selection in indexer
      475 ],
      476 out_buffer,
      477 drop_axes=indexer.drop_axes,
      478 )
      479return out_buffer.as_ndarray_like()
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
      812def__iter__(self) -> Iterator[ChunkProjection]:
      --> 813 for dim_projections in itertools.product(*self.dim_indexers):
      814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
      815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
      816 p.dim_chunk_sel for p in dim_projections
      817 )
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
      539for dim_chunk_ix inself.dim_chunk_ixs:
      540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
      --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
      544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
      897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
      898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
      --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
      900else:
      901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
      1336 prototype = default_buffer_prototype()
      1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
      -> 1338 return sync(
      1339 self._async_array._get_selection(
      1340 indexer=indexer, out=out, fields=fields, prototype=prototype
      1341 )
      1342 )
      File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
      76 loop0 = asyncio.events.get_running_loop()
      77if loop0 is loop:
      ---> 78 raise SyncError("Calling sync() from within a running loop")
      79exceptRuntimeError:
      80passSyncError: Calling sync() from within a running loop

      Additional output

      No response

      Metadata

      Metadata

      Assignees

      No one assigned

        Labels

        bugPotential issues with the zarr-python library

        Type

        No type

        Projects

        Milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        [v3] SyncError: Calling sync() from within a running loop #2133

        Description

        @jhamman

        Zarr version

        '3.0.0a2.dev5+g8446607e.d20240827'

        Numcodecs version

        0.13.0

        Python Version

        3.11

        Operating System

        Mac

        Installation

        pip

        Description

        Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

        Steps to reproduce

        a=np.arange(10)
        za=zarr.array(a, chunks=2)
        ix= [False, True, False, True, False, True, False, True, False, True]
        zix=zarr.array(ix, chunks=2)
        za=zarr.array(a, chunks=2)
        za.oindex[zix]

        Produces this traceback 👇

        ---------------------------------------------------------------------------
        SyncError Traceback (most recent call last)
        Cell In[102], line 7
        5 zix = zarr.array(ix, chunks=2)
        6 za = zarr.array(a, chunks=2)
        ----> 7 za.oindex[zix] # will not load all zix into memory
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
        843 new_selection = ensure_tuple(new_selection)
        844 new_selection = replace_lists(new_selection)
        --> 845 return self.array.get_orthogonal_selection(
        846 cast(OrthogonalSelection, new_selection), fields=fields
        847 )
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
        1336 prototype = default_buffer_prototype()
        1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
        -> 1338 return sync(
        1339 self._async_array._get_selection(
        1340 indexer=indexer, out=out, fields=fields, prototype=prototype
        1341 )
        1342 )
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
        88 return_result =next(iter(finished)).result()
        90ifisinstance(return_result, BaseException):
        ---> 91 raise return_result
        92else:
        93return return_result
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
        45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
        47 exception, the exception will be returned.
        48"""49try:
        ---> 50 return await coro
        51exceptExceptionas ex:
        52return ex
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
        458 out_buffer = prototype.nd_buffer.create(
        459 shape=indexer.shape,
        460 dtype=out_dtype,
        461 order=self.order,
        462 fill_value=self.metadata.fill_value,
        463 )
        464if product(indexer.shape) >0:
        465# reading chunks and decoding them466awaitself.codec_pipeline.read(
        --> 467 [
        468 (
        469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
        470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
        471 chunk_selection,
        472 out_selection,
        473 )
        474for chunk_coords, chunk_selection, out_selection in indexer
        475 ],
        476 out_buffer,
        477 drop_axes=indexer.drop_axes,
        478 )
        479return out_buffer.as_ndarray_like()
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
        458 out_buffer = prototype.nd_buffer.create(
        459 shape=indexer.shape,
        460 dtype=out_dtype,
        461 order=self.order,
        462 fill_value=self.metadata.fill_value,
        463 )
        464if product(indexer.shape) >0:
        465# reading chunks and decoding them466awaitself.codec_pipeline.read(
        --> 467 [
        468 (
        469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
        470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
        471 chunk_selection,
        472 out_selection,
        473 )
        474for chunk_coords, chunk_selection, out_selection in indexer
        475 ],
        476 out_buffer,
        477 drop_axes=indexer.drop_axes,
        478 )
        479return out_buffer.as_ndarray_like()
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
        812def__iter__(self) -> Iterator[ChunkProjection]:
        --> 813 for dim_projections in itertools.product(*self.dim_indexers):
        814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
        815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
        816 p.dim_chunk_sel for p in dim_projections
        817 )
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
        539for dim_chunk_ix inself.dim_chunk_ixs:
        540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
        --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
        544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
        897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
        898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
        --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
        900else:
        901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
        1336 prototype = default_buffer_prototype()
        1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
        -> 1338 return sync(
        1339 self._async_array._get_selection(
        1340 indexer=indexer, out=out, fields=fields, prototype=prototype
        1341 )
        1342 )
        File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
        76 loop0 = asyncio.events.get_running_loop()
        77if loop0 is loop:
        ---> 78 raise SyncError("Calling sync() from within a running loop")
        79exceptRuntimeError:
        80passSyncError: Calling sync() from within a running loop

        Additional output

        No response

        Metadata

        Metadata

        Assignees

        No one assigned

          Labels

          bugPotential issues with the zarr-python library

          Type

          No type

          Projects

          Milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          [v3] SyncError: Calling sync() from within a running loop #2133

          Description

          @jhamman

          Zarr version

          '3.0.0a2.dev5+g8446607e.d20240827'

          Numcodecs version

          0.13.0

          Python Version

          3.11

          Operating System

          Mac

          Installation

          pip

          Description

          Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

          Steps to reproduce

          a=np.arange(10)
          za=zarr.array(a, chunks=2)
          ix= [False, True, False, True, False, True, False, True, False, True]
          zix=zarr.array(ix, chunks=2)
          za=zarr.array(a, chunks=2)
          za.oindex[zix]

          Produces this traceback 👇

          ---------------------------------------------------------------------------
          SyncError Traceback (most recent call last)
          Cell In[102], line 7
          5 zix = zarr.array(ix, chunks=2)
          6 za = zarr.array(a, chunks=2)
          ----> 7 za.oindex[zix] # will not load all zix into memory
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
          843 new_selection = ensure_tuple(new_selection)
          844 new_selection = replace_lists(new_selection)
          --> 845 return self.array.get_orthogonal_selection(
          846 cast(OrthogonalSelection, new_selection), fields=fields
          847 )
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
          1336 prototype = default_buffer_prototype()
          1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
          -> 1338 return sync(
          1339 self._async_array._get_selection(
          1340 indexer=indexer, out=out, fields=fields, prototype=prototype
          1341 )
          1342 )
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
          88 return_result =next(iter(finished)).result()
          90ifisinstance(return_result, BaseException):
          ---> 91 raise return_result
          92else:
          93return return_result
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
          45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
          47 exception, the exception will be returned.
          48"""49try:
          ---> 50 return await coro
          51exceptExceptionas ex:
          52return ex
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
          458 out_buffer = prototype.nd_buffer.create(
          459 shape=indexer.shape,
          460 dtype=out_dtype,
          461 order=self.order,
          462 fill_value=self.metadata.fill_value,
          463 )
          464if product(indexer.shape) >0:
          465# reading chunks and decoding them466awaitself.codec_pipeline.read(
          --> 467 [
          468 (
          469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
          470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
          471 chunk_selection,
          472 out_selection,
          473 )
          474for chunk_coords, chunk_selection, out_selection in indexer
          475 ],
          476 out_buffer,
          477 drop_axes=indexer.drop_axes,
          478 )
          479return out_buffer.as_ndarray_like()
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
          458 out_buffer = prototype.nd_buffer.create(
          459 shape=indexer.shape,
          460 dtype=out_dtype,
          461 order=self.order,
          462 fill_value=self.metadata.fill_value,
          463 )
          464if product(indexer.shape) >0:
          465# reading chunks and decoding them466awaitself.codec_pipeline.read(
          --> 467 [
          468 (
          469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
          470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
          471 chunk_selection,
          472 out_selection,
          473 )
          474for chunk_coords, chunk_selection, out_selection in indexer
          475 ],
          476 out_buffer,
          477 drop_axes=indexer.drop_axes,
          478 )
          479return out_buffer.as_ndarray_like()
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
          812def__iter__(self) -> Iterator[ChunkProjection]:
          --> 813 for dim_projections in itertools.product(*self.dim_indexers):
          814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
          815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
          816 p.dim_chunk_sel for p in dim_projections
          817 )
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
          539for dim_chunk_ix inself.dim_chunk_ixs:
          540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
          --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
          544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
          897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
          898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
          --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
          900else:
          901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
          1336 prototype = default_buffer_prototype()
          1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
          -> 1338 return sync(
          1339 self._async_array._get_selection(
          1340 indexer=indexer, out=out, fields=fields, prototype=prototype
          1341 )
          1342 )
          File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
          76 loop0 = asyncio.events.get_running_loop()
          77if loop0 is loop:
          ---> 78 raise SyncError("Calling sync() from within a running loop")
          79exceptRuntimeError:
          80passSyncError: Calling sync() from within a running loop

          Additional output

          No response

          Metadata

          Metadata

          Assignees

          No one assigned

            Labels

            bugPotential issues with the zarr-python library

            Type

            No type

            Projects

            Milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            [v3] SyncError: Calling sync() from within a running loop #2133

            Description

            @jhamman

            Zarr version

            '3.0.0a2.dev5+g8446607e.d20240827'

            Numcodecs version

            0.13.0

            Python Version

            3.11

            Operating System

            Mac

            Installation

            pip

            Description

            Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

            Steps to reproduce

            a=np.arange(10)
            za=zarr.array(a, chunks=2)
            ix= [False, True, False, True, False, True, False, True, False, True]
            zix=zarr.array(ix, chunks=2)
            za=zarr.array(a, chunks=2)
            za.oindex[zix]

            Produces this traceback 👇

            ---------------------------------------------------------------------------
            SyncError Traceback (most recent call last)
            Cell In[102], line 7
            5 zix = zarr.array(ix, chunks=2)
            6 za = zarr.array(a, chunks=2)
            ----> 7 za.oindex[zix] # will not load all zix into memory
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
            843 new_selection = ensure_tuple(new_selection)
            844 new_selection = replace_lists(new_selection)
            --> 845 return self.array.get_orthogonal_selection(
            846 cast(OrthogonalSelection, new_selection), fields=fields
            847 )
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
            1336 prototype = default_buffer_prototype()
            1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
            -> 1338 return sync(
            1339 self._async_array._get_selection(
            1340 indexer=indexer, out=out, fields=fields, prototype=prototype
            1341 )
            1342 )
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
            88 return_result =next(iter(finished)).result()
            90ifisinstance(return_result, BaseException):
            ---> 91 raise return_result
            92else:
            93return return_result
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
            45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
            47 exception, the exception will be returned.
            48"""49try:
            ---> 50 return await coro
            51exceptExceptionas ex:
            52return ex
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
            458 out_buffer = prototype.nd_buffer.create(
            459 shape=indexer.shape,
            460 dtype=out_dtype,
            461 order=self.order,
            462 fill_value=self.metadata.fill_value,
            463 )
            464if product(indexer.shape) >0:
            465# reading chunks and decoding them466awaitself.codec_pipeline.read(
            --> 467 [
            468 (
            469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
            470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
            471 chunk_selection,
            472 out_selection,
            473 )
            474for chunk_coords, chunk_selection, out_selection in indexer
            475 ],
            476 out_buffer,
            477 drop_axes=indexer.drop_axes,
            478 )
            479return out_buffer.as_ndarray_like()
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
            458 out_buffer = prototype.nd_buffer.create(
            459 shape=indexer.shape,
            460 dtype=out_dtype,
            461 order=self.order,
            462 fill_value=self.metadata.fill_value,
            463 )
            464if product(indexer.shape) >0:
            465# reading chunks and decoding them466awaitself.codec_pipeline.read(
            --> 467 [
            468 (
            469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
            470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
            471 chunk_selection,
            472 out_selection,
            473 )
            474for chunk_coords, chunk_selection, out_selection in indexer
            475 ],
            476 out_buffer,
            477 drop_axes=indexer.drop_axes,
            478 )
            479return out_buffer.as_ndarray_like()
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
            812def__iter__(self) -> Iterator[ChunkProjection]:
            --> 813 for dim_projections in itertools.product(*self.dim_indexers):
            814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
            815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
            816 p.dim_chunk_sel for p in dim_projections
            817 )
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
            539for dim_chunk_ix inself.dim_chunk_ixs:
            540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
            --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
            544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
            897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
            898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
            --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
            900else:
            901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
            1336 prototype = default_buffer_prototype()
            1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
            -> 1338 return sync(
            1339 self._async_array._get_selection(
            1340 indexer=indexer, out=out, fields=fields, prototype=prototype
            1341 )
            1342 )
            File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
            76 loop0 = asyncio.events.get_running_loop()
            77if loop0 is loop:
            ---> 78 raise SyncError("Calling sync() from within a running loop")
            79exceptRuntimeError:
            80passSyncError: Calling sync() from within a running loop

            Additional output

            No response

            Metadata

            Metadata

            Assignees

            No one assigned

              Labels

              bugPotential issues with the zarr-python library

              Type

              No type

              Projects

              Milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              [v3] SyncError: Calling sync() from within a running loop #2133

              Description

              @jhamman

              Zarr version

              '3.0.0a2.dev5+g8446607e.d20240827'

              Numcodecs version

              0.13.0

              Python Version

              3.11

              Operating System

              Mac

              Installation

              pip

              Description

              Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

              Steps to reproduce

              a=np.arange(10)
              za=zarr.array(a, chunks=2)
              ix= [False, True, False, True, False, True, False, True, False, True]
              zix=zarr.array(ix, chunks=2)
              za=zarr.array(a, chunks=2)
              za.oindex[zix]

              Produces this traceback 👇

              ---------------------------------------------------------------------------
              SyncError Traceback (most recent call last)
              Cell In[102], line 7
              5 zix = zarr.array(ix, chunks=2)
              6 za = zarr.array(a, chunks=2)
              ----> 7 za.oindex[zix] # will not load all zix into memory
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
              843 new_selection = ensure_tuple(new_selection)
              844 new_selection = replace_lists(new_selection)
              --> 845 return self.array.get_orthogonal_selection(
              846 cast(OrthogonalSelection, new_selection), fields=fields
              847 )
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
              1336 prototype = default_buffer_prototype()
              1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
              -> 1338 return sync(
              1339 self._async_array._get_selection(
              1340 indexer=indexer, out=out, fields=fields, prototype=prototype
              1341 )
              1342 )
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
              88 return_result =next(iter(finished)).result()
              90ifisinstance(return_result, BaseException):
              ---> 91 raise return_result
              92else:
              93return return_result
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
              45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
              47 exception, the exception will be returned.
              48"""49try:
              ---> 50 return await coro
              51exceptExceptionas ex:
              52return ex
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
              458 out_buffer = prototype.nd_buffer.create(
              459 shape=indexer.shape,
              460 dtype=out_dtype,
              461 order=self.order,
              462 fill_value=self.metadata.fill_value,
              463 )
              464if product(indexer.shape) >0:
              465# reading chunks and decoding them466awaitself.codec_pipeline.read(
              --> 467 [
              468 (
              469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
              470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
              471 chunk_selection,
              472 out_selection,
              473 )
              474for chunk_coords, chunk_selection, out_selection in indexer
              475 ],
              476 out_buffer,
              477 drop_axes=indexer.drop_axes,
              478 )
              479return out_buffer.as_ndarray_like()
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
              458 out_buffer = prototype.nd_buffer.create(
              459 shape=indexer.shape,
              460 dtype=out_dtype,
              461 order=self.order,
              462 fill_value=self.metadata.fill_value,
              463 )
              464if product(indexer.shape) >0:
              465# reading chunks and decoding them466awaitself.codec_pipeline.read(
              --> 467 [
              468 (
              469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
              470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
              471 chunk_selection,
              472 out_selection,
              473 )
              474for chunk_coords, chunk_selection, out_selection in indexer
              475 ],
              476 out_buffer,
              477 drop_axes=indexer.drop_axes,
              478 )
              479return out_buffer.as_ndarray_like()
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
              812def__iter__(self) -> Iterator[ChunkProjection]:
              --> 813 for dim_projections in itertools.product(*self.dim_indexers):
              814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
              815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
              816 p.dim_chunk_sel for p in dim_projections
              817 )
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
              539for dim_chunk_ix inself.dim_chunk_ixs:
              540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
              --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
              544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
              897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
              898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
              --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
              900else:
              901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
              1336 prototype = default_buffer_prototype()
              1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
              -> 1338 return sync(
              1339 self._async_array._get_selection(
              1340 indexer=indexer, out=out, fields=fields, prototype=prototype
              1341 )
              1342 )
              File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
              76 loop0 = asyncio.events.get_running_loop()
              77if loop0 is loop:
              ---> 78 raise SyncError("Calling sync() from within a running loop")
              79exceptRuntimeError:
              80passSyncError: Calling sync() from within a running loop

              Additional output

              No response

              Metadata

              Metadata

              Assignees

              No one assigned

                Labels

                bugPotential issues with the zarr-python library

                Type

                No type

                Projects

                Milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                [v3] SyncError: Calling sync() from within a running loop #2133

                Description

                @jhamman

                Zarr version

                '3.0.0a2.dev5+g8446607e.d20240827'

                Numcodecs version

                0.13.0

                Python Version

                3.11

                Operating System

                Mac

                Installation

                pip

                Description

                Indexing a zarr array with another zarr array causes our sync method to be called inside another sync call.

                Steps to reproduce

                a=np.arange(10)
                za=zarr.array(a, chunks=2)
                ix= [False, True, False, True, False, True, False, True, False, True]
                zix=zarr.array(ix, chunks=2)
                za=zarr.array(a, chunks=2)
                za.oindex[zix]

                Produces this traceback 👇

                ---------------------------------------------------------------------------
                SyncError Traceback (most recent call last)
                Cell In[102], line 7
                5 zix = zarr.array(ix, chunks=2)
                6 za = zarr.array(a, chunks=2)
                ----> 7 za.oindex[zix] # will not load all zix into memory
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:845, in OIndex.__getitem__(self, selection)
                843 new_selection = ensure_tuple(new_selection)
                844 new_selection = replace_lists(new_selection)
                --> 845 return self.array.get_orthogonal_selection(
                846 cast(OrthogonalSelection, new_selection), fields=fields
                847 )
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
                1336 prototype = default_buffer_prototype()
                1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
                -> 1338 return sync(
                1339 self._async_array._get_selection(
                1340 indexer=indexer, out=out, fields=fields, prototype=prototype
                1341 )
                1342 )
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:91, in sync(coro, loop, timeout)
                88 return_result =next(iter(finished)).result()
                90ifisinstance(return_result, BaseException):
                ---> 91 raise return_result
                92else:
                93return return_result
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:50, in _runner(coro)
                45"""46 Await a coroutine andreturn the result of running it. If awaiting the coroutine raises an
                47 exception, the exception will be returned.
                48"""49try:
                ---> 50 return await coro
                51exceptExceptionas ex:
                52return ex
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in AsyncArray._get_selection(self, indexer, prototype, out, fields)
                458 out_buffer = prototype.nd_buffer.create(
                459 shape=indexer.shape,
                460 dtype=out_dtype,
                461 order=self.order,
                462 fill_value=self.metadata.fill_value,
                463 )
                464if product(indexer.shape) >0:
                465# reading chunks and decoding them466awaitself.codec_pipeline.read(
                --> 467 [
                468 (
                469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
                470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
                471 chunk_selection,
                472 out_selection,
                473 )
                474for chunk_coords, chunk_selection, out_selection in indexer
                475 ],
                476 out_buffer,
                477 drop_axes=indexer.drop_axes,
                478 )
                479return out_buffer.as_ndarray_like()
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:467, in <listcomp>(.0)
                458 out_buffer = prototype.nd_buffer.create(
                459 shape=indexer.shape,
                460 dtype=out_dtype,
                461 order=self.order,
                462 fill_value=self.metadata.fill_value,
                463 )
                464if product(indexer.shape) >0:
                465# reading chunks and decoding them466awaitself.codec_pipeline.read(
                --> 467 [
                468 (
                469self.store_path /self.metadata.encode_chunk_key(chunk_coords),
                470self.metadata.get_chunk_spec(chunk_coords, self.order, prototype=prototype),
                471 chunk_selection,
                472 out_selection,
                473 )
                474for chunk_coords, chunk_selection, out_selection in indexer
                475 ],
                476 out_buffer,
                477 drop_axes=indexer.drop_axes,
                478 )
                479return out_buffer.as_ndarray_like()
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:813, in OrthogonalIndexer.__iter__(self)
                812def__iter__(self) -> Iterator[ChunkProjection]:
                --> 813 for dim_projections in itertools.product(*self.dim_indexers):
                814 chunk_coords =tuple(p.dim_chunk_ix for p in dim_projections)
                815 chunk_selection: tuple[Selector, ...] | npt.NDArray[Any] =tuple(
                816 p.dim_chunk_sel for p in dim_projections
                817 )
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/indexing.py:542, in BoolArrayDimIndexer.__iter__(self)
                539for dim_chunk_ix inself.dim_chunk_ixs:
                540# find region in chunk541 dim_offset = dim_chunk_ix *self.dim_chunk_len
                --> 542 dim_chunk_sel = self.dim_sel[dim_offset : dim_offset + self.dim_chunk_len]
                544# pad out if final chunk545if dim_chunk_sel.shape[0] <self.dim_chunk_len:
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:899, in Array.__getitem__(self, selection)
                897returnself.vindex[cast(CoordinateSelection | MaskSelection, selection)]
                898elif is_pure_orthogonal_indexing(pure_selection, self.ndim):
                --> 899 return self.get_orthogonal_selection(pure_selection, fields=fields)
                900else:
                901returnself.get_basic_selection(cast(BasicSelection, pure_selection), fields=fields)
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/array.py:1338, in Array.get_orthogonal_selection(self, selection, out, fields, prototype)
                1336 prototype = default_buffer_prototype()
                1337 indexer = OrthogonalIndexer(selection, self.shape, self.metadata.chunk_grid)
                -> 1338 return sync(
                1339 self._async_array._get_selection(
                1340 indexer=indexer, out=out, fields=fields, prototype=prototype
                1341 )
                1342 )
                File ~/Library/CloudStorage/Dropbox/src/zarr-python/src/zarr/core/sync.py:78, in sync(coro, loop, timeout)
                76 loop0 = asyncio.events.get_running_loop()
                77if loop0 is loop:
                ---> 78 raise SyncError("Calling sync() from within a running loop")
                79exceptRuntimeError:
                80passSyncError: Calling sync() from within a running loop

                Additional output

                No response

                Metadata

                Metadata

                Assignees

                No one assigned

                  Labels

                  bugPotential issues with the zarr-python library

                  Type

                  No type

                  Projects

                  Milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions