def pipeline_arithm_ops_cpu(source): data = fn.external_source(source=source, layout="HWC") processed = (data * 2, data + 2, data - 2, data / 2, data // 2, data ** 2, data == 2, data != 2, data < 2, data <= 2, data > 2, data >= 2, data & 2, data | 2, data ^ 2, dmath.abs(data), dmath.fabs(data), dmath.floor(data), dmath.ceil(data), dmath.pow(data, 2), dmath.fpow(data, 1.5), dmath.min(data, 2), dmath.max(data, 50), dmath.clamp(data, 10, 50), dmath.sqrt(data), dmath.rsqrt(data), dmath.cbrt(data), dmath.exp(data), dmath.exp(data), dmath.log(data), dmath.log2(data), dmath.log10(data), dmath.sin(data), dmath.cos(data), dmath.tan(data), dmath.asin(data), dmath.acos(data), dmath.atan(data), dmath.atan2(data, 3), dmath.sinh(data), dmath.cosh(data), dmath.tanh(data), dmath.asinh(data), dmath.acosh(data), dmath.atanh(data)) return processed
def test_arithm_ops_cpu(): pipe = Pipeline(batch_size=batch_size, num_threads=4, device_id=None) data = fn.external_source(source=get_data, layout="HWC") processed = [ data * 2, data + 2, data - 2, data / 2, data // 2, data**2, data == 2, data != 2, data < 2, data <= 2, data > 2, data >= 2, data & 2, data | 2, data ^ 2, dmath.abs(data), dmath.fabs(data), dmath.floor(data), dmath.ceil(data), dmath.pow(data, 2), dmath.fpow(data, 1.5), dmath.min(data, 2), dmath.max(data, 50), dmath.clamp(data, 10, 50), dmath.sqrt(data), dmath.rsqrt(data), dmath.cbrt(data), dmath.exp(data), dmath.exp(data), dmath.log(data), dmath.log2(data), dmath.log10(data), dmath.sin(data), dmath.cos(data), dmath.tan(data), dmath.asin(data), dmath.acos(data), dmath.atan(data), dmath.atan2(data, 3), dmath.sinh(data), dmath.cosh(data), dmath.tanh(data), dmath.asinh(data), dmath.acosh(data), dmath.atanh(data) ] pipe.set_outputs(*processed) pipe.build() for _ in range(3): pipe.run()
((lambda x: math.tanh(x)), (lambda x: np.tanh(x)), "tanh", default_range, 1e-6), ((lambda x: math.asinh(x)), (lambda x: np.arcsinh(x)), "asinh", limited_range, 1e-6), ((lambda x: math.acosh(x)), (lambda x: np.arccosh(x)), "acosh", pos_range, 1e-6), ((lambda x: math.atanh(x)), (lambda x: np.arctanh(x)), "atanh", one_range, 1e-6)] sane_operations = [((lambda x, y: x + y), "+", default_range), ((lambda x, y: x - y), "-", default_range), ((lambda x, y: x * y), "*", default_range), (((lambda x, y: x ** y), sane_pow), "**", pow_range), (((lambda x, y: math.pow(x, y)), sane_pow), "pow", pow_range), (((lambda x, y: math.min(x, y)), (lambda x, y: np.minimum(x, y))), "min", default_range), (((lambda x, y: math.max(x, y)), (lambda x, y: np.maximum(x, y))), "max", default_range)] floaty_operations = [(((lambda x, y: x / y), (lambda x, y: x / y)), "/", default_range), (((lambda x, y: math.fpow(x, y)), sane_pow), "fpow", pow_range), (((lambda x, y: math.atan2(x, y)), (lambda x, y: np.arctan2(x, y))), "atan2", default_range)] bitwise_operations = [((lambda x, y: x & y), "&"), ((lambda x, y: x | y), "|"), ((lambda x, y: x ^ y), "^")] comparisons_operations = [((lambda x, y: x == y), "=="), ((lambda x, y: x != y), "!="), ((lambda x, y: x < y), "<"), ((lambda x, y: x <= y), "<="), ((lambda x, y: x > y), ">"), ((lambda x, y: x >= y), ">="),] # The observable behaviour for hi < lo is the same as numpy ternary_operations = [(((lambda v, lo, hi: math.clamp(v, lo, hi)), (lambda v, lo, hi: np.clip(v, lo, hi))), "clamp")] def as_cpu(tl): if isinstance(tl, TensorListGPU): return tl.as_cpu()