In [1]:
from functools import lru_cache
from itertools import count
import random
import time
import ophis
intervals = [*ophis.Interval.instances]
r_s = random.randrange(100)
In [2]:
class QI_plain:
total_QIs = 0
def __init__(self, interval, octave):
self.interval = interval
self.octave = octave
self.__class__.total_QIs = self.__class__.total_QIs + 1
# naive implementations of methods for testing
def augmented(self, distance):
return QI_plain(self.interval.augmented(distance), self.octave)
def diminished(self, distance):
return QI_plain(self.interval.diminished(distance), self.octave)
def inverted(self):
return QI_plain(self.interval.inverted(), self.octave)
def octv(self, octaves=0):
return QI_plain(self.interval, (self.octave + octaves))
In [3]:
x = QI_plain(ophis.M7, 2)
y = QI_plain(ophis.M7, 2)
z = QI_plain(ophis.M7, 2)
x is y
Out[3]:
In [4]:
QI_plain.total_QIs
Out[4]:
In [5]:
random.seed(r_s) # that's the spirit
start_plain_test = time.time()
plain_set = set()
for i in range(1000000):
interval = random.choice(intervals)
octaves = random.randrange(10)
plain_set.add(QI_plain(interval, octaves))
for x in [*plain_set]:
plain_set.add(x.augmented(random.randrange(5)))
plain_set.add(x.diminished(random.randrange(5)))
plain_set.add(x.inverted())
plain_set.add(x.octv(random.randrange(5)))
plain_time = time.time() - start_plain_test
print( str(len(plain_set)) + " instances created in " + str(plain_time) + " seconds." )
In [6]:
@lru_cache(maxsize=None, typed=False)
class QI_cache:
total_QIs = 0
def __init__(self, interval, octave):
self.interval = interval
self.octave = octave
self.__class__.total_QIs = self.__class__.total_QIs + 1
# naive implementations of methods for testing
def augmented(self, distance):
return QI_cache(self.interval.augmented(distance), self.octave)
def diminished(self, distance):
return QI_cache(self.interval.diminished(distance), self.octave)
def inverted(self):
return QI_cache(self.interval.inverted(), self.octave)
def octv(self, octaves=0):
return QI_cache(self.interval, (self.octave + octaves))
In [8]:
x = QI_cache(ophis.M7, 2)
y = QI_cache(ophis.M7, 2)
z = QI_cache(ophis.M7, 2)
x is y
Out[8]:
In [11]:
random.seed(r_s) # that's the spirit
start_cache_test = time.time()
cache_set = set()
for i in range(1000000):
interval = random.choice(intervals)
octaves = random.randrange(10)
cache_set.add(QI_cache(interval, octaves))
for x in [*cache_set]:
plain_set.add(x.augmented(random.randrange(5)))
plain_set.add(x.diminished(random.randrange(5)))
plain_set.add(x.inverted())
plain_set.add(x.octv(random.randrange(5)))
cache_time = time.time() - start_cache_test
print( str(len(cache_set)) + " instances created in " + str(cache_time) + " seconds." )
In [19]:
magnitude = plain_time/cache_time
print("OMG, it took " + str(magnitude) + " times as long.")
In [17]:
big_start = time.time()
for i in range(1000000):
x = i
big_time = time.time() - big_start
small_start = time.time()
for i in range(500):
x = i
small_time = time.time() - small_start
magnitude = big_time/small_time
print("OMG, it would take " + str(magnitude) + " times as long to do simple things!")
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [13]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]:
In [ ]: