Skip to main content

sp1_hypercube/ir/
conversions.rs

1use slop_algebra::{ExtensionField, Field};
2
3use crate::{
4    ir::{ExprExtRef, ExprRef, Shape},
5    Word,
6};
7
8impl<F: Field, EF: ExtensionField<F>> From<()> for Shape<ExprRef<F>, ExprExtRef<EF>> {
9    fn from(_val: ()) -> Self {
10        Shape::Unit
11    }
12}
13
14impl<F: Field, EF: ExtensionField<F>> From<ExprRef<F>> for Shape<ExprRef<F>, ExprExtRef<EF>> {
15    fn from(val: ExprRef<F>) -> Self {
16        Shape::Expr(val)
17    }
18}
19
20impl<F: Field, EF: ExtensionField<F>> From<ExprExtRef<EF>> for Shape<ExprRef<F>, ExprExtRef<EF>> {
21    fn from(val: ExprExtRef<EF>) -> Self {
22        Shape::ExprExt(val)
23    }
24}
25
26impl<F: Field, EF: ExtensionField<F>, T: Into<ExprRef<F>>> From<Word<T>>
27    for Shape<ExprRef<F>, ExprExtRef<EF>>
28{
29    fn from(val: Word<T>) -> Self {
30        let [a, b, c, d] = val.0;
31        Shape::Word([a.into(), b.into(), c.into(), d.into()])
32    }
33}
34
35impl<
36        F: Field,
37        EF: ExtensionField<F>,
38        T: Into<Shape<ExprRef<F>, ExprExtRef<EF>>>,
39        const N: usize,
40    > From<[T; N]> for Shape<ExprRef<F>, ExprExtRef<EF>>
41{
42    fn from(val: [T; N]) -> Self {
43        Shape::Array(val.map(|x| Box::new(x.into())).to_vec())
44    }
45}