docs: def add_paths(G, paths, bidirectional=False):
      """
      Add a collection of paths to the graph.
  
      Parameters
      ----------
      G : networkx multidigraph
      paths : dict
          the paths from OSM
      bidirectional : bool
          if True, create bidirectional edges for one-way streets
  
  
      Returns
      -------
      None
      """
  
      # the list of values OSM uses in its 'oneway' tag to denote True
      osm_oneway_values = ['yes', 'true', '1', '-1']
  
      for data in paths.values():
  
          # if this path is tagged as one-way and if it is not a walking network,
          # then we'll add the path in one direction only
          if ('oneway' in data and data['oneway'] in osm_oneway_values) and not bidirectional:
              if data['oneway'] == '-1':
                  # paths with a one-way value of -1 are one-way, but in the
                  # reverse direction of the nodes' order, see osm documentation
                  data['nodes'] = list(reversed(data['nodes']))
              # add this path (in only one direction) to the graph
              add_path(G, data, one_way=True)
  
          elif ('junction' in data and data['junction'] == 'roundabout') and not bidirectional:
              # roundabout are also oneway but not tagged as is
              add_path(G, data, one_way=True)
  
          # else, this path is not tagged as one-way or it is a walking network
          # (you can walk both directions on a one-way street)
          else:
              # add this path (in both directions) to the graph and set its
              # 'oneway' attribute to False. if this is a walking network, this
              # may very well be a one-way street (as cars/bikes go), but in a
              # walking-only network it is a bi-directional edge
              add_path(G, data, one_way=False)
  
      return G