Skip to main content

rdascore

Compute Dave's Redistricting (DRA) analytics for an ensemble of redistricting plans.

Installation

To clone the repository:

$ git clone https://github.com/rdatools/rdascore
$ cd rdascore

To run the sample code, install the dependencies:

pip install -r requirements.txt

To install the package in another project:

$ pip install rdascore

As noted next, you probably also want to clone the companion rdabase repository.

Usage

There are both code and script examples of how to use this code in the sample directory. That directory also contains some sample results from the main scoring function analyze_plan(). The samples use data from the companion rdabase repo.

Notes

With four exceptions, analyze_plan() computes all the analytics that DRA does:

  • For a variety of reasons, DRA's production TypeScript package dra-analytics does not calculate a few minor things that show up in the UI. The Python port rdapy does not either. This repo uses the latter, so those few things also aren't in the "scorecard" output.
  • To keep the results simple, district-level results are suppressed. The scorecard is a simple flat dictionary of metric key/value pairs.
  • To maximize throughput KIWYSI compactness is not calculated. The simple naive approach to performing compactness calculations is to dissolve precinct shapes into district shapes, but dissolve is very expensive operation. Analyzing a congressional plan for North Carolina take ~60 seconds. A much faster approach is to convert precinct shapes into topologies using TopoJSON like DRA does and then merging precincts into district shapes. That approach takes ~5 seconds, virtually all of the time being calling TopoJSON merge() from Python and marshalling the result back from JavaScript. I could have chosen to implement a Python native version of merge(). Instead, I chose to skip KIWYSI compactness (which requires actual district shapes) and just calculate the two main compactness metrics in DRA: Reock and Polsby-Popper. Together these only depend on district area, perimeter, and diameter, and with some pre-processing once per state (analogous to converting shapes into a topology) these values can be imputed without ever creating the district shapes. The result is that analyzing a congressional plan for North Carolina — calculating all the analytics — takes a small fraction of a second.
  • Finally, we've already created the precinct contiguity graphs as part of finding root map candidates in our rdaroot GitHub repo, and, by definition, the plans in our ensembles are contiguous. Hence, we don't check that.

Testing

$ pytest --disable-warnings

Metadata

Release files for rdascore 4.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rdascore 4.1.0
File Size Uploaded Provenance Actions
rdascore-4.1.0.tar.gz 17.9 kB Without provenance Details for rdascore-4.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rdascore 4.1.0
File Interpreter ABI Platform Actions
rdascore-4.1.0-py3-none-any.whl Python 3 none any Details for rdascore-4.1.0-py3-none-any.whl

Total release size: 32.3 kB

Release files / rdascore-4.1.0.tar.gz

Download URL rdascore-4.1.0.tar.gz
Size 17.9 kB
Tags Source
SHA-256 checksum
How to use checksums
29c321cab82908391af0504a58456e21dedd4eb259bcb627ee2fef9d8e163600
BLAKE2b-256 checksum
How to use checksums
282ed1a28589fd583d97e3f3d491f4dbba068d560a2d0ef6d78c179f2c78f68a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.13.0

Release files / rdascore-4.1.0-py3-none-any.whl

Download URL rdascore-4.1.0-py3-none-any.whl
Size 14.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b893ff35681f747185223b498b701a89c260ff8fb9e0ea1acb3079e424c68dd9
BLAKE2b-256 checksum
How to use checksums
ae801e57398af297c3cd4ae3615c9d0cc8e42823f3cc78e97bc1ada0f898a4a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.13.0

Security for rdascore 4.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

4.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page