code: def test_experiment_from_data_provider_discrete_string_hparam(self):
      self._hyperparameters = provider.ListHyperparametersResult(
          hyperparameters=[
              provider.Hyperparameter(
                  hyperparameter_name="hparam1_name",
                  hyperparameter_display_name="hparam1_display_name",
                  domain_type=provider.HyperparameterDomainType.DISCRETE_STRING,
                  domain=["one", "two", "aaaa"],
              ),
          ],
          session_groups=[],
      )
      self._mock_tb_context.data_provider.list_tensors.side_effect = (
          None
      )
      actual_exp = self._experiment_from_metadata()
      expected_exp = """
              hparam_infos: {
                name: 'hparam1_name'
                display_name: 'hparam1_display_name'
                type: DATA_TYPE_STRING
                domain_discrete: {
                  values: [
                    {string_value: 'one'},
                    {string_value: 'two'},
                    {string_value: 'aaaa'}
                  ]
                }
              }
          """
      self.assertProtoEquals(expected_exp, actual_exp)
  
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 19 for calling the BackendContextTest obj's underlying member method code with example usage: obj.test_experiment_from_data_provider_discrete_string_hparam() without return types