anchor.diff:  		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
  
positive.code: 		class(SumKernels), 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_sum
  
  	subroutine get_sub_kernel_pars_prod(self, k)
  
negative.code: 	end function new_Kernel
  
  
  	function new_GP(cov_matrix, kernel_ptr, subkernel_ptr1, subkernel_ptr2)
  		! this is the GP derived-type constructor
  		real(kind=8), dimension(:, :) :: cov_matrix
  		class(Kernel), pointer :: kernel_ptr
  		class(Kernel), pointer, optional :: subkernel_ptr1, subkernel_ptr2
  		type(GP) new_GP
  		integer :: shape_cov(2), N
  
  