code: def testPerArmRewardsSparseObs(self, policy_class):
      tf.compat.v1.set_random_seed(3000)
      obs_spec = {
          "global": {"sport": tensor_spec.TensorSpec((), tf.string)},
          "per_arm": {
              "name": tensor_spec.TensorSpec((3,), tf.string),
              "fruit": tensor_spec.TensorSpec((3,), tf.string),
          },
      }
      columns_a = tf.feature_column.indicator_column(
          tf.feature_column.categorical_column_with_vocabulary_list(
              "name", ["bob", "george", "wanda"]
          )
      )
      columns_b = tf.feature_column.indicator_column(
          tf.feature_column.categorical_column_with_vocabulary_list(
              "fruit", ["banana", "kiwi", "pear"]
          )
      )
      columns_c = tf.feature_column.indicator_column(
          tf.feature_column.categorical_column_with_vocabulary_list(
              "sport", ["bridge", "chess", "snooker"]
          )
      )
  
      reward_network = global_and_arm_feature_network.create_feed_forward_common_tower_network(
          observation_spec=obs_spec,
          global_layers=(4, 3, 2),
          arm_layers=(6, 5, 4),
          common_layers=(7, 6, 5),
          global_preprocessing_combiner=(
              tf.compat.v2.keras.layers.DenseFeatures([columns_c])
          ),
          arm_preprocessing_combiner=tf.compat.v2.keras.layers.DenseFeatures(
              [columns_a, columns_b]
          ),
      )
  
      time_step_spec = ts.time_step_spec(obs_spec)
      action_spec = tensor_spec.BoundedTensorSpec((), tf.int32, 0, 2)
      policy = policy_class(
          time_step_spec,
          action_spec,
          reward_network=reward_network,
          accepts_per_arm_features=True,
          emit_policy_info=("predicted_rewards_mean",),
      )
      observations = {
          "global": {"sport": tf.constant(["snooker", "chess"])},
          "per_arm": {
              "name": tf.constant(
                  [
                      ["george", "george", "george"],
                      ["bob", "bob", "bob"],
                  ]
              ),
              "fruit": tf.constant(
                  [
                      ["banana", "banana", "banana"],
                      ["kiwi", "kiwi", "kiwi"],
                  ]
              ),
          },
      }
  
      time_step = ts.restart(observations, batch_size=2)
      action_step = policy.action(time_step, seed=1)
      self.assertEqual(action_step.action.shape.as_list(), [2])
      self.assertEqual(action_step.action.dtype, tf.int32)
      # Initialize all variables
      self.evaluate(
          [
              tf.compat.v1.global_variables_initializer(),
              tf.compat.v1.tables_initializer(),
          ]
      )
      action, p_info, first_arm_name_feature = self.evaluate(
          [
              action_step.action,
              action_step.info,
              observations[bandit_spec_utils.PER_ARM_FEATURE_KEY][
                  "name"
              ][0],
          ]
      )
      self.assertAllEqual(action.shape, [2])
      self.assertAllEqual(p_info.predicted_rewards_mean.shape, [2, 3])
      self.assertAllEqual(p_info.chosen_arm_features["name"].shape, [2])
      self.assertAllEqual(
          p_info.chosen_arm_features["fruit"].shape, [2]
      )
      first_action = action[0]
      self.assertAllEqual(
          p_info.chosen_arm_features["name"][0],
          first_arm_name_feature[first_action],
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import collections
  from absl.testing import parameterized
  import numpy
  import tensorflow
  from tf_agents.bandits.networks import global_and_arm_feature_network
  from tf_agents.bandits.networks import heteroscedastic_q_network
  from tf_agents.bandits.policies import boltzmann_reward_prediction_policy
  from tf_agents.bandits.policies import constraints
  from tf_agents.bandits.policies import falcon_reward_prediction_policy
  from tf_agents.bandits.policies import greedy_reward_prediction_policy
  from tf_agents.bandits.specs import utils
  from tf_agents.networks import network
  from tf_agents.specs import array_spec
  from tf_agents.specs import tensor_spec
  from tf_agents.trajectories import time_step
  from tf_agents.utils import test_utils
  from tensorflow.python.framework import test_util
label_desc: Use image node_id 14 for calling the RewardPredictionPoliciesTest obj's underlying member method code with example usage: obj.testPerArmRewardsSparseObs(policy_class) without return types