def edges_filtered_by (&filter)
      implicit_graph { |g|
        g.adjacent_iterator { |v, b|
          self.each_adjacent(v) { |u|
            b.call(u) if filter.call(v, u)
          }
        }
        g.edge_iterator { |b|
          self.each_edge { |u,v| b.call(u, v) if filter.call(u, v) }
        }
      }
    end
def edges_filtered_by (&filter)
      implicit_graph { |g|
        g.adjacent_iterator { |v, b|
          self.each_adjacent(v) { |u|
            b.call(u) if filter.call(v, u)
          }
        }
        g.edge_iterator { |b|
          self.each_edge { |u,v| b.call(u, v) if filter.call(u, v) }
        }
      }
    end
Return a new ImplicitGraph which has as edges all edges of the receiver
 which satisfy the predicate _filter_ (a block with two parameters).

 ==== Example

       g = complete(7).edges_filtered_by {|u,v| u+v == 7}
       g.to_s     => "(1=6)(2=5)(3=4)"
       g.vertices => [1, 2, 3, 4, 5, 6, 7]