Skip to content

Expressions

abs function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::abs, E1> abs(E1 &&x)

Returns template expression that returns the absolute value of x.

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_FUNCTION expression_make_function<fn::abs, E1> abs(E1&& x)
{
    return { fn::abs(), std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L302

absmax function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::absmax, E1, E2> absmax(E1 &&x,
                                                    E2 &&y)

Returns the greater in magnitude of two values. Accepts and returns expressions.

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_FUNCTION expression_make_function<fn::absmax, E1, E2> absmax(E1&& x, E2&& y)
{
    return { fn::absmax(), std::forward<E1>(x), std::forward<E2>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L338

absmin function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::absmin, E1, E2> absmin(E1 &&x,
                                                    E2 &&y)

Returns the smaller in magnitude of two values. Accepts and returns expressions.

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_FUNCTION expression_make_function<fn::absmin, E1, E2> absmin(E1&& x, E2&& y)
{
    return { fn::absmin(), std::forward<E1>(x), std::forward<E2>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L329

add function

template <typename... E, KFR_ACCEPT_EXPRESSIONS(E...)>
expression_make_function<fn::add, E...> add(E &&...x)

Returns template expression that returns sum of all the arguments passed to a function.

Source code
template <typename... E, KFR_ACCEPT_EXPRESSIONS(E...)>
KFR_INTRINSIC expression_make_function<fn::add, E...> add(E&&... x)
{
    return { fn::add(), std::forward<E>(x)... };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L52

adjacent function

template <typename Fn, typename E1>
expression_adjacent<Fn, E1> adjacent(Fn &&fn, E1 &&e1)

Returns template expression that returns the result of calling \(fn(x_i, x_{i-1})\)

Source code
template <typename Fn, typename E1>
KFR_INTRINSIC expression_adjacent<Fn, E1> adjacent(Fn&& fn, E1&& e1)
{
    return { std::forward<Fn>(fn), std::forward<E1>(e1) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/basic_expressions.hpp#L995

cconj function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::cconj, E1> cconj(E1 &&x)

Returns template expression that returns the complex conjugate of the complex number x

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_FUNCTION expression_make_function<fn::cconj, E1> cconj(E1&& x)
{
    return { fn::cconj(), std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L277

clamp function

template <typename E1, typename E2, typename E3,
          KFR_ACCEPT_EXPRESSIONS(E1, E2, E3)>
expression_make_function<fn::clamp, E1, E2, E3>
clamp(E1 &&x, E2 &&lo, E3 &&hi)

Creates an expression that returns the first argument clamped to a range [lo, hi]

Source code
template <typename E1, typename E2, typename E3, KFR_ACCEPT_EXPRESSIONS(E1, E2, E3)>
KFR_FUNCTION expression_make_function<fn::clamp, E1, E2, E3> clamp(E1&& x, E2&& lo, E3&& hi)
{
    return { fn::clamp(), std::forward<E1>(x), std::forward<E2>(lo), std::forward<E3>(hi) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L400

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::clamp, E1, E2> clamp(E1 &&x,
                                                  E2 &&hi)

Creates an expression that returns the first argument clamped to a range [0, hi]

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_FUNCTION expression_make_function<fn::clamp, E1, E2> clamp(E1&& x, E2&& hi)
{
    return { fn::clamp(), std::forward<E1>(x), std::forward<E2>(hi) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L407

cub function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::cub, E1> cub(E1 &&x)

Returns template expression that returns cube of x.

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_INTRINSIC expression_make_function<fn::cub, E1> cub(E1&& x)
{
    return { fn::cub(), std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L180

dimensions function

template <index_t Dims, typename E1>
expression_dimensions<Dims, E1> dimensions(E1 &&e1)

Returns template expression with gien number of dimensions

Source code
template <index_t Dims, typename E1>
KFR_INTRINSIC expression_dimensions<Dims, E1> dimensions(E1&& e1)
{
    static_assert(Dims >= expression_dims<E1>, "Number of dimensions must be greater or equal");
    return { std::forward<E1>(e1) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/basic_expressions.hpp#L1069

floor function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::floor, E1> floor(E1 &&x)

Returns the largest integer value not greater than x. Accepts and returns expressions.

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_FUNCTION expression_make_function<fn::floor, E1> floor(E1&& x)
{
    return { fn::floor(), std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L345

imag function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::imag, E1> imag(E1 &&x)

Returns the imaginary part of the complex value

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_INTRINSIC expression_make_function<fn::imag, E1> imag(E1&& x)
{
    return { fn::imag{}, std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L270

linspace function

template <typename T = void, bool precise = false, bool truncated = false, typename T1, typename T2,
          typename Tout = or_type<T, ftype<std::common_type_t<T1, T2>>>>
 expression_linspace<Tout, truncated> linspace(T1 start, T2 stop, size_t size,
                                                            bool endpoint = false, cbool_t<truncated> =

Returns evenly spaced numbers over a specified interval.


start The starting value of the sequence
stop The end value of the sequence. if endpoint is false, the last value is excluded
size Number of samples to generate
endpoint If true, stop is the last sample. Otherwise, it is not included @tparam truncated If true, linspace returns exactly size elements, otherwise, returns infinite sequence @tparam precise No longer used since KFR5, calculations are always precise

Source code
template <typename T = void, bool precise = false, bool truncated = false, typename T1, typename T2,
          typename Tout = or_type<T, ftype<std::common_type_t<T1, T2>>>>
KFR_INTRINSIC expression_linspace<Tout, truncated> linspace(T1 start, T2 stop, size_t size,
                                                            bool endpoint = false, cbool_t<truncated> = {})
{
    return { static_cast<Tout>(start), static_cast<Tout>(stop), size, endpoint };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/basic_expressions.hpp#L738

make_complex function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::make_complex, E1, E2>
make_complex(E1 &&re, E2 &&im)

Constructs complex value from real and imaginary parts

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_INTRINSIC expression_make_function<fn::make_complex, E1, E2> make_complex(E1&& re, E2&& im)
{
    return { fn::make_complex{}, std::forward<E1>(re), std::forward<E2>(im) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L220

max function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::max, E1, E2> max(E1 &&x,
                                              E2 &&y)

Returns the greater of two values. Accepts and returns expressions.

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_FUNCTION expression_make_function<fn::max, E1, E2> max(E1&& x, E2&& y)
{
    return { fn::max(), std::forward<E1>(x), std::forward<E2>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L320

min function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::min, E1, E2> min(E1 &&x,
                                              E2 &&y)

Returns the smaller of two values. Accepts and returns expressions.

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_FUNCTION expression_make_function<fn::min, E1, E2> min(E1&& x, E2&& y)
{
    return { fn::min(), std::forward<E1>(x), std::forward<E2>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L311

mul function

template <typename... E, KFR_ACCEPT_EXPRESSIONS(E...)>
expression_make_function<fn::mul, E...> mul(E &&...x)

Returns template expression that returns product of all the arguments passed to a function.

Source code
template <typename... E, KFR_ACCEPT_EXPRESSIONS(E...)>
KFR_INTRINSIC expression_make_function<fn::mul, E...> mul(E&&... x)
{
    return { fn::mul(), std::forward<E>(x)... };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L67

real function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::real, E1> real(E1 &&x)

Returns the real part of the complex value

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_INTRINSIC expression_make_function<fn::real, E1> real(E1&& x)
{
    return { fn::real{}, std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L263

rebind function

template <typename Fn, typename... OldArgs,
          typename... NewArgs>
expression_function<Fn, NewArgs...>
rebind(const expression_function<Fn, OldArgs...> &e,
       NewArgs &&...args)

Construct a new expression using the same function as in e and new arguments
e an expression
args new arguments for the function

Source code
template <typename Fn, typename... OldArgs, typename... NewArgs>
KFR_FUNCTION expression_function<Fn, NewArgs...> rebind(const expression_function<Fn, OldArgs...>& e,
                                                        NewArgs&&... args)
{
    return expression_function<Fn, NewArgs...>(Fn{ e.fn }, std::forward<NewArgs>(args)...);
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/expression.hpp#L871

satadd function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::satadd, E1, E2> satadd(E1 &&x,
                                                    E2 &&y)

Creates an expression that adds two arguments using saturation

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_INTRINSIC expression_make_function<fn::satadd, E1, E2> satadd(E1&& x, E2&& y)
{
    return { fn::satadd(), std::forward<E1>(x), std::forward<E2>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L414

satsub function

template <typename E1, typename E2,
          KFR_ACCEPT_EXPRESSIONS(E1, E2)>
expression_make_function<fn::satsub, E1, E2> satsub(E1 &&x,
                                                    E2 &&y)

Creates an expression that subtracts two arguments using saturation

Source code
template <typename E1, typename E2, KFR_ACCEPT_EXPRESSIONS(E1, E2)>
KFR_INTRINSIC expression_make_function<fn::satsub, E1, E2> satsub(E1&& x, E2&& y)
{
    return { fn::satsub(), std::forward<E1>(x), std::forward<E2>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L421

select function

template <typename E1, typename E2, typename E3,
          KFR_ACCEPT_EXPRESSIONS(E1, E2, E3)>
expression_make_function<fn::select, E1, E2, E3>
select(E1 &&m, E2 &&x, E3 &&y)

Returns template expression that returns x if m is true, otherwise return y. Order of the arguments is same as in ternary operator.

Source code
template <typename E1, typename E2, typename E3, KFR_ACCEPT_EXPRESSIONS(E1, E2, E3)>
KFR_FUNCTION expression_make_function<fn::select, E1, E2, E3> select(E1&& m, E2&& x, E3&& y)
{
    return { fn::select(), std::forward<E1>(m), std::forward<E2>(x), std::forward<E3>(y) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L293

sink function

template <size_t width = 0, index_t Axis = infinite_size,
          typename E,
          typename Traits = expression_traits<E>>
const E &sink(E &&expr)

Read the expression expr through the whole range.
expr the input expression @return the input expression is returned

Source code
template <size_t width = 0, index_t Axis = infinite_size, typename E, typename Traits = expression_traits<E>>
KFR_FUNCTION const E& sink(E&& expr)
{
    static_assert(!Traits::get_shape().has_infinity());
    process<width, Axis>(expression_discard<expression_value_type<E>, expression_dims<E>>{}, expr);
    return expr;
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/expression.hpp#L853

sqr function

template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
expression_make_function<fn::sqr, E1> sqr(E1 &&x)

Returns template expression that returns square of x.

Source code
template <typename E1, KFR_ACCEPT_EXPRESSIONS(E1)>
KFR_INTRINSIC expression_make_function<fn::sqr, E1> sqr(E1&& x)
{
    return { fn::sqr(), std::forward<E1>(x) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/simd_expressions.hpp#L171

symmlinspace function

template <typename T, bool precise = false, bool truncated = false, typename Tout = ftype<T>>
 expression_linspace<Tout, truncated> symmlinspace(T symsize, size_t size,
                                                                cbool_t<truncated> =

Returns evenly spaced numbers over a specified interval.


symsize The sequence will have interval [-symsize..symsize]
size Number of samples to generate @tparam truncated If true, linspace returns exactly size elements, otherwise, returns infinite sequence @tparam precise No longer used since KFR5, calculations are always precise

Source code
template <typename T, bool precise = false, bool truncated = false, typename Tout = ftype<T>>
KFR_INTRINSIC expression_linspace<Tout, truncated> symmlinspace(T symsize, size_t size,
                                                                cbool_t<truncated> = {})
{
    return { symmetric_linspace, static_cast<Tout>(symsize), size, true };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/basic_expressions.hpp#L752

trace function

template <typename E1> expression_trace<E1> trace(E1 &&e1)

Returns template expression that prints all processed values for debug

Source code
template <typename E1>
KFR_INTRINSIC expression_trace<E1> trace(E1&& e1)
{
    return { std::forward<E1>(e1) };
}

https://github.com/kfrlib/kfr/blob//include/kfr/base/basic_expressions.hpp#L1024


Auto-generated from sources, Revision , https://github.com/kfrlib/kfr/blob//include/kfr/