Skip to content
Merged
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
26 changes: 19 additions & 7 deletions psy_view/ds_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ def get_dims_to_iterate(arr):
if size > 1 and arr[dim].ndim == 0]



class DatasetWidget(QtWidgets.QSplitter):
"""A widget to control the visualization of the variables in a dataset"""

Expand Down Expand Up @@ -150,6 +149,8 @@ def __init__(self, ds=None, *args, **kwargs):
self.addWidget(self.dimension_table)

self.disable_navigation()
if self.ds is not None:
self.refresh()

self.cids = {}

Expand Down Expand Up @@ -385,8 +386,9 @@ def disable_variables(self):
btn.setEnabled(False)

def enable_variables(self):
for btn in self.variable_buttons.values():
btn.setEnabled(True)
valid_variables = self.plotmethod_widget.valid_variables(self.ds)
for v, btn in self.variable_buttons.items():
btn.setEnabled(v in valid_variables)

def start_animation(self):
self._animating = True
Expand Down Expand Up @@ -724,6 +726,7 @@ def show_fig(self):

def switch_tab(self):
with self.silence_variable_buttons():
ds = self.ds
if self.sp:
name = self.data.name
else:
Expand Down Expand Up @@ -917,7 +920,15 @@ def get_slice(self, x, y):
return None

def valid_variables(self, ds):
return list(ds)
ret = []
plotmethod = getattr(ds.psy.plot, self.plotmethod)
for v in list(ds):
init_kws = self.init_dims(ds[v])
dims = init_kws.get('dims', {})
decoder = init_kws.get('decoder')
if plotmethod.check_data(ds, v, dims, decoder)[0][0]:
ret.append(v)
return ret


class MapPlotWidget(PlotMethodWidget):
Expand Down Expand Up @@ -1039,7 +1050,7 @@ def init_dims(self, var):
missing = [dim for dim in var.dims if dim not in dims]
for dim in missing:
dims[dim] = 0
if len(dims) == 1:
if len(dims) == 1 and xdim != ydim:
if xdim is None:
xdim = missing[-1]
else:
Expand All @@ -1056,7 +1067,8 @@ def init_dims(self, var):
ret.setdefault('decoder', {})
ret['decoder']['y'] = {ycoord}

if xdim is not None and xdim in var.dims:
if (xdim is not None and xdim in var.dims and
ydim is not None and ydim in var.dims):
ret['transpose'] = var.dims.index(xdim) < var.dims.index(ydim)

return ret
Expand Down Expand Up @@ -1502,7 +1514,7 @@ def block_combos(self):
self.combo_lines.blockSignals(False)

def valid_variables(self, ds):
valid = super().valid_variables(ds)
valid = list(ds)
if not self.sp or len(self.sp[0]) < 2:
return valid
else:
Expand Down
25 changes: 24 additions & 1 deletion tests/test_ds_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ def test_plot2d(qtbot, ds_widget):
assert not ds_widget.sp


def test_plot2d_dim_switch(qtbot, ds_widget, test_ds):
def test_plot2d_dim_switch(qtbot, ds_widget, test_ds, test_file):
arr = test_ds['t2m']

ds_widget.plotmethod = 'plot2d'
Expand Down Expand Up @@ -258,3 +258,26 @@ def animation_finished():
# stop animation
qtbot.mouseClick(btn, Qt.LeftButton)
assert not ds_widget._animating


def test_enable_disable_variables(test_ds, qtbot):
from psy_view.ds_widget import DatasetWidget
import numpy as np
test_ds['line'] = ('xtest', np.zeros(7))
test_ds['xtest'] = ('xtest', np.arange(7))

ds_widget = DatasetWidget(test_ds)
qtbot.addWidget(ds_widget)

assert ds_widget.variable_buttons['t2m'].isEnabled()
assert not ds_widget.variable_buttons['line'].isEnabled()

ds_widget.plotmethod = 'lineplot'

assert ds_widget.variable_buttons['t2m'].isEnabled()
assert ds_widget.variable_buttons['line'].isEnabled()

ds_widget.plotmethod = 'plot2d'

assert ds_widget.variable_buttons['t2m'].isEnabled()
assert not ds_widget.variable_buttons['line'].isEnabled()