108 uint32_t dst_row = 0;
109 uint32_t max_dst_row =
trace.get_column_rows(LookupSettings::DST_SELECTOR);
111 SetDummyInverses<LookupSettings>(
trace);
115 std::vector<uint32_t> src_rows_in_order;
116 src_rows_in_order.reserve(
trace.get_column_rows(LookupSettings::SRC_SELECTOR));
117 trace.visit_column(LookupSettings::SRC_SELECTOR,
118 [&](uint32_t row,
const FF&) { src_rows_in_order.push_back(row); });
119 std::sort(src_rows_in_order.begin(), src_rows_in_order.end());
121 for (uint32_t row : src_rows_in_order) {
122 auto src_values =
trace.get_multiple(LookupSettings::SRC_COLUMNS, row);
126 while (!found && dst_row < max_dst_row) {
129 auto dst_selector =
trace.get(LookupSettings::DST_SELECTOR, dst_row);
130 if (dst_selector == 1 && src_values ==
trace.get_multiple(LookupSettings::DST_COLUMNS, dst_row)) {
131 trace.set(LookupSettings::COUNTS, dst_row,
trace.get(LookupSettings::COUNTS, dst_row) + 1);
141 throw std::runtime_error(
142 "Failed computing counts for " + std::string(LookupSettings::NAME) +
143 ". Could not find tuple in destination.\nSRC tuple (row " +
std::to_string(row) +
145 "\nNOTE: Remember that you cannot use LookupIntoDynamicTableSequential with a deduplicated trace!");