Release Notes · v0.1.2 · 2026-08-25
Correctness patch: Palma, CI, Gini, and score match the docs
Public signatures are unchanged. Some figures computed with 0.1.1 will change — coarse geographies, tied ranks, all-zero service, invalid input — because the implementations now follow the documented definitions. That is a patch, not a minor: pip install "moveq~=0.1.1" is meant to receive it.
- Palma splits areal units that straddle the 40% and 90% population cuts instead of assigning whole polygons to one bin.
- The Concentration Index gives tied ranks a shared group-midpoint fractional rank, so input order among ties no longer changes the result.
- All-zero service: Palma is
1.0 (equality), Gini is 0.0. CI is defined when mean service is negative, and ignores unpopulated units.
compute_score keeps n_areas=None when every term is missing. Non-finite term values are rejected. Design weights must be finite and strictly positive.
- Gini, Palma, and CI reject 2-D input with a clear error instead of a NumPy broadcast failure.
Install: pip install -U moveq. Details:
Palma,
Concentration Index,
Gini,
composite score.
Methodology Deep Dive
Why discrete Palma binning fails at spatial zone boundaries
Palma is the ratio of service held by the top 10% of population to that held by the bottom 40%. Census tracts, LSOAs, and IRIS units almost never land exactly on those cumulative-population cuts. Discrete quantile tools (including a naive pd.qcut) dump the whole straddling polygon into one bucket. Sort the same table differently and the Palma ratio jumps — a MAUP artefact, not a change in the network.
From v0.1.2, compute_palma_ratio splits those boundary units: population and service are partitioned in proportion to how much of the unit sits below versus above the 40% and 90% cuts. That is the documented continuous-boundary Palma, and it is permutation-stable. Read the
core inequality notes.
Release Notes · v0.1.1 · 2026-08-25
PyPI pages now explain the metrics, not only the call signatures
Documentation-only. No algorithm changes. The four package READMEs on PyPI describe what Gini, Palma, the Concentration Index, composite scores, and catalogue same / replace / omit mean, not only how to invoke them.
moveq,
moveq-core,
moveq-catalogue,
moveq-cli.
Release Notes · v0.1.0 · 2026-08-25
Announcing moveq: a pure-NumPy transport-equity suite
First lockstep release of the four packages. Population-weighted Gini, continuous Palma, Wagstaff Concentration Index, weighted composite scoring with missing-term renormalization, optional pandas vulnerability helpers, a same / replace / omit catalogue registry, and a CSV/JSON CLI.
Engineering · site
This site is static HTML, gated in CI, deployed from main
Files live in website/. Vercel deploys main to
moveq.souravamseekar.com
(pull requests get previews). Commits that do not touch website/ skip the site build.
GitHub Actions runs python scripts/check_website.py and pytest tests/test_website*.py
— clean URLs, HTML structure, in-page and cross-page anchors, JS–DOM id bindings, MIME types —
with no Node or npm install. That is website integrity, not a PyPI version bump.