private static IEnumerable ToOneBodySpinOrbitalTerms()

in Chemistry/src/DataModel/OrbitalIntegral/OrbitalIntegralExtensions.cs [91:115]


        private static IEnumerable<(HermitianFermionTerm, double)> ToOneBodySpinOrbitalTerms(
            this OrbitalIntegral orbitalIntegral,
            int nOrbitals,
            IndexConvention indexConvention)
        {
            // One-electron orbital integral symmetries
            // ij = ji
            var pqSpinOrbitals = orbitalIntegral.EnumerateOrbitalSymmetries().EnumerateSpinOrbitals();

            var coefficient = orbitalIntegral.Coefficient;

            foreach (var pq in pqSpinOrbitals)
            {
                var pInt = pq[0].ToInt(indexConvention, nOrbitals);
                var qInt = pq[1].ToInt(indexConvention, nOrbitals);
                if (pInt == qInt)
                {
                    yield return (new HermitianFermionTerm(new[] { pInt, qInt }.ToLadderSequence()), orbitalIntegral.Coefficient);
                }
                else if (pInt < qInt)
                {
                    yield return (new HermitianFermionTerm(new[] { pInt, qInt }.ToLadderSequence()), 2.0 * orbitalIntegral.Coefficient);
                }
            }
        }