Skip to content

Commit 21144e3

Browse files
authored
Merge pull request #264 from PolicyEngine/joss-paper
JOSS paper submission. Adds paper.md, paper.bib, paper-preview.html, architecture diagram, draft-pdf workflow, and CITATION.cff. All five authors carry verified ORCIDs (Vahid Ahmadi, Max Ghenis, Nikhil Woodruff, Pavel Makarchuk, Anthony Volk). Version alignment: pyproject.toml, CITATION.cff, and paper.bib all at 4.10.0.
2 parents 5651dba + 3865044 commit 21144e3

12 files changed

Lines changed: 1527 additions & 5 deletions

.github/workflows/draft-pdf.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
on:
2+
push:
3+
paths:
4+
- paper.md
5+
- paper.bib
6+
- architecture.png
7+
pull_request:
8+
paths:
9+
- paper.md
10+
- paper.bib
11+
- architecture.png
12+
13+
jobs:
14+
paper:
15+
runs-on: ubuntu-latest
16+
name: Draft PDF
17+
steps:
18+
- uses: actions/checkout@v4
19+
- uses: openjournals/openjournals-draft-action@master
20+
with:
21+
journal: joss
22+
- uses: actions/upload-artifact@v4
23+
with:
24+
name: paper
25+
path: paper.pdf

CITATION.cff

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
cff-version: 1.2.0
2+
message: "If you use this software, please cite it as below."
3+
type: software
4+
title: policyengine
5+
version: 4.10.0
6+
date-released: "2026-05-22"
7+
url: "https://github.com/PolicyEngine/policyengine.py"
8+
abstract: "An open-source Python package that provides a common analysis layer for tax-benefit microsimulation across the US and the UK."
9+
license: AGPL-3.0
10+
authors:
11+
- family-names: Ghenis
12+
given-names: Max
13+
orcid: "https://orcid.org/0000-0002-1335-8277"
14+
affiliation: PolicyEngine
15+
- family-names: Ahmadi
16+
given-names: Vahid
17+
orcid: "https://orcid.org/0009-0004-1093-6272"
18+
affiliation: PolicyEngine
19+
- family-names: Woodruff
20+
given-names: Nikhil
21+
orcid: "https://orcid.org/0009-0009-5004-4910"
22+
affiliation: PolicyEngine
23+
- family-names: Makarchuk
24+
given-names: Pavel
25+
orcid: "https://orcid.org/0009-0003-4869-7409"
26+
affiliation: PolicyEngine
27+
- family-names: Volk
28+
given-names: Anthony
29+
affiliation: PolicyEngine
30+
keywords:
31+
- microsimulation
32+
- tax
33+
- benefit
34+
- public policy
35+
- Python
36+
repository-code: "https://github.com/PolicyEngine/policyengine.py"

CODE_OF_CONDUCT.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Contributor covenant code of conduct
2+
3+
## Our pledge
4+
5+
We as members, contributors, and leaders pledge to make participation in our
6+
community a harassment-free experience for everyone, regardless of age, body
7+
size, visible or invisible disability, ethnicity, sex characteristics, gender
8+
identity and expression, level of experience, education, socio-economic status,
9+
nationality, personal appearance, race, religion, or sexual identity
10+
and orientation.
11+
12+
We pledge to act and interact in ways that contribute to an open, welcoming,
13+
diverse, inclusive, and healthy community.
14+
15+
## Our standards
16+
17+
Examples of behavior that contributes to a positive environment for our
18+
community include:
19+
20+
* Demonstrating empathy and kindness toward other people
21+
* Being respectful of differing opinions, viewpoints, and experiences
22+
* Giving and gracefully accepting constructive feedback
23+
* Accepting responsibility and apologizing to those affected by our mistakes,
24+
and learning from the experience
25+
* Focusing on what is best not just for us as individuals, but for the
26+
overall community
27+
28+
Examples of unacceptable behavior include:
29+
30+
* The use of sexualized language or imagery, and sexual attention or
31+
advances of any kind
32+
* Trolling, insulting or derogatory comments, and personal or political attacks
33+
* Public or private harassment
34+
* Publishing others' private information, such as a physical or email
35+
address, without their explicit permission
36+
* Other conduct which could reasonably be considered inappropriate in a
37+
professional setting
38+
39+
## Enforcement responsibilities
40+
41+
Community leaders are responsible for clarifying and enforcing our standards of
42+
acceptable behavior and will take appropriate and fair corrective action in
43+
response to any behavior that they deem inappropriate, threatening, offensive,
44+
or harmful.
45+
46+
## Scope
47+
48+
This Code of Conduct applies within all community spaces, and also applies when
49+
an individual is officially representing the community in public spaces.
50+
51+
## Enforcement
52+
53+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
54+
reported to the community leaders responsible for enforcement at
55+
hello@policyengine.org. All complaints will be reviewed and investigated
56+
promptly and fairly.
57+
58+
## Attribution
59+
60+
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
61+
version 2.0, available at
62+
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
63+
64+
[homepage]: https://www.contributor-covenant.org

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ docs-serve:
2020
quarto preview docs
2121

2222
install:
23-
uv pip install -e .[dev]
23+
uv pip install -e ".[dev]"
2424

2525
format:
2626
ruff format .

architecture.png

38.3 KB
Loading

architecture.svg

Lines changed: 48 additions & 0 deletions
Loading

changelog.d/joss-paper.added.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Added JOSS paper (paper.md and paper.bib) for submission to the Journal of Open Source Software.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fixed AttributeError in `examples/paper_repro_uk.py` (`programme_statistics` -> `program_statistics`).

examples/paper_repro_uk.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
"""Reproduce the UK policy-reform analysis used in the JOSS paper draft.
1+
"""Reproduce a UK policy-reform analysis for the JOSS paper.
22
3-
This script uses the same reform shown in `paper.md`, but adds the missing
4-
dataset setup so it can run end-to-end from a fresh checkout.
3+
This script demonstrates the population-level workflow described in the paper,
4+
using a UK reform (raising the personal allowance). The paper's inline code
5+
example uses a US reform; this script complements it with the UK equivalent.
56
67
Run:
78
uv run --python 3.14 --extra uk python examples/paper_repro_uk.py
@@ -69,7 +70,7 @@ def main():
6970
print(f"Baseline Gini: {analysis.baseline_inequality.gini:.4f}")
7071
print(f"Reform Gini: {analysis.reform_inequality.gini:.4f}")
7172
print(f"Decile 1 mean change: {first_decile.absolute_change:,.2f}")
72-
print(f"Programmes analysed: {len(analysis.programme_statistics.outputs)}")
73+
print(f"Programmes analysed: {len(analysis.program_statistics.outputs)}")
7374

7475

7576
if __name__ == "__main__":

0 commit comments

Comments
 (0)