1use binius_field::TowerField;
4
5use super::{
6 ComputeLayerExecutor, ComputeMemory,
7 alloc::ComputeAllocator,
8 layer::{ComputeLayer, Error, FSliceMut},
9};
10
11pub fn eq_ind_partial_eval<'a, F, Hal, DeviceAllocatorType>(
27 hal: &Hal,
28 dev_alloc: &'a DeviceAllocatorType,
29 point: &[F],
30) -> Result<FSliceMut<'a, F, Hal>, Error>
31where
32 F: TowerField,
33 Hal: ComputeLayer<F>,
34 DeviceAllocatorType: ComputeAllocator<F, Hal::DevMem>,
35{
36 let n_vars = point.len();
37 let mut out = dev_alloc.alloc(1 << n_vars)?;
38
39 {
40 let mut dev_val = Hal::DevMem::slice_power_of_two_mut(&mut out, 1);
41 hal.fill(&mut dev_val, F::ONE)?;
42 }
43
44 hal.execute(|exec| {
45 exec.tensor_expand(0, point, &mut out)?;
46 Ok(vec![])
47 })?;
48
49 Ok(out)
50}