def nodeOutputType(self, dagNode, output):
        # If your output has only one potential type, you've gotta' be what you are.
        if len(output.allPossibleOutputTypes()) == 1:
            return output.dataPacketType
        
        # Which input is associated with this output?
        input = dagNode.inputAffectingOutput(output)
        if not input:
            return output.dataPacketType
        
        # Return the type of the found input since the output is going to match.
        (inputNode, inputNodeOutput) = self.nodeInputComesFromNode(dagNode, input)
        if not inputNode:
            return output.dataPacketType
        return self.nodeOutputType(inputNode, inputNodeOutput)
Nodes can output different inherited data packet types based on their inputs
dataset/ETHPy150Open andrew-gardner/dependsworkflow/depends/depends_dag.py/DAG.nodeOutputType