code: def testSpanDrivenEvaluatorInputs_AdditionalSpansPerEval(self):
      actual = self._span_driven_evaluator(
          self.models,
          self.examples,
          additional_spans_per_eval=0,
      )
      expected = {
          ops_utils.MODEL_KEY: [self.model_5],
          ops_utils.EXAMPLES_KEY: [self.examples_10],
      }
      self.assertArtifactMapsEqual(actual, expected)
  
      actual = self._span_driven_evaluator(
          self.models,
          self.examples,
          additional_spans_per_eval=1,
      )
      expected = {
          ops_utils.MODEL_KEY: [self.model_5],
          ops_utils.EXAMPLES_KEY: [self.examples_9, self.examples_10],
      }
      self.assertArtifactMapsEqual(actual, expected)
  
      actual = self._span_driven_evaluator(
          self.models,
          self.examples,
          additional_spans_per_eval=2,
      )
      expected = {
          ops_utils.MODEL_KEY: [self.model_5],
          ops_utils.EXAMPLES_KEY: [
              self.examples_8,
              self.examples_9,
              self.examples_10,
          ],
      }
      self.assertArtifactMapsEqual(actual, expected)
  
      # start_span will be 10 - 4 = 6 and Model 4 is the latest model not trained
      # on span 6.
      actual = self._span_driven_evaluator(
          self.models,
          self.examples,
          additional_spans_per_eval=4,
      )
      expected = {
          ops_utils.MODEL_KEY: [self.model_4],
          ops_utils.EXAMPLES_KEY: [
              self.examples_6,
              self.examples_7,
              self.examples_8,
              self.examples_9,
              self.examples_10,
          ],
      }
      self.assertArtifactMapsEqual(actual, expected)
  
      with self.assertRaises(exceptions.SkipSignal):
          # start_span will be 10 - 8 = 2 and no model was trained on a span < 2.
          actual = self._span_driven_evaluator(
              self.models,
              self.examples,
              additional_spans_per_eval=8,
          )
  
          # start_span will be < 1
          actual = self._span_driven_evaluator(
              self.models,
              self.examples,
              additional_spans_per_eval=50,
          )
  
imports: from typing import List, Optional
  import tensorflow
  from tfx import types
  from tfx.dsl.input_resolution.ops import ops
  from tfx.dsl.input_resolution.ops import ops_utils
  from tfx.dsl.input_resolution.ops import test_utils
  from tfx.orchestration.portable.input_resolution import exceptions
label_desc: Use image node_id 9 for calling the SpanDrivenEvaluatorInputsOpTest obj's underlying member method code with example usage: obj.testSpanDrivenEvaluatorInputs_AdditionalSpansPerEval() without return types