class_docstr: MultiCategorical distribution for MultiDiscrete action spaces.
class_docstr_tok: ["MultiCategorical","distribution","for","MultiDiscrete","action","spaces","."]
code: def logp(self, value: torch.Tensor) -> TensorType:
      value = torch.unbind(value, dim=-1)
      logps = torch.stack(
          [cat.logp(act) for cat, act in zip(self._cats, value)]
      )
      return torch.sum(logps, dim=0)
  
imports: import gymnasium
  import numpy
  from typing import Optional, List, Mapping, Iterable, Dict
  import tree
  import abc
  from ray.rllib.models.distributions import Distribution
  from ray.rllib.utils.annotations import override, DeveloperAPI
  from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.typing import TensorType, Union, Tuple
label_desc: Use image node_id 4 for calling the TorchMultiCategorical obj's underlying member method code with example usage: obj.logp(value) and returns: torch