Ejemplo n.º 1
0
 def test_key(self):
     """Test using a custom `key` function."""
     iterables = [xrange(5, 0, -1), xrange(4, 0, -1)]
     eq_(list(sorted(reduce(list.__add__,
                                     [list(it) for it in iterables]),
                     reverse=True)),
         list(collate(*iterables, key=lambda x: -x)))
Ejemplo n.º 2
0
 def retourne(self, ressources_rendues):
     """
     remet les plages de ressources donnees dans le systeme.
     EN: Returns back resources taken by function reserve, saved in the argument.
     """
     ressources = collate(self.intervalles, ressources_rendues.intervalles)
     #print(ressources)
     intervalles = []
     intervalles.append(next(ressources))
     #print(intervalles)
     for intervalle in ressources:
         if intervalles[-1][1] == intervalle[0]:
             intervalles[-1][1] = intervalle[1]
         else:
             intervalles.append(intervalle)
     self.intervalles = intervalles
Ejemplo n.º 3
0
def duplicates(*iterables, **kwargs):
	"""
	Yield duplicate items from any number of sorted iterables of items

	>>> items_a = [1, 2, 3]
	>>> items_b = [0, 3, 4, 5, 6]
	>>> list(duplicates(items_a, items_b))
	[(3, 3)]

	It won't behave as you expect if the iterables aren't ordered

	>>> items_b.append(1)
	>>> list(duplicates(items_a, items_b))
	[(3, 3)]
	>>> list(duplicates(items_a, sorted(items_b)))
	[(1, 1), (3, 3)]

	This function is most interesting when it's operating on a key
	of more complex objects.

	>>> items_a = [dict(email='*****@*****.**', id=1)]
	>>> items_b = [dict(email='*****@*****.**', id=2), dict(email='other')]
	>>> dupe, = duplicates(items_a, items_b, key=operator.itemgetter('email'))
	>>> dupe[0]['email'] == dupe[1]['email'] == '*****@*****.**'
	True
	>>> dupe[0]['id']
	1
	>>> dupe[1]['id']
	2
	"""
	key = kwargs.pop('key', lambda x: x)
	assert not kwargs
	zipped = more_itertools.collate(*iterables, key=key)
	grouped = itertools.groupby(zipped, key=key)
	groups = (
		tuple(g)
		for k, g in grouped
	)

	def has_dupes(group):
		return len(group) > 1
	return filter(has_dupes, groups)
Ejemplo n.º 4
0
 def test_reverse(self):
     """Test the `reverse` kwarg."""
     iterables = [xrange(4, 0, -1), xrange(7, 0, -1), xrange(3, 6, -1)]
     eq_(sorted(reduce(list.__add__, [list(it) for it in iterables]),
                reverse=True),
         list(collate(*iterables, reverse=True)))
Ejemplo n.º 5
0
 def test_one(self):
     """Work when only 1 iterable is passed."""
     eq_([0, 1], list(collate(xrange(2))))
Ejemplo n.º 6
0
 def test_empty(self):
     """Be nice if passed an empty list of iterables."""
     eq_([], list(collate()))
Ejemplo n.º 7
0
 def test_default(self):
     """Test with the default `key` function."""
     iterables = [xrange(4), xrange(7), xrange(3, 6)]
     eq_(sorted(reduce(list.__add__, [list(it) for it in iterables])),
         list(collate(*iterables)))