Source code for numpy_ipps.rational

"""Rational Functions."""
import numpy as _numpy

import numpy_ipps._detail.metaclass.selector as _selector
import numpy_ipps.policies
import numpy_ipps.utils


[docs]class Mul: """Rational Mul Function.""" __slots__ = ("_ipps_convolve",) dtype_candidates = numpy_ipps.policies.no_complex_candidates _ipps_kind = _selector.Kind.BINARY def __init__(self, order, dtype, method=numpy_ipps.Method.DIRECT): self._ipps_convolve = numpy_ipps.Convolve(order, dtype, method=method) def __call__(self, src1, src2, dst): numerator_src1, denominator_src1 = src1.divide(2) numerator_src2, denominator_src2 = src2.divide(2) numerator_dst, denominator_dst = dst.divide(2) self._ipps_convolve(numerator_src1, numerator_src2, numerator_dst) self._ipps_convolve( denominator_src1, denominator_src2, denominator_dst ) def _numpy_backend(self, src1, src2, dst): raise NotImplementedError
[docs]class MulC: """Rational MulC Function.""" __slots__ = ("_ipps_mulC",) dtype_candidates = numpy_ipps.policies.no_complex_candidates _ipps_kind = _selector.Kind.BINARY def __init__(self, order, dtype): self._ipps_mulC = numpy_ipps.MulC(order, dtype) def __call__(self, src, value, dst): numerator_src, denominator_src = src.divide(2) numerator_value, denominator_value = value.divide(2) numerator_dst, denominator_dst = dst.divide(2) self._ipps_mulC( numerator_src, numerator_value.ndarray[0], numerator_dst ) self._ipps_mulC( denominator_src, denominator_value.ndarray[0], denominator_dst ) def _numpy_backend(self, src, value, dst): raise NotImplementedError
[docs]class Add: """Rational Add Function.""" __slots__ = ( "_ipps_add", "_ipps_convolve", ) dtype_candidates = numpy_ipps.policies.no_complex_candidates _ipps_kind = _selector.Kind.BINARY def __init__(self, order, dtype, method=numpy_ipps.Method.DIRECT): self._ipps_convolve = numpy_ipps.Convolve(order, dtype, method=method) self._ipps_add = numpy_ipps.Add_I(size=order, dtype=dtype) def __call__(self, src1, src2, dst): numerator_src1, denominator_src1 = src1.divide(2) numerator_src2, denominator_src2 = src2.divide(2) numerator_dst, denominator_dst = dst.divide(2) self._ipps_convolve(numerator_src1, denominator_src2, numerator_dst) self._ipps_convolve(numerator_src2, denominator_src1, denominator_dst) self._ipps_add(denominator_dst, numerator_dst) self._ipps_convolve( denominator_src1, denominator_src2, denominator_dst ) def _numpy_backend(self, src1, src2, dst): raise NotImplementedError
[docs]class Eval: """Rational Eval Function.""" __slots__ = ( "_ipps_setTo", "_ipps_sum", "_ipps_mul", "_ipps_pow", "_ipps_div", "_ipps_power", "_ipps_part", "_ipps_value", "_ipps_values", ) dtype_candidates = numpy_ipps.policies.no_complex_candidates _ipps_kind = _selector.Kind.UNARY def __init__(self, order, dtype, accuracy=None): self._ipps_setTo = numpy_ipps.SetTo(size=order, dtype=dtype) self._ipps_sum = numpy_ipps.Sum(size=order, dtype=dtype) self._ipps_mul = numpy_ipps.Mul(size=order, dtype=dtype) self._ipps_pow = numpy_ipps.Pow( size=order, dtype=dtype, accuracy=accuracy if accuracy in numpy_ipps.Pow.ipps_accuracies else None, ) self._ipps_div = numpy_ipps.Div( size=2, dtype=dtype, accuracy=accuracy if accuracy in numpy_ipps.Div.ipps_accuracies else None, ) self._ipps_power = numpy_ipps.utils.ndarray( _numpy.arange(order, dtype=dtype) ) self._ipps_part = numpy_ipps.utils.ndarray( _numpy.empty(order, dtype=dtype) ) self._ipps_value = numpy_ipps.utils.ndarray( _numpy.empty(order, dtype=dtype) ) self._ipps_values = numpy_ipps.utils.ndarray( _numpy.empty(order, dtype=dtype) ) def __call__(self, src, value, dst): self._ipps_setTo(self._ipps_value, value) self._ipps_pow(self._ipps_value, self._ipps_power, self._ipps_values) numerator_dst, denominator_dst, eval = dst.divide(3) numerator_src, denominator_src = src.divide(2) self._ipps_mul(numerator_src, self._ipps_values, self._ipps_part) self._ipps_sum(self._ipps_part, numerator_dst) self._ipps_mul(denominator_src, self._ipps_values, self._ipps_part) self._ipps_sum(self._ipps_part, denominator_dst) self._ipps_div(numerator_dst, denominator_dst, eval) def _numpy_backend(self, src, value, dst): raise NotImplementedError
[docs]class Assign: """Rational Assign Function.""" __slots__ = ("_ipps_assign",) dtype_candidates = numpy_ipps.policies.no_complex_candidates _ipps_kind = _selector.Kind.UNARY def __init__(self, dtype): self._ipps_assign = numpy_ipps.Assign(dtype=dtype) def __call__(self, src, dst): numerator_dst, denominator_dst = dst.divide(2) numerator_src, denominator_src = src.divide(2) self._ipps_assign(numerator_src, numerator_dst) self._ipps_assign(denominator_src, denominator_dst) def _numpy_backend(self, src, value, dst): raise NotImplementedError