constructor(weightMap = {}, tensorArrayMap = {}, tensorListMap = {}, functionMap = {}, parseNodeNameCache){
        this.weightMap = weightMap;
        this.tensorArrayMap = tensorArrayMap;
        this.tensorListMap = tensorListMap;
        this.functionMap = functionMap;
        this.parseNodeNameCache = parseNodeNameCache;
        this.rootContext = {
            id: 0,
            frameName: "",
            iterationId: 0
        };
        this.contexts = [
            this.rootContext
        ];
        this.lastId = 0;
        this.generateCurrentContextIds();
    }
ExecutionContext captures the runtime environment of the node. It keeps
track of the current frame and iteration for the control flow ops.

For example, typical Dynamic RNN model may contain loops, for which
TensorFlow will generate graphs with Enter/Exit nodes to control the
current execution frame, and NextIteration Nodes for iteration id increment.
For model with branch logic, TensorFLow will generate Switch/Merge ops.