Repository URL to install this package:
|
Version:
0.36.2 ▾
|
from __future__ import print_function, absolute_import, division
import math
from numba import types, utils
from numba.typing.templates import (AttributeTemplate, ConcreteTemplate,
signature, Registry)
registry = Registry()
builtin_attr = registry.register_attr
infer_global = registry.register_global
@builtin_attr
class MathModuleAttribute(AttributeTemplate):
key = types.Module(math)
def resolve_fabs(self, mod):
return types.Function(Math_fabs)
def resolve_exp(self, mod):
return types.Function(Math_exp)
def resolve_expm1(self, mod):
return types.Function(Math_expm1)
def resolve_sqrt(self, mod):
return types.Function(Math_sqrt)
def resolve_log(self, mod):
return types.Function(Math_log)
def resolve_log1p(self, mod):
return types.Function(Math_log1p)
def resolve_log10(self, mod):
return types.Function(Math_log10)
def resolve_sin(self, mod):
return types.Function(Math_sin)
def resolve_cos(self, mod):
return types.Function(Math_cos)
def resolve_tan(self, mod):
return types.Function(Math_tan)
def resolve_sinh(self, mod):
return types.Function(Math_sinh)
def resolve_cosh(self, mod):
return types.Function(Math_cosh)
def resolve_tanh(self, mod):
return types.Function(Math_tanh)
def resolve_asin(self, mod):
return types.Function(Math_asin)
def resolve_acos(self, mod):
return types.Function(Math_acos)
def resolve_atan(self, mod):
return types.Function(Math_atan)
def resolve_atan2(self, mod):
return types.Function(Math_atan2)
def resolve_asinh(self, mod):
return types.Function(Math_asinh)
def resolve_acosh(self, mod):
return types.Function(Math_acosh)
def resolve_atanh(self, mod):
return types.Function(Math_atanh)
def resolve_pi(self, mod):
return types.float64
def resolve_e(self, mod):
return types.float64
def resolve_floor(self, mod):
return types.Function(Math_floor)
def resolve_ceil(self, mod):
return types.Function(Math_ceil)
def resolve_trunc(self, mod):
return types.Function(Math_trunc)
def resolve_isnan(self, mod):
return types.Function(Math_isnan)
def resolve_isinf(self, mod):
return types.Function(Math_isinf)
def resolve_degrees(self, mod):
return types.Function(Math_degrees)
def resolve_radians(self, mod):
return types.Function(Math_radians)
# def resolve_hypot(self, mod):
# return types.Function(Math_hypot)
def resolve_copysign(self, mod):
return types.Function(Math_copysign)
def resolve_fmod(self, mod):
return types.Function(Math_fmod)
def resolve_pow(self, mod):
return types.Function(Math_pow)
def resolve_erf(self, mod):
return types.Function(Math_erf)
def resolve_erfc(self, mod):
return types.Function(Math_erfc)
def resolve_gamma(self, mod):
return types.Function(Math_gamma)
def resolve_lgamma(self, mod):
return types.Function(Math_lgamma)
class Math_unary(ConcreteTemplate):
cases = [
signature(types.float64, types.int64),
signature(types.float64, types.uint64),
signature(types.float32, types.float32),
signature(types.float64, types.float64),
]
class Math_fabs(Math_unary):
key = math.fabs
class Math_exp(Math_unary):
key = math.exp
class Math_expm1(Math_unary):
key = math.expm1
class Math_sqrt(Math_unary):
key = math.sqrt
class Math_log(Math_unary):
key = math.log
class Math_log1p(Math_unary):
key = math.log1p
class Math_log10(Math_unary):
key = math.log10
class Math_sin(Math_unary):
key = math.sin
class Math_cos(Math_unary):
key = math.cos
class Math_tan(Math_unary):
key = math.tan
class Math_sinh(Math_unary):
key = math.sinh
class Math_cosh(Math_unary):
key = math.cosh
class Math_tanh(Math_unary):
key = math.tanh
class Math_asin(Math_unary):
key = math.asin
class Math_acos(Math_unary):
key = math.acos
class Math_atan(Math_unary):
key = math.atan
class Math_atan2(ConcreteTemplate):
key = math.atan2
cases = [
signature(types.float64, types.int64, types.int64),
signature(types.float64, types.uint64, types.uint64),
signature(types.float32, types.float32, types.float32),
signature(types.float64, types.float64, types.float64),
]
class Math_asinh(Math_unary):
key = math.asinh
class Math_acosh(Math_unary):
key = math.acosh
class Math_atanh(Math_unary):
key = math.atanh
class Math_floor(Math_unary):
key = math.floor
class Math_ceil(Math_unary):
key = math.ceil
class Math_trunc(Math_unary):
key = math.trunc
class Math_radians(Math_unary):
key = math.radians
class Math_degrees(Math_unary):
key = math.degrees
# class Math_hypot(ConcreteTemplate):
# key = math.hypot
# cases = [
# signature(types.float64, types.int64, types.int64),
# signature(types.float64, types.uint64, types.uint64),
# signature(types.float32, types.float32, types.float32),
# signature(types.float64, types.float64, types.float64),
# ]
class Math_erf(Math_unary):
key = math.erf
class Math_erfc(Math_unary):
key = math.erfc
class Math_gamma(Math_unary):
key = math.gamma
class Math_lgamma(Math_unary):
key = math.lgamma
class Math_binary(ConcreteTemplate):
cases = [
signature(types.float32, types.float32, types.float32),
signature(types.float64, types.float64, types.float64),
]
class Math_copysign(Math_binary):
key = math.copysign
class Math_fmod(Math_binary):
key = math.fmod
class Math_pow(ConcreteTemplate):
key = math.pow
cases = [
signature(types.float32, types.float32, types.float32),
signature(types.float64, types.float64, types.float64),
signature(types.float32, types.float32, types.int32),
signature(types.float64, types.float64, types.int32),
]
class Math_isnan(ConcreteTemplate):
key = math.isnan
cases = [
signature(types.boolean, types.int64),
signature(types.boolean, types.uint64),
signature(types.boolean, types.float32),
signature(types.boolean, types.float64),
]
class Math_isinf(ConcreteTemplate):
key = math.isinf
cases = [
signature(types.boolean, types.int64),
signature(types.boolean, types.uint64),
signature(types.boolean, types.float32),
signature(types.boolean, types.float64),
]
infer_global(math, types.Module(math))
infer_global(math.fabs, types.Function(Math_fabs))
infer_global(math.exp, types.Function(Math_exp))
infer_global(math.expm1, types.Function(Math_expm1))
infer_global(math.sqrt, types.Function(Math_sqrt))
infer_global(math.log, types.Function(Math_log))
infer_global(math.log1p, types.Function(Math_log1p))
infer_global(math.log10, types.Function(Math_log10))
infer_global(math.sin, types.Function(Math_sin))
infer_global(math.cos, types.Function(Math_cos))
infer_global(math.tan, types.Function(Math_tan))
infer_global(math.sinh, types.Function(Math_sinh))
infer_global(math.cosh, types.Function(Math_cosh))
infer_global(math.tanh, types.Function(Math_tanh))
infer_global(math.asin, types.Function(Math_asin))
infer_global(math.acos, types.Function(Math_acos))
infer_global(math.atan, types.Function(Math_atan))
infer_global(math.atan2, types.Function(Math_atan2))
infer_global(math.asinh, types.Function(Math_asinh))
infer_global(math.acosh, types.Function(Math_acosh))
infer_global(math.atanh, types.Function(Math_atanh))
# infer_global(math.hypot, types.Function(Math_hypot))
infer_global(math.floor, types.Function(Math_floor))
infer_global(math.ceil, types.Function(Math_ceil))
infer_global(math.trunc, types.Function(Math_trunc))
infer_global(math.isnan, types.Function(Math_isnan))
infer_global(math.isinf, types.Function(Math_isinf))
infer_global(math.degrees, types.Function(Math_degrees))
infer_global(math.radians, types.Function(Math_radians))
infer_global(math.copysign, types.Function(Math_copysign))
infer_global(math.fmod, types.Function(Math_fmod))
infer_global(math.pow, types.Function(Math_pow))
infer_global(math.erf, types.Function(Math_erf))
infer_global(math.erfc, types.Function(Math_erfc))
infer_global(math.gamma, types.Function(Math_gamma))
infer_global(math.lgamma, types.Function(Math_lgamma))