Accelerated UFuncs
Variants of some Numpy UFuncs that use Intel’s Vector Math Library (VML) are
found in the accelerate.mkl
package in the ufuncs
object. In comparison
to Numpy’s builtin UFuncs, Accelerated UFuncs have the following properties:
 Performance
 Because Accelerated UFuncs call functions from VML, which is a library optimised for high performance using multiple threads and SIMD instructions, performance may be increased when calling Accelerated UFuncs in comparison to calling Numpy UFuncs. The performance increase will only be obtained for contiguous arguments. For noncontiguous arguments, performance comparable to Numpy’s will be observed.
 Accuracy
 Accelerated UFuncs produce similar results to their Numpy equivalents for the range of finite values, up to a given relative tolerance.
 The tolerance varies between functions and data types, and is specified for each combination in the following section.
 For the range of infinite and NaN values, the majority of results computed
by Accelerated UFuncs will be equal to those computed by their Numpy
counterparts. However, this is not guaranteed; for example, an input for
which the Numpy UFunc produces a result of
x + inf*j
, the equivalent Accelerated UFunc may produce a result ofy + inf*j
, wherex != y
.  Towards the edge of the domain of a data type (e.g. near
3.4e+38
forfloat
and1.79e+308
fordouble
and values of similar magnitude at the negative end of the domain) some Accelerated UFuncs may produce results which differ from Numpy UFuncs, or may raiseFloatingPointError
orZeroDivisionError
exceptions. These functions are marked domain edge warning in the Accuracy column of the tables in the following sections.  Some numpy implementations of functions that operate in the complex domain have branch cuts which differ from those in MKL, where this has been identified in testing these functions are marked branch cut warning in the Accuracy column of the tables in the following sections. This warning may also be present in the case of implementations which contain incorrect branch cuts.
 Denormal input values may be treated as zero by Accelerated UFuncs, and denormal output values may be flushed to zero.
 The accuracy reported is approximate and related to the least accurate value encountered when testing with contiguous input arguments. Noncontiguous arguments are more directly exposed to system math library implementations and so their accuracy is not commented on.
 Exception handling
 For the range of finite values, exceptions will not be raised by Accelerated
UFuncs, just as they would not by Numpy. For the infinite and NaN ranges,
Accelerated UFuncs may raise
FloatingPointError
orZeroDivisionError
exceptions in cases when Numpy would not, and viceversa.
Supported functions are described in the following sections.
Arithmetic Functions
Function  Type  Accuracy 

add(x, y) 
f4 
rtol=1.0e7 
f8 
rtol=1.0e15 

c8 
rtol=1.0e7 

c16 
rtol=1.0e15 

subtract(x, y) 
f4 
rtol=1.e7 
f8 
rtol=1.e15 

c8 
rtol=1.e7 

c16 
rtol=1.e15 

square(x) 
f4 
rtol=1.e7 
f8 
rtol=1.e15 

multiply(x, y) 
f4 
rtol=1.e7 
f8 
rtol=1.e15 

c8 
rtol=1.e6 

c16 
rtol=1.e15 

absolute(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 
Power and Root Functions
Function  Type  Accuracy 

reciprocal(x) 
f4 
rtol=1.e7 
f8 
rtol=1.e15 

true_divide(x, y) 
f4 
rtol=1.e7 
f8 
rtol=1.e15 

c8 
rtol=1.e6 

c16 
rtol=1.e15 

sqrt(x, y) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

power(x, y) 
f4 
rtol=1.e7 
f8 
rtol=1.e15 

hypot(x, y) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 
Exponential and Logarithmic Functions
Function  Type  Accuracy 

exp(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

expm1(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

log(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=1.e5 

c16 
rtol=1.e13 

log10(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=1.e5 , domain edge warning 

c16 
rtol=1.e13 , domain edge warning 

log1p(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 
Trigonometric Functions
Function  Type  Accuracy 

cos(x) 
f4 
rtol=1.e6 , domain edge warning 
f8 
rtol=1.e15 , domain edge warning 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

sin(x) 
f4 
rtol=1.e5 , domain edge warning 
f8 
rtol=1.e15 , domain edge warning 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

tan(x) 
f4 
rtol=1.e6 , domain edge warning 
f8 
rtol=1.e15 , domain edge warning 

c8 
rtol=5.e4 , domain edge warning 

c16 
rtol=5.e14 , domain edge warning 

arccos(x) 
f4 
rtol=1.e6 , branch cut warning 
f8 
rtol=1.e15 , branch cut warning 

c8 


c16 


arcsin(x) 
f4 
rtol=1.e6 , branch cut warning 
f8 
rtol=1.e15 , branch cut warning 

c8 


c16 


arctan(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=1.e6 

c16 
rtol=1.e15 

arctan2(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 
Hyperbolic Functions
Function  Type  Accuracy 

cosh(x) 
f4 
rtol=1.e6 , domain edge warning 
f8 
rtol=1.e15 , domain edge warning 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

sinh(x) 
f4 
rtol=1.e6 , domain edge warning 
f8 
rtol=1.e15 , domain edge warning 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

tanh(x) 
f4 
rtol=1.e6 , domain edge warning 
f8 
rtol=1.e15 , domain edge warning 

c8 
rtol=1.e6 , domain edge warning 

c16 
rtol=1.e15 , domain edge warning 

arccosh(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=1.e5 , domain edge warning 

c16 
rtol=1.e14 , domain edge warning 

arcsinh(x) 
f4 
rtol=1.e6 
f8 
rtol=1.e15 

c8 
rtol=5.e5 , domain edge warning 

c16 
rtol=1.e13 , domain edge warning 

arctanh(x) 
f4 
rtol=1.e5 , branch cut warning 
f8 
rtol=5.e11 , branch cut warning 

c8 


c16 
