docstr: Tests that the connector respects the flags within view_requirements (i.e.
  used_for_training, used_for_compute_actions).
  
  the returned data is the input dict itself, which the policy collector in
  env_runner will use to construct the episode, and a SampleBatch that can be
  used to run corresponding policy.
docstr_tok: ["Tests","that","the","connector","respects","the","flags","within","view_requirements","(","i.e",".","used_for_training",",","used_for_compute_actions",")",".","the","returned","data","is","the","input","dict","itself",",","which","the","policy","collector","in","env_runner","will","use","to","construct","the","episode",",","and","a","SampleBatch","that","can","be","used","to","run","corresponding","policy","."]
code: def test_vr_connector_only_keeps_useful_timesteps(self):
      """Tests that the connector respects the flags within view_requirements (i.e.
      used_for_training, used_for_compute_actions).
  
      the returned data is the input dict itself, which the policy collector in
      env_runner will use to construct the episode, and a SampleBatch that can be
      used to run corresponding policy.
      """
      view_rqs = {
          "obs": ViewRequirement(
              None,
              used_for_training=True,
              used_for_compute_actions=True,
          ),
      }
  
      config = PPOConfig().to_dict()
      ctx = ConnectorContext(
          view_requirements=view_rqs,
          config=config,
          is_policy_recurrent=False,
      )
  
      c = ViewRequirementAgentConnector(ctx)
      c.in_training()
  
      for i in range(5):
          obs_arr = np.array([0, 1, 2, 3]) + i
          agent_data = {SampleBatch.NEXT_OBS: obs_arr}
          data = AgentConnectorDataType(0, 1, agent_data)
  
          # Feed ViewRequirementAgentConnector 5 samples.
          c([data])
  
      obs_data = c.agent_collectors[0][1].buffers["obs"][0]
      # Only keep data for the last timestep.
      self.assertEqual(len(obs_data), 1)
      # Data matches the latest timestep.
      self.assertTrue(
          np.array_equal(obs_data[0], np.array([4, 5, 6, 7]))
      )
  
imports: import gymnasium
  from gymnasium.spaces import Box
  import numpy
  import tree
  import unittest
  from ray.rllib.algorithms.ppo.ppo import PPOConfig
  from ray.rllib.connectors.agent.clip_reward import ClipRewardAgentConnector
  from ray.rllib.connectors.agent.lambdas import FlattenDataAgentConnector
  from ray.rllib.connectors.agent.obs_preproc import ObsPreprocessorConnector
  from ray.rllib.connectors.agent.pipeline import AgentConnectorPipeline
  from ray.rllib.connectors.agent.state_buffer import StateBufferConnector
  from ray.rllib.connectors.agent.view_requirement import ViewRequirementAgentConnector
  from ray.rllib.connectors.connector import ConnectorContext
  from ray.rllib.connectors.registry import get_connector
  from ray.rllib.policy.view_requirement import ViewRequirement
  from ray.rllib.policy.sample_batch import SampleBatch
  from ray.rllib.utils.test_utils import check
  from ray.rllib.utils.typing import ActionConnectorDataType, AgentConnectorDataType, AgentConnectorsOutput
  from ray.rllib.connectors.agent.mean_std_filter import MeanStdObservationFilterAgentConnector
label_desc: Use image node_id 6 for calling the TestViewRequirementAgentConnector obj's underlying member method code with example usage: obj.test_vr_connector_only_keeps_useful_timesteps() without return types