Metadata-Version: 2.1
Name: c3linear
Version: 0.1.1
Summary: A naive implementation of C3 linearization algorithm used in Python's MRO
Home-page: https://github.com/pilosus/c3linear
Author: Vitaly R. Samigullin
Author-email: vrs@pilosus.org
License: UNKNOWN
Download-URL: https://github.com/pilosus/c3linear/archive/0.1.1.tar.gz
Description: # C3 Linearization Algorithm
        
        `c3linear` is a naïve implementation of
        [C3 linearization](https://en.wikipedia.org/wiki/C3_linearization)
        algorithm. C3 used in Python 2.3+ for
        [Method Resolution Order](https://www.python.org/download/releases/2.3/mro/).
        See Raymond Hettinger's
        [Python’s super() considered super!](https://rhettinger.wordpress.com/2011/05/26/super-considered-super/)
        for more information.
        
        # Motivation
        
        The project has come to life as a byproduct of debugging an
        overcomplicated hierarchy of mixin classes.  I thought I knew how
        exactly MRO is computed, but it turned out I didn't.
        
        I've tried to keep the code idiomatic and easy to follow at the
        expense of performance. The project is really took a couple of hours
        to complete.  Although I didn't care about time complexity and didn't
        check correctness as thoroughly as I should, I think the project may
        help someone who wants to learn how Python's Method Resolution Order
        works.
        
        # Usage
        
        ## Library
        
        * Get the code and install it with `python setup.py install` (Python
          3.6+ required)
        * Import `from c3linear.mro import mro`
        * Check against built-in MRO:
        ```python
        >>> class A: pass
        >>> class B(A): pass
        >>> mro(B) == B.mro()
        True 
        ``` 
        
        Take a look at `tests` for more examples.
        
        ## Testing
        
        * Install dependencies:
        ```shell
        pip install -e .
        ```
        * (Optional) Install extra packages:
        ```shell
        pip install -e .[extra]
        ```
        * Run tests with:
        ```shell
        python setup.py test
        ```
        * Run `flake8` for PEP8 compliance testing:
        ```shell
        python setup.py flake8
        ```
        * Run `mypy`:
        ```shell
        mypy c3linear/
        ```
        
        # Contributing
        
        If you've found a bug, please open an issue describing the problem first.
        
        
        # Licence
        
        The project is licensed under MIT License. For further information see
        `LINCENSE` file.
        
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: Education
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Education
Classifier: Typing :: Typed
Requires-Python: >=3.6
Description-Content-Type: text/markdown
Provides-Extra: extra
