From d13873f307e07f8cbc00b8d37f8379587439dff7 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 11 May 2026 03:58:34 +0000 Subject: [PATCH 1/4] docs(readme): add similar libraries from issue #40 Add VMES, IEVS, pref_voting, and exp_soc_util_perf under Similar projects with short notes on how each differs from elsim. Co-authored-by: endolith --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index edc01f6..35c2696 100644 --- a/README.md +++ b/README.md @@ -176,6 +176,16 @@ File issues on the [GitHub issue tracker](https://github.com/endolith/elsim/issu - ND: - [Voter Satisfaction Efficiency](https://github.com/electology/vse-sim) by Jameson Quinn +### Libraries and research code + +- [VMES](https://github.com/ragconsumer/VMES) (Voting Method Evaluation Suite) - Julia package by Marcus Ogren; see the [project documentation](https://docs.google.com/document/d/1eqsBthp3fF55CyqFB7ve9Mu_sVpj4loYrf0yq-NpJ_o/edit?usp=sharing). Compared to `elsim`, it is a different language and stack (Julia with JuMP/optimization-oriented tooling rather than NumPy/SciPy), and it follows that suite's own evaluation workflow instead of `elsim`'s small composable building blocks for elections, strategies, and metrics. + +- [IEVS](https://rangevoting.org/IEVS/) (Infinitely Extendible Voting Simulator) - Warren D. Smith's classic simulator/diagnostic tool distributed as C source (for example [`IEVS.c`](https://rangevoting.org/IEVS/IEVS.c)); it compares many voting systems and strategies (often framed around Bayesian regret). `elsim` is a Python library focused on fast Monte Carlo batches, optional Numba, and reproducing specific published figures; IEVS is an older, monolithic C codebase with a different interface and extension style. + +- [pref_voting](https://github.com/voting-tools/pref_voting) - Python library for computational social choice: very broad coverage of voting rules, rich `Profile` APIs, generators such as impartial culture, and analysis helpers (see the [JOSS paper](https://doi.org/10.21105/joss.07020) and [documentation](https://pref-voting.readthedocs.io/)). It emphasizes defining or sampling a preference profile and then running or studying many rules on it. `elsim` instead emphasizes repeatedly drawing utilities under spatial or other models, turning them into ballots with explicit strategy steps, and aggregating simulation-level metrics such as VSE or Condorcet efficiency. + +- [exp_soc_util_perf](https://github.com/epacuit/exp_soc_util_perf) - Repository for Holliday and Pacuit's paper *The Social Utility of Voting Revisited*: Jupyter notebooks, data, a Streamlit web app ([online demo](https://exp-soc-util-perf.pacuit.org/)), and scripts tied to that project's experiments. It is primarily reproducibility material for one research line, whereas `elsim` is packaged as a reusable general-purpose library on PyPI. + ### Voting system implementations - [See the list on Electowiki](https://electowiki.org/wiki/Voting_links#Election_calculators) From 17617e24f7ac7284d4bc41630dc10e3bc6f05409 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 11 May 2026 14:04:17 +0000 Subject: [PATCH 2/4] docs(readme): add licenses and model/method counts for related projects Extend the libraries subsection with MIT/custom/no-license notes, spatial/IC coverage, and method counts where they are defined in upstream source (IEVS NumMethods/NumUtilGens, VMES @namevm). Co-authored-by: endolith --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 35c2696..06eca16 100644 --- a/README.md +++ b/README.md @@ -178,13 +178,15 @@ File issues on the [GitHub issue tracker](https://github.com/endolith/elsim/issu ### Libraries and research code -- [VMES](https://github.com/ragconsumer/VMES) (Voting Method Evaluation Suite) - Julia package by Marcus Ogren; see the [project documentation](https://docs.google.com/document/d/1eqsBthp3fF55CyqFB7ve9Mu_sVpj4loYrf0yq-NpJ_o/edit?usp=sharing). Compared to `elsim`, it is a different language and stack (Julia with JuMP/optimization-oriented tooling rather than NumPy/SciPy), and it follows that suite's own evaluation workflow instead of `elsim`'s small composable building blocks for elections, strategies, and metrics. +Side-by-side, **`elsim`** (this repo) is MIT-licensed ([`LICENSE.txt`](LICENSE.txt)); `elsim.elections` includes multivariate-normal spatial utilities, impartial culture, and a few other generators, while `elsim.methods` implements on the order of a **dozen** common single-winner tabulation functions. -- [IEVS](https://rangevoting.org/IEVS/) (Infinitely Extendible Voting Simulator) - Warren D. Smith's classic simulator/diagnostic tool distributed as C source (for example [`IEVS.c`](https://rangevoting.org/IEVS/IEVS.c)); it compares many voting systems and strategies (often framed around Bayesian regret). `elsim` is a Python library focused on fast Monte Carlo batches, optional Numba, and reproducing specific published figures; IEVS is an older, monolithic C codebase with a different interface and extension style. +- [VMES](https://github.com/ragconsumer/VMES) (Voting Method Evaluation Suite) - **License:** [MIT](https://github.com/ragconsumer/VMES/blob/main/LICENSE). **Voter models:** multivariate spatial utilities (`SpatialElectorate`, `DimModel`, etc.), `ImpartialCulture`, and other Julia-defined models (see [`votermodels.jl`](https://github.com/ragconsumer/VMES/blob/main/src/votermodels.jl)); overlapping ingredients with `elsim` but not the same parameterizations or pipeline. **Voting methods:** about **53** `@namevm` registrations in [`mwmethods.jl`](https://github.com/ragconsumer/VMES/blob/main/src/mwmethods.jl) and [`vms.jl`](https://github.com/ragconsumer/VMES/blob/main/src/vms.jl) (single- and multi-winner). **Stack:** Julia with JuMP vs Python/NumPy here; see the [Google doc](https://docs.google.com/document/d/1eqsBthp3fF55CyqFB7ve9Mu_sVpj4loYrf0yq-NpJ_o/edit?usp=sharing). -- [pref_voting](https://github.com/voting-tools/pref_voting) - Python library for computational social choice: very broad coverage of voting rules, rich `Profile` APIs, generators such as impartial culture, and analysis helpers (see the [JOSS paper](https://doi.org/10.21105/joss.07020) and [documentation](https://pref-voting.readthedocs.io/)). It emphasizes defining or sampling a preference profile and then running or studying many rules on it. `elsim` instead emphasizes repeatedly drawing utilities under spatial or other models, turning them into ballots with explicit strategy steps, and aggregating simulation-level metrics such as VSE or Condorcet efficiency. +- [IEVS](https://rangevoting.org/IEVS/) (Infinitely Extendible Voting Simulator) - **License:** notice at the top of [`IEVS.c`](https://rangevoting.org/IEVS/IEVS.c) (non-commercial use with attribution and an expectation that improvements are shared; commercial use requires separate permission). **Voter models:** **11** utility-generator modes (`NumUtilGens` in `IEVS.c`; random utilities, issue / distance layouts, etc.), overlapping `elsim`'s spatial and impartial-culture ideas without matching APIs. **Voting methods:** **68** (`NumMethods` in `IEVS.c`). **Stack:** monolithic **C** program vs this Python library. -- [exp_soc_util_perf](https://github.com/epacuit/exp_soc_util_perf) - Repository for Holliday and Pacuit's paper *The Social Utility of Voting Revisited*: Jupyter notebooks, data, a Streamlit web app ([online demo](https://exp-soc-util-perf.pacuit.org/)), and scripts tied to that project's experiments. It is primarily reproducibility material for one research line, whereas `elsim` is packaged as a reusable general-purpose library on PyPI. +- [pref_voting](https://github.com/voting-tools/pref_voting) - **License:** [MIT](https://github.com/voting-tools/pref_voting/blob/main/LICENSE.txt). **Voter models:** impartial and anonymous impartial culture plus many other ordinal samplers via [`prefsampling`](https://github.com/prefsampling/prefsampling) (see [`generate_profiles.py`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_profiles.py)), and multivariate-normal **spatial** profiles via [`generate_spatial_profile`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_spatial_profiles.py); profile-centric workflow vs `elsim`'s utilities-to-ballots-to-metrics flow. **Voting methods:** very large multi-module catalog (positional, iterative, Condorcet-style, margin-based, proportional, graded, probabilistic, stochastic, etc.; see the [documentation](https://pref-voting.readthedocs.io/) and [JOSS paper](https://doi.org/10.21105/joss.07020)), far beyond `elsim.methods`. + +- [exp_soc_util_perf](https://github.com/epacuit/exp_soc_util_perf) - **License:** no `LICENSE` file in the repository root on GitHub (rights unclear; ask the authors before reusing the code). **Voter models / voting methods:** notebooks and a Streamlit app for *The Social Utility of Voting Revisited* ([demo](https://exp-soc-util-perf.pacuit.org/)), not a maintained catalog comparable to `elsim`; `elsim` remains the PyPI-packaged general library. ### Voting system implementations From 173802c9a246fb1acb18e96de57f8612a4c2f61e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 11 May 2026 14:05:31 +0000 Subject: [PATCH 3/4] docs(readme): fix prefsampling repository URL Co-authored-by: endolith --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 06eca16..905671f 100644 --- a/README.md +++ b/README.md @@ -184,7 +184,7 @@ Side-by-side, **`elsim`** (this repo) is MIT-licensed ([`LICENSE.txt`](LICENSE.t - [IEVS](https://rangevoting.org/IEVS/) (Infinitely Extendible Voting Simulator) - **License:** notice at the top of [`IEVS.c`](https://rangevoting.org/IEVS/IEVS.c) (non-commercial use with attribution and an expectation that improvements are shared; commercial use requires separate permission). **Voter models:** **11** utility-generator modes (`NumUtilGens` in `IEVS.c`; random utilities, issue / distance layouts, etc.), overlapping `elsim`'s spatial and impartial-culture ideas without matching APIs. **Voting methods:** **68** (`NumMethods` in `IEVS.c`). **Stack:** monolithic **C** program vs this Python library. -- [pref_voting](https://github.com/voting-tools/pref_voting) - **License:** [MIT](https://github.com/voting-tools/pref_voting/blob/main/LICENSE.txt). **Voter models:** impartial and anonymous impartial culture plus many other ordinal samplers via [`prefsampling`](https://github.com/prefsampling/prefsampling) (see [`generate_profiles.py`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_profiles.py)), and multivariate-normal **spatial** profiles via [`generate_spatial_profile`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_spatial_profiles.py); profile-centric workflow vs `elsim`'s utilities-to-ballots-to-metrics flow. **Voting methods:** very large multi-module catalog (positional, iterative, Condorcet-style, margin-based, proportional, graded, probabilistic, stochastic, etc.; see the [documentation](https://pref-voting.readthedocs.io/) and [JOSS paper](https://doi.org/10.21105/joss.07020)), far beyond `elsim.methods`. +- [pref_voting](https://github.com/voting-tools/pref_voting) - **License:** [MIT](https://github.com/voting-tools/pref_voting/blob/main/LICENSE.txt). **Voter models:** impartial and anonymous impartial culture plus many other ordinal samplers via [`prefsampling`](https://github.com/COMSOC-Community/prefsampling) (see [`generate_profiles.py`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_profiles.py)), and multivariate-normal **spatial** profiles via [`generate_spatial_profile`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_spatial_profiles.py); profile-centric workflow vs `elsim`'s utilities-to-ballots-to-metrics flow. **Voting methods:** very large multi-module catalog (positional, iterative, Condorcet-style, margin-based, proportional, graded, probabilistic, stochastic, etc.; see the [documentation](https://pref-voting.readthedocs.io/) and [JOSS paper](https://doi.org/10.21105/joss.07020)), far beyond `elsim.methods`. - [exp_soc_util_perf](https://github.com/epacuit/exp_soc_util_perf) - **License:** no `LICENSE` file in the repository root on GitHub (rights unclear; ask the authors before reusing the code). **Voter models / voting methods:** notebooks and a Streamlit app for *The Social Utility of Voting Revisited* ([demo](https://exp-soc-util-perf.pacuit.org/)), not a maintained catalog comparable to `elsim`; `elsim` remains the PyPI-packaged general library. From 0a53336c77487dbabc7723bd882cc7444de588ba Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Mon, 11 May 2026 23:31:46 +0000 Subject: [PATCH 4/4] docs(readme): drop self-summary from Similar projects libraries list Describe only third-party projects in the same style as other Similar projects bullets; remove redundant elsim paragraph. Co-authored-by: endolith --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 905671f..302913b 100644 --- a/README.md +++ b/README.md @@ -178,15 +178,13 @@ File issues on the [GitHub issue tracker](https://github.com/endolith/elsim/issu ### Libraries and research code -Side-by-side, **`elsim`** (this repo) is MIT-licensed ([`LICENSE.txt`](LICENSE.txt)); `elsim.elections` includes multivariate-normal spatial utilities, impartial culture, and a few other generators, while `elsim.methods` implements on the order of a **dozen** common single-winner tabulation functions. +- [VMES](https://github.com/ragconsumer/VMES) by Marcus Ogren (Voting Method Evaluation Suite) - MIT-licensed Julia package (JuMP-oriented workflow); impartial culture, multivariate spatial electorates, and other voter models in [`votermodels.jl`](https://github.com/ragconsumer/VMES/blob/main/src/votermodels.jl). On the order of 50 named voting procedures (`@namevm` in [`mwmethods.jl`](https://github.com/ragconsumer/VMES/blob/main/src/mwmethods.jl) and [`vms.jl`](https://github.com/ragconsumer/VMES/blob/main/src/vms.jl)). [Project documentation (Google Doc)](https://docs.google.com/document/d/1eqsBthp3fF55CyqFB7ve9Mu_sVpj4loYrf0yq-NpJ_o/edit?usp=sharing). -- [VMES](https://github.com/ragconsumer/VMES) (Voting Method Evaluation Suite) - **License:** [MIT](https://github.com/ragconsumer/VMES/blob/main/LICENSE). **Voter models:** multivariate spatial utilities (`SpatialElectorate`, `DimModel`, etc.), `ImpartialCulture`, and other Julia-defined models (see [`votermodels.jl`](https://github.com/ragconsumer/VMES/blob/main/src/votermodels.jl)); overlapping ingredients with `elsim` but not the same parameterizations or pipeline. **Voting methods:** about **53** `@namevm` registrations in [`mwmethods.jl`](https://github.com/ragconsumer/VMES/blob/main/src/mwmethods.jl) and [`vms.jl`](https://github.com/ragconsumer/VMES/blob/main/src/vms.jl) (single- and multi-winner). **Stack:** Julia with JuMP vs Python/NumPy here; see the [Google doc](https://docs.google.com/document/d/1eqsBthp3fF55CyqFB7ve9Mu_sVpj4loYrf0yq-NpJ_o/edit?usp=sharing). +- [IEVS](https://rangevoting.org/IEVS/) by Warren D. Smith (Infinitely Extendible Voting Simulator) - C program and [`IEVS.c`](https://rangevoting.org/IEVS/IEVS.c) source; copyright notice in that file allows non-commercial use with conditions and reserves commercial rights. 68 coded voting methods and 11 utility-generator modes (`NumMethods` and `NumUtilGens` in `IEVS.c`). -- [IEVS](https://rangevoting.org/IEVS/) (Infinitely Extendible Voting Simulator) - **License:** notice at the top of [`IEVS.c`](https://rangevoting.org/IEVS/IEVS.c) (non-commercial use with attribution and an expectation that improvements are shared; commercial use requires separate permission). **Voter models:** **11** utility-generator modes (`NumUtilGens` in `IEVS.c`; random utilities, issue / distance layouts, etc.), overlapping `elsim`'s spatial and impartial-culture ideas without matching APIs. **Voting methods:** **68** (`NumMethods` in `IEVS.c`). **Stack:** monolithic **C** program vs this Python library. +- [pref_voting](https://github.com/voting-tools/pref_voting) by Wesley H. Holliday and Eric Pacuit - MIT-licensed Python library for preferential and related voting rules; impartial and anonymous impartial culture plus many other cultures via [`prefsampling`](https://github.com/COMSOC-Community/prefsampling) in [`generate_profiles.py`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_profiles.py), and multivariate-normal spatial profiles in [`generate_spatial_profiles.py`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_spatial_profiles.py). Very large documented method catalog ([readthedocs](https://pref-voting.readthedocs.io/), [JOSS](https://doi.org/10.21105/joss.07020)); centers on profiles and social-choice analysis more than raw Monte Carlo election throughput. -- [pref_voting](https://github.com/voting-tools/pref_voting) - **License:** [MIT](https://github.com/voting-tools/pref_voting/blob/main/LICENSE.txt). **Voter models:** impartial and anonymous impartial culture plus many other ordinal samplers via [`prefsampling`](https://github.com/COMSOC-Community/prefsampling) (see [`generate_profiles.py`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_profiles.py)), and multivariate-normal **spatial** profiles via [`generate_spatial_profile`](https://github.com/voting-tools/pref_voting/blob/main/pref_voting/generate_spatial_profiles.py); profile-centric workflow vs `elsim`'s utilities-to-ballots-to-metrics flow. **Voting methods:** very large multi-module catalog (positional, iterative, Condorcet-style, margin-based, proportional, graded, probabilistic, stochastic, etc.; see the [documentation](https://pref-voting.readthedocs.io/) and [JOSS paper](https://doi.org/10.21105/joss.07020)), far beyond `elsim.methods`. - -- [exp_soc_util_perf](https://github.com/epacuit/exp_soc_util_perf) - **License:** no `LICENSE` file in the repository root on GitHub (rights unclear; ask the authors before reusing the code). **Voter models / voting methods:** notebooks and a Streamlit app for *The Social Utility of Voting Revisited* ([demo](https://exp-soc-util-perf.pacuit.org/)), not a maintained catalog comparable to `elsim`; `elsim` remains the PyPI-packaged general library. +- [exp_soc_util_perf](https://github.com/epacuit/exp_soc_util_perf) by Holliday and Pacuit - notebooks, data, and a [Streamlit app](https://exp-soc-util-perf.pacuit.org/) for *The Social Utility of Voting Revisited*; no `LICENSE` file at the GitHub repository root (reuse rights unclear). Paper-specific reproduction code, not a packaged simulation library. ### Voting system implementations