class_docstr: Parametric action model that handles the dot product and masking.
  
  This assumes the outputs are logits for a single Categorical action dist.
  Getting this to work with a more complex output (e.g., if the action space
  is a tuple of several distributions) is also possible but left as an
  exercise to the reader.
code: def __init__(
      self,
      obs_space,
      action_space,
      num_outputs,
      model_config,
      name,
      true_obs_shape=(4,),
      action_embed_size=2,
      **kw,
  ):
      super(ParametricActionsModel, self).__init__(
          obs_space, action_space, num_outputs, model_config, name, **kw
      )
      self.action_embed_model = FullyConnectedNetwork(
          Box(-1, 1, shape=true_obs_shape),
          action_space,
          action_embed_size,
          model_config,
          name + "_action_embed",
      )
  
imports: from gymnasium.spaces import Box
  from ray.rllib.algorithms.dqn.distributional_q_tf_model import DistributionalQTFModel
  from ray.rllib.algorithms.dqn.dqn_torch_model import DQNTorchModel
  from ray.rllib.models.tf.fcnet import FullyConnectedNetwork
  from ray.rllib.models.torch.fcnet import FullyConnectedNetwork
  from ray.rllib.utils.framework import try_import_tf, try_import_torch
  from ray.rllib.utils.torch_utils import FLOAT_MAX, FLOAT_MIN
label_desc: Use image node_id 1 to create a new ParametricActionsModel object from inherited base classes: DistributionalQTFModel with example: obj = ParametricActionsModel(obs_space, action_space, num_outputs, model_config, name, true_obs_shape, action_embed_size)