summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
authorClaudius "keldu" Holeksa <mail@keldu.de>2025-09-23 17:08:11 +0200
committerClaudius "keldu" Holeksa <mail@keldu.de>2025-09-23 17:08:11 +0200
commitf992a6afc4e99691cf70186cf07031ed1f65096e (patch)
tree7113e19b1c77e96f24ddfce738390bdd20da1885 /modules
parent469fe4084787d00a9ab10f00204f7e766ed68161 (diff)
Fixed a bug in normalizationHEADmaster
Diffstat (limited to 'modules')
-rw-r--r--modules/codec/c++/data_math.hpp26
-rw-r--r--modules/codec/c++/math.hpp4
-rw-r--r--modules/codec/tests/math.cpp19
3 files changed, 45 insertions, 4 deletions
diff --git a/modules/codec/c++/data_math.hpp b/modules/codec/c++/data_math.hpp
index f423fcb..86336ad 100644
--- a/modules/codec/c++/data_math.hpp
+++ b/modules/codec/c++/data_math.hpp
@@ -99,7 +99,7 @@ public:
return values_.at(index);
}
- data<schema::Tensor<Inner, Dims...>, encode::Native> operator+(const data<schema::Tensor<Inner, Dims...>, encode::Native>& rhs) {
+ data<schema::Tensor<Inner, Dims...>, encode::Native> operator+(const data<schema::Tensor<Inner, Dims...>, encode::Native>& rhs) const {
data<schema::Tensor<Inner, Dims...>, encode::Native> c;
rank_iterator<Dims...>::in_fixed_bounds([&](const data<schema::FixedArray<schema::UInt64, sizeof...(Dims)>, encode::Native>& index) -> error_or<void>{
@@ -110,7 +110,7 @@ public:
return c;
}
- data<schema::Tensor<Inner, Dims...>, encode::Native> operator-(const data<schema::Tensor<Inner, Dims...>, encode::Native>& rhs) {
+ data<schema::Tensor<Inner, Dims...>, encode::Native> operator-(const data<schema::Tensor<Inner, Dims...>, encode::Native>& rhs) const {
data<schema::Tensor<Inner, Dims...>, encode::Native> c;
rank_iterator<Dims...>::in_fixed_bounds([&](const data<schema::FixedArray<schema::UInt64, sizeof...(Dims)>, encode::Native>& index) -> error_or<void>{
@@ -131,6 +131,28 @@ public:
return native_change;
}
+
+ data<schema::Tensor<Inner,Dims...>, encode::Native> operator*(const data<schema::Scalar<Inner>, encode::Native>& scal) const {
+ data<schema::Tensor<Inner, Dims...>, encode::Native> c;
+
+ rank_iterator<Dims...>::in_fixed_bounds([&](const data<schema::FixedArray<schema::UInt64, sizeof...(Dims)>, encode::Native>& index) -> error_or<void>{
+ c.at(index) = at(index) * scal.at({});
+ return make_void();
+ });
+
+ return c;
+ }
+
+ data<schema::Tensor<Inner,Dims...>, encode::Native> operator/(const data<schema::Scalar<Inner>, encode::Native>& scal) const {
+ data<schema::Tensor<Inner, Dims...>, encode::Native> c;
+
+ rank_iterator<Dims...>::in_fixed_bounds([&](const data<schema::FixedArray<schema::UInt64, sizeof...(Dims)>, encode::Native>& index) -> error_or<void>{
+ c.at(index) = at(index) / scal.at({});
+ return make_void();
+ });
+
+ return c;
+ }
};
}
diff --git a/modules/codec/c++/math.hpp b/modules/codec/c++/math.hpp
index 67d8ed3..ca43dd0 100644
--- a/modules/codec/c++/math.hpp
+++ b/modules/codec/c++/math.hpp
@@ -35,8 +35,8 @@ data<schema::Vector<T,D>, Encoding> normalize(const data<schema::Vector<T,D>>& i
auto sqrt_inp_dot = sqrt<T>(inp_dot);
saw::data<schema::Vector<T,D>, Encoding> out;
- out.at({{0u}}).set(out.at({{0u}}).get() / sqrt_inp_dot.at({}).get());
- out.at({{1u}}).set(out.at({{1u}}).get() / sqrt_inp_dot.at({}).get());
+ out.at({{0u}}).set(input.at({{0u}}).get() / sqrt_inp_dot.at({}).get());
+ out.at({{1u}}).set(input.at({{1u}}).get() / sqrt_inp_dot.at({}).get());
return out;
}
}
diff --git a/modules/codec/tests/math.cpp b/modules/codec/tests/math.cpp
index 4fb012f..cc371dd 100644
--- a/modules/codec/tests/math.cpp
+++ b/modules/codec/tests/math.cpp
@@ -75,4 +75,23 @@ SAW_TEST("Math/Dot"){
SAW_EXPECT(c.at({}).get() == 3.0, std::string{"Unexpected value for dot product "} + std::to_string(c.at({}).get()) );
}
+
+SAW_TEST("Math/Tensor Mult Scalar"){
+ using namespace saw;
+
+ data<sch::Vector<sch::Float64, 2u>> a;
+ {
+ a.at({{0u}}) = 2.0;
+ a.at({{1u}}) = 1.0;
+ }
+ data<sch::Vector<sch::Float64, 2u>> b;
+ {
+ b.at({{0u}}) = -1.0;
+ b.at({{1u}}) = 5.0;
+ }
+
+ auto c = math::dot(a,b);
+
+ SAW_EXPECT(c.at({}).get() == 3.0, std::string{"Unexpected value for dot product "} + std::to_string(c.at({}).get()) );
+}
}