code: def trainGP(self,fast=False,scales0=None,fixed0=None,lambd=None):
          
          assert self.n_terms>0, 'CVarianceDecomposition:: No variance component terms'
  
          if not self.init:		self.initGP(fast=fast)
  
          # set lambda
          if lambd!=None:		self.gp.setLambda(lambd)
  
          # set scales0
          if scales0!=None:
              self.setScales(scales0)
          # init gp params
          self.vd.initGPparams()
          # set fixed0
          if fixed0!=None:
              params = self.gp.getParams()
              params['dataTerm'] = fixed0
              self.gp.setParams(params)
  
          # LIMIX CVARIANCEDECOMPOSITION TRAINING
          conv =self.vd.trainGP()
          
          self.cache['Sigma']   = None
          self.cache['Hessian'] = None
              
          return conv
docs: Train the gp
         
          Args:
              fast:       if true and the gp has not been initialized, initializes a kronSum gp
              scales0:	initial variance components params
              fixed0:     initial fixed effect params