Skip to content

Adding an equals method to colormaps #20227

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
May 14, 2021
Merged

Conversation

greglucas
Copy link
Contributor

PR Summary

This adds an __eq__ method to Colormap to test the lookup
tables for equality. This will help for testing whether colormaps are the same even if they aren't the same object.

plt.get_cmap("Blues") == plt.get_cmap("Blues") even if they aren't the same object anymore.
Taking just this portion out of the closed #16943.

PR Checklist

  • Has pytest style unit tests (and pytest passes).
  • Is Flake 8 compliant (run flake8 on changed files to check).
  • [N/A] New features are documented, with examples if plot related.
  • [N/A] Documentation is sphinx and numpydoc compliant (the docs should build without error).
  • [N/A] Conforms to Matplotlib style conventions (install flake8-docstrings and run flake8 --docstring-convention=all).
  • [N/A] New features have an entry in doc/users/next_whats_new/ (follow instructions in README.rst there).
  • [N/A] API changes documented in doc/api/next_api_changes/ (follow instructions in README.rst there).

@tacaswell tacaswell added this to the v3.5.0 milestone May 14, 2021
self._init()
if not other._isinit:
other._init()
return np.array_equal(self._lut, other._lut)
Copy link
Member

Choose a reason for hiding this comment

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

colormaps know their own name, is that something we want to also check?

Copy link
Member

Choose a reason for hiding this comment

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

Yes, IMHO we should. As we use it now, the name is an integral part of the colormap. Otherwise you can get funny behavior, e.g. with the new colormap registry

cmap in colormaps.values()  # True
cmap.name in colormaps.keys()  # False

And similar.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't have a strong opinion either way. I was viewing the == to mean "will these colormaps look the same". If cmocean defines a "Blues1" colormap and it looks suspiciously similar to MPL's "Blues", I may want to check for that equality and not name equality. I do see TIm's point though, so I am fine adding it if that is what is wanted.

I suppose we should also add colorbar_extends too in case someone changed that.

Copy link
Member

@timhoffm timhoffm May 14, 2021

Choose a reason for hiding this comment

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

I see the point in "will these colormaps look the same", but as long as we have Colormap.name I think it has to be taken into account for __eq__. You could introduce a Colormap.is_equivalent() for "look the same". OTOH I don't think there is a strong reason a colormap has to know its name, but removing that is hard to justify as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

OK, I added in the comparisons for name and colorbar_extend. Also added tests for those two situations.

@jklymak jklymak marked this pull request as draft May 14, 2021 18:39
This adds an __eq__ method to Colormap to test the lookup
tables for equality.
@greglucas greglucas marked this pull request as ready for review May 14, 2021 20:47
Copy link
Member

@jklymak jklymak left a comment

Choose a reason for hiding this comment

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

Not sure when I would use this, but it looks right to me ;-)

@tacaswell
Copy link
Member

I do not think this is a big enough feature to warrant a whats new.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants