Metadata-Version: 2.4
Name: disjoint-set
Version: 0.9.0
Summary: Disjoint Set data structure implementation for Python
Author: Maciej Rapacz
Author-email: Maciej Rapacz <mmrapacz@protonmail.ch>
License-Expression: MIT
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Dist: typing-extensions
Requires-Python: >=3.10, <4
Description-Content-Type: text/markdown

# disjoint-set

![PyPI - Python Version](https://img.shields.io/pypi/pyversions/disjoint_set.svg)
[![PyPI](https://img.shields.io/pypi/v/disjoint_set.svg)](https://pypi.org/project/disjoint-set/)
![Coveralls](https://img.shields.io/coveralls/github/mrapacz/disjoint-set/master.svg)
![PyPI - License](https://img.shields.io/pypi/l/disjoint_set.svg)

[DisjointSet](https://en.wikipedia.org/wiki/Disjoint-set_data_structure) (a.k.a. union–find data structure or merge–find set) implementation for Python.

## Prerequisites

The only requirement is using **Python 3.10+**. You can verify this by running:

```bash
$ python --version
Python 3.10.18
```

## Installation

```
pip install disjoint-set
```

You can verify you're running the latest package version by running:

```python
>>> import disjoint_set
>>> disjoint_set.__version__
'0.9.0'

```

## Usage

### Import & instantiate

```python
>>> from disjoint_set import DisjointSet
>>> DisjointSet()
DisjointSet({})

>>> DisjointSet({1: 1})
DisjointSet({1: 1})

>>> DisjointSet.from_iterable([1,2,3])
DisjointSet({1: 1, 2: 2, 3: 3})

```

### Perform find & union operations

```python
>>> ds = DisjointSet()
>>> ds.find(1)
1

>>> ds.union(1,2)
>>> ds.find(1)
2

>>> ds.find(2)
2

```

### Check if values belong to the same set

```python
>>> ds = DisjointSet({1: 2, 2: 2, 3: 3})
>>> ds.connected(1,2)
True

>>> ds.connected(1,3)
False

```

### Check if values are present within the data structure

```python
>>> ds = DisjointSet()
>>> "a" in ds
False

>>> ds.find("a")
'a'

>>> "a" in ds
True

```

### List elements and sets within the disjoint set

```python
>>> ds = DisjointSet({1: 2, 2: 2, 3: 3})
>>> list(ds)
[(1, 2), (2, 2), (3, 3)]

>>> ds = DisjointSet({1: 2, 2: 2, 3: 3})
>>> list(ds.itersets())
[{1, 2}, {3}]

```

## Contributing

Feel free to open any issues on github.

## Authors

- [Maciej Rapacz](https://github.com/mrapacz/)

## License

This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
