1#![allow(clippy::too_many_arguments)]
10
11use ff::Field;
12
13pub mod ft63 {
14 use ff::PrimeField;
15 use ff_derive_num::Num;
16 use serde::{Deserialize, Serialize};
17
18 #[derive(PrimeField, Num, Deserialize, Serialize)]
19 #[PrimeFieldModulus = "5102708120182849537"]
20 #[PrimeFieldGenerator = "10"]
21 #[PrimeFieldReprEndianness = "little"]
22 pub struct Ft63([u64; 1]);
23}
24
25pub mod ft127 {
26 use ff::PrimeField;
27 use ff_derive_num::Num;
28 use serde::{Deserialize, Serialize};
29
30 #[derive(PrimeField, Num, Deserialize, Serialize)]
31 #[PrimeFieldModulus = "146823888364060453008360742206866194433"]
32 #[PrimeFieldGenerator = "3"]
33 #[PrimeFieldReprEndianness = "little"]
34 pub struct Ft127([u64; 2]);
35}
36
37pub mod ft191 {
38 use ff::PrimeField;
39 use ff_derive_num::Num;
40 use serde::{Deserialize, Serialize};
41
42 #[derive(PrimeField, Num, Deserialize, Serialize)]
43 #[PrimeFieldModulus = "1697146272512170708389931801544665676545308500647389167617"]
44 #[PrimeFieldGenerator = "5"]
45 #[PrimeFieldReprEndianness = "little"]
46 pub struct Ft191([u64; 3]);
47}
48
49pub mod ft255 {
50 use ff::PrimeField;
51 use ff_derive_num::Num;
52 use serde::{Deserialize, Serialize};
53
54 #[derive(PrimeField, Num, Deserialize, Serialize)]
55 #[PrimeFieldModulus = "46242760681095663677370860714659204618859642560429202607213929836750194081793"]
56 #[PrimeFieldGenerator = "5"]
57 #[PrimeFieldReprEndianness = "little"]
58 pub struct Ft255([u64; 4]);
59}
60
61#[macro_export]
63macro_rules! def_bench {
64 ($ben: ident, $fld: ident, $dig: ident, $len: literal) => {
65 ::paste::paste! {
66 #[bench]
67 fn [<$ben _ $fld _ $dig _ $len>](b: &mut Bencher) {
68 [<$ben _ bench>]::<$dig, $fld>(b, $len);
69 }
70 }
71 };
72}
73
74pub fn random_coeffs<Ft: Field>(log_len: usize) -> Vec<Ft> {
76 use std::io::{self, Write};
77 use std::iter::repeat_with;
78
79 let mut rng = rand::thread_rng();
80 let mut out = io::stderr();
81 let spc = 1 << (if log_len > 6 { log_len - 6 } else { log_len });
82
83 let ret = repeat_with(|| Ft::random(&mut rng))
84 .enumerate()
85 .take(1 << log_len)
86 .inspect(|(c, _)| {
87 if c % spc == 0 {
88 out.write_all(b".").unwrap();
89 out.flush().unwrap();
90 }
91 })
92 .map(|(_, v)| v)
93 .collect();
94 out.write_all(b"\n").unwrap();
95 out.flush().unwrap();
96 ret
97}