code: def order_transforms(transforms):
      
      # get a set of all inputs and all outputs
      outputs = set().union(*[t.outputs for t in transforms])
      out = []
      remaining = [t for t in transforms]
      while remaining:
          # pull out transforms that have no inputs in the set of outputs
          leftover = []
          for t in remaining:
              if t.inputs.isdisjoint(outputs):
                  out.append(t)
                  outputs -= t.outputs
              else:
                  leftover.append(t)
          remaining = leftover
      return out
docs: Orders transforms to ensure proper chaining.
  
      For example, if `transforms = [B, A, C]`, and `A` produces outputs needed
      by `B`, the transforms will be re-rorderd to `[A, B, C]`.
  
      Parameters
      ----------
      transforms : list
          List of transform instances to order.
  
      Outputs
      -------
      list :
          List of transformed ordered such that forward transforms can be carried
          out without error.