def forward(self, x: torch.FloatTensor) -> Tuple[(torch.FloatTensor, torch.FloatTensor, torch.FloatTensor, torch.FloatTensor)]:
    'Returns the learned paremters of the distribution.\n\n        Parameters\n        ----------\n        x : torch.FloatTensor\n            Input state tensor.\n\n        Returns\n        -------\n        Tuple[torch.FloatTensor, torch.FloatTensor, torch.FloatTensor, torch.FloatTensor]\n            Distribution mean (mu), Distribution standard deviation (sigma),\n            Logits for the categorical distribution parameterizing the components (log_coeffs),\n            State value estimate (V_hat).\n        '
    x = self.trunk(x)
    V_hat = self.value_head(x)
    mixture_params = self.dist_head(x)
    dist_params = mixture_params[..., :((self.num_components * 2) * self.action_dim)].view(x.shape[0], (- 1))
    log_coeff = mixture_params[..., (- self.num_components):]
    (mu, log_std) = dist_params.chunk(2, dim=(- 1))
    log_std = torch.clamp(log_std, min=self.log_param_min, max=self.log_param_max)
    sigma = log_std.exp()
    return (mu, sigma, log_coeff, V_hat)
Returns the learned paremters of the distribution.

Parameters
----------
x : torch.FloatTensor
    Input state tensor.

Returns
-------
Tuple[torch.FloatTensor, torch.FloatTensor, torch.FloatTensor, torch.FloatTensor]
    Distribution mean (mu), Distribution standard deviation (sigma),
    Logits for the categorical distribution parameterizing the components (log_coeffs),
    State value estimate (V_hat).
def forward(self, x: torch.FloatTensor) -> Tuple[(torch.FloatTensor, torch.FloatTensor, torch.FloatTensor, torch.FloatTensor)]:
    'Returns the learned paremters of the distribution.\n\n        Parameters\n        ----------\n        x : torch.FloatTensor\n            Input state tensor.\n\n        Returns\n        -------\n        Tuple[torch.FloatTensor, torch.FloatTensor, torch.FloatTensor, torch.FloatTensor]\n            Distribution mean (mu), Distribution standard deviation (sigma),\n            Logits for the categorical distribution parameterizing the components (log_coeffs),\n            State value estimate (V_hat).\n        '
    x = self.trunk(x)
    V_hat = self.value_head(x)
    mixture_params = self.dist_head(x)
    dist_params = mixture_params[..., :((self.num_components * 2) * self.action_dim)].view(x.shape[0], (- 1))
    log_coeff = mixture_params[..., (- self.num_components):]
    (mu, log_std) = dist_params.chunk(2, dim=(- 1))
    log_std = torch.clamp(log_std, min=self.log_param_min, max=self.log_param_max)
    sigma = log_std.exp()
    return (mu, sigma, log_coeff, V_hat)