pub trait ScalarMul: Group + Add<Self::MulBase, Output = Self> + AddAssign<Self::MulBase> + for<'a> Add<&'a Self::MulBase, Output = Self> + for<'a> AddAssign<&'a Self::MulBase> + Sub<Self::MulBase, Output = Self> + SubAssign<Self::MulBase> + for<'a> Sub<&'a Self::MulBase, Output = Self> + for<'a> SubAssign<&'a Self::MulBase> + From<Self::MulBase> {
type MulBase: Send + Sync + Copy + Eq + Hash + Mul<Self::ScalarField, Output = Self> + for<'a> Mul<&'a Self::ScalarField, Output = Self> + Neg<Output = Self::MulBase>;
const NEGATION_IS_CHEAP: bool;
// Required method
fn batch_convert_to_mul_base(bases: &[Self]) -> Vec<Self::MulBase>;
}