Crate Dependency Graph

The diagrams below are derived from the current production Rust module layout in crates/*/src. They are intended to be updated whenever crate/module boundaries change. Test-only modules are omitted for readability.

Crate Dependency Graph

flowchart LR
   common[common]
   basis[basis]
   integral[integral]
   dft[dft]
   solvent[solvent]
   symmetry[symmetry]
   iooq[iooq]
   scf[scf]
   posthf[posthf]
   geometry[geometry]
   driver[driver]

   common --> basis
   common --> integral
   common --> dft
   common --> symmetry
   common --> iooq
   common --> geometry
   common --> scf
   common --> posthf

   basis --> integral
   integral --> scf
   dft --> solvent
   integral --> solvent
   dft --> scf
   integral --> posthf

   symmetry --> scf
   solvent --> scf

   scf --> driver
   posthf --> driver
   iooq --> driver
   symmetry --> driver
   geometry --> driver
   dft --> driver
   solvent --> driver
   basis --> driver
   integral --> driver

Dependency Rules

  • common is the root crate — all other crates depend on it
  • basisintegral (integrals need basis set data)
  • integralscf (SCF needs integrals)
  • dftscf (SCF builds the Kohn–Sham Fock matrix via XC integration)
  • dft + integralsolvent (solvent needs DFT grid + integral evaluation for cavity)
  • solventscf (solvent-coupled SCF uses ReactionField trait)
  • symmetryscf (SCF uses symmetry for orbital labeling)
  • integralposthf (MP2/CC need integrals)
  • All crates → driver (binary links everything)
  • No cycles in the dependency graph