Skip to content

Simplify transforms invalidation system. #25282

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

Merged
merged 1 commit into from
Feb 22, 2023
Merged

Conversation

anntzer
Copy link
Contributor

@anntzer anntzer commented Feb 22, 2023

The INVALID_NON_AFFINE state is never used, except at init, but there it can be replaced by a fully invalid state (the difference is that calls to invalidate() will not be propagated, but that's OK because any (necessarily new) dependent of the new node will also already be in an invalid state as well).

Thus, for clarity, replace the 4 possible values of ._invalid (0-3) by only 3 values (0-2), and get rid of bit-twiddling in TransformedPath._revalidate. Also rename "value" to (invalidation) "level", invert the logic in _invalidate_internal (I find the new order easier to follow), and get rid of a seemingly incorrect statement about invalidation stickiness (as far as I can tell, once a node has been revalidated (._invalid = 0), it can again be invalidated as affine_only).

PR Summary

PR Checklist

Documentation and Tests

  • Has pytest style unit tests (and pytest passes)
  • Documentation is sphinx and numpydoc compliant (the docs should build without error).
  • New plotting related features are documented with examples.

Release Notes

  • New features are marked with a .. versionadded:: directive in the docstring and documented in doc/users/next_whats_new/
  • API changes are marked with a .. versionchanged:: directive in the docstring and documented in doc/api/next_api_changes/
  • Release notes conform with instructions in next_whats_new/README.rst or next_api_changes/README.rst

The INVALID_NON_AFFINE state is never used, except at init, but there it
can be replaced by a fully invalid state (the difference is that calls
to invalidate() will not be propagated, but that's OK because any
(necessarily new) dependent of the new node will also already be in an
invalid state as well).

Thus, for clarity, replace the 4 possible values of `._invalid` (0-3) by
only 3 values (0-2), and get rid of bit-twiddling in
TransformedPath._revalidate.  Also rename "value" to (invalidation)
"level", invert the logic in _invalidate_internal (I find the new order
easier to follow), and get rid of a seemingly incorrect statement about
invalidation stickiness (as far as I can tell, once a node has been
revalidated (`._invalid = 0`), it can again be invalidated as
affine_only).
@jklymak jklymak merged commit f16c00b into matplotlib:main Feb 22, 2023
@anntzer anntzer deleted the inv branch February 22, 2023 19:51
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.

3 participants