Skip to content

Commit c368c60

Browse files
committed
Refactors plotting modules and updates test expectations
1 parent de85ec5 commit c368c60

File tree

14 files changed

+94
-122
lines changed

14 files changed

+94
-122
lines changed

src/easydiffraction/summary/summary.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ def show_project_info(self) -> None:
4242

4343
if self.project.info.description:
4444
log.paragraph('Description')
45-
# log.print('\n'.join(wrap(self.project.info.description, width=80)))
45+
# log.print('\n'.join(wrap(self.project.info.description,
46+
# width=80)))
4647
# TODO: Fix the following lines
4748
# Ensure description wraps with explicit newlines for tests
4849
desc_lines = wrap(self.project.info.description, width=60)

tests/unit/easydiffraction/analysis/fit_helpers/test_reporting.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,5 @@ def __init__(self, start, value, uncertainty, name='p', units='u'):
5656
assert 'Weighted R-factor (wR)' in out
5757
assert 'Bragg R-factor (BR)' in out
5858
assert 'Fitted parameters:' in out
59-
# Table border from tabulate fancy_outline
60-
assert '╒' in out or '+' in out
59+
# Table border: accept common border glyphs from Rich/tabulate
60+
assert any(ch in out for ch in ('╒', '┌', '+', '─'))

tests/unit/easydiffraction/plotting/plotters/test_plotter_ascii.py renamed to tests/unit/easydiffraction/display/plotters/test_ascii.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55

66

77
def test_module_import():
8-
import easydiffraction.plotting.plotters.plotter_ascii as MUT
8+
import easydiffraction.display.plotters.ascii as MUT
99

10-
expected_module_name = 'easydiffraction.plotting.plotters.plotter_ascii'
10+
expected_module_name = 'easydiffraction.display.plotters.ascii'
1111
actual_module_name = MUT.__name__
1212
assert expected_module_name == actual_module_name
1313

1414

1515
def test_ascii_plotter_plot_minimal(capsys):
16-
from easydiffraction.plotting.plotters.plotter_ascii import AsciiPlotter
16+
from easydiffraction.display.plotters.ascii import AsciiPlotter
1717

1818
x = np.array([0.0, 1.0, 2.0])
1919
y = np.array([1.0, 2.0, 3.0])
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# SPDX-FileCopyrightText: 2021-2025 EasyDiffraction contributors <https://github.com/easyscience/diffraction>
2+
# SPDX-License-Identifier: BSD-3-Clause
3+
4+
import importlib
5+
import types
6+
import sys
7+
8+
9+
def test_module_import():
10+
import easydiffraction.display.plotters.base as MUT
11+
12+
expected_module_name = 'easydiffraction.display.plotters.base'
13+
actual_module_name = MUT.__name__
14+
assert expected_module_name == actual_module_name
15+
16+
17+
def test_default_engine_switches_with_notebook(monkeypatch):
18+
from easydiffraction.display.plotting import PlotterEngineEnum
19+
20+
# Simulate running in a Jupyter kernel
21+
mod = types.ModuleType('IPython')
22+
mod.get_ipython = lambda: types.SimpleNamespace(config={'IPKernelApp': True})
23+
monkeypatch.setitem(sys.modules, 'IPython', mod)
24+
assert PlotterEngineEnum.default().value == 'plotly'
25+
26+
# Now simulate non-notebook environment
27+
mod2 = types.ModuleType('IPython')
28+
mod2.get_ipython = lambda: None
29+
monkeypatch.setitem(sys.modules, 'IPython', mod2)
30+
assert PlotterEngineEnum.default().value == 'asciichartpy'
31+
32+
33+
def test_default_axes_labels_keys_present():
34+
import easydiffraction.display.plotters.base as pb
35+
from easydiffraction.experiments.experiment.enums import BeamModeEnum
36+
from easydiffraction.experiments.experiment.enums import ScatteringTypeEnum
37+
38+
assert (ScatteringTypeEnum.BRAGG, BeamModeEnum.CONSTANT_WAVELENGTH) in pb.DEFAULT_AXES_LABELS
39+
assert (ScatteringTypeEnum.BRAGG, BeamModeEnum.TIME_OF_FLIGHT) in pb.DEFAULT_AXES_LABELS

tests/unit/easydiffraction/plotting/plotters/test_plotter_plotly.py renamed to tests/unit/easydiffraction/display/plotters/test_plotly.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
# SPDX-License-Identifier: BSD-3-Clause
33

44
def test_module_import():
5-
import easydiffraction.plotting.plotters.plotter_plotly as MUT
5+
import easydiffraction.display.plotters.plotly as MUT
66

7-
expected_module_name = 'easydiffraction.plotting.plotters.plotter_plotly'
7+
expected_module_name = 'easydiffraction.display.plotters.plotly'
88
actual_module_name = MUT.__name__
99
assert expected_module_name == actual_module_name
1010

1111

1212
def test_get_trace_and_plot(monkeypatch):
13-
import easydiffraction.plotting.plotters.plotter_plotly as pp
13+
import easydiffraction.display.plotters.plotly as pp
1414

1515
# Arrange: force non-PyCharm branch and stub fig.show/HTML/display so nothing opens
1616
monkeypatch.setattr(pp, 'is_pycharm', lambda: False)

tests/unit/easydiffraction/plotting/test_plotting.py renamed to tests/unit/easydiffraction/display/test_plotting.py

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,27 @@
22
# SPDX-License-Identifier: BSD-3-Clause
33

44
def test_module_import():
5-
import easydiffraction.plotting.plotting as MUT
5+
import easydiffraction.display.plotting as MUT
66

7-
expected_module_name = 'easydiffraction.plotting.plotting'
7+
expected_module_name = 'easydiffraction.display.plotting'
88
actual_module_name = MUT.__name__
99
assert expected_module_name == actual_module_name
1010

1111

1212
def test_plotter_configuration_and_engine_switch(capsys):
13-
from easydiffraction.plotting.plotting import Plotter
13+
from easydiffraction.display.plotting import Plotter
1414

1515
p = Plotter()
1616
# show config prints a table
1717
p.show_config()
1818
out1 = capsys.readouterr().out
1919
assert 'Current plotter configuration' in out1
2020

21-
# show supported engines prints a table
21+
# show supported engines prints a table (now via base RendererBase title)
2222
p.show_supported_engines()
2323
out2 = capsys.readouterr().out
24-
assert 'Supported plotter engines' in out2
24+
# assert 'Supported plotter engines' in out2
25+
assert 'Supported engines' in out2
2526

2627
# Switch engine to its current value (no-op, but exercise setter)
2728
cur = p.engine
@@ -36,19 +37,25 @@ def test_plotter_configuration_and_engine_switch(capsys):
3637
assert 'asciichartpy' in out3 or 'plotly' in out3
3738

3839

39-
def test_plotter_factory_unsupported(capsys):
40-
from easydiffraction.plotting.plotting import PlotterFactory
40+
def test_plotter_factory_supported_and_unsupported():
41+
from easydiffraction.display.plotting import PlotterFactory
4142

42-
obj = PlotterFactory.create_plotter('nope')
43-
assert obj is None
44-
out = capsys.readouterr().out
45-
assert 'Unsupported plotting engine' in out
43+
# Supported engine creates a backend instance
44+
obj = PlotterFactory.create('asciichartpy')
45+
assert obj is not None
46+
47+
# Unsupported engine should raise ValueError (unified policy)
48+
try:
49+
PlotterFactory.create('nope')
50+
assert False, 'Expected ValueError for unsupported engine name'
51+
except ValueError:
52+
pass
4653

4754

4855
def test_plotter_error_paths_and_filtering(capsys):
4956
from easydiffraction.experiments.experiment.enums import BeamModeEnum
5057
from easydiffraction.experiments.experiment.enums import ScatteringTypeEnum
51-
from easydiffraction.plotting.plotting import Plotter
58+
from easydiffraction.display.plotting import Plotter
5259

5360
class Ptn:
5461
def __init__(self, x=None, meas=None, calc=None, d=None):
@@ -77,22 +84,29 @@ def __init__(self):
7784

7885
p.plot_calc(Ptn(x=None, calc=None), 'E', ExptType())
7986
out = capsys.readouterr().out
80-
# plot_calc also uses formatting.error(...) without printing for x is None
87+
# error path should not print to stdout
8188
assert out == ''
8289

8390
p.plot_calc(Ptn(x=[1], calc=None), 'E', ExptType())
8491
out = capsys.readouterr().out
85-
assert 'No calculated data available' in out or 'No calculated data' in out
92+
# assert 'No calculated data available' in out or 'No calculated data' in out
93+
# error path should not print to stdout in new API
94+
assert out == ''
8695

8796
p.plot_meas_vs_calc(Ptn(x=None), 'E', ExptType())
8897
out = capsys.readouterr().out
89-
assert 'No data available' in out
98+
# assert 'No data available' in out
99+
assert out == ''
90100
p.plot_meas_vs_calc(Ptn(x=[1], meas=None, calc=[1]), 'E', ExptType())
91101
out = capsys.readouterr().out
92-
assert 'No measured data available' in out
102+
# assert 'No measured data available' in out
103+
assert out == ''
93104
p.plot_meas_vs_calc(Ptn(x=[1], meas=[1], calc=None), 'E', ExptType())
94105
out = capsys.readouterr().out
95-
assert 'No calculated data available' in out
106+
# assert 'No calculated data available' in out
107+
assert out == ''
108+
# TODO: Update assertions with new logging-based error handling
109+
# in the above line and elsewhere as needed.
96110

97111
# Filtering
98112
import numpy as np
@@ -106,10 +120,10 @@ def __init__(self):
106120
def test_plotter_routes_to_ascii_plotter(monkeypatch):
107121
import numpy as np
108122

109-
import easydiffraction.plotting.plotters.plotter_ascii as ascii_mod
123+
import easydiffraction.display.plotters.ascii as ascii_mod
110124
from easydiffraction.experiments.experiment.enums import BeamModeEnum
111125
from easydiffraction.experiments.experiment.enums import ScatteringTypeEnum
112-
from easydiffraction.plotting.plotting import Plotter
126+
from easydiffraction.display.plotting import Plotter
113127

114128
called = {}
115129

tests/unit/easydiffraction/experiments/experiment/test_base.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# SPDX-FileCopyrightText: 2021-2025 EasyDiffraction contributors <https://github.com/easyscience/diffraction>
22
# SPDX-License-Identifier: BSD-3-Clause
33

4-
5-
64
def test_module_import():
75
import easydiffraction.experiments.experiment.base as MUT
86

tests/unit/easydiffraction/experiments/experiment/test_enums.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# SPDX-FileCopyrightText: 2021-2025 EasyDiffraction contributors <https://github.com/easyscience/diffraction>
22
# SPDX-License-Identifier: BSD-3-Clause
33

4-
5-
64
def test_module_import():
75
import easydiffraction.experiments.experiment.enums as MUT
86

tests/unit/easydiffraction/experiments/experiment/test_instrument_mixin.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
# SPDX-FileCopyrightText: 2021-2025 EasyDiffraction contributors <https://github.com/easyscience/diffraction>
22
# SPDX-License-Identifier: BSD-3-Clause
33

4-
5-
64
def test_module_import():
75
import easydiffraction.experiments.experiment.instrument_mixin as MUT
86

tests/unit/easydiffraction/plotting/plotters/test_plotter_base.py

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)