def test_create_ntt_prime_modulo(self): list1 = [14, 23, 63, 41, 12, 42, 75, 32] list2 = [14, 23, 63, 41, 12, 42, 75, 32] prime = nrconv.create_ntt_prime(list1, list2) mod = prime % 16 remainder = 1 self.assertEqual(mod, remainder)
def test_non_rectangular_convolution_rectangle_int_dot(self): list1 = [1, 1, 3, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 7, 1, 1] geometry = [(2, 5), (2, 5)] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_rectangle( list1, list2, geometry, prime) want = [21] self.assertEqual(result, want)
def test_non_rectangular_convolution_rectangle_full(self): list1 = [1, 1, 1, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(0, 0), (7, 7)] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_rectangle( list1, list2, geometry, prime) want = [1, 2, 3, 4, 5, 6, 7, 8, 7, 6, 5, 4, 3, 2, 1] self.assertEqual(result, want)
def test_non_rectangular_convolution_edge_diagonal1(self): list1 = [1, 1, 1, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(0, 0), (7, 7)] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_edge( list1, list2, geometry, prime) want = [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1] self.assertEqual(result, want)
def test_non_rectangular_convolution_rectangle_int_part(self): list1 = [1, 1, 1, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(1, 2), (4, 6)] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_rectangle( list1, list2, geometry, prime) want = [1, 2, 3, 4, 4, 3, 2, 1] self.assertEqual(result, want)
def test_non_rectangular_convolution_edge_offset(self): list1 = [1, 2, 3, 4, 5, 6, 7, 8] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(Fraction(1, 1), Fraction(7, 2)), (Fraction(7, 1), Fraction(1, 2))] prime = nrconv.create_ntt_prime(list1, list2) _, result = nrconv.convolution.non_rectangular_convolution_edge( list1, list2, geometry, prime) want = 2 self.assertEqual(result, want)
def test_non_rectangular_convolution_edge_vertical(self): list1 = [1, 2, 3, 4, 5, 6, 7, 8] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(Fraction(2, 1), Fraction(0, 1)), (Fraction(2, 1), Fraction(7, 1))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_edge( list1, list2, geometry, prime) want = [3, 3, 3, 3, 3, 3, 3, 3] self.assertEqual(result, want)
def test_non_rectangular_convolution_rectangle_frac_part(self): list1 = [1, 1, 1, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(Fraction(3, 4), Fraction(13, 2)), (Fraction(13, 3), Fraction(5, 3))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_rectangle( list1, list2, geometry, prime) want = [1, 2, 3, 4, 4, 3, 2, 1] self.assertEqual(result, want)
def test_non_rectangular_convolution_rectangle_frac_empty2(self): list1 = [1, 1, 3, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 7, 1, 1] geometry = [(Fraction(17, 8), Fraction(4, 3)), (Fraction(16, 3), Fraction(5, 3))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_rectangle( list1, list2, geometry, prime) want = [] self.assertEqual(result, want)
def test_non_rectangular_convolution_triangle_axis_aligned_degenerated1( self): list1 = [1, 2, 3, 4, 5, 6, 7, 8] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(4, 4), (4, 7), (4, 4)] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_triangle_axis_aligned( list1, list2, geometry, prime) want = [5, 5, 5, 5] self.assertEqual(result, want)
def test_non_rectangular_convolution_triangle_axis_aligned_small4(self): list1 = [0, 1, 2, 3, 4, 5, 6, 7] list2 = [0, 1, 2, 3, 4, 5, 6, 7] geometry = [(Fraction(39, 10), Fraction(32, 10)), (Fraction(39, 10), Fraction(28, 10)), (Fraction(42, 10), Fraction(28, 10))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_triangle_axis_aligned( list1, list2, geometry, prime) want = [12] self.assertEqual(result, want)
def test_non_rectangular_convolution_triangle_axis_aligned_large(self): list1 = [0, 1, 2, 3, 4, 5, 6, 7] list2 = [0, 1, 2, 3, 4, 5, 6, 7] geometry = [(Fraction(0, 1), Fraction(0, 1)), (Fraction(6, 1), Fraction(6, 1)), (Fraction(0, 1), Fraction(6, 1))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_triangle_axis_aligned( list1, list2, geometry, prime) want = [0, 0, 1, 2, 7, 10, 22, 28, 43, 38, 49, 30, 36] self.assertEqual(result, want)
def test_non_rectangular_convolution_convex_polygon_triangle(self): list1 = [1, 1, 1, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(Fraction(6, 1), Fraction(6, 1)), (Fraction(3, 1), Fraction(0, 1)), (Fraction(0, 1), Fraction(3, 1))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_convex_polygon( list1, list2, geometry, prime) want = [0, 0, 0, 4, 3, 2, 3, 2, 1, 2, 1, 0, 1] self.assertEqual(result, want)
def test_non_rectangular_convolution_triangle_case_1_2_2(self): list1 = [1, 1, 1, 1, 1, 1, 1, 1] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(Fraction(0, 1), Fraction(6, 1)), (Fraction(2, 1), Fraction(2, 1)), (Fraction(6, 1), Fraction(0, 1))] prime = nrconv.create_ntt_prime(list1, list2) result, _ = nrconv.convolution.non_rectangular_convolution_triangle( list1, list2, geometry, prime) want = [0, 0, 0, 0, 1, 4, 7, 0, 0, 0, 0, 0, 0] self.assertEqual(result, want)
def test_non_rectangular_convolution_triangle_axis_aligned_degenerated_offset( self): list1 = [1, 2, 3, 4, 5, 6, 7, 8] list2 = [1, 1, 1, 1, 1, 1, 1, 1] geometry = [(Fraction(4, 3), Fraction(8, 2)), (Fraction(19, 4), Fraction(4, 1)), (Fraction(8, 6), Fraction(12, 3))] prime = nrconv.create_ntt_prime(list1, list2) _, result = nrconv.convolution.non_rectangular_convolution_triangle_axis_aligned( list1, list2, geometry, prime) want = 6 self.assertEqual(result, want)
def test_non_rectangular_convolution_triangle_axis_aligned_big_offset( self): list1 = [0, 1, 2, 3, 4, 5, 6, 7] list2 = [0, 1, 2, 3, 4, 5, 6, 7] geometry = [(Fraction(0, 1), Fraction(0, 1)), (Fraction(6, 1), Fraction(6, 1)), (Fraction(0, 1), Fraction(6, 1))] prime = nrconv.create_ntt_prime(list1, list2) _, result = nrconv.convolution.non_rectangular_convolution_triangle_axis_aligned( list1, list2, geometry, prime) want = 0 self.assertEqual(result, want)
def test_create_ntt_prime_size(self): list1 = [42, 42, 42, 42, 42, 42, 42, 42, 42] list2 = [42, 42, 42, 42, 42, 42, 42, 42, 42] prime = nrconv.create_ntt_prime(list1, list2) self.assertGreaterEqual(prime, 15876 * 2 + 1)
def test_create_ntt_prime_size(self): list1 = [14, 23, 63, 41, 12, 42, 75, 32, 21] list2 = [14, 23, 63, 41, 12, 42, 75, 32, 21] prime = nrconv.create_ntt_prime(list1, list2) self.assertGreaterEqual(prime, 15098 * 2 + 1)
def test_create_ntt_prime_primality2(self): list1 = [14, 23, 63, 41, 12, 42, 75, 32, 21] list2 = [14, 23, 63, 41, 12, 42, 75, 32, 21] prime = nrconv.create_ntt_prime(list1, list2) self.assertTrue(sympy.ntheory.primetest.isprime(prime))
def test_create_ntt_prime_primality1(self): list1 = [1, 2, 3, 4, 5, 6, 7, 8] list2 = [8, 7, 6, 5, 4, 3, 2, 1] prime = nrconv.create_ntt_prime(list1, list2) self.assertTrue(sympy.ntheory.primetest.isprime(prime))