From 4ae7f3aa9c42451f4e7fdf5a6e38134486695a6e Mon Sep 17 00:00:00 2001
From: Noam Zerah <noam.zerah@cea.fr>
Date: Tue, 1 Apr 2025 12:02:36 +0000
Subject: [PATCH] Fix avgpooling forwardims when kernel size > input dim size

---
 src/operator/AvgPooling.cpp | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/src/operator/AvgPooling.cpp b/src/operator/AvgPooling.cpp
index 7561297ba..966063cd0 100644
--- a/src/operator/AvgPooling.cpp
+++ b/src/operator/AvgPooling.cpp
@@ -75,11 +75,12 @@ bool Aidge::AvgPooling_Op<DIM>::forwardDims(bool /*allowDataDependency*/) {
             const auto strideDim = mAttributes->template getAttr<AvgPoolingAttr::StrideDims>()[dim];
             const auto dilationDim = mAttributes->template getAttr<AvgPoolingAttr::Dilations>()[dim];
 
-            outputDims[dim+2] = 1 + static_cast<DimSize_t>(
-                                            roundingFunction(static_cast<float>(inputDims[dim+2] -
-                                                                    (kernelDim - 1) * dilationDim - 1) /
-                                            static_cast<float>(strideDim)));
+            const float effective_size = static_cast<float>(inputDims[dim+2] - (kernelDim - 1) * dilationDim - 1);
+            const float rounded_val = roundingFunction(effective_size / static_cast<float>(strideDim));
+            
+            outputDims[dim+2] = 1 + std::max(0, static_cast<int>(rounded_val));
         }
+    
         outputDims[1] = inputDims[1];
         outputDims[0] = inputDims[0];
         getOutput(0)->resize(outputDims);
-- 
GitLab