class_docstr: A time series model in which each output dimension is modeled as a univariate Gaussian Process
  with a Matern kernel. The different output dimensions become correlated because the Gaussian
  Processes are driven by a correlated Wiener process; see reference [1] for details.
  If, in addition, `linearly_coupled` is True, additional correlation is achieved through
  linear mixing as in :class:`LinearlyCoupledMaternGP`. The targets are assumed to be evenly
  spaced in time. Training and inference are logarithmic in the length of the time series T.
  
  :param float nu: The order of the Matern kernel; must be 1.5.
  :param float dt: The time spacing between neighboring observations of the time series.
  :param int obs_dim: The dimension of the targets at each time step.
  :param bool linearly_coupled: Whether to linearly mix the various gaussian processes in the likelihood.
      Defaults to False.
  :param torch.Tensor length_scale_init: optional initial values for the kernel length scale
      given as a ``obs_dim``-dimensional tensor
  :param torch.Tensor obs_noise_scale_init: optional initial values for the observation noise scale
      given as a ``obs_dim``-dimensional tensor
  
  References
  [1] "Dependent Matern Processes for Multivariate Time Series," Alexander Vandenberg-Rodes, Babak Shahbaba.
class_docstr_tok: ["A","time","series","model","in","which","each","output","dimension","is","modeled","as","a","univariate","Gaussian","Process","with","a","Matern","kernel",".","The","different","output","dimensions","become","correlated","because","the","Gaussian","Processes","are","driven","by","a","correlated","Wiener","process",";","see","reference","[","1","]","for","details",".","If",",","in","addition",",","`","linearly_coupled","`","is","True",",","additional","correlation","is","achieved","through","linear","mixing","as","in",":","class",":","`","LinearlyCoupledMaternGP","`",".","The","targets","are","assumed","to","be","evenly","spaced","in","time",".","Training","and","inference","are","logarithmic","in","the","length","of","the","time","series","T.",":","param","float","nu",":","The","order","of","the","Matern","kernel",";","must","be","1.5.",":","param","float","dt",":","The","time","spacing","between","neighboring","observations","of","the","time","series",".",":","param","int","obs_dim",":","The","dimension","of","the","targets","at","each","time","step",".",":","param","bool","linearly_coupled",":","Whether","to","linearly","mix","the","various","gaussian","processes","in","the","likelihood",".","Defaults","to","False",".",":","param","torch.Tensor","length_scale_init",":","optional","initial","values","for","the","kernel","length","scale","given","as","a","``","obs_dim","``","-dimensional","tensor",":","param","torch.Tensor","obs_noise_scale_init",":","optional","initial","values","for","the","observation","noise","scale","given","as","a","``","obs_dim","``","-dimensional","tensor","References","[","1","]","``","Dependent","Matern","Processes","for","Multivariate","Time","Series",",","''","Alexander","Vandenberg-Rodes",",","Babak","Shahbaba","."]
docstr: :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets
      of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim``
      is the dimension of the real-valued targets at each time step. These
      represent the training data that are conditioned on for the purpose of making
      forecasts.
  :param torch.Tensor dts: A 1-dimensional tensor of times to forecast into the future,
      with zero corresponding to the time of the final target ``targets[-1]``.
  :returns torch.distributions.MultivariateNormal: Returns a predictive MultivariateNormal
      distribution with batch shape ``(S,)`` and event shape ``(obs_dim,)``, where ``S`` is the size of ``dts``.
docstr_tok: [":","param","torch.Tensor","targets",":","A","2-dimensional","tensor","of","real-valued","targets","of","shape","``","(","T",",","obs_dim",")","``",",","where","``","T","``","is","the","length","of","the","time","series","and","``","obs_dim","``","is","the","dimension","of","the","real-valued","targets","at","each","time","step",".","These","represent","the","training","data","that","are","conditioned","on","for","the","purpose","of","making","forecasts",".",":","param","torch.Tensor","dts",":","A","1-dimensional","tensor","of","times","to","forecast","into","the","future",",","with","zero","corresponding","to","the","time","of","the","final","target","``","targets","[","-1","]","``",".",":","returns","torch.distributions.MultivariateNormal",":","Returns","a","predictive","MultivariateNormal","distribution","with","batch","shape","``","(","S",",",")","``","and","event","shape","``","(","obs_dim",",",")","``",",","where","``","S","``","is","the","size","of","``","dts","``","."]
code: def forecast(self, targets, dts):
      """
      :param torch.Tensor targets: A 2-dimensional tensor of real-valued targets
          of shape ``(T, obs_dim)``, where ``T`` is the length of the time series and ``obs_dim``
          is the dimension of the real-valued targets at each time step. These
          represent the training data that are conditioned on for the purpose of making
          forecasts.
      :param torch.Tensor dts: A 1-dimensional tensor of times to forecast into the future,
          with zero corresponding to the time of the final target ``targets[-1]``.
      :returns torch.distributions.MultivariateNormal: Returns a predictive MultivariateNormal
          distribution with batch shape ``(S,)`` and event shape ``(obs_dim,)``, where ``S`` is the size of ``dts``.
      """
      filtering_state = self._filter(targets)
      predicted_mean, predicted_covar = self._forecast(
          dts, filtering_state
      )
      return MultivariateNormal(predicted_mean, predicted_covar)
  
imports: import math
  import torch
  import torch.nn
  from torch.distributions import MultivariateNormal, constraints
  import pyro.distributions
  from pyro.contrib.timeseries.base import TimeSeriesModel
  from pyro.nn import PyroParam, pyro_method
  from pyro.ops.ssm_gp import MaternKernel
  from pyro.ops.tensor_utils import block_diag_embed
label_desc: Use image node_id 13 for calling the DependentMaternGP obj's underlying member method code with example usage: obj.forecast(targets, dts) and returns: MultivariateNormal