All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.nd4j.nativeblas.Nd4jCpu Maven / Gradle / Ivy

There is a newer version: 1.0.0-M2.1
Show newest version
// Targeted by JavaCPP version 1.3.3: DO NOT EDIT THIS FILE

package org.nd4j.nativeblas;

import java.nio.*;
import org.bytedeco.javacpp.*;
import org.bytedeco.javacpp.annotation.*;

public class Nd4jCpu extends org.nd4j.nativeblas.Nd4jCpuPresets {
    static { Loader.load(); }

// Parsed from NativeOps.h

//
// Created by agibsonccc on 2/21/16.
//

// #ifndef NATIVEOPERATIONS_NATIVEOPS_H
// #define NATIVEOPERATIONS_NATIVEOPS_H

// #ifndef thread_local
// # if __STDC_VERSION__ >= 201112 && !defined __STDC_NO_THREADS__
// #  define thread_local _Thread_local
// # elif defined _WIN32 && (
//        defined _MSC_VER ||
//        defined __ICL ||
//        defined __DMC__ ||
//        defined __BORLANDC__ )
// #  define thread_local __declspec(thread)
/* note that ICC (linux) and Clang are covered by __GNUC__ */
// # elif defined __GNUC__ ||
//        defined __SUNPRO_C ||
//        defined __xlC__
// #  define thread_local __thread
// # else
// #  error "Cannot define thread_local"
// # endif
// #endif

// #include 
// #include 
// #include 

//DO NOT REMOVE: THIS IS AN EDITOR SEMANTICS THING FOR CLION
//IT DEFINES THE EXPORT MACRO FOR THE EDITOR AND THEN
//RE ADDS THE DEFINITION VIA dll.h
// #ifdef  _WIN32
// #define ND4J_EXPORT __declspec(dllexport)
// #else
// #define ND4J_EXPORT
// #endif
// #include 

public static native int tad_threshold(); public static native void tad_threshold(int tad_threshold);
public static native int element_threshold(); public static native void element_threshold(int element_threshold);

public static native @Cast("bool") boolean debug(); public static native void debug(boolean debug);
public static native @Cast("bool") boolean verbose(); public static native void verbose(boolean verbose);



public static class NativeOps extends org.nd4j.nativeblas.NativeOps {
    static { Loader.load(); }
    /** Default native constructor. */
    public NativeOps() { super((Pointer)null); allocate(); }
    /** Native array allocator. Access with {@link Pointer#position(long)}. */
    public NativeOps(long size) { super((Pointer)null); allocateArray(size); }
    /** Pointer cast constructor. Invokes {@link Pointer#Pointer(Pointer)}. */
    public NativeOps(Pointer p) { super(p); }
    private native void allocate();
    private native void allocateArray(long size);
    @Override public NativeOps position(long position) {
        return (NativeOps)super.position(position);
    }



    /**
     *
     * @param num
     */
    public native void setElementThreshold(int num);

    /**
     *
     * @param num
     */
    public native void setTADThreshold(int num);

    /**
       *
       * @param opNum
       * @param x
       * @param xShapeInfo
       * @param extraParams
       */
    public native double execIndexReduceScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                             DoublePointer x,
                                             IntPointer xInfo,
                                             DoublePointer extraParams);
    public native double execIndexReduceScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                             DoubleBuffer x,
                                             IntBuffer xInfo,
                                             DoubleBuffer extraParams);
    public native double execIndexReduceScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                             double[] x,
                                             int[] xInfo,
                                             double[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execIndexReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                     DoublePointer x,
                                     IntPointer xInfo,
                                     DoublePointer extraParams,
                                     DoublePointer result,
                                     IntPointer resultShapeInfoBuffer,
                                     IntPointer dimension, int dimensionLength);
    public native void execIndexReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                     DoubleBuffer x,
                                     IntBuffer xInfo,
                                     DoubleBuffer extraParams,
                                     DoubleBuffer result,
                                     IntBuffer resultShapeInfoBuffer,
                                     IntBuffer dimension, int dimensionLength);
    public native void execIndexReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                     double[] x,
                                     int[] xInfo,
                                     double[] extraParams,
                                     double[] result,
                                     int[] resultShapeInfoBuffer,
                                     int[] dimension, int dimensionLength);
    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param dimension
     * @param dimensionLength
     */
    public native void execBroadcastDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                DoublePointer x,
                IntPointer xInfo,
                DoublePointer y,
                IntPointer yInfo,
                DoublePointer result,
                IntPointer resultShapeInfo,
                IntPointer dimension,
                int dimensionLength);
    public native void execBroadcastDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                DoubleBuffer x,
                IntBuffer xInfo,
                DoubleBuffer y,
                IntBuffer yInfo,
                DoubleBuffer result,
                IntBuffer resultShapeInfo,
                IntBuffer dimension,
                int dimensionLength);
    public native void execBroadcastDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                double[] x,
                int[] xInfo,
                double[] y,
                int[] yInfo,
                double[] result,
                int[] resultShapeInfo,
                int[] dimension,
                int dimensionLength);



    /**
     *
     * @param opNum
     * @param dx
     * @param xStride
     * @param y
     * @param yStride
     * @param result
     * @param resultStride
     * @param extraParams
     * @param n
     */
    public native void execPairwiseTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           DoublePointer dx,
                                           int xStride,
                                           DoublePointer y,
                                           int yStride,
                                           DoublePointer result,
                                           int resultStride,
                                           DoublePointer extraParams,
                                           @Cast("Nd4jIndex") long n);
    public native void execPairwiseTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           DoubleBuffer dx,
                                           int xStride,
                                           DoubleBuffer y,
                                           int yStride,
                                           DoubleBuffer result,
                                           int resultStride,
                                           DoubleBuffer extraParams,
                                           @Cast("Nd4jIndex") long n);
    public native void execPairwiseTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           double[] dx,
                                           int xStride,
                                           double[] y,
                                           int yStride,
                                           double[] result,
                                           int resultStride,
                                           double[] extraParams,
                                           @Cast("Nd4jIndex") long n);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     * @param xIndexes
     * @param yIndexes
     * @param resultIndexes
     */
    public native void execPairwiseTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         DoublePointer dx,
                                         IntPointer xInfo,
                                         DoublePointer y,
                                         IntPointer yInfo,
                                         DoublePointer result,
                                         IntPointer resultShapeInfo,
                                         DoublePointer extraParams,
                                         IntPointer xIndexes,
                                         IntPointer yIndexes,
                                         IntPointer resultIndexes);
    public native void execPairwiseTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         DoubleBuffer dx,
                                         IntBuffer xInfo,
                                         DoubleBuffer y,
                                         IntBuffer yInfo,
                                         DoubleBuffer result,
                                         IntBuffer resultShapeInfo,
                                         DoubleBuffer extraParams,
                                         IntBuffer xIndexes,
                                         IntBuffer yIndexes,
                                         IntBuffer resultIndexes);
    public native void execPairwiseTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         double[] dx,
                                         int[] xInfo,
                                         double[] y,
                                         int[] yInfo,
                                         double[] result,
                                         int[] resultShapeInfo,
                                         double[] extraParams,
                                         int[] xIndexes,
                                         int[] yIndexes,
                                         int[] resultIndexes);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     */
    public native void execPairwiseTransformDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                DoublePointer dx,
                IntPointer xShapeInfo,
                DoublePointer y,
                IntPointer yShapeInfo,
                DoublePointer result,
                IntPointer resultShapeInfo,
                DoublePointer extraParams);
    public native void execPairwiseTransformDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                DoubleBuffer dx,
                IntBuffer xShapeInfo,
                DoubleBuffer y,
                IntBuffer yShapeInfo,
                DoubleBuffer result,
                IntBuffer resultShapeInfo,
                DoubleBuffer extraParams);
    public native void execPairwiseTransformDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                double[] dx,
                int[] xShapeInfo,
                double[] y,
                int[] yShapeInfo,
                double[] result,
                int[] resultShapeInfo,
                double[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                DoublePointer x,
                                IntPointer xInfo,
                                DoublePointer extraParams,
                                DoublePointer result,
                                IntPointer resultShapeInfo);
    public native void execReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                DoubleBuffer x,
                                IntBuffer xInfo,
                                DoubleBuffer extraParams,
                                DoubleBuffer result,
                                IntBuffer resultShapeInfo);
    public native void execReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                double[] x,
                                int[] xInfo,
                                double[] extraParams,
                                double[] result,
                                int[] resultShapeInfo);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                DoublePointer x,
                                IntPointer xInfo,
                                DoublePointer extraParams,
                                DoublePointer result,
                                IntPointer resultShapeInfo,
                                IntPointer dimension,
                                int dimensionLength);
    public native void execReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                DoubleBuffer x,
                                IntBuffer xInfo,
                                DoubleBuffer extraParams,
                                DoubleBuffer result,
                                IntBuffer resultShapeInfo,
                                IntBuffer dimension,
                                int dimensionLength);
    public native void execReduceDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                double[] x,
                                int[] xInfo,
                                double[] extraParams,
                                double[] result,
                                int[] resultShapeInfo,
                                int[] dimension,
                                int dimensionLength);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @return
     */
    public native double execReduceScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      DoublePointer x,
                                      IntPointer xInfo,
                                      DoublePointer extraParams);
    public native double execReduceScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      DoubleBuffer x,
                                      IntBuffer xInfo,
                                      DoubleBuffer extraParams);
    public native double execReduceScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      double[] x,
                                      int[] xInfo,
                                      double[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduce3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 DoublePointer x,
                                 IntPointer xInfo,
                                 DoublePointer extraParamsVals,
                                 DoublePointer y,
                                 IntPointer yInfo,
                                 DoublePointer result,
                                 IntPointer resultShapeInfo);
    public native void execReduce3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 DoubleBuffer x,
                                 IntBuffer xInfo,
                                 DoubleBuffer extraParamsVals,
                                 DoubleBuffer y,
                                 IntBuffer yInfo,
                                 DoubleBuffer result,
                                 IntBuffer resultShapeInfo);
    public native void execReduce3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 double[] x,
                                 int[] xInfo,
                                 double[] extraParamsVals,
                                 double[] y,
                                 int[] yInfo,
                                 double[] result,
                                 int[] resultShapeInfo);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     */
    public native double execReduce3ScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         DoublePointer x,
                                         IntPointer xInfo,
                                         DoublePointer extraParamsVals,
                                         DoublePointer y,
                                         IntPointer yInfo);
    public native double execReduce3ScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         DoubleBuffer x,
                                         IntBuffer xInfo,
                                         DoubleBuffer extraParamsVals,
                                         DoubleBuffer y,
                                         IntBuffer yInfo);
    public native double execReduce3ScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         double[] x,
                                         int[] xInfo,
                                         double[] extraParamsVals,
                                         double[] y,
                                         int[] yInfo);
    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execReduce3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 DoublePointer x,
                                 IntPointer xInfo,
                                 DoublePointer extraParamsVals,
                                 DoublePointer y,
                                 IntPointer yInfo,
                                 DoublePointer result,
                                 IntPointer resultShapeInfoBuffer,
                                 IntPointer dimension,
                                 int dimensionLength);
    public native void execReduce3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 DoubleBuffer x,
                                 IntBuffer xInfo,
                                 DoubleBuffer extraParamsVals,
                                 DoubleBuffer y,
                                 IntBuffer yInfo,
                                 DoubleBuffer result,
                                 IntBuffer resultShapeInfoBuffer,
                                 IntBuffer dimension,
                                 int dimensionLength);
    public native void execReduce3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 double[] x,
                                 int[] xInfo,
                                 double[] extraParamsVals,
                                 double[] y,
                                 int[] yInfo,
                                 double[] result,
                                 int[] resultShapeInfoBuffer,
                                 int[] dimension,
                                 int dimensionLength);

    public native void execReduce3AllDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 DoublePointer x,
                                 IntPointer xInfo,
                                 DoublePointer extraParamsVals,
                                 DoublePointer y,
                                 IntPointer yInfo,
                                 DoublePointer result,
                                 IntPointer resultShapeInfoBuffer,
                                 IntPointer dimension,
                                 int dimensionLength,
                                 IntPointer xTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongPointer xOffsets,
                                 IntPointer yTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongPointer yOffsets);
    public native void execReduce3AllDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 DoubleBuffer x,
                                 IntBuffer xInfo,
                                 DoubleBuffer extraParamsVals,
                                 DoubleBuffer y,
                                 IntBuffer yInfo,
                                 DoubleBuffer result,
                                 IntBuffer resultShapeInfoBuffer,
                                 IntBuffer dimension,
                                 int dimensionLength,
                                 IntBuffer xTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongBuffer xOffsets,
                                 IntBuffer yTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongBuffer yOffsets);
    public native void execReduce3AllDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 double[] x,
                                 int[] xInfo,
                                 double[] extraParamsVals,
                                 double[] y,
                                 int[] yInfo,
                                 double[] result,
                                 int[] resultShapeInfoBuffer,
                                 int[] dimension,
                                 int dimensionLength,
                                 int[] xTadShapeInfo,
                                 @Cast("Nd4jIndex*") long[] xOffsets,
                                 int[] yTadShapeInfo,
                                 @Cast("Nd4jIndex*") long[] yOffsets);

    public native void execReduce3AllFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatPointer x,
                                  IntPointer xInfo,
                                  FloatPointer extraParamsVals,
                                  FloatPointer y,
                                  IntPointer yInfo,
                                  FloatPointer result,
                                  IntPointer resultShapeInfoBuffer,
                                  IntPointer dimension,
                                  int dimensionLength,
                                  IntPointer xTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongPointer xOffsets,
                                  IntPointer yTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongPointer yOffsets);
    public native void execReduce3AllFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatBuffer x,
                                  IntBuffer xInfo,
                                  FloatBuffer extraParamsVals,
                                  FloatBuffer y,
                                  IntBuffer yInfo,
                                  FloatBuffer result,
                                  IntBuffer resultShapeInfoBuffer,
                                  IntBuffer dimension,
                                  int dimensionLength,
                                  IntBuffer xTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongBuffer xOffsets,
                                  IntBuffer yTadShapeInfo,
                                 @Cast("Nd4jIndex*") LongBuffer yOffsets);
    public native void execReduce3AllFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  float[] x,
                                  int[] xInfo,
                                  float[] extraParamsVals,
                                  float[] y,
                                  int[] yInfo,
                                  float[] result,
                                  int[] resultShapeInfoBuffer,
                                  int[] dimension,
                                  int dimensionLength,
                                  int[] xTadShapeInfo,
                                 @Cast("Nd4jIndex*") long[] xOffsets,
                                  int[] yTadShapeInfo,
                                 @Cast("Nd4jIndex*") long[] yOffsets);

    public native void execReduce3AllHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  @Cast("float16*") ShortPointer x,
                                  IntPointer xInfo,
                                  @Cast("float16*") ShortPointer extraParamsVals,
                                  @Cast("float16*") ShortPointer y,
                                  IntPointer yInfo,
                                  @Cast("float16*") ShortPointer result,
                                  IntPointer resultShapeInfoBuffer,
                                  IntPointer dimension,
                                  int dimensionLength,
                                  IntPointer xTadShapeInfo,
                                @Cast("Nd4jIndex*") LongPointer xOffsets,
                                  IntPointer yTadShapeInfo,
                                @Cast("Nd4jIndex*") LongPointer yOffsets);
    public native void execReduce3AllHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  @Cast("float16*") ShortBuffer x,
                                  IntBuffer xInfo,
                                  @Cast("float16*") ShortBuffer extraParamsVals,
                                  @Cast("float16*") ShortBuffer y,
                                  IntBuffer yInfo,
                                  @Cast("float16*") ShortBuffer result,
                                  IntBuffer resultShapeInfoBuffer,
                                  IntBuffer dimension,
                                  int dimensionLength,
                                  IntBuffer xTadShapeInfo,
                                @Cast("Nd4jIndex*") LongBuffer xOffsets,
                                  IntBuffer yTadShapeInfo,
                                @Cast("Nd4jIndex*") LongBuffer yOffsets);
    public native void execReduce3AllHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  @Cast("float16*") short[] x,
                                  int[] xInfo,
                                  @Cast("float16*") short[] extraParamsVals,
                                  @Cast("float16*") short[] y,
                                  int[] yInfo,
                                  @Cast("float16*") short[] result,
                                  int[] resultShapeInfoBuffer,
                                  int[] dimension,
                                  int dimensionLength,
                                  int[] xTadShapeInfo,
                                @Cast("Nd4jIndex*") long[] xOffsets,
                                  int[] yTadShapeInfo,
                                @Cast("Nd4jIndex*") long[] yOffsets);





    /**
     *
     * @param opNum
     * @param x
     * @param xStride
     * @param result
     * @param resultStride
     * @param scalar
     * @param extraParams
     * @param n
     */
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                DoublePointer x,
                                int xStride,
                                DoublePointer result,
                                int resultStride,
                                double scalar,
                                DoublePointer extraParams,
                                @Cast("Nd4jIndex") long n);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                DoubleBuffer x,
                                int xStride,
                                DoubleBuffer result,
                                int resultStride,
                                double scalar,
                                DoubleBuffer extraParams,
                                @Cast("Nd4jIndex") long n);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                double[] x,
                                int xStride,
                                double[] result,
                                int resultStride,
                                double scalar,
                                double[] extraParams,
                                @Cast("Nd4jIndex") long n);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param scalar
     * @param extraParams
     * @param n
     */
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              DoublePointer x,
                              IntPointer xInfo,
                              DoublePointer result,
                              IntPointer resultShapeInfo,
                              double scalar,
                              DoublePointer extraParams);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              DoubleBuffer x,
                              IntBuffer xInfo,
                              DoubleBuffer result,
                              IntBuffer resultShapeInfo,
                              double scalar,
                              DoubleBuffer extraParams);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              double[] x,
                              int[] xInfo,
                              double[] result,
                              int[] resultShapeInfo,
                              double scalar,
                              double[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param scalar
     * @param extraParams
     * @param n
     * @param xIndexes
     * @param resultIndexes
     */
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              DoublePointer x,
                              IntPointer xInfo,
                              DoublePointer result,
                              IntPointer resultShapeInfo,
                              double scalar,
                              DoublePointer extraParams,
                              @Cast("Nd4jIndex") long n,
                              IntPointer xIndexes,
                              IntPointer resultIndexes);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              DoubleBuffer x,
                              IntBuffer xInfo,
                              DoubleBuffer result,
                              IntBuffer resultShapeInfo,
                              double scalar,
                              DoubleBuffer extraParams,
                              @Cast("Nd4jIndex") long n,
                              IntBuffer xIndexes,
                              IntBuffer resultIndexes);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              double[] x,
                              int[] xInfo,
                              double[] result,
                              int[] resultShapeInfo,
                              double scalar,
                              double[] extraParams,
                              @Cast("Nd4jIndex") long n,
                              int[] xIndexes,
                              int[] resultIndexes);
    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     */
    public native double execSummaryStatsScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                              int opNum,
                                              DoublePointer x,
                                              IntPointer xInfo,
                                              DoublePointer extraParams,
                                              @Cast("bool") boolean biasCorrected);
    public native double execSummaryStatsScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                              int opNum,
                                              DoubleBuffer x,
                                              IntBuffer xInfo,
                                              DoubleBuffer extraParams,
                                              @Cast("bool") boolean biasCorrected);
    public native double execSummaryStatsScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                              int opNum,
                                              double[] x,
                                              int[] xInfo,
                                              double[] extraParams,
                                              @Cast("bool") boolean biasCorrected);
    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execSummaryStatsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      DoublePointer x,
                                      IntPointer xInfo,
                                      DoublePointer extraParams,
                                      DoublePointer result,
                                      IntPointer resultShapeInfo,
                                      @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      DoubleBuffer x,
                                      IntBuffer xInfo,
                                      DoubleBuffer extraParams,
                                      DoubleBuffer result,
                                      IntBuffer resultShapeInfo,
                                      @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      double[] x,
                                      int[] xInfo,
                                      double[] extraParams,
                                      double[] result,
                                      int[] resultShapeInfo,
                                      @Cast("bool") boolean biasCorrected);
    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execSummaryStatsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      DoublePointer x,
                                      IntPointer xInfo,
                                      DoublePointer extraParams,
                                      DoublePointer result,
                                      IntPointer resultShapeInfoBuffer,
                                      IntPointer dimension,
                                      int dimensionLength,
                                      @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      DoubleBuffer x,
                                      IntBuffer xInfo,
                                      DoubleBuffer extraParams,
                                      DoubleBuffer result,
                                      IntBuffer resultShapeInfoBuffer,
                                      IntBuffer dimension,
                                      int dimensionLength,
                                      @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      double[] x,
                                      int[] xInfo,
                                      double[] extraParams,
                                      double[] result,
                                      int[] resultShapeInfoBuffer,
                                      int[] dimension,
                                      int dimensionLength,
                                      @Cast("bool") boolean biasCorrected);
    /**
     *
     * @param opNum
     * @param dx
     * @param xStride
     * @param result
     * @param resultStride
     * @param extraParams
     * @param n
     */
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   DoublePointer dx,
                                   int xStride,
                                   DoublePointer result,
                                   int resultStride,
                                   DoublePointer extraParams, @Cast("Nd4jIndex") long n);
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   DoubleBuffer dx,
                                   int xStride,
                                   DoubleBuffer result,
                                   int resultStride,
                                   DoubleBuffer extraParams, @Cast("Nd4jIndex") long n);
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   double[] dx,
                                   int xStride,
                                   double[] result,
                                   int resultStride,
                                   double[] extraParams, @Cast("Nd4jIndex") long n);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     */
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   DoublePointer dx,
                                   IntPointer xInfo,
                                   DoublePointer result,
                                   IntPointer resultShapeInfo,
                                   DoublePointer extraParams);
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   DoubleBuffer dx,
                                   IntBuffer xInfo,
                                   DoubleBuffer result,
                                   IntBuffer resultShapeInfo,
                                   DoubleBuffer extraParams);
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   double[] dx,
                                   int[] xInfo,
                                   double[] result,
                                   int[] resultShapeInfo,
                                   double[] extraParams);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     */
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                   int opNum,
                                   DoublePointer dx,
                                   IntPointer xShapeInfo,
                                   DoublePointer result,
                                   IntPointer resultShapeInfo,
                                   DoublePointer extraParams,
                                   IntPointer xIndexes,
                                   IntPointer resultIndexes);
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                   int opNum,
                                   DoubleBuffer dx,
                                   IntBuffer xShapeInfo,
                                   DoubleBuffer result,
                                   IntBuffer resultShapeInfo,
                                   DoubleBuffer extraParams,
                                   IntBuffer xIndexes,
                                   IntBuffer resultIndexes);
    public native void execTransformDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                   int opNum,
                                   double[] dx,
                                   int[] xShapeInfo,
                                   double[] result,
                                   int[] resultShapeInfo,
                                   double[] extraParams,
                                   int[] xIndexes,
                                   int[] resultIndexes);

    /**
    *
    * @param opNum
    * @param x
    * @param xShapeInfo
    * @param extraParams
    */
    public native float execIndexReduceScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           FloatPointer x,
                                           IntPointer xShapeInfo,
                                           FloatPointer extraParams);
    public native float execIndexReduceScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           FloatBuffer x,
                                           IntBuffer xShapeInfo,
                                           FloatBuffer extraParams);
    public native float execIndexReduceScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           float[] x,
                                           int[] xShapeInfo,
                                           float[] extraParams);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @return
     */
    public native float execIndexReduceScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        @Cast("float16*") ShortPointer x,
                                        IntPointer xShapeInfo,
                                        @Cast("float16*") ShortPointer extraParams);
    public native float execIndexReduceScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        @Cast("float16*") ShortBuffer x,
                                        IntBuffer xShapeInfo,
                                        @Cast("float16*") ShortBuffer extraParams);
    public native float execIndexReduceScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        @Cast("float16*") short[] x,
                                        int[] xShapeInfo,
                                        @Cast("float16*") short[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execIndexReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                    FloatPointer x,
                                    IntPointer xShapeInfo,
                                    FloatPointer extraParams,
                                    FloatPointer result,
                                    IntPointer resultShapeInfoBuffer,
                                    IntPointer dimension, int dimensionLength);
    public native void execIndexReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                    FloatBuffer x,
                                    IntBuffer xShapeInfo,
                                    FloatBuffer extraParams,
                                    FloatBuffer result,
                                    IntBuffer resultShapeInfoBuffer,
                                    IntBuffer dimension, int dimensionLength);
    public native void execIndexReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                    float[] x,
                                    int[] xShapeInfo,
                                    float[] extraParams,
                                    float[] result,
                                    int[] resultShapeInfoBuffer,
                                    int[] dimension, int dimensionLength);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execIndexReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   @Cast("float16*") ShortPointer x,
                                   IntPointer xShapeInfo,
                                   @Cast("float16*") ShortPointer extraParams,
                                   @Cast("float16*") ShortPointer result,
                                   IntPointer resultShapeInfoBuffer,
                                   IntPointer dimension, int dimensionLength);
    public native void execIndexReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   @Cast("float16*") ShortBuffer x,
                                   IntBuffer xShapeInfo,
                                   @Cast("float16*") ShortBuffer extraParams,
                                   @Cast("float16*") ShortBuffer result,
                                   IntBuffer resultShapeInfoBuffer,
                                   IntBuffer dimension, int dimensionLength);
    public native void execIndexReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                   @Cast("float16*") short[] x,
                                   int[] xShapeInfo,
                                   @Cast("float16*") short[] extraParams,
                                   @Cast("float16*") short[] result,
                                   int[] resultShapeInfoBuffer,
                                   int[] dimension, int dimensionLength);
    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param dimension
     * @param dimensionLength
     */
    public native void execBroadcastFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                FloatPointer x,
                IntPointer xShapeInfo,
                FloatPointer y,
                IntPointer yShapeInfo,
                FloatPointer result,
                IntPointer resultShapeInfo,
                IntPointer dimension,
                int dimensionLength);
    public native void execBroadcastFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                FloatBuffer x,
                IntBuffer xShapeInfo,
                FloatBuffer y,
                IntBuffer yShapeInfo,
                FloatBuffer result,
                IntBuffer resultShapeInfo,
                IntBuffer dimension,
                int dimensionLength);
    public native void execBroadcastFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                float[] x,
                int[] xShapeInfo,
                float[] y,
                int[] yShapeInfo,
                float[] result,
                int[] resultShapeInfo,
                int[] dimension,
                int dimensionLength);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param dimension
     * @param dimensionLength
     */
    public native void execBroadcastHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                @Cast("float16*") ShortPointer x,
                IntPointer xShapeInfo,
                @Cast("float16*") ShortPointer y,
                IntPointer yShapeInfo,
                @Cast("float16*") ShortPointer result,
                IntPointer resultShapeInfo,
                IntPointer dimension, int dimensionLength);
    public native void execBroadcastHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                @Cast("float16*") ShortBuffer x,
                IntBuffer xShapeInfo,
                @Cast("float16*") ShortBuffer y,
                IntBuffer yShapeInfo,
                @Cast("float16*") ShortBuffer result,
                IntBuffer resultShapeInfo,
                IntBuffer dimension, int dimensionLength);
    public native void execBroadcastHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int opNum,
                @Cast("float16*") short[] x,
                int[] xShapeInfo,
                @Cast("float16*") short[] y,
                int[] yShapeInfo,
                @Cast("float16*") short[] result,
                int[] resultShapeInfo,
                int[] dimension, int dimensionLength);



    /**
     *
     * @param opNum
     * @param dx
     * @param xStride
     * @param y
     * @param yStride
     * @param result
     * @param resultStride
     * @param extraParams
     * @param n
     */
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                          int opNum,
                                          FloatPointer dx,
                                          int xStride,
                                          FloatPointer y,
                                          int yStride,
                                          FloatPointer result,
                                          int resultStride,
                                          FloatPointer extraParams,
                                          @Cast("Nd4jIndex") long n);
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                          int opNum,
                                          FloatBuffer dx,
                                          int xStride,
                                          FloatBuffer y,
                                          int yStride,
                                          FloatBuffer result,
                                          int resultStride,
                                          FloatBuffer extraParams,
                                          @Cast("Nd4jIndex") long n);
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                          int opNum,
                                          float[] dx,
                                          int xStride,
                                          float[] y,
                                          int yStride,
                                          float[] result,
                                          int resultStride,
                                          float[] extraParams,
                                          @Cast("Nd4jIndex") long n);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param dx
     * @param xStride
     * @param y
     * @param yStride
     * @param result
     * @param resultStride
     * @param extraParams
     * @param n
     */
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         @Cast("float16*") ShortPointer dx,
                                         int xStride,
                                         @Cast("float16*") ShortPointer y,
                                         int yStride,
                                         @Cast("float16*") ShortPointer result,
                                         int resultStride,
                                         @Cast("float16*") ShortPointer extraParams,
                                         @Cast("Nd4jIndex") long n);
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         @Cast("float16*") ShortBuffer dx,
                                         int xStride,
                                         @Cast("float16*") ShortBuffer y,
                                         int yStride,
                                         @Cast("float16*") ShortBuffer result,
                                         int resultStride,
                                         @Cast("float16*") ShortBuffer extraParams,
                                         @Cast("Nd4jIndex") long n);
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                         int opNum,
                                         @Cast("float16*") short[] dx,
                                         int xStride,
                                         @Cast("float16*") short[] y,
                                         int yStride,
                                         @Cast("float16*") short[] result,
                                         int resultStride,
                                         @Cast("float16*") short[] extraParams,
                                         @Cast("Nd4jIndex") long n);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     * @param xIndexes
     * @param yIndexes
     * @param resultIndexes
     */
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        FloatPointer dx,
                                        IntPointer xShapeInfo,
                                        FloatPointer y,
                                        IntPointer yShapeInfo,
                                        FloatPointer result,
                                        IntPointer resultShapeInfo,
                                        FloatPointer extraParams,
                                        IntPointer xIndexes,
                                        IntPointer yIndexes,
                                        IntPointer resultIndexes);
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        FloatBuffer dx,
                                        IntBuffer xShapeInfo,
                                        FloatBuffer y,
                                        IntBuffer yShapeInfo,
                                        FloatBuffer result,
                                        IntBuffer resultShapeInfo,
                                        FloatBuffer extraParams,
                                        IntBuffer xIndexes,
                                        IntBuffer yIndexes,
                                        IntBuffer resultIndexes);
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        float[] dx,
                                        int[] xShapeInfo,
                                        float[] y,
                                        int[] yShapeInfo,
                                        float[] result,
                                        int[] resultShapeInfo,
                                        float[] extraParams,
                                        int[] xIndexes,
                                        int[] yIndexes,
                                        int[] resultIndexes);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param xIndexes
     * @param yIndexes
     * @param resultIndexes
     */
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       @Cast("float16*") ShortPointer dx,
                                       IntPointer xShapeInfo,
                                       @Cast("float16*") ShortPointer y,
                                       IntPointer yShapeInfo,
                                       @Cast("float16*") ShortPointer result,
                                       IntPointer resultShapeInfo,
                                       @Cast("float16*") ShortPointer extraParams,
                                       IntPointer xIndexes,
                                       IntPointer yIndexes,
                                       IntPointer resultIndexes);
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       @Cast("float16*") ShortBuffer dx,
                                       IntBuffer xShapeInfo,
                                       @Cast("float16*") ShortBuffer y,
                                       IntBuffer yShapeInfo,
                                       @Cast("float16*") ShortBuffer result,
                                       IntBuffer resultShapeInfo,
                                       @Cast("float16*") ShortBuffer extraParams,
                                       IntBuffer xIndexes,
                                       IntBuffer yIndexes,
                                       IntBuffer resultIndexes);
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       @Cast("float16*") short[] dx,
                                       int[] xShapeInfo,
                                       @Cast("float16*") short[] y,
                                       int[] yShapeInfo,
                                       @Cast("float16*") short[] result,
                                       int[] resultShapeInfo,
                                       @Cast("float16*") short[] extraParams,
                                       int[] xIndexes,
                                       int[] yIndexes,
                                       int[] resultIndexes);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     */
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        FloatPointer dx,
                                        IntPointer xShapeInfo,
                                        FloatPointer y,
                                        IntPointer yShapeInfo,
                                        FloatPointer result,
                                        IntPointer resultShapeInfo,
                                        FloatPointer extraParams);
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        FloatBuffer dx,
                                        IntBuffer xShapeInfo,
                                        FloatBuffer y,
                                        IntBuffer yShapeInfo,
                                        FloatBuffer result,
                                        IntBuffer resultShapeInfo,
                                        FloatBuffer extraParams);
    public native void execPairwiseTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                        int opNum,
                                        float[] dx,
                                        int[] xShapeInfo,
                                        float[] y,
                                        int[] yShapeInfo,
                                        float[] result,
                                        int[] resultShapeInfo,
                                        float[] extraParams);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     */
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       @Cast("float16*") ShortPointer dx,
                                       IntPointer xShapeInfo,
                                       @Cast("float16*") ShortPointer y,
                                       IntPointer yShapeInfo,
                                       @Cast("float16*") ShortPointer result,
                                       IntPointer resultShapeInfo,
                                       @Cast("float16*") ShortPointer extraParams);
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       @Cast("float16*") ShortBuffer dx,
                                       IntBuffer xShapeInfo,
                                       @Cast("float16*") ShortBuffer y,
                                       IntBuffer yShapeInfo,
                                       @Cast("float16*") ShortBuffer result,
                                       IntBuffer resultShapeInfo,
                                       @Cast("float16*") ShortBuffer extraParams);
    public native void execPairwiseTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       @Cast("float16*") short[] dx,
                                       int[] xShapeInfo,
                                       @Cast("float16*") short[] y,
                                       int[] yShapeInfo,
                                       @Cast("float16*") short[] result,
                                       int[] resultShapeInfo,
                                       @Cast("float16*") short[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               FloatPointer x,
                               IntPointer xShapeInfo,
                               FloatPointer extraParams,
                               FloatPointer result,
                               IntPointer resultShapeInfo);
    public native void execReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               FloatBuffer x,
                               IntBuffer xShapeInfo,
                               FloatBuffer extraParams,
                               FloatBuffer result,
                               IntBuffer resultShapeInfo);
    public native void execReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               float[] x,
                               int[] xShapeInfo,
                               float[] extraParams,
                               float[] result,
                               int[] resultShapeInfo);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") ShortPointer x,
                              IntPointer xShapeInfo,
                              @Cast("float16*") ShortPointer extraParams,
                              @Cast("float16*") ShortPointer result,
                              IntPointer resultShapeInfo);
    public native void execReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") ShortBuffer x,
                              IntBuffer xShapeInfo,
                              @Cast("float16*") ShortBuffer extraParams,
                              @Cast("float16*") ShortBuffer result,
                              IntBuffer resultShapeInfo);
    public native void execReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") short[] x,
                              int[] xShapeInfo,
                              @Cast("float16*") short[] extraParams,
                              @Cast("float16*") short[] result,
                              int[] resultShapeInfo);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               FloatPointer x,
                               IntPointer xShapeInfo,
                               FloatPointer extraParams,
                               FloatPointer result,
                               IntPointer resultShapeInfo,
                               IntPointer dimension,
                               int dimensionLength);
    public native void execReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               FloatBuffer x,
                               IntBuffer xShapeInfo,
                               FloatBuffer extraParams,
                               FloatBuffer result,
                               IntBuffer resultShapeInfo,
                               IntBuffer dimension,
                               int dimensionLength);
    public native void execReduceFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               float[] x,
                               int[] xShapeInfo,
                               float[] extraParams,
                               float[] result,
                               int[] resultShapeInfo,
                               int[] dimension,
                               int dimensionLength);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     * @param dimension
     * @param dimensionLength
     */

    public native void execReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") ShortPointer x,
                              IntPointer xShapeInfo,
                              @Cast("float16*") ShortPointer extraParams,
                              @Cast("float16*") ShortPointer result,
                              IntPointer resultShapeInfo,
                              IntPointer dimension,
                              int dimensionLength);
    public native void execReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") ShortBuffer x,
                              IntBuffer xShapeInfo,
                              @Cast("float16*") ShortBuffer extraParams,
                              @Cast("float16*") ShortBuffer result,
                              IntBuffer resultShapeInfo,
                              IntBuffer dimension,
                              int dimensionLength);
    public native void execReduceHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") short[] x,
                              int[] xShapeInfo,
                              @Cast("float16*") short[] extraParams,
                              @Cast("float16*") short[] result,
                              int[] resultShapeInfo,
                              int[] dimension,
                              int dimensionLength);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @return
     */
    public native float execReduceScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    FloatPointer x,
                                    IntPointer xShapeInfo,
                                    FloatPointer extraParams);
    public native float execReduceScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    FloatBuffer x,
                                    IntBuffer xShapeInfo,
                                    FloatBuffer extraParams);
    public native float execReduceScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    float[] x,
                                    int[] xShapeInfo,
                                    float[] extraParams);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @return
     */
    public native float execReduceScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                   int opNum,
                                   @Cast("float16*") ShortPointer x,
                                   IntPointer xShapeInfo,
                                   @Cast("float16*") ShortPointer extraParams);
    public native float execReduceScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                   int opNum,
                                   @Cast("float16*") ShortBuffer x,
                                   IntBuffer xShapeInfo,
                                   @Cast("float16*") ShortBuffer extraParams);
    public native float execReduceScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                   int opNum,
                                   @Cast("float16*") short[] x,
                                   int[] xShapeInfo,
                                   @Cast("float16*") short[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduce3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                FloatPointer x,
                                IntPointer xShapeInfo,
                                FloatPointer extraParamsVals,
                                FloatPointer y,
                                IntPointer yShapeInfo,
                                FloatPointer result,
                                IntPointer resultShapeInfo);
    public native void execReduce3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                FloatBuffer x,
                                IntBuffer xShapeInfo,
                                FloatBuffer extraParamsVals,
                                FloatBuffer y,
                                IntBuffer yShapeInfo,
                                FloatBuffer result,
                                IntBuffer resultShapeInfo);
    public native void execReduce3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                float[] x,
                                int[] xShapeInfo,
                                float[] extraParamsVals,
                                float[] y,
                                int[] yShapeInfo,
                                float[] result,
                                int[] resultShapeInfo);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfo
     */
    public native void execReduce3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                               @Cast("float16*") ShortPointer x,
                               IntPointer xShapeInfo,
                               @Cast("float16*") ShortPointer extraParamsVals,
                               @Cast("float16*") ShortPointer y,
                               IntPointer yShapeInfo,
                               @Cast("float16*") ShortPointer result,
                               IntPointer resultShapeInfo);
    public native void execReduce3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                               @Cast("float16*") ShortBuffer x,
                               IntBuffer xShapeInfo,
                               @Cast("float16*") ShortBuffer extraParamsVals,
                               @Cast("float16*") ShortBuffer y,
                               IntBuffer yShapeInfo,
                               @Cast("float16*") ShortBuffer result,
                               IntBuffer resultShapeInfo);
    public native void execReduce3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                               @Cast("float16*") short[] x,
                               int[] xShapeInfo,
                               @Cast("float16*") short[] extraParamsVals,
                               @Cast("float16*") short[] y,
                               int[] yShapeInfo,
                               @Cast("float16*") short[] result,
                               int[] resultShapeInfo);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     */
    public native float execReduce3ScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       FloatPointer x,
                                       IntPointer xShapeInfo,
                                       FloatPointer extraParamsVals,
                                       FloatPointer y,
                                       IntPointer yShapeInfo);
    public native float execReduce3ScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       FloatBuffer x,
                                       IntBuffer xShapeInfo,
                                       FloatBuffer extraParamsVals,
                                       FloatBuffer y,
                                       IntBuffer yShapeInfo);
    public native float execReduce3ScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                       int opNum,
                                       float[] x,
                                       int[] xShapeInfo,
                                       float[] extraParamsVals,
                                       float[] y,
                                       int[] yShapeInfo);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @return
     */
    public native float execReduce3ScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      @Cast("float16*") ShortPointer x,
                                      IntPointer xShapeInfo,
                                      @Cast("float16*") ShortPointer extraParamsVals,
                                      @Cast("float16*") ShortPointer y,
                                      IntPointer yShapeInfo);
    public native float execReduce3ScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      @Cast("float16*") ShortBuffer x,
                                      IntBuffer xShapeInfo,
                                      @Cast("float16*") ShortBuffer extraParamsVals,
                                      @Cast("float16*") ShortBuffer y,
                                      IntBuffer yShapeInfo);
    public native float execReduce3ScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int opNum,
                                      @Cast("float16*") short[] x,
                                      int[] xShapeInfo,
                                      @Cast("float16*") short[] extraParamsVals,
                                      @Cast("float16*") short[] y,
                                      int[] yShapeInfo);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execReduce3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                FloatPointer x,
                                IntPointer xShapeInfo,
                                FloatPointer extraParamsVals,
                                FloatPointer y,
                                IntPointer yShapeInfo,
                                FloatPointer result,
                                IntPointer resultShapeInfoBuffer,
                                IntPointer dimension,
                                int dimensionLength);
    public native void execReduce3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                FloatBuffer x,
                                IntBuffer xShapeInfo,
                                FloatBuffer extraParamsVals,
                                FloatBuffer y,
                                IntBuffer yShapeInfo,
                                FloatBuffer result,
                                IntBuffer resultShapeInfoBuffer,
                                IntBuffer dimension,
                                int dimensionLength);
    public native void execReduce3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                float[] x,
                                int[] xShapeInfo,
                                float[] extraParamsVals,
                                float[] y,
                                int[] yShapeInfo,
                                float[] result,
                                int[] resultShapeInfoBuffer,
                                int[] dimension,
                                int dimensionLength);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParamsVals
     * @param y
     * @param yShapeInfo
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execReduce3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16*") ShortPointer x,
                               IntPointer xShapeInfo,
                               @Cast("float16*") ShortPointer extraParamsVals,
                               @Cast("float16*") ShortPointer y,
                               IntPointer yShapeInfo,
                               @Cast("float16*") ShortPointer result,
                               IntPointer resultShapeInfoBuffer,
                               IntPointer dimension,
                               int dimensionLength);
    public native void execReduce3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16*") ShortBuffer x,
                               IntBuffer xShapeInfo,
                               @Cast("float16*") ShortBuffer extraParamsVals,
                               @Cast("float16*") ShortBuffer y,
                               IntBuffer yShapeInfo,
                               @Cast("float16*") ShortBuffer result,
                               IntBuffer resultShapeInfoBuffer,
                               IntBuffer dimension,
                               int dimensionLength);
    public native void execReduce3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16*") short[] x,
                               int[] xShapeInfo,
                               @Cast("float16*") short[] extraParamsVals,
                               @Cast("float16*") short[] y,
                               int[] yShapeInfo,
                               @Cast("float16*") short[] result,
                               int[] resultShapeInfoBuffer,
                               int[] dimension,
                               int dimensionLength);
    /**
     *
     * @param opNum
     * @param x
     * @param xStride
     * @param result
     * @param resultStride
     * @param scalar
     * @param extraParams
     * @param n
     */
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               FloatPointer x,
                               int xStride,
                               FloatPointer result,
                               int resultStride,
                               float scalar,
                               FloatPointer extraParams,
                               @Cast("Nd4jIndex") long n);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               FloatBuffer x,
                               int xStride,
                               FloatBuffer result,
                               int resultStride,
                               float scalar,
                               FloatBuffer extraParams,
                               @Cast("Nd4jIndex") long n);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               float[] x,
                               int xStride,
                               float[] result,
                               int resultStride,
                               float scalar,
                               float[] extraParams,
                               @Cast("Nd4jIndex") long n);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xStride
     * @param result
     * @param resultStride
     * @param scalar
     * @param extraParams
     * @param n
     */
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") ShortPointer x,
                              int xStride,
                              @Cast("float16*") ShortPointer result,
                              int resultStride,
                              float scalar,
                              @Cast("float16*") ShortPointer extraParams,
                              @Cast("Nd4jIndex") long n);
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") ShortBuffer x,
                              int xStride,
                              @Cast("float16*") ShortBuffer result,
                              int resultStride,
                              float scalar,
                              @Cast("float16*") ShortBuffer extraParams,
                              @Cast("Nd4jIndex") long n);
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("float16*") short[] x,
                              int xStride,
                              @Cast("float16*") short[] result,
                              int resultStride,
                              float scalar,
                              @Cast("float16*") short[] extraParams,
                              @Cast("Nd4jIndex") long n);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param scalar
     * @param extraParams
     * @param n
     */
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             FloatPointer x,
                             IntPointer xShapeInfo,
                             FloatPointer result,
                             IntPointer resultShapeInfo,
                             float scalar,
                             FloatPointer extraParams);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             FloatBuffer x,
                             IntBuffer xShapeInfo,
                             FloatBuffer result,
                             IntBuffer resultShapeInfo,
                             float scalar,
                             FloatBuffer extraParams);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             float[] x,
                             int[] xShapeInfo,
                             float[] result,
                             int[] resultShapeInfo,
                             float scalar,
                             float[] extraParams);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param scalar
     * @param extraParams
     */
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("float16*") ShortPointer x,
                            IntPointer xShapeInfo,
                            @Cast("float16*") ShortPointer result,
                            IntPointer resultShapeInfo,
                            float scalar,
                            @Cast("float16*") ShortPointer extraParams);
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("float16*") ShortBuffer x,
                            IntBuffer xShapeInfo,
                            @Cast("float16*") ShortBuffer result,
                            IntBuffer resultShapeInfo,
                            float scalar,
                            @Cast("float16*") ShortBuffer extraParams);
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("float16*") short[] x,
                            int[] xShapeInfo,
                            @Cast("float16*") short[] result,
                            int[] resultShapeInfo,
                            float scalar,
                            @Cast("float16*") short[] extraParams);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param scalar
     * @param extraParams
     * @param n
     * @param xIndexes
     * @param resultIndexes
     */
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             FloatPointer x,
                             IntPointer xShapeInfo,
                             FloatPointer result,
                             IntPointer resultShapeInfo,
                             float scalar,
                             FloatPointer extraParams,
                             IntPointer xIndexes,
                             IntPointer resultIndexes);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             FloatBuffer x,
                             IntBuffer xShapeInfo,
                             FloatBuffer result,
                             IntBuffer resultShapeInfo,
                             float scalar,
                             FloatBuffer extraParams,
                             IntBuffer xIndexes,
                             IntBuffer resultIndexes);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             float[] x,
                             int[] xShapeInfo,
                             float[] result,
                             int[] resultShapeInfo,
                             float scalar,
                             float[] extraParams,
                             int[] xIndexes,
                             int[] resultIndexes);


    /*
     * Special case: scalarOp alang dimension
     */
    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param z
     * @param zShapeInfo
     * @param scalars
     * @param extraParams
     * @param dimension
     * @param dimensionLength
     */
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                             FloatPointer x,
                             IntPointer xShapeInfo,
                             FloatPointer z,
                             IntPointer zShapeInfo,
                             FloatPointer scalars,
                             FloatPointer extraParams,
                             IntPointer dimension,
                             int dimensionLength);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                             FloatBuffer x,
                             IntBuffer xShapeInfo,
                             FloatBuffer z,
                             IntBuffer zShapeInfo,
                             FloatBuffer scalars,
                             FloatBuffer extraParams,
                             IntBuffer dimension,
                             int dimensionLength);
    public native void execScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                             float[] x,
                             int[] xShapeInfo,
                             float[] z,
                             int[] zShapeInfo,
                             float[] scalars,
                             float[] extraParams,
                             int[] dimension,
                             int dimensionLength);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param z
     * @param zShapeInfo
     * @param scalars
     * @param extraParams
     * @param dimension
     * @param dimensionLength
     */
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                              DoublePointer x,
                              IntPointer xShapeInfo,
                              DoublePointer z,
                              IntPointer zShapeInfo,
                              DoublePointer scalars,
                              DoublePointer extraParams,
                              IntPointer dimension,
                              int dimensionLength);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                              DoubleBuffer x,
                              IntBuffer xShapeInfo,
                              DoubleBuffer z,
                              IntBuffer zShapeInfo,
                              DoubleBuffer scalars,
                              DoubleBuffer extraParams,
                              IntBuffer dimension,
                              int dimensionLength);
    public native void execScalarDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                              double[] x,
                              int[] xShapeInfo,
                              double[] z,
                              int[] zShapeInfo,
                              double[] scalars,
                              double[] extraParams,
                              int[] dimension,
                              int dimensionLength);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param z
     * @param zShapeInfo
     * @param scalars
     * @param extraParams
     * @param dimension
     * @param dimensionLength
     */
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                            @Cast("float16*") ShortPointer x,
                            IntPointer xShapeInfo,
                            @Cast("float16*") ShortPointer z,
                            IntPointer zShapeInfo,
                            @Cast("float16*") ShortPointer scalars,
                            @Cast("float16*") ShortPointer extraParams,
                            IntPointer dimension,
                            int dimensionLength);
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                            @Cast("float16*") ShortBuffer x,
                            IntBuffer xShapeInfo,
                            @Cast("float16*") ShortBuffer z,
                            IntBuffer zShapeInfo,
                            @Cast("float16*") ShortBuffer scalars,
                            @Cast("float16*") ShortBuffer extraParams,
                            IntBuffer dimension,
                            int dimensionLength);
    public native void execScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                            @Cast("float16*") short[] x,
                            int[] xShapeInfo,
                            @Cast("float16*") short[] z,
                            int[] zShapeInfo,
                            @Cast("float16*") short[] scalars,
                            @Cast("float16*") short[] extraParams,
                            int[] dimension,
                            int dimensionLength);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     */
    public native float execSummaryStatsScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,FloatPointer x,
                                            IntPointer xShapeInfo,
                                            FloatPointer extraParams,@Cast("bool") boolean biasCorrected);
    public native float execSummaryStatsScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,FloatBuffer x,
                                            IntBuffer xShapeInfo,
                                            FloatBuffer extraParams,@Cast("bool") boolean biasCorrected);
    public native float execSummaryStatsScalarFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,float[] x,
                                            int[] xShapeInfo,
                                            float[] extraParams,@Cast("bool") boolean biasCorrected);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param biasCorrected
     * @return
     */
    public native float execSummaryStatsScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           @Cast("float16*") ShortPointer x,
                                           IntPointer xShapeInfo,
                                           @Cast("float16*") ShortPointer extraParams,
                                           @Cast("bool") boolean biasCorrected);
    public native float execSummaryStatsScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           @Cast("float16*") ShortBuffer x,
                                           IntBuffer xShapeInfo,
                                           @Cast("float16*") ShortBuffer extraParams,
                                           @Cast("bool") boolean biasCorrected);
    public native float execSummaryStatsScalarHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                           int opNum,
                                           @Cast("float16*") short[] x,
                                           int[] xShapeInfo,
                                           @Cast("float16*") short[] extraParams,
                                           @Cast("bool") boolean biasCorrected);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     */
    public native void execSummaryStatsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                     FloatPointer x,
                                     IntPointer xShapeInfo,
                                     FloatPointer extraParams,
                                     FloatPointer result,
                                     IntPointer resultShapeInfo,@Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                     FloatBuffer x,
                                     IntBuffer xShapeInfo,
                                     FloatBuffer extraParams,
                                     FloatBuffer result,
                                     IntBuffer resultShapeInfo,@Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,int opNum,
                                     float[] x,
                                     int[] xShapeInfo,
                                     float[] extraParams,
                                     float[] result,
                                     int[] resultShapeInfo,@Cast("bool") boolean biasCorrected);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfo
     * @param biasCorrected
     */
    public native void execSummaryStatsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    @Cast("float16*") ShortPointer x,
                                    IntPointer xShapeInfo,
                                    @Cast("float16*") ShortPointer extraParams,
                                    @Cast("float16*") ShortPointer result,
                                    IntPointer resultShapeInfo,@Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    @Cast("float16*") ShortBuffer x,
                                    IntBuffer xShapeInfo,
                                    @Cast("float16*") ShortBuffer extraParams,
                                    @Cast("float16*") ShortBuffer result,
                                    IntBuffer resultShapeInfo,@Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    @Cast("float16*") short[] x,
                                    int[] xShapeInfo,
                                    @Cast("float16*") short[] extraParams,
                                    @Cast("float16*") short[] result,
                                    int[] resultShapeInfo,@Cast("bool") boolean biasCorrected);

    /**
     *
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     */
    public native void execSummaryStatsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                     int opNum,
                                     FloatPointer x,
                                     IntPointer xShapeInfo,
                                     FloatPointer extraParams,
                                     FloatPointer result,
                                     IntPointer resultShapeInfoBuffer,
                                     IntPointer dimension,
                                     int dimensionLength,
                                     @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                     int opNum,
                                     FloatBuffer x,
                                     IntBuffer xShapeInfo,
                                     FloatBuffer extraParams,
                                     FloatBuffer result,
                                     IntBuffer resultShapeInfoBuffer,
                                     IntBuffer dimension,
                                     int dimensionLength,
                                     @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                     int opNum,
                                     float[] x,
                                     int[] xShapeInfo,
                                     float[] extraParams,
                                     float[] result,
                                     int[] resultShapeInfoBuffer,
                                     int[] dimension,
                                     int dimensionLength,
                                     @Cast("bool") boolean biasCorrected);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param x
     * @param xShapeInfo
     * @param extraParams
     * @param result
     * @param resultShapeInfoBuffer
     * @param dimension
     * @param dimensionLength
     * @param biasCorrected
     */
    public native void execSummaryStatsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    @Cast("float16*") ShortPointer x,
                                    IntPointer xShapeInfo,
                                    @Cast("float16*") ShortPointer extraParams,
                                    @Cast("float16*") ShortPointer result,
                                    IntPointer resultShapeInfoBuffer,
                                    IntPointer dimension,
                                    int dimensionLength,
                                    @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    @Cast("float16*") ShortBuffer x,
                                    IntBuffer xShapeInfo,
                                    @Cast("float16*") ShortBuffer extraParams,
                                    @Cast("float16*") ShortBuffer result,
                                    IntBuffer resultShapeInfoBuffer,
                                    IntBuffer dimension,
                                    int dimensionLength,
                                    @Cast("bool") boolean biasCorrected);
    public native void execSummaryStatsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int opNum,
                                    @Cast("float16*") short[] x,
                                    int[] xShapeInfo,
                                    @Cast("float16*") short[] extraParams,
                                    @Cast("float16*") short[] result,
                                    int[] resultShapeInfoBuffer,
                                    int[] dimension,
                                    int dimensionLength,
                                    @Cast("bool") boolean biasCorrected);

    /**
     *
     * @param opNum
     * @param dx
     * @param xStride
     * @param result
     * @param resultStride
     * @param extraParams
     * @param n
     */
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatPointer dx,
                                  int xStride,
                                  FloatPointer result,
                                  int resultStride,
                                  FloatPointer extraParams,
                                  @Cast("Nd4jIndex") long n);
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatBuffer dx,
                                  int xStride,
                                  FloatBuffer result,
                                  int resultStride,
                                  FloatBuffer extraParams,
                                  @Cast("Nd4jIndex") long n);
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  float[] dx,
                                  int xStride,
                                  float[] result,
                                  int resultStride,
                                  float[] extraParams,
                                  @Cast("Nd4jIndex") long n);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param dx
     * @param xStride
     * @param result
     * @param resultStride
     * @param extraParams
     * @param n
     */
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") ShortPointer dx,
                                 int xStride,
                                 @Cast("float16*") ShortPointer result,
                                 int resultStride,
                                 @Cast("float16*") ShortPointer extraParams,
                                 @Cast("Nd4jIndex") long n);
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") ShortBuffer dx,
                                 int xStride,
                                 @Cast("float16*") ShortBuffer result,
                                 int resultStride,
                                 @Cast("float16*") ShortBuffer extraParams,
                                 @Cast("Nd4jIndex") long n);
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") short[] dx,
                                 int xStride,
                                 @Cast("float16*") short[] result,
                                 int resultStride,
                                 @Cast("float16*") short[] extraParams,
                                 @Cast("Nd4jIndex") long n);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     */
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatPointer dx,
                                  IntPointer xShapeInfo,
                                  FloatPointer result,
                                  IntPointer resultShapeInfo,
                                  FloatPointer extraParams);
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatBuffer dx,
                                  IntBuffer xShapeInfo,
                                  FloatBuffer result,
                                  IntBuffer resultShapeInfo,
                                  FloatBuffer extraParams);
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  float[] dx,
                                  int[] xShapeInfo,
                                  float[] result,
                                  int[] resultShapeInfo,
                                  float[] extraParams);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     */
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") ShortPointer dx,
                                 IntPointer xShapeInfo,
                                 @Cast("float16*") ShortPointer result,
                                 IntPointer resultShapeInfo,
                                 @Cast("float16*") ShortPointer extraParams);
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") ShortBuffer dx,
                                 IntBuffer xShapeInfo,
                                 @Cast("float16*") ShortBuffer result,
                                 IntBuffer resultShapeInfo,
                                 @Cast("float16*") ShortBuffer extraParams);
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") short[] dx,
                                 int[] xShapeInfo,
                                 @Cast("float16*") short[] result,
                                 int[] resultShapeInfo,
                                 @Cast("float16*") short[] extraParams);

    /**
     *
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param n
     */
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatPointer dx,
                                  IntPointer xShapeInfo,
                                  FloatPointer result,
                                  IntPointer resultShapeInfo,
                                  FloatPointer extraParams,
                                  IntPointer xIndexes,
                                  IntPointer resultIndexes);
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  FloatBuffer dx,
                                  IntBuffer xShapeInfo,
                                  FloatBuffer result,
                                  IntBuffer resultShapeInfo,
                                  FloatBuffer extraParams,
                                  IntBuffer xIndexes,
                                  IntBuffer resultIndexes);
    public native void execTransformFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                  int opNum,
                                  float[] dx,
                                  int[] xShapeInfo,
                                  float[] result,
                                  int[] resultShapeInfo,
                                  float[] extraParams,
                                  int[] xIndexes,
                                  int[] resultIndexes);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param dx
     * @param xShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param extraParams
     * @param xIndexes
     * @param resultIndexes
     */
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") ShortPointer dx,
                                 IntPointer xShapeInfo,
                                 @Cast("float16*") ShortPointer result,
                                 IntPointer resultShapeInfo,
                                 @Cast("float16*") ShortPointer extraParams,
                                 IntPointer xIndexes,
                                 IntPointer resultIndexes);
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") ShortBuffer dx,
                                 IntBuffer xShapeInfo,
                                 @Cast("float16*") ShortBuffer result,
                                 IntBuffer resultShapeInfo,
                                 @Cast("float16*") ShortBuffer extraParams,
                                 IntBuffer xIndexes,
                                 IntBuffer resultIndexes);
    public native void execTransformHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("float16*") short[] dx,
                                 int[] xShapeInfo,
                                 @Cast("float16*") short[] result,
                                 int[] resultShapeInfo,
                                 @Cast("float16*") short[] extraParams,
                                 int[] xIndexes,
                                 int[] resultIndexes);


    /**
* Append an input array
* to the end of a flat array
* in a particular order
* @param offset the offset of the array to start at
* @param order the order
* @param result the result array
* @param resultShapeInfo the shape info for te array
* @param input the input for the array
* @param inputShapeInfo the shape information for that array
*/
    public native void flattenFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                FloatPointer result,
                IntPointer resultShapeInfo,
                FloatPointer input,
                IntPointer inputShapeInfo);
    public native void flattenFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                FloatBuffer result,
                IntBuffer resultShapeInfo,
                FloatBuffer input,
                IntBuffer inputShapeInfo);
    public native void flattenFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                float[] result,
                int[] resultShapeInfo,
                float[] input,
                int[] inputShapeInfo);


    /**
     *
     * @param extraPointers
     * @param offset
     * @param order
     * @param result
     * @param resultShapeInfo
     * @param input
     * @param inputShapeInfo
     */
    public native void flattenHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                @Cast("float16*") ShortPointer result,
                IntPointer resultShapeInfo,
                @Cast("float16*") ShortPointer input,
                IntPointer inputShapeInfo);
    public native void flattenHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                @Cast("float16*") ShortBuffer result,
                IntBuffer resultShapeInfo,
                @Cast("float16*") ShortBuffer input,
                IntBuffer inputShapeInfo);
    public native void flattenHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                @Cast("float16*") short[] result,
                int[] resultShapeInfo,
                @Cast("float16*") short[] input,
                int[] inputShapeInfo);

    /**
* Append an input array
* to the end of a flat array
* in a particular order
* @param offset the offset of the array to start at
* @param order the order
* @param result the result array
* @param resultShapeInfo the shape info for te array
* @param input the input for the array
* @param inputShapeInfo the shape information for that array
*/
    public native void flattenDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                DoublePointer result,
                IntPointer resultShapeInfo,
                DoublePointer input,
                IntPointer inputShapeInfo);
    public native void flattenDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                DoubleBuffer result,
                IntBuffer resultShapeInfo,
                DoubleBuffer input,
                IntBuffer inputShapeInfo);
    public native void flattenDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int offset,
                char order,
                double[] result,
                int[] resultShapeInfo,
                double[] input,
                int[] inputShapeInfo);

    /**
     * Concatneate multi array of the same shape together
     * along a particular dimension
     */
    public native void concatFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                FloatPointer result,
                IntPointer resultShapeInfo, @Cast("Nd4jPointer*") PointerPointer tadPointers, @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void concatFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                FloatBuffer result,
                IntBuffer resultShapeInfo, @Cast("Nd4jPointer*") PointerPointer tadPointers, @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void concatFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                float[] result,
                int[] resultShapeInfo, @Cast("Nd4jPointer*") PointerPointer tadPointers, @Cast("Nd4jPointer*") PointerPointer offsetPointers);
/**
    * Concatneate multi array of the same shape together
    * along a particular dimension
    */
    public native void concatDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                DoublePointer result,
                IntPointer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void concatDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                DoubleBuffer result,
                IntBuffer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void concatDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                double[] result,
                int[] resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);

    /**
     *
     * @param extraPointers
     * @param dimension
     * @param numArrays
     * @param data
     * @param inputShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param tadPointers
     * @param offsetPointers
     */
    public native void concatHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                @Cast("float16*") ShortPointer result,
                IntPointer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void concatHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                @Cast("float16*") ShortBuffer result,
                IntBuffer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void concatHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                @Cast("float16*") short[] result,
                int[] resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);


    public native void specialConcatFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                FloatPointer result,
                IntPointer resultShapeInfo, @Cast("Nd4jPointer*") PointerPointer tadPointers, @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void specialConcatFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                FloatBuffer result,
                IntBuffer resultShapeInfo, @Cast("Nd4jPointer*") PointerPointer tadPointers, @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void specialConcatFloat(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                float[] result,
                int[] resultShapeInfo, @Cast("Nd4jPointer*") PointerPointer tadPointers, @Cast("Nd4jPointer*") PointerPointer offsetPointers);
/**
    * Concatneate multi array of the same shape together
    * along a particular dimension
    */
    public native void specialConcatDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                DoublePointer result,
                IntPointer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void specialConcatDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                DoubleBuffer result,
                IntBuffer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void specialConcatDouble(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                double[] result,
                int[] resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);

    /**
     *
     * @param extraPointers
     * @param dimension
     * @param numArrays
     * @param data
     * @param inputShapeInfo
     * @param result
     * @param resultShapeInfo
     * @param tadPointers
     * @param offsetPointers
     */
    public native void specialConcatHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                @Cast("float16*") ShortPointer result,
                IntPointer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void specialConcatHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                @Cast("float16*") ShortBuffer result,
                IntBuffer resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);
    public native void specialConcatHalf(
                @Cast("Nd4jPointer*") PointerPointer extraPointers,
                int dimension,
                int numArrays,
                @Cast("Nd4jPointer*") PointerPointer data,
                @Cast("Nd4jPointer*") PointerPointer inputShapeInfo,
                @Cast("float16*") short[] result,
                int[] resultShapeInfo,
                @Cast("Nd4jPointer*") PointerPointer tadPointers,
                @Cast("Nd4jPointer*") PointerPointer offsetPointers);

    /**
     * This method implementation exists only for cuda.
     * The other backends should have dummy method for JNI compatibility reasons.
     */
    public native void initializeDevicesAndFunctions();


    /**
     * This method acquires memory chunk of requested size on host side
     *
     * @param pointer pointer that'll be used for allocation
     * @param memorySize memory size, in bytes
     * @param flags optional parameter
     */
    public native @Cast("Nd4jPointer") Pointer mallocHost(@Cast("Nd4jIndex") long memorySize, int flags);

    /**
     * This method acquires memory chunk of requested size on specified device
     *
     * @param pointer pointer that'll be used for allocation
     * @param memorySize memory size, in bytes
     * @param ptrToDeviceId pointer to deviceId. For cuda that's just and int, for OpenCL that's pointer to device_id, etc
     * @param flags optional parameter
     */
    public native @Cast("Nd4jPointer") Pointer mallocDevice(@Cast("Nd4jIndex") long memorySize, @Cast("Nd4jPointer") Pointer ptrToDeviceId, int flags);

    /**
     * This method releases previously allocated host memory space
     *
     * @param pointer pointer that'll be freed
     */
    public native int freeHost(@Cast("Nd4jPointer") Pointer pointer);

    /**
     * This method releases previously allocated memory space on device
     *
     * @param pointer pointer that'll be freed
     * @param ptrToDeviceId pointer to deviceId.
     */
    public native int freeDevice(@Cast("Nd4jPointer") Pointer pointer, @Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @return
     */
    public native int ompGetMaxThreads();

    /**
     *
     * @return
     */
    public native int ompGetNumThreads();

    /**
     *
     * @param threads
     */
    public native void setOmpNumThreads(int threads);

    /**
     *
     * @param threads
     */
    public native void setOmpMinThreads(int threads);




    /**
     *
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer createContext();

    /**
     *
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer createStream();

    /**
     *
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer createEvent();

    /**
     *
     * @param event
     * @param stream
     * @return
     */
    public native int registerEvent(@Cast("Nd4jPointer") Pointer event, @Cast("Nd4jPointer") Pointer stream);

    /**
     *
     * @param event
     * @return
     */
    public native int destroyEvent(@Cast("Nd4jPointer") Pointer event);

    /**
     *
     * @param ptrToDeviceId
     * @return
     */
    public native int setDevice(@Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @return
     */
    public native int getDevice();

    /**
     *
     * @param stream
     * @return
     */
    public native int streamSynchronize(@Cast("Nd4jPointer") Pointer stream);

    /**
     *
     * @param event
     * @return
     */
    public native int eventSynchronize(@Cast("Nd4jPointer") Pointer event);

    /**
     *
     * @param ptrToDeviceId
     * @return
     */
    public native @Cast("Nd4jIndex") long getDeviceFreeMemory(@Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @param ptrToDeviceId
     * @return
     */
    public native @Cast("Nd4jIndex") long getDeviceTotalMemory(@Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @param ptrToDeviceId
     * @return
     */
    public native int getDeviceMajor(@Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @param ptrToDeviceId
     * @return
     */
    public native int getDeviceMinor(@Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @param ptrToDeviceId
     * @return
     */
    public native String getDeviceName(@Cast("Nd4jPointer") Pointer ptrToDeviceId);

    /**
     *
     * @param dst
     * @param src
     * @param size
     * @param flags
     * @param reserved
     * @return
     */
    public native int memcpy(@Cast("Nd4jPointer") Pointer dst,
                   @Cast("Nd4jPointer") Pointer src,
                   @Cast("Nd4jIndex") long size,
                   int flags,
                   @Cast("Nd4jPointer") Pointer reserved);

    /**
     *
     * @param dst
     * @param src
     * @param size
     * @param flags
     * @param reserved
     * @return
     */
    public native int memcpyAsync(@Cast("Nd4jPointer") Pointer dst,
                        @Cast("Nd4jPointer") Pointer src,
                        @Cast("Nd4jIndex") long size,
                        int flags,
                        @Cast("Nd4jPointer") Pointer reserved);

    /**
     *
     * @param dst
     * @param value
     * @param size
     * @param flags
     * @param reserved
     * @return
     */
    public native int memset(@Cast("Nd4jPointer") Pointer dst,
                   int value,
                   @Cast("Nd4jIndex") long size,
                   int flags,
                   @Cast("Nd4jPointer") Pointer reserved);

    /**
     *
     * @param dst
     * @param value
     * @param size
     * @param flags
     * @param reserved
     * @return
     */
    public native int memsetAsync(@Cast("Nd4jPointer") Pointer dst,
                        int value,
                        @Cast("Nd4jIndex") long size,
                        int flags,
                        @Cast("Nd4jPointer") Pointer reserved);

    /**
     *
     * @param dst
     * @param src
     * @param size
     * @param flags
     * @param reserved
     * @return
     */
    public native int memcpyConstantAsync(@Cast("Nd4jIndex") long dst,
                                @Cast("Nd4jPointer") Pointer src,
                                @Cast("Nd4jIndex") long size,
                                int flags,
                                @Cast("Nd4jPointer") Pointer reserved);

    /**
     *
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer getConstantSpace();

    /**
     *
     * @return
     */
    public native int getAvailableDevices();

    /**
     *
     * @param reallyEnable
     */
    public native void enableDebugMode(@Cast("bool") boolean reallyEnable);

    /**
     *
     * @param reallyEnable
     */
    public native void enableVerboseMode(@Cast("bool") boolean reallyEnable);

    /**
     *
     * @param gridSize
     */
    public native void setGridLimit(int gridSize);

    /**
     *
     * @param xShapeInfo
     * @param dimension
     * @param dimensionLength
     * @param targetBuffer
     * @param offsetsBuffer
     */
    public native void tadOnlyShapeInfo(IntPointer xShapeInfo,
                              IntPointer dimension,
                              int dimensionLength,
                              IntPointer targetBuffer,
                              @Cast("Nd4jIndex*") LongPointer offsetsBuffer);
    public native void tadOnlyShapeInfo(IntBuffer xShapeInfo,
                              IntBuffer dimension,
                              int dimensionLength,
                              IntBuffer targetBuffer,
                              @Cast("Nd4jIndex*") LongBuffer offsetsBuffer);
    public native void tadOnlyShapeInfo(int[] xShapeInfo,
                              int[] dimension,
                              int dimensionLength,
                              int[] targetBuffer,
                              @Cast("Nd4jIndex*") long[] offsetsBuffer);

    /*
     * PullRow special op
     */

    /**
     *
     * @param extraPointers
     * @param x
     * @param xShapeInfo
     * @param z
     * @param zShapeInfo
     * @param n
     * @param indexes
     * @param tadShapeInfo
     * @param tadOffsets
     * @param zTadShapeInfo
     * @param zTadOffsets
     */
    public native void pullRowsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                          @Cast("float16*") ShortPointer x,
                          IntPointer xShapeInfo,
                          @Cast("float16*") ShortPointer z,
                          IntPointer zShapeInfo,
                          int n,
                          IntPointer indexes,
                          IntPointer tadShapeInfo,
                          @Cast("Nd4jIndex*") LongPointer tadOffsets,
                          IntPointer zTadShapeInfo,
                          @Cast("Nd4jIndex*") LongPointer zTadOffsets);
    public native void pullRowsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                          @Cast("float16*") ShortBuffer x,
                          IntBuffer xShapeInfo,
                          @Cast("float16*") ShortBuffer z,
                          IntBuffer zShapeInfo,
                          int n,
                          IntBuffer indexes,
                          IntBuffer tadShapeInfo,
                          @Cast("Nd4jIndex*") LongBuffer tadOffsets,
                          IntBuffer zTadShapeInfo,
                          @Cast("Nd4jIndex*") LongBuffer zTadOffsets);
    public native void pullRowsHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                          @Cast("float16*") short[] x,
                          int[] xShapeInfo,
                          @Cast("float16*") short[] z,
                          int[] zShapeInfo,
                          int n,
                          int[] indexes,
                          int[] tadShapeInfo,
                          @Cast("Nd4jIndex*") long[] tadOffsets,
                          int[] zTadShapeInfo,
                          @Cast("Nd4jIndex*") long[] zTadOffsets);

    /**
     *
     * @param extraPointers
     * @param x
     * @param xShapeInfo
     * @param z
     * @param zShapeInfo
     * @param n
     * @param indexes
     * @param tadShapeInfo
     * @param tadOffsets
     * @param zTadShapeInfo
     * @param zTadOffsets
     */
    public native void pullRowsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                           FloatPointer x,
                           IntPointer xShapeInfo,
                           FloatPointer z,
                           IntPointer zShapeInfo,
                           int n,
                           IntPointer indexes,
                           IntPointer tadShapeInfo,
                           @Cast("Nd4jIndex*") LongPointer tadOffsets,
                           IntPointer zTadShapeInfo,
                           @Cast("Nd4jIndex*") LongPointer zTadOffsets);
    public native void pullRowsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                           FloatBuffer x,
                           IntBuffer xShapeInfo,
                           FloatBuffer z,
                           IntBuffer zShapeInfo,
                           int n,
                           IntBuffer indexes,
                           IntBuffer tadShapeInfo,
                           @Cast("Nd4jIndex*") LongBuffer tadOffsets,
                           IntBuffer zTadShapeInfo,
                           @Cast("Nd4jIndex*") LongBuffer zTadOffsets);
    public native void pullRowsFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                           float[] x,
                           int[] xShapeInfo,
                           float[] z,
                           int[] zShapeInfo,
                           int n,
                           int[] indexes,
                           int[] tadShapeInfo,
                           @Cast("Nd4jIndex*") long[] tadOffsets,
                           int[] zTadShapeInfo,
                           @Cast("Nd4jIndex*") long[] zTadOffsets);

    /**
     *
     * @param extraPointers
     * @param x
     * @param xShapeInfo
     * @param z
     * @param zShapeInfo
     * @param n
     * @param indexes
     * @param tadShapeInfo
     * @param tadOffsets
     * @param zTadShapeInfo
     * @param zTadOffsets
     */
    public native void pullRowsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            DoublePointer x,
                            IntPointer xShapeInfo,
                            DoublePointer z,
                            IntPointer zShapeInfo,
                            int n,
                            IntPointer indexes,
                            IntPointer tadShapeInfo,
                            @Cast("Nd4jIndex*") LongPointer tadOffsets,
                            IntPointer zTadShapeInfo,
                            @Cast("Nd4jIndex*") LongPointer zTadOffsets);
    public native void pullRowsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            DoubleBuffer x,
                            IntBuffer xShapeInfo,
                            DoubleBuffer z,
                            IntBuffer zShapeInfo,
                            int n,
                            IntBuffer indexes,
                            IntBuffer tadShapeInfo,
                            @Cast("Nd4jIndex*") LongBuffer tadOffsets,
                            IntBuffer zTadShapeInfo,
                            @Cast("Nd4jIndex*") LongBuffer zTadOffsets);
    public native void pullRowsDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            double[] x,
                            int[] xShapeInfo,
                            double[] z,
                            int[] zShapeInfo,
                            int n,
                            int[] indexes,
                            int[] tadShapeInfo,
                            @Cast("Nd4jIndex*") long[] tadOffsets,
                            int[] zTadShapeInfo,
                            @Cast("Nd4jIndex*") long[] zTadOffsets);

    /**
     * Array averaging op
     */
    /**
     *
     * @param extras
     * @param dx
     * @param dz
     * @param n
     * @param length
     * @param propagate
     */
    public native void averageHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                         @Cast("Nd4jPointer*") PointerPointer dx,
                         @Cast("float16*") ShortPointer dz,
                         int n,
                         @Cast("Nd4jIndex") long length,
                         @Cast("bool") boolean propagate);
    public native void averageHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                         @Cast("Nd4jPointer*") PointerPointer dx,
                         @Cast("float16*") ShortBuffer dz,
                         int n,
                         @Cast("Nd4jIndex") long length,
                         @Cast("bool") boolean propagate);
    public native void averageHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                         @Cast("Nd4jPointer*") PointerPointer dx,
                         @Cast("float16*") short[] dz,
                         int n,
                         @Cast("Nd4jIndex") long length,
                         @Cast("bool") boolean propagate);

    /**
     *
     * @param extras
     * @param dx
     * @param dz
     * @param n
     * @param length
     * @param propagate
     */
    public native void averageFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                          @Cast("Nd4jPointer*") PointerPointer dx,
                          FloatPointer dz,
                          int n,
                          @Cast("Nd4jIndex") long length,
                          @Cast("bool") boolean propagate);
    public native void averageFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                          @Cast("Nd4jPointer*") PointerPointer dx,
                          FloatBuffer dz,
                          int n,
                          @Cast("Nd4jIndex") long length,
                          @Cast("bool") boolean propagate);
    public native void averageFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                          @Cast("Nd4jPointer*") PointerPointer dx,
                          float[] dz,
                          int n,
                          @Cast("Nd4jIndex") long length,
                          @Cast("bool") boolean propagate);

    /**
     *
     * @param extras
     * @param dx
     * @param dz
     * @param n
     * @param length
     * @param propagate
     */
    public native void averageDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           DoublePointer dz,
                           int n,
                           @Cast("Nd4jIndex") long length,
                           @Cast("bool") boolean propagate);
    public native void averageDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           DoubleBuffer dz,
                           int n,
                           @Cast("Nd4jIndex") long length,
                           @Cast("bool") boolean propagate);
    public native void averageDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           double[] dz,
                           int n,
                           @Cast("Nd4jIndex") long length,
                           @Cast("bool") boolean propagate);


    public native void accumulateHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                              @Cast("Nd4jPointer*") PointerPointer dx,
                              @Cast("float16*") ShortPointer dz,
                              int n,
                              @Cast("Nd4jIndex") long length);
    public native void accumulateHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                              @Cast("Nd4jPointer*") PointerPointer dx,
                              @Cast("float16*") ShortBuffer dz,
                              int n,
                              @Cast("Nd4jIndex") long length);
    public native void accumulateHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                              @Cast("Nd4jPointer*") PointerPointer dx,
                              @Cast("float16*") short[] dz,
                              int n,
                              @Cast("Nd4jIndex") long length);


    public native void accumulateFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                              @Cast("Nd4jPointer*") PointerPointer dx,
                              FloatPointer dz,
                              int n,
                              @Cast("Nd4jIndex") long length);
    public native void accumulateFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                              @Cast("Nd4jPointer*") PointerPointer dx,
                              FloatBuffer dz,
                              int n,
                              @Cast("Nd4jIndex") long length);
    public native void accumulateFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                              @Cast("Nd4jPointer*") PointerPointer dx,
                              float[] dz,
                              int n,
                              @Cast("Nd4jIndex") long length);

    public native void accumulateDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           DoublePointer dz,
                           int n,
                           @Cast("Nd4jIndex") long length);
    public native void accumulateDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           DoubleBuffer dz,
                           int n,
                           @Cast("Nd4jIndex") long length);
    public native void accumulateDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           double[] dz,
                           int n,
                           @Cast("Nd4jIndex") long length);


    /**
     * P2P enabler
     */
    /**
     *
     * @param enable
     */
    public native void enableP2P(@Cast("bool") boolean enable);

    /**
     *
     */
    public native void checkP2P();

    /**
     *
     * @return
     */
    public native @Cast("bool") boolean isP2PAvailable();

    /**
     * Shuffle methods
     */

    /**
     *
     * @param extras
     * @param dx
     * @param xShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param N
     * @param shuffleMap
     * @param tadShapeInfo
     * @param tadOffsets
     */
    public native void shuffleDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                           @Cast("Nd4jPointer*") PointerPointer dz,
                           @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                           int N,
                           IntPointer shuffleMap,
                           @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                           @Cast("Nd4jPointer*") PointerPointer tadOffsets);
    public native void shuffleDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                           @Cast("Nd4jPointer*") PointerPointer dz,
                           @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                           int N,
                           IntBuffer shuffleMap,
                           @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                           @Cast("Nd4jPointer*") PointerPointer tadOffsets);
    public native void shuffleDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                           @Cast("Nd4jPointer*") PointerPointer dx,
                           @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                           @Cast("Nd4jPointer*") PointerPointer dz,
                           @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                           int N,
                           int[] shuffleMap,
                           @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                           @Cast("Nd4jPointer*") PointerPointer tadOffsets);

    /**
     *
     * @param extras
     * @param dx
     * @param xShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param N
     * @param shuffleMap
     * @param tadShapeInfo
     * @param tadOffsets
     */
    public native void shuffleFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                          @Cast("Nd4jPointer*") PointerPointer dx,
                          @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                          @Cast("Nd4jPointer*") PointerPointer dz,
                          @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                          int N,
                          IntPointer shuffleMap,
                          @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                          @Cast("Nd4jPointer*") PointerPointer tadOffsets);
    public native void shuffleFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                          @Cast("Nd4jPointer*") PointerPointer dx,
                          @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                          @Cast("Nd4jPointer*") PointerPointer dz,
                          @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                          int N,
                          IntBuffer shuffleMap,
                          @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                          @Cast("Nd4jPointer*") PointerPointer tadOffsets);
    public native void shuffleFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                          @Cast("Nd4jPointer*") PointerPointer dx,
                          @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                          @Cast("Nd4jPointer*") PointerPointer dz,
                          @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                          int N,
                          int[] shuffleMap,
                          @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                          @Cast("Nd4jPointer*") PointerPointer tadOffsets);


    /**
     *
     * @param extras
     * @param dx
     * @param xShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param N
     * @param shuffleMap
     * @param tadShapeInfo
     * @param tadOffsets
     */
    public native void shuffleHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                         @Cast("Nd4jPointer*") PointerPointer dx,
                         @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                         @Cast("Nd4jPointer*") PointerPointer dz,
                         @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                         int N,
                         IntPointer shuffleMap,
                         @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                         @Cast("Nd4jPointer*") PointerPointer tadOffsets);
    public native void shuffleHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                         @Cast("Nd4jPointer*") PointerPointer dx,
                         @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                         @Cast("Nd4jPointer*") PointerPointer dz,
                         @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                         int N,
                         IntBuffer shuffleMap,
                         @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                         @Cast("Nd4jPointer*") PointerPointer tadOffsets);
    public native void shuffleHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                         @Cast("Nd4jPointer*") PointerPointer dx,
                         @Cast("Nd4jPointer*") PointerPointer xShapeInfo,
                         @Cast("Nd4jPointer*") PointerPointer dz,
                         @Cast("Nd4jPointer*") PointerPointer zShapeInfo,
                         int N,
                         int[] shuffleMap,
                         @Cast("Nd4jPointer*") PointerPointer tadShapeInfo,
                         @Cast("Nd4jPointer*") PointerPointer tadOffsets);

    /**
     * Type Conversions
     */

    /**
     *
     * @param extras
     * @param srcType
     * @param x
     * @param N
     * @param dstType
     * @param z
     */
    public native void convertTypes(@Cast("Nd4jPointer*") PointerPointer extras, int srcType, @Cast("Nd4jPointer") Pointer x, @Cast("Nd4jIndex") long N, int dstType, @Cast("Nd4jPointer") Pointer z);


    /**
     *
     * @return
     */
    public native @Cast("bool") boolean isExperimentalEnabled();

    /**
     * Aggregate
     */

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param arguments
     * @param numArguments
     * @param shapeArguments
     * @param numShapeArguments
     * @param indexArguments
     * @param numIndexArguments
     * @param intArrays
     * @param numIntArrays
     * @param realArguments
     * @param numRealArguments
     */
    public native void execAggregateFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                @Cast("float**") PointerPointer arguments,
                                int numArguments,
                                @Cast("int**") PointerPointer shapeArguments,
                                int numShapeArguments,
                                IntPointer indexArguments,
                                int numIndexArguments,
                                @Cast("int**") PointerPointer intArrays,
                                int numIntArrays,
                                FloatPointer realArguments,
                                int numRealArguments);
    public native void execAggregateFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                @ByPtrPtr FloatPointer arguments,
                                int numArguments,
                                @ByPtrPtr IntPointer shapeArguments,
                                int numShapeArguments,
                                IntPointer indexArguments,
                                int numIndexArguments,
                                @ByPtrPtr IntPointer intArrays,
                                int numIntArrays,
                                FloatPointer realArguments,
                                int numRealArguments);
    public native void execAggregateFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                @ByPtrPtr FloatBuffer arguments,
                                int numArguments,
                                @ByPtrPtr IntBuffer shapeArguments,
                                int numShapeArguments,
                                IntBuffer indexArguments,
                                int numIndexArguments,
                                @ByPtrPtr IntBuffer intArrays,
                                int numIntArrays,
                                FloatBuffer realArguments,
                                int numRealArguments);
    public native void execAggregateFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                int opNum,
                                @ByPtrPtr float[] arguments,
                                int numArguments,
                                @ByPtrPtr int[] shapeArguments,
                                int numShapeArguments,
                                int[] indexArguments,
                                int numIndexArguments,
                                @ByPtrPtr int[] intArrays,
                                int numIntArrays,
                                float[] realArguments,
                                int numRealArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param arguments
     * @param numArguments
     * @param shapeArguments
     * @param numShapeArguments
     * @param indexArguments
     * @param numIndexArguments
     * @param intArrays
     * @param numIntArrays
     * @param realArguments
     * @param numRealArguments
     */
    public native void execAggregateDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @Cast("double**") PointerPointer arguments,
                                 int numArguments,
                                 @Cast("int**") PointerPointer shapeArguments,
                                 int numShapeArguments,
                                 IntPointer indexArguments,
                                 int numIndexArguments,
                                 @Cast("int**") PointerPointer intArrays,
                                 int numIntArrays,
                                 DoublePointer realArguments,
                                 int numRealArguments);
    public native void execAggregateDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @ByPtrPtr DoublePointer arguments,
                                 int numArguments,
                                 @ByPtrPtr IntPointer shapeArguments,
                                 int numShapeArguments,
                                 IntPointer indexArguments,
                                 int numIndexArguments,
                                 @ByPtrPtr IntPointer intArrays,
                                 int numIntArrays,
                                 DoublePointer realArguments,
                                 int numRealArguments);
    public native void execAggregateDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @ByPtrPtr DoubleBuffer arguments,
                                 int numArguments,
                                 @ByPtrPtr IntBuffer shapeArguments,
                                 int numShapeArguments,
                                 IntBuffer indexArguments,
                                 int numIndexArguments,
                                 @ByPtrPtr IntBuffer intArrays,
                                 int numIntArrays,
                                 DoubleBuffer realArguments,
                                 int numRealArguments);
    public native void execAggregateDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                 int opNum,
                                 @ByPtrPtr double[] arguments,
                                 int numArguments,
                                 @ByPtrPtr int[] shapeArguments,
                                 int numShapeArguments,
                                 int[] indexArguments,
                                 int numIndexArguments,
                                 @ByPtrPtr int[] intArrays,
                                 int numIntArrays,
                                 double[] realArguments,
                                 int numRealArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param arguments
     * @param numArguments
     * @param shapeArguments
     * @param numShapeArguments
     * @param indexArguments
     * @param numIndexArguments
     * @param intArrays
     * @param numIntArrays
     * @param realArguments
     * @param numRealArguments
     */
    public native void execAggregateHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16**") PointerPointer arguments,
                               int numArguments,
                               @Cast("int**") PointerPointer shapeArguments,
                               int numShapeArguments,
                               IntPointer indexArguments,
                               int numIndexArguments,
                               @Cast("int**") PointerPointer intArrays,
                               int numIntArrays,
                               @Cast("float16*") ShortPointer realArguments,
                               int numRealArguments);
    public native void execAggregateHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16**") @ByPtrPtr ShortPointer arguments,
                               int numArguments,
                               @ByPtrPtr IntPointer shapeArguments,
                               int numShapeArguments,
                               IntPointer indexArguments,
                               int numIndexArguments,
                               @ByPtrPtr IntPointer intArrays,
                               int numIntArrays,
                               @Cast("float16*") ShortPointer realArguments,
                               int numRealArguments);
    public native void execAggregateHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16**") @ByPtrPtr ShortBuffer arguments,
                               int numArguments,
                               @ByPtrPtr IntBuffer shapeArguments,
                               int numShapeArguments,
                               IntBuffer indexArguments,
                               int numIndexArguments,
                               @ByPtrPtr IntBuffer intArrays,
                               int numIntArrays,
                               @Cast("float16*") ShortBuffer realArguments,
                               int numRealArguments);
    public native void execAggregateHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               int opNum,
                               @Cast("float16**") @ByPtrPtr short[] arguments,
                               int numArguments,
                               @ByPtrPtr int[] shapeArguments,
                               int numShapeArguments,
                               int[] indexArguments,
                               int numIndexArguments,
                               @ByPtrPtr int[] intArrays,
                               int numIntArrays,
                               @Cast("float16*") short[] realArguments,
                               int numRealArguments);


    /**
     *
     * @param extraPointers
     * @param numAggregates
     * @param opNum
     * @param maxArgs
     * @param maxShapes
     * @param maxIntArrays
     * @param maxIntArraySize
     * @param maxIdx
     * @param maxReals
     * @param ptrToArguments
     */
    public native void execAggregateBatchFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                     int numAggregates,
                                     int opNum,
                                     int maxArgs,
                                     int maxShapes,
                                     int maxIntArrays,
                                     int maxIntArraySize,
                                     int maxIdx,
                                     int maxReals,
                                     Pointer ptrToArguments);

    /**
     *
     * @param extraPointers
     * @param numAggregates
     * @param opNum
     * @param maxArgs
     * @param maxShapes
     * @param maxIntArrays
     * @param maxIntArraySize
     * @param maxIdx
     * @param maxReals
     * @param ptrToArguments
     */
    public native void execAggregateBatchDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                      int numAggregates,
                                      int opNum,
                                      int maxArgs,
                                      int maxShapes,
                                      int maxIntArrays,
                                      int maxIntArraySize,
                                      int maxIdx,
                                      int maxReals,
                                      Pointer ptrToArguments);

    /**
     *
     * @param extraPointers
     * @param numAggregates
     * @param opNum
     * @param maxArgs
     * @param maxShapes
     * @param maxIntArrays
     * @param maxIntArraySize
     * @param maxIdx
     * @param maxReals
     * @param ptrToArguments
     */
    public native void execAggregateBatchHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                                    int numAggregates,
                                    int opNum,
                                    int maxArgs,
                                    int maxShapes,
                                    int maxIntArrays,
                                    int maxIntArraySize,
                                    int maxIdx,
                                    int maxReals,
                                    Pointer ptrToArguments);

    /**
     * Random operations
     */

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             FloatPointer z,
                             IntPointer zShapeBuffer,
                             FloatPointer extraArguments);
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             FloatBuffer z,
                             IntBuffer zShapeBuffer,
                             FloatBuffer extraArguments);
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             float[] z,
                             int[] zShapeBuffer,
                             float[] extraArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param x
     * @param xShapeBuffer
     * @param y
     * @param yShapeBuffer
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             FloatPointer x,
                             IntPointer xShapeBuffer,
                             FloatPointer y,
                             IntPointer yShapeBuffer,
                             FloatPointer z,
                             IntPointer zShapeBuffer,
                             FloatPointer extraArguments);
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             FloatBuffer x,
                             IntBuffer xShapeBuffer,
                             FloatBuffer y,
                             IntBuffer yShapeBuffer,
                             FloatBuffer z,
                             IntBuffer zShapeBuffer,
                             FloatBuffer extraArguments);
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             float[] x,
                             int[] xShapeBuffer,
                             float[] y,
                             int[] yShapeBuffer,
                             float[] z,
                             int[] zShapeBuffer,
                             float[] extraArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param x
     * @param xShapeBuffer
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             FloatPointer x,
                             IntPointer xShapeBuffer,
                             FloatPointer z,
                             IntPointer zShapeBuffer,
                             FloatPointer extraArguments);
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             FloatBuffer x,
                             IntBuffer xShapeBuffer,
                             FloatBuffer z,
                             IntBuffer zShapeBuffer,
                             FloatBuffer extraArguments);
    public native void execRandomFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                             int opNum,
                             @Cast("Nd4jPointer") Pointer state,
                             float[] x,
                             int[] xShapeBuffer,
                             float[] z,
                             int[] zShapeBuffer,
                             float[] extraArguments);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              DoublePointer z,
                              IntPointer zShapeBuffer,
                              DoublePointer extraArguments);
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              DoubleBuffer z,
                              IntBuffer zShapeBuffer,
                              DoubleBuffer extraArguments);
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              double[] z,
                              int[] zShapeBuffer,
                              double[] extraArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param x
     * @param xShapeBuffer
     * @param y
     * @param yShapeBuffer
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              DoublePointer x,
                              IntPointer xShapeBuffer,
                              DoublePointer y,
                              IntPointer yShapeBuffer,
                              DoublePointer z,
                              IntPointer zShapeBuffer,
                              DoublePointer extraArguments);
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              DoubleBuffer x,
                              IntBuffer xShapeBuffer,
                              DoubleBuffer y,
                              IntBuffer yShapeBuffer,
                              DoubleBuffer z,
                              IntBuffer zShapeBuffer,
                              DoubleBuffer extraArguments);
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              double[] x,
                              int[] xShapeBuffer,
                              double[] y,
                              int[] yShapeBuffer,
                              double[] z,
                              int[] zShapeBuffer,
                              double[] extraArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param x
     * @param xShapeBuffer
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              DoublePointer x,
                              IntPointer xShapeBuffer,
                              DoublePointer z,
                              IntPointer zShapeBuffer,
                              DoublePointer extraArguments);
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              DoubleBuffer x,
                              IntBuffer xShapeBuffer,
                              DoubleBuffer z,
                              IntBuffer zShapeBuffer,
                              DoubleBuffer extraArguments);
    public native void execRandomDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                              int opNum,
                              @Cast("Nd4jPointer") Pointer state,
                              double[] x,
                              int[] xShapeBuffer,
                              double[] z,
                              int[] zShapeBuffer,
                              double[] extraArguments);


    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") ShortPointer z,
                            IntPointer zShapeBuffer,
                            @Cast("float16*") ShortPointer extraArguments);
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") ShortBuffer z,
                            IntBuffer zShapeBuffer,
                            @Cast("float16*") ShortBuffer extraArguments);
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") short[] z,
                            int[] zShapeBuffer,
                            @Cast("float16*") short[] extraArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param x
     * @param xShapeBuffer
     * @param y
     * @param yShapeBuffer
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") ShortPointer x,
                            IntPointer xShapeBuffer,
                            @Cast("float16*") ShortPointer y,
                            IntPointer yShapeBuffer,
                            @Cast("float16*") ShortPointer z,
                            IntPointer zShapeBuffer,
                            @Cast("float16*") ShortPointer extraArguments);
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") ShortBuffer x,
                            IntBuffer xShapeBuffer,
                            @Cast("float16*") ShortBuffer y,
                            IntBuffer yShapeBuffer,
                            @Cast("float16*") ShortBuffer z,
                            IntBuffer zShapeBuffer,
                            @Cast("float16*") ShortBuffer extraArguments);
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") short[] x,
                            int[] xShapeBuffer,
                            @Cast("float16*") short[] y,
                            int[] yShapeBuffer,
                            @Cast("float16*") short[] z,
                            int[] zShapeBuffer,
                            @Cast("float16*") short[] extraArguments);

    /**
     *
     * @param extraPointers
     * @param opNum
     * @param state
     * @param x
     * @param xShapeBuffer
     * @param z
     * @param zShapeBuffer
     * @param extraArguments
     */
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") ShortPointer x,
                            IntPointer xShapeBuffer,
                            @Cast("float16*") ShortPointer z,
                            IntPointer zShapeBuffer,
                            @Cast("float16*") ShortPointer extraArguments);
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") ShortBuffer x,
                            IntBuffer xShapeBuffer,
                            @Cast("float16*") ShortBuffer z,
                            IntBuffer zShapeBuffer,
                            @Cast("float16*") ShortBuffer extraArguments);
    public native void execRandomHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                            int opNum,
                            @Cast("Nd4jPointer") Pointer state,
                            @Cast("float16*") short[] x,
                            int[] xShapeBuffer,
                            @Cast("float16*") short[] z,
                            int[] zShapeBuffer,
                            @Cast("float16*") short[] extraArguments);



    /**
     *
     * @param extraPointers
     * @param seed
     * @param bufferSize
     * @param ptrToBuffer
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer initRandom(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                               long seed,
                               long bufferSize,
                               @Cast("Nd4jPointer") Pointer ptrToBuffer);

    /**
     *
     * @param extraPointers
     * @param seed
     * @param ptrRandom
     */
    public native void refreshBuffer(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                           long seed,
                           @Cast("Nd4jPointer") Pointer ptrRandom);

    /**
     *
     * @param extraPointers
     * @param seed
     * @param ptrRandom
     */
    public native void reSeedBuffer(@Cast("Nd4jPointer*") PointerPointer extraPointers,
                          long seed,
                          @Cast("Nd4jPointer") Pointer ptrRandom);

    /**
     *
     * @param ptrRandom
     */
    public native void destroyRandom(@Cast("Nd4jPointer") Pointer ptrRandom);

    /**
     * Grid operations
     */

    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param N
     * @param dx
     * @param xStride
     * @param dy
     * @param yStride
     * @param dz
     * @param zStride
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     */
    public native void execMetaPredicateStridedFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                           int opTypeA,
                                           int opNumA,
                                           int opTypeB,
                                           int opNumB,
                                           long N,
                                           FloatPointer dx,
                                           int xStride,
                                           FloatPointer dy,
                                           int yStride,
                                           FloatPointer dz,
                                           int zStride,
                                           FloatPointer extraA,
                                           FloatPointer extraB,
                                           float scalarA,
                                           float scalarB);
    public native void execMetaPredicateStridedFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                           int opTypeA,
                                           int opNumA,
                                           int opTypeB,
                                           int opNumB,
                                           long N,
                                           FloatBuffer dx,
                                           int xStride,
                                           FloatBuffer dy,
                                           int yStride,
                                           FloatBuffer dz,
                                           int zStride,
                                           FloatBuffer extraA,
                                           FloatBuffer extraB,
                                           float scalarA,
                                           float scalarB);
    public native void execMetaPredicateStridedFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                           int opTypeA,
                                           int opNumA,
                                           int opTypeB,
                                           int opNumB,
                                           long N,
                                           float[] dx,
                                           int xStride,
                                           float[] dy,
                                           int yStride,
                                           float[] dz,
                                           int zStride,
                                           float[] extraA,
                                           float[] extraB,
                                           float scalarA,
                                           float scalarB);

    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param N
     * @param dx
     * @param xShapeInfo
     * @param dy
     * @param yShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     */
    public native void execMetaPredicateShapeFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                         int opTypeA,
                                         int opNumA,
                                         int opTypeB,
                                         int opNumB,
                                         long N,
                                         FloatPointer dx,
                                         IntPointer xShapeInfo,
                                         FloatPointer dy,
                                         IntPointer yShapeInfo,
                                         FloatPointer dz,
                                         IntPointer zShapeInfo,
                                         FloatPointer extraA,
                                         FloatPointer extraB,
                                         float scalarA,
                                         float scalarB);
    public native void execMetaPredicateShapeFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                         int opTypeA,
                                         int opNumA,
                                         int opTypeB,
                                         int opNumB,
                                         long N,
                                         FloatBuffer dx,
                                         IntBuffer xShapeInfo,
                                         FloatBuffer dy,
                                         IntBuffer yShapeInfo,
                                         FloatBuffer dz,
                                         IntBuffer zShapeInfo,
                                         FloatBuffer extraA,
                                         FloatBuffer extraB,
                                         float scalarA,
                                         float scalarB);
    public native void execMetaPredicateShapeFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                         int opTypeA,
                                         int opNumA,
                                         int opTypeB,
                                         int opNumB,
                                         long N,
                                         float[] dx,
                                         int[] xShapeInfo,
                                         float[] dy,
                                         int[] yShapeInfo,
                                         float[] dz,
                                         int[] zShapeInfo,
                                         float[] extraA,
                                         float[] extraB,
                                         float scalarA,
                                         float scalarB);

    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param N
     * @param dx
     * @param xStride
     * @param dy
     * @param yStride
     * @param dz
     * @param zStride
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     */
    public native void execMetaPredicateStridedDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                                            int opTypeA,
                                            int opNumA,
                                            int opTypeB,
                                            int opNumB,
                                            long N,
                                            DoublePointer dx,
                                            int xStride,
                                            DoublePointer dy,
                                            int yStride,
                                            DoublePointer dz,
                                            int zStride,
                                            DoublePointer extraA,
                                            DoublePointer extraB,
                                            double scalarA,
                                            double scalarB);
    public native void execMetaPredicateStridedDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                                            int opTypeA,
                                            int opNumA,
                                            int opTypeB,
                                            int opNumB,
                                            long N,
                                            DoubleBuffer dx,
                                            int xStride,
                                            DoubleBuffer dy,
                                            int yStride,
                                            DoubleBuffer dz,
                                            int zStride,
                                            DoubleBuffer extraA,
                                            DoubleBuffer extraB,
                                            double scalarA,
                                            double scalarB);
    public native void execMetaPredicateStridedDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                                            int opTypeA,
                                            int opNumA,
                                            int opTypeB,
                                            int opNumB,
                                            long N,
                                            double[] dx,
                                            int xStride,
                                            double[] dy,
                                            int yStride,
                                            double[] dz,
                                            int zStride,
                                            double[] extraA,
                                            double[] extraB,
                                            double scalarA,
                                            double scalarB);

    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param N
     * @param dx
     * @param xShapeInfo
     * @param dy
     * @param yShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     */
    public native void execMetaPredicateShapeDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          long N,
                                          DoublePointer dx,
                                          IntPointer xShapeInfo,
                                          DoublePointer dy,
                                          IntPointer yShapeInfo,
                                          DoublePointer dz,
                                          IntPointer zShapeInfo,
                                          DoublePointer extraA,
                                          DoublePointer extraB,
                                          double scalarA,
                                          double scalarB);
    public native void execMetaPredicateShapeDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          long N,
                                          DoubleBuffer dx,
                                          IntBuffer xShapeInfo,
                                          DoubleBuffer dy,
                                          IntBuffer yShapeInfo,
                                          DoubleBuffer dz,
                                          IntBuffer zShapeInfo,
                                          DoubleBuffer extraA,
                                          DoubleBuffer extraB,
                                          double scalarA,
                                          double scalarB);
    public native void execMetaPredicateShapeDouble(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          long N,
                                          double[] dx,
                                          int[] xShapeInfo,
                                          double[] dy,
                                          int[] yShapeInfo,
                                          double[] dz,
                                          int[] zShapeInfo,
                                          double[] extraA,
                                          double[] extraB,
                                          double scalarA,
                                          double scalarB);

    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param N
     * @param dx
     * @param xStride
     * @param dy
     * @param yStride
     * @param dz
     * @param zStride
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     */
    public native void execMetaPredicateStridedHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          long N,
                                          @Cast("float16*") ShortPointer dx,
                                          int xStride,
                                          @Cast("float16*") ShortPointer dy,
                                          int yStride,
                                          @Cast("float16*") ShortPointer dz,
                                          int zStride,
                                          @Cast("float16*") ShortPointer extraA,
                                          @Cast("float16*") ShortPointer extraB,
                                          float scalarA,
                                          float scalarB);
    public native void execMetaPredicateStridedHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          long N,
                                          @Cast("float16*") ShortBuffer dx,
                                          int xStride,
                                          @Cast("float16*") ShortBuffer dy,
                                          int yStride,
                                          @Cast("float16*") ShortBuffer dz,
                                          int zStride,
                                          @Cast("float16*") ShortBuffer extraA,
                                          @Cast("float16*") ShortBuffer extraB,
                                          float scalarA,
                                          float scalarB);
    public native void execMetaPredicateStridedHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          long N,
                                          @Cast("float16*") short[] dx,
                                          int xStride,
                                          @Cast("float16*") short[] dy,
                                          int yStride,
                                          @Cast("float16*") short[] dz,
                                          int zStride,
                                          @Cast("float16*") short[] extraA,
                                          @Cast("float16*") short[] extraB,
                                          float scalarA,
                                          float scalarB);

    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param N
     * @param dx
     * @param xShapeInfo
     * @param dy
     * @param yShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     */
    public native void execMetaPredicateShapeHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                                        int opTypeA,
                                        int opNumA,
                                        int opTypeB,
                                        int opNumB,
                                        long N,
                                        @Cast("float16*") ShortPointer dx,
                                        IntPointer xShapeInfo,
                                        @Cast("float16*") ShortPointer dy,
                                        IntPointer yShapeInfo,
                                        @Cast("float16*") ShortPointer dz,
                                        IntPointer zShapeInfo,
                                        @Cast("float16*") ShortPointer extraA,
                                        @Cast("float16*") ShortPointer extraB,
                                        float scalarA,
                                        float scalarB);
    public native void execMetaPredicateShapeHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                                        int opTypeA,
                                        int opNumA,
                                        int opTypeB,
                                        int opNumB,
                                        long N,
                                        @Cast("float16*") ShortBuffer dx,
                                        IntBuffer xShapeInfo,
                                        @Cast("float16*") ShortBuffer dy,
                                        IntBuffer yShapeInfo,
                                        @Cast("float16*") ShortBuffer dz,
                                        IntBuffer zShapeInfo,
                                        @Cast("float16*") ShortBuffer extraA,
                                        @Cast("float16*") ShortBuffer extraB,
                                        float scalarA,
                                        float scalarB);
    public native void execMetaPredicateShapeHalf(@Cast("Nd4jPointer*") PointerPointer extras,
                                        int opTypeA,
                                        int opNumA,
                                        int opTypeB,
                                        int opNumB,
                                        long N,
                                        @Cast("float16*") short[] dx,
                                        int[] xShapeInfo,
                                        @Cast("float16*") short[] dy,
                                        int[] yShapeInfo,
                                        @Cast("float16*") short[] dz,
                                        int[] zShapeInfo,
                                        @Cast("float16*") short[] extraA,
                                        @Cast("float16*") short[] extraB,
                                        float scalarA,
                                        float scalarB);


    /**
     *
     * @param extras
     * @param opTypeA
     * @param opNumA
     * @param opTypeB
     * @param opNumB
     * @param dx
     * @param xShapeInfo
     * @param dy
     * @param yShapeInfo
     * @param dz
     * @param zShapeInfo
     * @param dimension
     * @param dimensionLength
     * @param tadShapeInfo
     * @param tadOffsets
     * @param extraA
     * @param extraB
     * @param scalarA
     * @param scalarB
     * @param scalarReturned
     */
    public native void execMetaPredicateReduceFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          FloatPointer dx,
                                          IntPointer xShapeInfo,
                                          FloatPointer dy,
                                          IntPointer yShapeInfo,
                                          FloatPointer dz,
                                          IntPointer zShapeInfo,
                                          IntPointer dimension,
                                          int dimensionLength,
                                          IntPointer tadShapeInfo,
                                          @Cast("Nd4jIndex*") LongPointer tadOffsets,
                                          FloatPointer extraA,
                                          FloatPointer extraB,
                                          float scalarA,
                                          float scalarB,
                                          @Cast("bool") boolean scalarReturned);
    public native void execMetaPredicateReduceFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          FloatBuffer dx,
                                          IntBuffer xShapeInfo,
                                          FloatBuffer dy,
                                          IntBuffer yShapeInfo,
                                          FloatBuffer dz,
                                          IntBuffer zShapeInfo,
                                          IntBuffer dimension,
                                          int dimensionLength,
                                          IntBuffer tadShapeInfo,
                                          @Cast("Nd4jIndex*") LongBuffer tadOffsets,
                                          FloatBuffer extraA,
                                          FloatBuffer extraB,
                                          float scalarA,
                                          float scalarB,
                                          @Cast("bool") boolean scalarReturned);
    public native void execMetaPredicateReduceFloat(@Cast("Nd4jPointer*") PointerPointer extras,
                                          int opTypeA,
                                          int opNumA,
                                          int opTypeB,
                                          int opNumB,
                                          float[] dx,
                                          int[] xShapeInfo,
                                          float[] dy,
                                          int[] yShapeInfo,
                                          float[] dz,
                                          int[] zShapeInfo,
                                          int[] dimension,
                                          int dimensionLength,
                                          int[] tadShapeInfo,
                                          @Cast("Nd4jIndex*") long[] tadOffsets,
                                          float[] extraA,
                                          float[] extraB,
                                          float scalarA,
                                          float scalarB,
                                          @Cast("bool") boolean scalarReturned);



    /**
     * Get the shape buffer from a
     * numpy array.
     * **Warning** this allocates memory
     * @param npyArray
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer shapeBufferForNumpy(@Cast("Nd4jPointer") Pointer npyArray);

    /**
     * Data buffer for numpy
     * @param npArray
     * @return
     */
    public native @Cast("Nd4jPointer") Pointer dataPointForNumpy(@Cast("Nd4jPointer") Pointer npArray);

    /**
     * Create a pointer to an NDarray struct
     * @param path  the path to create the ndarray
     * struct from
     * @return  a pointer to the ndarray struct
     */
    public native @Cast("Nd4jPointer") Pointer numpyFromFile(@StdString BytePointer path);
    public native @Cast("Nd4jPointer") Pointer numpyFromFile(@StdString String path);

    /**
     * This method releases pointer.
     *
     * PLEASE NOTE: This method shouldn't be ever called for anything but numpy arrays created from FILE
     *
     * @param npyArray
     */
    public native void releaseNumpy(@Cast("Nd4jPointer") Pointer npyArray);

    /**
     * Return the length of a shape buffer
     * based on the pointer
     * @param buffer  the buffer pointer to check
     * @return
     */
    public native int lengthForShapeBufferPointer(@Cast("Nd4jPointer") Pointer buffer);

    /**
     * Get the element size for a numpy array
     * @param npyArray  the numpy array's address
     * to get the length for
     * @return
     */
    public native int elementSizeForNpyArray(@Cast("Nd4jPointer") Pointer npyArray);


    /**
   * The pointer to get the address for
   *
   * @param address the address to get the pointer
   * @return the pointer for the given address
   */

    public native @Cast("Nd4jPointer") Pointer pointerForAddress(@Cast("Nd4jIndex") long address);

    /**
     * This method takes single N-dimensional tensor, and copies its TADs to target arrays
     *
     * @param x
     * @param xShapeInfo
     * @param targets
     * @param zShapeInfo
     * @return
     */
    public native void tearDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoublePointer x, IntPointer xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, IntPointer zShapeInfo, IntPointer tadShapeInfo, @Cast("Nd4jIndex*") LongPointer tadOffsets);
    public native void tearDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoubleBuffer x, IntBuffer xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, IntBuffer zShapeInfo, IntBuffer tadShapeInfo, @Cast("Nd4jIndex*") LongBuffer tadOffsets);
    public native void tearDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, double[] x, int[] xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, int[] zShapeInfo, int[] tadShapeInfo, @Cast("Nd4jIndex*") long[] tadOffsets);

    /**
     * This method takes single N-dimensional tensor, and copies its TADs to target arrays
     *
     * @param x
     * @param xShapeInfo
     * @param targets
     * @param zShapeInfo
     * @return
     */
    public native void tearFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatPointer x, IntPointer xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, IntPointer zShapeInfo, IntPointer tadShapeInfo, @Cast("Nd4jIndex*") LongPointer tadOffsets);
    public native void tearFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatBuffer x, IntBuffer xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, IntBuffer zShapeInfo, IntBuffer tadShapeInfo, @Cast("Nd4jIndex*") LongBuffer tadOffsets);
    public native void tearFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, float[] x, int[] xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, int[] zShapeInfo, int[] tadShapeInfo, @Cast("Nd4jIndex*") long[] tadOffsets);

    /**
     * This method takes single N-dimensional tensor, and copies its TADs to target arrays
     *
     * @param x
     * @param xShapeInfo
     * @param targets
     * @param zShapeInfo
     * @return
     */
    public native void tearHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortPointer x, IntPointer xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, IntPointer zShapeInfo, IntPointer tadShapeInfo, @Cast("Nd4jIndex*") LongPointer tadOffsets);
    public native void tearHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortBuffer x, IntBuffer xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, IntBuffer zShapeInfo, IntBuffer tadShapeInfo, @Cast("Nd4jIndex*") LongBuffer tadOffsets);
    public native void tearHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") short[] x, int[] xShapeInfo, @Cast("Nd4jPointer*") PointerPointer targets, int[] zShapeInfo, int[] tadShapeInfo, @Cast("Nd4jIndex*") long[] tadOffsets);


    public native @Cast("Nd4jIndex") long encodeBitmapFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatPointer dx, @Cast("Nd4jIndex") long N, IntPointer dz, float threshold);
    public native @Cast("Nd4jIndex") long encodeBitmapFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz, float threshold);
    public native @Cast("Nd4jIndex") long encodeBitmapFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, float[] dx, @Cast("Nd4jIndex") long N, int[] dz, float threshold);

    public native @Cast("Nd4jIndex") long encodeBitmapDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoublePointer dx, @Cast("Nd4jIndex") long N, IntPointer dz, float threshold);
    public native @Cast("Nd4jIndex") long encodeBitmapDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoubleBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz, float threshold);
    public native @Cast("Nd4jIndex") long encodeBitmapDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, double[] dx, @Cast("Nd4jIndex") long N, int[] dz, float threshold);

    public native @Cast("Nd4jIndex") long encodeBitmapHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortPointer dx, @Cast("Nd4jIndex") long N, IntPointer dz, float threshold);
    public native @Cast("Nd4jIndex") long encodeBitmapHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz, float threshold);
    public native @Cast("Nd4jIndex") long encodeBitmapHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") short[] dx, @Cast("Nd4jIndex") long N, int[] dz, float threshold);

    public native void decodeBitmapFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, FloatPointer dz);
    public native void decodeBitmapFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, FloatBuffer dz);
    public native void decodeBitmapFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, float[] dz);

    public native void decodeBitmapDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, DoublePointer dz);
    public native void decodeBitmapDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, DoubleBuffer dz);
    public native void decodeBitmapDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, double[] dz);

    public native void decodeBitmapHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, @Cast("float16*") ShortPointer dz);
    public native void decodeBitmapHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, @Cast("float16*") ShortBuffer dz);
    public native void decodeBitmapHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, @Cast("float16*") short[] dz);


    public native void encodeThresholdP1Double(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoublePointer dx, @Cast("Nd4jIndex") long N, IntPointer dz, float threshold);
    public native void encodeThresholdP1Double(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoubleBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz, float threshold);
    public native void encodeThresholdP1Double(@Cast("Nd4jPointer*") PointerPointer extraPointers, double[] dx, @Cast("Nd4jIndex") long N, int[] dz, float threshold);

    public native void encodeThresholdP1Half(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortPointer dx, @Cast("Nd4jIndex") long N, IntPointer dz, float threshold);
    public native void encodeThresholdP1Half(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz, float threshold);
    public native void encodeThresholdP1Half(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") short[] dx, @Cast("Nd4jIndex") long N, int[] dz, float threshold);

    public native void encodeThresholdP1Float(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatPointer dx, @Cast("Nd4jIndex") long N, IntPointer dz, float threshold);
    public native void encodeThresholdP1Float(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz, float threshold);
    public native void encodeThresholdP1Float(@Cast("Nd4jPointer*") PointerPointer extraPointers, float[] dx, @Cast("Nd4jIndex") long N, int[] dz, float threshold);


    public native void encodeThresholdP2Int(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntPointer dx, @Cast("Nd4jIndex") long N, IntPointer dz);
    public native void encodeThresholdP2Int(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntBuffer dx, @Cast("Nd4jIndex") long N, IntBuffer dz);
    public native void encodeThresholdP2Int(@Cast("Nd4jPointer*") PointerPointer extraPointers, int[] dx, @Cast("Nd4jIndex") long N, int[] dz);


    public native void encodeThresholdP3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatPointer dx, IntPointer offsets, @Cast("Nd4jIndex") long N, IntPointer dz);
    public native void encodeThresholdP3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatBuffer dx, IntBuffer offsets, @Cast("Nd4jIndex") long N, IntBuffer dz);
    public native void encodeThresholdP3Float(@Cast("Nd4jPointer*") PointerPointer extraPointers, float[] dx, int[] offsets, @Cast("Nd4jIndex") long N, int[] dz);

    public native void encodeThresholdP3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoublePointer dx, IntPointer offsets, @Cast("Nd4jIndex") long N, IntPointer dz);
    public native void encodeThresholdP3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoubleBuffer dx, IntBuffer offsets, @Cast("Nd4jIndex") long N, IntBuffer dz);
    public native void encodeThresholdP3Double(@Cast("Nd4jPointer*") PointerPointer extraPointers, double[] dx, int[] offsets, @Cast("Nd4jIndex") long N, int[] dz);

    public native void encodeThresholdP3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortPointer dx, IntPointer offsets, @Cast("Nd4jIndex") long N, IntPointer dz);
    public native void encodeThresholdP3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortBuffer dx, IntBuffer offsets, @Cast("Nd4jIndex") long N, IntBuffer dz);
    public native void encodeThresholdP3Half(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") short[] dx, int[] offsets, @Cast("Nd4jIndex") long N, int[] dz);


    public native void decodeThresholdFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, FloatPointer dz);
    public native void decodeThresholdFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, FloatBuffer dz);
    public native void decodeThresholdFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, float[] dz);

    public native void decodeThresholdDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, DoublePointer dz);
    public native void decodeThresholdDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, DoubleBuffer dz);
    public native void decodeThresholdDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, double[] dz);

    public native void decodeThresholdHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, @Cast("float16*") ShortPointer dz);
    public native void decodeThresholdHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, @Cast("float16*") ShortBuffer dz);
    public native void decodeThresholdHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, Pointer dx, @Cast("Nd4jIndex") long N, @Cast("float16*") short[] dz);



    public native void sortFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatPointer x, IntPointer xShapeInfo, @Cast("bool") boolean descending);
    public native void sortFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatBuffer x, IntBuffer xShapeInfo, @Cast("bool") boolean descending);
    public native void sortFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, float[] x, int[] xShapeInfo, @Cast("bool") boolean descending);

    public native void sortDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoublePointer x, IntPointer xShapeInfo, @Cast("bool") boolean descending);
    public native void sortDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoubleBuffer x, IntBuffer xShapeInfo, @Cast("bool") boolean descending);
    public native void sortDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, double[] x, int[] xShapeInfo, @Cast("bool") boolean descending);

    public native void sortHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortPointer x, IntPointer xShapeInfo, @Cast("bool") boolean descending);
    public native void sortHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortBuffer x, IntBuffer xShapeInfo, @Cast("bool") boolean descending);
    public native void sortHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") short[] x, int[] xShapeInfo, @Cast("bool") boolean descending);



    public native void sortTadFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatPointer x, IntPointer xShapeInfo, IntPointer dimension, int dimensionLength, IntPointer tadShapeInfo, @Cast("Nd4jIndex*") LongPointer tadOffsets, @Cast("bool") boolean descending);
    public native void sortTadFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, FloatBuffer x, IntBuffer xShapeInfo, IntBuffer dimension, int dimensionLength, IntBuffer tadShapeInfo, @Cast("Nd4jIndex*") LongBuffer tadOffsets, @Cast("bool") boolean descending);
    public native void sortTadFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, float[] x, int[] xShapeInfo, int[] dimension, int dimensionLength, int[] tadShapeInfo, @Cast("Nd4jIndex*") long[] tadOffsets, @Cast("bool") boolean descending);

    public native void sortTadDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoublePointer x, IntPointer xShapeInfo, IntPointer dimension, int dimensionLength, IntPointer tadShapeInfo, @Cast("Nd4jIndex*") LongPointer tadOffsets, @Cast("bool") boolean descending);
    public native void sortTadDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, DoubleBuffer x, IntBuffer xShapeInfo, IntBuffer dimension, int dimensionLength, IntBuffer tadShapeInfo, @Cast("Nd4jIndex*") LongBuffer tadOffsets, @Cast("bool") boolean descending);
    public native void sortTadDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, double[] x, int[] xShapeInfo, int[] dimension, int dimensionLength, int[] tadShapeInfo, @Cast("Nd4jIndex*") long[] tadOffsets, @Cast("bool") boolean descending);

    public native void sortTadHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortPointer x, IntPointer xShapeInfo, IntPointer dimension, int dimensionLength, IntPointer tadShapeInfo, @Cast("Nd4jIndex*") LongPointer tadOffsets, @Cast("bool") boolean descending);
    public native void sortTadHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") ShortBuffer x, IntBuffer xShapeInfo, IntBuffer dimension, int dimensionLength, IntBuffer tadShapeInfo, @Cast("Nd4jIndex*") LongBuffer tadOffsets, @Cast("bool") boolean descending);
    public native void sortTadHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, @Cast("float16*") short[] x, int[] xShapeInfo, int[] dimension, int dimensionLength, int[] tadShapeInfo, @Cast("Nd4jIndex*") long[] tadOffsets, @Cast("bool") boolean descending);


    // special sort impl for sorting out COO indices and values
    public native void sortCooIndicesFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntPointer indices, FloatPointer values, @Cast("Nd4jIndex") long length, int rank);
    public native void sortCooIndicesFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntBuffer indices, FloatBuffer values, @Cast("Nd4jIndex") long length, int rank);
    public native void sortCooIndicesFloat(@Cast("Nd4jPointer*") PointerPointer extraPointers, int[] indices, float[] values, @Cast("Nd4jIndex") long length, int rank);

    public native void sortCooIndicesDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntPointer indices, DoublePointer values, @Cast("Nd4jIndex") long length, int rank);
    public native void sortCooIndicesDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntBuffer indices, DoubleBuffer values, @Cast("Nd4jIndex") long length, int rank);
    public native void sortCooIndicesDouble(@Cast("Nd4jPointer*") PointerPointer extraPointers, int[] indices, double[] values, @Cast("Nd4jIndex") long length, int rank);

    public native void sortCooIndicesHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntPointer indices, @Cast("float16*") ShortPointer values, @Cast("Nd4jIndex") long length, int rank);
    public native void sortCooIndicesHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, IntBuffer indices, @Cast("float16*") ShortBuffer values, @Cast("Nd4jIndex") long length, int rank);
    public native void sortCooIndicesHalf(@Cast("Nd4jPointer*") PointerPointer extraPointers, int[] indices, @Cast("float16*") short[] values, @Cast("Nd4jIndex") long length, int rank);
}


// #endif //NATIVEOPERATIONS_NATIVEOPS_H


}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy