use crate::Rational;
use crate::rational_polynomial::RationalPolynomial;
use alloc::vec::Vec;
use malachite_base::num::arithmetic::traits::Pow;
use malachite_base::num::basic::traits::Zero;
use malachite_base::num::conversion::traits::ExactFrom;
use malachite_nz::integer::Integer;
use malachite_nz::integer_polynomial::IntegerPolynomial;
pub fn evaluate_integer_polynomial_naive(p: &IntegerPolynomial, x: &Rational) -> Rational {
let mut sum = Rational::ZERO;
for (i, c) in p.coefficients_asc().iter().enumerate() {
sum += Rational::from(c) * x.pow(u64::exact_from(i));
}
sum
}
pub fn evaluate_rational_polynomial_naive(p: &RationalPolynomial, x: &Rational) -> Rational {
let mut sum = Rational::ZERO;
for (i, c) in p.to_coefficients_asc().into_iter().enumerate() {
sum += c * x.pow(u64::exact_from(i));
}
sum
}
pub fn evaluate_many_integer_polynomial_naive(
p: &IntegerPolynomial,
xs: &[Rational],
) -> Vec<Rational> {
xs.iter()
.map(|x| evaluate_integer_polynomial_naive(p, x))
.collect()
}
pub fn evaluate_many_rational_polynomial_naive(
p: &RationalPolynomial,
xs: &[Rational],
) -> Vec<Rational> {
xs.iter()
.map(|x| evaluate_rational_polynomial_naive(p, x))
.collect()
}
pub fn evaluate_many_rational_polynomial_at_integers_naive(
p: &RationalPolynomial,
xs: &[Integer],
) -> Vec<Rational> {
xs.iter()
.map(|x| evaluate_rational_polynomial_naive(p, &Rational::from(x)))
.collect()
}