Skip to content

Commit 86af22b

Browse files
authored
Merge pull request #524 from qfall/remove-fq-ctx-object
Remove fq ctx object
2 parents f7cd02c + 92e5fb8 commit 86af22b

64 files changed

Lines changed: 808 additions & 1008 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/integer.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ mod z;
2323
pub use mat_poly_over_z::MatPolyOverZ;
2424
pub use mat_z::MatZ;
2525
pub use poly_over_z::PolyOverZ;
26+
pub(crate) use poly_over_z::fmpz_poly_helpers;
2627
pub use z::Z;
2728
pub(crate) use z::fmpz_helpers;

src/integer/mat_poly_over_z/arithmetic/mul.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl Mul<&MatPolynomialRingZq> for &MatPolyOverZ {
6767
/// use std::str::FromStr;
6868
///
6969
/// let mat_1 = MatPolyOverZ::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]]").unwrap();
70-
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 3 mod 17").unwrap();
70+
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 1 mod 17").unwrap();
7171
///
7272
/// let mat_3 = &mat_1 * &mat_2;
7373
/// ```
@@ -151,7 +151,7 @@ impl MatPolyOverZ {
151151
/// use std::str::FromStr;
152152
///
153153
/// let mat_1 = MatPolyOverZ::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]]").unwrap();
154-
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 3 mod 17").unwrap();
154+
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 1 mod 17").unwrap();
155155
///
156156
/// let mat_3 = &mat_1.mul_mat_poly_ring_zq_safe(&mat_2).unwrap();
157157
/// ```

src/integer/mat_poly_over_z/arithmetic/mul_scalar.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ mod test_mul_poly_ring_zq {
470470
/// Checks if scalar multiplication reduction works.
471471
#[test]
472472
fn reduction_correct() {
473-
let modulus = ModulusPolynomialRingZq::from_str("4 2 0 0 2 mod 17").unwrap();
473+
let modulus = ModulusPolynomialRingZq::from_str("4 1 0 0 1 mod 17").unwrap();
474474
let poly_mat1 = MatPolyOverZ::from_str("[[0, 1 10],[0, 2 1 2]]").unwrap();
475475
let poly = PolyOverZ::from(2);
476476
let poly_ring = PolynomialRingZq::from((&poly, &modulus));

src/integer/mat_poly_over_z/arithmetic/sub.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ impl Sub<&MatPolynomialRingZq> for &MatPolyOverZ {
108108
/// use std::str::FromStr;
109109
///
110110
/// let mat_1 = MatPolyOverZ::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]]").unwrap();
111-
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 3 mod 17").unwrap();
111+
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 1 mod 17").unwrap();
112112
///
113113
/// let mat_3 = &mat_1 - &mat_2;
114114
/// ```
@@ -192,7 +192,7 @@ impl MatPolyOverZ {
192192
/// use std::str::FromStr;
193193
///
194194
/// let mat_1 = MatPolyOverZ::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]]").unwrap();
195-
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 3 mod 17").unwrap();
195+
/// let mat_2 = MatPolynomialRingZq::from_str("[[2 1 42, 1 17],[1 8, 2 5 6]] / 3 1 2 1 mod 17").unwrap();
196196
///
197197
/// let mat_3 = &mat_1.sub_mat_poly_ring_zq_safe(&mat_2).unwrap();
198198
/// ```

src/integer/mat_poly_over_z/reduce.rs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ impl MatPolyOverZ {
4444
for j in 0..self.get_num_columns() {
4545
unsafe {
4646
let entry = fmpz_poly_mat_entry(&self.matrix, i, j);
47-
reduce_fmpz_poly_by_poly_over_z(entry, modulus);
47+
if (*entry).length > modulus.get_degree() {
48+
reduce_fmpz_poly_by_poly_over_z(&mut *entry, modulus);
49+
}
4850
}
4951
}
5052
}
@@ -94,4 +96,13 @@ mod test_reduce_by_poly {
9496
let cmp_mat = MatPolyOverZ::from_str("[[1 1, 1 1],[1 -1, 0]]").unwrap();
9597
assert_eq!(cmp_mat, a);
9698
}
99+
100+
/// Ensures that the zero polynomial does not cause problems.
101+
#[test]
102+
fn zero_polynomial() {
103+
let mut a = MatPolyOverZ::from_str("[[0, 0]]").unwrap();
104+
let modulus = PolyOverZ::from_str(&format!("2 {} 1", u64::MAX)).unwrap();
105+
106+
a.reduce_by_poly(&modulus);
107+
}
97108
}

src/integer/poly_over_z/arithmetic/sub.rs

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use crate::{
1919
};
2020
use flint_sys::{
2121
fmpq_poly::fmpq_poly_sub, fmpz_mod_poly::fmpz_mod_poly_sub, fmpz_poly::fmpz_poly_sub,
22-
fq::fq_sub,
2322
};
2423
use std::ops::{Sub, SubAssign};
2524

@@ -148,15 +147,8 @@ impl Sub<&PolynomialRingZq> for &PolyOverZ {
148147
/// let c: PolynomialRingZq = &b - &a;
149148
/// ```
150149
fn sub(self, other: &PolynomialRingZq) -> Self::Output {
151-
let mut out = PolynomialRingZq::from((&PolyOverZ::default(), &other.modulus));
152-
unsafe {
153-
fq_sub(
154-
&mut out.poly.poly,
155-
&self.poly,
156-
&other.poly.poly,
157-
other.modulus.get_fq_ctx(),
158-
);
159-
}
150+
let mut out = PolynomialRingZq::from((self, &other.modulus));
151+
out -= other;
160152
out
161153
}
162154
}
@@ -352,10 +344,10 @@ mod test_sub_poly_ring_zq {
352344
#[test]
353345
fn borrowed_correctness() {
354346
let poly_1 =
355-
PolynomialRingZq::from_str(&format!("2 2 {} / 4 1 2 3 4 mod {}", i64::MAX, u64::MAX))
347+
PolynomialRingZq::from_str(&format!("2 2 {} / 4 1 2 3 1 mod {}", i64::MAX, u64::MAX))
356348
.unwrap();
357349
let poly_2 = PolynomialRingZq::from_str(&format!(
358-
"2 -1 -{} / 4 1 2 3 4 mod {}",
350+
"2 -1 -{} / 4 1 2 3 1 mod {}",
359351
i64::MAX as u64 - 2,
360352
u64::MAX
361353
))
@@ -370,7 +362,7 @@ mod test_sub_poly_ring_zq {
370362
/// Checks if subtraction works fine for different types
371363
#[test]
372364
fn availability() {
373-
let poly = PolynomialRingZq::from_str("3 1 2 3 / 4 1 2 3 4 mod 17").unwrap();
365+
let poly = PolynomialRingZq::from_str("3 1 2 3 / 4 1 2 3 1 mod 17").unwrap();
374366
let z = PolyOverZ::from(2);
375367

376368
_ = z.clone() - poly.clone();

0 commit comments

Comments
 (0)