semvec/pypi-packages huggingface dataset:
rdascore 4.1.0
Redistricting analytics for scoring ensembles of redistricting plans
License: MIT
Requires Python: >=3.10

# rdascore

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

## Installation

To clone the repository:

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

To run the sample code, install the dependencies:

```bash
pip install -r requirements.txt
```

To install the package in another project:

```bash
$ pip install rdascore
```

As noted next, you probably also want to clone the companion [rdabase](https://github.com/alecramsay/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](https://github.com/dra2020/dra-analytics) 
    does not calculate a few minor things that show up in the UI. 
    The Python port [rdapy](https://github.com/dra2020/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 &#8212; calculating *all* the analytics &#8212; 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](https://github.com/rdatools/rdaroot) GitHub repo, and,
    by definition, the plans in our ensembles are contiguous.
    Hence, we don't check that.

## Testing

```bash
$ pytest --disable-warnings
```
colorbar 0.2.0
Colorbar in Python. Fast and lightweight!
License: MIT
Requires Python: <4.0,>=3.9

# colorbar
Add a colorbar to an image in milliseconds (faster than `plt.imshow`+`plt.colorbar`) 💨

`colorbar` achieves its speed by avoiding [`matplotlib`](https://github.com/matplotlib/matplotlib) and instead using [`numpy`](https://github.com/numpy/numpy), [`pillow`](https://github.com/python-pillow/Pillow), [`cmap`](https://github.com/tlambert03/cmap) and [`pycairo`](https://github.com/pygobject/pycairo)!

🛠️ Install via: `pip install colorbar` (+ if pycairo causes trouble try `conda install anaconda::pycairo`)
## Usage 💡
```python
import numpy as np
from colorbar import CBar

shape = (400, 800)
im = np.linspace(0, 1, shape[0] * shape[1]).reshape(*shape)  # dummy image
cbar = CBar(cmap='gray',    # see https://cmap-docs.readthedocs.io/en/latest/catalog/
            vmin=im.min(),  # pixels <= vmin become first color of cmap
            vmax=im.max())  # pixels >= vmax become last color of cmap
im_cbar = cbar.draw(im)  # draw colorbar!
im_cbar.show()
```
![cbar](https://github.com/user-attachments/assets/fdfc61f8-6aeb-4895-9050-f349037675c6)

`draw()` returns a [`PIL.Image`](https://pillow.readthedocs.io/en/stable/reference/Image.html) that is shown via [`show()`](https://pillow.readthedocs.io/en/stable/reference/ImageShow.html) and saved via [`save()`](https://pillow.readthedocs.io/en/stable/reference/Image.html#PIL.Image.Image.save)
```python
im_cbar.save('cbar.png')
```

Use `cbar.save()` instead of `im=cbar.draw()`+`im.save()` to save the image as a vector graphic
```python
...
cbar.save('cbar.pdf', im)  # .pdf, .svg, .ps or .eps
```
To customize the colorbar, `draw()` and `save()` take the arguments:
- `vertical`: If True, colorbar is vertical. Default: `True`
- `pad`: Added pixel rows on the colorbar-side of the image. Default: `0`
- `pad_color`: [Color-string](https://cmap-docs.readthedocs.io/en/latest/colors/) of added pixels. Default: `'k'`(=black) 
- `x`: Position of the colorbar center relative to image in width-direction. Default: `.9`
- `y`: Position of the colorbar center relative to image in length-direction. Default: `.5`
- `width`: Size of the colorbar relative to image. Default: `.05`
- `length`: Size of the colorbar relative to image. Default: `.8`
- `label`: Label above the colorbar. Default: `None`
- `ticks`: List (e.g. `[0, 1]`) or dict (e.g. `{0: 'low', 1: 'high'}`) of ticks. Default: `None`
- `fontsize`: Fontsize of labels and ticks. Default: `20`
- `linecolor`: Color of the lines and the font used to write labels and ticks. Default: `w`(=white) 
- `linewidth`: Width of ticklines and outlines. Default: `2`
- `tick_len`: Length of ticklines. Default: `2`

Finally, if you want `draw()` to return a `numpy` array use `asarray=True`
```python
im_cbar = cbar.draw(im, asarray=True)
```
to e.g. plot it with [`matplotlib`](https://matplotlib.org/stable/tutorials/images.html#sphx-glr-tutorials-images-py) via `plt.imshow(im_cbar)`.