anchor.diff:  		procedure :: evaluate_kernel => evaluate_kernel_ConstantKernel
   	end type ConstantKernel
   
  -	! This kernel returns a constant along the diagonal
  +	! This kernel returns a constant along the diagonal: "white noise" (homoskedastic)
   	type, extends(Kernel) :: DiagonalKernel
   	contains
   		procedure :: evaluate_kernel => evaluate_kernel_DiagonalKernel
   	end type DiagonalKernel
   
  -	! This is a "white noise" kernel
  +	! This is a "white noise" (heteroskedastic) kernel
   	type, extends(Kernel) :: WhiteKernel
   	contains
   		procedure :: evaluate_kernel => evaluate_kernel_WhiteKernel
  
positive.code: 		class(ProductKernels), intent(inout) :: self
  		integer, intent(in) :: k
  		if (k==1) print *, self%kernel1%pars
  		if (k==2) print *, self%kernel1%pars
  	end subroutine get_sub_kernel_pars_prod
  
  
  
negative.code: 		real(kind=8), dimension(:, :), allocatable :: cov
  		! the kernel associated with this GP
  		class(Kernel), pointer :: gp_kernel
  		! possible sub-kernels (we only allow one level down for now)
  		class(Kernel), pointer :: sub_kernel1
  		class(Kernel), pointer :: sub_kernel2
  	contains 
  		procedure :: is_posdef
  		procedure :: get_lnlikelihood
  