REQUIRE_TRUE(Wx->isSameShape(wxCorrectShape),0,"GRU operation: wrong shape of input-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(wxCorrectShape).c_str(),ShapeUtils::shapeAsString(Wx).c_str());
REQUIRE_TRUE(Wh->isSameShape(whCorrectShape),0,"GRU operation: wrong shape of hidden-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(whCorrectShape).c_str(),ShapeUtils::shapeAsString(Wh).c_str());
REQUIRE_TRUE(b->isSameShape(bCorrectShape),0,"GRU operation: wrong shape of biases array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(bCorrectShape).c_str(),ShapeUtils::shapeAsString(b).c_str());
REQUIRE_TRUE(hI->isSameShape(h0CorrectShape),0,"GRU operation: wrong shape of previous cell output array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(h0CorrectShape).c_str(),ShapeUtils::shapeAsString(hI).c_str());
REQUIRE_TRUE(Wx->isSameShape(wxCorrectShape),0,"GRU operation: wrong shape of input-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(wxCorrectShape).c_str(),ShapeUtils::shapeAsString(Wx).c_str());
REQUIRE_TRUE(Wh->isSameShape(whCorrectShape),0,"GRU operation: wrong shape of hidden-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(whCorrectShape).c_str(),ShapeUtils::shapeAsString(Wh).c_str());
REQUIRE_TRUE(b->isSameShape(bCorrectShape),0,"GRU operation: wrong shape of biases array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(bCorrectShape).c_str(),ShapeUtils::shapeAsString(b).c_str());
REQUIRE_TRUE(hI->isSameShape(h0CorrectShape),0,"GRU_BP operation: wrong shape of previous cell output array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(h0CorrectShape).c_str(),ShapeUtils::shapeAsString(hI).c_str());
REQUIRE_TRUE(Wx->isSameShape(wxCorrectShape),0,"GRU_BP operation: wrong shape of input-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(wxCorrectShape).c_str(),ShapeUtils::shapeAsString(Wx).c_str());
REQUIRE_TRUE(Wh->isSameShape(whCorrectShape),0,"GRU_BP operation: wrong shape of hidden-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(whCorrectShape).c_str(),ShapeUtils::shapeAsString(Wh).c_str());
REQUIRE_TRUE(b->isSameShape(bCorrectShape),0,"GRU_BP operation: wrong shape of biases array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(bCorrectShape).c_str(),ShapeUtils::shapeAsString(b).c_str());
REQUIRE_TRUE(dLdh->isSameShape(hCorrectShape),0,"GRU_BP operation: wrong shape of gradient vs. ff output, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(hCorrectShape).c_str(),ShapeUtils::shapeAsString(dLdh).c_str());
REQUIRE_TRUE(hI->isSameShape(h0CorrectShape),0,"GRU_BP operation: wrong shape of previous cell output array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(h0CorrectShape).c_str(),ShapeUtils::shapeAsString(hI).c_str());
REQUIRE_TRUE(Wx->isSameShape(wxCorrectShape),0,"GRU_BP operation: wrong shape of input-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(wxCorrectShape).c_str(),ShapeUtils::shapeAsString(Wx).c_str());
REQUIRE_TRUE(Wh->isSameShape(whCorrectShape),0,"GRU_BP operation: wrong shape of hidden-to-hidden weights array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(whCorrectShape).c_str(),ShapeUtils::shapeAsString(Wh).c_str());
REQUIRE_TRUE(b->isSameShape(bCorrectShape),0,"GRU_BP operation: wrong shape of biases array, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(bCorrectShape).c_str(),ShapeUtils::shapeAsString(b).c_str());
REQUIRE_TRUE(dLdh->isSameShape(hCorrectShape),0,"GRU_BP operation: wrong shape of gradient vs. ff output, expected is %s, but got %s instead !",ShapeUtils::shapeAsString(hCorrectShape).c_str(),ShapeUtils::shapeAsString(dLdh).c_str());