class_docstr: The Catalog class used to build models for PPO.
  
  PPOCatalog provides the following models:
      - ActorCriticEncoder: The encoder used to encode the observations.
      - Pi Head: The head used to compute the policy logits.
      - Value Function Head: The head used to compute the value function.
  
  The ActorCriticEncoder is a wrapper around Encoders to produce separate outputs
  for the policy and value function. See implementations of PPORLModule for
  more details.
  
  Any custom ActorCriticEncoder can be built by overriding the
  build_actor_critic_encoder() method. Alternatively, the ActorCriticEncoderConfig
  at PPOCatalog.actor_critic_encoder_config can be overridden to build a custom
  ActorCriticEncoder during RLModule runtime.
  
  Any custom head can be built by overriding the build_pi_head() and build_vf_head()
  methods. Alternatively, the PiHeadConfig and VfHeadConfig can be overridden to
  build custom heads during RLModule runtime.
class_docstr_tok: ["The","Catalog","class","used","to","build","models","for","PPO",".","PPOCatalog","provides","the","following","models",":","-","ActorCriticEncoder",":","The","encoder","used","to","encode","the","observations",".","-","Pi","Head",":","The","head","used","to","compute","the","policy","logits",".","-","Value","Function","Head",":","The","head","used","to","compute","the","value","function",".","The","ActorCriticEncoder","is","a","wrapper","around","Encoders","to","produce","separate","outputs","for","the","policy","and","value","function",".","See","implementations","of","PPORLModule","for","more","details",".","Any","custom","ActorCriticEncoder","can","be","built","by","overriding","the","build_actor_critic_encoder","(",")","method",".","Alternatively",",","the","ActorCriticEncoderConfig","at","PPOCatalog.actor_critic_encoder_config","can","be","overridden","to","build","a","custom","ActorCriticEncoder","during","RLModule","runtime",".","Any","custom","head","can","be","built","by","overriding","the","build_pi_head","(",")","and","build_vf_head","(",")","methods",".","Alternatively",",","the","PiHeadConfig","and","VfHeadConfig","can","be","overridden","to","build","custom","heads","during","RLModule","runtime","."]
docstr: Builds the encoder.
  
  Since PPO uses an ActorCriticEncoder, this method should not be implemented.
docstr_tok: ["Builds","the","encoder",".","Since","PPO","uses","an","ActorCriticEncoder",",","this","method","should","not","be","implemented","."]
code: def build_encoder(self, framework: str) -> Encoder:
      """Builds the encoder.
  
      Since PPO uses an ActorCriticEncoder, this method should not be implemented.
      """
      raise NotImplementedError(
          "Use PPOCatalog.build_actor_critic_encoder() instead for PPO."
      )
  
file_path: ray/rllib/algorithms/ppo/ppo_catalog.py
imports: import gymnasium
  from ray.rllib.core.models.catalog import Catalog
  from ray.rllib.core.models.configs import ActorCriticEncoderConfig, MLPHeadConfig, FreeLogStdMLPHeadConfig
  from ray.rllib.core.models.base import Encoder, ActorCriticEncoder, Model
  from ray.rllib.utils import override
  from ray.rllib.utils.annotations import OverrideToImplementCustomLogic
label_desc: Use image node_id 3 for calling the PPOCatalog obj's underlying member method code with example usage: obj.build_encoder(framework) without return types