Returns a methods list corresponding to the equations in the given
    module. Each entry is a dictionary with keys 'output', 'args', and
    'func' corresponding to the output, arguments, and function of the
    method. The entries may optionally include 'assumptions' and
    'overridden_by_assumptions' as keys, stating which assumptions are
    required to use the method, and which assumptions mean the method
    should not be used because it is overridden.

def _get_module_methods(module):
    '''
    Returns a methods list corresponding to the equations in the given
    module. Each entry is a dictionary with keys 'output', 'args', and
    'func' corresponding to the output, arguments, and function of the
    method. The entries may optionally include 'assumptions' and
    'overridden_by_assumptions' as keys, stating which assumptions are
    required to use the method, and which assumptions mean the method
    should not be used because it is overridden.
    '''
    # Set up the methods dict we will eventually return
    methods = []
    funcs = []
    for item in inspect.getmembers(equations):
        if (item[0][0] != '_' and '_from_' in item[0]):
            func = item[1]
            output = item[0][:item[0].find('_from_')]
        # avoid returning duplicates
        if func in funcs:
            continue
        else:
            funcs.append(func)
        args = tuple(getfullargspec(func).args)
        try:
            assumptions = tuple(func.assumptions)
        except AttributeError:
            raise NotImplementedError('function {0} in equations module has no'
                                      ' assumption '
                                      'definition'.format(func.__name__))
        try:
            overridden_by_assumptions = func.overridden_by_assumptions
        except AttributeError:
            overridden_by_assumptions = ()
        methods.append({
            'func': func,
            'args': args,
            'output': output,
            'assumptions': assumptions,
            'overridden_by_assumptions': overridden_by_assumptions,
        })
    return methods