Skip to content

Commit 425d39d

Browse files
marcorudolphflexdaquinteroflex
authored andcommitted
fix(tidy3d): FXC-4541-avoid-mpl-import-for-wasm
1 parent b068186 commit 425d39d

File tree

2 files changed

+58
-8
lines changed

2 files changed

+58
-8
lines changed

tests/test_components/test_scene.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import pytest
1010

1111
import tidy3d as td
12+
import tidy3d.components.scene as scene_mod
1213
from tidy3d.components.scene import MAX_NUM_MEDIUMS
1314
from tidy3d.components.viz import STRUCTURE_EPS_CMAP, STRUCTURE_EPS_CMAP_R
1415
from tidy3d.exceptions import SetupError
@@ -200,6 +201,45 @@ def test_structure_eps_color_mapping():
200201
assert np.allclose(pp_max_reverse.facecolor, expected_max_reverse)
201202

202203

204+
@pytest.mark.parametrize(
205+
"medium, eps_min, eps_max, reverse, expected",
206+
[
207+
pytest.param(
208+
td.Medium(permittivity=1.0), 1.0, 5.0, False, (1.0, 1.0, 1.0, 1.0), id="min-forward"
209+
),
210+
pytest.param(
211+
td.Medium(permittivity=5.0), 1.0, 5.0, False, (0.0, 0.0, 0.0, 1.0), id="max-forward"
212+
),
213+
pytest.param(
214+
td.Medium(permittivity=1.0), 1.0, 5.0, True, (0.0, 0.0, 0.0, 1.0), id="min-reverse"
215+
),
216+
pytest.param(
217+
td.Medium(permittivity=5.0), 1.0, 5.0, True, (1.0, 1.0, 1.0, 1.0), id="max-reverse"
218+
),
219+
pytest.param(
220+
td.Medium(permittivity=2.0), 2.0, 2.0, False, (0.5, 0.5, 0.5, 1.0), id="equal-forward"
221+
),
222+
pytest.param(
223+
td.Medium(permittivity=2.0), 2.0, 2.0, True, (0.5, 0.5, 0.5, 1.0), id="equal-reverse"
224+
),
225+
],
226+
)
227+
def test_structure_eps_color_mapping_no_matplotlib(
228+
monkeypatch, medium, eps_min, eps_max, reverse, expected
229+
):
230+
monkeypatch.setattr(scene_mod, "mpl", None)
231+
232+
params = SCENE_FULL._get_structure_eps_plot_params(
233+
medium=medium,
234+
freq=1,
235+
eps_min=eps_min,
236+
eps_max=eps_max,
237+
reverse=reverse,
238+
)
239+
240+
assert np.allclose(params.facecolor, expected)
241+
242+
203243
def test_num_mediums():
204244
"""Make sure we error if too many mediums supplied."""
205245

tidy3d/components/scene.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import matplotlib.pylab as plt
1212
from mpl_toolkits.axes_grid1 import make_axes_locatable
1313
except ImportError:
14-
pass
14+
mpl = None
1515
import pydantic.v1 as pd
1616

1717
from tidy3d.components.material.tcad.charge import (
@@ -1446,14 +1446,24 @@ def _get_structure_eps_plot_params(
14461446
plot_params = plot_params.copy(update={"edgecolor": "k", "linewidth": 1})
14471447
else:
14481448
eps_medium = medium._eps_plot(frequency=freq, eps_component=eps_component)
1449-
active_norm = (
1450-
norm if norm is not None else mpl.colors.Normalize(vmin=eps_min, vmax=eps_max)
1451-
)
1452-
color_value = float(active_norm(eps_medium))
1449+
if norm is not None:
1450+
color_value = float(norm(eps_medium))
1451+
elif mpl is not None:
1452+
active_norm = mpl.colors.Normalize(vmin=eps_min, vmax=eps_max)
1453+
color_value = float(active_norm(eps_medium))
1454+
else:
1455+
if eps_max == eps_min:
1456+
color_value = 0.5
1457+
else:
1458+
color_value = (eps_medium - eps_min) / (eps_max - eps_min)
14531459
color_value = min(1.0, max(0.0, color_value))
1454-
cmap_name = _get_colormap(reverse=reverse)
1455-
cmap = mpl.cm.get_cmap(cmap_name)
1456-
rgba = tuple(float(component) for component in cmap(color_value))
1460+
if mpl is not None:
1461+
cmap_name = _get_colormap(reverse=reverse)
1462+
cmap = mpl.cm.get_cmap(cmap_name)
1463+
rgba = tuple(float(component) for component in cmap(color_value))
1464+
else:
1465+
gray_value = color_value if reverse else 1.0 - color_value
1466+
rgba = (gray_value, gray_value, gray_value, 1.0)
14571467
plot_params = plot_params.copy(update={"facecolor": rgba})
14581468

14591469
return plot_params

0 commit comments

Comments
 (0)