mirror of
https://github.com/zama-ai/concrete.git
synced 2026-02-17 16:11:26 -05:00
feat(compiler): setting v0 parameters from py bindings
This commit is contained in:
@@ -105,6 +105,35 @@ void mlir::concretelang::python::populateCompilerAPISubmodule(
|
||||
[](CompilationOptions &options, int security_level) {
|
||||
options.optimizerConfig.security = security_level;
|
||||
})
|
||||
.def("set_v0_parameter",
|
||||
[](CompilationOptions &options, size_t glweDimension,
|
||||
size_t logPolynomialSize, size_t nSmall, size_t brLevel,
|
||||
size_t brLogBase, size_t ksLevel, size_t ksLogBase) {
|
||||
options.v0Parameter = {glweDimension, logPolynomialSize, nSmall,
|
||||
brLevel, brLogBase, ksLevel,
|
||||
ksLogBase, std::nullopt};
|
||||
})
|
||||
.def("set_v0_parameter",
|
||||
[](CompilationOptions &options, size_t glweDimension,
|
||||
size_t logPolynomialSize, size_t nSmall, size_t brLevel,
|
||||
size_t brLogBase, size_t ksLevel, size_t ksLogBase,
|
||||
mlir::concretelang::CRTDecomposition crtDecomposition,
|
||||
size_t cbsLevel, size_t cbsLogBase, size_t pksLevel,
|
||||
size_t pksLogBase, size_t pksInputLweDimension,
|
||||
size_t pksOutputPolynomialSize) {
|
||||
mlir::concretelang::PackingKeySwitchParameter pksParam = {
|
||||
pksInputLweDimension, pksOutputPolynomialSize, pksLevel,
|
||||
pksLogBase};
|
||||
mlir::concretelang::CitcuitBoostrapParameter crbParam = {
|
||||
cbsLevel, cbsLogBase};
|
||||
mlir::concretelang::WopPBSParameter wopPBSParam = {pksParam,
|
||||
crbParam};
|
||||
mlir::concretelang::LargeIntegerParameter largeIntegerParam = {
|
||||
crtDecomposition, wopPBSParam};
|
||||
options.v0Parameter = {glweDimension, logPolynomialSize, nSmall,
|
||||
brLevel, brLogBase, ksLevel,
|
||||
ksLogBase, largeIntegerParam};
|
||||
})
|
||||
.def("simulation", [](CompilationOptions &options, bool simulate) {
|
||||
options.simulate = simulate;
|
||||
});
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
"""CompilationOptions."""
|
||||
|
||||
from typing import List
|
||||
|
||||
# pylint: disable=no-name-in-module,import-error
|
||||
from mlir._mlir_libs._concretelang._compiler import (
|
||||
CompilationOptions as _CompilationOptions,
|
||||
@@ -212,6 +214,142 @@ class CompilationOptions(WrapperCpp):
|
||||
raise TypeError("can't set security_level to a non-int value")
|
||||
self.cpp().set_security_level(security_level)
|
||||
|
||||
def set_v0_parameter(
|
||||
self,
|
||||
glwe_dim: int,
|
||||
log_poly_size: int,
|
||||
n_small: int,
|
||||
br_level: int,
|
||||
br_log_base: int,
|
||||
ks_level: int,
|
||||
ks_log_base: int,
|
||||
):
|
||||
"""Set the basic V0 parameters.
|
||||
|
||||
Args:
|
||||
glwe_dim (int): GLWE dimension
|
||||
log_poly_size (int): log of polynomial size
|
||||
n_small (int): n
|
||||
br_level (int): bootstrap level
|
||||
br_log_base (int): bootstrap base log
|
||||
ks_level (int): keyswitch level
|
||||
ks_log_base (int): keyswitch base log
|
||||
|
||||
Raises:
|
||||
TypeError: if parameters are not of type int
|
||||
"""
|
||||
if not isinstance(glwe_dim, int):
|
||||
raise TypeError("glwe_dim need to be an integer")
|
||||
if not isinstance(log_poly_size, int):
|
||||
raise TypeError("log_poly_size need to be an integer")
|
||||
if not isinstance(n_small, int):
|
||||
raise TypeError("n_small need to be an integer")
|
||||
if not isinstance(br_level, int):
|
||||
raise TypeError("br_level need to be an integer")
|
||||
if not isinstance(br_log_base, int):
|
||||
raise TypeError("br_log_base need to be an integer")
|
||||
if not isinstance(ks_level, int):
|
||||
raise TypeError("ks_level need to be an integer")
|
||||
if not isinstance(ks_log_base, int):
|
||||
raise TypeError("ks_log_base need to be an integer")
|
||||
self.cpp().set_v0_parameter(
|
||||
glwe_dim,
|
||||
log_poly_size,
|
||||
n_small,
|
||||
br_level,
|
||||
br_log_base,
|
||||
ks_level,
|
||||
ks_log_base,
|
||||
)
|
||||
|
||||
# pylint: disable=too-many-arguments,too-many-branches
|
||||
|
||||
def set_all_v0_parameter(
|
||||
self,
|
||||
glwe_dim: int,
|
||||
log_poly_size: int,
|
||||
n_small: int,
|
||||
br_level: int,
|
||||
br_log_base: int,
|
||||
ks_level: int,
|
||||
ks_log_base: int,
|
||||
crt_decomp: List[int],
|
||||
cbs_level: int,
|
||||
cbs_log_base: int,
|
||||
pks_level: int,
|
||||
pks_log_base: int,
|
||||
pks_input_lwe_dim: int,
|
||||
pks_output_poly_size: int,
|
||||
):
|
||||
"""Set all the V0 parameters.
|
||||
|
||||
Args:
|
||||
glwe_dim (int): GLWE dimension
|
||||
log_poly_size (int): log of polynomial size
|
||||
n_small (int): n
|
||||
br_level (int): bootstrap level
|
||||
br_log_base (int): bootstrap base log
|
||||
ks_level (int): keyswitch level
|
||||
ks_log_base (int): keyswitch base log
|
||||
crt_decomp (List[int]): CRT decomposition vector
|
||||
cbs_level (int): circuit bootstrap level
|
||||
cbs_log_base (int): circuit bootstrap base log
|
||||
pks_level (int): packing keyswitch level
|
||||
pks_log_base (int): packing keyswitch base log
|
||||
pks_input_lwe_dim (int): packing keyswitch input LWE dimension
|
||||
pks_output_poly_size (int): packing keyswitch output polynomial size
|
||||
|
||||
Raises:
|
||||
TypeError: if parameters are not of type int
|
||||
"""
|
||||
if not isinstance(glwe_dim, int):
|
||||
raise TypeError("glwe_dim need to be an integer")
|
||||
if not isinstance(log_poly_size, int):
|
||||
raise TypeError("log_poly_size need to be an integer")
|
||||
if not isinstance(n_small, int):
|
||||
raise TypeError("n_small need to be an integer")
|
||||
if not isinstance(br_level, int):
|
||||
raise TypeError("br_level need to be an integer")
|
||||
if not isinstance(br_log_base, int):
|
||||
raise TypeError("br_log_base need to be an integer")
|
||||
if not isinstance(ks_level, int):
|
||||
raise TypeError("ks_level need to be an integer")
|
||||
if not isinstance(ks_log_base, int):
|
||||
raise TypeError("ks_log_base need to be an integer")
|
||||
if not isinstance(crt_decomp, list):
|
||||
raise TypeError("crt_decomp need to be a list of integers")
|
||||
if not isinstance(cbs_level, int):
|
||||
raise TypeError("cbs_level need to be an integer")
|
||||
if not isinstance(cbs_log_base, int):
|
||||
raise TypeError("cbs_log_base need to be an integer")
|
||||
if not isinstance(pks_level, int):
|
||||
raise TypeError("pks_level need to be an integer")
|
||||
if not isinstance(pks_log_base, int):
|
||||
raise TypeError("pks_log_base need to be an integer")
|
||||
if not isinstance(pks_input_lwe_dim, int):
|
||||
raise TypeError("pks_input_lwe_dim need to be an integer")
|
||||
if not isinstance(pks_output_poly_size, int):
|
||||
raise TypeError("pks_output_poly_size need to be an integer")
|
||||
self.cpp().set_v0_parameter(
|
||||
glwe_dim,
|
||||
log_poly_size,
|
||||
n_small,
|
||||
br_level,
|
||||
br_log_base,
|
||||
ks_level,
|
||||
ks_log_base,
|
||||
crt_decomp,
|
||||
cbs_level,
|
||||
cbs_log_base,
|
||||
pks_level,
|
||||
pks_log_base,
|
||||
pks_input_lwe_dim,
|
||||
pks_output_poly_size,
|
||||
)
|
||||
|
||||
# pylint: enable=too-many-arguments,too-many-branches
|
||||
|
||||
|
||||
def simulation(self, simulate: bool):
|
||||
"""Enable or disable simulation.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user