#[inline]
pub(crate) fn hessian_coeff_fromobjective_q_terms(
m1: f64,
m2: f64,
q_a: f64,
q_b: f64,
q_ab: f64,
) -> f64 {
m2 * q_a * q_b + m1 * q_ab
}
#[inline]
pub(crate) fn directionalhessian_coeff_fromobjective_q_terms(
m1: f64,
m2: f64,
m3: f64,
dq: f64,
q_a: f64,
q_b: f64,
q_ab: f64,
dq_a: f64,
dq_b: f64,
dq_ab: f64,
) -> f64 {
m3 * dq * q_a * q_b + m2 * (dq_a * q_b + q_a * dq_b + dq * q_ab) + m1 * dq_ab
}
#[inline]
pub(crate) fn second_directionalhessian_coeff_fromobjective_q_terms(
m1: f64,
m2: f64,
m3: f64,
m4: f64,
dq_u: f64,
dqv: f64,
d2q_uv: f64,
q_a: f64,
q_b: f64,
q_ab: f64,
dq_a_u: f64,
dq_av: f64,
dq_b_u: f64,
dq_bv: f64,
d2q_a_uv: f64,
d2q_b_uv: f64,
dq_ab_u: f64,
dq_abv: f64,
d2q_ab_uv: f64,
) -> f64 {
let d_qaqb_u = dq_a_u * q_b + q_a * dq_b_u;
let d_qaqbv = dq_av * q_b + q_a * dq_bv;
let d2_qaqb_uv = d2q_a_uv * q_b + dq_a_u * dq_bv + dq_av * dq_b_u + q_a * d2q_b_uv;
m4 * dq_u * dqv * q_a * q_b
+ m3 * (d2q_uv * q_a * q_b + dq_u * d_qaqbv + dqv * d_qaqb_u + dq_u * dqv * q_ab)
+ m2 * (d2_qaqb_uv + d2q_uv * q_ab + dq_u * dq_abv + dqv * dq_ab_u)
+ m1 * d2q_ab_uv
}