Metadata-Version: 2.1
Name: pyuf
Version: 0.1.2
Summary: Union-Find data structure implementation in Python
Home-page: UNKNOWN
Author: Mariano Anaya
Author-email: marianoanaya@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Provides-Extra: dev
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: black ; extra == 'dev'
Requires-Dist: flake8 ; extra == 'dev'
Requires-Dist: mypy ; extra == 'dev'

PyUF: Python Union-Find
=======================

Implementation of the ``Union-Find`` data structure in Python.

Data is divided into different groups ("partitions"). Each group has a name,
and a set of objects. Over this setup, we want to support two operations:

    * ``find(x)``: Return the name of the group where x belongs to.
    * ``union(g1, g2)``: Given two groups, merge them into one. The new
      meta-group contains all the elements from ``g1`` and ``g2``.

Example usage:

.. code:: python

    >>> space = UnionFindSpace(
        Partition("letters", "abcdef"),
        Partition("numbers", range(5)),
    )

    >>> space.find("a")
    letters

    >>> space.find(1)
    numbers

    >>> partition = space.union("letters", "numbers")
    >>> partition.name
    letters_numbers


    # It's possible to indicate the name of the  group

    >>> partition = space.union("letters", "numbers", "alpha")
    >>> partition.name
    alpha


Development
^^^^^^^^^^^
In order to start working or testing with this repository, you'll need to create and activate a new virtual environment.
Respectively, the commands are the following ones

.. code:: bash

    $ python3 -m venv env
    $ source env/bin/activate

After that you can setup the environment with:

.. code:: bash

    $ make install-dev
    $ make test

Make sure that:

    1. The test pass successfully
    2. The code is properly formatted (this can be checked with ``make lint`` and corrected with ``make format``).


