#pragma once #include "./core/omp_config.h" #include "detail/div_serial.h" namespace numerics{ // ---------------- Scalar ---------------- template inline void inplace_div(utils::Matrix& A, const T b) { detail::inplace_div_scalar_serial(A,b); } template inline utils::Matrix div(const utils::Matrix& A, const T b) { utils::Matrix out = A; inplace_div(out, b); return out; } template inline void inplace_div(const T b, utils::Matrix& A) { detail::inplace_div_scalar_serial(b, A); } template inline utils::Matrix div(const T b, const utils::Matrix& A) { utils::Matrix out = A; inplace_div(b, out); return out; } template inline void inplace_div(utils::Vector& v, const T b) { detail::inplace_div_scalar_serial(v,b); } template inline utils::Vector div(const utils::Vector& v, const T b) { utils::Vector out = v; inplace_div(out, b); return out; } template inline void inplace_div(const T b, utils::Vector& v) { detail::inplace_div_scalar_serial(b, v); } template inline utils::Vector div(const T b, const utils::Vector& v) { utils::Vector out = v; inplace_div(b, out); return out; } // ---------------- Elementwise ---------------- template inline void inplace_div(utils::Matrix& A, const utils::Matrix& B) { detail::inplace_div_elementwise_serial(A,B); } template inline utils::Matrix div(const utils::Matrix& A, const utils::Matrix& B) { utils::Matrix out = A; inplace_div(out, B); return out; } template inline void inplace_div(utils::Vector& v, const utils::Vector& p) { detail::inplace_div_elementwise_serial(v,p); } template inline utils::Vector div(const utils::Vector& v, const utils::Vector& p) { utils::Vector out = v; inplace_div(out, p); return out; } // ---------------- Rowwise ---------------- template inline void inplace_div_rowwise(utils::Matrix& A, const utils::Vector& v) { detail::inplace_div_rowwise_serial(A,v); } template inline utils::Matrix div_rowwise(const utils::Matrix& A, const utils::Vector& v) { utils::Matrix out = A; inplace_div_rowwise(out, v); return out; } // ---------------- Colwise ---------------- template inline void inplace_div_colwise(utils::Matrix& A, const utils::Vector& v) { detail::inplace_div_colwise_serial(A,v); } template inline utils::Matrix div_colwise(const utils::Matrix& A, const utils::Vector& v) { utils::Matrix out = A; inplace_div_colwise(out, v); return out; } }