#pragma once #include "./core/omp_config.h" #include "detail/clip_serial.h" namespace numerics{ //--------------------------------------------- // ----------------- Clip --------------- //--------------------------------------------- // ---------------- Elementwise ---------------- template inline void inplace_clip(T& c, const T low, const T high) { detail::inplace_clip_scalar_serial(c, low, high); } template inline T clip(const T c, const T low, const T high) { T out = c; inplace_clip(out, low, high); return out; } template inline void inplace_clip(utils::Matrix& A, const T low, const T high) { detail::inplace_clip_elementwise_serial(A, low, high); } template inline utils::Matrix clip(const utils::Matrix& A, const T low, const T high) { utils::Matrix out = A; inplace_clip(out, low, high); return out; } template inline void inplace_clip(utils::Vector& v, const T low, const T high) { detail::inplace_clip_elementwise_serial(v, low, high); } template inline utils::Vector clip(const utils::Vector& v, const T low, const T high) { utils::Vector out = v; inplace_clip(out, low, high); return out; } //--------------------------------------------- // ----------------- Clip Low --------------- //--------------------------------------------- // ---------------- Elementwise ---------------- template inline void inplace_clip_low(T& c, const T low) { detail::inplace_clip_low_scalar_serial(c, low); } template inline T clip_low(const T c, const T low) { T out = c; inplace_clip_low(out, low); return out; } template inline void inplace_clip_low(utils::Matrix& A, const T low) { detail::inplace_clip_low_elementwise_serial(A, low); } template inline utils::Matrix clip_low(const utils::Matrix& A, const T low) { utils::Matrix out = A; inplace_clip_low(out, low); return out; } template inline void inplace_clip_low(utils::Vector& v, const T low) { detail::inplace_clip_low_elementwise_serial(v, low); } template inline utils::Vector clip_low(const utils::Vector& v, const T low) { utils::Vector out = v; inplace_clip_low(out, low); return out; } //--------------------------------------------- // ----------------- Clip High --------------- //--------------------------------------------- // ---------------- Elementwise ---------------- template inline void inplace_clip_high(T& c, const T high) { detail::inplace_clip_high_scalar_serial(c, high); } template inline T clip_high(const T c, const T high) { T out = c; inplace_clip_high(out, high); return out; } template inline void inplace_clip_high(utils::Matrix& A, const T high) { detail::inplace_clip_high_elementwise_serial(A, high); } template inline utils::Matrix clip_high(const utils::Matrix& A, const T high) { utils::Matrix out = A; inplace_clip_high(out, high); return out; } template inline void inplace_clip_high(utils::Vector& v, const T high) { detail::inplace_clip_high_elementwise_serial(v, high); } template inline utils::Vector clip_high(const utils::Vector& v, const T high) { utils::Vector out = v; inplace_clip_high(out, high); return out; } }