gallois py interface
This commit is contained in:
parent
8a69fa04d1
commit
e7e393293a
|
@ -55,6 +55,7 @@ fn register_math_module(py: Python, parent_module: &PyModule) -> PyResult<()> {
|
||||||
math_module.add_function(wrap_pyfunction!(math::gcd::gcd, math_module)?)?;
|
math_module.add_function(wrap_pyfunction!(math::gcd::gcd, math_module)?)?;
|
||||||
math_module.add_function(wrap_pyfunction!(math::gcd::egcd, math_module)?)?;
|
math_module.add_function(wrap_pyfunction!(math::gcd::egcd, math_module)?)?;
|
||||||
math_module.add_function(wrap_pyfunction!(math::factorise::prime_factors , math_module)?)?;
|
math_module.add_function(wrap_pyfunction!(math::factorise::prime_factors , math_module)?)?;
|
||||||
|
math_module.add_class::<math::gallois::GalloisFiled>()?;
|
||||||
parent_module.add_submodule(math_module)?;
|
parent_module.add_submodule(math_module)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ use core::fmt;
|
||||||
|
|
||||||
use num::Integer;
|
use num::Integer;
|
||||||
|
|
||||||
use pyo3::prelude::*;
|
use pyo3::{prelude::*, exceptions::PyValueError};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
@ -308,6 +308,12 @@ impl GalloisFiled {
|
||||||
return GalloisFiled::new(base, verbose);
|
return GalloisFiled::new(base, verbose);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[pyo3(name="pow")]
|
||||||
|
/// calculate the exponent of a base in the field
|
||||||
|
pub fn py_pow(&self, base: u128, exp: u128) -> u128 {
|
||||||
|
return self.pow(base, exp);
|
||||||
|
}
|
||||||
|
|
||||||
#[pyo3(name="reduce")]
|
#[pyo3(name="reduce")]
|
||||||
/// reduce any int
|
/// reduce any int
|
||||||
pub fn py_reduce(&self, n: i128) -> u128 {
|
pub fn py_reduce(&self, n: i128) -> u128 {
|
||||||
|
@ -316,7 +322,36 @@ impl GalloisFiled {
|
||||||
}
|
}
|
||||||
return self.reduce(n as u128);
|
return self.reduce(n as u128);
|
||||||
}
|
}
|
||||||
// TODO implement wrappers for all other gallois methods
|
|
||||||
|
#[pyo3(name="a_inverse")]
|
||||||
|
/// find the additive inverse of a number
|
||||||
|
pub fn py_a_inverse(&self, n: u128) -> u128 {
|
||||||
|
return self.a_inverse(n)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pyo3(name="sqrt")]
|
||||||
|
/// calculate the square root of a number in a field
|
||||||
|
pub fn py_sqrt(&self, a: u128) -> PyResult<(u128, u128)> {
|
||||||
|
match self.sqrt(a) {
|
||||||
|
Ok(v) => Ok(v),
|
||||||
|
Err(e) => {
|
||||||
|
let py_e = PyValueError::new_err(e.to_string());
|
||||||
|
return Err(py_e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[pyo3(name="inverse")]
|
||||||
|
/// get multiplicative inverse
|
||||||
|
pub fn py_inverse(&self, n: u128) -> PyResult<u128> {
|
||||||
|
match self.inverse(n) {
|
||||||
|
Ok(v) => Ok(v),
|
||||||
|
Err(e) => {
|
||||||
|
let py_e = PyValueError::new_err(e.to_string());
|
||||||
|
return Err(py_e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
Loading…
Reference in New Issue