def _curvature_condition(jac_xk, step_dir, jac_xk_plus_ap, c_2):
    """Return True if curvature condition is met.

    Curvature condition:
    grad_f(x_k + a_k p_k)^T p_k  >= c_2 grad_f(x_k)^T p_k

    Where all vectors all column matrices

    args:
        jac_xk: grad_f(x_k); First derivative (jacobian) at x_k.
        step_dir: p_k; Step direction (ex. jacobian in steepest descent) at x_k.
        jac_xk_plus_ap: grad_f(x_k = a_k p_k); jacobian value at x_k + a_k p_k
        c_2: Strictness parameter for curvature condition.
    """
    # NOTE: x.dot(y) == col_matrix(x).T * col_matrix(y)
    return (jac_xk_plus_ap).dot(step_dir) >= c_2 * (jac_xk.dot(step_dir))