# Reproduce the 2025 Electric registration share

The script expects the source PDF and its Poppler layout extraction beside it. The clean research ZIP deliberately omits the full third-party PDF and extraction. Retrieve the original from LTA when reproducing; do not infer that a future rolling-URL file is the inspected edition.

Source URL:
https://www.lta.gov.sg/content/dam/ltagov/who_we_are/statistics_and_publications/statistics/pdf/MVP02-2_New_Cars_by_make.pdf

Inspected edition: downloaded 1 October 2026; labelled Annual Vehicle Statistics 2025; SHA-256 f67067ef615027c959a4723724233b2381d956c99e2c9f0181012b37df4b84f2. The PDF metadata modification date is not a publisher release/revision date.

Requirements: Python 3 standard library and Poppler pdftotext. The independent check used pdfplumber table-cell extraction, but the minimal script requires no Python packages.

1. Download the official source as lta-mvp02-2-2025.pdf in the script directory
2. Compute SHA-256 and compare it with the inspected hash. If it differs, inspect years, columns, scope and layout before proceeding; do not claim exact reproduction of this edition
3. Run: pdftotext -layout lta-mvp02-2-2025.pdf lta-mvp02-2-2025.txt
4. Run: python reproduce-calculation.py
5. Inspect the generated row CSV, JSON and calculation-results.json. The current script is artifact-specific and deliberately selects the final Total column, not the last number anywhere on a row

Expected results: 212 multi-year table rows, of which 164 have positive 2025 values; Electric total 23,684; all-car total 52,678; share 44.9599453282%; nearest one decimal 45.0%. The script validates the summed total and numerator. Inspect pages 1–4 visually and verify the page-4 official exclusions. Do not mix the older tables on subsequent PDF pages or double-count the printed total row.

Fuel categories: Electric 23,684; Petrol-Electric 20,435; Petrol 7,638; Petrol-Electric (Plug-In) 918; Diesel 3; Diesel-Electric 0. Both AMD and PI importer types are retained. The script does not equate all BYD registrations with Electric or include plug-in hybrids in the Electric numerator.

For conventional nearest/half-up rounding to 45.1%, fixed numerator 23,684 requires 52,456.2569 < denominator <= 52,572.6970, or integer 52,457–52,572. Fixed denominator 52,678 requires 23,731.439 <= numerator < 23,784.117, or integer 23,732–23,784. The arrays in calculation-results.json report numeric bounds; the endpoint semantics are stated here. These are counterfactual ranges, not alternative observed totals.

Reproducing the result checks processing and arithmetic; it does not create another dataset, audit the registration system or prove the accuracy of every underlying record.
