use crate::math::tensor::{AsMutTensor, Tensor};
use super::*;
pub struct UniformBoolean;
impl RandomGenerable<UniformBoolean> for bool {
#[allow(unused)]
fn sample(distribution: UniformBoolean) -> Self {
use concrete_csprng::RandomGenerator;
let mut gen = RandomGenerator::new(None, None);
gen.generate_next() & 1 == 1
}
}
pub fn random_uniform_boolean<T: RandomGenerable<UniformBoolean>>() -> T {
T::sample(UniformBoolean)
}
pub fn fill_with_random_uniform_boolean<Scalar, Tensorable>(output: &mut Tensorable)
where
Scalar: RandomGenerable<UniformBoolean>,
Tensorable: AsMutTensor<Element = Scalar>,
{
output.as_mut_tensor().iter_mut().for_each(|s| {
*s = random_uniform_boolean::<Scalar>();
});
}
pub fn random_uniform_boolean_tensor<T: RandomGenerable<UniformBoolean>>(
size: usize,
) -> Tensor<Vec<T>> {
(0..size).map(|_| random_uniform_boolean::<T>()).collect()
}