Changeset 14245 for trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre
- Timestamp:
- 08/08/16 23:36:49 (8 years ago)
- Location:
- trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Datatypes.cs
r14244 r14245 49 49 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] 50 50 internal class igraph_matrix_t { 51 i graph_vector_t data = new igraph_vector_t();51 internal igraph_vector_t data = new igraph_vector_t(); 52 52 internal int nrow; 53 53 internal int ncol; -
trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/DllImporter.cs
r14244 r14245 87 87 arpackoptions.nev = 1; 88 88 arpackoptions.ishift = 1; 89 arpackoptions.mxiter = 3000;89 arpackoptions.mxiter = 1000; 90 90 arpackoptions.nb = 1; 91 91 arpackoptions.mode = 1; … … 168 168 return X86 ? igraph_vector_init_x86(vector, length) : igraph_vector_init_x64(vector, length); 169 169 } 170 internal static int igraph_vector_init_copy(igraph_vector_t vector, double[] vec) { 171 return X86 ? igraph_vector_init_copy_x86(vector, vec, vec.Length) : igraph_vector_init_copy_x64(vector, vec, vec.Length); 172 } 170 173 internal static void igraph_vector_destroy(igraph_vector_t vector) { 171 174 if (X86) igraph_vector_destroy_x86(vector); … … 175 178 return X86 ? igraph_vector_copy_x86(to, from) : igraph_vector_copy_x64(to, from); 176 179 } 180 internal static double[] igraph_vector_to_array(igraph_vector_t from) { 181 var len = igraph_vector_size(from); 182 var result = new double[len]; 183 if (X86) igraph_vector_copy_to_x86(from, result); 184 else igraph_vector_copy_to_x64(from, result); 185 return result; 186 } 177 187 178 188 internal static int igraph_vector_size(igraph_vector_t vector) { … … 187 197 if (X86) igraph_vector_set_x86(vector, index, value); 188 198 else igraph_vector_set_x64(vector, index, value); 199 } 200 internal static void igraph_vector_fill(igraph_vector_t vector, double v) { 201 if (X86) igraph_vector_fill_x86(vector, v); 202 else igraph_vector_fill_x64(vector, v); 203 } 204 internal static void igraph_vector_scale(igraph_vector_t vector, double by) { 205 if (X86) igraph_vector_scale_x86(vector, by); 206 else igraph_vector_scale_x64(vector, by); 207 } 208 209 internal static int igraph_vector_reverse(igraph_vector_t vector) { 210 return X86 ? igraph_vector_reverse_x86(vector) : igraph_vector_reverse_x64(vector); 211 } 212 internal static int igraph_vector_shuffle(igraph_vector_t vector) { 213 return X86 ? igraph_vector_shuffle_x86(vector) : igraph_vector_shuffle_x64(vector); 189 214 } 190 215 … … 194 219 [DllImport(X64Dll, EntryPoint = "igraph_vector_init", CallingConvention = CallingConvention.Cdecl)] 195 220 private static extern int igraph_vector_init_x64([In, Out]igraph_vector_t vector, int length); 221 [DllImport(X86Dll, EntryPoint = "igraph_vector_init_copy", CallingConvention = CallingConvention.Cdecl)] 222 private static extern int igraph_vector_init_copy_x86([In, Out]igraph_vector_t vector, double[] vec, int length); 223 [DllImport(X64Dll, EntryPoint = "igraph_vector_init_copy", CallingConvention = CallingConvention.Cdecl)] 224 private static extern int igraph_vector_init_copy_x64([In, Out]igraph_vector_t vector, double[] vec, int length); 196 225 [DllImport(X86Dll, EntryPoint = "igraph_vector_destroy", CallingConvention = CallingConvention.Cdecl)] 197 226 private static extern void igraph_vector_destroy_x86([In, Out]igraph_vector_t vector); … … 214 243 [DllImport(X64Dll, EntryPoint = "igraph_vector_copy", CallingConvention = CallingConvention.Cdecl)] 215 244 private static extern int igraph_vector_copy_x64([In, Out]igraph_vector_t to, igraph_vector_t from); 245 [DllImport(X86Dll, EntryPoint = "igraph_vector_copy_to", CallingConvention = CallingConvention.Cdecl)] 246 private static extern void igraph_vector_copy_to_x86(igraph_vector_t from, [In, Out]double[] to); 247 [DllImport(X64Dll, EntryPoint = "igraph_vector_copy", CallingConvention = CallingConvention.Cdecl)] 248 private static extern void igraph_vector_copy_to_x64(igraph_vector_t from, [In, Out]double[] to); 249 [DllImport(X86Dll, EntryPoint = "igraph_vector_fill", CallingConvention = CallingConvention.Cdecl)] 250 private static extern int igraph_vector_fill_x86([In, Out]igraph_vector_t vector, double v); 251 [DllImport(X64Dll, EntryPoint = "igraph_vector_fill", CallingConvention = CallingConvention.Cdecl)] 252 private static extern int igraph_vector_fill_x64([In, Out]igraph_vector_t vector, double v); 253 [DllImport(X86Dll, EntryPoint = "igraph_vector_reverse", CallingConvention = CallingConvention.Cdecl)] 254 private static extern int igraph_vector_reverse_x86([In, Out]igraph_vector_t vector); 255 [DllImport(X64Dll, EntryPoint = "igraph_vector_reverse", CallingConvention = CallingConvention.Cdecl)] 256 private static extern int igraph_vector_reverse_x64([In, Out]igraph_vector_t vector); 257 [DllImport(X86Dll, EntryPoint = "igraph_vector_shuffle", CallingConvention = CallingConvention.Cdecl)] 258 private static extern int igraph_vector_shuffle_x86([In, Out]igraph_vector_t vector); 259 [DllImport(X64Dll, EntryPoint = "igraph_vector_shuffle", CallingConvention = CallingConvention.Cdecl)] 260 private static extern int igraph_vector_shuffle_x64([In, Out]igraph_vector_t vector); 261 [DllImport(X86Dll, EntryPoint = "igraph_vector_scale", CallingConvention = CallingConvention.Cdecl)] 262 private static extern void igraph_vector_scale_x86([In, Out]igraph_vector_t vector, double by); 263 [DllImport(X64Dll, EntryPoint = "igraph_vector_scale", CallingConvention = CallingConvention.Cdecl)] 264 private static extern void igraph_vector_scale_x64([In, Out]igraph_vector_t vector, double by); 216 265 #endregion 217 266 #endregion … … 236 285 if (X86) igraph_matrix_set_x86(matrix, row, col, value); 237 286 else igraph_matrix_set_x64(matrix, row, col, value); 287 } 288 289 internal static void igraph_matrix_fill(igraph_matrix_t matrix, double v) { 290 if (X86) igraph_matrix_fill_x86(matrix, v); 291 else igraph_matrix_fill_x64(matrix, v); 292 } 293 294 internal static int igraph_matrix_transpose(igraph_matrix_t matrix) { 295 return X86 ? igraph_matrix_transpose_x86(matrix) : igraph_matrix_transpose_x64(matrix); 296 } 297 298 internal static void igraph_matrix_scale(igraph_matrix_t matrix, double by) { 299 if (X86) igraph_matrix_scale_x86(matrix, by); 300 else igraph_matrix_scale_x64(matrix, by); 238 301 } 239 302 … … 259 322 [DllImport(X64Dll, EntryPoint = "igraph_matrix_copy", CallingConvention = CallingConvention.Cdecl)] 260 323 private static extern int igraph_matrix_copy_x64([In, Out]igraph_matrix_t to, igraph_matrix_t from); 324 [DllImport(X86Dll, EntryPoint = "igraph_matrix_fill", CallingConvention = CallingConvention.Cdecl)] 325 private static extern void igraph_matrix_fill_x86([In, Out]igraph_matrix_t matrix, double v); 326 [DllImport(X64Dll, EntryPoint = "igraph_matrix_fill", CallingConvention = CallingConvention.Cdecl)] 327 private static extern void igraph_matrix_fill_x64([In, Out]igraph_matrix_t matrix, double v); 328 [DllImport(X86Dll, EntryPoint = "igraph_matrix_transpose", CallingConvention = CallingConvention.Cdecl)] 329 private static extern int igraph_matrix_transpose_x86([In, Out]igraph_matrix_t matrix); 330 [DllImport(X64Dll, EntryPoint = "igraph_matrix_transpose", CallingConvention = CallingConvention.Cdecl)] 331 private static extern int igraph_matrix_transpose_x64([In, Out]igraph_matrix_t matrix); 332 [DllImport(X86Dll, EntryPoint = "igraph_matrix_scale", CallingConvention = CallingConvention.Cdecl)] 333 private static extern int igraph_matrix_scale_x86([In, Out]igraph_matrix_t matrix, double by); 334 [DllImport(X64Dll, EntryPoint = "igraph_matrix_scale", CallingConvention = CallingConvention.Cdecl)] 335 private static extern int igraph_matrix_scale_x64([In, Out]igraph_matrix_t matrix, double by); 261 336 #endregion 262 337 #endregion … … 271 346 internal static int igraph_layout_davidson_harel(igraph_t graph, igraph_matrix_t res, bool use_seed, int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist) { 272 347 return X86 ? igraph_layout_davidson_harel_x86(graph, res, use_seed, maxiter, fineiter, cool_fact, weight_node_dist, weight_border, weight_edge_lengths, weight_edge_crossings, weight_node_edge_dist) : igraph_layout_davidson_harel_x64(graph, res, use_seed, maxiter, fineiter, cool_fact, weight_node_dist, weight_border, weight_edge_lengths, weight_edge_crossings, weight_node_edge_dist); 348 } 349 internal static int igraph_layout_mds(igraph_t graph, igraph_matrix_t res, igraph_matrix_t dist = null, int dim = 2) { 350 var arpackoptions = GetDefaultArpackOptions(); 351 var options = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(igraph_arpack_options_t))); 352 Marshal.StructureToPtr(arpackoptions, options, false); 353 try { 354 return X86 ? igraph_layout_mds_x86(graph, res, dist, dim, options) : igraph_layout_mds_x64(graph, res, dist, dim, options); 355 } finally { 356 Marshal.DestroyStructure(options, typeof(igraph_arpack_options_t)); 357 Marshal.FreeHGlobal(options); 358 } 273 359 } 274 360 … … 286 372 [DllImport(X64Dll, EntryPoint = "igraph_layout_davidson_harel", CallingConvention = CallingConvention.Cdecl)] 287 373 private static extern int igraph_layout_davidson_harel_x64(igraph_t graph, [In, Out]igraph_matrix_t res, bool use_seed, int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist); 374 [DllImport(X86Dll, EntryPoint = "igraph_layout_mds", CallingConvention = CallingConvention.Cdecl)] 375 private static extern int igraph_layout_mds_x86(igraph_t graph, [In, Out]igraph_matrix_t res, igraph_matrix_t dist, int dim, IntPtr options); 376 [DllImport(X64Dll, EntryPoint = "igraph_layout_mds", CallingConvention = CallingConvention.Cdecl)] 377 private static extern int igraph_layout_mds_x64(igraph_t graph, [In, Out]igraph_matrix_t res, igraph_matrix_t dist, int dim, IntPtr options); 288 378 #endregion 289 379 #endregion -
trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Graph.cs
r14244 r14245 86 86 } 87 87 public Matrix LayoutWithFruchtermanReingold(int niter, double startTemp, Matrix initialCoords = null) { 88 if (initialCoords != null && (initialCoords.Rows != graph.n|| initialCoords.Columns != 2))88 if (initialCoords != null && (initialCoords.Rows != Vertices || initialCoords.Columns != 2)) 89 89 throw new ArgumentException("Initial coordinate matrix does not contain the required number of rows and columns.", "initialCoords"); 90 var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix( graph.n, 2);90 var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix(Vertices, 2); 91 91 DllImporter.igraph_layout_fruchterman_reingold(graph, coords.NativeInstance, initialCoords != null, niter, startTemp, igraph_layout_grid_t.IGRAPH_LAYOUT_AUTOGRID, null, null, null, null, null); 92 92 return coords; … … 97 97 } 98 98 public Matrix LayoutWithKamadaKawai(int maxiter, double epsilon, double kkconst, Matrix initialCoords = null) { 99 if (initialCoords != null && (initialCoords.Rows != graph.n|| initialCoords.Columns != 2))99 if (initialCoords != null && (initialCoords.Rows != Vertices || initialCoords.Columns != 2)) 100 100 throw new ArgumentException("Initial coordinate matrix does not contain the required number of rows and columns.", "initialCoords"); 101 var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix( graph.n, 2);101 var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix(Vertices, 2); 102 102 DllImporter.igraph_layout_kamada_kawai(graph, coords.NativeInstance, initialCoords != null, maxiter, epsilon, kkconst, null, null, null, null, null); 103 103 return coords; … … 109 109 } 110 110 public Matrix LayoutWithDavidsonHarel(int maxiter, int fineiter, double cool_fact, double weight_node_dist, double weight_border, double weight_edge_lengths, double weight_edge_crossings, double weight_node_edge_dist, Matrix initialCoords = null) { 111 if (initialCoords != null && (initialCoords.Rows != graph.n|| initialCoords.Columns != 2))111 if (initialCoords != null && (initialCoords.Rows != Vertices || initialCoords.Columns != 2)) 112 112 throw new ArgumentException("Initial coordinate matrix does not contain the required number of rows and columns.", "initialCoords"); 113 var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix( graph.n, 2);113 var coords = initialCoords != null ? new Matrix(initialCoords) : new Matrix(Vertices, 2); 114 114 DllImporter.igraph_layout_davidson_harel(graph, coords.NativeInstance, initialCoords != null, maxiter, fineiter, cool_fact, weight_node_dist, weight_border, weight_edge_lengths, weight_edge_crossings, weight_node_edge_dist); 115 return coords; 116 } 117 118 /// <summary> 119 /// Use multi-dimensional scaling to layout vertices. 120 /// A distance matrix can be used to specify the distances between the vertices. 121 /// Otherwise the distances will be calculated by shortest-path-length. 122 /// </summary> 123 /// <remarks> 124 /// For disconnected graphs, dimension must be 2. 125 /// </remarks> 126 /// <param name="dist">The distance matrix to layout the vertices.</param> 127 /// <param name="dim">How many dimensions should be used.</param> 128 /// <returns>The coordinates matrix of the aligned vertices.</returns> 129 public Matrix LayoutWithMds(Matrix dist = null, int dim = 2) { 130 var coords = new Matrix(Vertices, dim); 131 DllImporter.igraph_layout_mds(graph, coords.NativeInstance, dist != null ? dist.NativeInstance : null, dim); 115 132 return coords; 116 133 } -
trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Matrix.cs
r14244 r14245 39 39 DllImporter.igraph_matrix_copy(matrix, other.NativeInstance); 40 40 } 41 public Matrix(double[,] mat) { 42 if (mat == null) throw new ArgumentNullException("mat"); 43 matrix = new igraph_matrix_t(); 44 var nrows = mat.GetLength(0); 45 var ncols = mat.GetLength(1); 46 DllImporter.igraph_matrix_init(matrix, nrows, ncols); 47 var colwise = new double[ncols * nrows]; 48 for (var j = 0; j < ncols; j++) 49 for (var i = 0; i < nrows; i++) 50 colwise[j * nrows + i] = mat[i, j]; 51 DllImporter.igraph_vector_init_copy(matrix.data, colwise); 52 } 41 53 ~Matrix() { 42 54 DllImporter.igraph_matrix_destroy(matrix); … … 48 60 matrix = null; 49 61 GC.SuppressFinalize(this); 62 } 63 64 public void Fill(double v) { 65 DllImporter.igraph_matrix_fill(matrix, v); 66 } 67 68 public void Transpose() { 69 DllImporter.igraph_matrix_transpose(matrix); 70 } 71 72 public void Scale(double by) { 73 DllImporter.igraph_matrix_scale(matrix, by); 50 74 } 51 75 -
trunk/sources/HeuristicLab.ExtLibs/HeuristicLab.Igraph/0.8.0-pre/HeuristicLab.Igraph-0.8.0-pre/Wrappers/Vector.cs
r14244 r14245 21 21 22 22 using System; 23 using System.Collections.Generic; 24 using System.Linq; 23 25 24 26 namespace HeuristicLab.IGraph.Wrappers { … … 39 41 DllImporter.igraph_vector_init(vector, length); 40 42 } 41 43 public Vector(IEnumerable<double> data) { 44 if (data == null) throw new ArgumentNullException("data"); 45 var vec = data.ToArray(); 46 vector = new igraph_vector_t(); 47 DllImporter.igraph_vector_init_copy(vector, vec); 48 } 42 49 public Vector(Vector other) { 43 50 if (other == null) throw new ArgumentNullException("other"); … … 45 52 DllImporter.igraph_vector_copy(vector, other.NativeInstance); 46 53 } 47 48 54 ~Vector() { 49 55 DllImporter.igraph_vector_destroy(vector); … … 55 61 vector = null; 56 62 GC.SuppressFinalize(this); 63 } 64 65 public void Fill(double v) { 66 DllImporter.igraph_vector_fill(vector, v); 67 } 68 69 public void Reverse() { 70 DllImporter.igraph_vector_reverse(vector); 71 } 72 73 public void Shuffle() { 74 DllImporter.igraph_vector_shuffle(vector); 75 } 76 77 public void Scale(double by) { 78 DllImporter.igraph_vector_scale(vector, by); 57 79 } 58 80 … … 69 91 70 92 public double[] ToArray() { 71 var result = new double[Length]; 72 for (var i = 0; i < result.Length; i++) { 73 result[i] = DllImporter.igraph_vector_e(vector, i); 74 } 75 return result; 93 return DllImporter.igraph_vector_to_array(vector); 76 94 } 77 95 }
Note: See TracChangeset
for help on using the changeset viewer.