use ferray_core::Array;
use ferray_core::dimension::Dimension;
use ferray_core::dtype::Element;
use ferray_core::error::FerrayResult;
use crate::MaskedArray;
impl<T: Element, D: Dimension> MaskedArray<T, D> {
pub const fn harden_mask(&mut self) -> FerrayResult<()> {
self.hard_mask = true;
Ok(())
}
pub const fn soften_mask(&mut self) -> FerrayResult<()> {
self.hard_mask = false;
Ok(())
}
}
pub fn getmask<T: Element, D: Dimension>(ma: &MaskedArray<T, D>) -> FerrayResult<Array<bool, D>> {
Ok(ma.mask().clone())
}
pub fn getdata<T: Element + Copy, D: Dimension>(
ma: &MaskedArray<T, D>,
) -> FerrayResult<Array<T, D>> {
Ok(ma.data().clone())
}
pub fn is_masked<T: Element, D: Dimension>(ma: &MaskedArray<T, D>) -> FerrayResult<bool> {
Ok(ma.mask().iter().any(|m| *m))
}
pub fn count_masked<T: Element, D: Dimension>(
ma: &MaskedArray<T, D>,
_axis: Option<usize>,
) -> FerrayResult<usize> {
let count = ma.mask().iter().filter(|m| **m).count();
Ok(count)
}