    ## Types ##

    ## Classes ##

    class DataTableError(Exception):

    class TableColumn:
        def __init__(self, spec):
        def name(self):
        def type(self):
        def setType(self, type):
        def __repr__(self):
        def __str__(self):

        ## Utilities ##
        def valueForRawValue(self, rawValue):

    class DataTable:

        ## Init ##
        def __init__(self, filenameOrHeadings=None, delimiter=',', allowComments=1, stripWhite=1, defaultType='string', usePickleCache=None):

        ## File I/O ##
        def readFileNamed(self, filename, delimiter=',', allowComments=1, stripWhite=1):
        def readFile(self, file, delimiter=',', allowComments=1, stripWhite=1):
        def readString(self, string, delimiter=',', allowComments=1, stripWhite=1):
        def readLines(self, lines, delimiter=',', allowComments=1, stripWhite=1):
        def save(self):
        def writeFileNamed(self, filename):
        def writeFile(self, file):
            def ValueWritingMapper(item):
        def commit(self):

        ## Headings ##
        def heading(self, index):
        def hasHeading(self, name):
        def numHeadings(self):
        def headings(self):
        def setHeadings(self, headings):

        ## Row access (list like) ##
        def __len__(self):
        def __getitem__(self, index):
        def append(self, object):

        ## Queries ##
        def recordsEqualTo(self, dict):

        ## As a string ##
        def __repr__(self):

        ## As a dictionary ##
        def dictKeyedBy(self, key):

        ## Misc access ##
        def filename(self):
        def nameToIndexMap(self):

        ## Self utilities ##
        def createNameToIndexMap(self):

    class TableRecord:

        ## Init ##
        def __init__(self, table, values=None):
        def initFromSequence(self, values):
        def initFromDict(self, dict):
        def initFromObject(self, object):

        ## Accessing like a sequence or dictionary ##
        def __len__(self):
        def __getitem__(self, key):
        def __setitem__(self, key, value):
        def __repr__(self):
        def get(self, key, default=None):
        def has_key(self, key):
        def keys(self):
        def values(self):
        def items(self):

        ## Additional access ##
        def asList(self):
        def asDict(self):

        ## valueForFoo() family ##
        def valueForKey(self, key, default=NoDefault):
        def valueForAttr(self, attr, default=NoDefault):
    def main(args=None):