code: def test_empty_rows(self):
      use_log_space = True
      use_start_and_end_states = False
      # [batch, num_tokens, num_states]
      scores = np.array(
          [
              [[10.0, 12.0, 6.0, 4.0], [-13.0, -12.0, -11.0, -10.0]],
              # This batch should be ignored
              [[10.0, 12.0, 6.0, 4.0], [-13.0, -12.0, -11.0, -10.0]],
          ],
          dtype="f",
      )
  
      # [batch] each indicating row size for batch. The second row has no data.
      sequence_length = [2, 0]
  
      # [num_states, num_states]
      allowed_transitions = np.array(
          [
              [True, True, True, True],
              [True, True, True, True],
              [True, False, True, False],
              [True, True, True, True],
          ]
      )
  
      multiple_sequence_op = sequence_op.viterbi_constrained_sequence(
          scores,
          sequence_length,
          allowed_transitions=allowed_transitions,
          use_log_space=use_log_space,
          use_start_and_end_states=use_start_and_end_states,
      )
      multiple_sequence_result = self.evaluate(multiple_sequence_op)
      self.assertAllEqual(multiple_sequence_result, [[1, 3], []])
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import numpy
  from tensorflow.python.framework import test_util
  from tensorflow.python.ops.ragged import ragged_factory_ops
  from tensorflow.python.platform import test
  from tensorflow_text.python.numpy import viterbi_decode
  from tensorflow_text.python.ops import viterbi_constrained_sequence_op
label_desc: Use image node_id 1 for calling the ViterbiConstrainedSequenceOpTest obj's underlying member method code with example usage: obj.test_empty_rows() without return types