Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Fix format_cursor_data for values close to float resolution. #21275

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
Oct 5, 2021

Conversation

anntzer
Copy link
Contributor

@anntzer anntzer commented Oct 4, 2021

Previously, moving the cursor over
plt.imshow(1 + np.random.randn(10, 10) * 1e-15) would result in
ValueError: math domain error (when trying to compute
math.log10(delta) with delta = 0). This is because the full range
of normalization implied by the image above (~1e-15) is representable
with float precision, but the spacing between individual colors (256x
less) is too small to be represented, and thus rounded to zero.

In general, I consider that such floating point errors should be fixed
on the user side, but this specific error seems worth fixing as the 1)
the image is still rendered correctly, 2) errors in the mouse event
handler (rendering the cursor text) are somewhat obscure for end users,
and 3) it used to work before Matplotlib 3.5.

PR Summary

PR Checklist

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

Previously, moving the cursor over
`plt.imshow(1 + np.random.randn(10, 10) * 1e-15)` would result in
`ValueError: math domain error` (when trying to compute
`math.log10(delta)` with `delta = 0`).  This is because the full range
of normalization implied by the image above (~1e-15) is representable
with float precision, but the spacing between individual colors (256x
less) is too small to be represented, and thus rounded to zero.

In general, I consider that such floating point errors should be fixed
on the user side, but this specific error seems worth fixing as the 1)
the image is still rendered correctly, 2) errors in the mouse event
handler (rendering the cursor text) are somewhat obscure for end users,
and 3) it used to work before Matplotlib 3.5.
@anntzer anntzer added Release critical For bugs that make the library unusable (segfaults, incorrect plots, etc) and major regressions. topic: images labels Oct 4, 2021
@anntzer anntzer added this to the v3.5.0 milestone Oct 4, 2021
@jklymak jklymak merged commit 3e2d546 into matplotlib:master Oct 5, 2021
meeseeksmachine pushed a commit to meeseeksmachine/matplotlib that referenced this pull request Oct 5, 2021
@anntzer anntzer deleted the fcdeps branch October 5, 2021 08:42
jklymak added a commit that referenced this pull request Oct 5, 2021
…275-on-v3.5.x

Backport PR #21275 on branch v3.5.x (Fix format_cursor_data for values close to float resolution.)
tacaswell pushed a commit to tacaswell/matplotlib that referenced this pull request Oct 12, 2021
Fix format_cursor_data for values close to float resolution.
tacaswell pushed a commit that referenced this pull request Oct 20, 2021
Fix format_cursor_data for values close to float resolution.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Release critical For bugs that make the library unusable (segfaults, incorrect plots, etc) and major regressions. topic: images
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants