orderly-set


Nameorderly-set JSON
Version 5.2.3 PyPI version JSON
download
home_pagehttps://github.com/seperman/orderly-set
SummaryOrderly set
upload_time2024-09-11 05:31:52
maintainerNone
docs_urlNone
authorSeperman
requires_python>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            # Orderly Set 5.2.3

Orderly Set is a package containing multiple implementations of Ordered Set.


## OrderlySet

This implementation keeps the order in all set operations except set difference operations.
As a result, it can do set difference operations much faster than other implementations. Still 2X slower than of Python's built-in set.


## StableSet

A StableSet is a mutable set that remembers its insertion order.
Featuring: Fast O(1) insertion, deletion, iteration and membership testing.
But slow O(N) Index Lookup.

## StableSetEq

Same as StableSet but the order of items doesn't matter for equality comparisons.

## OrderedSet

An OrderedSet is a mutable data structure that is a hybrid of a list and a set.
It remembers its insertion order so that every entry has an index that can be looked up. 
Featuring: O(1) Index lookup, insertion, iteration and membership testing.
But slow O(N) Deletion.


## SortedSet

SortedSet is basically set but when printed, turned into string, or iterated over, returns the items in alphabetical order.

# Installation

`pip install orderly-set`

# Usage examples

An OrderedSet is created and used like a set:

    >>> from orderly_set import OrderedSet

    >>> letters = OrderedSet('abracadabra')

    >>> letters
    OrderedSet(['a', 'b', 'r', 'c', 'd'])

    >>> 'r' in letters
    True

It is efficient to find the index of an entry in an OrderedSet, or find an
entry by its index. To help with this use case, the `.add()` method returns
the index of the added item, whether it was already in the set or not.

    >>> letters.index('r')
    2

    >>> letters[2]
    'r'

    >>> letters.add('r')
    2

    >>> letters.add('x')
    5

OrderedSets implement the union (`|`), intersection (`&`), and difference (`-`)
operators like sets do.

    >>> letters |= OrderedSet('shazam')

    >>> letters
    OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])

    >>> letters & set('aeiou')
    OrderedSet(['a'])

    >>> letters -= 'abcd'

    >>> letters
    OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])

The `__getitem__()` and `index()` methods have been extended to accept any
iterable except a string, returning a list, to perform NumPy-like "fancy
indexing".

    >>> letters = OrderedSet('abracadabra')

    >>> letters[[0, 2, 3]]
    ['a', 'r', 'c']

    >>> letters.index(['a', 'r', 'c'])
    [0, 2, 3]

OrderedSet implements `__getstate__` and `__setstate__` so it can be pickled,
and implements the abstract base classes `collections.MutableSet` and
`collections.Sequence`.

OrderedSet can be used as a generic collection type, similar to the collections
in the `typing` module like List, Dict, and Set. For example, you can annotate
a variable as having the type `OrderedSet[str]` or `OrderedSet[Tuple[int,
str]]`.


# Authors

Please check the [Authors](AUTHORS.md) file.

# Comparisons

```
-- initialize a set --
Using Python dict time: 4.13
set time: 2.98
ordered_set.OrderedSet time: 15.77
orderly_set.OrderedSet time: 15.25
StableSet time: 4.78
OrderlySet time: 4.38
SortedSet time: 3.09

-- update a set --
Using Python dict: 6.77
set time: 2.46
ordered_set.OrderedSet time: 10.17
orderly_set.OrderedSet time: 10.06
StableSet time: 7.16
OrderlySet time: 6.77
SortedSet time: 2.46

-- update a set and get item --
ordered_set.OrderedSet time: 29.98
orderly_set.OrderedSet time: 29.57
StableSet time: 14.31
OrderlySet time: 14.23
SortedSet time: 9.03

-- set symmetric difference (xor) --
set time: 5.368663903005654
ordered_set.OrderedSet time: 39.25
orderly_set.OrderedSet time: 80.31
StableSet time: 42.81
OrderlySet time: 11.44
SortedSet time: 3.87

-- set difference (-) --
set time: 3.7398674299911363
ordered_set.OrderedSet time: 22.39
orderly_set.OrderedSet time: 38.00
StableSet time: 22.30
OrderlySet time: 8.92
SortedSet time: 3.03
```

Despite what you see in the benchmarks, in DeepDiff OrderlySet performed better than SortedSet.


A StableSet is a mutable set that remembers its insertion order.
Featuring: Fast O(1) insertion, deletion, iteration and membership testing.
But slow O(N) Index Lookup.

An OrderedSet is a mutable data structure that is a hybrid of a list and a set.
It remembers its insertion order so that every entry has an index that can be looked up. 
Featuring: O(1) Index lookup, insertion, iteration and membership testing.
But slow O(N) Deletion.

Both have similar interfaces but differ in respect of their implementation and performance.

The original implementation of OrderedSet was a [recipe posted to ActiveState
Recipes][recipe] by Raymond Hettiger, released under the MIT license.

[recipe]: https://code.activestate.com/recipes/576694-orderedset/

Hettiger's implementation kept its content in a doubly-linked list referenced by a
dict. As a result, looking up an item by its index was an O(N) operation, while
deletion was O(1).

This version of OrderedSet makes different trade-offs for the sake of efficient lookups. 
Its content is a standard Python list instead of a doubly-linked list. This
provides O(1) lookups by index at the expense of O(N) deletion, as well as
slightly faster iteration.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/seperman/orderly-set",
    "name": "orderly-set",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Seperman",
    "author_email": "sep@zepworks.com",
    "download_url": "https://files.pythonhosted.org/packages/5d/9e/8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37/orderly_set-5.2.3.tar.gz",
    "platform": null,
    "description": "# Orderly Set 5.2.3\n\nOrderly Set is a package containing multiple implementations of Ordered Set.\n\n\n## OrderlySet\n\nThis implementation keeps the order in all set operations except set difference operations.\nAs a result, it can do set difference operations much faster than other implementations. Still 2X slower than of Python's built-in set.\n\n\n## StableSet\n\nA StableSet is a mutable set that remembers its insertion order.\nFeaturing: Fast O(1) insertion, deletion, iteration and membership testing.\nBut slow O(N) Index Lookup.\n\n## StableSetEq\n\nSame as StableSet but the order of items doesn't matter for equality comparisons.\n\n## OrderedSet\n\nAn OrderedSet is a mutable data structure that is a hybrid of a list and a set.\nIt remembers its insertion order so that every entry has an index that can be looked up. \nFeaturing: O(1) Index lookup, insertion, iteration and membership testing.\nBut slow O(N) Deletion.\n\n\n## SortedSet\n\nSortedSet is basically set but when printed, turned into string, or iterated over, returns the items in alphabetical order.\n\n# Installation\n\n`pip install orderly-set`\n\n# Usage examples\n\nAn OrderedSet is created and used like a set:\n\n    >>> from orderly_set import OrderedSet\n\n    >>> letters = OrderedSet('abracadabra')\n\n    >>> letters\n    OrderedSet(['a', 'b', 'r', 'c', 'd'])\n\n    >>> 'r' in letters\n    True\n\nIt is efficient to find the index of an entry in an OrderedSet, or find an\nentry by its index. To help with this use case, the `.add()` method returns\nthe index of the added item, whether it was already in the set or not.\n\n    >>> letters.index('r')\n    2\n\n    >>> letters[2]\n    'r'\n\n    >>> letters.add('r')\n    2\n\n    >>> letters.add('x')\n    5\n\nOrderedSets implement the union (`|`), intersection (`&`), and difference (`-`)\noperators like sets do.\n\n    >>> letters |= OrderedSet('shazam')\n\n    >>> letters\n    OrderedSet(['a', 'b', 'r', 'c', 'd', 'x', 's', 'h', 'z', 'm'])\n\n    >>> letters & set('aeiou')\n    OrderedSet(['a'])\n\n    >>> letters -= 'abcd'\n\n    >>> letters\n    OrderedSet(['r', 'x', 's', 'h', 'z', 'm'])\n\nThe `__getitem__()` and `index()` methods have been extended to accept any\niterable except a string, returning a list, to perform NumPy-like \"fancy\nindexing\".\n\n    >>> letters = OrderedSet('abracadabra')\n\n    >>> letters[[0, 2, 3]]\n    ['a', 'r', 'c']\n\n    >>> letters.index(['a', 'r', 'c'])\n    [0, 2, 3]\n\nOrderedSet implements `__getstate__` and `__setstate__` so it can be pickled,\nand implements the abstract base classes `collections.MutableSet` and\n`collections.Sequence`.\n\nOrderedSet can be used as a generic collection type, similar to the collections\nin the `typing` module like List, Dict, and Set. For example, you can annotate\na variable as having the type `OrderedSet[str]` or `OrderedSet[Tuple[int,\nstr]]`.\n\n\n# Authors\n\nPlease check the [Authors](AUTHORS.md) file.\n\n# Comparisons\n\n```\n-- initialize a set --\nUsing Python dict time: 4.13\nset time: 2.98\nordered_set.OrderedSet time: 15.77\norderly_set.OrderedSet time: 15.25\nStableSet time: 4.78\nOrderlySet time: 4.38\nSortedSet time: 3.09\n\n-- update a set --\nUsing Python dict: 6.77\nset time: 2.46\nordered_set.OrderedSet time: 10.17\norderly_set.OrderedSet time: 10.06\nStableSet time: 7.16\nOrderlySet time: 6.77\nSortedSet time: 2.46\n\n-- update a set and get item --\nordered_set.OrderedSet time: 29.98\norderly_set.OrderedSet time: 29.57\nStableSet time: 14.31\nOrderlySet time: 14.23\nSortedSet time: 9.03\n\n-- set symmetric difference (xor) --\nset time: 5.368663903005654\nordered_set.OrderedSet time: 39.25\norderly_set.OrderedSet time: 80.31\nStableSet time: 42.81\nOrderlySet time: 11.44\nSortedSet time: 3.87\n\n-- set difference (-) --\nset time: 3.7398674299911363\nordered_set.OrderedSet time: 22.39\norderly_set.OrderedSet time: 38.00\nStableSet time: 22.30\nOrderlySet time: 8.92\nSortedSet time: 3.03\n```\n\nDespite what you see in the benchmarks, in DeepDiff OrderlySet performed better than SortedSet.\n\n\nA StableSet is a mutable set that remembers its insertion order.\nFeaturing: Fast O(1) insertion, deletion, iteration and membership testing.\nBut slow O(N) Index Lookup.\n\nAn OrderedSet is a mutable data structure that is a hybrid of a list and a set.\nIt remembers its insertion order so that every entry has an index that can be looked up. \nFeaturing: O(1) Index lookup, insertion, iteration and membership testing.\nBut slow O(N) Deletion.\n\nBoth have similar interfaces but differ in respect of their implementation and performance.\n\nThe original implementation of OrderedSet was a [recipe posted to ActiveState\nRecipes][recipe] by Raymond Hettiger, released under the MIT license.\n\n[recipe]: https://code.activestate.com/recipes/576694-orderedset/\n\nHettiger's implementation kept its content in a doubly-linked list referenced by a\ndict. As a result, looking up an item by its index was an O(N) operation, while\ndeletion was O(1).\n\nThis version of OrderedSet makes different trade-offs for the sake of efficient lookups. \nIts content is a standard Python list instead of a doubly-linked list. This\nprovides O(1) lookups by index at the expense of O(N) deletion, as well as\nslightly faster iteration.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Orderly set",
    "version": "5.2.3",
    "project_urls": {
        "Download": "https://github.com/seperman/orderly-set/tarball/master",
        "Homepage": "https://github.com/seperman/orderly-set"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ccbba3a4eab8430f14c7d1476f9db261d32654cb3d1794c0266a46f6574e1190",
                "md5": "983ac15b7a550e53e1b7ab91d178686e",
                "sha256": "d357cedcf67f4ebff0d4cbd5b0997e98eeb65dd24fdf5c990a501ae9e82c7d34"
            },
            "downloads": -1,
            "filename": "orderly_set-5.2.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "983ac15b7a550e53e1b7ab91d178686e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 12024,
            "upload_time": "2024-09-11T05:31:51",
            "upload_time_iso_8601": "2024-09-11T05:31:51.109358Z",
            "url": "https://files.pythonhosted.org/packages/cc/bb/a3a4eab8430f14c7d1476f9db261d32654cb3d1794c0266a46f6574e1190/orderly_set-5.2.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5d9e8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37",
                "md5": "bff12b864c96bebdf185dfb9ae07a833",
                "sha256": "571ed97c5a5fca7ddeb6b2d26c19aca896b0ed91f334d9c109edd2f265fb3017"
            },
            "downloads": -1,
            "filename": "orderly_set-5.2.3.tar.gz",
            "has_sig": false,
            "md5_digest": "bff12b864c96bebdf185dfb9ae07a833",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 19698,
            "upload_time": "2024-09-11T05:31:52",
            "upload_time_iso_8601": "2024-09-11T05:31:52.075652Z",
            "url": "https://files.pythonhosted.org/packages/5d/9e/8fdcb9ab1b6983cc7c185a4ddafc27518118bd80e9ff2f30aba83636af37/orderly_set-5.2.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-11 05:31:52",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "seperman",
    "github_project": "orderly-set",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "tox": true,
    "lcname": "orderly-set"
}
        
Elapsed time: 0.32038s