From b976ca1ec913f5646c7d078ed8809304a3b21575 Mon Sep 17 00:00:00 2001 From: Luka Dornhecker Date: Sun, 21 Jun 2026 10:27:06 +0200 Subject: [PATCH 1/2] add ci workflow --- .github/workflows/ci.yml | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ff84fd1 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + cmake: + name: ${{ matrix.os }} / ${{ matrix.preset }} + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + preset: [debug, release] + + steps: + - name: Check out repository + uses: actions/checkout@v7 + + - name: Configure + run: cmake --preset ${{ matrix.preset }} + + - name: Build + run: cmake --build --preset ${{ matrix.preset }} + + - name: Test + run: ctest --preset ${{ matrix.preset }} From 8b18bebfa778c428e67f02b3e437e72272e1ec1c Mon Sep 17 00:00:00 2001 From: Luka Dornhecker Date: Sun, 21 Jun 2026 10:38:59 +0200 Subject: [PATCH 2/2] calculate exponent gradients --- src/value.c | 1 + test/test.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/value.c b/src/value.c index f0f293e..7de6914 100644 --- a/src/value.c +++ b/src/value.c @@ -257,6 +257,7 @@ bool mg_backward(mg_graph* g, mg_value* out) { v->left->grad += v->right->data * powf(v->left->data, v->right->data - 1.0f) * v->grad; + v->right->grad += v->data * logf(v->left->data) * v->grad; break; case MG_OP_RELU: v->left->grad += (v->data > 0.0) * v->grad; diff --git a/test/test.c b/test/test.c index 65e2c95..cc77bd2 100644 --- a/test/test.c +++ b/test/test.c @@ -111,7 +111,7 @@ static void test_pow(void) { expect_close("pow data", mg_data(out), 64.0f); expect_close("pow base grad", mg_grad(base), 48.0f); - expect_close("pow exponent grad", mg_grad(exponent), 0.0f); + expect_close("pow exponent grad", mg_grad(exponent), 64.0f * logf(4.0f)); mg_graph_free(g); }