public static Cloner newCloner() {
        Cloner cloner = new Cloner();

        //Implement custom cloning for INDArrays (default can have problems with off-heap and pointers)
        //Sadly: the cloner library does NOT support interfaces here, hence we need to use the actual classes
        //cloner.registerFastCloner(INDArray.class, new INDArrayFastCloner());  //Does not work due to interface
        IFastCloner fc = new INDArrayFastCloner();
        cloner.registerFastCloner(Nd4j.getBackend().getNDArrayClass(), fc);

        //Same thing with DataBuffers: off heap -> cloner library chokes on them, but need to know the concrete
        // buffer classes, not just the interface
        IFastCloner fc2 = new DataBufferFastCloner();
        DataBufferFactory d = Nd4j.getDataBufferFactory();
        doReg(cloner, fc2, d.intBufferClass());
        doReg(cloner, fc2, d.longBufferClass());
        doReg(cloner, fc2, d.halfBufferClass());
        doReg(cloner, fc2, d.floatBufferClass());
        doReg(cloner, fc2, d.doubleBufferClass());
        doReg(cloner, fc2, CompressedDataBuffer.class);
        return cloner;
    }
public static Cloner newCloner ( ) { Cloner cloner = new Cloner ( ) ; IFastCloner fc = new INDArrayFastCloner ( ) ; cloner . registerFastCloner ( Nd4j . getBackend ( ) . getNDArrayClass ( ) , fc ) ; IFastCloner fc2 = new DataBufferFastCloner ( ) ; DataBufferFactory d = Nd4j . getDataBufferFactory ( ) ; doReg ( cloner , fc2 , d . intBufferClass ( ) ) ; doReg ( cloner , fc2 , d . longBufferClass ( ) ) ; doReg ( cloner , fc2 , d . halfBufferClass ( ) ) ; doReg ( cloner , fc2 , d . floatBufferClass ( ) ) ; doReg ( cloner , fc2 , d . doubleBufferClass ( ) ) ; doReg ( cloner , fc2 , CompressedDataBuffer . class ) ; return cloner ; }
@return New cloner object. NOTE: INTENDED FOR DEVELOPER USE ONLY