code: public Schema getSchemaAfterStep(int step) {
          Schema currInputSchema = initialSchema;
          int i = 0;
          for (DataAction d : actionList) {
              if (d.getTransform() != null) {
                  Transform t = d.getTransform();
                  currInputSchema = t.transform(currInputSchema);
              } else if (d.getFilter() != null) {
                  i++;
                  continue; //Filter -> doesn't change schema
              } else if (d.getConvertToSequence() != null) {
                  if (currInputSchema instanceof SequenceSchema) {
                      throw new RuntimeException("Cannot convert to sequence: schema is already a sequence schema: "
                              + currInputSchema);
                  }
                  ConvertToSequence cts = d.getConvertToSequence();
                  currInputSchema = cts.transform(currInputSchema);
              } else if (d.getConvertFromSequence() != null) {
                  ConvertFromSequence cfs = d.getConvertFromSequence();
                  if (!(currInputSchema instanceof SequenceSchema)) {
                      throw new RuntimeException("Cannot convert from sequence: schema is not a sequence schema: "
                              + currInputSchema);
                  }
                  currInputSchema = cfs.transform((SequenceSchema) currInputSchema);
              } else if (d.getSequenceSplit() != null) {
                  continue; //Sequence split -> no change to schema
              } else if (d.getReducer() != null) {
                  IAssociativeReducer reducer = d.getReducer();
                  currInputSchema = reducer.transform(currInputSchema);
              } else if (d.getCalculateSortedRank() != null) {
                  CalculateSortedRank csr = d.getCalculateSortedRank();
                  currInputSchema = csr.transform(currInputSchema);
              } else {
                  throw new RuntimeException("Unknown action: " + d);
              }
              if (i++ == step)
                  return currInputSchema;
          }
          return currInputSchema;
      }
docs: Return the schema after executing all steps up to and including the specified step.
  Steps are indexed from 0: so getSchemaAfterStep(0) is after one transform has been executed.
  
  @param step Index of the step
  @return Schema of the data, after that (and all prior) steps have been executed