docs: @Override
      public double dot(long n, double alpha, INDArray X, INDArray Y) {
          if (Nd4j.getExecutioner().getProfilingMode() == OpExecutioner.ProfilingMode.ALL)
              OpProfiler.getInstance().processBlasCall(false, X, Y);
  
          if (X.isSparse() && !Y.isSparse()) {
              return Nd4j.getSparseBlasWrapper().level1().dot(n, alpha, X, Y);
          } else if (!X.isSparse() && Y.isSparse()) {
              return Nd4j.getSparseBlasWrapper().level1().dot(n, alpha, Y, X);
          } else if (X.isSparse() && Y.isSparse()) {
              // TODO - MKL doesn't contain such routines
              return 0;
          }
  
          if (X.data().dataType() == DataType.DOUBLE) {
              DefaultOpExecutioner.validateDataType(DataType.DOUBLE, X, Y);
              return ddot(n, X, BlasBufferUtil.getBlasStride(X), Y, BlasBufferUtil.getBlasStride(Y));
          } else if (X.data().dataType() == DataType.FLOAT) {
              DefaultOpExecutioner.validateDataType(DataType.FLOAT, X, Y);
              return sdot(n, X, BlasBufferUtil.getBlasStride(X), Y, BlasBufferUtil.getBlasStride(Y));
          } else {
              DefaultOpExecutioner.validateDataType(DataType.HALF, X, Y);
              return hdot(n, X, BlasBufferUtil.getBlasStride(X), Y, BlasBufferUtil.getBlasStride(Y));
          }
  
      }