Over the past few decades, the measurement precision of some pulsar-timing
experiments has advanced from ~10 us to ~10 ns, revealing many subtle
phenomena. Such high precision demands both careful data handling and
sophisticated timing models to avoid systematic error. To achieve these goals,
we present PINT (PINT Is Not Tempo3), a high-precision Python pulsar timing
data analysis package, which is hosted on GitHub and available on Python
Package Index (PyPI) as pint-pulsar. PINT is well-tested, validated,
object-oriented, and modular, enabling interactive data analysis and providing
an extensible and flexible development platform for timing applications. It
utilizes well-debugged public Python packages (e.g., the NumPy and Astropy
libraries) and modern software development schemes (e.g., version control and
efficient development with git and GitHub) and a continually expanding test
suite for improved reliability, accuracy, and reproducibility. PINT is
developed and implemented without referring to, copying, or transcribing the
code from other traditional pulsar timing software packages (e.g., TEMPO and
TEMPO2) and therefore provides a robust tool for cross-checking timing analyses
and simulating pulse arrival times. In this paper, we describe the design,
usage, and validation of PINT, and we compare timing results between it and
TEMPO and TEMPO2.