code: def test_connector_pipeline(self):
      ctx = ConnectorContext()
      connectors = [ClipRewardAgentConnector(ctx, False, 1.0)]
      pipeline = AgentConnectorPipeline(ctx, connectors)
      name, params = pipeline.to_state()
      restored = get_connector(name, ctx, params)
      self.assertTrue(isinstance(restored, AgentConnectorPipeline))
      self.assertTrue(
          isinstance(restored.connectors[0], ClipRewardAgentConnector)
      )
  
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 1 for calling the TestAgentConnector obj's underlying member method code with example usage: obj.test_connector_pipeline() without return types