in StreamMaker.py [0:0]
def make(self, n, order='', p=1000, g=0, s=1):
assert(order in self.orders)
if order == 'sorted': # sorted order
for item in range(n):
yield item
elif order == 'reversed': # reversed sorted order
for item in range(n-1,-1,-1):
yield item
elif order == 'zoomin':
for item in range(int(n/2)):
yield item
yield n-item
elif order == 'zoomout':
for item in range(1,int(n/2)):
yield n/2 + item
yield n/2 - item
elif order == 'sqrt':
t = int(sqrt(2*n))
item = 0
initialItem = 0
initialSkip = 1
for i in range(t):
item = initialItem
skip = initialSkip
for j in range(t-i):
yield item
item+=skip
skip+=1
initialSkip+=1
initialItem+=initialSkip
elif order == 'adv':
m = ceil(n/p)
for i in range(p):
for j in range(s*(g + p + m*(p-i)), s*(g + p + m*(p-i-1)), -s):
yield j
yield i
if i == p // 2:
for j in range(p, s*(g + p + m), s*(g + p + m) // 10):
yield j
elif order == 'clustered': # sorted clustered order
m = ceil(n/p) # number of clusters of size p
for i in range(m):
# output cluster; g is the gap between clusters
for j in range(i*g, i*g + p):
yield i*g + j / p
for i in range(m):
# put some items (roughly s many) into the gap between clusters
for j in range(i*g + p, (i+1)*g, g // s):
yield j
elif order == 'clustered-zoomin': # order roughly as in zoomin
m = ceil(n/p) # number of clusters of size p
for i in range(m):
# output cluster; g is the gap between clusters
for j in range(i*g, i*g + p, 2):
yield i*g + j / p
for i in range(m):
# put some items (roughly s many) into the gap between clusters
for j in range(i*g + p, (i+1)*g, g // s):
yield j
for i in range(m - 1, 0, -1):
# output cluster; g is the gap between clusters
for j in range(i*g + p, i*g, -2):
yield i*g + (j + 1) / p
else: # order == 'random':
items = list(range(n))
self.rng.shuffle(items)
for item in items:
yield item