In [1]:
from functools import lru_cache
import ophis
In [2]:
@lru_cache(maxsize=None, typed=False)
class QualifiedInterval(ophis.oph_utils.IntegerComparisonMixin):
def __init__(self, interval, octaves=0):
self.interval = interval
self.octaves = octaves
def augmented(self, distance=1):
if int(distance) == 0:
return self
try:
octaves = distance.octaves
except(AttributeError):
octaves = 0
interval = self.interval.augmented(distance)
octaves = self.octaves + octaves
if interval <= self.interval:
octaves = octaves + 1
return self.__class__(interval, octaves)
def diminished(self, distance=1):
if int(distance) > int(self):
raise ValueError("Distance to diminish by is larger than interval.")
if int(distance) == 0:
return self
try:
octaves = distance.octaves
except(AttributeError):
octaves = 0
interval = self.interval.diminished(distance)
octaves = self.octaves - octaves
if interval >= self.interval:
octaves = octaves - 1
return self.__class__(interval, octaves)
def octv(self, octaves=1):
return self.__class__(self.interval, (self.octaves + octaves))
def __repr__(self):
return self.__class__.__name__ + "(" + self.interval.name + ", " + str(self.octaves) + ")"
def __int__(self):
return int(self.interval) + self.octaves*int(ophis.P8)
In [ ]:
In [3]:
M9 = QualifiedInterval(ophis.M2, 1)
In [ ]:
In [4]:
M9
Out[4]:
In [ ]:
In [5]:
M9.augmented()
Out[5]:
In [ ]:
In [6]:
x = QualifiedInterval(ophis.Perfect(8), 0)
x.augmented(1)
Out[6]:
In [7]:
QualifiedInterval(ophis.M7, 2).augmented(QualifiedInterval(ophis.m3, 1))
Out[7]:
In [8]:
QualifiedInterval(ophis.M3,5).diminished(ophis.P4)
Out[8]:
In [9]:
QualifiedInterval(ophis.M7, 4) > QualifiedInterval(ophis.M3,5)
Out[9]:
In [10]:
ophis.M3^3
Out[10]:
In [11]:
ophis.DFLAT
Out[11]:
In [12]:
ophis.DSHARP.s9n
In [13]:
ophis.C.base_num
Out[13]:
In [15]:
ophis.C.base_value
Out[15]:
In [16]:
ophis.D.base_value
Out[16]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: