Module:JI ratios: Difference between revisions
Disable complements-only search again... |
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 | ||