Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ecc_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void eccImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto ecc_INFINITY_X = FF(0);
19 const auto ecc_INFINITY_Y = FF(0);
20 const auto ecc_X_DIFF = (in.get(C::ecc_q_x) - in.get(C::ecc_p_x));
21 const auto ecc_Y_DIFF = (in.get(C::ecc_q_y) - in.get(C::ecc_p_y));
22 const auto ecc_INFINITY_PRED = in.get(C::ecc_x_match) * (FF(1) - in.get(C::ecc_y_match));
23 const auto ecc_BOTH_INF = in.get(C::ecc_p_is_inf) * in.get(C::ecc_q_is_inf);
24 const auto ecc_BOTH_NON_INF = (FF(1) - in.get(C::ecc_p_is_inf)) * (FF(1) - in.get(C::ecc_q_is_inf));
25 const auto ecc_COMPUTED_R_X =
26 ((in.get(C::ecc_lambda) * in.get(C::ecc_lambda) - in.get(C::ecc_p_x)) - in.get(C::ecc_q_x));
27 const auto ecc_COMPUTED_R_Y =
28 (in.get(C::ecc_lambda) * (in.get(C::ecc_p_x) - in.get(C::ecc_r_x)) - in.get(C::ecc_p_y));
29 const auto ecc_EITHER_INF = ((in.get(C::ecc_p_is_inf) + in.get(C::ecc_q_is_inf)) - FF(2) * ecc_BOTH_INF);
30
31 {
32 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
33 auto tmp = static_cast<View>(in.get(C::ecc_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_sel)));
34 std::get<0>(evals) += (tmp * scaling_factor);
35 }
36 {
37 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
38 auto tmp = static_cast<View>(in.get(C::ecc_double_op)) * (FF(1) - static_cast<View>(in.get(C::ecc_double_op)));
39 std::get<1>(evals) += (tmp * scaling_factor);
40 }
41 {
42 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
43 auto tmp = static_cast<View>(in.get(C::ecc_add_op)) * (FF(1) - static_cast<View>(in.get(C::ecc_add_op)));
44 std::get<2>(evals) += (tmp * scaling_factor);
45 }
46 {
47 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
48 auto tmp = (static_cast<View>(in.get(C::ecc_sel)) -
49 (static_cast<View>(in.get(C::ecc_double_op)) + static_cast<View>(in.get(C::ecc_add_op)) +
50 CView(ecc_INFINITY_PRED)));
51 std::get<3>(evals) += (tmp * scaling_factor);
52 }
53 {
54 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
55 auto tmp = static_cast<View>(in.get(C::ecc_p_is_inf)) * (FF(1) - static_cast<View>(in.get(C::ecc_p_is_inf)));
56 std::get<4>(evals) += (tmp * scaling_factor);
57 }
58 {
59 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
60 auto tmp = static_cast<View>(in.get(C::ecc_q_is_inf)) * (FF(1) - static_cast<View>(in.get(C::ecc_q_is_inf)));
61 std::get<5>(evals) += (tmp * scaling_factor);
62 }
63 {
64 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
65 auto tmp = static_cast<View>(in.get(C::ecc_r_is_inf)) * (FF(1) - static_cast<View>(in.get(C::ecc_r_is_inf)));
66 std::get<6>(evals) += (tmp * scaling_factor);
67 }
68 {
69 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
70 auto tmp = static_cast<View>(in.get(C::ecc_x_match)) * (FF(1) - static_cast<View>(in.get(C::ecc_x_match)));
71 std::get<7>(evals) += (tmp * scaling_factor);
72 }
73 {
74 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
75 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
76 ((CView(ecc_X_DIFF) * (static_cast<View>(in.get(C::ecc_x_match)) *
77 (FF(1) - static_cast<View>(in.get(C::ecc_inv_x_diff))) +
78 static_cast<View>(in.get(C::ecc_inv_x_diff))) -
79 FF(1)) +
80 static_cast<View>(in.get(C::ecc_x_match)));
81 std::get<8>(evals) += (tmp * scaling_factor);
82 }
83 {
84 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
85 auto tmp = static_cast<View>(in.get(C::ecc_y_match)) * (FF(1) - static_cast<View>(in.get(C::ecc_y_match)));
86 std::get<9>(evals) += (tmp * scaling_factor);
87 }
88 {
89 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
90 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
91 ((CView(ecc_Y_DIFF) * (static_cast<View>(in.get(C::ecc_y_match)) *
92 (FF(1) - static_cast<View>(in.get(C::ecc_inv_y_diff))) +
93 static_cast<View>(in.get(C::ecc_inv_y_diff))) -
94 FF(1)) +
95 static_cast<View>(in.get(C::ecc_y_match)));
96 std::get<10>(evals) += (tmp * scaling_factor);
97 }
98 { // DOUBLE_PRED
99 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
100 auto tmp = (static_cast<View>(in.get(C::ecc_double_op)) -
101 static_cast<View>(in.get(C::ecc_x_match)) * static_cast<View>(in.get(C::ecc_y_match)));
102 std::get<11>(evals) += (tmp * scaling_factor);
103 }
104 { // INFINITY_RESULT
105 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
106 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
107 (static_cast<View>(in.get(C::ecc_result_infinity)) -
108 (CView(ecc_INFINITY_PRED) * CView(ecc_BOTH_NON_INF) + CView(ecc_BOTH_INF)));
109 std::get<12>(evals) += (tmp * scaling_factor);
110 }
111 {
112 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
113 auto tmp =
114 (FF(1) - static_cast<View>(in.get(C::ecc_result_infinity))) * static_cast<View>(in.get(C::ecc_double_op)) *
115 (FF(2) * static_cast<View>(in.get(C::ecc_p_y)) * static_cast<View>(in.get(C::ecc_inv_2_p_y)) - FF(1));
116 std::get<13>(evals) += (tmp * scaling_factor);
117 }
118 { // COMPUTED_LAMBDA
119 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
120 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
121 (static_cast<View>(in.get(C::ecc_lambda)) -
122 (static_cast<View>(in.get(C::ecc_double_op)) * FF(3) * static_cast<View>(in.get(C::ecc_p_x)) *
123 static_cast<View>(in.get(C::ecc_p_x)) * static_cast<View>(in.get(C::ecc_inv_2_p_y)) +
124 static_cast<View>(in.get(C::ecc_add_op)) * CView(ecc_Y_DIFF) *
125 static_cast<View>(in.get(C::ecc_inv_x_diff))));
126 std::get<14>(evals) += (tmp * scaling_factor);
127 }
128 {
129 using View = typename std::tuple_element_t<15, ContainerOverSubrelations>::View;
130 auto tmp = (static_cast<View>(in.get(C::ecc_use_computed_result)) -
131 static_cast<View>(in.get(C::ecc_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_p_is_inf))) *
132 (FF(1) - static_cast<View>(in.get(C::ecc_q_is_inf))) * (FF(1) - CView(ecc_INFINITY_PRED)));
133 std::get<15>(evals) += (tmp * scaling_factor);
134 }
135 { // OUTPUT_X_COORD
136 using View = typename std::tuple_element_t<16, ContainerOverSubrelations>::View;
137 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
138 (((static_cast<View>(in.get(C::ecc_r_x)) -
139 CView(ecc_EITHER_INF) *
140 (static_cast<View>(in.get(C::ecc_p_is_inf)) * static_cast<View>(in.get(C::ecc_q_x)) +
141 static_cast<View>(in.get(C::ecc_q_is_inf)) * static_cast<View>(in.get(C::ecc_p_x)))) -
142 static_cast<View>(in.get(C::ecc_result_infinity)) * CView(ecc_INFINITY_X)) -
143 static_cast<View>(in.get(C::ecc_use_computed_result)) * CView(ecc_COMPUTED_R_X));
144 std::get<16>(evals) += (tmp * scaling_factor);
145 }
146 { // OUTPUT_Y_COORD
147 using View = typename std::tuple_element_t<17, ContainerOverSubrelations>::View;
148 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
149 (((static_cast<View>(in.get(C::ecc_r_y)) -
150 CView(ecc_EITHER_INF) *
151 (static_cast<View>(in.get(C::ecc_p_is_inf)) * static_cast<View>(in.get(C::ecc_q_y)) +
152 static_cast<View>(in.get(C::ecc_q_is_inf)) * static_cast<View>(in.get(C::ecc_p_y)))) -
153 static_cast<View>(in.get(C::ecc_result_infinity)) * CView(ecc_INFINITY_Y)) -
154 static_cast<View>(in.get(C::ecc_use_computed_result)) * CView(ecc_COMPUTED_R_Y));
155 std::get<17>(evals) += (tmp * scaling_factor);
156 }
157 { // OUTPUT_INF_FLAG
158 using View = typename std::tuple_element_t<18, ContainerOverSubrelations>::View;
159 auto tmp = static_cast<View>(in.get(C::ecc_sel)) *
160 (static_cast<View>(in.get(C::ecc_r_is_inf)) - static_cast<View>(in.get(C::ecc_result_infinity)));
161 std::get<18>(evals) += (tmp * scaling_factor);
162 }
163}
164
165} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
Definition ecc_impl.hpp:11
ColumnAndShifts
Definition columns.hpp:34
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.