#![allow(unused)]
#![cfg_attr(rustfmt, rustfmt_skip)]
#[inline]
pub fn grad_mmsin2_0_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
(-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
}
#[inline]
pub fn grad_mmsin2_1_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
(-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
}
#[inline]
pub fn grad_mmsin2_2_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
(-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
}
#[inline]
pub fn grad_mmsin2_3_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
(-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
}
pub fn grad_mmsin2(a0: f64, a1: f64, a2: f64, a3: f64) -> nalgebra::SMatrix<f64, 4, 1> {
let mut result = nalgebra::SMatrix::zeros();
result[(0, 0)] = grad_mmsin2_0_0(a0, a1, a2, a3);
result[(1, 0)] = grad_mmsin2_1_0(a0, a1, a2, a3);
result[(2, 0)] = grad_mmsin2_2_0(a0, a1, a2, a3);
result[(3, 0)] = grad_mmsin2_3_0(a0, a1, a2, a3);
result
}
#[inline]
pub fn hess_mmsin2_0_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
.powi(2))
* ((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* ((((a2).sin()).powi(2))
+ (((a1).powi(2)) * (((a0).cos()).powi(2)))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).cos())) + ((a0).sin())))
+ ((0.50000000000000000000_f64)
* (((4.0000000000000000000_f64) * ((a0).cos()))
+ ((-2.0000000000000000000_f64) * (a0) * ((a0).sin())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ (-((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).sin()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ (-((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_0_1(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos()))
+ ((a1) * (((a3) * ((a1).cos())) + ((a0).sin())) * ((a0).cos()))
+ ((0.50000000000000000000_f64)
* (a2)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ (-((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_0_2(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a2).cos())) + ((a3).sin())) * ((a2).sin()))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).cos()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* ((a1).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ (-((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_0_3(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((a1) * ((a0).cos()) * ((a1).sin())) + ((a2) * ((a3).cos()) * ((a2).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_1_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos()))
+ ((a1) * (((a3) * ((a1).cos())) + ((a0).sin())) * ((a0).cos()))
+ ((0.50000000000000000000_f64)
* (a2)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ (-((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_1_1(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
.powi(2))
* ((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* ((((a2).sin()).powi(2))
+ (((a2).powi(2)) * (((a1).cos()).powi(2)))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a3) * ((a1).cos())) + ((a0).sin())))
+ (-((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin())))
+ (-((a3) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* ((-((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ (-((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_1_2(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos()))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))
+ ((a1) * ((a2).cos()) * ((a2).sin()))
+ ((a2) * ((a1).cos()) * ((a1).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* ((-((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ (-((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_1_3(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).cos()))
+ ((((a3) * ((a3).cos())) + ((a3).sin())) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* ((a1).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_2_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a2).cos())) + ((a3).sin())) * ((a2).sin()))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).cos()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* ((a1).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ (-((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_2_1(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos()))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))
+ ((a1) * ((a2).cos()) * ((a2).sin()))
+ ((a2) * ((a1).cos()) * ((a1).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* ((-((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ (-((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_2_2(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
.powi(2))
* ((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* ((((a1).sin()).powi(2))
+ (((a1).powi(2)) * (((a2).cos()).powi(2)))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).cos())) + ((a3).sin())))
+ (-((a0) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin())))
+ (-((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* ((-((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ (-((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_2_3(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))
+ ((a1) * (((a3) * ((a3).cos())) + ((a3).sin())) * ((a2).cos()))
+ ((0.50000000000000000000_f64)
* (a2)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_3_0(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((a1) * ((a0).cos()) * ((a1).sin())) + ((a2) * ((a3).cos()) * ((a2).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a0).cos())))
* (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))))
+ ((a1) * (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a0).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_3_1(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).cos()))
+ ((((a3) * ((a3).cos())) + ((a3).sin())) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* ((a1).sin())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a0).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a1).cos())))
* (((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))))
+ ((a2) * (((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_3_2(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* (((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))
+ ((a1) * (((a3) * ((a3).cos())) + ((a3).sin())) * ((a2).cos()))
+ ((0.50000000000000000000_f64)
* (a2)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a0) * ((a2).cos())))
* (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))))
+ ((a1) * (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))) * ((a2).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
#[inline]
pub fn hess_mmsin2_3_3(a0: f64, a1: f64, a2: f64, a3: f64) -> f64 {
((-(((((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
.powi(2))
* ((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.recip())
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.cos())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-0.50000000000000000000_f64))
* ((((a1).sin()).powi(2))
+ (((a2).powi(2)) * (((a3).cos()).powi(2)))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a3) * ((a3).cos())) + ((a3).sin())))
+ ((0.50000000000000000000_f64)
* (((4.0000000000000000000_f64) * ((a3).cos()))
+ ((-2.0000000000000000000_f64) * (a3) * ((a3).sin())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).sin()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin())))
+ (-(((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.powf(-1.5000000000000000000_f64))
* (((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin()))
+ ((0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ ((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos())))
* ((-((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))) * ((a1).sin())))
+ ((-0.50000000000000000000_f64)
* (((2.0000000000000000000_f64) * ((a3).sin()))
+ ((2.0000000000000000000_f64) * (a3) * ((a3).cos())))
* (((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))))
+ (-((a2) * (((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))) * ((a3).cos()))))
* (((((((a0) * ((a0).sin())) + ((a2) * ((a1).sin()))).powi(2))
+ ((((a0) * ((a2).sin())) + ((a2) * ((a3).sin()))).powi(2))
+ ((((a1) * ((a0).sin())) + ((a3) * ((a1).sin()))).powi(2))
+ ((((a1) * ((a2).sin())) + ((a3) * ((a3).sin()))).powi(2)))
.sqrt())
.sin()))))
}
pub fn hess_mmsin2(a0: f64, a1: f64, a2: f64, a3: f64) -> nalgebra::SMatrix<f64, 4, 4> {
let mut result = nalgebra::SMatrix::zeros();
result[(0, 0)] = hess_mmsin2_0_0(a0, a1, a2, a3);
result[(0, 1)] = hess_mmsin2_0_1(a0, a1, a2, a3);
result[(0, 2)] = hess_mmsin2_0_2(a0, a1, a2, a3);
result[(0, 3)] = hess_mmsin2_0_3(a0, a1, a2, a3);
result[(1, 0)] = hess_mmsin2_1_0(a0, a1, a2, a3);
result[(1, 1)] = hess_mmsin2_1_1(a0, a1, a2, a3);
result[(1, 2)] = hess_mmsin2_1_2(a0, a1, a2, a3);
result[(1, 3)] = hess_mmsin2_1_3(a0, a1, a2, a3);
result[(2, 0)] = hess_mmsin2_2_0(a0, a1, a2, a3);
result[(2, 1)] = hess_mmsin2_2_1(a0, a1, a2, a3);
result[(2, 2)] = hess_mmsin2_2_2(a0, a1, a2, a3);
result[(2, 3)] = hess_mmsin2_2_3(a0, a1, a2, a3);
result[(3, 0)] = hess_mmsin2_3_0(a0, a1, a2, a3);
result[(3, 1)] = hess_mmsin2_3_1(a0, a1, a2, a3);
result[(3, 2)] = hess_mmsin2_3_2(a0, a1, a2, a3);
result[(3, 3)] = hess_mmsin2_3_3(a0, a1, a2, a3);
result
}