'Construct a new terminal.
**Arguments:**
node            the node to which this terminal belongs
name            string, the name of the terminal
io              \'in\' or \'out\'
optional        bool, whether the node may process without connection to this terminal
multi           bool, for inputs: whether this terminal may make multiple connections
for outputs: whether this terminal creates a different value for each connection
pos             [x, y], the position of the terminal within its node\'s boundaries
renamable       (bool) Whether the terminal can be renamed by the user
removable       (bool) Whether the terminal can be removed by the user
multiable       (bool) Whether the user may toggle the *multi* option for this terminal
bypass          (str) Name of the terminal from which this terminal\'s value is derived
when the Node is in bypass mode.'

def __init__(self, node, name, io, optional=False, multi=False, pos=None, renamable=False, removable=False, multiable=False, bypass=None):

    self._io = io
    self._optional = optional
    self._multi = multi
    self._node = weakref.ref(node)
    self._name = name
    self._renamable = renamable
    self._removable = removable
    self._multiable = multiable
    self._connections = {}
    self._graphicsItem = TerminalGraphicsItem(self, parent=self._node().graphicsItem())
    self._bypass = bypass
    if multi:
        self._value = {}
    else:
        self._value = None
    self.valueOk = None
    self.recolor()
