pyqtgraph/flowchart/library/Operators.py
2012-03-01 21:55:32 -05:00

65 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
from ..Node import Node
class UniOpNode(Node):
"""Generic node for performing any operation like Out = In.fn()"""
def __init__(self, name, fn):
self.fn = fn
Node.__init__(self, name, terminals={
'In': {'io': 'in'},
'Out': {'io': 'out', 'bypass': 'In'}
})
def process(self, **args):
return {'Out': getattr(args['In'], self.fn)()}
class BinOpNode(Node):
"""Generic node for performing any operation like A.fn(B)"""
def __init__(self, name, fn):
self.fn = fn
Node.__init__(self, name, terminals={
'A': {'io': 'in'},
'B': {'io': 'in'},
'Out': {'io': 'out', 'bypass': 'A'}
})
def process(self, **args):
fn = getattr(args['A'], self.fn)
out = fn(args['B'])
if out is NotImplemented:
raise Exception("Operation %s not implemented between %s and %s" % (fn, str(type(args['A'])), str(type(args['B']))))
#print " ", fn, out
return {'Out': out}
class AbsNode(UniOpNode):
"""Returns abs(Inp). Does not check input types."""
nodeName = 'Abs'
def __init__(self, name):
UniOpNode.__init__(self, name, '__abs__')
class AddNode(BinOpNode):
"""Returns A + B. Does not check input types."""
nodeName = 'Add'
def __init__(self, name):
BinOpNode.__init__(self, name, '__add__')
class SubtractNode(BinOpNode):
"""Returns A - B. Does not check input types."""
nodeName = 'Subtract'
def __init__(self, name):
BinOpNode.__init__(self, name, '__sub__')
class MultiplyNode(BinOpNode):
"""Returns A * B. Does not check input types."""
nodeName = 'Multiply'
def __init__(self, name):
BinOpNode.__init__(self, name, '__mul__')
class DivideNode(BinOpNode):
"""Returns A / B. Does not check input types."""
nodeName = 'Divide'
def __init__(self, name):
BinOpNode.__init__(self, name, '__div__')