Args:
        inputs: collection of input Steps
        output: output Step

    Returns: a string of the drake step for the given inputs and output

def to_drake_step(inputs, output):
    """
    Args:
        inputs: collection of input Steps
        output: output Step

    Returns: a string of the drake step for the given inputs and output
    """
    i = [output._yaml_filename]
    i.extend(map(lambda i: i._target_filename, list(inputs)))
    i.extend(output.dependencies)

    # add source file of output and its non-target inputs
    # if they're not in the drain library
    objects = get_inputs(output, target=False)
    objects.add(output)
    sources = set([os.path.abspath(inspect.getsourcefile(o.__class__)) for o in objects])
    i.extend([s for s in sources if not s.startswith(os.path.dirname(__file__))])

    output_str = '%' + output.__class__.__name__
    if output.name:
        output_str += ', %' + output.name
    if output.target:
        output_str += ', ' + os.path.join(output._target_filename)
    return '{output} <- {inputs} [method:drain]\n\n'.format(
            output=output_str, inputs=str.join(', ', i))