using System; namespace ZeroLevel.HNSW { public sealed class NSWOptions { /// /// Mox node connections on Layer /// public readonly int M; /// /// Max search buffer /// public readonly int EF; /// /// Max search buffer for inserting /// public readonly int EFConstruction; /// /// Distance function beetween vectors /// public readonly Func Distance; public readonly bool ExpandBestSelection; public readonly bool KeepPrunedConnections; public readonly NeighbourSelectionHeuristic SelectionHeuristic; public readonly int LayersCount; private NSWOptions(int layersCount, int m, int ef, int ef_construction, Func distance, bool expandBestSelection, bool keepPrunedConnections, NeighbourSelectionHeuristic selectionHeuristic) { LayersCount = layersCount; M = m; EF = ef; EFConstruction = ef_construction; Distance = distance; ExpandBestSelection = expandBestSelection; KeepPrunedConnections = keepPrunedConnections; SelectionHeuristic = selectionHeuristic; } public static NSWOptions Create(int layersCount, int M, int EF, int EF_construction, Func distance, bool expandBestSelection = false, bool keepPrunedConnections = false, NeighbourSelectionHeuristic selectionHeuristic = NeighbourSelectionHeuristic.SelectSimple) => new NSWOptions(layersCount, M, EF, EF_construction, distance, expandBestSelection, keepPrunedConnections, selectionHeuristic); } }