Programmers FAQ

C++ Style in PSI4

  1. Prefer nullptr to 0 or NULL

  2. Prefer std::make_shared to direct use of new

  3. Prefer auto to explicit type declarations

  4. How to impose code style through your editor

  5. How to impose code style through Git hooks

  6. How to run code-style tools clang-format and yapf manually

Modules in PSI4

  1. How to name keywords in psi4/src/

  2. How to call BLAS & LAPACK in

  3. How to use low-level BLAS/LAPACK with psi4.core.Matrix

  4. How to name orbital bases (e.g., AO & SO)

  5. How to name orbital dimensions

  6. How to name orbital spaces (e.g., docc)

Interfacing with PSI4

  1. How to use an Add-On’s name in directory structure, build, and distribution

  2. How to integrate an Add-On into build, testing, and docs

Versioning PSI4

  1. How to bump a version

  2. How to create and remove an annotated Git tag on a remote

  3. What is the suggested GitHub workflow

  4. What Psi4 version is running

Releasing PSI4

  1. Annual

  2. Pre-Release (e.g., v1.3rc1)

  3. Release (e.g., v1.3)

  4. Post-Release (e.g., v1.8.2)


  1. How to use a local Add-On repository in the Psi4 build

  2. What is the directory layout of the installed or staged Psi4

  3. What is the suggested GitHub workflow

  4. How to highlight git merge conflicts in vi

  5. How to use gdb and lldb with Psi4

  6. How to locate non-ascii characters in the codebase

  7. How to Ignore the Bots


  1. Test Suite

  2. Adding PSIthon Test Cases

  3. Adding PsiAPI Test Cases

  4. How to set up PSIthon tests to run through pytest

  5. How to find tests without output.ref

  6. How to do GitHub issue management and code review