docstr: Distribution object for Multivariate Normal. Works with batches. 
  Optionally works with batches and time steps, but be consistent in usage: i.e. if using time_step,
  mean, sigma and data for log_prob must all include a time_step dimension.
  
  :param num_var: number of variables in distribution
  :param mean: mean for each variable,
      of shape (num_var) or
      of shape (batch_size, num_var) or
      of shape (batch_size, time_step, num_var).
  :param sigma: covariance matrix,
      of shape (num_var, num_var) or
      of shape (batch_size, num_var, num_var) or
      of shape (batch_size, time_step, num_var, num_var).
  :param (mx.nd or mx.sym) F: backend api (mx.sym if block has been hybridized).
docstr_tok: ["Distribution","object","for","Multivariate","Normal",".","Works","with","batches",".","Optionally","works","with","batches","and","time","steps",",","but","be","consistent","in","usage",":","i.e",".","if","using","time_step",",","mean",",","sigma","and","data","for","log_prob","must","all","include","a","time_step","dimension",".",":","param","num_var",":","number","of","variables","in","distribution",":","param","mean",":","mean","for","each","variable",",","of","shape","(","num_var",")","or","of","shape","(","batch_size",",","num_var",")","or","of","shape","(","batch_size",",","time_step",",","num_var",")",".",":","param","sigma",":","covariance","matrix",",","of","shape","(","num_var",",","num_var",")","or","of","shape","(","batch_size",",","num_var",",","num_var",")","or","of","shape","(","batch_size",",","time_step",",","num_var",",","num_var",")",".",":","param","(","mx.nd","or","mx.sym",")","F",":","backend","api","(","mx.sym","if","block","has","been","hybridized",")","."]
code: def __init__(
      self,
      num_var: int,
      mean: nd_sym_type,
      sigma: nd_sym_type,
      F: ModuleType = mx.nd,
  ) -> None:
      """
      Distribution object for Multivariate Normal. Works with batches.
      Optionally works with batches and time steps, but be consistent in usage: i.e. if using time_step,
      mean, sigma and data for log_prob must all include a time_step dimension.
  
      :param num_var: number of variables in distribution
      :param mean: mean for each variable,
          of shape (num_var) or
          of shape (batch_size, num_var) or
          of shape (batch_size, time_step, num_var).
      :param sigma: covariance matrix,
          of shape (num_var, num_var) or
          of shape (batch_size, num_var, num_var) or
          of shape (batch_size, time_step, num_var, num_var).
      :param (mx.nd or mx.sym) F: backend api (mx.sym if block has been hybridized).
      """
      self.num_var = num_var
      self.mean = mean
      self.sigma = sigma
      self.F = F
  
imports: from typing import List, Tuple, Union
  from types import ModuleType
  import math
  import mxnet
  from mxnet.gluon import nn
  from rl_coach.base_parameters import AgentParameters
  from rl_coach.core_types import ActionProbabilities
  from rl_coach.spaces import SpacesDefinition, BoxActionSpace, DiscreteActionSpace
  from rl_coach.utils import eps
  from rl_coach.architectures.mxnet_components.heads.head import Head, HeadLoss, LossInputSchema, NormalizedRSSInitializer
  from rl_coach.architectures.mxnet_components.heads.head import LOSS_OUT_TYPE_LOSS, LOSS_OUT_TYPE_REGULARIZATION
  from rl_coach.architectures.mxnet_components.utils import hybrid_clip, broadcast_like
label_desc: Use image node_id 1 to create a new MultivariateNormalDist object  with example: obj = MultivariateNormalDist(num_var, mean, sigma, F)