public static MutableGraph <R> Clone <T, R>(this BidirectionalGraph <T, Edge <T> > graph, Func <T, R> selector, Func <R, bool> condition) where R : class { var newGraph = BidirectionalGraphExtensions.NewGraph <R>(graph.AllowParallelEdges); var verticesMap = graph.CopyVertices <T, R>(newGraph, selector, condition); graph.CopyEdges <T, R>(newGraph, verticesMap); return(new MutableGraph <R>(newGraph)); }