void CountTerms()
        {
            var hamiltonian = new OrbitalIntegralHamiltonian();

            hamiltonian.AddRange(orbitalIntegrals.Select(o => (o, o.Coefficient.ToDoubleCoeff())));
            var oneNorm = hamiltonian.Norm();

            Assert.Equal(orbitalIntegrals.Count(), hamiltonian.CountTerms());

            hamiltonian.AddRange(orbitalIntegrals.Select(o => (o, o.Coefficient.ToDoubleCoeff())));
            Assert.Equal(orbitalIntegrals.Count(), hamiltonian.CountTerms());

            hamiltonian.AddRange(orbitalIntegrals.Select(o => (o, o.Coefficient.ToDoubleCoeff())));
            Assert.Equal(orbitalIntegrals.Count(), hamiltonian.CountTerms());

            hamiltonian.AddRange(orbitalIntegrals.Select(o => (o, o.Coefficient.ToDoubleCoeff())));
            Assert.Equal(orbitalIntegrals.Count(), hamiltonian.CountTerms());
        }
Beispiel #2
0
        public void MakeHamiltonian()
        {
            // We create a `FermionHamiltonian` object to store the terms.
            var hamiltonian = new OrbitalIntegralHamiltonian(
                new[] {
                new OrbitalIntegral(new[] { 0, 1, 2, 3 }, 0.123),
                new OrbitalIntegral(new[] { 0, 1 }, 0.456)
            }
                )
                              .ToFermionHamiltonian(IndexConvention.UpDown);

            // We convert this fermion Hamiltonian to a Jordan–Wigner representation.
            var jordanWignerEncoding = hamiltonian.ToPauliHamiltonian(QubitEncoding.JordanWigner);

            // We now convert this representation into a format consumable by Q#.
            var qSharpData = jordanWignerEncoding.ToQSharpFormat();

            Assert.Equal(10, hamiltonian.CountTerms());
            Assert.Equal(6, jordanWignerEncoding.CountTerms());
        }