Giter Site home page Giter Site logo

droop's Introduction

Droop is a Python-based package for counting STV elections.

The primary motivation for Droop is to provide a framework for implementing STV counters in a manner that facilitates verification and certification. Rule implementations are self-contained and independent of other rules. Rules can, in general, be expressed in terms of their statutory language. Extensive and extensible unit tests provide additional validation support.

Droop's features include:

  • STV rule implementations are self-contained, for clarity and straightforward validation
  • Droop's framework provides housekeeping support tailored for STV implementation, keeping the rule implementations uncluttered.
  • The framework includes interchangeable arithmetic support for integer, decimal fixed-point, guarded decimal fixed-point (quasi-exact) and rational (exact) arithmetic.
  • Droop includes implementations of several STV rules, including reference rules from the Proportional Representation Foundation and an example implementation of Minneapolis MN's STV rule; more are planned.
  • Parametric implementations of Meek, Warren and Weighted Inclusive Gregory (WIGM) methods are available, so that ad hoc rules can be easily assembled and compared from the user interface.
  • New rule implementations can be "dropped in" without any changes to the framework.
  • The framework, rule implementations and user interface are decoupled; not only are new rule implementations easy to add, but so are new user interfaces. The current implementation includes a general-purpose CLI as well as examples of specialized CLI interfaces for specific rules. A web-based UI is planned but not yet implemented.
  • The framework and rule implementations are readily embedded as an STV counting engine in third-party software.
  • All IO treated as UTF-8.

See Droop Architecture in the wiki for an overview of Droop's structure.

Currently (v0.14), the unit tests run correctly on macOS 10.15.4 with Python 3.7.3.

droop's People

Contributors

jklundell avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.