<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def addFixedEffect(self,F=None,A=None):
 """ 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) """

        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