class_docstr: The Catalog class used to build models for BC.
  
  BCCatalog provides the following models:
      - Encoder: The encoder used to encode the observations.
      - Pi Head: The head used for the policy logits.
  
  The default encoder is chosen by RLlib dependent on the observation space.
  See `ray.rllib.core.models.encoders::Encoder` for details. To define the
  network architecture use the `model_config_dict[fcnet_hiddens]` and
  `model_config_dict[fcnet_activation]`.
  
  To implement custom logic, override `BCCatalog.build_encoder()` or modify the
  `EncoderConfig` at `BCCatalog.encoder_config`.
  
  Any custom head can be built by overriding the `build_pi_head()` method.
  Alternatively, the `PiHeadConfig` can be overridden to build a custom
  policy head during runtime. To change solely the network architecture,
  `model_config_dict["post_fcnet_hiddens"]` and
  `model_config_dict["post_fcnet_activation"]` can be used.
docstr: Initializes the BCCatalog.
  
  Args:
      observation_space: The observation space if the Encoder.
      action_space: The action space for the Pi Head.
      model_cnfig_dict: The model config to use..
docstr_tok: ["Initializes","the","BCCatalog",".","Args",":","observation_space",":","The","observation","space","if","the","Encoder",".","action_space",":","The","action","space","for","the","Pi","Head",".","model_cnfig_dict",":","The","model","config","to","use",".."]
code: def __init__(
      self,
      observation_space: gym.Space,
      action_space: gym.Space,
      model_config_dict: dict,
  ):
      """Initializes the BCCatalog.
  
      Args:
          observation_space: The observation space if the Encoder.
          action_space: The action space for the Pi Head.
          model_cnfig_dict: The model config to use..
      """
      super().__init__(
          observation_space=observation_space,
          action_space=action_space,
          model_config_dict=model_config_dict,
      )
  
      self.pi_head_hiddens = self._model_config_dict[
          "post_fcnet_hiddens"
      ]
      self.pi_head_activation = self._model_config_dict[
          "post_fcnet_activation"
      ]
  
      # At this time we do not have the precise (framework-specific) action
      # distribution class, i.e. we do  not know the output dimension of the
      # policy head. The config for the policy head is therefore build in the
      # `self.build_pi_head()` method.
      self.pi_head_config = None
  
file_path: ray/rllib/algorithms/bc/bc_catalog.py
imports: import gymnasium
  from ray.rllib.algorithms.ppo.ppo_catalog import _check_if_diag_gaussian
  from ray.rllib.core.models.catalog import Catalog
  from ray.rllib.core.models.configs import FreeLogStdMLPHeadConfig, MLPHeadConfig
  from ray.rllib.core.models.base import Model
  from ray.rllib.utils.annotations import OverrideToImplementCustomLogic
label_desc: Use image node_id 1 to create a new BCCatalog object from inherited base classes: Catalog with example: obj = BCCatalog(observation_space, action_space, model_config_dict)