Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make asdf standard 1.6.0 stable (default) #1744

Draft
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

braingram
Copy link
Contributor

@braingram braingram commented Jan 30, 2024

Description

I milestoned this PR for asdf 4.0 because it's a rather major change.

Making 1.6.0 stable will require:
Phase 0 (at any time):

Phase 1:

Phase 2:

Phase 3:

Unfortunately at this point most of the schema repo CIs will be broken (as will asdf-astropy CI) due to the intertwined nature of these packages.

Phase 4:

Phase 5:

  • this PR

Much of the above is due to updates to the ndarray schema:

All schemas that $ref ndarray (like quantity) then need a version bump and so on...

This is further complicated by quantity-1.1.0 currently existing in 2 released packages:

(because of an incomplete effort to split unit fits table and time out of the core).
The approach taken here is to decomission asdf-unit-schemas. asdf-standard will continue to provide updates to the unit (and other non-core) schemas. This seems sensible as these schemas are highly interdependent. More details can be found in: asdf-format/asdf-standard#422

One question that occupied a lot of my thought was "should we change some of the $refs to tags?" On one hand this could make migrations like this easier (if every ndarray $ref was instead a wildcard tag (ndarray-1.*) most of these schemas would not need to be updated. However, this links the tag to the schema which has a few downsides:

  • as tags depend on the extension version, we have effectively added a second version to the schema (a tag might only appear say in asdf-standard 1.6.0 which means that a schema that contains a tag link to that tag will only be valid for asdf-standard 1.6.0).
  • tag links make "duck typing" with a schema very difficult if not impossible.

For example unit/quantity contains a $ref link to unit/unit. This means that asdf-astropy can use a differently tagged unit (astropy/unint for non-vo units) and still produce a valid unit/quantity (see the wfi schema in rad as an example). If instead unit/quantity used a tag link to unit/unit, this same "duck typing" would not work with a differently tagged unit. asdf-astropy would have to instead:

  • use a different schema for the unit/unit tag (this would break the tag-schema mapping defined in the standard unit manifest making any file produced with this approach likely to be incompatible with any other implementation or with other libraries that might choose to implement units)
  • define a new astropy/quantity for non-vo units (and so on up the tree of schema references...)
  • add the astropy/unit tag to the quantity schema (further linking tags and schemas and requiring addition standard schema updates for "downstream" libraries).

At the moment I am of the mind that keeping the schemas as separate from the tags as possible is the better option (so $ref instead of tag). This allows the schemas to function even if they are treated as normal "jsonschema"s. Additionally the tag validator behavior seems loosely defined in the standard where it states "Implementation of this validator is optional and depends on details of the YAML parser." For similar reasons the above asdf-transform-schemas PR did not rely on the feature in asdf to use multiple schemas in a tag definition (to allow the many transforms that $ref the transform schema to instead include them in the manifest).

Both stdatamodels (datamodels) and rad use metaschemas based off of asdf-schema-1.0.0 (which is updated to 1.1.0 in asdf-format/asdf-standard#422). As neither of these packages version schemas updating the metaschema version will force these packages to use exclusively the 1.6.0 standard (which will almost certainly cause issues if old versions of asdf/asdf-standard are used). Instead, I suggest we not update the metaschemas (and keep them using the old asdf-schema-1.0.0 metaschema). The only downside is the lack of float16 support in the datatype keyword validator. This seems like an acceptable limitation for the time being. Once asdf standard 1.6.0 is stable and the asdf version that sets it as the default agrees with the minimum required version for each of those packages the metaschemas can be updated.

Checklist:

  • pre-commit checks ran successfully
  • tests ran successfully
  • for a public change, a changelog entry was added
  • for a public change, documentation was updated
  • for any new features, unit tests were added

@braingram braingram force-pushed the standard_1p6 branch 2 times, most recently from 3271e74 to 70b4888 Compare February 7, 2024 21:58
@braingram braingram changed the title TEST: make 1.6.0 stable Make asdf standard 1.6.0 stable (default) Feb 8, 2024
@braingram braingram added this to the 4.0.0 milestone Mar 13, 2024
@braingram braingram force-pushed the standard_1p6 branch 2 times, most recently from d70aa97 to b579429 Compare March 18, 2024 22:22
@braingram braingram closed this Mar 27, 2024
@braingram braingram reopened this Mar 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant