Source code for openmdao.lib.components.mux
from openmdao.lib.datatypes.api import Int, List, Any
from openmdao.main.api import Component
from openmdao.main.interfaces import IComponent
[docs]class Mux(Component):
""" Takes in *n* inputs and exports a length *n* List
with the data. It is a logical multiplexer.
"""
n = Int(2, low=2, iotype="in",desc="number of inputs to be multiplexed")
output = List(iotype="out")
def __init__(self, n=2):
super(Mux,self).__init__()
self._inputs = []
self.n = n
self._n_changed(n, n) #just to initialize it
def _n_changed(self,old,new):
for name in self._inputs:
if self.parent:
self.parent.disconnect('.'.join([self.name,name]))
self.remove_trait(name)
self._inputs = []
#build the inputs
for i in xrange(new):
name = "input_%d"%(i+1)
self.add(name, Any(iotype="in"))
self._inputs.append(name)
[docs] def execute(self):
self.output = [getattr(self,inp) for inp in self._inputs]
[docs]class DeMux(Component):
""" Takes one List input and splits it into *n* indvidual outputs. This is a
logical demultiplexer. """
n = Int(2, low=2, iotype="in", desc="number of items in the array to be \
demultiplexed")
inputs = List(iotype="in")
def __init__(self, n=2):
super(DeMux,self).__init__()
self.n = n
self._outputs = []
self._n_changed(n,n)
def _n_changed(self,old,new):
for name in self._outputs:
if self.parent:
self.parent.disconnect('.'.join([self.name,name]))
self.remove_trait(name)
self._outputs = []
for i in xrange(new):
name = "output_%d"%(i+1)
self.add(name, Any(iotype="out"))
self._outputs.append(name)
[docs] def execute(self):
for data,out in zip(self.inputs,self._outputs):
setattr(self,out,data)