use crate::data_types::{Number, SplitLatents};
use crate::dyn_slices::DynLatentSlice;
use crate::errors::PcoResult;
use crate::metadata::DynLatents;
pub(crate) fn split_latents<T: Number>(nums: &[T]) -> SplitLatents {
let primary = DynLatents::new(nums.iter().map(|&x| x.to_latent_ordered()).collect());
SplitLatents {
primary,
secondary: None,
}
}
pub(crate) fn join_latents<T: Number>(primary: DynLatentSlice, dst: &mut [T]) -> PcoResult<()> {
for (&l, num) in primary
.downcast::<T::L>()
.unwrap()
.iter()
.zip(dst.iter_mut())
{
*num = T::from_latent_ordered(l);
}
Ok(())
}