code: def _get_step_inputs(step, file_vs, std_vs, parallel_ids, wf=None):
      
      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
docs: 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.