Skip to main content

A naive implementation of C3 linearization algorithm used in Python's MRO

Project description

C3 Linearization Algorithm

c3linear is a naïve implementation of C3 linearization algorithm. C3 used in Python 2.3+ for Method Resolution Order. See Raymond Hettinger's Python’s 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:
>>> class A: pass
>>> class B(A): pass
>>> mro(B) == B.mro()
True 

Take a look at tests for more examples.

Testing

  • Install dependencies:
pip install -e .
  • (Optional) Install extra packages:
pip install -e .[extra]
  • Run tests with:
python setup.py test
  • Run flake8 for PEP8 compliance testing:
python setup.py flake8
  • Run mypy:
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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

c3linear-0.1.1.tar.gz (4.9 kB view details)

Uploaded Source

Built Distribution

c3linear-0.1.1-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file c3linear-0.1.1.tar.gz.

File metadata

  • Download URL: c3linear-0.1.1.tar.gz
  • Upload date:
  • Size: 4.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.5

File hashes

Hashes for c3linear-0.1.1.tar.gz
Algorithm Hash digest
SHA256 3f2c58d7e47d5b55788092e6eee23b937d56c6af14a404ac11f0cff39cb2c192
MD5 3f80aafc9eea9474a65059aa4b43ed94
BLAKE2b-256 3b60f34b2300987e1bd7f81cbf1bdd1e0830e94ef061a6e5373a6ae7d333fc96

See more details on using hashes here.

File details

Details for the file c3linear-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: c3linear-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.6.5

File hashes

Hashes for c3linear-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8a13317aa4cee953638409fda054979960aed54873fb34cf2b41a341ca5cec3f
MD5 c7d51d7768158fc0947f5a52a36bdc46
BLAKE2b-256 d2df439be04fae57dee88c386e3067678da6dbbea90c90ea3488868e2d84ee1d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page