# Sources & method — Vol 1, Issue 3

One section per file in this folder: what the indicator is, which
release it came from, what it does not cover, and anything the figures
should carry as a caveat.

Data freeze: three weeks before publication. After the freeze, revisions
to the underlying series go to the corrections log, not into this file.

## minorities_census_national.csv

**Indicator:** Population recorded in each census religion category in 2017 and
2023, for the four provinces and Islamabad together, with six-year growth and
the share of the population with published religion detail.

- Pakistan Bureau of Statistics, Population Census 2017 and 2023, Table 9
  (population by religion). 2017: https://www.pbs.gov.pk/censusarchive/ ;
  2023: https://www.pbs.gov.pk/result-excel/
- Share denominators are the Table 9 populations: 207,684,626 in 2017 and
  240,458,089 in 2023. The 2023 Table 1 total is 241,499,431; no religion is
  assigned to the difference.
- `hindu_combined` is Hindu (Jati) plus Scheduled Castes. `minority` is every
  category other than Muslim and includes the component groups; do not add
  them together. Census categories are reproduced as published, including the
  separate Ahmadi category.

**Does not cover:** Azad Jammu and Kashmir and Gilgit-Baltistan.

**Caveat carried by the figures:** the census records a category at two dates.
A change in a count does not separate births, deaths and migration from
changes in enumeration, disclosure or classification. In 76 of the 124
district units the recorded Christian population more than doubled.

## minorities_accused_by_religion.csv

**Indicator:** People recorded as accused of blasphemy each year from 2020 to
2025, by the religion recorded for them.

- Centre for Social Justice (CSJ), annual counts of people accused of blasphemy
  by religion, 2020 to 2025, supplied to Adaad and used with CSJ’s permission.
  Adaad’s changes: transcription and calculated shares.
- `source_cell` keeps the printed cell. A dash is carried as zero in `accused`
  for arithmetic and is not confirmation that no accusation occurred.

**Does not cover:** FIRs, convictions or separate incidents. The record counts
accused people, formal and informal, and is not exhaustive. One case can hold
many people: CSJ attributes 31 of the 32 Hindu accused in 2024 to one case in
Islamkot. National totals include Azad Jammu and Kashmir and Gilgit-Baltistan.

## minorities_districts.csv

**Indicator:** For each of 124 comparable district units: census counts and
shares by community in 2017 and 2023, CSJ's recorded accused in each listed
year, and recorded accused per million residents a year in 2023 to 2025.

- Census: as above, district tables, harmonised to common 2017 and 2023
  boundaries (36 Punjab, 24 Sindh, 32 Khyber Pakhtunkhwa, 31 Balochistan,
  Islamabad). Karachi is one unit.
- Accusations: CSJ annual district lists for 2021, 2023, 2024 and 2025, supplied
  to Adaad. No complete district list
  is available for 2020 or 2022.
- `source_accused_<year>` is blank where the district is not in that year's
  list. `accused_2023_2025` treats a blank as zero recorded.
  `annual_rate_2023_2025` divides the three-year total by three and by the
  2023 Table 1 population, per million.

**Merged districts.** The seven ex-FATA merged districts are labelled Khyber
Pakhtunkhwa in `province` and carry `merged_district = 1`.

**Caveat carried by the figures:** district counts include accused people of
every religion; the district lists do not give religion. Matched district
totals are 83, 290, 333 and 351 against national totals of 84, 329, 344 and
362. Later CSJ top-ten tables disagree with some annual district values
(Lahore in 2021, Rawalpindi in 2025); the annual lists are used throughout.

## minorities_figdata.json

What the three figures in "Too visible to tolerate" read. Written by
`pipeline/build_minorities.py` from the editorial evidence pack of 3 October
2026 (`issues/2026-10-issue-3/blasphemy/figures-data/minority-feature-2026-10-03/evidence`
in the working folder). Correlations under `corr` are copied from the pack's
model outputs, not re-estimated; `checks` holds every tally quoted in the copy.

## tlp_margin_seats_2024.csv

**Indicator:** For each of the 266 National Assembly general seats at the 2024
general election: the winner's margin over the runner-up, the votes and
finishing position of Tehreek-e-Labbaik Pakistan (TLP), whether TLP finished
third or lower and polled more than the margin, and the share of TLP's voters
who would have had to vote for the runner-up instead for the winner to change.

- Candidate results: Aiwan-e-Jamhoor election archive (CC BY 4.0),
  `data/results_2024/na_2024_candidates.csv`, transcribed from published
  Election Commission of Pakistan results and including some outcomes revised
  after recounts. https://hibasameen.github.io/aiwan-e-jamhoor/
- Party is the one declared at the election. Candidates backed by the Pakistan
  Tehreek-e-Insaf stood as independents and are recorded as `Independent`;
  the file does not separate them from other independents.
- `margin` is the winner's votes minus the runner-up's. `above_margin` is true
  when `tlp_rank` is 3 or more and `tlp_votes` exceeds `margin`.
  `switch_needed_pct` is 100 × (`margin` + 1) / `tlp_votes`, for those seats
  only: the extra vote gives the runner-up a lead, not a tie.
- `band` groups `switch_needed_pct`: `under_25`, `25_to_50`, `50_to_100`, and
  `other` for every remaining seat, including the 43 TLP did not contest.
- `other_religious_votes` and `other_religious_pct` pool the 13 parties
  other than TLP that the archive classes as religious for 2024
  (`data/islamic_timeseries.json`, the list behind Aiwan-e-Jamhoor's
  religious-parties page): JUI-F, JIP, PMML, PRP, MWM, SIC, PAT, JUI-N,
  JUP-N, RJUI, JUIP, TLI and JUI-S. The classification is the archive's, used
  unchanged so that the two sites agree.

**Does not cover:** voters' second choices, which no return records. The count
of 69 seats is an upper limit on TLP's bearing on results, not an estimate of
seats it decided. Provincial assembly seats are not included.

**Caveat:** many 2024 results are disputed. The Form 47 sensitivity check
substitutes the official election-day margins while holding TLP's vote counts
fixed at the candidate compilation's values. It includes only the 218 of
TLP's 223 contested seats with available forms. NA-2, NA-4, NA-14, NA-16 and
NA-22 are excluded; none belongs to the main count of 69. Within the same
218 seats, each set of margins gives 69 qualifying seats, with 68 shared:
NA-253 qualifies only under Form 47 and NA-64 only under the later margin.
This does not independently validate the election outcome.
The extraction is at
https://aiwan.adaad.org/data/results_2024/na_2024_form47_official.csv.

## tlp_margins_figdata.json

What the Plotline's map reads: the seat rows above, seat outlines, province
outlines, and under `checks` every tally the text quotes. Written by
`data/2026-10/pipeline/build_tlp_margins.py`.

- Seat outlines: Aiwan-e-Jamhoor's digitisation of the Election Commission's
  2023 delimitation maps (`data/na_2023delim_app.geojson`, CC BY 4.0), on
  district base layers from geoBoundaries (CC BY 4.0) and OCHA COD (CC BY).
  The outlines are unofficial; the archive rates 203 as high confidence, 47
  as medium and 16 as low. Rounded here to two decimal places of a degree,
  and to three for the Lahore and Karachi panels.
- Vote share views (`o`, `ot` on each seat; `checks.religious`): the pooled
  share above and the strongest of the 13 parties in the seat. The
  concentration tallies (seats at 3 and 20 per cent or more, seats supplying
  half the vote, a Gini coefficient across all 266 seats) count a seat with
  no candidate as a zero.
- 2018 comparison (`checks.2018`): computed from Colin Cookman's
  `pakistan_election_results_2018` (GPL-3.0). That file is read for the
  totals only; none of its rows are republished here.
- Average TLP vote shares by winning-margin band (`checks.tlp_mean_share_by_margin`)
  and in Punjab (`checks.punjab.tlp_mean_share`) are unweighted means across
  seats TLP contested. The bands are under 10 percentage points, 10 to under
  20, and 20 or more; seats it did not contest are excluded from these means.

## bengali_divisions.csv

**Indicator:** For six named divisions of Pakistan's first Constituent
Assembly, 1948 to 1953, how members voted according to their vote on
postponing the decision on Bengali on 10 April 1952: `voted_for` of
`recorded` members on each side voted for the motion as worded. Only members
named in both division lists are counted, so each row has its own totals.
`house_ayes`, `house_noes` and `house_result` are the full House result.

- Source: Aiwan-e-Jamhoor's catalogue of 15 named divisions in the first
  Constituent Assembly (623 named votes), from the digitised Hansard of the
  National Assembly of Pakistan. https://hibasameen.github.io/aiwan-e-jamhoor/
- Provenance of this file: transcribed from the authors' Figure 1 in
  "Bengali and the terms of belonging - redraft 9 October 2026"; every count
  the article quotes was checked against it. The full House results are the
  printed Ayes and Noes in the division catalogue (`inputs/divisions.json`
  in the piece's figures-data folder). To be regenerated from the catalogue.

**Does not cover:** divisions outside the catalogue, which is not a census of
every division the Assembly held. A missing name is not treated as an
abstention, absence or vote.

## bengali_network_members.csv and bengali_network_links.csv

**Indicator:** The voting network in Figure 2. `bengali_network_members.csv`
lists the 36 members of the first Constituent Assembly with recorded votes on
at least four of seven sitting dates, 1948 to 1953, with the group the
community detection placed them in (`13 members` or `23 members`), their vote
on postponing the Bengali decision on 10 April 1952, the region whose seat
they held, the community recorded for them and the source behind that
record (`community_basis`, `community_source`), and their number of links.
`bengali_network_links.csv` lists the 257 links: pairs of members who voted
the same way in at least 80 per cent of their shared divisions
(`agreement`), with the number of shared sittings and divisions.

- The twelve divisions used exclude the language ballot, the 22 December
  1952 adjournment and the 19 April 1952 consideration motion. Agreement is
  averaged within each sitting and then equally across sittings. Groups are
  from weighted greedy modularity; the same partition holds at 75, 80 and
  90 per cent agreement with three or four shared sittings, and when any one
  sitting is dropped.
- Regional labels are Assembly representation from the National Assembly's
  cumulative membership roll, not birthplace. Community annotations come
  from Hansard speaker headings, statements in speeches and three secondary
  accounts, each cited per member; a General seat alone is not used to
  infer religion. Two members are `Not established`. Dhananjoy Roy’s
  Hindu annotation cites his identification as a Scheduled Caste member
  in the 19 April 1952 debate (PDF p. 37):
  https://www.na.gov.pk/uploads/documents/1434950503_508.pdf#page=37
  Birat Chandra Mandal’s Hindu annotation cites Prem Hari Barma naming him
  as one of the four Scheduled Caste members in the 14 October 1953 debate
  (PDF p. 2), added on 14 October 2026 after a reader’s report:
  https://www.na.gov.pk/uploads/documents/1435051954_527.pdf#page=2
- Provenance of these files: `network-nodes.csv`, `network-edges.csv` and
  `policy-profiles/member-profiles-with-source-check.json` in the piece's
  figures-data folder (`issues/2026-10-issue-3/what-bengali-meant/`), built
  by `working/debate-census/analyse_votes.py`.

## bengali_advocates.csv

**Indicator:** The ten members who argued clearly for recognising Bengali in
the complete 10 April 1952 debate, and how each was recorded in the language
division (10 April 1952), the East Bengal general seats division (19 April
1952) and the personal law exemption division (30 October 1953):
`reject_delay`, `postpone`, `for`, `against` or `not_listed`.

- Positions in the debate were read from the complete record, one position
  per speaker per proposition; Nurul Amin's qualified reaffirmation is kept
  out. Each speaker’s position was coded with AI assistance and checked manually against the Hansard text by Zoya Sameen.
- Provenance of this file: transcribed from the authors' Figure 3, as above.

## bengali_1956_positions.csv

**Indicator:** The eight speakers who explicitly endorsed both Bengali and
Urdu as state languages in the second Constituent Assembly's debate on
clause 221 on 16 February 1956, and the period of continued English each
stated: `ten_years_or_less`, `twenty_year_provision` or `no_position`.

- These are stated positions, not votes: the record of this sitting gives
  each amendment's result but no division list.
- Provenance of this file: transcribed from the authors' Figure 4, as above.

## Where cases of violence against women stop (piece 02)

Built by `Adaad/issues/2026-10-issue-3/judicial-system/code/vaw-path-site/build_figdata.py`
from the held analysis folders; nothing fetched at build time.

- `vaw_rape_returns_2024.csv` — SSDO, *Provincial Analysis of GBV in Pakistan 2024*, Table 4:
  rape cases registered, challaned, under investigation, under trial, acquitted, convicted and
  withdrawn in 2024 by province, from police and prosecution returns obtained under
  right-to-information laws. Annual columns, not a cohort. Islamabad's row comes from the
  prosecutor and includes older cases.
- `vaw_reporting_mics.csv` — MICS6 provincial rounds (Punjab 2017–18, Sindh 2018–19, KP 2019,
  Balochistan 2019–20), women aged 15–49: share physically attacked in the previous three years
  and share of attacked women who said the police were told, by group; men's reporting share by
  province. Provincial survey weights pooled without recalibration.
- `vaw_district_registrations.csv` — 122 districts: SSDO district registrations 2023 and 2024 for
  rape, kidnapping/abduction, domestic violence and honour killing; Census 2023 population;
  MICS6 district means for women's secondary schooling, phone ownership, urban share, acceptance
  of wife-beating and marriage before 18. Karachi is one unit.
- `vaw_district_map_figdata.json` — the map: simplified district outlines (the Issue 2 set),
  rates per 100,000, covariates, within-province Spearman correlations from the 4 Oct 2026
  reporting test, and counts of districts registering no case.
- `vaw_gbv_courts_2023.csv` — Law and Justice Commission of Pakistan, gender-based violence
  courts report 2023, outcome table by jurisdiction, as printed (categories sum to 29,828 of
  30,295 decisions).
- `vaw_shc_register_by_year.csv` — Sindh High Court case-law portal, every criminal judgment and
  order listed (45,230 after removing Islamabad-seat rows, pre-2005 and future-dated records),
  by order year and stage.
- `vaw_appeal_outcomes.csv`, `vaw_appeal_outcomes_by_court.csv` — Figures 6a and 6b: 269 distinct reported
  decisions (324 report entries) concerning rape or attempted rape against women or girls, Pakistan Case Law
  report years 2010–25, Supreme Court, five High Courts and Federal Shariat Court; the prior rape verdict and
  the operative order checked in the full judgment text (single-analyst audit, 11 Oct 2026). Counts of
  decisions by what was under review and the outcome, and by court; the nominal custodial penalty where all
  rape convictions were retained. Selected reported record, not appeal success rates.
- `vaw_appeal_decisions_coded.csv` — the 269 coded decisions with source URLs, citations, codes, flags and
  notes (codebook in the piece's method note). Judgment texts are not redistributed. Source URLs are the
  permanent id-only form (pakistancaselaw.com/case/<id>). Where a case title names a woman party, who in an
  appeal against acquittal is usually the complainant, the name is replaced by "[woman party, name withheld]"
  (Penal Code s. 376A); the citation identifies the report.
- `vaw_case_timelines.csv` — dates read from three judgment texts.
- `vaw_path_figdata.json` — everything the non-map figures draw, from the files above.

## District profiles: Ghotki and Umerkot (piece 09)

A descriptive comparison of two Sindh districts. `district_profiles.csv` has one row per
measure and columns for Ghotki and Umerkot. `district_profile_case_sources.csv` contains
their transcribed rows from published Human Rights Observer 2022–2025 editions. Nothing
is fetched at build time.

- Cases: Centre for Social Justice, *Human Rights Observer*, 2022 to 2025 editions,
  supplying cases through 2024. The 2023 edition prints only a top-ten district table for
  2022, so that year is excluded from totals and rates. From cases
  in 2023, the tables combine abduction with forced conversion and abduction alone;
  these categories cannot be separated by district. Mirpur Mathelo is included in Ghotki.
  The record comes from press reports and CSJ monitoring; coverage may differ by district.
- Non-Muslim residents and population shares: PBS Census 2023, Table 9.
- Rates: cases in 2021, 2023 and 2024, divided by three and by the district’s non-Muslim
  residents in Census 2023, multiplied by 100,000. Rounded to one decimal place.
- Poverty: Data Darbar’s multidimensional poverty headcount, from PSLM 2019–20 microdata.
- Girls aged 5 to 16 in school: Census 2023.
- Female literacy, ages 10 and over: Data Darbar’s district indicators, PBS Census 2023,
  Table 12. Field `t12_2023_literacy_ratio_female` in https://darbar.adaad.org/data/districts.json
  gives Ghotki 26.27 and Umerkot 25.11 per cent. The CSV retains those values; the article
  and chart round to one decimal place. Dataset: https://darbar.adaad.org/datasets/district-indicators/.
- Women aged 20–49 married before 18: Sindh MICS 2018–19.
- Honour killings: SSDO district police returns, 2023 and 2024. Zero means no registrations
  in the source.
- Convictions as a share of criminal verdicts: Sindh High Court district statements,
  all criminal cases in 12 monthly statements between 2016 and 2019. These court and police
  figures do not identify religion or outcomes of the reported forced-conversion and abduction cases.

## Spoken for: the gender gap in Pakistan's vote (piece 06)

- `women_turnout_seats_2018_2024.csv`: one row per National Assembly seat and election (270 in
  2018, 257 in 2024), with registered and polled voters by sex, the turnout gap (men's turnout
  rate minus women's, percentage points), the roll gap (men's share of registered voters minus
  women's), women's share of votes cast, the seat's largest mother tongue and its share, the
  share of each of the eight census mother tongues, and the urban share with the basis it was
  measured on. `women_turnout_figdata.json` carries the same rows for Figure 2. Built in the Adaad
  folder under `data/pk-women-turnout/` and `issues/2026-10-issue-3/women-turnout-gap/`.
  - Registered and polled voters by sex: ECP Form-47 returns. 2018 from the ECP's
    constituency-wise women voters turnout table (https://ecp.gov.pk/storage/files/1/pp4.pdf);
    NA-39 and NA-57 are derived from FAFEN's percentages because the ECP rows are wrong. 2024 from
    the ECP Form-47 scans (extracted in the Aiwan-e-Jamhoor project) and the Collective for
    Social Science Research's transcription (https://old.researchcollective.org/Documents/Elections_2024_data.pdf).
    Seats without a sex split are excluded. Three 2024 rows (NA-59, NA-186, NA-236) carry gaps
    their neighbours do not. On 14 October 2026 all twelve registered/polled sex counts were
    visually checked against page 1 of the archived Form-47 scans and matched. Values are
    retained as printed; this verifies transcription, not the source returns’ accuracy.
    NA-186 also prints the same total and valid votes despite 4,396 rejected votes.
    `women_turnout_source_checks.json` records the observed counts, PDF hashes and retention
    decision. The `chk` field in the figure JSON marks these unusual, scan-checked returns;
    it no longer denotes a pending transcription check.
  - Mother tongue: PBS Census 2017 and 2023, Table 11, carried from tehsils to seats through
    the 2018 polling scheme's census block codes and the ECP's 2024 final delimitation list
    (Form-7). A seat that takes part of a tehsil is given that tehsil's language mix.
  - Urban share: 2018 is the share of registered voters in urban census blocks of the polling
    scheme; 2024 is the 2023 census urban population allocated to seat parts. The two measures
    differ.
- `turnout_gap_by_language.csv`: Figures 1 and 4. Seats where one mother tongue is over 70 per
  cent of residents, with all voters in each group pooled before rates are taken. "No majority
  language" is every other seat.
- `turnout_gap_by_urban_share.csv`: Figure 3, top panel. Seats with fewer than 50 per cent
  Pashto speakers, in bands of urban share, 2018 and 2024, voters pooled.
- `turnout_gap_by_city.csv`: Figure 3, bottom panel. Seats over 60 per cent urban in nine
  cities, grouped by constituency name, voters pooled. The 2024 Rawalpindi row is NA-53 to
  NA-57 and holds no Islamabad seat; the 2018 row includes Islamabad-II and III.
- Rural Punjab is defined in the text as Punjab seats with `urban_pct < 30` in the
  downloadable seat file: 94 in 2018 and 73 in 2024. The pooled turnout gaps are 5.0105
  and 7.1661 points; removing NA-59 and NA-186 from 2024 gives 6.2848. The earlier working
  summary’s 74-seat count is superseded; the rounded 2024 gap remains 7.2 points.
- Polling-provision and panel robustness checks referred to in the method note use the 2018
  polling-station data compiled by Luke Sonnet with Colin Cookman (https://doi.org/10.17605/osf.io/mtsnd)
  and the 2024 station classifications of Gulzar, Khan and Khan (https://saadgulzar.com/pkge2024/).
  Those files are not shipped with the issue.

## Ticking more than one box (Method Notebook)

- Source: PEMRA Complaint Call Centre monthly complaint reports, January 2020 to September 2024
  (57 months: 48 on the 2020–23 four-column layout, 6 on the 2024 seven-column layout, 3 nil
  returns). Extracted from the regulator's PDF tables in the Adaad folder under
  `data/pk-pemra-enforcement/` (`extract_complaints.py`, `complaints_full_2020_2024.csv`,
  `complaints_full_2020_2024_coverage.csv`). Complaint texts are PEMRA's published records but
  carry complainants' names, so they are not shipped; the files here carry IDs and labels only.
  Complaint IDs are not unique across months (30 recur in November 2020 and April 2021, 20 in
  August and September 2022), so rows are keyed by `uid` = year-month-ID.
- Build: `Adaad/issues/2026-10-issue-3/methods-notebook/code/` — `normalise.py` (Urdu repair,
  language flags, near-duplicate clusters), `make_gold_sample.py` and `make_gold_sheet.py`
  (the 250-complaint gold set and its coding sheet), `classify.py` (dictionary, TF-IDF logistic
  regression, language-model labels; metrics; threshold curves), `figdata.py` (these files).
- `pemra_complaint_labels.csv`: one row per complaint — uid, complaint_id, year, month, channel
  (as printed, sometimes garbled by the extraction), language, cluster id and size, campaign
  flag, whether PEMRA tick-boxes exist, the language model's target and confidence, and the
  eight grounds as 0/1 from the complainant's ticks (`pemra_`), the dictionary (`dict_`), the
  statistical model (`model_`, threshold 0.5) and the language model (`llm_`).
- `pemra_gold_set.csv`: the 250 hand-coded complaints — uid, cluster, cluster size, stratum
  (campaign / pemra_ticked / stratified), year, language, the coder's eight grounds and target.
- `pemra_classifier_metrics.csv`: Figure 3 — per ground and classifier, precision, recall, F1,
  true and false positive rates and the confusion counts against the gold set.
- `pemra_threshold_curves.csv`: exercise 2 — for the statistical model, by ground and threshold
  (0.05 to 0.95), precision, recall, false positive rate, raw share of all complaints labelled,
  adjusted share and the gold set's share.
- `pemra_grounds_by_year.csv`: Figure 5 — share of each year's complaints raising each ground
  (language-model labels, every complaint counted once), with the year's complaint count and
  number of distinct texts.
- `pemra_cooccurrence.csv`: Figure 4 — complaints carrying each pair of grounds; the diagonal is
  the count carrying the ground.
- `pemra_monthly_campaigns.csv`: Figure 1 — complaints per month, how many sit in a campaign
  cluster of five or more, the regulator's coverage state, and the month's largest campaign.
- `pemra_codebook.md`: the coding rules the gold set and the language model followed.
- `pemra_figdata.json`: all of the above as the page draws it, plus the five exercise complaints
  (cleaned text, personal names removed) with every coding of each.
