@abc.abstractmethod<EOL><INDENT>def dM(self, t, param, Mt, tips=None, gaps=None):<DEDENT>
pass<EOL>
Derivative of `M(t)` with respect to `param`.

        Args:
            `t` (float > 0)
                The branch length.
            `param` (string in `freeparams` or the string `'t'`)
                Differentiate with respect to this model parameter,
                or with respect to branch length if `'t'`.
            `Mt` (`numpy.ndarray`.)
                The current value of `M(t, tips, gaps)`. Typically this
                has already been pre-computed which is why it is passed
                here to avoid computing again. Otherwise pass
                `None` and it will be re-computed.
            `tips` and `gaps`
                Same meaning as for `M`.

        Returns:
            `dM_param` (`numpy.ndarray` floats)
                If `param` is a float, then `dM_param[r][x][y]`
                is derivative of `M(t)[r][x][y]` with respect to
                `param`. If `param` is an array, then
                `dM_param[i][r][x][y]` is derivative of `M(t)[r][x][y]`
                with respect to `param[i]`. If using `tips`, then
                `dM_param[r]` or `dM_params[i][r]` is only a
                single array providing the derivative of
                `M(t, tips, gaps)[r]` with respect to `param` or
                `param[i]`.