code: def testTrainingRangeOp_EmptyListReturned(self):
      # No input model artifact.
      actual = test_utils.run_resolver_op(
          ops.TrainingRange,
          [],
          context=resolver_op.Context(store=self.store),
      )
      self.assertEmpty(actual)
  
      # No executions in MLMD.
      actual = self._training_range([self.model])
      self.assertEmpty(actual)
  
      # Execution in MLMD does not have input Example artifacts.
      self.put_execution(
          "NoInputExamplesTFTrainer",
          inputs={},
          outputs={"model": self.unwrap_tfx_artifacts([self.model])},
      )
      actual = self._training_range([self.model])
      self.assertEmpty(actual)
  
imports: from typing import List
  import tensorflow
  from tfx import types
  from tfx.dsl.input_resolution import resolver_op
  from tfx.dsl.input_resolution.ops import ops
  from tfx.dsl.input_resolution.ops import test_utils
  from tfx.orchestration.portable.input_resolution import exceptions
  from ml_metadata.proto import metadata_store_pb2
label_desc: Use image node_id 8 for calling the TrainingRangeOpTest obj's underlying member method code with example usage: obj.testTrainingRangeOp_EmptyListReturned() without return types