sp1_hypercube/ir/
conversions.rs1use 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}