anchor.diff:  		class(Kernel), pointer :: kernel3 => NULL()
   	contains
   		procedure :: evaluate_kernel => evaluate_kernel_product
  +		procedure :: set_kernel_pars => set_sub_kernel_pars_prod
  +		procedure :: get_kernel_pars => get_sub_kernel_pars_prod
   	end type ProductKernels
   
   
  
positive.code: 		real(kind=8), dimension(:), intent(in) :: x1, x2
  		real(kind=8), dimension(size(x1), size(x2)) :: matrix
  
  		if (size(self%pars) /= 2) STOP 'Wrong parameter dimension - ExpSquaredKernel(2 hyper)'
  		! pars(1) --> amplitude
  		! pars(2) --> lengthscale
  		matrix = 0.d0
  		matrix = get_radial_coordinates(x1, x2)
  		matrix = self%pars(1) * exp(-0.5d0 * (matrix / self%pars(2))**2)
  
  	end function evaluate_kernel_ExpSquaredKernel
  
  
negative.code: 		!class(Kernel), pointer :: kernel5 => NULL()
  	contains
  		procedure :: evaluate_kernel => evaluate_kernel_sum
  		procedure :: set_kernel_pars => set_sub_kernel_pars_sum
  		procedure :: get_kernel_pars => get_sub_kernel_pars_sum
  	end type SumKernels
  
  	! Product of kernels
  