Skip to content

Commit de5701b

Browse files
authored
jdaviz 4.5 updates (#210)
1 parent 9221a00 commit de5701b

17 files changed

+79
-74
lines changed

CHANGES.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
1.2.2 (unreleased)
55
------------------
66

7+
* Update jdaviz requirement to 4.5, including support for popping out and showing viewers inline. [#210]
78

89
1.2.1 (09-26-2025)
910
------------------

lcviz/helper.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from glue.config import settings as glue_settings
1010
from glue.core.link_helpers import LinkSame
1111
from glue.core.units import unit_converter
12+
from jdaviz.configs.default.plugins.viewers import JdavizViewerWindow
1213
from jdaviz.core.helpers import ConfigHelper
1314

1415
from lcviz import __version__
@@ -41,7 +42,7 @@ def to_unit(self, data, cid, values, original_units, target_units):
4142

4243

4344
def _get_range_subset_bounds(self, subset_state, *args, **kwargs):
44-
viewer = self._jdaviz_helper.default_time_viewer._obj
45+
viewer = self._jdaviz_helper.default_time_viewer._obj.glue_viewer
4546
light_curve = viewer.data()[0]
4647
reference_time = light_curve.meta['reference_time']
4748
if viewer:
@@ -83,7 +84,7 @@ def _get_display_unit(app, axis):
8384
if axis == 'time':
8485
return u.d
8586
elif axis == 'flux':
86-
return app._jdaviz_helper.default_time_viewer._obj.data()[0].flux.unit
87+
return app._jdaviz_helper.default_time_viewer._obj.glue_viewer.data()[0].flux.unit
8788
else:
8889
raise ValueError(f"could not find units for axis='{axis}'")
8990
try:
@@ -204,7 +205,7 @@ def default_time_viewer(self):
204205
if isinstance(viewer, TimeScatterView)]
205206
if not len(tvs):
206207
raise ValueError("no time viewers exist")
207-
return tvs[0].user_api
208+
return JdavizViewerWindow(tvs[0], app=self.app).user_api
208209

209210
@property
210211
def _has_cube_data(self):

lcviz/plugins/ephemeris/ephemeris.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from glue.core.link_helpers import LinkSame
1010
from glue.core.message import DataCollectionAddMessage
11+
from jdaviz.configs.default.plugins.viewers import JdavizViewerWindow
1112
from jdaviz.core.custom_traitlets import FloatHandleEmpty
1213
from jdaviz.core.events import (NewViewerMessage, ViewerAddedMessage, ViewerRemovedMessage)
1314
from jdaviz.core.registries import tray_registry
@@ -390,7 +391,7 @@ def create_phase_viewer(self, ephem_component=None):
390391

391392
self._set_viewer_to_ephem_component(pv, ephem_component=ephem_component)
392393

393-
return pv.user_api
394+
return JdavizViewerWindow(pv, app=self.app).user_api
394395

395396
def vue_create_phase_viewer(self, *args):
396397
if not self.phase_viewer_exists:

lcviz/plugins/time_selector/time_selector.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from traitlets import observe
22

33
from jdaviz.core.template_mixin import ViewerSelectMixin
4-
from jdaviz.configs.cubeviz.plugins import Slice
4+
from jdaviz.configs.cubeviz.plugins import BaseSlicePlugin
55
from jdaviz.core.registries import tray_registry
66

77
from lcviz.events import EphemerisChangedMessage
@@ -11,7 +11,7 @@
1111

1212

1313
@tray_registry('time-selector', label="Time Selector", category='app:options')
14-
class TimeSelector(Slice, ViewerSelectMixin):
14+
class TimeSelector(BaseSlicePlugin, ViewerSelectMixin):
1515
"""
1616
See the :ref:`Time Selector Plugin Documentation <time-selector>` for more details.
1717
@@ -53,13 +53,6 @@ def __init__(self, *args, **kwargs):
5353
self.viewer.add_filter(lambda viewer: isinstance(viewer, (TimeScatterView, PhaseScatterView, CubeView))) # noqa
5454
self._set_relevant()
5555

56-
@observe('viewer_items')
57-
def _set_relevant(self, *args):
58-
if not len(self.viewer_items):
59-
self.irrelevant_msg = 'No valid viewers'
60-
else:
61-
self.irrelevant_msg = ''
62-
6356
@observe('vdocs')
6457
def _update_docs_link(self, *args):
6558
self.docs_link = f"https://lcviz.readthedocs.io/en/{self.vdocs}/plugins.html#time-selector"

lcviz/tests/test_parser.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_kepler_via_mast_local_file(helper):
1919
) # 188 KB
2020

2121
path = download_file(url, cache=True, timeout=100)
22-
helper.load_data(path)
22+
helper.load(path)
2323

2424
data = helper.app.data_collection[0]
2525
flux_arr = data['flux']
@@ -39,7 +39,7 @@ def test_kepler_via_mast_preparsed(helper):
3939
) # 188 KB
4040

4141
light_curve = kepler.read_kepler_lightcurve(url)
42-
helper.load_data(light_curve)
42+
helper.load(light_curve)
4343

4444
data = helper.app.data_collection[0]
4545
flux_arr = data['flux']
@@ -57,7 +57,7 @@ def test_kepler_tpf_via_lightkurve(helper):
5757
mission="Kepler",
5858
cadence="long",
5959
quarter=10).download()
60-
helper.load_data(tpf)
60+
helper.load(tpf)
6161
assert helper.get_data().shape == (4447, 4, 6) # (time, x, y)
6262
assert helper.app.data_collection[0].get_object(cls=KeplerTargetPixelFile).shape == (4447, 4, 6)
6363

@@ -68,8 +68,8 @@ def test_mult_lc_reftime(helper):
6868
cadence="long", quarter=9).download()
6969
lc2 = search_lightcurve("HAT-P-11", mission="Kepler",
7070
cadence="long", quarter=10).download()
71-
helper.load_data(lc1, data_label='Q9')
72-
helper.load_data(lc2, data_label='Q10')
71+
helper.load(lc1, data_label='Q9')
72+
helper.load(lc2, data_label='Q10')
7373
assert helper.app.data_collection[0].meta.get('reference_time') == helper.app.data_collection[1].meta.get('reference_time') # noqa
7474

7575

@@ -78,7 +78,7 @@ def test_synthetic_lc(helper):
7878
flux = np.ones(len(time)) * u.electron / u.s
7979
flux_err = 0.1 * np.ones_like(flux)
8080
lc = LightCurve(time=time, flux=flux, flux_err=flux_err)
81-
helper.load_data(lc)
81+
helper.load(lc)
8282

8383
data = helper.app.data_collection[0]
8484
flux_arr = data['flux']
@@ -92,8 +92,8 @@ def test_synthetic_lc(helper):
9292

9393
def test_apply_xrangerois(helper, light_curve_like_kepler_quarter):
9494
lc = light_curve_like_kepler_quarter
95-
helper.load_data(lc)
96-
viewer = helper.default_time_viewer._obj
95+
helper.load(lc)
96+
viewer = helper.default_time_viewer._obj.glue_viewer
9797
subset_plugin = helper.plugins['Subset Tools']
9898

9999
# the min/max of temporal regions can be defined in two ways:
@@ -117,8 +117,8 @@ def test_apply_xrangerois(helper, light_curve_like_kepler_quarter):
117117

118118
def test_apply_yrangerois(helper, light_curve_like_kepler_quarter):
119119
lc = light_curve_like_kepler_quarter
120-
helper.load_data(lc)
121-
viewer = helper.default_time_viewer._obj
120+
helper.load(lc)
121+
viewer = helper.default_time_viewer._obj.glue_viewer
122122
subset_plugin = helper.plugins['Subset Tools']
123123

124124
subset_plugin._obj.subset_selected = "Create New"
@@ -135,11 +135,11 @@ def test_apply_yrangerois(helper, light_curve_like_kepler_quarter):
135135

136136
def test_data_label(helper, light_curve_like_kepler_quarter):
137137
# add data without specifying data label:
138-
helper.load_data(light_curve_like_kepler_quarter)
138+
helper.load(light_curve_like_kepler_quarter)
139139
object_name = helper.app.data_collection[-1].meta['OBJECT']
140140
assert helper.app.data_collection[-1].label == f'{object_name} [Q10]'
141141

142142
# specify label, check that quarter isn't appended:
143143
data_label = 'Cool target'
144-
helper.load_data(light_curve_like_kepler_quarter, data_label=data_label)
144+
helper.load(light_curve_like_kepler_quarter, data_label=data_label)
145145
assert helper.app.data_collection[-1].label == data_label

lcviz/tests/test_plugin_binning.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ def test_docs_snippets(helper, light_curve_like_kepler_quarter):
2020

2121

2222
def test_plugin_binning(helper, light_curve_like_kepler_quarter):
23-
helper.load_data(light_curve_like_kepler_quarter)
24-
tv = helper.default_time_viewer._obj
23+
helper.load(light_curve_like_kepler_quarter)
24+
tv = helper.default_time_viewer._obj.glue_viewer
2525

2626
b = helper.plugins['Binning']
2727
b._obj.plugin_opened = True

lcviz/tests/test_plugin_ephemeris.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_docs_snippets(helper, light_curve_like_kepler_quarter):
1414

1515

1616
def test_plugin_ephemeris(helper, light_curve_like_kepler_quarter):
17-
helper.load_data(light_curve_like_kepler_quarter)
17+
helper.load(light_curve_like_kepler_quarter)
1818
ephem = helper.plugins['Ephemeris']
1919

2020
assert len(helper.app.get_viewer_ids()) == 1
@@ -82,24 +82,26 @@ def test_plugin_ephemeris(helper, light_curve_like_kepler_quarter):
8282

8383

8484
def test_cloned_phase_viewer(helper, light_curve_like_kepler_quarter):
85-
helper.load_data(light_curve_like_kepler_quarter)
85+
helper.load(light_curve_like_kepler_quarter)
8686
ephem = helper.plugins['Ephemeris']
8787

8888
assert len(ephem._obj._get_phase_viewers()) == 0
8989
pv1 = ephem.create_phase_viewer()
9090
assert len(ephem._obj._get_phase_viewers()) == 1
91-
pv2 = pv1._obj.clone_viewer()
91+
pv2 = pv1._obj.glue_viewer.clone_viewer()
9292
assert len(ephem._obj._get_phase_viewers()) == 2
9393
assert len(helper.viewers) == 3
94-
assert pv1._obj.reference_id == 'flux-vs-phase:default'
95-
assert pv1._obj._ephemeris_component == 'default'
94+
assert pv1._obj.glue_viewer.reference_id == 'flux-vs-phase:default'
95+
assert pv1._obj.glue_viewer._ephemeris_component == 'default'
96+
# NOTE: this should be updated once upstream changes to return the JdavizViewerWindow user_api
9697
assert pv2._obj.reference_id == 'flux-vs-phase:default[1]'
9798
assert pv2._obj._ephemeris_component == 'default'
9899

99100
# renaming ephemeris should update both labels
100101
ephem.rename_component('default', 'renamed')
101-
assert pv1._obj.reference_id == 'flux-vs-phase:renamed'
102-
assert pv1._obj._ephemeris_component == 'renamed'
102+
assert pv1._obj.glue_viewer.reference_id == 'flux-vs-phase:renamed'
103+
assert pv1._obj.glue_viewer._ephemeris_component == 'renamed'
104+
# NOTE: this should be updated once upstream changes to return the JdavizViewerWindow user_api
103105
assert pv2._obj.reference_id == 'flux-vs-phase:renamed[1]'
104106
assert pv2._obj._ephemeris_component == 'renamed'
105107
assert len(ephem._obj._get_phase_viewers()) == 2
@@ -109,7 +111,7 @@ def test_cloned_phase_viewer(helper, light_curve_like_kepler_quarter):
109111

110112

111113
def test_create_phase_viewer(helper, light_curve_like_kepler_quarter):
112-
helper.load_data(light_curve_like_kepler_quarter)
114+
helper.load(light_curve_like_kepler_quarter)
113115
ephem = helper.plugins['Ephemeris']
114116
vc = helper._tray_tools['g-viewer-creator']
115117

@@ -136,7 +138,7 @@ def test_create_phase_viewer(helper, light_curve_like_kepler_quarter):
136138

137139

138140
def test_ephemeris_queries(helper, light_curve_like_kepler_quarter):
139-
helper.load_data(light_curve_like_kepler_quarter)
141+
helper.load(light_curve_like_kepler_quarter)
140142
ephem = helper.plugins['Ephemeris']
141143

142144
ephem.query_for_ephemeris()
@@ -151,7 +153,7 @@ def test_ephemeris_query_no_name(helper, light_curve_like_kepler_quarter):
151153
# test that the query successfully falls back on the RA/Dec:
152154
light_curve_like_kepler_quarter.meta['OBJECT'] = ''
153155

154-
helper.load_data(light_curve_like_kepler_quarter)
156+
helper.load(light_curve_like_kepler_quarter)
155157
ephem = helper.plugins['Ephemeris']
156158

157159
ephem.query_for_ephemeris()

lcviz/tests/test_plugin_flatten.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ def test_docs_snippets(helper, light_curve_like_kepler_quarter):
2424

2525

2626
def test_plugin_flatten(helper, light_curve_like_kepler_quarter):
27-
helper.load_data(light_curve_like_kepler_quarter)
28-
tv = helper.default_time_viewer._obj
27+
helper.load(light_curve_like_kepler_quarter)
28+
tv = helper.default_time_viewer._obj.glue_viewer
2929

3030
ephem = helper.plugins['Ephemeris']
31-
pv = ephem.create_phase_viewer()._obj
31+
pv = ephem.create_phase_viewer()._obj.glue_viewer
3232
f = helper.plugins['Flatten']
3333

3434
# no marks until plugin opened/active
@@ -73,7 +73,7 @@ def test_plugin_flatten(helper, light_curve_like_kepler_quarter):
7373

7474

7575
def test_unnormalize(helper, light_curve_like_kepler_quarter):
76-
helper.load_data(light_curve_like_kepler_quarter)
76+
helper.load(light_curve_like_kepler_quarter)
7777

7878
f = helper.plugins['Flatten']
7979

lcviz/tests/test_plugin_flux_column.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_docs_snippets(helper, light_curve_like_kepler_quarter):
1414

1515

1616
def test_plugin_flux_column(helper, light_curve_like_kepler_quarter):
17-
helper.load_data(light_curve_like_kepler_quarter)
17+
helper.load(light_curve_like_kepler_quarter)
1818

1919
fo = helper.plugins['Flux Column']
2020
assert len(fo.flux_column.choices) == 2

lcviz/tests/test_plugin_frequency_analysis.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def test_docs_snippets(helper, light_curve_like_kepler_quarter):
1818

1919

2020
def test_plugin_frequency_analysis(helper, light_curve_like_kepler_quarter):
21-
helper.load_data(light_curve_like_kepler_quarter)
21+
helper.load(light_curve_like_kepler_quarter)
2222

2323
freq = helper.plugins['Frequency Analysis']
2424
freq.open_in_tray()

0 commit comments

Comments
 (0)