diff --git a/ethosu/vela/tflite/Conv3DOptions.py b/ethosu/vela/tflite/Conv3DOptions.py
index 0f99860..a4e604d 100644
--- a/ethosu/vela/tflite/Conv3DOptions.py
+++ b/ethosu/vela/tflite/Conv3DOptions.py
@@ -3,18 +3,24 @@
 # namespace: tflite
 
 import flatbuffers
+from flatbuffers.compat import import_numpy
+np = import_numpy()
 
 class Conv3DOptions(object):
     __slots__ = ['_tab']
 
     @classmethod
-    def GetRootAsConv3DOptions(cls, buf, offset):
+    def GetRootAs(cls, buf, offset=0):
         n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
         x = Conv3DOptions()
         x.Init(buf, n + offset)
         return x
 
     @classmethod
+    def GetRootAsConv3DOptions(cls, buf, offset=0):
+        """This method is deprecated. Please switch to GetRootAs."""
+        return cls.GetRootAs(buf, offset)
+    @classmethod
     def Conv3DOptionsBufferHasIdentifier(cls, buf, offset, size_prefixed=False):
         return flatbuffers.util.BufferHasIdentifier(buf, offset, b"\x54\x46\x4C\x33", size_prefixed=size_prefixed)
 
@@ -79,12 +85,32 @@
         return 1
 
 def Conv3DOptionsStart(builder): builder.StartObject(8)
+def Start(builder):
+    return Conv3DOptionsStart(builder)
 def Conv3DOptionsAddPadding(builder, padding): builder.PrependInt8Slot(0, padding, 0)
+def AddPadding(builder, padding):
+    return Conv3DOptionsAddPadding(builder, padding)
 def Conv3DOptionsAddStrideD(builder, strideD): builder.PrependInt32Slot(1, strideD, 0)
+def AddStrideD(builder, strideD):
+    return Conv3DOptionsAddStrideD(builder, strideD)
 def Conv3DOptionsAddStrideW(builder, strideW): builder.PrependInt32Slot(2, strideW, 0)
+def AddStrideW(builder, strideW):
+    return Conv3DOptionsAddStrideW(builder, strideW)
 def Conv3DOptionsAddStrideH(builder, strideH): builder.PrependInt32Slot(3, strideH, 0)
+def AddStrideH(builder, strideH):
+    return Conv3DOptionsAddStrideH(builder, strideH)
 def Conv3DOptionsAddFusedActivationFunction(builder, fusedActivationFunction): builder.PrependInt8Slot(4, fusedActivationFunction, 0)
+def AddFusedActivationFunction(builder, fusedActivationFunction):
+    return Conv3DOptionsAddFusedActivationFunction(builder, fusedActivationFunction)
 def Conv3DOptionsAddDilationDFactor(builder, dilationDFactor): builder.PrependInt32Slot(5, dilationDFactor, 1)
+def AddDilationDFactor(builder, dilationDFactor):
+    return Conv3DOptionsAddDilationDFactor(builder, dilationDFactor)
 def Conv3DOptionsAddDilationWFactor(builder, dilationWFactor): builder.PrependInt32Slot(6, dilationWFactor, 1)
+def AddDilationWFactor(builder, dilationWFactor):
+    return Conv3DOptionsAddDilationWFactor(builder, dilationWFactor)
 def Conv3DOptionsAddDilationHFactor(builder, dilationHFactor): builder.PrependInt32Slot(7, dilationHFactor, 1)
+def AddDilationHFactor(builder, dilationHFactor):
+    return Conv3DOptionsAddDilationHFactor(builder, dilationHFactor)
 def Conv3DOptionsEnd(builder): return builder.EndObject()
+def End(builder):
+    return Conv3DOptionsEnd(builder)
\ No newline at end of file
