Minor changes:
- ROI.getArrayRegion makes sure the ROI and image share the same scene - Added a few binary operator methods to metaarray - Fixed flowchart/eq.py handling of metaarray objects
This commit is contained in:
parent
5a4fd82cd9
commit
f9a7dad5dc
@ -1,8 +1,12 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from numpy import ndarray, bool_
|
from numpy import ndarray, bool_
|
||||||
|
from metaarray import MetaArray
|
||||||
|
|
||||||
def eq(a, b):
|
def eq(a, b):
|
||||||
"""The great missing equivalence function: Guaranteed evaluation to a single bool value."""
|
"""The great missing equivalence function: Guaranteed evaluation to a single bool value."""
|
||||||
|
if a is b:
|
||||||
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
e = a==b
|
e = a==b
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@ -18,12 +22,15 @@ def eq(a, b):
|
|||||||
return e
|
return e
|
||||||
elif t is bool_:
|
elif t is bool_:
|
||||||
return bool(e)
|
return bool(e)
|
||||||
elif isinstance(e, ndarray):
|
elif isinstance(e, ndarray) or (hasattr(e, 'implements') and e.implements('MetaArray')):
|
||||||
try: ## disaster: if a is an empty array and b is not, then e.all() is True
|
try: ## disaster: if a is an empty array and b is not, then e.all() is True
|
||||||
if a.shape != b.shape:
|
if a.shape != b.shape:
|
||||||
return False
|
return False
|
||||||
except:
|
except:
|
||||||
return False
|
return False
|
||||||
return e.all()
|
if (hasattr(e, 'implements') and e.implements('MetaArray')):
|
||||||
|
return e.asarray().all()
|
||||||
|
else:
|
||||||
|
return e.all()
|
||||||
else:
|
else:
|
||||||
raise Exception("== operator returned type %s" % str(type(e)))
|
raise Exception("== operator returned type %s" % str(type(e)))
|
||||||
|
@ -965,6 +965,8 @@ class ROI(GraphicsObject):
|
|||||||
|
|
||||||
See :func:`getArrayRegion <pyqtgraph.ROI.getArrayRegion>` for more information.
|
See :func:`getArrayRegion <pyqtgraph.ROI.getArrayRegion>` for more information.
|
||||||
"""
|
"""
|
||||||
|
if self.scene() is not img.scene():
|
||||||
|
raise Exception("ROI and target item must be members of the same scene.")
|
||||||
|
|
||||||
shape = self.state['size']
|
shape = self.state['size']
|
||||||
|
|
||||||
|
@ -305,14 +305,37 @@ class MetaArray(object):
|
|||||||
#return lambda *args, **kwargs: MetaArray(getattr(a.view(ndarray), attr)(*args, **kwargs)
|
#return lambda *args, **kwargs: MetaArray(getattr(a.view(ndarray), attr)(*args, **kwargs)
|
||||||
|
|
||||||
def __eq__(self, b):
|
def __eq__(self, b):
|
||||||
if isinstance(b, MetaArray):
|
return self._binop('__eq__', b)
|
||||||
b = b.asarray()
|
|
||||||
return self._data == b
|
|
||||||
|
|
||||||
def __ne__(self, b):
|
def __ne__(self, b):
|
||||||
|
return self._binop('__ne__', b)
|
||||||
|
#if isinstance(b, MetaArray):
|
||||||
|
#b = b.asarray()
|
||||||
|
#return self.asarray() != b
|
||||||
|
|
||||||
|
def __sub__(self, b):
|
||||||
|
return self._binop('__sub__', b)
|
||||||
|
#if isinstance(b, MetaArray):
|
||||||
|
#b = b.asarray()
|
||||||
|
#return MetaArray(self.asarray() - b, info=self.infoCopy())
|
||||||
|
|
||||||
|
def __add__(self, b):
|
||||||
|
return self._binop('__add__', b)
|
||||||
|
|
||||||
|
def __mul__(self, b):
|
||||||
|
return self._binop('__mul__', b)
|
||||||
|
|
||||||
|
def __div__(self, b):
|
||||||
|
return self._binop('__div__', b)
|
||||||
|
|
||||||
|
def _binop(self, op, b):
|
||||||
if isinstance(b, MetaArray):
|
if isinstance(b, MetaArray):
|
||||||
b = b.asarray()
|
b = b.asarray()
|
||||||
return self._data != b
|
a = self.asarray()
|
||||||
|
c = getattr(a, op)(b)
|
||||||
|
if c.shape != a.shape:
|
||||||
|
raise Exception("Binary operators with MetaArray must return an array of the same shape (this shape is %s, result shape was %s)" % (a.shape, c.shape))
|
||||||
|
return MetaArray(c, info=self.infoCopy())
|
||||||
|
|
||||||
def asarray(self):
|
def asarray(self):
|
||||||
if isinstance(self._data, np.ndarray):
|
if isinstance(self._data, np.ndarray):
|
||||||
|
Loading…
Reference in New Issue
Block a user