code: def addFixedEffect(self,F=None,A=None):
          
          if A==None:
              A = SP.eye(self.P)
          if F==None:
              F = SP.ones((self.N,1))
          
          assert A.shape[1]==self.P, 'Incompatible shape'
          assert F.shape[0]==self.N, 'Incompatible shape'
         
          if F.shape[1]>1:
              for m in range(F.shape[1]):
                  self.vd.addFixedEffTerm(A,F[:,m:m+1])
          else:
              self.vd.addFixedEffTerm(A,F)
  
          #TODO: what is this gp object doing, is this initialization correct?
          self.gp      = None
          self.init    = False
          self.fast    = False
          self.optimum = None
  
          self.cache['Sigma']   = None
          self.cache['Hessian'] = None
          self.cache['Lparams'] = None
          self.cache['paramsST']= None
docs: add fixed effect to the model
  
          Args:
              F: fixed effect matrix [N,1]
              A: design matrix [K,P] (e.g. SP.ones((1,P)) common effect; SP.eye(P) any effect)