def main(file_name, jobs):
    in1out2 = NMFunction(n=1, m=2)
    in1out2.__metatype__ = "ADAPTER"
    in1out2.set_parameter("function", datasets)
    abs_reader = HigherOrderComponent(multiple_outputs_reader(m=3))
    df_reader = HigherOrderComponent(multiple_outputs_reader(m=2))
    feature_segmentation = ThicknessFeatureSegmentation()
    feature_segmentation_out = NMFunction(m=3)
    log_ratio = NMFunction(n=2)
    log_ratio.set_parameter(
        "function",
        log_function)
    average_abs = average()
    average_df = average()
    average_r = average()
    network = {
        in1out2: {
            abs_reader: ("out", "in"),
            df_reader: ("out1", "in"),
        },
        abs_reader: {
            average_abs: ("out", "in"),
            feature_segmentation: ("out1", "in"),
            log_ratio: ("out2", "in1")
        },
        df_reader: {
            log_ratio: ("out", "in"),
            average_df: ("out1", "in")
        },
        feature_segmentation: {
            feature_segmentation_out: ("out", "in")
        },
        log_ratio: {
            average_r: ("out", "in")
        },
        feature_segmentation_out: {
            average_abs: ("out", "in1"),
            average_df: ("out1", "in1"),
            average_r: ("out2", "in1")
        },
    }
    pipeline = pypes.pipeline.Dataflow(network, n=jobs)
    packet = pypes.packet.Packet()
    packet.set("file_name", file_name)
    pipeline.send(packet)
    pipeline.close()
def multiple_outputs_reader(m=2):
    "repeat the output of the reader m times"
    reader = Hdf5Reader()
    reader.__metatype__ = "TRANSFORMER"
    out = NMFunction(n=1, m=m)
    network = {
        reader: {
            out: ("out", "in")
        }
    }
    return network
def average():
    "calculate weighted average"
    average = NMFunction(n=2)
    average.set_parameter(
        "function", average_function)
    return average