def _evaluate_term_fwd(term, eta0, eps0, deps, eta_derivs,
                       eval_directional_derivative, validate=False):
    """Evaluate the DerivativeTerm in forward mode.

    Parameters
    ----------------------
    term: `DerivativeTerm`
        A `DerivativeTerm` object to evaluate.
    eta0, eps0 : `numpy.ndarray`
        Where to evaluate the derivative.
    deps : `numpy.ndarray`
        The direction in which to evaluate the derivative.
    eta_derivs : `list` of `numpy.ndarray`
        A list where ``eta_derivs[i]`` contains
        :math:`d\\eta^i / d\\epsilon^i \\Delta \\epsilon^i`.
    eval_directional_derivative:
        A function matching `eval_directional_derivative` in
        ForwardModeDerivativeArray.
    validate: optional `bool`
        If `True`, run checks for the appropriate sizes of arguments and
        produce helpful error messages if necessary.
        Default is `False`.
    """

    if validate:
        if len(eta_derivs) < term.order() - 1:
            raise ValueError('Not enough derivatives in ``eta_derivs``.')

    # First eta arguments, then epsilons.
    vec_args = []

    eta_directions = []
    for i in range(len(term.eta_orders)):
        eta_order = term.eta_orders[i]
        if eta_order > 0:
            for j in range(eta_order):
                eta_directions.append(eta_derivs[i])

    eps_directions = []
    for i in range(term.eps_order):
        eps_directions.append(deps)

    return term.prefactor * eval_directional_derivative(
        eta0, eps0, eta_directions, eps_directions, validate=validate)