code: def testConsecutiveSpans_FirstSpan(self):
      artifacts = (
          self._get_artifacts_for_sequential_rolling_range_tests()
      )
      a10, a20, a31, a30, a40, a50, _, _ = artifacts
  
      actual = self._consecutive_spans(artifacts, first_span=1)
      self.assertEqual(actual, [a10, a20, a31, a40, a50])
  
      actual = self._consecutive_spans(artifacts, first_span=2)
      self.assertEqual(actual, [a20, a31, a40, a50])
  
      actual = self._consecutive_spans(artifacts, first_span=3)
      self.assertEqual(actual, [a31, a40, a50])
  
      actual = self._consecutive_spans(artifacts, first_span=4)
      self.assertEqual(actual, [a40, a50])
  
      actual = self._consecutive_spans(artifacts, first_span=5)
      self.assertEqual(actual, [a50])
  
      # first_span=6 is greater than the largest spans availble (5), so an invalid
      # [6, 5] is created and no artifacts are returned.
      actual = self._consecutive_spans(artifacts, first_span=6)
      self.assertEqual(actual, [])
  
      # Tests version conflicts when keep_all_versions=True.
      actual = self._consecutive_spans(
          artifacts, first_span=3, keep_all_versions=True
      )
      self.assertEqual(actual, [a30, a31, a40, a50])
  
      actual = self._consecutive_spans(
          artifacts, first_span=4, keep_all_versions=True
      )
      self.assertEqual(actual, [a40, a50])
  
imports: from typing import Sequence
  import tensorflow
  from tfx import types
  from tfx.dsl.input_resolution.ops import ops
  from tfx.dsl.input_resolution.ops import test_utils
  from tfx.types import artifact
label_desc: Use image node_id 9 for calling the ConsecutiveSpansOpTest obj's underlying member method code with example usage: obj.testConsecutiveSpans_FirstSpan() without return types