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
"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.