text: "use strict";
  /**
   * @license
   * Copyright 2017 Google Inc. All Rights Reserved.
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   * =============================================================================
   */
  Object.defineProperty(exports, "__esModule", { value: true });
  var ArgMinMaxProgram = /** @class */ (function () {
      function ArgMinMaxProgram(reduceInfo, op, firstPass) {
          this.variableNames = ['A'];
          var windowSize = reduceInfo.windowSize;
          var batchSize = reduceInfo.batchSize;
          var inSize = reduceInfo.inSize;
          var outSize = Math.ceil(inSize / windowSize);
          if (!firstPass) {
              this.variableNames.push('bestIndicesA');
          }
          this.outputShape = [batchSize, outSize];
          var compOp = (op === 'max') ? '>' : '<';
          var indexSnippet = firstPass ?
              'inOffset + i;' :
              'round(getBestIndicesA(batch, inOffset + i));';
          this.userCode = "\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * " + windowSize + ";\n\n        int bestIndex = inOffset;\n        float bestValue = getA(batch, bestIndex);\n\n        for (int i = 0; i < " + windowSize + "; i++) {\n          int inIdx = " + indexSnippet + ";\n          float candidate = getA(batch, inIdx);\n          if (candidate " + compOp + " bestValue) {\n            bestValue = candidate;\n            bestIndex = inIdx;\n          }\n        }\n        setOutput(float(bestIndex));\n      }\n    ";
      }
      return ArgMinMaxProgram;
  }());
  exports.ArgMinMaxProgram = ArgMinMaxProgram;
  //# sourceMappingURL=argminmax_gpu.js.map