def M(self, t, tips=None, gaps=None):
assert isinstance(t, float) and t > <NUM_LIT:0>, "<STR_LIT>".format(t)<EOL>with scipy.errstate(under='<STR_LIT:ignore>'): <EOL><INDENT>if ('<STR_LIT>', t) not in self._cached:<EOL><INDENT>self._cached[('<STR_LIT>', t)] = scipy.exp(self.D * self.mu * t)<EOL><DEDENT>expD = self._cached[('<STR_LIT>', t)]<EOL>temp = scipy.ascontiguousarray((self.A.swapaxes(<NUM_LIT:0>, <NUM_LIT:1>)<EOL>* expD).swapaxes(<NUM_LIT:1>, <NUM_LIT:0>), dtype=float)<EOL>M = broadcastMatrixMultiply(temp, self.Ainv)<EOL>assert M.min() > -<NUM_LIT>, "<STR_LIT>".format(M.min())<EOL>M[M < <NUM_LIT:0>] = <NUM_LIT:0.0><EOL>if tips is None:<EOL><INDENT>return scipy.tile(M, (self.nsites, <NUM_LIT:1>, <NUM_LIT:1>))<EOL><DEDENT>else:<EOL><INDENT>newM = scipy.zeros((len(tips), N_CODON))<EOL>for i in range(len(tips)):<EOL><INDENT>newM[i] =(M[<NUM_LIT:0>][:,tips[i]])<EOL><DEDENT>if gaps is not None:<EOL><INDENT>newM[gaps] = scipy.ones(N_CODON, dtype='<STR_LIT:float>')<EOL><DEDENT>return newM<EOL><DEDENT><DEDENT>
See docs for method in `Model` abstract base class.