diff --git a/Package.resolved b/Package.resolved index 5f2e68ff947b10697835521b7d4554ca87972db2..102feccf3171d3d4b61286f0c8a5a305238779c6 100644 --- a/Package.resolved +++ b/Package.resolved @@ -27,6 +27,15 @@ "version" : "2.2.0" } }, + { + "identity" : "nifty", + "kind" : "remoteSourceControl", + "location" : "https://github.com/mingchungx/nifty.git", + "state" : { + "branch" : "master", + "revision" : "ac093ab6a67e4c6c5cfccbe67c65dac06111cf6a" + } + }, { "identity" : "similarity-topology", "kind" : "remoteSourceControl", diff --git a/Package.swift b/Package.swift index 44c782e0a8c4e0b0e8b2642c4e1c2e9f597fc39f..d83d3e80f2698f85c62d832d53e1010ff1c44c6f 100644 --- a/Package.swift +++ b/Package.swift @@ -22,6 +22,7 @@ let package = Package( .package(url: "https://github.com/L1MeN9Yu/Elva", .upToNextMajor(from: "2.1.3")), .package(url: "https://github.com/JadenGeller/similarity-topology", .exact("0.1.14")), .package(url: "https://github.com/Jounce/Surge.git", .upToNextMajor(from: "2.0.0")), + .package(url: "https://github.com/mingchungx/nifty.git", .branch("master")) ], targets: [ .target( @@ -31,6 +32,7 @@ let package = Package( .product(name: "HNSWEphemeral", package: "similarity-topology"), .product(name: "HNSWDurable", package: "similarity-topology", condition: .when(platforms: [.macOS])), .product(name: "HNSWSample", package: "similarity-topology", condition: .when(platforms: [.macOS])), + .product(name: "Nifty", package: "nifty"), .product(name: "ZSTD", package: "Elva"), .byName(name: "Surge", condition: .when(platforms: [.macOS])), ], diff --git a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift index c2fb0d99f4887a4e9412abdc86597726351c9d6f..8173b321bdc818409a61ff7c5c262f1fb901bead 100644 --- a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift +++ b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CartesianDistanceMetric.swift @@ -38,16 +38,19 @@ public struct CartesianDistanceMetric<Vector: Collection & Codable>: SimilarityM } #else -// TODO: Import using Nifty (currently unable to fetch package dependency) -// import Nifty +import Nifty /// This implementation may be less efficient on Linux public struct CartesianDistanceMetric<Vector: Collection & Codable>: SimilarityMetric where Vector.Element: BinaryFloatingPoint { public func similarity(between someItem: Vector, _ otherItem: Vector) -> Vector.Element { - return someItem.enumerated().reduce(0) { result, item in - let diff = item.element - otherItem[item.offset] - return result + diff * diff + var sum: Vector.Element = 0 + + for (a, b) in zip(someItem, otherItem) { + let difference = a - b + sum += difference * difference } + + return sum } } diff --git a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift index 65d0384d58924f3f61658b29a2dd2abd17b4f073..e793d9115d4ddaf82b59c1a75aaac2dc380719e2 100644 --- a/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift +++ b/Sources/SwiftNLP/1. Data Collection/HNSW/Metrics/CosineSimilarityMetric.swift @@ -53,8 +53,7 @@ public struct CosineSimilarityMetric<Vector: Collection & Codable>: SimilarityMe } #else -// TODO: Import using Nifty (currently unable to fetch package dependency) -// import Nifty +import Nifty /// This implementation may be less efficient on Linux public struct CosineSimilarityMetric<Vector: Collection & Codable>: SimilarityMetric where Vector.Element: BinaryFloatingPoint {