Skip to content
This repository has been archived by the owner on Oct 8, 2021. It is now read-only.

Commit

Permalink
Iterator interface (#909)
Browse files Browse the repository at this point in the history
* ignore coverage file

* merge master (#2)

* removed flow algorithms (#815)

* fixes #820, plus tests (#821)

* change show() for empty graphs (ref JuliaGraphs/MetaGraphs.jl#20 (comment)) (#822)

* Pull request clique_percolation.jl (#826)

clique percolation is a method of uncovering the overlapping community structure of complex networks in nature and society

* add src/community/clique_percolation.jl
* tests in file test/community/clique_percolation.jl
* cites the original clique percolation paper
* for undirected graphs only using traitfn

* in_ / out_ -> in / out (#830)

* (in,out)_neighbors -> (in,out)neighbors

* all_neighbors -> allneighbors

* Pull request clique_percolation.jl (#826)

clique percolation is a method of uncovering the overlapping community structure of complex networks in nature and society

* add src/community/clique_percolation.jl
* tests in file test/community/clique_percolation.jl
* cites the original clique percolation paper
* for undirected graphs only using traitfn

* revert allneighbors

* expected_degree_graph (Chung-Lu model) (#832)

* Expected degree random graph generator implemented, including tests

* algorithm corrected

* Missing seed corrected in expected_degree_graph

* expected_degree_graph! implemented

* Added return in function, comment with references removed, references in docs added (expected_degree_graph)

* Update randgraphs.jl

minor doc update

* Update randgraphs.jl

* Fixing problems with MST Kruskal's on SimpleWeightedGraphs (#835)

* Update kruskal.jl

* Update prim.jl

* Update kruskal.jl

* Update kruskal.jl

* Update prim.jl

* Update kruskal.jl

* Update prim.jl

* Update kruskal.jl

* Update prim.jl

* reverting changes

* Revert "reverting changes"

This reverts commit ac1760b.

* Revert "Update prim.jl"

This reverts commit 677f6fa.

* Revert "Update kruskal.jl"

This reverts commit a0e9c47.

* Revert "Update prim.jl"

This reverts commit 793bac4.

* Revert "Update kruskal.jl"

This reverts commit 6114e16.

* Revert "Update prim.jl"

This reverts commit 551f1e6.

* Revert "Update kruskal.jl"

This reverts commit 941005e.

* Revert "Update kruskal.jl"

This reverts commit a404514.

* Revert "Update prim.jl"

This reverts commit 2d43a60.

* Revert "Update kruskal.jl"

This reverts commit 4577920.

* fix problems with SimpleWeightedGraphs

* fix problems with SimpleWeightedGraphs

* fix problems with SimpleWeightedGraphs

* bipartite_map on 2-order graphs fixed. Added proper tests. Fixed test connected to bipartite_map (#836)

* Correct pre-allocation of memory in Prim's MST (#839)

* Improve Kruskal's MST by optimizing Union-Find (#843)

* add missing backtick (#846)

* Add greedy_color for Graph Coloring (#844)

* Add greedy_color for Graph Coloring

* Improve Kruskal's MST by optimizing Union-Find (#843)

* Update README.md

* Update README.md

* first cut at 0.7 compatibility (#848)

* using LightGraphs does not error

* Switch to LinearAlgebra and SparseArrays std libs

* Fix most of linalg tests

* Add SharedArrays for distance tests to compile

* Add Random and Markdown to stdlibs used

* Fix connectivity tests

* IntSet -> BitSet

* Add DelimitedFiles stdlib for readcsv

* Fix failing test

* first cut

* Use mauro/SimpleTraits.jl/m3/where-fns in tests

* Fix SimpleTraits checkout (#851)

* Move up SimpleTraits checkout (#852)

* Update runtests.jl

* Update REQUIRE

* Update REQUIRE

* femtocleaner with additional depwarn fixes (#856)

fix deprecation warnings based on local femtocleaner run

* use equalto in degeneracy.jl (#858)

* fix depwarns in linalg submodule (#860)

* update linalg/spectral to fix deprecations

* fix depwarns in graphmatrices

* fixes doc deprecation warnings (#861)

* fixes doc deprecation warnings

* adding Base64 to runtests

* Update README.md

* remove add/remove vertex/edge from core, minor bug fix (#862)

* remove add/remove vertex/edge from core, minor bug fix

* fix tests

* export add/rem vertex

* remove long-term deprecation warnings (#863)

* uninitialized -> undef, blkdiag -> blockdiag, and removed import of d… (#865)

* uninitialized -> undef, blkdiag -> blockdiag, and removed import of deprecated functions from LG to LinAlg

* test coverage for digraph eltype

* removes equalto (#867)

* optional sorting algorithm for gdistances (#868)

add the ability to pass RadixSort to gdistances!

* update url and mention directed graphs explicilty (#837)

* update url and mention directed graphs explicilty

* Update graphtypes.md

* Update graphtypes.md

fixed references.

* Speed improvements for function transitiveclosure! (#870)

* Speed improvements for function transitiveclosure!

Instead of checking for all paths i -> k and k -> j for a given vertex k
we only iterate over the in- and outneighbours of k.

* Merged some conditionals into a single statement

* Cache efficient Floyd Warshall (#873)

* Update floyd-warshall.jl

* Cache efficient Floyd Warshall

* fixed an error where smallgraph(:frucht) had 20 vertices instead of 12 (#878)

* Delete .Rhistory

* Added function transitivereduction (#877)

* added function transitivereduction

* Update transitivity.jl

docstring formatting

* Fixed some tests && added testdigraphs for all tests

* Johnson Shortest Path for Sparse Graphs (#884)

* Johnson Shortest Path for Sparse Graphs

Johnson Shortest Path for Sparse Graphs

* Improved memory efficiency if distmx is mutable

* Improved memory efficiency for parallel implementation

* Update index.md

* Added constructors to create graphs from a vector or an iterator of edges (#880)

* Added constructors to create SimpleGraphs and SimpleDiGraphs from a vector or an iterator of edges

* Added constructors to create SimpleGraphs and SimpleDiGraphs from a vector or an iterator of edges

* Slyles1001/892 (#894)

* comments are your friend

* Most of LightGraphs warnings are fixed

* Delete HITS.jl

* Slyles1001/872 (#891)

* DataStructures fixed

* missed heappop!, now it tests clean

* spaces

* Update LightGraphs.jl

* Update runtests.jl

* fixes most depwarns as of 20180529 (#895)

* fixes most depwarns as of 20180529

* graphmatrices problems

* remove tabs

* tabs, again

* Update CONTRIBUTING.md (#897)

* Improve Kruskal and use in-built disjoint set data structure (#896)

* Improve Kruskal and use in-built disjoint set data structure

* Update kruskal.jl

Changes requested by @somil55

* updated syntax for iterator protocol

* fixed iterator, broken inference
  • Loading branch information
matbesancon authored and sbromberger committed Jun 14, 2018
1 parent 05c9caa commit db8ff27
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 11 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -6,3 +6,4 @@ docs/build/
docs/site/
benchmark/.results/*
benchmark/.tune.jld
*.cov
2 changes: 1 addition & 1 deletion src/LightGraphs.jl
Expand Up @@ -18,7 +18,7 @@ import SparseArrays: blockdiag, sparse
import Base: write, ==, <, *, , convert, isless, issubset, union, intersect,
reverse, reverse!, isassigned, getindex, setindex!, show,
print, copy, in, sum, size, eltype, length, ndims, transpose,
ctranspose, join, start, next, done, eltype, get, Pair, Tuple, zero
ctranspose, join, iterate, eltype, get, Pair, Tuple, zero


export
Expand Down
2 changes: 1 addition & 1 deletion src/SimpleGraphs/SimpleGraphs.jl
Expand Up @@ -4,7 +4,7 @@ using SparseArrays
using LinearAlgebra

import Base:
eltype, show, ==, Pair, Tuple, copy, length, start, next, done, issubset, zero, in
eltype, show, ==, Pair, Tuple, copy, length, issubset, zero, in, iterate

import LightGraphs:
_NI, _insert_and_dedup!, AbstractGraph, AbstractEdge, AbstractEdgeIter,
Expand Down
13 changes: 10 additions & 3 deletions src/SimpleGraphs/simpleedgeiter.jl
Expand Up @@ -46,10 +46,17 @@ function edge_next(g::AbstractSimpleGraph,
return e, SimpleEdgeIterState(zero(T), 1)
end

start(eit::SimpleEdgeIter) = edge_start(eit.g)
done(eit::SimpleEdgeIter, state::SimpleEdgeIterState{T}) where T = state.s == zero(T)
function iterate(eit::SimpleEdgeIter{G}) where {G<:AbstractSimpleGraph}
state = edge_start(eit.g)
return iterate(eit, state)
end

function iterate(eit::SimpleEdgeIter{G}, state::SimpleEdgeIterState{T}) where {T,G<:AbstractSimpleGraph{T}}
state.s == zero(T) && return nothing
return edge_next(eit.g, state)
end

length(eit::SimpleEdgeIter) = ne(eit.g)
next(eit::SimpleEdgeIter, state::SimpleEdgeIterState) = edge_next(eit.g, state)

function _isequal(e1::SimpleEdgeIter, e2)
k = 0
Expand Down
15 changes: 9 additions & 6 deletions test/simplegraphs/simpleedgeiter.jl
Expand Up @@ -2,7 +2,9 @@
ga = @inferred(SimpleGraph(10, 20; seed=1))
gb = @inferred(SimpleGraph(10, 20; seed=1))
@test sprint(show, edges(ga)) == "SimpleEdgeIter 20"
@test sprint(show, start(edges(ga))) == "SimpleEdgeIterState [1, 1]"
# note: we don't get the first iterator state,
#since iterate returns the state after taking the first value
@test sprint(show, iterate(edges(ga))[2]) == "SimpleEdgeIterState [1, 2]"

@test length(collect(edges(Graph(0, 0)))) == 0

Expand Down Expand Up @@ -46,10 +48,11 @@
end

eit = edges(ga)
es = @inferred(start(eit))
# @inferred not valid for new interface anymore (return type is a Union)
es = iterate(eit)[2]

@test es.s == 2
@test es.di == 1
@test es.s == 3
@test es.di == 2

@test [e for e in eit] == [Edge(2, 3), Edge(3, 10), Edge(5, 10)]

Expand All @@ -73,10 +76,10 @@
end

eit = @inferred(edges(ga))
es = @inferred(start(eit))
es = iterate(eit)[2]

@test es.s == 3
@test es.di == 1
@test es.di == 2

@test [e for e in eit] == [
SimpleEdge(3, 2), SimpleEdge(3, 10),
Expand Down

0 comments on commit db8ff27

Please sign in to comment.