19   -> std::vector<std::vector<size_t>>
 
   29   if (fAttrStrides.empty()) {
 
   30      fAttrStrides = std::vector<size_t>(fDim, 1);
 
   32   if (fAttrDilations.empty()) {
 
   33      fAttrDilations = std::vector<size_t>(fDim, 1);
 
   36   if (fAttrKernelShape.empty()) {
 
   37      fAttrKernelShape.resize(fDim);
 
   38      for (
size_t i = 0; i < fDim; i++)
 
   39         fAttrKernelShape[i] = fShapeW[i + 2] + (fAttrDilations[i] - 1) * (fShapeW[i + 2] - 1);
 
   41   if (fAttrOutputPadding.empty())
 
   42      fAttrOutputPadding = std::vector<size_t>(fDim, 0);
 
   54   if (fAttrPads.empty() ) {
 
   55      fAttrPads = std::vector<size_t>(2 * fDim, 0);
 
   56      if (fAttrOutputShape.size() == fDim) {
 
   60         std::runtime_error(
"ConvTranspose with output_shape explicitly set not yet supported.");
 
   81      if (fAttrAutopad != 
"NOTSET") {
 
   83         std::runtime_error(
"ConvTranspose with padding SAME_UPPER or SMAE_LOWER not supported");
 
   86   if (fAttrOutputShape.empty()) {
 
   87      fAttrOutputShape.resize(fDim);
 
   88      for (
size_t i = 0; i < fDim; i++) {
 
   90         fAttrOutputShape[i] = fAttrStrides[i] * (
inputShape[
j] - 1) + fAttrKernelShape[i] + fAttrOutputPadding[i] - fAttrPads[i] - fAttrPads[fDim+i];
 
   96         std::runtime_error(
"ConvTranspose with output_shape explicitly set not yet supported.");
 
   99   for (
size_t i = 0; i < fDim; i++)
 
  100      outShape[i + 2] = fAttrOutputShape[i];
 
 
  232   if (fShapeX.empty() || fShapeW.empty() || (fNB != 
"" && fShapeB.empty()) || fShapeY.empty()) {
 
  233      throw std::runtime_error(
"TMVA SOFIE Conv Op called to Generate without being initialized first");
 
  236   std::stringstream out;
 
  238   size_t bsize = fShapeX[0];
 
  239   size_t kDepth = (fDim > 2) ? fShapeW[2] : 1;     
 
  240   size_t kHeight = (fDim > 1) ? fShapeW[fDim] : 1; 
 
  241   size_t kWidth = fShapeW[fDim + 1];               
 
  243   size_t iDepth = (fDim > 2) ? fShapeX[2] : 1;     
 
  244   size_t iHeight = (fDim > 1) ? fShapeX[fDim] : 1; 
 
  245   size_t iWidth = fShapeX[fDim + 1];               
 
  247   size_t oDepth = (fDim > 2) ? fShapeY[2] : 1;     
 
  248   size_t oHeight = (fDim > 1) ? fShapeY[fDim] : 1; 
 
  249   size_t oWidth = fShapeY[fDim + 1];               
 
  251   out << 
"\n//----  operator ConvTranspose " << 
OpName << 
"\n";
 
  255      out << SP << fType << 
" * " << 
OpName << 
"_f = fVec_" << 
OpName << 
"_f.data();\n";
 
  260      out << SP << fType << 
" " << 
OpName << 
"_f[" << fShapeW[0] * fShapeW[1] * 
kernelSize << 
"] = {0};\n";
 
  266   size_t id = (fDim > 2) ? fDim - 3 : 2;
 
  267   size_t ih = (fDim > 1) ? fDim - 2 : 1;
 
  268   size_t iw = fDim - 1;
 
  283   for (
size_t i = 0; i < fDim; i++)
 
  289   out << SP << 
"for (std::size_t ic = 0; ic < " << fShapeW[0] << 
"; ic++) {\n";
 
  290   out << SP << SP << 
"for (std::size_t oc = 0; oc < " << fShapeW[1] << 
"; oc++) {\n";
 
  293      out << SP << SP << SP << 
"for (std::size_t kd = 0; kd < " << kDepth << 
"; kd++) {\n";
 
  295      out << SP << SP << SP << 
"for (std::size_t kh = 0; kh < " << 
kHeight << 
"; kh++) {\n";
 
  296   out << SP << SP << SP << SP << 
"for (std::size_t kw = 0; kw < " << 
kWidth << 
"; kw++) {\n";
 
  315   out << SP << SP << SP << SP << 
"}\n";
 
  317      out << SP << SP << SP << 
"}\n";
 
  319      out << SP << SP << SP << 
"}\n";
 
  321   out << SP << SP << 
"}\n";
 
  324   out << SP << 
"char " << 
OpName << 
"_transA = 'N';\n";
 
  325   out << SP << 
"char " << 
OpName << 
"_transB = 'T';\n";
 
  328   out << SP << 
"int " << 
OpName << 
"_k = " << fShapeW[0] << 
";\n";  
 
  329   out << SP << 
"float " << 
OpName << 
"_alpha = 1.0;\n";
 
  330   out << SP << 
"float " << 
OpName << 
"_beta = 0.0;\n";
 
  333      out << SP << fType << 
" * " << 
OpName << 
"_xcol = fVec_" << 
OpName << 
"_xcol.data();\n";
 
  339   out << SP << 
"for (size_t n = 0; n < " << 
bsize << 
"; n++) {\n";
 
  349      if (fAttrPads[0] != fAttrPads[1]) {
 
  350         std::cout << 
"TMVA SOFIE Operator Conv:  asymmetric padding not supported. Assume an average padding " 
  352         fAttrPads[0] = (fAttrPads[0] + fAttrPads[1]) / 2;
 
  357      if (fAttrPads[0] != fAttrPads[2] || fAttrPads[1] != fAttrPads[3]) {
 
  358         std::cout << 
"TMVA SOFIE Operator ConvTranspose:  asymmetric padding not supported. Assume an average padding " 
  360         fAttrPads[0] = (fAttrPads[0] + fAttrPads[2]) / 2;
 
  361         fAttrPads[1] = (fAttrPads[1] + fAttrPads[3]) / 2;
 
  365      if (fAttrPads[0] != fAttrPads[3] || fAttrPads[1] != fAttrPads[4] || fAttrPads[2] != fAttrPads[5]) {
 
  366         std::cout << 
"TMVA SOFIE Operator ConvTranspose:  asymmetric padding not supported. Assume an average padding " 
  368         fAttrPads[0] = (fAttrPads[0] + fAttrPads[3]) / 2;
 
  369         fAttrPads[1] = (fAttrPads[1] + fAttrPads[4]) / 2;
 
  370         fAttrPads[2] = (fAttrPads[2] + fAttrPads[5]) / 2;
 
  374   if (fAttrGroup == 1) {
 
  375      out << SP << SP << 
"size_t x_offset = n * " << fShapeX[1] * 
iDepth * 
iHeight * 
iWidth << 
";\n";
 
  376      out << SP << SP << 
"size_t out_offset = n * " << fShapeY[1] * 
oDepth * 
oHeight * 
oWidth << 
";\n";
 
  380      out << SP << SP << 
"BLAS::sgemm_(&" << 
OpName << 
"_transA, &" << 
OpName << 
"_transB, &" << 
OpName << 
"_m, &" 
  382          <<  
"tensor_" << fNX << 
" + x_offset, &" << 
OpName << 
"_m,\n"; 
 
  383      out << SP << SP << SP << 
OpName << 
"_f, &" << 
OpName << 
"_n, &" << 
OpName << 
"_beta, " 
  390         out << SP << SP << 
"TMVA::Experimental::SOFIE::UTILITY::col2im<float>(" << 
OpName << 
"_xcol," 
  395            out << 
"1, " << fAttrKernelShape[0] << 
",0," << fAttrPads[0] << 
",1," << fAttrStrides[0] << 
",1," 
  396                << fAttrDilations[0];
 
  398            out << fAttrKernelShape[0] << 
"," << fAttrKernelShape[1] << 
"," << fAttrPads[0] << 
"," << fAttrPads[1]
 
  399                << 
"," << fAttrStrides[0] << 
"," << fAttrStrides[1] << 
"," << fAttrDilations[0] << 
"," 
  400                << fAttrDilations[1];
 
  401         out << 
", tensor_" << fNY << 
" + out_offset);\n\n ";
 
  404         throw std::runtime_error(
"TMVA SOFIE 3D Conv Transpose not yet supported");
 
  405         out << SP << SP << 
"TMVA::Experimental::SOFIE::UTILITY::Im2col_3d<float>(tensor_" << fNX
 
  410             << fShapeX[1] << 
"," << 
oDepth << 
"," << 
oHeight << 
"," << 
oWidth << 
"," << fAttrKernelShape[0] << 
"," 
  411             << fAttrKernelShape[1] << 
"," << fAttrKernelShape[2] << 
"," << fAttrPads[0] << 
"," << fAttrPads[1] << 
"," 
  412             << fAttrPads[2] << 
"," << fAttrStrides[0] << 
"," << fAttrStrides[1] << 
"," << fAttrStrides[2] << 
"," 
  413             << fAttrDilations[0] << 
"," << fAttrDilations[1] << 
"," << fAttrDilations[2] << 
"," << 
OpName 
  426      out << SP << SP << 
"for (size_t g = 0; g < " << fAttrGroup << 
"; g++) {\n";
 
  427      out << SP << SP << 
"size_t x_offset = n * " << fShapeX[1] * 
iHeight * 
iWidth  << 
" + g * " 
  429      out << SP << SP << 
"size_t out_offset = n * " << fShapeY[1] * 
oHeight * 
oWidth << 
" + g * " 
  433      out << SP << SP << 
"BLAS::sgemm_(&" << 
OpName << 
"_transA, &" << 
OpName << 
"_transB, &" << 
OpName << 
"_m, &" 
  435          << 
"tensor_" << fNX << 
" + x_offset, &" << 
OpName 
  438      << 
"_beta, " << 
OpName << 
"_xcol , &" << 
OpName << 
"_m);\n";
 
  441         out << SP << SP << 
"TMVA::Experimental::SOFIE::UTILITY::col2im<float>(" << 
OpName << 
"_xcol," 
  446            out << 
"1, " << fAttrKernelShape[0] << 
",0," << fAttrPads[0] << 
",1," << fAttrStrides[0] << 
",1," 
  447                << fAttrDilations[0];
 
  449            out << fAttrKernelShape[0] << 
"," << fAttrKernelShape[1] << 
"," << fAttrPads[0] << 
"," << fAttrPads[1]
 
  450                << 
"," << fAttrStrides[0] << 
"," << fAttrStrides[1] << 
"," << fAttrDilations[0] << 
"," 
  451                << fAttrDilations[1];
 
  452         out << 
", tensor_" << fNY << 
" + out_offset);\n\n ";
 
  455         throw std::runtime_error(
"TMVA SOFIE 3D Conv Transpose not yet supported");
 
  457         out << SP << SP << 
"TMVA::Experimental::SOFIE::UTILITY::Im2col_3d<float>(tensor_" << fNX
 
  462             << fShapeX[1] << 
"," << 
oDepth << 
"," << 
oHeight << 
"," << 
oWidth << 
"," << fAttrKernelShape[0] << 
"," 
  463             << fAttrKernelShape[1] << 
"," << fAttrKernelShape[2] << 
"," << fAttrPads[0] << 
"," << fAttrPads[1] << 
"," 
  464             << fAttrPads[2] << 
"," << fAttrStrides[0] << 
"," << fAttrStrides[1] << 
"," << fAttrStrides[2] << 
"," 
  465             << fAttrDilations[0] << 
"," << fAttrDilations[1] << 
"," << fAttrDilations[2] << 
"," << 
OpName 
  479      out << SP << SP << 
"}\n"; 
 
  484   if (fNBroadcastedB != 
"") {
 
  486      out << SP << 
"float " << 
OpName << 
"_gamma = 1.0;\n";
 
  487      out << SP << 
"int " << 
OpName << 
"_incx = 1;\n";
 
  488      out << SP << 
"int " << 
OpName << 
"_incy = 1;\n";
 
  490      out << SP << 
"BLAS::saxpy_(&" << 
OpName << 
"_size, &" << 
OpName << 
"_gamma, tensor_" << fNBroadcastedB << 
", &" 
  491          << 
OpName << 
"_incx, tensor_" << fNY << 
", &" << 
OpName << 
"_incy);\n";