Skip to content

fix #66 : Compare colors #68

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

Merged
merged 2 commits into from
Sep 13, 2017
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
6 changes: 3 additions & 3 deletions larray_editor/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,15 +352,15 @@ def restore_display_hook():
# profile.runctx('edit(la.Session(arr2=arr2))', vars(), {},
# 'c:\\tmp\\edit.profile')

edit(ses)
# edit(ses)
# edit(ses)
# edit(file)
# edit('fake_path')
# edit(REOPEN_LAST_FILE)

# edit(arr2)
edit(arr2)
# compare(la.Session(arr2=arr2, arr3=arr3), la.Session(arr2=arr2 + 1.0, arr3=arr3 + 1.0))
# compare(arr2, arr2 + 1.0)
compare(arr3, arr3 + la.ndrange(arr3.axes))

# s = la.local_arrays()
# view(s)
Expand Down
14 changes: 13 additions & 1 deletion larray_editor/arrayadapter.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ def get_changes_2D(self):
changes_2D[local_key] = v
return changes_2D

def get_bg_value_2D(self, shape_2D):
if self.bg_value is not None:
filtered_bg_value = self.bg_value[self.current_filter]
if np.isscalar(filtered_bg_value):
filtered_bg_value = la.aslarray(filtered_bg_value)
return filtered_bg_value.data.reshape(shape_2D)
else:
return None

# XXX: or create two methods?:
# - set_data (which reset the current filter)
# - update_data (which sets new data but keeps current filter unchanged)
Expand All @@ -93,8 +102,9 @@ def set_data(self, data, bg_gradient=None, bg_value=None, current_filter=None):
self.current_filter = {}
self.changes = {}
self.la_data = la.aslarray(data)
self.bg_value = la.aslarray(bg_value) if bg_value is not None else None
self.bg_gradient = bg_gradient
self.update_filtered_data(current_filter)
self.data_model.set_background(bg_gradient, bg_value)

def update_filtered_data(self, current_filter=None):
if current_filter is not None:
Expand All @@ -113,10 +123,12 @@ def update_filtered_data(self, current_filter=None):
ylabels = self.get_ylabels()
data_2D = self.get_2D_data()
changes_2D = self.get_changes_2D()
bg_value_2D = self.get_bg_value_2D(data_2D.shape)
self.axes_model.set_data(axes)
self.xlabels_model.set_data(xlabels)
self.ylabels_model.set_data(ylabels)
self.data_model.set_data(data_2D, changes_2D)
self.data_model.set_background(self.bg_gradient, bg_value_2D)

def get_data(self):
return self.la_data
Expand Down
22 changes: 12 additions & 10 deletions larray_editor/arraymodel.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,8 @@ class DataArrayModel(AbstractArrayModel):
Parent Widget.
bg_gradient : LinearGradient, optional
Background color gradient
bg_value : LArray, optional
Background color value
bg_value : Numpy ndarray, optional
Background color value. Must have the shape as data
minvalue : scalar
Minimum value allowed.
maxvalue : scalar
Expand Down Expand Up @@ -299,7 +299,14 @@ def set_format(self, format):
self.reset()

def set_background(self, bg_gradient=None, bg_value=None):
self.bg_gradient = bg_gradient
if bg_gradient is not None and not isinstance(bg_gradient, LinearGradient):
raise ValueError("Expected None or LinearGradient instance for `bg_gradient` argument")
if bg_value is not None and not (isinstance(bg_value, np.ndarray) and bg_value.shape == self._data.shape):
raise ValueError("Expected None or 2D Numpy ndarray with shape {} for `bg_value` argument"
.format(self._data.shape))
# self.bg_gradient must never be None
if bg_gradient is not None:
self.bg_gradient = bg_gradient
self.bg_value = bg_value
self.reset()

Expand Down Expand Up @@ -349,13 +356,8 @@ def data(self, index, role=Qt.DisplayRole):
if self.bg_value is None:
return self.bg_gradient[float(self.color_func(value))]
else:
bg_value = self.bg_value
x, y = index.row(), index.column()
# FIXME: this is buggy on filtered data. We should change
# bg_value when changing the filter.
idx = y + x * bg_value.shape[-1]
value = bg_value.data.flat[idx]
return self.bg_gradient[value]
i, j = index.row(), index.column()
return self.bg_gradient[self.bg_value[i, j]]
# elif role == Qt.ToolTipRole:
# return to_qvariant("{}\n{}".format(repr(value),self.get_labels(index)))
return to_qvariant()
Expand Down
6 changes: 3 additions & 3 deletions larray_editor/arraywidget.py
Original file line number Diff line number Diff line change
Expand Up @@ -504,12 +504,12 @@ def __init__(self, parent, data, readonly=False, bg_value=None, bg_gradient=None
self.model_ylabels = LabelsArrayModel(parent=self, readonly=readonly)
self.view_ylabels = LabelsView(parent=self, model=self.model_ylabels, position=(BOTTOM, LEFT))

self.model_data = DataArrayModel(parent=self, readonly=readonly, bg_value=bg_value, bg_gradient=bg_gradient,
minvalue=minvalue, maxvalue=maxvalue)
self.model_data = DataArrayModel(parent=self, readonly=readonly, minvalue=minvalue, maxvalue=maxvalue)
self.view_data = DataView(parent=self, model=self.model_data, dtype=data.dtype, shape=data.shape)

self.data_adapter = LArrayDataAdapter(axes_model=self.model_axes, xlabels_model=self.model_xlabels,
ylabels_model=self.model_ylabels, data_model=self.model_data, data=data)
ylabels_model=self.model_ylabels, data_model=self.model_data, data=data,
bg_value=bg_value, bg_gradient=bg_gradient)

# Create vertical and horizontal scrollbars
self.vscrollbar = ScrollBar(self, self.view_data.verticalScrollBar())
Expand Down
2 changes: 1 addition & 1 deletion larray_editor/comparator.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def setup_and_check(self, arrays, names, title=''):
layout.addLayout(maxdiff_layout)

if absmax:
# scale diff to 0-1
# scale diff to range 0-1
bg_value = (diff / absmax) / 2 + 0.5
else:
# all 0.5 (white)
Expand Down