@@ -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