Skip to content

Instantly share code, notes, and snippets.

@Preinfarction
Last active August 30, 2023 01:24
Show Gist options
  • Save Preinfarction/a775d4862a30527649e62b541fbbb091 to your computer and use it in GitHub Desktop.
Save Preinfarction/a775d4862a30527649e62b541fbbb091 to your computer and use it in GitHub Desktop.
import re
def interval_difference(interval1, interval2):
interval_difference = (e1 - e2 for (e1, e2) in zip(interval1, interval2))
return tuple(interval_difference)
def interval_sum(interval1, interval2):
interval_sum = (e1 + e2 for (e1, e2) in zip(interval1, interval2))
return tuple(interval_sum)
def quality_and_ordinal_to_interval(quality, ordinal):
base_name_to_interval = {
"P1": (0, 0),
"m2": (1, 1),
"M2": (2, 1),
"m3": (3, 2),
"M3": (4, 2),
"P4": (5, 3),
"P5": (7, 4),
"m6": (8, 5),
"M6": (9, 5),
"m7": (10, 6),
"M7": (11, 6),
}
name = quality + str(ordinal)
if name in base_name_to_interval:
return base_name_to_interval[name]
if ordinal < 1:
return interval_difference(quality_and_ordinal_to_interval(quality, ordinal + 7), (12, 7))
if ordinal > 7:
return interval_sum(quality_and_ordinal_to_interval(quality, ordinal - 7), (12, 7))
if re.match(r"[d]+", quality):
degree_of_diminution = len(quality)
if ordinal in [1, 4, 5]:
return interval_sum(quality_and_ordinal_to_interval("P", ordinal), (-degree_of_diminution, 0))
if ordinal in [2, 3, 6, 7]:
return interval_sum(quality_and_ordinal_to_interval("m", ordinal), (-degree_of_diminution, 0))
if re.match(r"[A]+", quality):
degree_of_augmentation = len(quality)
if ordinal in [1, 4, 5]:
return interval_sum(quality_and_ordinal_to_interval("P", ordinal), (degree_of_augmentation, 0))
if ordinal in [2, 3, 6, 7]:
return interval_sum(quality_and_ordinal_to_interval("M", ordinal), (degree_of_augmentation, 0))
def name_to_interval(name):
_, quality, ordinal, _ = re.split(r"^([AdMmP]+)([0-9\-]+)$", name)
ordinal = int(ordinal)
interval = quality_and_ordinal_to_interval(quality, ordinal)
return interval
print(name_to_interval("AAAAAA-8"))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment