--!native --!optimize 2 -- Compiled with roblox-ts v3.0.0 local function NGramCosineScore(n_gram_counts_tokenized_term, n_gram_counts_tokenized_query) local a_grams = n_gram_counts_tokenized_term local b_grams = n_gram_counts_tokenized_query local dot_product = 0 local a_magnitude = 0 local b_magnitude = 0 -- Calculate dot product and magnitudes -- ▼ ReadonlyMap.forEach ▼ local _callback = function(a_count, gram) local _gram = gram local _condition = b_grams[_gram] if _condition == nil then _condition = 0 end local b_count = _condition dot_product += a_count * b_count a_magnitude += a_count ^ 2 end for _k, _v in a_grams do _callback(_v, _k, a_grams) end -- ▲ ReadonlyMap.forEach ▲ -- ▼ ReadonlyMap.forEach ▼ local _callback_1 = function(b_count) b_magnitude += b_count ^ 2 end for _k, _v in b_grams do _callback_1(_v, _k, b_grams) end -- ▲ ReadonlyMap.forEach ▲ local magnitude = math.sqrt(a_magnitude) * math.sqrt(b_magnitude) return if magnitude == 0 then 0 else dot_product / magnitude end return { NGramCosineScore = NGramCosineScore, }