diff --git a/ethosu/vela/tflite/CastOptions.py b/ethosu/vela/tflite/CastOptions.py
index 1f00765..e97ac8e 100644
--- a/ethosu/vela/tflite/CastOptions.py
+++ b/ethosu/vela/tflite/CastOptions.py
@@ -3,18 +3,24 @@
 # namespace: tflite
 
 import flatbuffers
+from flatbuffers.compat import import_numpy
+np = import_numpy()
 
 class CastOptions(object):
     __slots__ = ['_tab']
 
     @classmethod
-    def GetRootAsCastOptions(cls, buf, offset):
+    def GetRootAs(cls, buf, offset=0):
         n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
         x = CastOptions()
         x.Init(buf, n + offset)
         return x
 
     @classmethod
+    def GetRootAsCastOptions(cls, buf, offset=0):
+        """This method is deprecated. Please switch to GetRootAs."""
+        return cls.GetRootAs(buf, offset)
+    @classmethod
     def CastOptionsBufferHasIdentifier(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 0
 
 def CastOptionsStart(builder): builder.StartObject(2)
+def Start(builder):
+    return CastOptionsStart(builder)
 def CastOptionsAddInDataType(builder, inDataType): builder.PrependInt8Slot(0, inDataType, 0)
+def AddInDataType(builder, inDataType):
+    return CastOptionsAddInDataType(builder, inDataType)
 def CastOptionsAddOutDataType(builder, outDataType): builder.PrependInt8Slot(1, outDataType, 0)
+def AddOutDataType(builder, outDataType):
+    return CastOptionsAddOutDataType(builder, outDataType)
 def CastOptionsEnd(builder): return builder.EndObject()
+def End(builder):
+    return CastOptionsEnd(builder)
\ No newline at end of file
