@@ -64,130 +64,6 @@ function rand_graph(rng::AbstractRNG, n::Integer, m::Integer;
6464 return GNNGraph ((s, t, edge_weight); num_nodes= n, kws... )
6565end
6666
67- """
68- rand_heterograph([rng,] n, m; bidirected=false, kws...)
69-
70- Construct an [`GNNHeteroGraph`](@ref) with random edges and with number of nodes and edges
71- specified by `n` and `m` respectively. `n` and `m` can be any iterable of pairs
72- specifing node/edge types and their numbers.
73-
74- Pass a random number generator as a first argument to make the generation reproducible.
75-
76- Setting `bidirected=true` will generate a bidirected graph, i.e. each edge will have a reverse edge.
77- Therefore, for each edge type `(:A, :rel, :B)` a corresponding reverse edge type `(:B, :rel, :A)`
78- will be generated.
79-
80- Additional keyword arguments will be passed to the [`GNNHeteroGraph`](@ref) constructor.
81-
82- # Examples
83-
84- ```jldoctest
85- julia> g = rand_heterograph((:user => 10, :movie => 20),
86- (:user, :rate, :movie) => 30)
87- GNNHeteroGraph:
88- num_nodes: Dict(:movie => 20, :user => 10)
89- num_edges: Dict((:user, :rate, :movie) => 30)
90- ```
91- """
92- function rand_heterograph end
93-
94- # for generic iterators of pairs
95- rand_heterograph (n, m; kws... ) = rand_heterograph (Dict (n), Dict (m); kws... )
96- rand_heterograph (rng:: AbstractRNG , n, m; kws... ) = rand_heterograph (rng, Dict (n), Dict (m); kws... )
97-
98- function rand_heterograph (n:: NDict , m:: EDict ; seed= - 1 , kws... )
99- if seed != - 1
100- Base. depwarn (" Keyword argument `seed` is deprecated, pass an rng as first argument instead." , :rand_heterograph )
101- rng = MersenneTwister (seed)
102- else
103- rng = Random. default_rng ()
104- end
105- return rand_heterograph (rng, n, m; kws... )
106- end
107-
108- function rand_heterograph (rng:: AbstractRNG , n:: NDict , m:: EDict ; bidirected:: Bool = false , kws... )
109- if bidirected
110- return _rand_bidirected_heterograph (rng, n, m; kws... )
111- end
112- graphs = Dict (k => _rand_edges (rng, (n[k[1 ]], n[k[3 ]]), m[k]) for k in keys (m))
113- return GNNHeteroGraph (graphs; num_nodes = n, kws... )
114- end
115-
116- function _rand_bidirected_heterograph (rng:: AbstractRNG , n:: NDict , m:: EDict ; kws... )
117- for k in keys (m)
118- if reverse (k) ∈ keys (m)
119- @assert m[k] == m[reverse (k)] " Number of edges must be the same in reverse edge types for bidirected graphs."
120- else
121- m[reverse (k)] = m[k]
122- end
123- end
124- graphs = Dict {EType, Tuple{Vector{Int}, Vector{Int}, Nothing}} ()
125- for k in keys (m)
126- reverse (k) ∈ keys (graphs) && continue
127- s, t, val = _rand_edges (rng, (n[k[1 ]], n[k[3 ]]), m[k])
128- graphs[k] = s, t, val
129- graphs[reverse (k)] = t, s, val
130- end
131- return GNNHeteroGraph (graphs; num_nodes = n, kws... )
132- end
133-
134-
135- """
136- rand_bipartite_heterograph([rng,]
137- (n1, n2), (m12, m21);
138- bidirected = true,
139- node_t = (:A, :B),
140- edge_t = :to,
141- kws...)
142-
143- Construct an [`GNNHeteroGraph`](@ref) with random edges representing a bipartite graph.
144- The graph will have two types of nodes, and edges will only connect nodes of different types.
145-
146- The first argument is a tuple `(n1, n2)` specifying the number of nodes of each type.
147- The second argument is a tuple `(m12, m21)` specifying the number of edges connecting nodes of type `1` to nodes of type `2`
148- and vice versa.
149-
150- The type of nodes and edges can be specified with the `node_t` and `edge_t` keyword arguments,
151- which default to `(:A, :B)` and `:to` respectively.
152-
153- If `bidirected=true` (default), the reverse edge of each edge will be present. In this case
154- `m12 == m21` is required.
155-
156- A random number generator can be passed as the first argument to make the generation reproducible.
157-
158- Additional keyword arguments will be passed to the [`GNNHeteroGraph`](@ref) constructor.
159-
160- See [`rand_heterograph`](@ref) for a more general version.
161-
162- # Examples
163-
164- ```julia
165- julia> g = rand_bipartite_heterograph((10, 15), 20)
166- GNNHeteroGraph:
167- num_nodes: (:A => 10, :B => 15)
168- num_edges: ((:A, :to, :B) => 20, (:B, :to, :A) => 20)
169-
170- julia> g = rand_bipartite_heterograph((10, 15), (20, 0), node_t=(:user, :item), edge_t=:-, bidirected=false)
171- GNNHeteroGraph:
172- num_nodes: Dict(:item => 15, :user => 10)
173- num_edges: Dict((:item, :-, :user) => 0, (:user, :-, :item) => 20)
174- ```
175- """
176- rand_bipartite_heterograph (n, m; kws... ) = rand_bipartite_heterograph (Random. default_rng (), n, m; kws... )
177-
178- function rand_bipartite_heterograph (rng:: AbstractRNG , (n1, n2):: NTuple{2,Int} , m; bidirected= true ,
179- node_t = (:A , :B ), edge_t:: Symbol = :to , kws... )
180- if m isa Integer
181- m12 = m21 = m
182- else
183- m12, m21 = m
184- end
185-
186- return rand_heterograph (rng, Dict (node_t[1 ] => n1, node_t[2 ] => n2),
187- Dict ((node_t[1 ], edge_t, node_t[2 ]) => m12, (node_t[2 ], edge_t, node_t[1 ]) => m21);
188- bidirected, kws... )
189- end
190-
19167"""
19268 knn_graph(points::AbstractMatrix,
19369 k::Int;
0 commit comments