use anyhow::Result;
use poulpy_core::layouts::{GLWEToBackendMut, GLWEToBackendRef};
use poulpy_hal::layouts::{Backend, ScratchArena};
use crate::{CKKSCtBounds, SetCKKSInfos};
pub trait CKKSRescaleOps<BE: Backend> {
fn ckks_rescale_tmp_bytes(&self) -> usize;
fn ckks_rescale_assign<Dst>(&self, ct: &mut Dst, k: usize, scratch: &mut ScratchArena<'_, BE>) -> Result<()>
where
Dst: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos;
fn ckks_rescale_into<Dst, Src>(&self, dst: &mut Dst, k: usize, src: &Src, scratch: &mut ScratchArena<'_, BE>) -> Result<()>
where
Dst: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos,
Src: GLWEToBackendRef<BE> + CKKSCtBounds;
fn ckks_align_tmp_bytes(&self) -> usize;
fn ckks_align_pair<A, B>(&self, a: &mut A, b: &mut B, scratch: &mut ScratchArena<'_, BE>) -> Result<()>
where
A: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos,
B: GLWEToBackendMut<BE> + CKKSCtBounds + SetCKKSInfos;
}