function executeOp(node, tensorMap, context, resourceManager, tidy = _tfjsCore.tidy) {
    const value = ((node, tensorMap, context)=>{
        switch(node.category){
            case "arithmetic":
                return tidy(()=>_arithmeticExecutor.executeOp(node, tensorMap, context));
            case "basic_math":
                return tidy(()=>_basicMathExecutor.executeOp(node, tensorMap, context));
            case "control":
                return _controlExecutor.executeOp(node, tensorMap, context);
            case "convolution":
                return tidy(()=>_convolutionExecutor.executeOp(node, tensorMap, context));
            case "creation":
                return tidy(()=>_creationExecutor.executeOp(node, tensorMap, context));
            case "dynamic":
                return _dynamicExecutor.executeOp(node, tensorMap, context);
            case "evaluation":
                return tidy(()=>_evaluationExecutor.executeOp(node, tensorMap, context));
            case "image":
                return tidy(()=>_imageExecutor.executeOp(node, tensorMap, context));
            case "graph":
                return tidy(()=>_graphExecutor.executeOp(node, tensorMap, context));
            case "logical":
                return tidy(()=>_logicalExecutor.executeOp(node, tensorMap, context));
            case "matrices":
                return tidy(()=>_matricesExecutor.executeOp(node, tensorMap, context));
            case "normalization":
                return tidy(()=>_normalizationExecutor.executeOp(node, tensorMap, context));
            case "ragged":
                return tidy(()=>_raggedExecutor.executeOp(node, tensorMap, context));
            case "reduction":
                return tidy(()=>_reductionExecutor.executeOp(node, tensorMap, context));
            case "slice_join":
                return tidy(()=>_sliceJoinExecutor.executeOp(node, tensorMap, context));
            case "sparse":
                return tidy(()=>_sparseExecutor.executeOp(node, tensorMap, context));
            case "spectral":
                return tidy(()=>_spectralExecutor.executeOp(node, tensorMap, context));
            case "string":
                return tidy(()=>_stringExecutor.executeOp(node, tensorMap, context));
            case "transformation":
                return tidy(()=>_transformationExecutor.executeOp(node, tensorMap, context));
            case "hash_table":
                return _hashTableExecutor.executeOp(node, tensorMap, context, resourceManager);
            case "custom":
                const opMapper = (0, _register.getRegisteredOp)(node.op);
                if (opMapper && opMapper.customExecutor) return opMapper.customExecutor(new (0, _nodeValueImpl.NodeValueImpl)(node, tensorMap, context));
                else throw TypeError(`Custom op ${node.op} is not registered.`);
            default:
                throw TypeError(`Unknown op '${node.op}'. File an issue at ` + `https://github.com/tensorflow/tfjs/issues so we can add it` + `, or register a custom execution with tf.registerOp()`);
        }
    })(node, tensorMap, context);
    if (_tfjsCore.util.isPromise(value)) return value.then((data)=>[].concat(data));
    return [].concat(value);
}
Executes the op defined by the node object.
@param node
@param tensorMap contains tensors for executed nodes and weights
@param context contains tensors and information for running the current node.
@param resourceManager Optional. Contains global resources of the model.