class_docstr: NCV (Nearly-Constant Velocity) dynamic model. May be subclassed, e.g., with
  CWNA (Continuous White Noise Acceleration) or DWNA (Discrete White Noise
  Acceleration).
  
  :param dimension: native state dimension.
  :param sa2: variance of acceleration. Usually chosen so that the standard
        deviation is roughly half of the max acceleration one would ever
        expect to observe.
class_docstr_tok: ["NCV","(","Nearly-Constant","Velocity",")","dynamic","model",".","May","be","subclassed",",","e.g.",",","with","CWNA","(","Continuous","White","Noise","Acceleration",")","or","DWNA","(","Discrete","White","Noise","Acceleration",")",".",":","param","dimension",":","native","state","dimension",".",":","param","sa2",":","variance","of","acceleration",".","Usually","chosen","so","that","the","standard","deviation","is","roughly","half","of","the","max","acceleration","one","would","ever","expect","to","observe","."]
code: def __init__(self, dimension, sa2):
      dimension_pv = dimension
      super().__init__(
          dimension, dimension_pv, num_process_noise_parameters=1
      )
      if not isinstance(sa2, torch.Tensor):
          sa2 = torch.tensor(sa2)
      self.sa2 = Parameter(sa2)
      self._F_cache = {}  # State transition matrix cache
      self._Q_cache = {}
  
imports: from abc import ABCMeta, abstractmethod
  import torch
  from torch import nn
  from torch.nn import Parameter
  import pyro.distributions
  from pyro.distributions.util import eye_like
label_desc: Use image node_id 1 to create a new Ncv object from inherited base classes: DifferentiableDynamicModel with example: obj = Ncv(dimension, sa2)