forked from microsoft/Quantum
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathConfiguration.cs
126 lines (110 loc) · 4.25 KB
/
Configuration.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
// This file defines several structures used for configuring how the rest
// of the sample runs.
using System;
namespace Microsoft.Quantum.Chemistry.Samples
{
/// <summary>
/// Enumeration type for choice of Hamiltonian simulation algorithm
/// </summary>
public enum HamiltonianSimulationAlgorithm
{
ProductFormula,
Qubitization
};
/// <summary>
/// Configuration data for product formula simulation algorithm
/// </summary>
public struct ProductFormulaConfig
{
/// <summary>
/// Order of product formula integrator.
/// </summary>
public Int64 Order;
/// <summary>
/// Step-size of product formula
/// </summary>
public Double StepSize;
/// <summary>
/// Product formula configuration constructor.
/// </summary>
/// <param name="setStepSize">Step size of integrator</param>
/// <param name="setOrder">Order of integrator</param>
public ProductFormulaConfig(Double setStepSize, Int64 setOrder = 1)
{
Order = setOrder;
if (setOrder > 2)
{
throw new System.NotImplementedException($"Product formulas of order > 2 not implemented.");
}
StepSize = setStepSize;
}
};
/// <summary>
/// Configuration data for Qubitization simulation algorithm
/// </summary>
public struct QubitizationConfig
{
/// <summary>
/// Choice of quantum state preparation
/// </summary>
public QubitizationStatePrep QubitizationStatePrep { get; set; }
/// <summary>
/// Qubitization configuration constructor.
/// </summary>
/// <param name="setQubitizationStatePrep">Choice of quantum state preparation algorithm</param>
public QubitizationConfig(QubitizationStatePrep setQubitizationStatePrep = QubitizationStatePrep.MinimizeQubitCount)
{
QubitizationStatePrep = setQubitizationStatePrep;
}
}
/// <summary>
/// Enumeration type for choice of quantum state preparation.
/// </summary>
public enum QubitizationStatePrep
{
MinimizeQubitCount,
MinimizeTGateCount
}
/// <summary>
/// Configuration data for Hamiltonian simulation algorithm
/// </summary>
public struct HamiltonianSimulationConfig
{
/// <summary>
/// Choice of Hamiltonian simulation algorithm
/// </summary>
public HamiltonianSimulationAlgorithm HamiltonianSimulationAlgorithm { get; set; }
/// <summary>
/// Configuration for <see cref="HamiltonianSimulationAlgorithm.ProductFormula"/>.
/// </summary>
public ProductFormulaConfig ProductFormulaConfig { get; set; }
/// <summary>
/// Configuration for <see cref="HamiltonianSimulationAlgorithm.Qubitization"/>.
/// </summary>
public QubitizationConfig QubitizationConfig { get; set; }
/// <summary>
/// Hamiltonian simulation algorithm configuration constructor.
/// </summary>
/// <param name="setProductFormulaConfig">Product formula configuration</param>
public HamiltonianSimulationConfig(ProductFormulaConfig setProductFormulaConfig = new ProductFormulaConfig())
{
HamiltonianSimulationAlgorithm = HamiltonianSimulationAlgorithm.ProductFormula;
ProductFormulaConfig = setProductFormulaConfig;
// Default settings for all other parameters
QubitizationConfig = new QubitizationConfig();
}
/// <summary>
/// Hamiltonian simulation algorithm configuration constructor.
/// </summary>
/// <param name="setQubitizationConfig">Qubitization formula configuration</param>
public HamiltonianSimulationConfig(QubitizationConfig setQubitizationConfig = new QubitizationConfig())
{
HamiltonianSimulationAlgorithm = HamiltonianSimulationAlgorithm.Qubitization;
QubitizationConfig = setQubitizationConfig;
// Default settings for all other parameters
ProductFormulaConfig = new ProductFormulaConfig();
}
}
}