use alloc::vec;
use core::borrow::BorrowMut;
use p3_field::Field;
use p3_matrix::dense::{DenseMatrix, DenseStorage, RowMajorMatrix};
use p3_matrix::Matrix;
pub fn divide_by_height<F: Field, S: DenseStorage<F> + BorrowMut<[F]>>(
mat: &mut DenseMatrix<F, S>,
) {
mat.scale(F::from_canonical_usize(mat.height()).inverse())
}
#[inline]
pub fn bit_reversed_zero_pad<F: Field>(mat: &mut RowMajorMatrix<F>, added_bits: usize) {
if added_bits == 0 {
return;
}
let w = mat.width;
let mut values = vec![F::zero(); mat.values.len() << added_bits];
for i in (0..mat.values.len()).step_by(w) {
values[(i << added_bits)..((i << added_bits) + w)].copy_from_slice(&mat.values[i..i + w]);
}
*mat = RowMajorMatrix::new(values, w);
}