In [1]:
from functools import lru_cache

from ophis.tonus.interval import *

In [19]:
@lru_cache(maxsize=None, typed=False)
class QualifiedInterval:
    
    def __init__(self, interval, octaves=0):
        self.interval = interval
        self.octaves = octaves
        
    # naive implementations of methods for testing    
    
    def augmented(self, distance=1):
        interval = self.interval.augmented(distance)
        octaves = self.octaves
        if interval < self.interval:
            octaves = octaves + 1
        
        
        return self.__class__(interval, octaves)
    
    def diminished(self, distance=1):
        return self.__class__(self.interval.diminished(distance), self.octaves)
    
    def inverted(self):
        return self.__class__(self.interval.inverted(), self.octaves)
    
    def octv(self, octaves=1):
        return self.__class__(self.interval, (self.octave + octaves))
    
    def __repr__(self):
        return self.__class__.__name__ + "(" + self.interval.name + ", " + str(self.octaves) + ")"

In [20]:
M9 = QualifiedInterval(M2, 1)

In [21]:
M9


Out[21]:
QualifiedInterval(M2, 1)

In [22]:
M9.augmented()


Out[22]:
QualifiedInterval(A2, 1)

In [25]:
x = QualifiedInterval(P8, 0)
x.augmented(1)


Out[25]:
QualifiedInterval(m2, 1)

In [ ]:


In [ ]:


In [ ]:


In [ ]:


In [ ]: