Screenshot

pyRCV2 is an application for counting various preferential voting elections.

pyRCV2 may be used in a number of different ways:

  • as an online web application, no installation or special software required, at https://yingtongli.me/rcv/
  • as a standalone Python command line application
  • as a library within another Python application

pyRCV2 is a rewrite of pyRCV in order to enable more user-friendly use as a web application, and to refactor code to improve extensibility.

Features

pyRCV2 accepts data in the BLT file format, and can count votes using:

pyRCV2 is highly customisable, including options for:

  • different quotas and quota rules (e.g. exact Droop, Hare) or progressively reducing quota
  • calculations using fixed-point arithmetic, guarded fixed-point (quasi-exact) or exact rational numbers
  • different tie breaking rules (backwards, random, manual) with auditable deterministic random number generation
  • extensible API for other counting methods

BLT file format

pyRCV2 requires data to be input in the BLT file format, described in section 3.1 of the article here. Below is an example BLT file:

4 2
-2
3 1 3 4 0
4 1 3 2 0
2 4 1 3 0
1 2 0
2 2 4 3 1 0
1 3 4 2 0
0
"Adam"
"Basil"
"Charlotte"
"Donald"
"Title"

The first line, 4 2, specifies that there are 4 candidates, with 2 winners to elect.

The second line is optional. In the example, -2, indicates that the 2nd candidate (Basil) has withdrawn. Multiple candidates can be specified on this line (e.g. -2 -3).

The third line (or second, if there are no withdrawn candidates), 3 1 3 4 0, is the first lot of ballot data. It indicates that 3 voters voted for the 1st candidate, then the 3rd candidate, then the 4th candidate (i.e. Adam > Charlotte > Donald). The fourth through eighth lines proceed similarly.

The end of the ballot data is signalled by the line 0. This is followed by the names of the 4 candidates, then the name of the election.

Online usage

After preparing the BLT file as above, head to https://yingtongli.me/rcv/. Select the BLT file, and click Count. pyRCV2 will count the election and display the results in a count sheet.

By clicking Show advanced options, you can customise the options used for the count. A detailed explanation of the various options can be found here.

Once the count is complete, you can click Print result to generate a printable result report.