public static JordanWignerEncodingData GetQSharpData(string filename, string wavefunctionLabel, Config configuration)
        {
            using var reader = File.OpenText(filename);
            var broombridge = BroombridgeSerializer.Deserialize(reader).First();

            var orbHam = broombridge.OrbitalIntegralHamiltonian;

            var ferHam = orbHam.ToFermionHamiltonian(configuration.UseIndexConvention);

            var pauHam = ferHam.ToPauliHamiltonian();

            var hamiltonian = pauHam.ToQSharpFormat();

            var inputStates = broombridge.InitialStates ?? new Dictionary <string, FermionWavefunction <SpinOrbital> >();

            // If no states are provided, use the Hartree--Fock state.
            // As fermion operators the fermion Hamiltonian are already indexed by, we now apply the desired
            // spin-orbital -> integer indexing convention.
            FermionWavefunction <int> wavefunction = inputStates.ContainsKey(wavefunctionLabel)
                ? inputStates[wavefunctionLabel].ToIndexing(configuration.UseIndexConvention)
                : ferHam.CreateHartreeFockState(broombridge.NElectrons);

            var qSharpData = Microsoft.Quantum.Chemistry.QSharpFormat.Convert.ToQSharpFormat(hamiltonian, wavefunction.ToQSharpFormat());

            return(qSharpData);
        }
Exemplo n.º 2
0
        void OnExecute()
        {
            var logger = new LoggerFactory().CreateLogger <Program>();

            // Directory containing integral data generated by Microsoft.
            //Example Liquid data format files

            /*
             * "h2_sto3g_4.dat" // 4 SO
             * "B_sto6g.dat" // 10 SO
             * "Be_sto6g_10.dat" // 10 SO
             * "h2o_sto6g_14.dat" // 14 SO
             * "h2s_sto6g_22.dat" // 22 SO
             * "co2_sto3g_30.dat" // 30 SO
             * "co2_p321_54.dat" // 54 SO
             * "fe2s2_sto3g.dat" // 110 SO
             * "nitrogenase_tzvp_54.dat" // 108 SO
             */

            // For loading data in the format consumed by Liquid.
            logger.LogInformation($"Processing {Path}...");
            using var reader = File.OpenText(Path);
            var generalHamiltonian = (Format switch
            {
                DataFormat.Broombridge => BroombridgeSerializer
                .Deserialize(reader),
                DataFormat.LiQuiD => LiQuiDSerializer
                .Deserialize(reader),
                _ => throw new ArgumentException($"Invalid data format {Format}.")
            })
Exemplo n.º 3
0
        static void ParseBroombridge(string path, out int nElectrons, out FermionHamiltonian hamiltonian)
        {
            using var reader = File.OpenText(path);
            var description = BroombridgeSerializer
                              .Deserialize(reader)
                              .Single();

            nElectrons  = description.NElectrons;
            hamiltonian = description
                          .OrbitalIntegralHamiltonian
                          .ToFermionHamiltonian(IndexConvention.UpDown);
        }
Exemplo n.º 4
0
        public void RoundtripFcidumpIsCorrect()
        {
            // Start by converting the Fcidump data deserialized
            // in the test fixture out to Broombridge.
            using var writer = new StringWriter();
            BroombridgeSerializer.Serialize(writer, new [] { fixture.problem });

            // Now deserialize back from Broombridge.
            using var reader = new StringReader(writer.ToString());
            var roundtripData = BroombridgeSerializer.Deserialize(reader).Single();

            // Next, check that the resulting problem is the same.
            AssertThat(fixture.problem.IsEqualTo(roundtripData));
        }
Exemplo n.º 5
0
 // This method computes the gate count of simulation by all configurations passed to it.
 internal static async Task <IEnumerable <GateCountResults> > RunGateCount(
     string filename, IntegralDataFormat format, IEnumerable <HamiltonianSimulationConfig> configurations,
     string outputFolder = null
     )
 {
     using var reader = File.OpenText(filename);
     // To get the data for exporting to Q#, we proceed in several steps.
     var jordanWignerEncoding =
         // First, we deserialize the file given by filename, using the
         // format given by format.
         (format switch
     {
         IntegralDataFormat.Liquid => LiQuiDSerializer.Deserialize(reader),
         IntegralDataFormat.Broombridge => BroombridgeSerializer.Deserialize(reader),
         _ => throw new ArgumentException($"Invalid data format {format}.")
     })
        static void LoadFromBroombridgeFile()
        {
            // This is the name of the file we want to load
            var filename = @"LiH_0.2.yaml";
            // This is the directory containing the file
            var root = @"Molecules";

            // This deserializes Broombridge.
            using var reader = File.OpenText(Path.Combine(root, filename));
            var broombridge = BroombridgeSerializer.Deserialize(reader);

            // Note that the deserializer returns a list of electronic structure problem instances
            // as the file might describe multiple Hamiltonians. In this example, there is
            // only one Hamiltonian. So we use `.Single()`, which selects the only element of the list.
            var problem = broombridge.Single();

            // This extracts the `OrbitalIntegralHamiltonian` from Broombridge format,
            // then converts it to a fermion Hamiltonian, then to a Jordan–Wigner
            // representation.
            var orbitalIntegralHamiltonian = problem.OrbitalIntegralHamiltonian;
            var fermionHamiltonian         = orbitalIntegralHamiltonian.ToFermionHamiltonian(IndexConvention.UpDown);
            var jordanWignerEncoding       = fermionHamiltonian.ToPauliHamiltonian(Paulis.QubitEncoding.JordanWigner);

            // The desired initial state, assuming that a description of it is present in the
            // Broombridge schema.
            var state        = "|E1>";
            var wavefunction = problem.InitialStates[state].ToIndexing(IndexConvention.UpDown);

            // This creates the qSharpData consumable by the Q# chemistry library algorithms.
            var qSharpHamiltonianData  = jordanWignerEncoding.ToQSharpFormat();
            var qSharpWavefunctionData = wavefunction.ToQSharpFormat();
            var qSharpData             = QSharpFormat.Convert.ToQSharpFormat(qSharpHamiltonianData, qSharpWavefunctionData);

            Assert.True(wavefunction.Method == StateType.SparseMultiConfigurational);
            Assert.True(jordanWignerEncoding.SystemIndices.Count() == 12);
        }