DrawSet: A set with an efficient random draw

class epydemic.DrawSet(including=None, excluding=None)

A set re-implementation.

This class provides a re-implementation of sets that also provides an efficient (\(O(\log N)\)) method for drawing an element at random.

We implement only those parts of the set API that we need: perhaps ought to add the rest, for future-proofing.

Parameters:
  • including (Optional[Iterator[Union[Any, Tuple[Any, Any]]]]) – (optional) iterator of elements to add

  • excluding (Optional[Iterator[Union[Any, Tuple[Any, Any]]]]) – (optional) elements to exclude from the initialisation

The set interface

DrawSet.add(e)

Add an element to the set. This is a no-op if the element is already in the set.

Parameters:

e (Union[Any, Tuple[Any, Any]]) – the element to add

DrawSet.__contains__(e)

Check whether the given element is a member of the set.

Parameters:

e (Union[Any, Tuple[Any, Any]]) – the element

Return type:

bool

Returns:

True if the element is in the set

DrawSet.empty()

Test if the set is empty.

Return type:

bool

Returns:

True if the set is empty

DrawSet.__len__()

Return the size of the set.

Return type:

int

Returns:

the size of the set

DrawSet.__iter__()

Return an iterator that returns elements in order.

Return type:

Iterator[Union[Any, Tuple[Any, Any]]]

Returns:

an iterator

DrawSet.discard(e)

Discard the given element from the locus. If the element isn’t in the set, this is a no-op: use remove() to detect removal of non-elements.

Parameters:

e (Union[Any, Tuple[Any, Any]]) – the element

DrawSet.remove(e)

Remove the given element from the set, raising an exception if it wasn’t present: use discard() to allow the removal of non-elements.

Parameters:

e (Union[Any, Tuple[Any, Any]]) – the element

Random drawing

The point of this class is to provide a way of drawing a random element efficiently, which isn’t possible using the standard Python set interface.

DrawSet.draw()

Draw an element from the set at random.

Return type:

Union[Any, Tuple[Any, Any]]

Returns:

a random element, or none if the set is empty