class_docstr: Unnest operator.
  
  Unnest operator split a *`key` channel* of multiple artifacts into multiple
  dicts each with a channel with single artifact. Pseudo code example:
  
      Unnest({x: [x1, x2, x3]}, key=x)
        = [{x: [x1]}, {x: [x2]}, {x: [x3]}]
  
  For channels other than key channel remains the same. Pseudo code example:
  
      Unnest({x: [x1, x2, x3], y: [y1]}, key=x)
        = [{x: [x1], y: [y1]}, {x: [x2], y: [y1]}, {x: [x3], y: [y1]}]
class_docstr_tok: ["Unnest","operator",".","Unnest","operator","split","a","*","`","key","`","channel","*","of","multiple","artifacts","into","multiple","dicts","each","with","a","channel","with","single","artifact",".","Pseudo","code","example",":","Unnest","(","{","x",":","[","x1",",","x2",",","x3","]","}",",","key=x",")","=","[","{","x",":","[","x1","]","}",",","{","x",":","[","x2","]","}",",","{","x",":","[","x3","]","}","]","For","channels","other","than","key","channel","remains","the","same",".","Pseudo","code","example",":","Unnest","(","{","x",":","[","x1",",","x2",",","x3","]",",","y",":","[","y1","]","}",",","key=x",")","=","[","{","x",":","[","x1","]",",","y",":","[","y1","]","}",",","{","x",":","[","x2","]",",","y",":","[","y1","]","}",",","{","x",":","[","x3","]",",","y",":","[","y1","]","}","]"]
code: def apply(self, input_dict: typing_utils.ArtifactMultiMap):
      if self.key not in input_dict:
          raise exceptions.FailedPreconditionError(
              f"Input dict does not contain the key {self.key}. "
              f"Available: {list(input_dict.keys())}"
          )
  
      main_channel = input_dict.get(self.key)
      rest = {k: v for k, v in input_dict.items() if k != self.key}
      result = []
      for main_artifact in main_channel:
          result.append({self.key: [main_artifact], **rest})
      return result
  
imports: from tfx.dsl.input_resolution import resolver_op
  from tfx.orchestration.portable.input_resolution import exceptions
  from tfx.utils import typing_utils
label_desc: Use image node_id 1 for calling the Unnest obj's underlying member method code with example usage: obj.apply(input_dict) and returns: result