Skip to main content

Hipster [Heap*]

Description

Hipster provides a thread-safe implementation of the MinHeap and MaxHeap. Each collection type exposes a simple API to push, pop, peek, remove, clear and copy. The data structure is built on top of the heapq algorithm.

Object Usage

For adding an object to the heap, the object needs to implement it's comparator logic.

class GitRepo:
    def __init__(self, url, stars, forks):
        self.url = url
        self.stars = stars
        self.forks = forks

    # The object needs to implement the following methods
    def __eq__(self, other):
        return self.name == other.name and self.stars == other.stars and self.forks == other.forks

    def __ne__(self, other):
        return self.name != other.name or self.stars != other.stars or self.forks != other.forks

    def __lt__(self, other):
        # The two repos are first compared based on stars then forks and then sorted lexically based on url
        if self.stars == other.stars and self.forks == other.forks return self.url < other.url

    def __le__(self, other):
        if self.stars == other.stars and self.forks == other.forks return self.url <= other.url

    def __gt__(self, other):
        if self.stars == other.stars and self.forks == other.forks return self.url > other.url

    def __ge__(self, other):
        if self.stars == other.stars and self.forks == other.forks return self.url >= other.url


Dependencies

Python 3

Installation

pip install --upgrade hipster

Usage

from hipster.max_heap import MaxHeap
from hipster.min_heap import MinHeap

max_heap = MaxHeap()           # Creates an empty MaxHeap
max_heap.push(item)            # Pushes a new item on the MaxHeap
item = max_heap.peek()         # Returns the largest item from the heap without removing it, throws HeapError when called on an empty Heap
item = max_heap.pop()          # Pops an item off the MaxHeap, throws HeapError when called on an empty Heap
max_heap.remove(item)          # Removes the item from the heap if its present, or throws HeapError if the item is not present
max_heap.clear()               # Removes all items from the heap
new_heap = max_heap.copy()     # Copies all items to the new heap


min_heap = MinHeap()           # Creates an empty MinHeap
min_heap.push(item)            # Pushes a new item on the MinHeap
item = min_heap.peek()         # Returns the samllest item from the heap without removing it, throws HeapError when called on an empty Heap
item = min_heap.pop()          # Pops an item off the MinHeap, throws HeapError when called on an empty Heap
min_heap.remove(item)          # Removes the item from the heap if its present, or throws HeapError if the item is not present
min_heap.clear()               # Removes all items from the heap
new_heap = max_heap.copy()     # Copies all items to the new heap

License

MIT

Changelog

3.0.3

Added copy method

3.0.1

Fixed a bug with thread safety on remove

3.0.0

Added remove, refactored duplicated code to base class, added more tests, updated README

2.0.2

fixed README

2.0.1

Updated object usage example, updated README

2.0.0

Added thread safety, added more tests

Metadata

Release files for hipster 3.0.3

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

Source distribution (sdist)

Source distribution for hipster 3.0.3
File Size Uploaded
hipster-3.0.3.tar.gz 3.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hipster 3.0.3
File Interpreter ABI Platform
hipster-3.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 7.5 kB

Release files / hipster-3.0.3.tar.gz

Download URL hipster-3.0.3.tar.gz
Size 3.0 kB
Tags Source
SHA-256 checksum
How to use checksums
b8980f3dcbe15d75d125a89ac2fbd07be09b9923533413b4c4e4ff83efe76b6a
BLAKE2b-256 checksum
How to use checksums
875322169c8d707641d9f74ef5163c8d47e602914cf4cf076b6d65623e31389d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.5rc1

Release files / hipster-3.0.3-py3-none-any.whl

Download URL hipster-3.0.3-py3-none-any.whl
Size 4.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f9496a58aca38acd41de430cead6a5f871e17cc4284dd0bdba526a79126b2d14
BLAKE2b-256 checksum
How to use checksums
df1f1f6fe0f6cb4235e2d353b26b0cc66e0740e42a96fd1f3db114e87653b2dc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.1.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.39.0 CPython/3.7.5rc1

Release history Release notifications | RSS feed

3.0.5

2 release files

3.0.4

2 release files

This release

3.0.3 This release

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.0.6

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.5

2 release files

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