anchor.diff:          if device = DevCuda then ArrayNDCuda.toDev (x :?> ArrayNDHostT<'T>) :> ArrayNDT<'T>
           else x 
       
  +    type trainData ={
  +        Lengthscale:    ArrayNDT<single>
  +        Trn_X:          ArrayNDT<single>
  +        Trn_T:          ArrayNDT<single>
  +        Trn_Sigma:      ArrayNDT<single>
  +        }
  +    type predOutput = {
  +       In_Mean:         ArrayNDT<single>
  +       In_Cov:          ArrayNDT<single>
  +       Pred_Mean:       ArrayNDT<single>
  +       Pred_Cov:        ArrayNDT<single>
  +       }
  +
       let testMultiGPLayer device =
  -        
  +
           let seed = 1
           let rand = Random(seed)
   
  
positive.code:         let inp_mean  : ExprT<single> = mb.Var "inp_mean"  [nSmpls; nGPs]
          let inp_cov   : ExprT<single> = mb.Var "inp_cov"   [nSmpls; nGPs; nGPs]
  
          mb.SetSize nGPs      3
          mb.SetSize nTrnSmpls 10
          let mi = mb.Instantiate device
  
          let pred_mean, pred_cov = MultiGPLayer.pred mgp inp_mean inp_cov
          let pred_mean_cov_fn = mi.Func (pred_mean, pred_cov) |> arg2 inp_mean inp_cov
  
  
  
  
  
          for i in [0..9] do
  
              let inp_meanhost = rand.UniformArrayND (-5.0f ,5.0f) [1;ngps]
              let inp_mean_val = inp_meanhost |> ArrayNDCuda.toDev
  
              let inp_covhost =  rand.UniformArrayND (-5.0f ,5.0f) [1;ngps;ngps]
              let inp_cov_val = inp_covhost |> ArrayNDCuda.toDev
  
          let pred_mean, pred_cov = pred_mean_cov_fn inp_mean_val inp_cov_val
  
          printfn "Lengthscales=\n%A" mi.ParameterStorage.[!mgp.Lengthscales]
          printfn "TrnX=\n%A" mi.ParameterStorage.[!mgp.TrnX]
  
negative.code: open SymTensor
  open SymTensor.Compiler.Cuda
  open System
  open Datasets
  
  module Program =
  
  