public void SerializeDeserializeTest() { byte[] buffer; string original; // restrict scope of original graph var stream = new MemoryStream(); { var parameters = new SmallWorld <float[], float> .Parameters() { M = 15, LevelLambda = 1 / Math.Log(15), }; var graph = new SmallWorld <float[], float>(CosineDistance.NonOptimized, DefaultRandomGenerator.Instance, parameters); graph.AddItems(vectors); graph.SerializeGraph(stream); original = graph.Print(); } stream.Position = 0; var copy = SmallWorld <float[], float> .DeserializeGraph(vectors, CosineDistance.NonOptimized, DefaultRandomGenerator.Instance, stream); Assert.AreEqual(original, copy.Print()); }
private static void LoadAndSearch(string pathPrefix) { Stopwatch clock; Console.Write("Loading HNSW graph... "); clock = Stopwatch.StartNew(); BinaryFormatter formatter = new BinaryFormatter(); var sampleVectors = (List <float[]>)formatter.Deserialize(new MemoryStream(File.ReadAllBytes($"{pathPrefix}.{VectorsPathSuffix}"))); SmallWorld <float[], float> world; using (var f = File.OpenRead($"{pathPrefix}.{GraphPathSuffix}")) { world = SmallWorld <float[], float> .DeserializeGraph(sampleVectors, CosineDistance.SIMDForUnits, DefaultRandomGenerator.Instance, f); } Console.WriteLine($"Done in {clock.ElapsedMilliseconds} ms."); Console.Write($"Generating {TestSize} test vectos... "); clock = Stopwatch.StartNew(); var vectors = RandomVectors(Dimensionality, TestSize); Console.WriteLine($"Done in {clock.ElapsedMilliseconds} ms."); Console.WriteLine("Running search agains the graph... "); using (var listener = new MetricsEventListener(EventSources.GraphSearchEventSource.Instance)) { clock = Stopwatch.StartNew(); Parallel.ForEach(vectors, (vector) => { world.KNNSearch(vector, 10); }); Console.WriteLine($"Done in {clock.ElapsedMilliseconds} ms."); } }
public void SerializeDeserializeTest() { byte[] buffer; string original; // restrict scope of original graph { var parameters = new SmallWorld <float[], float> .Parameters() { M = 15, LevelLambda = 1 / Math.Log(15), }; var graph = new SmallWorld <float[], float>(CosineDistance.NonOptimized); graph.BuildGraph(this.vectors, new Random(42), parameters); buffer = graph.SerializeGraph(); original = graph.Print(); } var copy = new SmallWorld <float[], float>(CosineDistance.NonOptimized); copy.DeserializeGraph(this.vectors, buffer); Assert.AreEqual(original, copy.Print()); }