class_docstr: Stationary Stochastic Bandit environment with per-arm features.
class_docstr_tok: ["Stationary","Stochastic","Bandit","environment","with","per-arm","features","."]
code: def _observe(self) -> types.NestedArray:
      global_obs = np.stack(
          [self._global_sampling_fn() for _ in range(self._batch_size)]
      )
      item_obs = np.reshape(
          [
              self._item_sampling_fn()
              for _ in range(self._batch_size * self._num_items)
          ],
          (self._batch_size, self._num_items, -1),
      )
      self._observation = {
          GLOBAL_KEY: global_obs,
          PER_ARM_KEY: item_obs,
      }
      return self._observation
  
imports: from typing import Callable, Optional, Sequence, Text
  import numpy
  import tensorflow
  from tf_agents.bandits.environments import bandit_py_environment
  from tf_agents.bandits.specs import utils
  from tf_agents.specs import array_spec
  from tf_agents.trajectories import time_step
  from tf_agents.typing import types
label_desc: Use image node_id 4 for calling the RankingPyEnvironment obj's underlying member method code with example usage: obj._observe() and returns: self