From 28bd975851c7bbcc83d4352e25ae7d2806b34b1a Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 13:01:28 +0200 Subject: [PATCH 1/7] l2norm is quite common, add it to the stdlib --- src/numerical/MathArray.sac | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/numerical/MathArray.sac b/src/numerical/MathArray.sac index 7f1a3f22..9df6e788 100644 --- a/src/numerical/MathArray.sac +++ b/src/numerical/MathArray.sac @@ -1,7 +1,7 @@ #pragma safe module MathArray; -export all; +export all except { + }; /****************************************************************************** * @@ -37,3 +37,21 @@ MAP_REAL(MAP_A, fabs) MAP_REAL(MAP_A, sqrt) MAP_REAL(MAP_A, floor) MAP_REAL(MAP_AxS, pow) + +inline float +(float a, float b) { return _add_SxS_(a, b); } +inline float l2norm(float[d:shp] arr) +{ + return Math::sqrt(with { + (_mul_SxV_(0, shp) <= iv < shp) + : _mul_SxS_(_sel_VxA_(iv, arr), _sel_VxA_(iv, arr)); + } : fold(+, 0.0)); +} + +inline double +(double a, double b) { return _add_SxS_(a, b); } +inline double l2norm(double[d:shp] arr) +{ + return Math::sqrt(with { + (_mul_SxV_(0, shp) <= iv < shp) + : _mul_SxS_(_sel_VxA_(iv, arr), _sel_VxA_(iv, arr)); + } : fold(+, 0.0)); +} From 918a536b95bbb59906d2d51a02566258b6baefbb Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 13:04:27 +0200 Subject: [PATCH 2/7] l2norm is quite common, add it to the stdlib --- src/numerical/MathArray.sac | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/numerical/MathArray.sac b/src/numerical/MathArray.sac index 9df6e788..5c024f53 100644 --- a/src/numerical/MathArray.sac +++ b/src/numerical/MathArray.sac @@ -39,19 +39,37 @@ MAP_REAL(MAP_A, floor) MAP_REAL(MAP_AxS, pow) inline float +(float a, float b) { return _add_SxS_(a, b); } -inline float l2norm(float[d:shp] arr) + +inline float l2norm(float[d:shp] a, float[d:shp] b) +{ + return Math::sqrt(with { + (_mul_SxV_(0, shp) <= iv < shp) + : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, b)); + } : fold(+, 0.0)); +} + +inline float l2norm(float[d:shp] a) { return Math::sqrt(with { (_mul_SxV_(0, shp) <= iv < shp) - : _mul_SxS_(_sel_VxA_(iv, arr), _sel_VxA_(iv, arr)); + : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, a)); } : fold(+, 0.0)); } inline double +(double a, double b) { return _add_SxS_(a, b); } -inline double l2norm(double[d:shp] arr) + +inline double l2norm(double[d:shp] a, double[d:shp] b) +{ + return Math::sqrt(with { + (_mul_SxV_(0, shp) <= iv < shp) + : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, b)); + } : fold(+, 0.0)); +} + +inline double l2norm(double[d:shp] a) { return Math::sqrt(with { (_mul_SxV_(0, shp) <= iv < shp) - : _mul_SxS_(_sel_VxA_(iv, arr), _sel_VxA_(iv, arr)); + : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, a)); } : fold(+, 0.0)); } From bbbf484769f451d55a4bd173bb88fd44de04e5b9 Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 13:22:38 +0200 Subject: [PATCH 3/7] l2norm is quite common, add it to the stdlib --- src/numerical/MathArray.sac | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/src/numerical/MathArray.sac b/src/numerical/MathArray.sac index 5c024f53..5bac12b6 100644 --- a/src/numerical/MathArray.sac +++ b/src/numerical/MathArray.sac @@ -39,15 +39,6 @@ MAP_REAL(MAP_A, floor) MAP_REAL(MAP_AxS, pow) inline float +(float a, float b) { return _add_SxS_(a, b); } - -inline float l2norm(float[d:shp] a, float[d:shp] b) -{ - return Math::sqrt(with { - (_mul_SxV_(0, shp) <= iv < shp) - : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, b)); - } : fold(+, 0.0)); -} - inline float l2norm(float[d:shp] a) { return Math::sqrt(with { @@ -57,15 +48,6 @@ inline float l2norm(float[d:shp] a) } inline double +(double a, double b) { return _add_SxS_(a, b); } - -inline double l2norm(double[d:shp] a, double[d:shp] b) -{ - return Math::sqrt(with { - (_mul_SxV_(0, shp) <= iv < shp) - : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, b)); - } : fold(+, 0.0)); -} - inline double l2norm(double[d:shp] a) { return Math::sqrt(with { From 0de1a95d39e088397260df23917a3ef2bd4383df Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 13:24:47 +0200 Subject: [PATCH 4/7] l2norm is quite common, add it to the stdlib --- src/numerical/MathArray.sac | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/numerical/MathArray.sac b/src/numerical/MathArray.sac index 5bac12b6..5e50daa3 100644 --- a/src/numerical/MathArray.sac +++ b/src/numerical/MathArray.sac @@ -39,6 +39,7 @@ MAP_REAL(MAP_A, floor) MAP_REAL(MAP_AxS, pow) inline float +(float a, float b) { return _add_SxS_(a, b); } + inline float l2norm(float[d:shp] a) { return Math::sqrt(with { @@ -47,7 +48,16 @@ inline float l2norm(float[d:shp] a) } : fold(+, 0.0)); } +inline float lnorm(float[d:shp] a, float x) +{ + return Math::sqrt(with { + (_mul_SxV_(0, shp) <= iv < shp) + : Math::pow(_sel_VxA_(iv, a), x); + } : fold(+, 0.0)); +} + inline double +(double a, double b) { return _add_SxS_(a, b); } + inline double l2norm(double[d:shp] a) { return Math::sqrt(with { @@ -55,3 +65,11 @@ inline double l2norm(double[d:shp] a) : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, a)); } : fold(+, 0.0)); } + +inline double lnorm(double[d:shp] a, double x) +{ + return Math::sqrt(with { + (_mul_SxV_(0, shp) <= iv < shp) + : Math::pow(_sel_VxA_(iv, a), x); + } : fold(+, 0.0)); +} From b4a8966e4e7ad0fcce43b495fa4cf17d6efb4c2a Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 13:29:43 +0200 Subject: [PATCH 5/7] l2norm is quite common, add it to the stdlib --- src/numerical/MathArray.sac | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/src/numerical/MathArray.sac b/src/numerical/MathArray.sac index 5e50daa3..11b2406d 100644 --- a/src/numerical/MathArray.sac +++ b/src/numerical/MathArray.sac @@ -38,8 +38,13 @@ MAP_REAL(MAP_A, sqrt) MAP_REAL(MAP_A, floor) MAP_REAL(MAP_AxS, pow) -inline float +(float a, float b) { return _add_SxS_(a, b); } +/****************************************************************************** + * + * L2-norm + * + ******************************************************************************/ +inline float +(float a, float b) { return _add_SxS_(a, b); } inline float l2norm(float[d:shp] a) { return Math::sqrt(with { @@ -48,16 +53,7 @@ inline float l2norm(float[d:shp] a) } : fold(+, 0.0)); } -inline float lnorm(float[d:shp] a, float x) -{ - return Math::sqrt(with { - (_mul_SxV_(0, shp) <= iv < shp) - : Math::pow(_sel_VxA_(iv, a), x); - } : fold(+, 0.0)); -} - inline double +(double a, double b) { return _add_SxS_(a, b); } - inline double l2norm(double[d:shp] a) { return Math::sqrt(with { @@ -65,11 +61,3 @@ inline double l2norm(double[d:shp] a) : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, a)); } : fold(+, 0.0)); } - -inline double lnorm(double[d:shp] a, double x) -{ - return Math::sqrt(with { - (_mul_SxV_(0, shp) <= iv < shp) - : Math::pow(_sel_VxA_(iv, a), x); - } : fold(+, 0.0)); -} From 4e4efc0fa59e4b5762434e6858d8db9cb79cbc69 Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 14:52:19 +0200 Subject: [PATCH 6/7] fix default value --- src/numerical/MathArray.sac | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/numerical/MathArray.sac b/src/numerical/MathArray.sac index 11b2406d..f4d3b070 100644 --- a/src/numerical/MathArray.sac +++ b/src/numerical/MathArray.sac @@ -50,7 +50,7 @@ inline float l2norm(float[d:shp] a) return Math::sqrt(with { (_mul_SxV_(0, shp) <= iv < shp) : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, a)); - } : fold(+, 0.0)); + } : fold(+, 0f)); } inline double +(double a, double b) { return _add_SxS_(a, b); } @@ -59,5 +59,5 @@ inline double l2norm(double[d:shp] a) return Math::sqrt(with { (_mul_SxV_(0, shp) <= iv < shp) : _mul_SxS_(_sel_VxA_(iv, a), _sel_VxA_(iv, a)); - } : fold(+, 0.0)); + } : fold(+, 0d)); } From 875b04195ec32fdc4b479da3e83e14bb7f68d815 Mon Sep 17 00:00:00 2001 From: Jordy Aaldering Date: Thu, 25 Sep 2025 16:19:04 +0200 Subject: [PATCH 7/7] add missing make --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 30536087..b71a0016 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -49,6 +49,7 @@ jobs: run: | git clone --single-branch https://github.com/SacBase/sac-examples.git cd sac-examples + make all ./test.sh build-macos-x86: @@ -97,6 +98,7 @@ jobs: run: | git clone --single-branch https://github.com/SacBase/sac-examples.git cd sac-examples + make all ./test.sh build-macos-arm: @@ -145,4 +147,5 @@ jobs: run: | git clone --single-branch https://github.com/SacBase/sac-examples.git cd sac-examples + make all ./test.sh