diff --git a/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp b/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp index 2253b0182..ac2499f17 100644 --- a/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp +++ b/compilers/concrete-compiler/compiler/lib/Dialect/FHE/Analysis/ConcreteOptimizer.cpp @@ -203,9 +203,8 @@ struct FunctionToDag { if (inputType.isSigned()) { // std::vector weights_vector{1}; auto addIndex = dag->add_dot(slice(encrypted_inputs), - concrete_optimizer::weights::vector( - slice(std::vector{1}))); - encrypted_inputs[0] = addIndex; + concrete_optimizer::weights::number(1)); + encrypted_input = addIndex; operatorIndexes.push_back(addIndex.index); } auto lutIndex = diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs index fdca09378..c37794676 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs @@ -574,6 +574,10 @@ fn vector(weights: &[i64]) -> Box { Box::new(Weights(operator::Weights::vector(weights))) } +fn number(weight: i64) -> Box { + Box::new(Weights(operator::Weights::number(weight))) +} + impl From for ffi::OperatorIndex { fn from(oi: OperatorIndex) -> Self { Self { index: oi.i } @@ -671,6 +675,9 @@ mod ffi { #[namespace = "concrete_optimizer::weights"] fn vector(weights: &[i64]) -> Box; + #[namespace = "concrete_optimizer::weights"] + fn number(weight: i64) -> Box; + fn optimize_multi(self: &OperationDag, _options: Options) -> CircuitSolution; fn NO_KEY_ID() -> u64; diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp index 765e60fc0..e51325713 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.cpp @@ -1292,6 +1292,8 @@ extern "C" { namespace weights { extern "C" { ::concrete_optimizer::Weights *concrete_optimizer$weights$cxxbridge1$vector(::rust::Slice<::std::int64_t const> weights) noexcept; + +::concrete_optimizer::Weights *concrete_optimizer$weights$cxxbridge1$number(::std::int64_t weight) noexcept; } // extern "C" } // namespace weights @@ -1391,6 +1393,10 @@ namespace weights { ::rust::Box<::concrete_optimizer::Weights> vector(::rust::Slice<::std::int64_t const> weights) noexcept { return ::rust::Box<::concrete_optimizer::Weights>::from_raw(concrete_optimizer$weights$cxxbridge1$vector(weights)); } + +::rust::Box<::concrete_optimizer::Weights> number(::std::int64_t weight) noexcept { + return ::rust::Box<::concrete_optimizer::Weights>::from_raw(concrete_optimizer$weights$cxxbridge1$number(weight)); +} } // namespace weights ::concrete_optimizer::dag::CircuitSolution OperationDag::optimize_multi(::concrete_optimizer::Options _options) const noexcept { diff --git a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp index ac92dadb6..0d20da41d 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/cpp/concrete-optimizer.hpp @@ -1232,6 +1232,8 @@ namespace dag { namespace weights { ::rust::Box<::concrete_optimizer::Weights> vector(::rust::Slice<::std::int64_t const> weights) noexcept; + +::rust::Box<::concrete_optimizer::Weights> number(::std::int64_t weight) noexcept; } // namespace weights ::std::uint64_t NO_KEY_ID() noexcept;