Skip to main content

key_set

CI codecov PyPI version

Requires Python 3.12+

Installation

pip install key-set

Overview

Lightweight, zero-dependency library implementing 4 KeySet types representing set theory concepts:

  • All (𝕌): Universal set - contains everything
  • None (∅): Empty set
  • Some: Finite subset of elements
  • AllExceptSome: Complement of a finite set

Operations like intersect, union, difference are algebraically correct. You can also check inclusion with includes(element) or use element in keyset.

Python port of KeySet in TypeScript and KeySet in Ruby

Limitations

KeySetType enum

Enum that represents the 4 types of KeySets:

  • ALL represents the entirety of possible keys (𝕌)
  • NONE represents an empty set (∅)
  • SOME represents a concrete set (A ⊂ 𝕌)
  • ALL_EXCEPT_SOME represents the complementary of a set, all the elements except the given ones (A' = {x ∈ 𝕌 | x ∉ A}) _(see Complement in Wikipedia)*

Creation

Build your KeySets using the build functions

from key_set import build_all, build_none, build_some_or_none, build_all_except_some_or_all

build_all()  # => returns a new instance of KeySetAll
build_none()  # => returns a new instance of KeySetNone

build_some_or_none([])  # returns a new instance of KeySetNone

# returns a new instance of KeySetSome with keys {'a', 'b', 'c'} (in a unique set)
build_some_or_none({'a', 'c', 'b'})
build_some_or_none(['a', 'c', 'b', 'c'])

build_all_except_some_or_all([])  # returns a new instance of KeySetAll

# returns a new instance of KeySetAllExceptSome with keys {'a', 'b', 'c'} (in a unique set)
build_all_except_some_or_all({'a', 'c', 'b'})
build_all_except_some_or_all(['a', 'c', 'b', 'c'])

KeySet classes

Methods exposed:

key_set_type()

returns the KeySetType enum

elements()

returns the set with the elements. It will be blank for All and None.

represents_xxx() methods

  • represents_all: returns True if the KeySet is ALL
  • represents_none: returns True if the KeySet is NONE
  • represents_some: returns True if the KeySet is SOME
  • represents_all_except_some: returns True if the KeySet is ALL_EXCEPT_SOME

invert()

Returns a new KeySet that represents the inverse Set of this one.

  • ALL <-> NONE
  • SOME <-> ALL_EXCEPT_SOME

intersect(other)

Returns a new KeySet with the intersection (A ∩ B) of both Sets: a set that contains the elements included in both sets.

union(other)

Returns a new KeySet with the union (A ∪ B) of both Sets: a set that contains the elements in any of the sets.

difference(other)

Returns a new KeySet with the difference (A - B) of the Sets: a set that contains the elements of A that are not in B.

includes(element)

Returns True if the set that this KeySet represents contains the given element.

clone()

Returns a new KeySet with the same elements.

Hashability

All KeySet classes are hashable and can be used as dictionary keys or in sets:

from key_set import KeySetSome, KeySetAll

cache = {
    KeySetAll(): "all data",
    KeySetSome({'a', 'b'}): "partial data",
}

unique_keysets = {KeySetSome({'a'}), KeySetSome({'a'})}  # contains 1 element

len() support

KeySetNone, KeySetSome, and KeySetAllExceptSome support len():

len(KeySetNone())  # 0
len(KeySetSome({'a', 'b'}))  # 2
len(KeySetAllExceptSome({'a', 'b'}))  # 2 (number of excluded elements)

KeySetAll represents an infinite set, so by default len() raises TypeError:

len(KeySetAll())  # raises TypeError

Compatibility mode for KeySetAll

If you need len() to work on all KeySet types (e.g., for code that expects all objects to support len()), you can enable compatibility mode:

from key_set import KeySetAll

KeySetAll.enable_compat_len(True)
len(KeySetAll())  # returns sys.maxsize

KeySetAll.enable_compat_len(False)  # restore default behavior
len(KeySetAll())  # raises TypeError again

Metadata

Release files for key-set 2.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for key-set 2.0.0
File Size Uploaded
key_set-2.0.0.tar.gz 68.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for key-set 2.0.0
File Interpreter ABI Platform
key_set-2.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 79.2 kB

Release files / key_set-2.0.0.tar.gz

Download URL key_set-2.0.0.tar.gz
Size 68.6 kB
Tags Source
SHA-256 checksum
How to use checksums
61a4ec07ad43246e7dcf6c2f5a97e81b761c28340b51308f04d1c2f4931b749a
BLAKE2b-256 checksum
How to use checksums
28deecaec05ec81ab17ffa0d45de5d4a33e7205fb809f7633d411d5e90aeec5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 16, 2026.

Transparency log

Release files / key_set-2.0.0-py3-none-any.whl

Download URL key_set-2.0.0-py3-none-any.whl
Size 10.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4894c85b0e19c344d3b23623877391cc040518c7f9d12493127280b2c88eccfb
BLAKE2b-256 checksum
How to use checksums
88b3f33494d5a44a8d623b584825bf9d51026e9ed246d0054992edae4e432024
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jan 16, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.0 This release

2 release files

1.1.1

1 release file

1.1.0

1 release file

1.0.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page