class_docstr: Base class for all Gaussian Process estimators.
  
  Most notably, a GPyTorch compatible criterion and likelihood should be
  provided.
class_docstr_tok: ["Base","class","for","all","Gaussian","Process","estimators",".","Most","notably",",","a","GPyTorch","compatible","criterion","and","likelihood","should","be","provided","."]
docstr: Gather and concatenate the output from forward call with
  input data.
  
  The outputs from ``self.module_.forward`` are gathered on the
  compute device specified by ``device`` and then concatenated
  using PyTorch :func:`~torch.cat`. If multiple outputs are
  returned by ``self.module_.forward``, each one of them must be
  able to be concatenated this way.
  
  Notes
  -----
  For Gaussian Process modules, the return value of the module is a
  distribution. These distributions are collected in a list (which may
  only contain a single element if just one batch was used). Distributions
  *cannot* be concatenated. Therefore, this method will just return the
  list of distributions.
  
  Parameters
  ----------
  X : input data, compatible with skorch.dataset.Dataset
    By default, you should be able to pass:
  
      * numpy arrays
      * torch tensors
      * pandas DataFrame or Series
      * scipy sparse CSR matrices
      * a dictionary of the former three
      * a list/tuple of the former three
      * a Dataset
  
    If this doesn't work with your data, you have to pass a
    ``Dataset`` that can deal with the data.
  
  training : bool (default=False)
    Whether to set the module to train mode or not.
  
  device : string (default='cpu')
    The device to store each inference result on.
    This defaults to CPU memory since there is genereally
    more memory available there. For performance reasons
    this might be changed to a specific CUDA device,
    e.g. 'cuda:0'.
  
  Returns
  -------
  y_infer : list of gpytorch.distributions.Distribution
    A list of distributions as generated by the module. The number of
    elements in this list will depend on the sample size of X and the
    batch size of the estimator.
docstr_tok: ["Gather","and","concatenate","the","output","from","forward","call","with","input","data",".","The","outputs","from","``","self.module_.forward","``","are","gathered","on","the","compute","device","specified","by","``","device","``","and","then","concatenated","using","PyTorch",":","func",":","`","~torch.cat","`",".","If","multiple","outputs","are","returned","by","``","self.module_.forward","``",",","each","one","of","them","must","be","able","to","be","concatenated","this","way",".","Notes","--","--","-","For","Gaussian","Process","modules",",","the","return","value","of","the","module","is","a","distribution",".","These","distributions","are","collected","in","a","list","(","which","may","only","contain","a","single","element","if","just","one","batch","was","used",")",".","Distributions","*","can","not","*","be","concatenated",".","Therefore",",","this","method","will","just","return","the","list","of","distributions",".","Parameters","--","--","--","--","--","X",":","input","data",",","compatible","with","skorch.dataset.Dataset","By","default",",","you","should","be","able","to","pass",":","*","numpy","arrays","*","torch","tensors","*","pandas","DataFrame","or","Series","*","scipy","sparse","CSR","matrices","*","a","dictionary","of","the","former","three","*","a","list\/tuple","of","the","former","three","*","a","Dataset","If","this","does","n't","work","with","your","data",",","you","have","to","pass","a","``","Dataset","``","that","can","deal","with","the","data",".","training",":","bool","(","default=False",")","Whether","to","set","the","module","to","train","mode","or","not",".","device",":","string","(","default='cpu","'",")","The","device","to","store","each","inference","result","on",".","This","defaults","to","CPU","memory","since","there","is","genereally","more","memory","available","there",".","For","performance","reasons","this","might","be","changed","to","a","specific","CUDA","device",",","e.g",".","'cuda:0","'",".","Returns","--","--","--","-","y_infer",":","list","of","gpytorch.distributions.Distribution","A","list","of","distributions","as","generated","by","the","module",".","The","number","of","elements","in","this","list","will","depend","on","the","sample","size","of","X","and","the","batch","size","of","the","estimator","."]
code: def forward(self, X, training=False, device="cpu"):
      """Gather and concatenate the output from forward call with
      input data.
  
      The outputs from ``self.module_.forward`` are gathered on the
      compute device specified by ``device`` and then concatenated
      using PyTorch :func:`~torch.cat`. If multiple outputs are
      returned by ``self.module_.forward``, each one of them must be
      able to be concatenated this way.
  
      Notes
      -----
      For Gaussian Process modules, the return value of the module is a
      distribution. These distributions are collected in a list (which may
      only contain a single element if just one batch was used). Distributions
      *cannot* be concatenated. Therefore, this method will just return the
      list of distributions.
  
      Parameters
      ----------
      X : input data, compatible with skorch.dataset.Dataset
        By default, you should be able to pass:
  
          * numpy arrays
          * torch tensors
          * pandas DataFrame or Series
          * scipy sparse CSR matrices
          * a dictionary of the former three
          * a list/tuple of the former three
          * a Dataset
  
        If this doesn't work with your data, you have to pass a
        ``Dataset`` that can deal with the data.
  
      training : bool (default=False)
        Whether to set the module to train mode or not.
  
      device : string (default='cpu')
        The device to store each inference result on.
        This defaults to CPU memory since there is genereally
        more memory available there. For performance reasons
        this might be changed to a specific CUDA device,
        e.g. 'cuda:0'.
  
      Returns
      -------
      y_infer : list of gpytorch.distributions.Distribution
        A list of distributions as generated by the module. The number of
        elements in this list will depend on the sample size of X and the
        batch size of the estimator.
  
      """
      y_infer = list(
          self.forward_iter(X, training=training, device=device)
      )
      return y_infer
  
imports: import pickle
  import re
  import gpytorch
  import numpy
  import torch
  from skorch.net import NeuralNet
  from skorch.dataset import ValidSplit
  from skorch.dataset import unpack_data
  from skorch.callbacks import EpochScoring
  from skorch.callbacks import EpochTimer
  from skorch.callbacks import PassthroughScoring
  from skorch.callbacks import PrintLog
  from skorch.utils import check_is_fitted
  from skorch.utils import get_dim
  from skorch.utils import is_dataset
  from skorch.utils import to_numpy
  from skorch.utils import to_tensor
label_desc: Use image node_id 9 for calling the GPBase obj's underlying member method code with example usage: obj.forward(X, training, device) and returns: y_infer