class_docstr: Implementation of Periodic kernel:
  
      :math:`k(x,z)=\sigma^2\exp\left(-2\times\frac{\sin^2(\pi(x-z)/p)}{l^2}\right),`
  
  where :math:`p` is the ``period`` parameter.
  
  References:
  
  [1] `Introduction to Gaussian processes`,
  David J.C. MacKay
  
  :param torch.Tensor lengthscale: Length scale parameter of this kernel.
  :param torch.Tensor period: Period parameter of this kernel.
code: def __init__(
      self,
      input_dim,
      variance=None,
      lengthscale=None,
      period=None,
      active_dims=None,
  ):
      super().__init__(input_dim, active_dims)
  
      variance = torch.tensor(1.0) if variance is None else variance
      self.variance = PyroParam(variance, constraints.positive)
  
      lengthscale = (
          torch.tensor(1.0) if lengthscale is None else lengthscale
      )
      self.lengthscale = PyroParam(lengthscale, constraints.positive)
  
      period = torch.tensor(1.0) if period is None else period
      self.period = PyroParam(period, constraints.positive)
  
file_path: pyro/pyro/contrib/gp/kernels/periodic.py
imports: import math
  import torch
  from torch.distributions import constraints
  from pyro.contrib.gp.kernels.isotropic import Isotropy
  from pyro.contrib.gp.kernels.kernel import Kernel
  from pyro.nn.module import PyroParam
label_desc: Use image node_id 1 to create a new Periodic object from inherited base classes: Kernel with example: obj = Periodic(input_dim, variance, lengthscale, period, active_dims)