use midnight_proofs::{
circuit::{Layouter, Value},
plonk::Error,
};
use crate::{
field::AssignedNative,
types::AssignedBit,
vec::{AssignedVector, Vectorizable},
CircuitField,
};
pub type VectorBounds<F> = (AssignedNative<F>, AssignedNative<F>);
pub trait VectorInstructions<F, T, const M: usize, const A: usize>
where
F: CircuitField,
T: Vectorizable,
T::Element: Copy,
{
fn resize<const L: usize>(
&self,
layouter: &mut impl Layouter<F>,
input: AssignedVector<F, T, M, A>,
) -> Result<AssignedVector<F, T, L, A>, Error>;
fn assign_with_filler(
&self,
layouter: &mut impl Layouter<F>,
value: Value<Vec<T::Element>>,
filler: Option<T::Element>,
) -> Result<AssignedVector<F, T, M, A>, Error>;
fn trim_beginning(
&self,
layouter: &mut impl Layouter<F>,
input: &AssignedVector<F, T, M, A>,
n_elems: usize,
) -> Result<AssignedVector<F, T, M, A>, Error>;
#[allow(clippy::type_complexity)]
fn padding_flag(
&self,
layouter: &mut impl Layouter<F>,
input: &AssignedVector<F, T, M, A>,
) -> Result<(Box<[AssignedBit<F>; M]>, VectorBounds<F>), Error>;
fn get_limits(
&self,
layouter: &mut impl Layouter<F>,
input: &AssignedVector<F, T, M, A>,
) -> Result<VectorBounds<F>, Error>;
}