code: def find_and_union_paths(self, node_source, nodes_target):
          
          branches = set()
          for node_target in nodes_target:
              path = self.find_path(node_source, node_target)
              node_pairs = list(zip(path[0:len(path) - 1], path[1:len(path)]))
              for n1, n2 in node_pairs:
                  branches.add(self._graph.adj[n1][n2]['branch'])
  
          return list(branches)
docs: Determines shortest paths from `node_source` to all nodes in `node_target` in _graph using find_path().
  
          The branches of all paths are stored in a set - the result is a list of unique branches.
  
          Args
          ----
          node_source: GridDing0
              source node, member of _graph
          node_target: GridDing0
              target node, member of _graph
  
          Returns
          -------
          :any:`list` of :obj:`BranchDing0`
              branches: list of branches (list of nodes in _graph) #TODO:check