def test_omitted_args(self): ty0 = typeof(OmittedArg(0.0)) ty1 = typeof(OmittedArg(1)) ty2 = typeof(OmittedArg(1.0)) ty3 = typeof(OmittedArg(1.0)) self.assertEqual(ty0, types.Omitted(0.0)) self.assertEqual(ty1, types.Omitted(1)) self.assertEqual(ty2, types.Omitted(1.0)) self.assertEqual(len({ty0, ty1, ty2}), 3) self.assertEqual(ty3, ty2)
def test_omitted_args(self): distinct = DistinctChecker() v0 = OmittedArg(0.0) v1 = OmittedArg(1.0) v2 = OmittedArg(1) s = compute_fingerprint(v0) self.assertEqual(compute_fingerprint(v1), s) distinct.add(s) distinct.add(compute_fingerprint(v2)) distinct.add(compute_fingerprint(0.0)) distinct.add(compute_fingerprint(1))
def __init__(self, py_func, sigs, targetoptions): self.py_func = py_func self.sigs = [] self.link = targetoptions.pop( 'link', (), ) self._can_compile = True # Specializations for given sets of argument types self.specializations = {} # A mapping of signatures to compile results self.overloads = collections.OrderedDict() self.targetoptions = targetoptions # defensive copy self.targetoptions['extensions'] = \ list(self.targetoptions.get('extensions', [])) from .descriptor import cuda_target self.typingctx = cuda_target.typingctx self._tm = default_type_manager pysig = utils.pysignature(py_func) arg_count = len(pysig.parameters) argnames = tuple(pysig.parameters) default_values = self.py_func.__defaults__ or () defargs = tuple(OmittedArg(val) for val in default_values) can_fallback = False # CUDA cannot fallback to object mode try: lastarg = list(pysig.parameters.values())[-1] except IndexError: has_stararg = False else: has_stararg = lastarg.kind == lastarg.VAR_POSITIONAL exact_match_required = False _dispatcher.Dispatcher.__init__(self, self._tm.get_pointer(), arg_count, self._fold_args, argnames, defargs, can_fallback, has_stararg, exact_match_required) if sigs: if len(sigs) > 1: raise TypeError("Only one signature supported at present") self.compile(sigs[0]) self._can_compile = False
def __init__(self, py_func, sigs, targetoptions): self.py_func = py_func self.sigs = [] self.link = targetoptions.pop( 'link', (), ) self._can_compile = True self._type = self._numba_type_ # The compiling counter is only used when compiling device functions as # it is used to detect recursion - recursion is not possible when # compiling a kernel. self._compiling_counter = CompilingCounter() # Specializations for given sets of argument types self.specializations = {} # A mapping of signatures to compile results self.overloads = collections.OrderedDict() self.targetoptions = targetoptions # defensive copy self.targetoptions['extensions'] = \ list(self.targetoptions.get('extensions', [])) self.typingctx = self.targetdescr.typing_context self._tm = default_type_manager pysig = utils.pysignature(py_func) arg_count = len(pysig.parameters) argnames = tuple(pysig.parameters) default_values = self.py_func.__defaults__ or () defargs = tuple(OmittedArg(val) for val in default_values) can_fallback = False # CUDA cannot fallback to object mode try: lastarg = list(pysig.parameters.values())[-1] except IndexError: has_stararg = False else: has_stararg = lastarg.kind == lastarg.VAR_POSITIONAL exact_match_required = False _dispatcher.Dispatcher.__init__(self, self._tm.get_pointer(), arg_count, self._fold_args, argnames, defargs, can_fallback, has_stararg, exact_match_required) if sigs: if len(sigs) > 1: raise TypeError("Only one signature supported at present") if targetoptions.get('device'): argtypes, restype = sigutils.normalize_signature(sigs[0]) self.compile_device(argtypes) else: self.compile(sigs[0]) self._can_compile = False if targetoptions.get('device'): self._register_device_function()