forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman
, '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

forward write_empty_chunks kwarg in group.require_dataset - #1051

Closed
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group
Closed

forward write_empty_chunks kwarg in group.require_dataset#1051
d-v-b wants to merge 18 commits into
zarr-developers:mainfrom
d-v-b:write_empty_chunks_group

Conversation

@d-v-b

Copy link
Copy Markdown
Contributor

Currently when using a Group to get an existing Array via Group.require_dataset, there's no way to control the "write_empty_chunksness" of the array (since Array.write_empty_chunks is not part of the array metadata). This means that you cannot call group.require_dataset('foo', shape=10, dtype='i4', write_empty_chunks=False) and get an array that has the desired .write_empty_chunks property (instead the write_empty_chunks kwarg is ignored).

A few other array properties are similar (synchronizer, cache_metadata, and cache_attrs), and in main these keyword arguments are extracted from the **kwargs argument to Group.require_dataset before being passed to the Array constructor. This PR expands this behavior to include write_empty_chunks, thereby enabling the control of the write_empty_chunks property of the arrays returned by Group.require_dataset.

I also added a lot of type annotations.

TODO:

  • Add unit tests and/or doctests in docstrings
  • Add docstrings and API docs for any new/modified user-facing classes and functions
  • New/modified features documented in docs/tutorial.rst
  • Changes documented in docs/release.rst
  • GitHub Actions have all passed
  • Test coverage is 100% (Codecov passes)

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

@joshmoore

Copy link
Copy Markdown
Member

looks like CI is failing for python 3.7 due to some type annotation stuff... do we need to support 3.7 still?

  • Happy to hear opinions but depending on when you are targeting this for, I'd be inclined to hold off on another the drop page.
  • Cannot Import Literal python/typing#707 suggests adding typing_extensions as a dependency.
  • Alternatively, we hold off on the use of Literal.

@codecov

codecovBot commented Jun 23, 2022

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 99.94%. Comparing base (5c602cb) to head (89f78a7).
Report is 790 commits behind head on main.

Additional details and impacted files
@@ Coverage Diff @@## main #1051 +/- ##
=======================================
Coverage 99.94% 99.94% =======================================
Files 34 34 Lines 13846 13865 +19 =======================================
+ Hits 13839 13858 +19 
Misses 7 7 
Files with missing linesCoverage Δ
zarr/_storage/store.py100.00% <100.00%> (ø)
zarr/_storage/v3.py100.00% <100.00%> (ø)
zarr/convenience.py100.00% <100.00%> (ø)
zarr/core.py100.00% <100.00%> (ø)
zarr/creation.py100.00% <ø> (ø)
zarr/hierarchy.py99.79% <100.00%> (+<0.01%)⬆️
zarr/meta.py100.00% <100.00%> (ø)
zarr/storage.py100.00% <100.00%> (ø)
zarr/tests/test_hierarchy.py100.00% <100.00%> (ø)
zarr/util.py100.00% <100.00%> (ø)

... and 1 file with indirect coverage changes

@pep8speaks

pep8speaks commented Jun 27, 2022

Copy link
Copy Markdown

Hello @d-v-b! Thanks for updating this PR. We checked the lines you've touched for PEP 8 issues, and found:

There are currently no PEP 8 issues detected in this Pull Request. Cheers! 🍻

Comment last updated at 2022-07-19 17:27:41 UTC

@d-v-b

Copy link
Copy Markdown
ContributorAuthor

mypy is almost happy. A few things that I would appreciate input on:

  • The _ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None, which contradicts the docstrings for those methods -- as advertised, these methods should return valid store instances. Should they instead return some default store when the input is None? This is causing some mypy issues that I can get around with calls to cast, but it struck me as odd that the docstring mismatches the implementation here. cc @grlee77
  • there are a few places where we call __init__ directly (namely setstate methods), and mypy hates that. Is there an alternative to calling __init__ directly, or should I just blind mypy to that code?

@joshmoore

Copy link
Copy Markdown
Member

_ensure_store methods of BaseStore and StoreV3 in _storage/store.py can return None

My guess is that they should throw on None.

https://github.com/zarr-developers/zarr-python/blob/main/zarr/storage.py#L787

Extracting the entire contents of __init__ out to an __initialize(). In that case, I do wonder what happens to the lock though....

@d-v-b

d-v-b commented Jul 5, 2022

Copy link
Copy Markdown
ContributorAuthor

@grlee77 can you shed some light on whether the _ensure_store methods defined in _storage/store.py should handle None? Returning None is contrary to the docstrings, but there's a test for this exact behavior here. If I remove the None-handling logic from _ensure_store and the test for this behavior, no other tests fail...

@grlee77

grlee77 commented Jul 6, 2022

Copy link
Copy Markdown
Contributor

That is how _ensure_store was original implemented in #612, but the test case wasn't there at that time. Most likely, I added the test case later to complete test coverage, but probably should have just removed that case instead. Perhaps it was being used at some point in an earlier draft, but does not currently seem to be needed. I will make a PR to remove it.

@joshmoore

Copy link
Copy Markdown
Member

I was thinking merging @grlee77's PR would clear up your mypy woes, @d-v-b, but there look to be a few more.

@jhamman

Copy link
Copy Markdown
Member

I'm going to close this as stale. Folks should feel free to reopen if there is interest in continuing this work.

@jhammanjhamman closed this Oct 11, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@d-v-b@joshmoore@pep8speaks@grlee77@jhamman