docs: @Override
      public INDArray exec(RandomOp op, Random rng) {
          if (!(rng instanceof CpuNativeRandom))
              throw new IllegalStateException(
                      "You should use one of NativeRandom classes for NativeOperations execution. Op class: " + op.getClass().getName());
  
          long st = profilingConfigurableHookIn(op);
  
          //validateDataType(Nd4j.dataType(), op);
  
          Preconditions.checkArgument(op.z().isR(), "Op.Z must have one of floating point types");
  
          if (op.x() != null && op.y() != null && op.z() != null) {
              // triple arg call
              loop.execRandom(null, op.opNum(), rng.getStatePointer(), // rng state ptr
                          op.x().data().addressPointer(), (LongPointer) op.x().shapeInfoDataBuffer().addressPointer(),
                      null, null,
                          op.y().data().addressPointer(), (LongPointer) op.y().shapeInfoDataBuffer().addressPointer(),
                      null, null,
                          op.z().data().addressPointer(), (LongPointer) op.z().shapeInfoDataBuffer().addressPointer(),
                      null, null,
                          op.extraArgsDataBuff(op.z().dataType()).addressPointer());
          } else if (op.x() != null && op.z() != null) {
              //double arg call
                  loop.execRandom(null, op.opNum(), rng.getStatePointer(), // rng state ptr
                          op.x().data().addressPointer(), (LongPointer) op.x().shapeInfoDataBuffer().addressPointer(),
                          null, null,
                          op.z().data().addressPointer(), (LongPointer) op.z().shapeInfoDataBuffer().addressPointer(),
                          null, null,
                          op.extraArgsDataBuff(op.z().dataType()).addressPointer());
          } else {
              // single arg call
                  loop.execRandom(null, op.opNum(), rng.getStatePointer(), // rng state ptr
                          op.z().data().addressPointer(), (LongPointer) op.z().shapeInfoDataBuffer().addressPointer(),
                          null, null,
                          op.extraArgsDataBuff(op.z().dataType()).addressPointer());
          }
  
          profilingConfigurableHookOut(op, st);
  
          return op.z();
      }