# automatically generated by the FlatBuffers compiler, do not modify

# namespace: tflite

import flatbuffers

class ExpandDimsOptions(object):
    __slots__ = ['_tab']

    @classmethod
    def GetRootAsExpandDimsOptions(cls, buf, offset):
        n = flatbuffers.encode.Get(flatbuffers.packer.uoffset, buf, offset)
        x = ExpandDimsOptions()
        x.Init(buf, n + offset)
        return x

    # ExpandDimsOptions
    def Init(self, buf, pos):
        self._tab = flatbuffers.table.Table(buf, pos)

def ExpandDimsOptionsStart(builder): builder.StartObject(0)
def ExpandDimsOptionsEnd(builder): return builder.EndObject()
