mirror of
https://github.com/arnaucube/poulpy.git
synced 2026-02-10 13:16:44 +01:00
87 lines
1.7 KiB
Rust
87 lines
1.7 KiB
Rust
use base2k::module::{BACKEND, Module};
|
|
|
|
pub struct ParametersLiteral {
|
|
pub backend: BACKEND,
|
|
pub log_n: usize,
|
|
pub log_q: usize,
|
|
pub log_p: usize,
|
|
pub log_base2k: usize,
|
|
pub log_scale: usize,
|
|
pub xe: f64,
|
|
pub xs: usize,
|
|
}
|
|
|
|
pub struct Parameters {
|
|
log_n: usize,
|
|
log_q: usize,
|
|
log_p: usize,
|
|
log_scale: usize,
|
|
log_base2k: usize,
|
|
xe: f64,
|
|
xs: usize,
|
|
module: Module,
|
|
}
|
|
|
|
impl Parameters {
|
|
pub fn new(p: &ParametersLiteral) -> Self {
|
|
assert!(
|
|
p.log_n + 2 * p.log_base2k <= 53,
|
|
"invalid parameters: p.log_n + 2*p.log_base2k > 53"
|
|
);
|
|
Self {
|
|
log_n: p.log_n,
|
|
log_q: p.log_q,
|
|
log_p: p.log_p,
|
|
log_scale: p.log_scale,
|
|
log_base2k: p.log_base2k,
|
|
xe: p.xe,
|
|
xs: p.xs,
|
|
module: Module::new(1 << p.log_n, p.backend),
|
|
}
|
|
}
|
|
|
|
pub fn n(&self) -> usize {
|
|
1 << self.log_n
|
|
}
|
|
|
|
pub fn log_scale(&self) -> usize {
|
|
self.log_scale
|
|
}
|
|
|
|
pub fn log_q(&self) -> usize {
|
|
self.log_q
|
|
}
|
|
|
|
pub fn log_p(&self) -> usize {
|
|
self.log_p
|
|
}
|
|
|
|
pub fn log_qp(&self) -> usize {
|
|
self.log_q + self.log_p
|
|
}
|
|
|
|
pub fn cols_q(&self) -> usize {
|
|
(self.log_q + self.log_base2k - 1) / self.log_base2k
|
|
}
|
|
|
|
pub fn cols_qp(&self) -> usize {
|
|
(self.log_q + self.log_p + self.log_base2k - 1) / self.log_base2k
|
|
}
|
|
|
|
pub fn log_base2k(&self) -> usize {
|
|
self.log_base2k
|
|
}
|
|
|
|
pub fn module(&self) -> &Module {
|
|
&self.module
|
|
}
|
|
|
|
pub fn xe(&self) -> f64 {
|
|
self.xe
|
|
}
|
|
|
|
pub fn xs(&self) -> usize {
|
|
self.xs
|
|
}
|
|
}
|