use num_traits::{checked_pow, CheckedMul, One, Pow, Zero};
use crate::{
array::{Array, PrimitiveArray},
compute::arity::{unary, unary_checked},
types::NativeType,
};
pub fn powf_scalar<T>(array: &PrimitiveArray<T>, exponent: T) -> PrimitiveArray<T>
where
T: NativeType + Pow<T, Output = T>,
{
unary(array, |x| x.pow(exponent), array.data_type().clone())
}
pub fn checked_powf_scalar<T>(array: &PrimitiveArray<T>, exponent: usize) -> PrimitiveArray<T>
where
T: NativeType + Zero + One + CheckedMul,
{
let op = move |a: T| checked_pow(a, exponent);
unary_checked(array, op, array.data_type().clone())
}