mirror of
https://github.com/zama-ai/concrete.git
synced 2026-04-17 03:00:54 -04:00
feat(optimizer): multiparameters compiler entry point
This commit is contained in:
@@ -109,7 +109,7 @@ void test_dag_lut_force_wop() {
|
||||
assert(!solution.crt_decomposition.empty());
|
||||
}
|
||||
|
||||
void test_multi_parameters() {
|
||||
void test_multi_parameters_1_precision() {
|
||||
auto dag = concrete_optimizer::dag::empty();
|
||||
|
||||
std::vector<uint64_t> shape = {3};
|
||||
@@ -122,8 +122,53 @@ void test_multi_parameters() {
|
||||
|
||||
auto options = default_options();
|
||||
auto circuit_solution = dag->optimize_multi(options);
|
||||
auto secret_keys = circuit_solution.circuit_keys.keyswitch_keys;
|
||||
assert(!secret_keys.empty());
|
||||
assert(circuit_solution.is_feasible);
|
||||
auto secret_keys = circuit_solution.circuit_keys.secret_keys;
|
||||
assert(circuit_solution.circuit_keys.secret_keys.size() == 2);
|
||||
assert(circuit_solution.circuit_keys.secret_keys[0].identifier == 0);
|
||||
assert(circuit_solution.circuit_keys.secret_keys[1].identifier == 1);
|
||||
assert(circuit_solution.circuit_keys.bootstrap_keys.size() == 1);
|
||||
assert(circuit_solution.circuit_keys.keyswitch_keys.size() == 1);
|
||||
assert(circuit_solution.circuit_keys.keyswitch_keys[0].identifier == 0);
|
||||
assert(circuit_solution.circuit_keys.keyswitch_keys[0].identifier == 0);
|
||||
assert(circuit_solution.circuit_keys.conversion_keyswitch_keys.size() == 0);
|
||||
}
|
||||
|
||||
void test_multi_parameters_2_precision() {
|
||||
auto dag = concrete_optimizer::dag::empty();
|
||||
|
||||
std::vector<uint64_t> shape = {3};
|
||||
|
||||
concrete_optimizer::dag::OperatorIndex input1 =
|
||||
dag->add_input(PRECISION_8B, slice(shape));
|
||||
|
||||
concrete_optimizer::dag::OperatorIndex input2 =
|
||||
dag->add_input(PRECISION_1B, slice(shape));
|
||||
|
||||
|
||||
std::vector<u_int64_t> table = {};
|
||||
auto lut1 = dag->add_lut(input1, slice(table), PRECISION_8B);
|
||||
auto lut2 = dag->add_lut(input2, slice(table), PRECISION_8B);
|
||||
|
||||
std::vector<concrete_optimizer::dag::OperatorIndex> inputs = {lut1, lut2};
|
||||
|
||||
std::vector<int64_t> weight_vec = {1, 1};
|
||||
|
||||
rust::cxxbridge1::Box<concrete_optimizer::Weights> weights =
|
||||
concrete_optimizer::weights::vector(slice(weight_vec));
|
||||
|
||||
dag->add_dot(slice(inputs), std::move(weights));
|
||||
|
||||
auto options = default_options();
|
||||
auto circuit_solution = dag->optimize_multi(options);
|
||||
assert(circuit_solution.is_feasible);
|
||||
auto secret_keys = circuit_solution.circuit_keys.secret_keys;
|
||||
assert(circuit_solution.circuit_keys.secret_keys.size() == 4);
|
||||
assert(circuit_solution.circuit_keys.bootstrap_keys.size() == 2);
|
||||
assert(circuit_solution.circuit_keys.keyswitch_keys.size() == 2); // 1 layer so less ks
|
||||
std::string actual = circuit_solution.circuit_keys.conversion_keyswitch_keys[0].description.c_str();
|
||||
std::string expected = "fks[1->0]";
|
||||
assert(actual == expected);
|
||||
}
|
||||
|
||||
int main() {
|
||||
@@ -132,7 +177,8 @@ int main() {
|
||||
test_dag_lut();
|
||||
test_dag_lut_wop();
|
||||
test_dag_lut_force_wop();
|
||||
test_multi_parameters();
|
||||
test_multi_parameters_1_precision();
|
||||
test_multi_parameters_2_precision();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user