license import { KernelConfig , KernelFunc , Reverse , ReverseAttrs , ReverseInputs , TensorBuffer , TensorInfo , util } from '@tensorflow/tfjs-core' ; import { MathBackendCPU } from '../backend_cpu' ; import { assertNotComplex } from '../cpu_util' ; import { identity } from './Identity' ; export function reverse ( args ) { const { inputs , backend , attrs } = args ; const { x } = inputs ; const { dims } = attrs ; assertNotComplex ( x , 'reverse' ) ; const xRank = x . shape . length ; const $dims = util . parseAxisParam ( dims , x . shape ) ; if ( xRank === 0 ) { return identity ( { inputs : { x } , backend } ) ; } const outBuf = new TensorBuffer ( x . shape , x . dtype ) ; const xBuf = backend . bufferSync ( x ) ; for ( let i = 0 ; i < outBuf . size ; i ++ ) { const outLoc = outBuf . indexToLoc ( i ) ; const inLoc = outLoc . slice ( ) ; $dims . forEach ( d => inLoc [ d ] = x . shape [ d ] - 1 - inLoc [ d ] ) ; outBuf . set ( xBuf . get ( ... inLoc ) , ... outLoc ) ; } return backend . makeTensorInfo ( outBuf . shape , outBuf . dtype , outBuf . values ) ; } export const reverseConfig = { kernelName : Reverse , backendName : 'cpu' , kernelFunc : reverse as { } as KernelFunc } ;