Skip to content

Commit 95e560a

Browse files
author
akokoshn
committed
Improve rename copy constraints
1 parent 4e1357a commit 95e560a

File tree

3 files changed

+33
-39
lines changed

3 files changed

+33
-39
lines changed

bin/assigner/src/main.cpp

Lines changed: 31 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ using namespace nil::blueprint;
6666
template<typename Endianness, typename ArithmetizationType, typename ConstraintSystemType>
6767
void print_circuit(const circuit_proxy<ArithmetizationType> &circuit_proxy,
6868
const assignment_proxy<ArithmetizationType> &table_proxy,
69-
bool rename_required, std::ostream &out = std::cout) {
69+
std::ostream &out = std::cout) {
7070
using TTypeBase = nil::marshalling::field_type<Endianness>;
7171
using plonk_constraint_system = nil::marshalling::types::bundle<
7272
TTypeBase, std::tuple<
@@ -90,31 +90,28 @@ void print_circuit(const circuit_proxy<ArithmetizationType> &circuit_proxy,
9090
const auto& copy_constraints = circuit_proxy.copy_constraints();
9191
typename ConstraintSystemType::copy_constraints_container_type used_copy_constraints;
9292
const auto& used_copy_constraints_idx = circuit_proxy.get_used_copy_constraints();
93-
for (const auto &it : used_copy_constraints_idx) {
94-
used_copy_constraints.push_back(copy_constraints[it]);
95-
}
96-
97-
if (rename_required) {
98-
const auto& used_rows = table_proxy.get_used_rows();
99-
std::uint32_t local_row = 0;
100-
for (const auto &row : used_rows) {
101-
for (auto &constraint : used_copy_constraints) {
102-
const auto first_var = constraint.first;
103-
const auto second_var = constraint.second;
104-
if ((first_var.type == variable_type::column_type::witness ||
105-
first_var.type == variable_type::column_type::constant) &&
106-
first_var.rotation == row) {
107-
constraint.first = variable_type(first_var.index, local_row, first_var.relative,
108-
first_var.type);
109-
}
110-
if ((second_var.type == variable_type::column_type::witness ||
111-
second_var.type == variable_type::column_type::constant) &&
112-
second_var.rotation == row) {
113-
constraint.second = variable_type(second_var.index, local_row,
114-
second_var.relative, second_var.type);
115-
}
93+
if (circuit_proxy.get_id() > 0) {
94+
const auto start_row = table_proxy.get_start_row();
95+
for (const auto &it : used_copy_constraints_idx) {
96+
auto first_var = copy_constraints[it].first;
97+
auto second_var = copy_constraints[it].second;
98+
if (first_var.type == variable_type::column_type::witness ||
99+
first_var.type == variable_type::column_type::constant) {
100+
ASSERT(first_var.rotation >= start_row);
101+
first_var =
102+
variable_type(first_var.index, first_var.rotation - start_row, first_var.relative, first_var.type);
103+
}
104+
if (second_var.type == variable_type::column_type::witness ||
105+
second_var.type == variable_type::column_type::constant) {
106+
ASSERT(second_var.rotation >= start_row);
107+
second_var = variable_type(second_var.index, second_var.rotation - start_row, second_var.relative,
108+
second_var.type);
116109
}
117-
local_row++;
110+
used_copy_constraints.push_back({first_var, second_var});
111+
}
112+
} else {
113+
for (const auto &it : used_copy_constraints_idx) {
114+
used_copy_constraints.push_back(copy_constraints[it]);
118115
}
119116
}
120117

@@ -203,8 +200,9 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
203200
for (const auto &i : lookup_selector_cols) {
204201
max_selector_size = std::max(max_selector_size, table_proxy.selector_column_size(i));
205202
}
206-
usable_rows_amount = table_proxy.get_used_rows().size();
207-
usable_rows_amount = std::max({usable_rows_amount, max_shared_size, max_public_inputs_size, max_constant_size, max_selector_size});
203+
max_selector_size = std::max(max_selector_size, (std::uint32_t)table_proxy.get_used_selector_rows().size());
204+
usable_rows_amount = std::max({table_proxy.get_num_private_rows(),
205+
max_shared_size, max_public_inputs_size, max_constant_size, max_selector_size});
208206
} else { // FULL
209207
total_columns = AssignmentTableType::arithmetization_params::total_columns;
210208
std::uint32_t max_witness_size = 0;
@@ -269,16 +267,14 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
269267
it += padded_rows_amount;
270268
}
271269
} else {
272-
const auto& rows = table_proxy.get_used_rows();
273270
const auto& selector_rows = table_proxy.get_used_selector_rows();
274-
const std::uint32_t padding = padded_rows_amount - rows.size();
275271
std::uint32_t idx = 0;
276272
auto it = table_values.begin();
277273
// witness
278274
for( std::size_t i = 0; i < AssignmentTableType::arithmetization_params::witness_columns; i++ ){
279275
const auto column_size = table_proxy.witness_column_size(i);
280276
std::uint32_t offset = 0;
281-
for(const auto& j : rows){
277+
for(std::size_t j = table_proxy.get_start_row(); j < table_proxy.get_num_private_rows(); j++){
282278
if (j < column_size) {
283279
table_values[idx + offset] = table_proxy.witness(i, j);
284280
offset++;
@@ -304,7 +300,7 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
304300
for (std::uint32_t i = 0; i < ComponentConstantColumns; i++) {
305301
const auto column_size = table_proxy.constant_column_size(i);
306302
std::uint32_t offset = 0;
307-
for(const auto& j : rows){
303+
for(std::size_t j = table_proxy.get_start_row(); j < table_proxy.get_num_private_rows(); j++){
308304
if (j < column_size) {
309305
table_values[idx + offset] = table_proxy.constant(i, j);
310306
offset++;
@@ -323,11 +319,9 @@ void print_assignment_table(const assignment_proxy<ArithmetizationType> &table_p
323319
for (std::uint32_t i = 0; i < ComponentSelectorColumns; i++) {
324320
const auto column_size = table_proxy.selector_column_size(i);
325321
std::uint32_t offset = 0;
326-
for(const auto& j : rows){
322+
for(const auto& j : selector_rows){
327323
if (j < column_size) {
328-
if (selector_rows.find(j) != selector_rows.end()) {
329-
table_values[idx + offset] = table_proxy.selector(i, j);
330-
}
324+
table_values[idx + offset] = table_proxy.selector(i, j);
331325
offset++;
332326
}
333327
}
@@ -502,7 +496,7 @@ int curve_dependent_main(std::string bytecode_file_name,
502496
}
503497

504498
print_circuit<nil::marshalling::option::big_endian, ArithmetizationType, ConstraintSystemType>(
505-
parser_instance.circuits[0], parser_instance.assignments[0], false, ocircuit);
499+
parser_instance.circuits[0], parser_instance.assignments[0], ocircuit);
506500
ocircuit.close();
507501
} else if (parser_instance.assignments.size() > 1) {
508502
for (std::uint32_t idx = 0; idx < parser_instance.assignments.size(); idx++) {
@@ -531,7 +525,7 @@ int curve_dependent_main(std::string bytecode_file_name,
531525

532526
ASSERT_MSG(idx < parser_instance.circuits.size(), "Not found circuit");
533527
print_circuit<nil::marshalling::option::big_endian, ArithmetizationType, ConstraintSystemType>(
534-
parser_instance.circuits[idx], parser_instance.assignments[idx], (idx > 0), ocircuit);
528+
parser_instance.circuits[idx], parser_instance.assignments[idx], ocircuit);
535529

536530
ocircuit.close();
537531
}

libs/blueprint

Submodule blueprint updated 35 files

0 commit comments

Comments
 (0)