'Main entry point to produce a list of applicable changes.
Take a graph to base names on and an optional set of apps
to try and restrict to (restriction is not guaranteed)'

def changes(self, graph, trim_to_apps=None, convert_apps=None, migration_name=None):

    changes = self._detect_changes(convert_apps, graph)
    changes = self.arrange_for_graph(changes, graph, migration_name)
    if trim_to_apps:
        changes = self._trim_to_apps(changes, trim_to_apps)
    return changes
