From 08dcf993e40bc4e701671cb65612c8fed39da4a8 Mon Sep 17 00:00:00 2001 From: rudy Date: Wed, 15 Nov 2023 11:52:04 +0100 Subject: [PATCH] feat(optimizer): export unsafe_cast to cpp --- .../src/concrete-optimizer.rs | 14 ++++++++++++++ .../src/cpp/concrete-optimizer.cpp | 7 +++++++ .../src/cpp/concrete-optimizer.hpp | 1 + 3 files changed, 22 insertions(+) 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 3aad9b480..25a11716f 100644 --- a/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs +++ b/compilers/concrete-optimizer/concrete-optimizer-cpp/src/concrete-optimizer.rs @@ -492,6 +492,14 @@ impl OperationDag { self.0.add_round_op(input.into(), rounded_precision).into() } + fn add_unsafe_cast_op( + &mut self, + input: ffi::OperatorIndex, + new_precision: Precision, + ) -> ffi::OperatorIndex { + self.0.add_unsafe_cast(input.into(), new_precision).into() + } + fn optimize_v0(&self, options: ffi::Options) -> ffi::Solution { let processing_unit = processing_unit(options); @@ -666,6 +674,12 @@ mod ffi { rounded_precision: u8, ) -> OperatorIndex; + fn add_unsafe_cast_op( + self: &mut OperationDag, + input: OperatorIndex, + rounded_precision: u8, + ) -> OperatorIndex; + fn optimize_v0(self: &OperationDag, options: Options) -> Solution; fn optimize(self: &OperationDag, options: Options) -> DagSolution; 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 712952f95..de79044dd 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 @@ -972,6 +972,7 @@ struct OperationDag final : public ::rust::Opaque { ::concrete_optimizer::dag::OperatorIndex add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights) noexcept; ::concrete_optimizer::dag::OperatorIndex add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, double manp, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment) noexcept; ::concrete_optimizer::dag::OperatorIndex add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; ::concrete_optimizer::v0::Solution optimize_v0(::concrete_optimizer::Options options) const noexcept; ::concrete_optimizer::dag::DagSolution optimize(::concrete_optimizer::Options options) const noexcept; ::rust::String dump() const noexcept; @@ -1272,6 +1273,8 @@ extern "C" { ::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$OperationDag$add_round_op(::concrete_optimizer::OperationDag &self, ::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; +::concrete_optimizer::dag::OperatorIndex concrete_optimizer$cxxbridge1$OperationDag$add_unsafe_cast_op(::concrete_optimizer::OperationDag &self, ::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; + ::concrete_optimizer::v0::Solution concrete_optimizer$cxxbridge1$OperationDag$optimize_v0(::concrete_optimizer::OperationDag const &self, ::concrete_optimizer::Options options) noexcept; void concrete_optimizer$cxxbridge1$OperationDag$optimize(::concrete_optimizer::OperationDag const &self, ::concrete_optimizer::Options options, ::concrete_optimizer::dag::DagSolution *return$) noexcept; @@ -1360,6 +1363,10 @@ namespace dag { return concrete_optimizer$cxxbridge1$OperationDag$add_round_op(*this, input, rounded_precision); } +::concrete_optimizer::dag::OperatorIndex OperationDag::add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept { + return concrete_optimizer$cxxbridge1$OperationDag$add_unsafe_cast_op(*this, input, rounded_precision); +} + ::concrete_optimizer::v0::Solution OperationDag::optimize_v0(::concrete_optimizer::Options options) const noexcept { return concrete_optimizer$cxxbridge1$OperationDag$optimize_v0(*this, options); } 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 e1b9b747f..c04e198b9 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 @@ -953,6 +953,7 @@ struct OperationDag final : public ::rust::Opaque { ::concrete_optimizer::dag::OperatorIndex add_dot(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, ::rust::Box<::concrete_optimizer::Weights> weights) noexcept; ::concrete_optimizer::dag::OperatorIndex add_levelled_op(::rust::Slice<::concrete_optimizer::dag::OperatorIndex const> inputs, double lwe_dim_cost_factor, double fixed_cost, double manp, ::rust::Slice<::std::uint64_t const> out_shape, ::rust::Str comment) noexcept; ::concrete_optimizer::dag::OperatorIndex add_round_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; + ::concrete_optimizer::dag::OperatorIndex add_unsafe_cast_op(::concrete_optimizer::dag::OperatorIndex input, ::std::uint8_t rounded_precision) noexcept; ::concrete_optimizer::v0::Solution optimize_v0(::concrete_optimizer::Options options) const noexcept; ::concrete_optimizer::dag::DagSolution optimize(::concrete_optimizer::Options options) const noexcept; ::rust::String dump() const noexcept;