<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _get_step_inputs(step, file_vs, std_vs, parallel_ids, wf=None):
 """Retrieve inputs for a step from existing variables. Potentially nests inputs to deal with merging split variables. If we split previously and are merging now, then we only nest those coming from the split process. """

    inputs = []
    skip_inputs = set([])
    for orig_input in [_get_variable(x, file_vs) for x in _handle_special_inputs(step.inputs, file_vs)]:
        inputs.append(orig_input)
    # Only add description and other information for non-record inputs, otherwise batched with records
    if not any(is_cwl_record(x) for x in inputs):
        inputs += [v for v in std_vs if get_base_id(v["id"]) not in skip_inputs]
    nested_inputs = []
    if step.parallel in ["single-merge", "batch-merge"]:
        if parallel_ids:
            inputs = [_nest_variable(x) if x["id"] in parallel_ids else x for x in inputs]
            nested_inputs = parallel_ids[:]
            parallel_ids = []
    elif step.parallel in ["multi-combined"]:
        assert len(parallel_ids) == 0
        nested_inputs = [x["id"] for x in inputs]
        inputs = [_nest_variable(x) for x in inputs]
    elif step.parallel in ["multi-batch"]:
        assert len(parallel_ids) == 0
        nested_inputs = [x["id"] for x in inputs]
        # If we're batching,with mixed records/inputs avoid double nesting records
        inputs = [_nest_variable(x, check_records=(len(inputs) > 1)) for x in inputs]
    # avoid inputs/outputs with the same name
    outputs = [_get_string_vid(x["id"]) for x in step.outputs]
    final_inputs = []
    for input in inputs:
        input["wf_duplicate"] = get_base_id(input["id"]) in outputs
        final_inputs.append(input)
    return inputs, parallel_ids, nested_inputs