コード例 #1
0
ファイル: test_typeinfer.py プロジェクト: zhaijf1992/numba
 def test_set(self):
     # Different reflections
     aty = types.Set(i16, reflected=True)
     bty = types.Set(i32)
     cty = types.Set(i32, reflected=True)
     self.assert_unify(aty, bty, cty)
     # Incompatible dtypes
     aty = types.Set(i16)
     bty = types.Set(types.Tuple([i16]))
     self.assert_unify_failure(aty, bty)
コード例 #2
0
 def generic(self, args, kws):
     assert not kws
     if args:
         # set(iterable)
         iterable, = args
         if isinstance(iterable, types.IterableType):
             dtype = iterable.iterator_type.yield_type
             if isinstance(dtype, types.Hashable):
                 return signature(types.Set(dtype), iterable)
     else:
         # set()
         return signature(types.Set(types.undefined))
コード例 #3
0
 def test_sets(self):
     v = set([1.0, 2.0, 3.0])
     self.assertEqual(typeof(v), types.Set(types.float64, reflected=True))
     v = frozenset(v)
     with self.assertRaises(ValueError) as raises:
         typeof(v)
     self.assertIn("Cannot determine Numba type of", str(raises.exception))
コード例 #4
0
ファイル: typeof.py プロジェクト: stuartarchibald/numba
def _typeof_set(val, c):
    if len(val) == 0:
        raise ValueError("Cannot type empty set")
    item = next(iter(val))
    ty = typeof_impl(item, c)
    if ty is None:
        raise ValueError(f"Cannot type set element type {type(item)}")
    return types.Set(ty, reflected=True)
コード例 #5
0
    def _builtin_infer(self, py_type):
        # The type hierarchy of python typing library changes in 3.7.
        generic_type_check = _py_version_switch(
            (3, 7),
            lambda x: isinstance(x, py_typing._GenericAlias),
            lambda _: True,
        )
        if not generic_type_check(py_type):
            return

        list_origin = _py_version_switch((3, 7), list, py_typing.List)
        dict_origin = _py_version_switch((3, 7), dict, py_typing.Dict)
        set_origin = _py_version_switch((3, 7), set, py_typing.Set)
        tuple_origin = _py_version_switch((3, 7), tuple, py_typing.Tuple)

        if getattr(py_type, "__origin__", None) is py_typing.Union:
            if len(py_type.__args__) != 2:
                raise errors.TypingError(
                    "Cannot type Union of more than two types")

            (arg_1_py, arg_2_py) = py_type.__args__

            if arg_2_py is type(None):  # noqa: E721
                return types.Optional(self.infer(arg_1_py))
            elif arg_1_py is type(None):  # noqa: E721
                return types.Optional(self.infer(arg_2_py))
            else:
                raise errors.TypingError(
                    "Cannot type Union that is not an Optional "
                    f"(neither type type {arg_2_py} is not NoneType")

        if getattr(py_type, "__origin__", None) is list_origin:
            (element_py, ) = py_type.__args__
            return types.ListType(self.infer(element_py))

        if getattr(py_type, "__origin__", None) is dict_origin:
            key_py, value_py = py_type.__args__
            return types.DictType(self.infer(key_py), self.infer(value_py))

        if getattr(py_type, "__origin__", None) is set_origin:
            (element_py, ) = py_type.__args__
            return types.Set(self.infer(element_py))

        if getattr(py_type, "__origin__", None) is tuple_origin:
            tys = tuple(map(self.infer, py_type.__args__))
            return types.BaseTuple.from_types(tys)
コード例 #6
0
 def test_nested_containers(self):
     IntList = py_typing.List[int]
     self.assertEqual(
         as_numba_type(py_typing.List[IntList]),
         types.ListType(types.ListType(self.int_nb_type)),
     )
     self.assertEqual(
         as_numba_type(py_typing.List[py_typing.Dict[float, bool]]),
         types.ListType(
             types.DictType(self.float_nb_type, self.bool_nb_type)),
     )
     self.assertEqual(
         as_numba_type(
             py_typing.Set[py_typing.Tuple[py_typing.Optional[int],
                                           float]]),
         types.Set(
             types.Tuple(
                 [types.Optional(self.int_nb_type), self.float_nb_type])),
     )
コード例 #7
0
 def test_single_containers(self):
     self.assertEqual(
         as_numba_type(py_typing.List[float]),
         types.ListType(self.float_nb_type),
     )
     self.assertEqual(
         as_numba_type(py_typing.Dict[float, str]),
         types.DictType(self.float_nb_type, self.str_nb_type),
     )
     self.assertEqual(
         as_numba_type(py_typing.Set[complex]),
         types.Set(self.complex_nb_type),
     )
     self.assertEqual(
         as_numba_type(py_typing.Tuple[float, float]),
         types.Tuple([self.float_nb_type, self.float_nb_type]),
     )
     self.assertEqual(
         as_numba_type(py_typing.Tuple[float, complex]),
         types.Tuple([self.float_nb_type, self.complex_nb_type]),
     )
コード例 #8
0
 def test_disallow_set(self):
     self.assert_disallow_key(types.Set(types.intp))
     self.assert_disallow_value(types.Set(types.intp))
コード例 #9
0
ファイル: typeof.py プロジェクト: ArtShp/DataScience
def _typeof_set(val, c):
    if len(val) == 0:
        raise ValueError("Cannot type empty set")
    item = next(iter(val))
    ty = typeof_impl(item, c)
    return types.Set(ty, reflected=True)
コード例 #10
0
 def test_sets(self):
     v = set([1.0, 2.0, 3.0])
     self.assertEqual(typeof(v), types.Set(types.float64, reflected=True))
     v = frozenset(v)
     with self.assertRaises(ValueError):
         typeof(v)