Given an interable of input quantity names and a methods dictionary,
    returns a list of output quantities that can be calculated.

def get_calculatable_quantities(inputs, methods):
    '''
    Given an interable of input quantity names and a methods dictionary,
    returns a list of output quantities that can be calculated.
    '''
    output_quantities = []
    updated = True
    while updated:
        updated = False
        for output in methods.keys():
            if output in output_quantities or output in inputs:
                # we already know we can calculate this
                continue
            for args, func in methods[output].items():
                if all([arg in inputs or arg in output_quantities
                        for arg in args]):
                    output_quantities.append(output)
                    updated = True
                    break
    return tuple(output_quantities) + tuple(inputs)