diff --git a/ethosu/vela/tflite/CumsumOptions.py b/ethosu/vela/tflite/CumsumOptions.py
index 91c4586..de83dfa 100644
--- a/ethosu/vela/tflite/CumsumOptions.py
+++ b/ethosu/vela/tflite/CumsumOptions.py
@@ -3,18 +3,24 @@
 # namespace: tflite
 
 import flatbuffers
+from flatbuffers.compat import import_numpy
+np = import_numpy()
 
 class CumsumOptions(object):
     __slots__ = ['_tab']
 
     @classmethod
-    def GetRootAsCumsumOptions(cls, buf, offset):
+    def GetRootAs(cls, buf, offset=0):
         n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
         x = CumsumOptions()
         x.Init(buf, n + offset)
         return x
 
     @classmethod
+    def GetRootAsCumsumOptions(cls, buf, offset=0):
+        """This method is deprecated. Please switch to GetRootAs."""
+        return cls.GetRootAs(buf, offset)
+    @classmethod
     def CumsumOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False):
         return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed)
 
@@ -37,6 +43,14 @@
         return False
 
 def CumsumOptionsStart(builder): builder.StartObject(2)
+def Start(builder):
+    return CumsumOptionsStart(builder)
 def CumsumOptionsAddExclusive(builder, exclusive): builder.PrependBoolSlot(0, exclusive, 0)
+def AddExclusive(builder, exclusive):
+    return CumsumOptionsAddExclusive(builder, exclusive)
 def CumsumOptionsAddReverse(builder, reverse): builder.PrependBoolSlot(1, reverse, 0)
+def AddReverse(builder, reverse):
+    return CumsumOptionsAddReverse(builder, reverse)
 def CumsumOptionsEnd(builder): return builder.EndObject()
+def End(builder):
+    return CumsumOptionsEnd(builder)
\ No newline at end of file
