1use openvm_cuda_common::error::{CudaError, MemCopyError};
2use thiserror::Error;
3
4use crate::{
5 logup_zerocheck::{
6 FoldPleError, FractionalSumcheckError, InteractionGpuError, Round0EvalError,
7 },
8 sponge::GrindError,
9};
10
11#[derive(Error, Debug)]
12pub enum ProverError {
13 #[error("MemCopy: {0}")]
14 MemCopy(#[from] MemCopyError),
15 #[error("stream_synchronize: {0}")]
16 StreamSynchronize(CudaError),
17 #[error("collapse_strided_matrix: {0}")]
18 CollapseStrided(CudaError),
19 #[error("Stack traces: {0}")]
20 StackTraces(#[from] StackTracesError),
21 #[error("MerkleTree: {0}")]
22 MerkleTree(#[from] MerkleTreeError),
23 #[error("rs_code_matrix: {0}")]
24 RsCodeMatrix(#[from] RsCodeMatrixError),
25 #[error("WHIR: {0}")]
26 Whir(#[from] WhirProverError),
27 #[error("Stacked reduction: {0}")]
28 StackedReduction(#[from] StackedReductionError),
29 #[error("LogupZerocheck: {0}")]
30 LogupZerocheck(#[from] LogupZerocheckError),
31}
32
33#[derive(Error, Debug)]
34pub enum StackedReductionError {
35 #[error(transparent)]
36 MemCopy(#[from] MemCopyError),
37 #[error("ensure_device_ntt_twiddles_initialized: {0}")]
38 InitNttTwiddles(CudaError),
39 #[error("EqEvalSegments: {0}")]
40 EqEvalSegments(KernelError),
41 #[error("fill_zero: {0}")]
42 FillZero(CudaError),
43 #[error("stacked_reduction_sumcheck_round0: {0}")]
44 SumcheckRound0(CudaError),
45 #[error("stacked_reduction_fold_ple: {0}")]
46 FoldPle(CudaError),
47 #[error("init_k_rot_from_eq_segments: {0}")]
48 InitKRot(CudaError),
49 #[error("vector_scalar_multiply_ext: {0}")]
50 VectorScalarMul(CudaError),
51 #[error("sumcheck_mle_round_degenerate: {0}")]
52 SumcheckMleRoundDegenerate(CudaError),
53 #[error("sumcheck_mle_round: {0}")]
54 SumcheckMleRound(CudaError),
55 #[error("fold_mle: {0}")]
56 FoldMle(CudaError),
57 #[error("triangular_fold_mle: {0}")]
58 TriangularFoldMle(CudaError),
59}
60
61#[derive(Error, Debug)]
62pub enum LogupZerocheckError {
63 #[error(transparent)]
64 MemCopy(#[from] MemCopyError),
65 #[error("Grind: {0}")]
66 Grind(GrindError),
67 #[error("Round0 eval: {0}")]
68 Round0Eval(#[from] Round0EvalError),
69 #[error("Interaction eval: {0}")]
70 InteractionEval(#[from] InteractionGpuError),
71 #[error("Fractional sumcheck: {0}")]
72 FractionalSumcheck(#[from] FractionalSumcheckError),
73 #[error("Fold PLE: {0}")]
74 FoldPle(#[from] FoldPleError),
75 #[error("Lambda combinations: {0}")]
76 LambdaCombinations(CudaError),
77 #[error("Logup combinations: {0}")]
78 LogupCombinations(CudaError),
79 #[error("Sumcheck: {0}")]
80 Sumcheck(#[from] SumcheckError),
81 #[error("MLE constraint eval: {0}")]
82 MleConstraintEval(KernelError),
83 #[error("MLE interaction eval: {0}")]
84 MleInteractionEval(KernelError),
85 #[error("EqEvalLayers: {0}")]
86 EqEvalLayers(KernelError),
87 #[error("fold_selectors_round0: {0}")]
88 FoldSelectorsRound0(CudaError),
89 #[error("interpolate_columns: {0}")]
90 InterpolateColumns(KernelError),
91 #[error("batch_fold_mle: {0}")]
92 BatchFoldMle(CudaError),
93 #[error("fill_zero: {0}")]
94 FillZero(CudaError),
95}
96
97#[derive(Error, Debug)]
98pub enum SumcheckError {
99 #[error(transparent)]
100 MemCopy(#[from] MemCopyError),
101 #[error("sumcheck_mle_round: {0}")]
102 SumcheckMleRound(KernelError),
103 #[error("fold_mle: {0}")]
104 FoldMle(KernelError),
105 #[error("batch_ntt_small: {0}")]
106 BatchNttSmall(KernelError),
107 #[error("reduce_over_x_and_cols: {0}")]
108 ReduceOverXAndCols(KernelError),
109 #[error("batch_expand_pad_wide: {0}")]
110 BatchExpandPadWide(KernelError),
111 #[error("fold_ple_from_coeffs: {0}")]
112 FoldPleFromCoeffs(KernelError),
113}
114
115#[derive(Error, Debug)]
116pub enum MerkleTreeError {
117 #[error(transparent)]
118 MemCopy(#[from] MemCopyError),
119 #[error(
120 "unsupported rows_per_query {rows_per_query}; CUDA Merkle row hashing supports at most {max_rows_per_query}"
121 )]
122 UnsupportedRowsPerQuery {
123 rows_per_query: usize,
124 max_rows_per_query: usize,
125 },
126 #[error("poseidon2_compressing_row_hashes error: {0}")]
127 CompressingRowHashes(CudaError),
128 #[error("poseidon2_compressing_row_hashes_ext error: {0}")]
129 CompressingRowHashesExt(CudaError),
130 #[error("poseidon2_adjacent_compress_layer [layer={layer}] error: {error}")]
131 AdjacentCompressLayer { error: CudaError, layer: usize },
132 #[error("query_digest_layers_kernel error: {0}")]
133 QueryDigestLayers(CudaError),
134 #[error("matrix_get_rows_fp_kernel [matrix_idx={matrix_idx}] error: {error}")]
135 MatrixGetRows { error: CudaError, matrix_idx: usize },
136}
137
138#[derive(Error, Debug)]
139pub enum StackTracesError {
140 #[error(transparent)]
141 MemCopy(#[from] MemCopyError),
142 #[error("batch_expand_pad_wide error: {0}")]
143 BatchExpandPadWide(CudaError),
144 #[error("fill_zero error: {0}")]
145 FillZero(CudaError),
146}
147
148#[derive(Error, Debug)]
149pub enum RsCodeMatrixError {
150 #[error(transparent)]
151 MemCopy(#[from] MemCopyError),
152 #[error("stack_traces_into_expanded error: {0}")]
153 StackTraces(StackTracesError),
154 #[error("batch_expand_pad error: {0}")]
155 BatchExpandPad(CudaError),
156 #[error("custom_batch_intt error: {0}")]
157 CustomBatchIntt(CudaError),
158 #[error("mle_interpolate_stage_2d [step={step}] error: {error}")]
159 MleInterpolateStage2d { error: CudaError, step: u32 },
160 #[error("bit_rev error: {0}")]
161 BitRev(CudaError),
162}
163
164#[derive(Error, Debug)]
165pub enum WhirProverError {
166 #[error(transparent)]
167 MemCopy(#[from] MemCopyError),
168 #[error("MerkleTree: {0}")]
169 MerkleTree(MerkleTreeError),
170 #[error("rs_code_matrix: {0}")]
171 RsCodeMatrix(RsCodeMatrixError),
172 #[error("whir_algebraic_batch_traces: {0}")]
173 AlgebraicBatch(CudaError),
174 #[error("transpose_fp_to_fpext_vec: {0}")]
175 Transpose(CudaError),
176 #[error("mle_interpolate_stage_ext [step={step}]: {error}")]
177 MleInterpolate { error: CudaError, step: u32 },
178 #[error("custom_batch_intt error: {0}")]
179 CustomBatchIntt(CudaError),
180 #[error("evals_eq_hypercube: {0}")]
181 EvalEq(KernelError),
182 #[error("whir_sumcheck_coeff_moments_round [whir_round={whir_round}, round={round}]: {error}")]
183 SumcheckMleRound {
184 error: CudaError,
185 whir_round: usize,
186 round: usize,
187 },
188 #[error("fold_mle [whir_round={whir_round}, round={round}]: {error}")]
189 FoldMle {
190 error: CudaError,
191 whir_round: usize,
192 round: usize,
193 },
194 #[error("split_ext_poly_to_base_col_major_matrix [whir_round={whir_round}]: {error}")]
195 SplitExtPoly { error: CudaError, whir_round: usize },
196 #[error("batch_expand_pad [whir_round={whir_round}]: {error}")]
197 BatchExpandPad { error: CudaError, whir_round: usize },
198 #[error("eval_poly_ext_at_point_from_base [whir_round={whir_round}]: {error}")]
199 EvalPolyAtPoint {
200 error: KernelError,
201 whir_round: usize,
202 },
203 #[error("w_moments_accumulate [whir_round={whir_round}]: {error}")]
204 WMomentsAccumulate { error: CudaError, whir_round: usize },
205 #[error("Mu grind error: {0}")]
206 MuGrind(GrindError),
207 #[error("Folding grind error: {0}")]
208 FoldingGrind(GrindError),
209 #[error("Query phase grind error: {0}")]
210 QueryPhaseGrind(GrindError),
211}
212
213#[derive(Error, Debug)]
215pub enum KernelError {
216 #[error("CUDA error: {0}")]
217 Kernel(#[from] CudaError),
218 #[error("Memory copy error: {0}")]
219 MemCopy(#[from] MemCopyError),
220}