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
docstr: Returns the ekf states given measurements
  
  :param value: measurement means of shape `(time_steps, event_shape)`
  :type value: torch.Tensor
code: def filter_states(self, value):
      """
      Returns the ekf states given measurements
  
      :param value: measurement means of shape `(time_steps, event_shape)`
      :type value: torch.Tensor
      """
      states = []
      state = EKFState(self.dynamic_model, self.x0, self.P0, time=0.0)
      assert value.shape[-1] == self.event_shape[-1]
      for i, measurement_mean in enumerate(value):
          if i:
              state = state.predict(self.dt)
          measurement = PositionMeasurement(
              measurement_mean, self.measurement_cov, time=state.time
          )
          state, (dz, S) = state.update(measurement)
          states.append(state)
      return states
  
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 3 for calling the EKFDistribution obj's underlying member method code with example usage: obj.filter_states(value) and returns: states