Пример #1
0
 def test_best_match_float_int_complex(self):
     ores = OverloadResolver('j')
     ores.extend_overloads(['(A... * float64, A... * float64) -> A... * float64',
                            '(A... * complex[float32], A... * complex[float32]) -> A... * complex[float32]'])
     d1, d2 = dshapes('3 * float64', 'int32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 0)
     self.assertEqual(match,
                      dshape('(3 * float64, float64) -> 3 * float64')[0])
Пример #2
0
 def test_best_match_int_float32_vs_float64(self):
     ores = OverloadResolver('k')
     ores.extend_overloads(['(A... * float32) -> A... * float32',
                            '(A... * float64) -> A... * float64'])
     d1 = dshape('3 * int32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1]))
     self.assertEqual(idx, 1)
     self.assertEqual(match,
                      dshape('(3 * float64) -> 3 * float64')[0])
Пример #3
0
 def test_best_match_int32_float32_ufunc_promotion(self):
     ores = OverloadResolver('m')
     ores.extend_overloads(['(A... * int32, A... * int32) -> A... * int32',
                            '(A... * float32, A... * float32) -> A... * float32',
                            '(A... * float64, A... * float64) -> A... * float64'])
     d1, d2 = dshapes('3 * int32', '3 * float32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 2)
     self.assertEqual(match,
                      dshape('(3 * float64, 3 * float64) -> 3 * float64')[0])
Пример #4
0
 def test_best_match_ellipses(self):
     ores = OverloadResolver('g')
     ores.extend_overloads(['(X * Y * float32, X * Y * float32) -> X * int32',
                            '(X * Y * float32, ... * float32) -> X * int32'])
     d1 = dshape('10 * var * int32')
     d2 = dshape('3 * float32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 1)
     self.assertEqual(match,
                      dshape('(10 * var * float32, 3 * float32) -> 10 * int32')[0])
Пример #5
0
 def test_best_match_int_float32_vs_float64(self):
     ores = OverloadResolver('k')
     ores.extend_overloads([
         '(A... * float32) -> A... * float32',
         '(A... * float64) -> A... * float64'
     ])
     d1 = dshape('3 * int32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1]))
     self.assertEqual(idx, 1)
     self.assertEqual(match, dshape('(3 * float64) -> 3 * float64')[0])
Пример #6
0
 def test_best_match_typevar_dims(self):
     ores = OverloadResolver('f')
     ores.extend_overloads(['(X * Y * float32, X * Y * float32) -> X * Y * float32',
                            '(X * Y * complex[float32], X * Y * complex[float32]) -> X * Y * complex[float32]',
                            '(X * Y * complex[float64], X * Y * complex[float64]) -> X * Y * complex[float64]'])
     d1 = dshape('3 * 10 * complex[float32]')
     d2 = dshape('3 * 10 * float32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 1)
     self.assertEqual(match,
                      dshape('(3 * 10 * complex[float32], 3 * 10 * complex[float32]) -> 3 * 10 * complex[float32]')[0])
Пример #7
0
 def test_best_match_float_int_complex(self):
     ores = OverloadResolver('j')
     ores.extend_overloads([
         '(A... * float64, A... * float64) -> A... * float64',
         '(A... * complex[float32], A... * complex[float32]) -> A... * complex[float32]'
     ])
     d1, d2 = dshapes('3 * float64', 'int32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 0)
     self.assertEqual(match,
                      dshape('(3 * float64, float64) -> 3 * float64')[0])
Пример #8
0
 def test_best_match_int32_float32_ufunc_promotion(self):
     ores = OverloadResolver('m')
     ores.extend_overloads([
         '(A... * int32, A... * int32) -> A... * int32',
         '(A... * float32, A... * float32) -> A... * float32',
         '(A... * float64, A... * float64) -> A... * float64'
     ])
     d1, d2 = dshapes('3 * int32', '3 * float32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 2)
     self.assertEqual(
         match,
         dshape('(3 * float64, 3 * float64) -> 3 * float64')[0])
Пример #9
0
 def test_best_match_ellipses(self):
     ores = OverloadResolver('g')
     ores.extend_overloads([
         '(X * Y * float32, X * Y * float32) -> X * int32',
         '(X * Y * float32, ... * float32) -> X * int32'
     ])
     d1 = dshape('10 * var * int32')
     d2 = dshape('3 * float32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 1)
     self.assertEqual(
         match,
         dshape('(10 * var * float32, 3 * float32) -> 10 * int32')[0])
Пример #10
0
 def test_best_match_signed_vs_unsigned(self):
     ores = OverloadResolver('h')
     ores.extend_overloads(['(A... * int64) -> A... * int64',
                            '(A... * uint64) -> A... * uint64'])
     d1 = dshape('10 * 3 * int64')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1]))
     self.assertEqual(idx, 0)
     self.assertEqual(match,
                      dshape('(10 * 3 * int64) -> 10 * 3 * int64')[0])
     d1 = dshape('4 * 5 * uint64')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1]))
     self.assertEqual(idx, 1)
     self.assertEqual(match,
                      dshape('(4 * 5 * uint64) -> 4 * 5 * uint64')[0])
Пример #11
0
 def test_best_match_typevar_dims(self):
     ores = OverloadResolver('f')
     ores.extend_overloads([
         '(X * Y * float32, X * Y * float32) -> X * Y * float32',
         '(X * Y * complex[float32], X * Y * complex[float32]) -> X * Y * complex[float32]',
         '(X * Y * complex[float64], X * Y * complex[float64]) -> X * Y * complex[float64]'
     ])
     d1 = dshape('3 * 10 * complex[float32]')
     d2 = dshape('3 * 10 * float32')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1, d2]))
     self.assertEqual(idx, 1)
     self.assertEqual(
         match,
         dshape(
             '(3 * 10 * complex[float32], 3 * 10 * complex[float32]) -> 3 * 10 * complex[float32]'
         )[0])
Пример #12
0
 def test_best_match_signed_vs_unsigned(self):
     ores = OverloadResolver('h')
     ores.extend_overloads([
         '(A... * int64) -> A... * int64',
         '(A... * uint64) -> A... * uint64'
     ])
     d1 = dshape('10 * 3 * int64')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1]))
     self.assertEqual(idx, 0)
     self.assertEqual(match,
                      dshape('(10 * 3 * int64) -> 10 * 3 * int64')[0])
     d1 = dshape('4 * 5 * uint64')
     idx, match = ores.resolve_overload(coretypes.Tuple([d1]))
     self.assertEqual(idx, 1)
     self.assertEqual(match,
                      dshape('(4 * 5 * uint64) -> 4 * 5 * uint64')[0])