license import { Tensor } from '@tensorflow/tfjs-core' ; import * as tfOps from '@tensorflow/tfjs-core/dist/ops/ops_for_converter' ; import { NamedTensorsMap } from '../../data/types' ; import { ExecutionContext } from '../../executor/execution_context' ; import { InternalOpExecutor , Node } from '../types' ; import { cloneTensor , getParamValue , getTensor } from './utils' ; export const executeOp = ( node , tensorMap , context ) : Tensor [ ] => { switch ( node . op ) { case 'Const' : { return tensorMap [ node . name ] ; } case 'PlaceholderWithDefault' : const def = getParamValue ( 'default' , node , tensorMap , context ) as Tensor ; return [ getTensor ( node . name , tensorMap , context ) || def ] ; case 'Placeholder' : return [ getTensor ( node . name , tensorMap , context ) ] ; case 'Identity' : case 'StopGradient' : case 'FakeQuantWithMinMaxVars' : { const data = getParamValue ( 'x' , node , tensorMap , context ) as Tensor ; return [ cloneTensor ( data ) ] ; } case 'IdentityN' : return ( getParamValue ( 'x' , node , tensorMap , context ) as Tensor [ ] ) . map ( ( t ) => cloneTensor ( t ) ) ; case 'Snapshot' : const snapshot = ( getParamValue ( 'x' , node , tensorMap , context ) as Tensor ) ; return [ cloneTensor ( snapshot ) ] ; case 'Shape' : return [ tfOps . tensor1d ( ( getParamValue ( 'x' , node , tensorMap , context ) as Tensor ) . shape , 'int32' ) ] ; case 'ShapeN' : return ( getParamValue ( 'x' , node , tensorMap , context ) as Tensor [ ] ) . map ( ( t ) => tfOps . tensor1d ( t . shape ) ) ; case 'Size' : return [ tfOps . scalar ( ( getParamValue ( 'x' , node , tensorMap , context ) as Tensor ) . size , 'int32' ) ] ; case 'Rank' : return [ tfOps . scalar ( ( getParamValue ( 'x' , node , tensorMap , context ) as Tensor ) . rank , 'int32' ) ] ; case 'NoOp' : return [ tfOps . scalar ( 1 ) ] ; case 'Print' : const input = getParamValue ( 'x' , node , tensorMap , context ) as Tensor ; const data = getParamValue ( 'data' , node , tensorMap , context ) as Tensor [ ] ; const message = getParamValue ( 'message' , node , tensorMap , context ) as string ; const summarize = getParamValue ( 'summarize' , node , tensorMap , context ) as number ; console . warn ( 'The graph has a tf.print() operation,' + 'usually used for debugging, which slows down performance.' ) ; console . log ( message ) ; for ( let i = 0 ; i < data . length ; i ++ ) { console . log ( Array . prototype . slice . call ( data [ i ] . dataSync ( ) ) . slice ( 0 , summarize ) ) ; } return [ input ] ; default : throw TypeError ( `Node type ${ node . op } is not implemented` ) ; } } ; export const CATEGORY = 'graph' ;