<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def graph_from_file(filename, bidirectional=False, simplify=True, retain_all=False, name='unnamed'):
 """ Create a networkx graph from OSM data in an XML file. Parameters filename : string the name of a file containing OSM XML data bidirectional : bool if True, create bidirectional edges for one-way streets simplify : bool if True, simplify the graph topology retain_all : bool if True, return the entire graph even if it is not connected name : string the name of the graph Returns ------- networkx multidigraph """

    # transmogrify file of OSM XML data into JSON
    response_jsons = [overpass_json_from_file(filename)]

    # create graph using this response JSON
    G = create_graph(response_jsons, bidirectional=bidirectional,
                     retain_all=retain_all, name=name)

    # simplify the graph topology as the last step.
    if simplify:
        G = simplify_graph(G)

    log('graph_from_file() returning graph with {:,} nodes and {:,} edges'.format(len(list(G.nodes())), len(list(G.edges()))))
    return G