class_docstr: Distribution over EKF states.  See :class:`~pyro.contrib.tracking.extended_kalman_filter.EKFState`.
  Currently only supports `log_prob`.
  
  :param x0: PV tensor (mean)
  :type x0: torch.Tensor
  :param P0: covariance
  :type P0: torch.Tensor
  :param dynamic_model: :class:`~pyro.contrib.tracking.dynamic_models.DynamicModel` object
  :param measurement_cov: measurement covariance
  :type measurement_cov: torch.Tensor
  :param time_steps: number time step
  :type time_steps: int
  :param dt: time step
  :type dt: torch.Tensor
code: def __init__(
      self,
      x0,
      P0,
      dynamic_model,
      measurement_cov,
      time_steps=1,
      dt=1.0,
      validate_args=None,
  ):
      self.x0 = x0
      self.P0 = P0
      self.dynamic_model = dynamic_model
      self.measurement_cov = measurement_cov
      self.dt = dt
      assert (
          not x0.shape[-1] % 2
      ), "position and velocity vectors must be the same dimension"
      batch_shape = x0.shape[:-1]
      event_shape = (time_steps, x0.shape[-1] // 2)
      super().__init__(
          batch_shape, event_shape, validate_args=validate_args
      )
  
file_path: pyro/pyro/contrib/tracking/distributions.py
imports: import torch
  from torch.distributions import constraints
  import pyro.distributions
  from pyro.contrib.tracking.extended_kalman_filter import EKFState
  from pyro.contrib.tracking.measurements import PositionMeasurement
  from pyro.distributions.torch_distribution import TorchDistribution
label_desc: Use image node_id 1 to create a new EKFDistribution object from inherited base classes: TorchDistribution with example: obj = EKFDistribution(x0, P0, dynamic_model, measurement_cov, time_steps, dt, validate_args)