Module:JI ratios: Difference between revisions

Ganaram inukshuk (talk | contribs)
Disable complements-only search again...
Ganaram inukshuk (talk | contribs)
Finally implement complements-only search option
Line 33: Line 33:
}
}


--------------------------------------------------------------------------------
----------------------------- HELPER FUNCTIONS -------- ------------------------
--------------------------------------------------------------------------------
-- Preprocess fine-search args
function p.preprocess_fine_search_args(fine_search_args)
function p.preprocess_fine_search_args(fine_search_args)
local fine_search_args = fine_search_args or DEFAULT_FINE_SEARCH_ARGS
local fine_search_args = fine_search_args or DEFAULT_FINE_SEARCH_ARGS
Line 67: Line 72:
return ratio_within_int_limit and ratio_within_tenney_height and ratio_within_equave
return ratio_within_int_limit and ratio_within_tenney_height and ratio_within_equave
end
-- Remove ratios whose complements exceed the int limit
-- Ratios should already of the form defined by module:rational
-- This function modifies the table of ratios directly, as it has no return
-- value.
function p.remove_non_complementing_ratios(ratios, equave, fine_search_args)
if fine_search_args["Complements Only"] then
local filtered_ratios = {}
for i = 1, #ratios do
local complement = rat.mul(rat.inv(ratios[i]), equave)
local a, b
a, b = rat.as_pair(complement)
if math.max(a,b) <= fine_search_args["Int Limit"] then
table.insert(filtered_ratios, ratios[i])
end
end
return filtered_ratios
else
return ratios
end
end
end


Line 102: Line 129:
table.remove(ratios, #ratios)
table.remove(ratios, #ratios)
end
end
-- Filter out ratios whose complements exceed the int limit
ratios = p.remove_non_complementing_ratios(ratios, equave, fine_search_args)
return ratios
return ratios
Line 221: Line 251:
-- Sort ratios
-- Sort ratios
table.sort(ratios, rat.lt)
table.sort(ratios, rat.lt)
-- Filter out ratios whose complements exceed the int limit
ratios = p.remove_non_complementing_ratios(ratios, equave, fine_search_args)
return ratios
return ratios