@@ -649,10 +649,55 @@ static float* _intToFloatPointer(std::size_t intPointer) {
649649
650650%extend fast::ProcessObject {
651651 %pythoncode %{
652- def getDataStream(self):
653- return DataStream(self)
652+ def getDataStream(self):
653+ return DataStream(self)
654+
655+ def __call__(self, *args: Tuple[Union[DataObject, 'ProcessObject', Tuple[Union[DataObject, 'ProcessObject', int], ...]], ...]) -> Union[DataObject, List[DataObject]]:
656+ """
657+ Connect input data to this process object, run, and return all output data.
658+ Input data must be a list of data or process objects. Input and output ports can be provided using a tuple.
659+ For example
660+ PO = SomeProcessObject()
661+ output = PO(inputData1, inputPO2) # Only provide data sources, input ports are assumed to be 0, 1, ...
662+ output = PO((inputPO, 1), (inputPO, 0)) # Specify output ports to connect
663+ output = PO((1, inputPO, 1), (0, inputPO, 0)) # Specify both output ports and input ports
664+ output = PO((1, inputPO), (0, inputPO)) # Specify input ports
665+ """
666+ for index, arg in enumerate(args):
667+ if isinstance(arg, tuple):
668+ if len(arg) == 2:
669+ if isinstance(arg[0], int):
670+ inputPort = arg[0]
671+ source = arg[1]
672+ outputPort = 0
673+ else:
674+ inputPort = 0
675+ source = arg[0]
676+ outputPort = arg[1]
677+ elif len(arg) == 3:
678+ inputPort, source, outputPort = arg
679+ else:
680+ raise ValueError('Input data tuple given to __call__() must have 2 or 3 items.')
681+ else:
682+ inputPort = index
683+ outputPort = 0
684+ source = arg
685+ # Type check
686+ if isinstance(source, ProcessObject):
687+ self.connect(inputPort, source, outputPort)
688+ elif isinstance(source, DataObject):
689+ self.connect(inputPort, source)
690+ else:
691+ raise ValueError('Data source given to __call__() must be a ProcessObject or a DataObject')
692+ self.run()
693+ outputData = []
694+ for i in range(self.getNrOfOutputPorts()):
695+ outputData.append(self.getOutput(i))
696+ if len(outputData) == 1:
697+ return outputData[0]
698+ else:
699+ return outputData
654700 %}
655-
656701}
657702
658703/*
@@ -667,4 +712,4 @@ static float* _intToFloatPointer(std::size_t intPointer) {
667712}
668713*/
669714
670- %include "ProcessObjects.i"
715+ %include "ProcessObjects.i"
0 commit comments