Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b
, '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

Doc/v3 migration guide - #2102

Closed
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide
Closed

Doc/v3 migration guide#2102
jhamman wants to merge 5 commits into
zarr-developers:mainfrom
jhamman:doc/v3-migration-guide

Conversation

@jhamman

Copy link
Copy Markdown
Member

Over the past few weeks, we've had a number of conversations/questions about the policy for backward compatibility, deprecations, and breaking changes with the upcoming 3.0 release. This doc is meant to help us iterate toward common language. In its initial form, it is not complete.

Goals for the text here:

  1. Developers of 2.18 and 3.0 should be able to decide if backward compatibility is a required attribute of a contribution
  2. Users of Zarr should be able to understand if their application will be impacted by the upcoming 3.0 release
  3. Users of Zarr should be able to make a plan for how they will adapt their usage of Zarr after the release
  4. [non-goal] This is not meant to provide a comprehensive listing of the changes to the zarr API

cc @zarr-developers/python-core-devs

@TomAugspurger

Copy link
Copy Markdown
Contributor

One thing that might be helpful: what's the group's tolerance for either compatibility code or deprecations as a way to ease the transition? It sounds like strict backwards compatibility (perhaps with warnings) isn't a goal. Is there tolerance for things like #2098 (e.g. restore some properties to the Group object, loosen the keyword-only requirement for some functions). Likewise for things like "cleaning up internal and user facing APIs", which could be done with a deprecation warning. Even if there isn't tolerance for backwards compatibility shims that really clash with the V3 spec or the current v3 implementation?

@jhammanjhamman added this to the 2.18.3 milestone Aug 27, 2024
@jhammanjhamman added the V3 label Aug 28, 2024
@jhammanjhamman modified the milestones: 2.18.3, 3.0.0Sep 6, 2024

@dstansbydstansby left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I left some comments - I'll mark this as request changes since it still needs major additions.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
1. Pin the supported Zarr-Python version to ``zarr>=2,<3``. This is a best practice and will protect your users from any incompatibilities that may arise during the release of Zarr-Python 3.0.
2. Limit your imports from the Zarr-Python package. Most of the primary API ``zarr.*`` will be compatible in 3.0. However, the following breaking API changes are planned:

- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- ``numcodecs.*`` will no longer be available in ``zarr.*``. (Suggested action: transition to importing codecs from ``numcodecs`` directly.)
- ``zarr.numcodecs.*`` will no longer be available. These imports can be replaced by importing ``numcodecs`` directly.

We should be doing more than "suggesting", we should be providing concrete fixes/code updates!

Copy link
Copy Markdown
MemberAuthor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wish it were that easy! Unfortunately, the top level namespace is littered with * imports

fromzarr.codecsimport*

fromnumcodecsimport*

If there is a reasonable way for us to deprecate folks using these imports, I'm all ears.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Even if there isn't a reasonable way to deprecate the imports, as a minimum this migration guide should provide a complete list of all imports that are disappearing and how to replace them.

Comment threaddocs/migration.rst Outdated
Comment threaddocs/migration.rst Outdated
Comment on lines +34 to +48
- The following internal modules are being removed or significant changed:

- ``zarr.attrs``
- ``zarr.codecs``
- ``zarr.context``
- ``zarr.core``
- ``zarr.hierarchy``
- ``zarr.indexing``
- ``zarr.meta``
- ``zarr.meta_v1``
- ``zarr.storage``
- ``zarr.sync``
- ``zarr.types``
- ``zarr.util``
- ``zarr.n5``

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This needs a clear list of how to update code to adapt to these removals or changes.

Comment threaddocs/migration.rst
Comment threaddocs/migration.rst
Comment threaddocs/migration.rst Outdated
Co-authored-by: David Stansby <dstansby@gmail.com>
Comment threaddocs/migration.rst
@jni

jni commented Sep 16, 2024

Copy link
Copy Markdown
Contributor

I just came here following the link from #1849. Currently, this guide feels very incomplete, and since #2182 is now in-flight, I think this guide should become very clear.

From the perspective of a maintainer / close user of a bunch of libraries that depend on zarr but have extremely limited maintainer time, the most important thing I want to understand is how hard it will be to support both zarr 2.18 and zarr 3+ within a single library. I think this is the critical question for a smooth transition, because it is hard for libraries to all migrate at the same time, and you want libraries to be installable together in the same environment — you don't want someone depending on both napari and ome-zarr to face napari requiring zarr>=3 and ome-zarr requiring zarr<3. So many libraries would want to support the subset of zarr that is identical in v3 and v2 until everyone can agree to depend on 3+.

@jhamman

Copy link
Copy Markdown
MemberAuthor

@jni - thanks for the feedback. I agree this is not ready to ship yet. The main things that we know are changing is the Store API and access to internal APIs (e.g. zarr.core.xxx). Beyond that, the best way for us to fill out the migration guide is to have projects attempt to support v3 and report back. I'm doing that with Dask right now (dask/dask#11388, #2186) and I understand @TomAugspurger has begun the process for Xarray. So an ask for you and the Napari / ome-zarr devs is to try to do this and report back. Beyond that, specific suggestions to this doc are more than welcome (props to @dstansby for his edits already).

@dstansby

Copy link
Copy Markdown
Contributor

If we want downstream packages to test with version 3.0.0a1, it might be good to do a blog post or add something to the docs explaining how to do that testing, what to look for, and how to provide feedback?

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Well, @Czaki started doing that for us in napari/napari#7215 and @d-v-b has been helping 🙏.

It looks like one of the remaining issues is that zarr.open defaults to v3 zarr (it'd be worth considering switching to calver, which I hate, if only to avoid the confusion between zarr format v3 and zarr-python v3... 😂), and tensorstore does not yet support v3 zarr files. At least that's my interpretation of these lines. Nor do I see any motions to change this in the tensorstore repo... @jbms?

But I think we can resolve this by explicitly writing a v2 zarr in the test?

specific suggestions to this doc are more than welcome

Something along the lines of:

Common functions have switched to keyword-only arguments, so you will need to change any invocation of, for example, zarr.open(path, 'a') to zarr.open(store=path, mode='a').

(An exhaustive list of such changes would be useful.)

@d-v-b

d-v-b commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

and tensorstore does not yet support v3 zarr files.

Tensorstore has supported zarr v3 for a long time: https://google.github.io/tensorstore/driver/zarr3/index.html

@jni

jni commented Sep 18, 2024

Copy link
Copy Markdown
Contributor

Tensorstore has supported zarr v3 for a long time

oh, interesting, thanks for pointing that out @d-v-b! I couldn't actually find the relevant PR but did not look exhaustively. 🙏

@jnijni mentioned this pull request Sep 19, 2024
@TomAugspurger

Copy link
Copy Markdown
Contributor

A few changes I've found while updating xarray. Are all of these intentional?

  • Array.resize returns a new Array object. 2.x mutated the Array in place
  • zarr_version has been renamed to zarr_format
  • Some exception types have changed (e.g. 2.x raised a zarr.errors.GroupNotFoundError while 3.x raises a ValueError)
  • write_empty_chunks has been removed

@jhamman
jhamman changed the base branch from v3 to mainOctober 14, 2024 20:52
@jnijni mentioned this pull request Oct 17, 2024
6 tasks
@dstansbydstansby removed the V3 label Dec 12, 2024
@jhammanjhamman mentioned this pull request Dec 18, 2024
2 tasks
@jhammanjhamman closed this Dec 18, 2024
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

5 participants

@jhamman@TomAugspurger@jni@dstansby@d-v-b