Esempio n. 1
0
def wrapped_fsum():
    """
    Return an uncertainty-aware version of math.fsum, which must
    be contained in _original_func.
    """

    # The fsum function is flattened, in order to use the
    # wrap() wrapper:

    flat_fsum = lambda *args: original_func(args)

    flat_fsum_wrap = uncert_core.wrap(flat_fsum,
                                      itertools.repeat(lambda *args: 1))

    return wraps(lambda arg_list: flat_fsum_wrap(*arg_list), original_func)
Esempio n. 2
0
def wrapped_fsum():
    """
    Return an uncertainty-aware version of math.fsum, which must
    be contained in _original_func.
    """

    # The fsum function is flattened, in order to use the
    # wrap() wrapper:

    flat_fsum = lambda *args: original_func(args)

    flat_fsum_wrap = uncert_core.wrap(
        flat_fsum, itertools.repeat(lambda *args: 1))

    return wraps(lambda arg_list: flat_fsum_wrap(*arg_list),
                 original_func)
Esempio n. 3
0
        # Functions whose derivatives are calculated numerically by
        # this module fall here (isinf, fmod,...):
        derivatives = []  # Means: numerical calculation required
    elif name not in locally_cst_funcs:
        continue  # 'name' not wrapped by this module (__doc__, e, etc.)

    func = getattr(math, name)

    if name in locally_cst_funcs:
        wrapped_func = wrap_locally_cst_func(func)
    else:  # Function with analytical or numerical derivatives:
        # Errors during the calculation of the derivatives are converted
        # to a NaN result: it is assumed that a mathematical calculation
        # that cannot be calculated indicates a non-defined derivative
        # (the derivatives in fixed_derivatives must be written this way):
        wrapped_func = uncert_core.wrap(
            func, list(map(uncert_core.nan_if_exception, derivatives)))

    # !! The same effect could be achieved with globals()[...] = ...
    setattr(this_module, name, wraps(wrapped_func, func))

    many_scalars_to_scalar_funcs.append(name)

###############################################################################

########################################
# Special cases: some of the functions from no_std_wrapping:

##########
# The math.factorial function is not converted to an uncertainty-aware
# function, because it does not handle non-integer arguments: it does
# not make sense to give it an argument with a numerical error
Esempio n. 4
0
        # Functions whose derivatives are calculated numerically by
        # this module fall here (isinf, fmod,...):
        derivatives = []  # Means: numerical calculation required
    elif name not in locally_cst_funcs:
        continue  # 'name' not wrapped by this module (__doc__, e, etc.)

    func = getattr(math, name)

    if name in locally_cst_funcs:
        wrapped_func = wrap_locally_cst_func(func)
    else:  # Function with analytical or numerical derivatives:
        # Errors during the calculation of the derivatives are converted
        # to a NaN result: it is assumed that a mathematical calculation
        # that cannot be calculated indicates a non-defined derivative
        # (the derivatives in fixed_derivatives must be written this way):
        wrapped_func = uncert_core.wrap(
            func, map(uncert_core.nan_if_exception, derivatives))

    setattr(this_module, name, wraps(wrapped_func, func))

    many_scalars_to_scalar_funcs.append(name)

###############################################################################

########################################
# Special cases: some of the functions from no_std_wrapping:

##########
# The math.factorial function is not converted to an uncertainty-aware
# function, because it does not handle non-integer arguments: it does
# not make sense to give it an argument with a numerical error
# (whereas this would be relevant for the gamma function).