code: def test_experiment_with_session_tags_string_domain_and_invalid_number_values(
      self,
  ):
      self.session_1_start_info_ = """
              hparams:[
                {key: 'maybe_invalid' value: {string_value: 'force_to_string_type'}}
              ]
          """
      self.session_2_start_info_ = """
              hparams:[
                {key: 'maybe_invalid' value: {number_value: NaN}}
              ]
          """
      self.session_3_start_info_ = """
              hparams:[
                {key: 'maybe_invalid' value: {number_value: Infinity}}
              ]
          """
      expected_hparam_info = """
              name: 'maybe_invalid'
              type: DATA_TYPE_STRING
              domain_discrete: {
                values: [{string_value: 'force_to_string_type'}]
              }
          """
      actual_exp = self._experiment_from_metadata()
      self.assertLen(actual_exp.hparam_infos, 1)
      self.assertProtoEquals(
          expected_hparam_info, actual_exp.hparam_infos[0]
      )
  
imports: import operator
  from unittest import mock
  import tensorflow
  from google.protobuf import text_format
  from tensorboard import context
  from tensorboard.data import provider
  from tensorboard.plugins import base_plugin
  from tensorboard.plugins.hparams import api_pb2
  from tensorboard.plugins.hparams import backend_context
  from tensorboard.plugins.hparams import metadata
  from tensorboard.plugins.hparams import plugin_data_pb2
label_desc: Use image node_id 12 for calling the BackendContextTest obj's underlying member method code with example usage: obj.test_experiment_with_session_tags_string_domain_and_invalid_number_values() without return types