docs: def addFixedEffect(self, F=None, A=None, Ftest=None):
          """
          add fixed effect term to the model
  
          Args:
              F:     sample design matrix for the fixed effect [N,K]
              A:     trait design matrix for the fixed effect (e.g. sp.ones((1,P)) common effect; sp.eye(P) any effect) [L,P]
              Ftest: sample design matrix for test samples [Ntest,K]
          """
          if A is None:
              A = sp.eye(self.P)
          if F is None:
              F = sp.ones((self.N,1))
              if self.Ntest is not None:
                  Ftest = sp.ones((self.Ntest,1))
  
          assert A.shape[1]==self.P, 'VarianceDecomposition:: A has incompatible shape'
          assert F.shape[0]==self.N, 'VarianceDecimposition:: F has incompatible shape'
  
          if Ftest is not None:
              assert self.Ntest is not None, 'VarianceDecomposition:: specify Ntest for predictions (method VarianceDecomposition::setTestSampleSize)'
              assert Ftest.shape[0]==self.Ntest, 'VarianceDecimposition:: Ftest has incompatible shape'
              assert Ftest.shape[1]==F.shape[1], 'VarianceDecimposition:: Ftest has incompatible shape'
  
          # add fixed effect
          self.sample_designs.append(F)
          self.sample_test_designs.append(Ftest)
          self.trait_designs.append(A)
   
          self._desync()