Example #1
0
 def typeof_pyval(self, val):
     """
     Resolve the Numba type of Python value *val*.
     This is called from numba._dispatcher as a fallback if the native code
     cannot decide the type.
     """
     # Not going through the resolve_argument_type() indirection
     # can shape a couple µs.
     tp = typeof(val)
     if tp is None:
         tp = types.pyobject
     return tp
Example #2
0
 def typeof_pyval(self, val):
     """
     Resolve the Numba type of Python value *val*.
     This is called from numba._dispatcher as a fallback if the native code
     cannot decide the type.
     """
     # Not going through the resolve_argument_type() indirection
     # can shape a couple µs.
     tp = typeof(val)
     if tp is None:
         tp = types.pyobject
     return tp
Example #3
0
 def _compile_for_args(self, *args, **kws):
     """
     For internal use.  Compile a specialized version of the function
     for the given *args* and *kws*, and return the resulting callable.
     """
     assert not kws
     argtypes = []
     for a in args:
         if isinstance(a, OmittedArg):
             argtypes.append(types.Omitted(a.value))
         else:
             argtypes.append(self.typeof_pyval(a))
     try:
         return self.compile(tuple(argtypes))
     except errors.TypingError as e:
         # Intercept typing error that may be due to an argument
         # that failed inferencing as a Numba type
         failed_args = []
         for i, arg in enumerate(args):
             val = arg.value if isinstance(arg, OmittedArg) else arg
             try:
                 tp = typeof(val, Purpose.argument)
             except ValueError as typeof_exc:
                 failed_args.append((i, str(typeof_exc)))
             else:
                 if tp is None:
                     failed_args.append(
                         (i,
                          "cannot determine Numba type of value %r" % (val,)))
         if failed_args:
             # Patch error message to ease debugging
             msg = str(e).rstrip() + (
                 "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                 % "\n".join("- argument %d: %s" % (i, err)
                             for i, err in failed_args))
             e.patch_message(msg)
         raise e
Example #4
0
 def _compile_for_args(self, *args, **kws):
     """
     For internal use.  Compile a specialized version of the function
     for the given *args* and *kws*, and return the resulting callable.
     """
     assert not kws
     argtypes = []
     for a in args:
         if isinstance(a, OmittedArg):
             argtypes.append(types.Omitted(a.value))
         else:
             argtypes.append(self.typeof_pyval(a))
     try:
         return self.compile(tuple(argtypes))
     except errors.TypingError as e:
         # Intercept typing error that may be due to an argument
         # that failed inferencing as a Numba type
         failed_args = []
         for i, arg in enumerate(args):
             val = arg.value if isinstance(arg, OmittedArg) else arg
             try:
                 tp = typeof(val, Purpose.argument)
             except ValueError as typeof_exc:
                 failed_args.append((i, str(typeof_exc)))
             else:
                 if tp is None:
                     failed_args.append(
                         (i,
                          "cannot determine Numba type of value %r" % (val,)))
         if failed_args:
             # Patch error message to ease debugging
             msg = str(e).rstrip() + (
                 "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                 % "\n".join("- argument %d: %s" % (i, err)
                             for i, err in failed_args))
             e.patch_message(msg)
         raise e
Example #5
0
    def _compile_for_args(self, *args, **kws):
        """
        For internal use.  Compile a specialized version of the function
        for the given *args* and *kws*, and return the resulting callable.
        """
        assert not kws

        def error_rewrite(e, issue_type):
            """
            Rewrite and raise Exception `e` with help supplied based on the
            specified issue_type.
            """
            if config.SHOW_HELP:
                help_msg = errors.error_extras[issue_type]
                e.patch_message(''.join(e.args) + help_msg)
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)

        argtypes = []
        for a in args:
            if isinstance(a, OmittedArg):
                argtypes.append(types.Omitted(a.value))
            else:
                argtypes.append(self.typeof_pyval(a))
        try:
            return self.compile(tuple(argtypes))
        except errors.TypingError as e:
            # Intercept typing error that may be due to an argument
            # that failed inferencing as a Numba type
            failed_args = []
            for i, arg in enumerate(args):
                val = arg.value if isinstance(arg, OmittedArg) else arg
                try:
                    tp = typeof(val, Purpose.argument)
                except ValueError as typeof_exc:
                    failed_args.append((i, str(typeof_exc)))
                else:
                    if tp is None:
                        failed_args.append(
                            (i, "cannot determine Numba type of value %r" %
                             (val, )))
            if failed_args:
                # Patch error message to ease debugging
                msg = str(e).rstrip() + (
                    "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                    % "\n".join("- argument %d: %s" % (i, err)
                                for i, err in failed_args))
                e.patch_message(msg)

            error_rewrite(e, 'typing')
        except errors.UnsupportedError as e:
            # Something unsupported is present in the user code, add help info
            error_rewrite(e, 'unsupported_error')
        except (errors.NotDefinedError, errors.RedefinedError,
                errors.VerificationError) as e:
            # These errors are probably from an issue with either the code supplied
            # being syntactically or otherwise invalid
            error_rewrite(e, 'interpreter')
        except errors.ConstantInferenceError as e:
            # this is from trying to infer something as constant when it isn't
            # or isn't supported as a constant
            error_rewrite(e, 'constant_inference')
        except Exception as e:
            if config.SHOW_HELP:
                if hasattr(e, 'patch_message'):
                    help_msg = errors.error_extras['reportable']
                    e.patch_message(''.join(e.args) + help_msg)
            # ignore the FULL_TRACEBACKS config, this needs reporting!
            raise e
Example #6
0
        position (numpy.ndarray):
            Positions :math:`\mathbf{x}` of the agents.

    Returns:
        numpy.ndarray:
            Array :math:`\lambda_i`

    """
    distances = length(c_door - position)
    d_sorted = np.argsort(distances)
    num = np.argsort(d_sorted)
    return num


@numba.jit((f8[:, :], f8[:, :], typeof(obstacle_type_linear)[:], f8),
           nopython=True,
           nogil=True,
           cache=True)
def exit_detection(center_door, position, obstacles, detection_range):
    """Exit detection. Detects closest exit in detection range that is in line
    of sight.

    Args:
        detection_range:
        center_door:
        position:
        obstacles:

    Returns:
        ndarray: Selected exits. Array of indices denoting which exit was
Example #7
0
 def _numba_type_(self):
     return typeof(self.value, Purpose.argument)
Example #8
0
    def _compile_for_args(self, *args, **kws):
        """
        For internal use.  Compile a specialized version of the function
        for the given *args* and *kws*, and return the resulting callable.
        """
        assert not kws

        def error_rewrite(e, issue_type):
            """
            Rewrite and raise Exception `e` with help supplied based on the
            specified issue_type.
            """
            if config.SHOW_HELP:
                help_msg = errors.error_extras[issue_type]
                e.patch_message('\n'.join((str(e).rstrip(), help_msg)))
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)

        argtypes = []
        for a in args:
            if isinstance(a, OmittedArg):
                argtypes.append(types.Omitted(a.value))
            else:
                argtypes.append(self.typeof_pyval(a))
        try:
            return self.compile(tuple(argtypes))
        except errors.ForceLiteralArg as e:
            # Received request for compiler re-entry with the list of arguments
            # indicated by e.requested_args.
            # First, check if any of these args are already Literal-ized
            already_lit_pos = [
                i for i in e.requested_args
                if isinstance(args[i], types.Literal)
            ]
            if already_lit_pos:
                # Abort compilation if any argument is already a Literal.
                # Letting this continue will cause infinite compilation loop.
                m = ("Repeated literal typing request.\n"
                     "{}.\n"
                     "This is likely caused by an error in typing. "
                     "Please see nested and suppressed exceptions.")
                info = ', '.join('Arg #{} is {}'.format(i, args[i])
                                 for i in sorted(already_lit_pos))
                raise errors.CompilerError(m.format(info))
            # Convert requested arguments into a Literal.
            args = [(types.literal if i in e.requested_args else lambda x: x)(
                args[i]) for i, v in enumerate(args)]
            # Re-enter compilation with the Literal-ized arguments
            return self._compile_for_args(*args)

        except errors.TypingError as e:
            # Intercept typing error that may be due to an argument
            # that failed inferencing as a Numba type
            failed_args = []
            for i, arg in enumerate(args):
                val = arg.value if isinstance(arg, OmittedArg) else arg
                try:
                    tp = typeof(val, Purpose.argument)
                except ValueError as typeof_exc:
                    failed_args.append((i, str(typeof_exc)))
                else:
                    if tp is None:
                        failed_args.append(
                            (i, "cannot determine Numba type of value %r" %
                             (val, )))
            if failed_args:
                # Patch error message to ease debugging
                msg = str(e).rstrip() + (
                    "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                    % "\n".join("- argument %d: %s" % (i, err)
                                for i, err in failed_args))
                e.patch_message(msg)

            error_rewrite(e, 'typing')
        except errors.UnsupportedError as e:
            # Something unsupported is present in the user code, add help info
            error_rewrite(e, 'unsupported_error')
        except (errors.NotDefinedError, errors.RedefinedError,
                errors.VerificationError) as e:
            # These errors are probably from an issue with either the code supplied
            # being syntactically or otherwise invalid
            error_rewrite(e, 'interpreter')
        except errors.ConstantInferenceError as e:
            # this is from trying to infer something as constant when it isn't
            # or isn't supported as a constant
            error_rewrite(e, 'constant_inference')
        except Exception as e:
            if config.SHOW_HELP:
                if hasattr(e, 'patch_message'):
                    help_msg = errors.error_extras['reportable']
                    e.patch_message('\n'.join((str(e).rstrip(), help_msg)))
            # ignore the FULL_TRACEBACKS config, this needs reporting!
            raise e
Example #9
0
File: args.py Project: uw-ipd/numba
 def _numba_type_(self):
     return typeof(self.value, Purpose.argument)
Example #10
0
        if cos_phi < c_j < 1.0:
            return False, True
        else:
            return True, True


@numba.jit(nopython=True, nogil=True)
def set_neighbor(i, j, l, neighbors, distances, distances_max):
    argmax = np.argmax(distances[i, :])
    neighbors[i, argmax] = j
    distances[i, argmax] = l
    distances_max[i] = np.max(distances[i, :])


@numba.jit([(f8[:, :], f8, i8, i8[:], i8[:], i8[:], i8[:], i8[:],
             typeof(obstacle_type_linear)[:])],
           nopython=True,
           nogil=True,
           cache=True)
def find_nearest_neighbors(position, sight, size_nearest_other, cell_indices,
                           neigh_cells, points_indices, cells_count,
                           cells_offset, obstacles):
    size = len(position)

    neighbors = np.full((size, size_nearest_other),
                        fill_value=MISSING_NEIGHBOR,
                        dtype=np.int64)
    '''Current nearest neighbours.'''

    distances = np.full((size, size_nearest_other),
                        fill_value=sight,
Example #11
0
    def _compile_for_args(self, *args, **kws):
        """
        For internal use.  Compile a specialized version of the function
        for the given *args* and *kws*, and return the resulting callable.
        """
        assert not kws
        argtypes = []
        for a in args:
            if isinstance(a, OmittedArg):
                argtypes.append(types.Omitted(a.value))
            else:
                argtypes.append(self.typeof_pyval(a))
        try:
            return self.compile(tuple(argtypes))
        except errors.TypingError as e:
            # Intercept typing error that may be due to an argument
            # that failed inferencing as a Numba type
            failed_args = []
            for i, arg in enumerate(args):
                val = arg.value if isinstance(arg, OmittedArg) else arg
                try:
                    tp = typeof(val, Purpose.argument)
                except ValueError as typeof_exc:
                    failed_args.append((i, str(typeof_exc)))
                else:
                    if tp is None:
                        failed_args.append(
                            (i,
                             "cannot determine Numba type of value %r" % (val,)))
            if failed_args:
                # Patch error message to ease debugging
                msg = str(e).rstrip() + (
                    "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                    % "\n".join("- argument %d: %s" % (i, err)
                                for i, err in failed_args))
                e.patch_message(msg)

            # add in help info
            if config.SHOW_HELP:
                help_msg = errors.error_extras['typing']
                e.patch_message(''.join(e.args) + help_msg)

            # raise
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)
        except errors.UnsupportedError as e:
            # Something unsupported is present in the user code, add help info
            if config.SHOW_HELP:
                help_msg = errors.error_extras['unsupported_error']
                e.patch_message(''.join(e.args) + help_msg)
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)
        except Exception as e:
            if config.SHOW_HELP:
                if hasattr(e, 'patch_message'):
                    help_msg = errors.error_extras['reportable']
                    e.patch_message(''.join(e.args) + help_msg)
            # ignore the FULL_TRACEBACKS config, this needs reporting!
            raise e
Example #12
0
    def _compile_for_args(self, *args, **kws):
        """
        For internal use.  Compile a specialized version of the function
        for the given *args* and *kws*, and return the resulting callable.
        """
        assert not kws

        def error_rewrite(e, issue_type):
            """
            Rewrite and raise Exception `e` with help supplied based on the
            specified issue_type.
            """
            if config.SHOW_HELP:
                help_msg = errors.error_extras[issue_type]
                e.patch_message(''.join(e.args) + help_msg)
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)

        argtypes = []
        for a in args:
            if isinstance(a, OmittedArg):
                argtypes.append(types.Omitted(a.value))
            else:
                argtypes.append(self.typeof_pyval(a))
        try:
            return self.compile(tuple(argtypes))
        except errors.TypingError as e:
            # Intercept typing error that may be due to an argument
            # that failed inferencing as a Numba type
            failed_args = []
            for i, arg in enumerate(args):
                val = arg.value if isinstance(arg, OmittedArg) else arg
                try:
                    tp = typeof(val, Purpose.argument)
                except ValueError as typeof_exc:
                    failed_args.append((i, str(typeof_exc)))
                else:
                    if tp is None:
                        failed_args.append(
                            (i,
                             "cannot determine Numba type of value %r" % (val,)))
            if failed_args:
                # Patch error message to ease debugging
                msg = str(e).rstrip() + (
                    "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                    % "\n".join("- argument %d: %s" % (i, err)
                                for i, err in failed_args))
                e.patch_message(msg)

            error_rewrite(e, 'typing')
        except errors.UnsupportedError as e:
            # Something unsupported is present in the user code, add help info
            error_rewrite(e, 'unsupported_error')
        except (errors.NotDefinedError, errors.RedefinedError,
                errors.VerificationError) as e:
            # These errors are probably from an issue with either the code supplied
            # being syntactically or otherwise invalid
            error_rewrite(e, 'interpreter')
        except errors.ConstantInferenceError as e:
            # this is from trying to infer something as constant when it isn't
            # or isn't supported as a constant
            error_rewrite(e, 'constant_inference')
        except Exception as e:
            if config.SHOW_HELP:
                if hasattr(e, 'patch_message'):
                    help_msg = errors.error_extras['reportable']
                    e.patch_message(''.join(e.args) + help_msg)
            # ignore the FULL_TRACEBACKS config, this needs reporting!
            raise e
Example #13
0
    def _compile_for_args(self, *args, **kws):
        """
        For internal use.  Compile a specialized version of the function
        for the given *args* and *kws*, and return the resulting callable.
        """
        assert not kws
        argtypes = []
        for a in args:
            if isinstance(a, OmittedArg):
                argtypes.append(types.Omitted(a.value))
            else:
                argtypes.append(self.typeof_pyval(a))
        try:
            return self.compile(tuple(argtypes))
        except errors.TypingError as e:
            # Intercept typing error that may be due to an argument
            # that failed inferencing as a Numba type
            failed_args = []
            for i, arg in enumerate(args):
                val = arg.value if isinstance(arg, OmittedArg) else arg
                try:
                    tp = typeof(val, Purpose.argument)
                except ValueError as typeof_exc:
                    failed_args.append((i, str(typeof_exc)))
                else:
                    if tp is None:
                        failed_args.append(
                            (i, "cannot determine Numba type of value %r" %
                             (val, )))
            if failed_args:
                # Patch error message to ease debugging
                msg = str(e).rstrip() + (
                    "\n\nThis error may have been caused by the following argument(s):\n%s\n"
                    % "\n".join("- argument %d: %s" % (i, err)
                                for i, err in failed_args))
                e.patch_message(msg)

            # add in help info
            if config.SHOW_HELP:
                help_msg = errors.error_extras['typing']
                e.patch_message(''.join(e.args) + help_msg)

            # raise
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)
        except errors.UnsupportedError as e:
            # Something unsupported is present in the user code, add help info
            if config.SHOW_HELP:
                help_msg = errors.error_extras['unsupported_error']
                e.patch_message(''.join(e.args) + help_msg)
            if config.FULL_TRACEBACKS:
                raise e
            else:
                reraise(type(e), e, None)
        except Exception as e:
            if config.SHOW_HELP:
                if hasattr(e, 'patch_message'):
                    help_msg = errors.error_extras['reportable']
                    e.patch_message(''.join(e.args) + help_msg)
            # ignore the FULL_TRACEBACKS config, this needs reporting!
            raise e