crflynn / voting

Diversity / (dis)proportionality measures, election quotas, and apportionment methods in pure Python.
https://voting.readthedocs.io/en/latest/
MIT License
15 stars 2 forks source link
apportionment diversity-measures elections voting

voting

|travis| |rtd| |codecov| |pypi| |pyversions|

.. |travis| image:: https://img.shields.io/travis/crflynn/voting.svg :target: https://travis-ci.org/crflynn/voting

.. |rtd| image:: https://img.shields.io/readthedocs/voting.svg :target: http://voting.readthedocs.io/en/latest/

.. |codecov| image:: https://codecov.io/gh/crflynn/voting/branch/master/graphs/badge.svg :target: https://codecov.io/gh/crflynn/voting

.. |pypi| image:: https://img.shields.io/pypi/v/voting.svg :target: https://pypi.python.org/pypi/voting

.. |pyversions| image:: https://img.shields.io/pypi/pyversions/voting.svg :target: https://pypi.python.org/pypi/voting

A pure Python module for election quotas, voting measures, and apportionment methods.

Installation

The voting package works in Python 2.7, 3.5, 3.6 and 3.7. It is available on pypi and can be installed using pip.

.. code-block:: shell

pip install voting

Package structure

Examples

Apportioning seats using the Huntington-Hill method.

.. code-block:: python

from voting import apportionment

votes = [2560, 3315, 995, 5012]
seats = 20
assignments = apportionment.huntington_hill(votes, seats)

Calculating the effective number of parties using Golosov's measure.

.. code-block:: python

from voting import diversity

parties = [750, 150, 50, 50]
effective_parties = diversity.golosov(parties)

Measuring the disproportionality of democratic representation using the Sainte-Lague measure.

.. code-block:: python

from voting import proportion

votes = [750, 150, 50, 50]
seats = [80, 16, 2, 2]
disproportionality = proportion.sainte_lague(votes, seats)

Determining the Droop quota

.. code-block:: python

from voting import quota

votes = 1000
seats = 20
election_quota = quota.droop(votes, seats)