diff --git a/ethosu/vela/tflite/ReshapeOptions.py b/ethosu/vela/tflite/ReshapeOptions.py
index 234f438..d22a91b 100644
--- a/ethosu/vela/tflite/ReshapeOptions.py
+++ b/ethosu/vela/tflite/ReshapeOptions.py
@@ -10,13 +10,17 @@
     __slots__ = ['_tab']
 
     @classmethod
-    def GetRootAsReshapeOptions(cls, buf, offset):
+    def GetRootAs(cls, buf, offset=0):
         n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
         x = ReshapeOptions()
         x.Init(buf, n + offset)
         return x
 
     @classmethod
+    def GetRootAsReshapeOptions(cls, buf, offset=0):
+        """This method is deprecated. Please switch to GetRootAs."""
+        return cls.GetRootAs(buf, offset)
+    @classmethod
     def ReshapeOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False):
         return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed)
 
@@ -52,6 +56,14 @@
         return o == 0
 
 def ReshapeOptionsStart(builder): builder.StartObject(1)
+def Start(builder):
+    return ReshapeOptionsStart(builder)
 def ReshapeOptionsAddNewShape(builder, newShape): builder.PrependUOffsetTRelativeSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(newShape), 0)
+def AddNewShape(builder, newShape):
+    return ReshapeOptionsAddNewShape(builder, newShape)
 def ReshapeOptionsStartNewShapeVector(builder, numElems): return builder.StartVector(4, numElems, 4)
+def StartNewShapeVector(builder, numElems):
+    return ReshapeOptionsStartNewShapeVector(builder, numElems)
 def ReshapeOptionsEnd(builder): return builder.EndObject()
+def End(builder):
+    return ReshapeOptionsEnd(builder)
\ No newline at end of file
