Skip to main content

Ordered subsets over a predefined domain

Project description

Latest PyPI Version License Supported Python Versions Format Downloads

This package provides a memory-efficient pure-python immutable ordered set data type for working with large numbers of subsets from a predetermined pool of objects.

Given a name and a tuple of hashable objects, the bitset()-function returns a custom integer subclass for creating ordered subsets from the object pool. Each instance is a Python integer where the presence/absence of the nth pool item is its nth bit being set/unset (a.k.a. bit strings, powers of two, rank in colexicographical order).

Being just a regular (long) integer with some convenience methods for translating between unique object collections and bit patterns allows to perform certain tasks in a more natural way, e.g. sorting a collection of sets lexicographically, or enumerating possible combinations in an ordered fashion.

Installation

This package runs under Python 2.7 and 3.3+ and has no required dependencies, use pip to install:

$ pip install bitsets

Quickstart

Create a class for sets taken from your pool of objects:

>>> from bitsets import bitset

>>> PYTHONS = ('Chapman', 'Cleese', 'Gilliam', 'Idle', 'Jones', 'Palin')

>>> Pythons = bitset('Pythons', PYTHONS)

Access its maximal and minimal instances. Retrieve instance members in definition order:

>>> Pythons.supremum
Pythons(['Chapman', 'Cleese', 'Gilliam', 'Idle', 'Jones', 'Palin'])

>>> Pythons.infimum
Pythons()

>>> Pythons(['Idle', 'Gilliam', 'Idle', 'Idle']).members()
('Gilliam', 'Idle')

Translate to/from bit string, boolean sequence, and int:

>>> Pythons(['Chapman', 'Gilliam']).bits()
'101000'

>>> Pythons.frombits('101000')
Pythons(['Chapman', 'Gilliam'])

>>> Pythons(['Chapman', 'Gilliam']).bools()
(True, False, True, False, False, False)

>>> Pythons.frombools([True, None, 1, False, 0])
Pythons(['Chapman', 'Gilliam'])

>>> int(Pythons(['Chapman', 'Gilliam']))
5

>>> Pythons.fromint(5)
Pythons(['Chapman', 'Gilliam'])

Set operation and comparison methods (cf. build-in frozenset):

>>> Pythons(['Jones', 'Cleese', 'Idle']).intersection(Pythons(['Idle']))
Pythons(['Idle'])

>>> Pythons(['Idle']).union(Pythons(['Jones', 'Cleese']))
Pythons(['Cleese', 'Idle', 'Jones'])

>>> Pythons.supremum.difference(Pythons(['Chapman', 'Cleese']))
Pythons(['Gilliam', 'Idle', 'Jones', 'Palin'])

>>> Pythons(['Palin', 'Jones']).symmetric_difference(Pythons(['Cleese', 'Jones']))
Pythons(['Cleese', 'Palin'])

>>> Pythons(['Gilliam']).issubset(Pythons(['Cleese', 'Palin']))
False

>>> Pythons(['Cleese', 'Palin']).issuperset(Pythons())
True

Further reading

See also

  • bitarray – efficient boolean array implemented as C extension

  • bitstring – pure-Python bit string based on bytearray

  • BitVector – pure-Python bit array based on unsigned short array

  • Bitsets – Cython interface to fast bitsets in Sage

  • bitfield – Cython positive integer sets

  • intbitset – integer bit sets as C extension

  • gmpy2 – fast arbitrary precision integer arithmetic

License

Bitsets is distributed under the MIT license.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bitsets-0.7.9.zip (198.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bitsets-0.7.9-py2.py3-none-any.whl (15.9 kB view details)

Uploaded Python 2Python 3

File details

Details for the file bitsets-0.7.9.zip.

File metadata

  • Download URL: bitsets-0.7.9.zip
  • Upload date:
  • Size: 198.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for bitsets-0.7.9.zip
Algorithm Hash digest
SHA256 02c055ff3da2e27fea0bad0a592d3b6ad2843b6d423fab75a864f896db13ff68
MD5 9bc6f6f4f4be5e40ec0fb613b4cc6492
BLAKE2b-256 1d38952818ddc793ab8d3bb397e3d5f6837c273bd3b324d1aa6d1375e0cb1b99

See more details on using hashes here.

File details

Details for the file bitsets-0.7.9-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for bitsets-0.7.9-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 2c463bc88b8b1c7035830eb44f1d21a14a0746d28b77acd88726664cc864fc7e
MD5 21d93f1c51b8bd8636fcd3e0af1a120c
BLAKE2b-256 cbef3d7961d3ab9b4eccf656cc4611e014a65c67fece64a60d3e144edc3c9d3d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page