Skip to content

Fix: support alpha array for RGB images in imshow (closes #26092) #30111

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

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 17 additions & 16 deletions doc/sphinxext/math_symbol_table.py
Copy link
Member

Choose a reason for hiding this comment

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

These changes do not belong in this PR.

Original file line number Diff line number Diff line change
Expand Up @@ -9,57 +9,57 @@

symbols = [
["Lower-case Greek",
4,
0,
(r"\alpha", r"\beta", r"\gamma", r"\chi", r"\delta", r"\epsilon",
r"\eta", r"\iota", r"\kappa", r"\lambda", r"\mu", r"\nu", r"\omega",
r"\phi", r"\pi", r"\psi", r"\rho", r"\sigma", r"\tau", r"\theta",
r"\upsilon", r"\xi", r"\zeta", r"\digamma", r"\varepsilon", r"\varkappa",
r"\varphi", r"\varpi", r"\varrho", r"\varsigma", r"\vartheta")],
["Upper-case Greek",
4,
0,
(r"\Delta", r"\Gamma", r"\Lambda", r"\Omega", r"\Phi", r"\Pi", r"\Psi",
r"\Sigma", r"\Theta", r"\Upsilon", r"\Xi")],
["Hebrew",
6,
0,
(r"\aleph", r"\beth", r"\gimel", r"\daleth")],
["Latin named characters",
6,
0,
r"""\aa \AA \ae \AE \oe \OE \O \o \thorn \Thorn \ss \eth \dh \DH""".split()],
["Delimiters",
5,
0,
_mathtext.Parser._delims],
["Big symbols",
5,
0,
_mathtext.Parser._overunder_symbols | _mathtext.Parser._dropsub_symbols],
["Standard function names",
5,
0,
{fr"\{fn}" for fn in _mathtext.Parser._function_names}],
["Binary operation symbols",
4,
0,
_mathtext.Parser._binary_operators],
["Relation symbols",
4,
0,
_mathtext.Parser._relation_symbols],
["Arrow symbols",
4,
0,
_mathtext.Parser._arrow_symbols],
["Dot symbols",
4,
0,
r"""\cdots \vdots \ldots \ddots \adots \Colon \therefore \because""".split()],
["Black-board characters",
6,
0,
[fr"\{symbol}" for symbol in _mathtext_data.tex2uni
if re.match(bb_pattern, symbol)]],
["Script characters",
6,
0,
[fr"\{symbol}" for symbol in _mathtext_data.tex2uni
if re.match(scr_pattern, symbol)]],
["Fraktur characters",
6,
0,
[fr"\{symbol}" for symbol in _mathtext_data.tex2uni
if re.match(frak_pattern, symbol)]],
["Miscellaneous symbols",
4,
0,
r"""\neg \infty \forall \wp \exists \bigstar \angle \partial
\nexists \measuredangle \emptyset \sphericalangle \clubsuit
\varnothing \complement \diamondsuit \imath \Finv \triangledown
Expand Down Expand Up @@ -94,7 +94,8 @@ def render_symbol(sym, ignore_variant=False):
sym.startswith(r"\var")),
reverse=(category == "Hebrew")) # Hebrew is rtl
rendered_syms = [f"{render_symbol(sym)} ``{sym}``" for sym in syms]
columns = min(columns, len(syms))
max_columns = 6 # You can adjust this (e.g., 4–8)
columns = min(max_columns, len(syms)) # New dynamic logic
lines.append("**%s**" % category)
lines.append('')
max_width = max(map(len, rendered_syms))
Expand Down
9 changes: 6 additions & 3 deletions lib/matplotlib/image.py
Original file line number Diff line number Diff line change
Expand Up @@ -511,14 +511,17 @@
if alpha is None: # alpha parameter not specified
if A.shape[2] == 3: # image has no alpha channel
A = np.dstack([A, np.ones(A.shape[:2])])
elif np.ndim(alpha) > 0: # Array alpha
elif np.ndim(alpha) > 0: # Array alpha

Check failure on line 514 in lib/matplotlib/image.py

View workflow job for this annotation

GitHub Actions / ruff

[rdjson] reported by reviewdog 🐶 Insert at least two spaces before an inline comment Raw Output: message:"Insert at least two spaces before an inline comment" location:{path:"/home/runner/work/matplotlib/matplotlib/lib/matplotlib/image.py" range:{start:{line:514 column:41} end:{line:514 column:42}}} source:{name:"ruff" url:"https://docs.astral.sh/ruff"} code:{value:"E261" url:"https://docs.astral.sh/ruff/rules/too-few-spaces-before-inline-comment"} suggestions:{range:{start:{line:514 column:41} end:{line:514 column:42}} text:" "}
if alpha.shape != A.shape[:2]:
raise ValueError("Alpha array shape must match image dimensions")

Check failure on line 516 in lib/matplotlib/image.py

View workflow job for this annotation

GitHub Actions / ruff

[rdjson] reported by reviewdog 🐶 Line too long (95 > 88) Raw Output: message:"Line too long (95 > 88)" location:{path:"/home/runner/work/matplotlib/matplotlib/lib/matplotlib/image.py" range:{start:{line:516 column:89} end:{line:516 column:96}}} source:{name:"ruff" url:"https://docs.astral.sh/ruff"} code:{value:"E501" url:"https://docs.astral.sh/ruff/rules/line-too-long"}

Check failure on line 516 in lib/matplotlib/image.py

View workflow job for this annotation

GitHub Actions / ruff

[rdjson] reported by reviewdog 🐶 Trailing whitespace Raw Output: message:"Trailing whitespace" location:{path:"/home/runner/work/matplotlib/matplotlib/lib/matplotlib/image.py" range:{start:{line:516 column:90} end:{line:516 column:96}}} source:{name:"ruff" url:"https://docs.astral.sh/ruff"} code:{value:"W291" url:"https://docs.astral.sh/ruff/rules/trailing-whitespace"} suggestions:{range:{start:{line:516 column:90} end:{line:516 column:96}}}

Check warning on line 516 in lib/matplotlib/image.py

View check run for this annotation

Codecov / codecov/patch

lib/matplotlib/image.py#L516

Added line #L516 was not covered by tests
# user-specified array alpha overrides the existing alpha channel
A = np.dstack([A[..., :3], alpha])
else: # Scalar alpha
if A.shape[2] == 3: # broadcast scalar alpha
A = np.dstack([A, np.full(A.shape[:2], alpha, np.float32)])
else: # or apply scalar alpha to existing alpha channel
post_apply_alpha = True
Copy link
Member

Choose a reason for hiding this comment

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

Why is this removed?

#to handle RGBA inputs
if A.shape[2] == 4 and alpha is not None:
A[..., 3] = alpha # override existing alpha channel

Check failure on line 524 in lib/matplotlib/image.py

View workflow job for this annotation

GitHub Actions / ruff

[rdjson] reported by reviewdog 🐶 Trailing whitespace Raw Output: message:"Trailing whitespace" location:{path:"/home/runner/work/matplotlib/matplotlib/lib/matplotlib/image.py" range:{start:{line:524 column:73} end:{line:524 column:85}}} source:{name:"ruff" url:"https://docs.astral.sh/ruff"} code:{value:"W291" url:"https://docs.astral.sh/ruff/rules/trailing-whitespace"} suggestions:{range:{start:{line:524 column:73} end:{line:524 column:85}}}
Copy link
Member

Choose a reason for hiding this comment

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

I think this is just repeating what already happened on line 518.

# Resample in premultiplied alpha space. (TODO: Consider
# implementing premultiplied-space resampling in
# span_image_resample_rgba_affine::generate?)
Expand Down
Loading