Convenience functions for multiple range-like objects
An elementary package for Python >= 3.3
https://pypi.python.org/pypi/multirange/
The code works, but it is not stable: functionality might be added or reorganized as long as the major version equals 0 (cf. http://semver.org/spec/v2.0.0.html, item #4). Hint: Stability grows quicker when you provide feedback.
multirange is not yet feature complete; most operations involving multiranges are missing.
This library for Python >= 3.3 provides convenience functions for multiple range-like objects (corresponding to finite sets of consecutive integers).
It has 3 types of operations:
- operations involving few range objects
- operations involving an iterable of range objects (range iterable)
- operations involving so-called multiranges; we define a multirange as an iterable of ranges, which have no mutual overlap, which are not adjacent, and which are ordered increasingly; a special case of multirange is a partition of finite set of consecutive integers
- ::
>>> import multirange as mr >>> mr.normalize(range(5, 0)) >>> mr.overlap(range(0, 10), range(5, 15)) range(5, 10) >>> mr.is_disjunct([range(8, 10), range(0, 2), range(2, 4)]) True >>> mr.covering_all([range(8, 10), range(0, 2), range(2, 4)]) range(0, 10) >>> mr.contains(range(0, 10), range(0, 5)) True >>> mr.is_covered_by([range(8, 10), range(0, 2)], range(0, 20)) True >>> mr.intermediate(range(10, 15), range(0, 5)) range(5, 10) >>> list(mr.gaps([range(4, 6), range(6, 7), range(8, 10), range(0, 3)])) [range(3, 4), range(7, 8)] >>> mr.difference(range(1, 9), range(2, 3)) (range(1, 2), range(3, 9)) >>> list(mr.normalize_multi([None, range(0, 5), range(5, 7), range(8, 20)])) [range(0, 7), range(8, 20)] >>> list(mr.difference_one_multi(range(0, 10), [range(-2, 2), range(4, 5)])) [range(2, 4), range(5, 10)]
Please consult the unit tests for more examples.
https://multirange.readthedocs.org
https://github.com/iburadempa/multirange
If multirange is not what you are searching for, you might be interested in one of these python modules: