pub(crate) fn mul_helper<T: MulAssign<F> + Clone, F: Clone>(t: &T, f: &F) -> T {
    let mut clone = t.clone();
    clone.mul_assign(f.clone());
    clone
}
//TODO: helper function for mul because relying on MulAssign
helper function for mul because relying on MulAssign
helper function for mul because relying on MulAssign
pub(crate) fn mul_helper<T: MulAssign<F> + Clone, F: Clone>(t: &T, f: &F) -> T {
    let mut clone = t.clone();
    clone.mul_assign(f.clone());
    clone
}
pub ( crate ) fn mul_helper < T : MulAssign < F > + Clone , F : Clone > ( t : & T , f : & F ) -> T { let mut clone = t . clone ( ) ; clone . mul_assign ( f . clone ( ) ) ; clone }
TODO: helper function for mul because relying on MulAssign
TODO : helper function for mul because relying on MulAssign
t
&T
f
&F
t
&T
f
&F